Как изменить переменную среды локали?

Как изменить переменную среды локали?

Я сгенерировал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

Что вызывает следующий графический интерфейс:

             сс языка gui

Я думаю, что для дистрибутивов 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чтобы иметь запасные языки.

Связанный контент