Я сгенерировалru_US.utf8,et_EE.iso88591иru_RU.utf8Файлы локализации. Теперь, если я попытаюсь изменить любую из переменных локали наru_RU.utf8илиru_US.utf8, то это не имеет никакого эффекта:
# locale -a
C
en_US.utf8
et_EE
et_EE.iso88591
POSIX
ru_RU.utf8
# LC_TIME=ru_RU.utf8
# locale | grep LC_TIME
LC_TIME="et_EE.iso88591"
# LC_TIME="ru_RU.utf8"
# locale | grep LC_TIME
LC_TIME="et_EE.iso88591"
#
Однако, если я изменюЯЗЫК=переменная, затем все остальные переменные, кромеЯЗЫК=иLC_ALL=принять значениеЯЗЫК=переменная. Есть ли способ изменить каждую переменную локали по отдельности? Кроме того, я прав, что переменные локали не являются обычными переменными оболочки, а скорее параметрамилокальполезность?
решение1
Вы можете задать любую категорию локали независимо. LANG
Применяется только к категориям, которые не заданы явно.
LANG
и LC_xxx
являются обычными переменными окружения. Они не являются настройками для locale
утилиты: locale
программа не участвует в обработке локали, это просто небольшая утилита для отчета о текущих и доступных настройках локали.
Когда вы пишете LC_TIME=ru_RU.utf8
, это не устанавливает переменную окружения, а только переменную оболочки. Переменные оболочки являются внутренними для оболочки, они не видны другим программам. Переменные окружения, с другой стороны, наследуются программами, которые запускает оболочка. Вам также необходимо экспортировать переменную в окружение:
$ LC_TIME=ru_RU.utf8
$ locale | grep LC_TIME
LC_TIME="et_EE.iso88591"
$ export LC_TIME
$ locale | grep LC_TIME
LC_TIME="ru_RU.utf8"
или напрямую
$ export LC_TIME=ru_RU.utf8
$ locale | grep LC_TIME
LC_TIME="ru_RU.utf8"
решение2
Я полагаю, что в дистрибутивах на базе Fedora/CentOS/RHEL вы можете изменить локаль на одну из локалей, отображаемых при запуске команды locale -a
в этом системном файле:
/etc/sysconfig/i18n
Например, в моей системе Fedora 14:
$ more /etc/sysconfig/i18n
LANG="en_US.UTF-8"
SYSFONT="latarcyrheb-sun16"
В GNOME вы можете запустить приложение справки:
system-config-language
Что вызывает следующий графический интерфейс:
Я думаю, что для дистрибутивов Debian/Ubuntu это немного отличается. Я думаю, это этот файл:
/etc/default/locale
Я полагаю, что это переменные среды, но не совсем понимаю, как приложения их используют, если используют вообще.
Рекомендации
решение3
Обратите внимание, что, по крайней мере, в RedHat 6, если задан LC_ALL, то настройка других переменных среды LC_* не будет иметь никакого эффекта, поскольку LC_ALL имеет приоритет над всеми другими переменными среды LC_*.
[root@nbu76 bin]# LC_TIME=en_US.UTF-8
[root@nbu76 bin]# export LC_TIME
[root@nbu76 bin]# locale
LANG=en_US.UTF-8
LC_CTYPE="en_IE"
LC_NUMERIC="en_IE"
LC_TIME="en_IE"
...
LC_ALL=en_IE
[root@nbu76 bin]# unset LC_ALL
[root@nbu76 bin]# locale
LANG=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
LC_NUMERIC="en_US.UTF-8"
LC_TIME=en_US.UTF-8
...
LC_ALL=
[root@nbu76 bin]# export LC_TIME=en_IE
[root@nbu76 bin]# locale
LANG=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
LC_NUMERIC="en_US.UTF-8"
LC_TIME=en_IE
....
LC_ALL=
решение4
В системах Debian можно запустить , dpkg-reconfigure locales
чтобы установить основной язык и сделать другие доступными; затем можно запустить , update-locale
чтобы установить LANGUAGE
переменную окружения, /etc/default/locale
чтобы иметь запасные языки.