Я создал файлы локализации en_US.utf8 , et_EE.iso88591 и ru_RU.utf8 . Теперь, если я попытаюсь изменить любую переменную локали на ru_RU.utf8 или en_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"
#
Однако если я изменю переменную LANG = , то все остальные переменные, кроме LANGUAGE = и LC_ALL =, принимают значение переменной LANG = . Есть ли способ изменить каждую переменную локали отдельно? Кроме того, правильно ли я, что переменные локали не являются обычными переменными оболочки, а больше похожи на параметры утилиты локали ?
источник
LANG
иLC_xxx
переменные окружения? мое тестирование показывает, что толькоLANG
и,LANGUAGE
иLC_MESSAGES
иLC_ALL
являются переменными среды, в то время как другие переменные любятLC_CTYPE
иLC_MONETARY
не являются переменными среды (также они не являются переменными оболочки)?env LC_TIME=en_GB date
сenv LC_TIME=fr_FR date
иenv PATH="$PATH" date
(очевидно, выберите локали, которые существуют в вашей системе). Очевидно, что каждая переменная может или не может быть установлена в среде данного процесса. Какое тестирование вы делали? Вы уверены, что приложение, которое вы использовали, ведет себя по-разномуLC_CTYPE
(довольно часто) иLC_MONETARY
(довольно редко)?printenv
команду, чтобы вывести список переменных окружения bash, и толькоLANG
и,LANGUAGE
иLC_MESSAGES
иLC_ALL
были перечислены как переменные окружения. Я также выполнил команду,set -o posix
а затем команду,set
чтобы получить переменные окружения и переменные оболочки bash, и толькоLANG
иLANGUAGE
и,LC_MESSAGES
иLC_ALL
были перечислены. Таким образом, это означает, чтоLANG
и,LANGUAGE
иLC_MESSAGES
иLC_ALL
являются переменными среды, а остальные переменные локали - нет, а также они не являются переменными оболочки.LANG
,LANGUAGE
,LC_MESSAGES
иLC_ALL
. (Либо вы сделали это явно, либо ваш дистрибутив, либо ваш системный администратор сделал это за вас.) Вы можете установить переменную среды под любым (синтаксически допустимым) именем! Но некоторые имена имеют значение для некоторых приложений, а некоторые - нет.LC_MESSAGES
,LC_CTYPE
,LC_TIME
И так далее используются приложениями , которые заботятся о языке сообщений об ошибках, кодировку символов, формат времени, и так далее.LC_ALL
переопределяет все остальные настройки, поэтому значение других переменных локали не имеет значения. Обычно он используется только временно, чтобы заставить программу использовать данную локаль, нет смысла использовать ее в обычной среде.В дистрибутивах на основе Fedora / CentOS / RHEL я считаю, что вы можете изменить локаль на одну из локалей, отображаемых при запуске
locale -a
команды в этом системном файле:Например, в моей системе Fedora 14:
Под GNOME вы можете запустить приложение справки:
Который вызывает этот графический интерфейс:
Я думаю, что это немного по-другому для дистрибутивов Debian / Ubuntu. Я считаю, что это файл:
Я считаю, что они являются переменными среды, но не совсем уверены, как приложения используют их, если вообще используют.
Ссылки
источник
По крайней мере, на RedHat 6 обратите внимание, что если установлен LC_ALL, то установка других переменных среды LC_ * не будет иметь никакого эффекта, поскольку LC_ALL имеет приоритет над всеми другими переменными среды LC_ *.
источник
В системах Debian можно
dpkg-reconfigure locales
установить основной язык и сделать доступными другие языки; затем можно запустить,update-locale
чтобы установитьLANGUAGE
переменную среды,/etc/default/locale
чтобы иметь запасные языки.источник
dpkg-reconfigure locales
, неlocale