Как сменить локаль "на ходу"?
Как сменить локаль "на ходу"?
Дистрибутив SuSE 8.1. Локаль там задается в файлах /etc/suseconfig/profile и /etc/sysconfig/language. Когда я пытаюсь сменить локаль через экспорт переменной LANG, команды "locale" и "echo $LANG" сообщают, что локаль сменилась, однако на деле программы продолжают работать со старой. Если сменить в вышеуказанных файлах и перегрузиться, то все OK.
Почему не работает смена через реэкспорт и можно ли вообще менять локаль таким образом?
Почему не работает смена через реэкспорт и можно ли вообще менять локаль таким образом?
Смена локали в окружении некоторой оболочки действуют на те программы, которые будут запущены из этой оболочки _после_ изменения.
Смена локали у уже запущеного приложения технически возможна (хотя и с огромным трудом), а практически бессмысленна, так как практически все учитывающие локаль приложения подстройку производят почти сразу после запуска, а в дальнейшем считают, что они работают в той же локали.
Смена локали у уже запущеного приложения технически возможна (хотя и с огромным трудом), а практически бессмысленна, так как практически все учитывающие локаль приложения подстройку производят почти сразу после запуска, а в дальнейшем считают, что они работают в той же локали.
/ AB
во-первых надобно уточнить для каких именно приложений требуется сменить локаль.
1. если для "частично выбранной", например abiword или gedit то достаточно в консоли (xterm, kterm, gnome-terminal) экспортнуть LANG а иногда в SuSE еще и LC_ALL для надежности и после этого стартовать отдельное приложение abiword, gedit и т.д.
2. Если же вопрос был о смене языка всего ГУИ-шного интерфейса KDE либо GNOME сессий, то естественно требуется рестарт всего ГУИ интерфейса.. так как он сам является отдельно написаной программой..
3. если требуется например из en_US-шной ГУИ сессии запусткать отдельно выбранное приложение на руском или белорусском (например mozilla), то для етого можно написать свой скрипт в котором перед запуском приложения будет экспортироваться LANG и/или LC_ALL..
gl
1. если для "частично выбранной", например abiword или gedit то достаточно в консоли (xterm, kterm, gnome-terminal) экспортнуть LANG а иногда в SuSE еще и LC_ALL для надежности и после этого стартовать отдельное приложение abiword, gedit и т.д.
2. Если же вопрос был о смене языка всего ГУИ-шного интерфейса KDE либо GNOME сессий, то естественно требуется рестарт всего ГУИ интерфейса.. так как он сам является отдельно написаной программой..
3. если требуется например из en_US-шной ГУИ сессии запусткать отдельно выбранное приложение на руском или белорусском (например mozilla), то для етого можно написать свой скрипт в котором перед запуском приложения будет экспортироваться LANG и/или LC_ALL..
gl
Never touch the running program!!!
а вообще программно насколько я знаю локаль поднимается с помощью setlocale(LC_ALL, "") т.е. устанавливается локаль из окружения
man setlocale() писал(а): If locale is "", each part of the locale that should be modified is set
according to the environment variables. The details are implementation
dependent. For glibc, first (regardless of category), the environment
variable LC_ALL is inspected, next the environment variable with the
same name as the category (LC_COLLATE, LC_CTYPE, LC_MESSAGES, LC_MONE-
TARY, LC_NUMERIC, LC_TIME) and finally the environment variable LANG.
The first existing environment variable is used. If its value is not a
valid locale specification, the locale is unchanged, and setlocale
returns NULL.
Never touch the running program!!!
надо разделять понятия локаль и code page... локаль состоит из языка, страны, кодовой страницы.. так вот для приложений важен язык и страна, а кодировки могут быть разными.. например:
если проблемма в кодировке, но надо писать перекодировочные таблицы на соответсвие символов.. а локаль здесь непричем..
Код: Выделить всё
ru_RU.koi8r
ru -- means russian language
RU -- country Russia
koi8r -- code page
Never touch the running program!!!