Страница 1 из 1

Как сменить локаль "на ходу"?

Добавлено: 03 янв 2004, 21:18
Goliath
Дистрибутив SuSE 8.1. Локаль там задается в файлах /etc/suseconfig/profile и /etc/sysconfig/language. Когда я пытаюсь сменить локаль через экспорт переменной LANG, команды "locale" и "echo $LANG" сообщают, что локаль сменилась, однако на деле программы продолжают работать со старой. Если сменить в вышеуказанных файлах и перегрузиться, то все OK.

Почему не работает смена через реэкспорт и можно ли вообще менять локаль таким образом?

Добавлено: 03 янв 2004, 22:48
ab
Смена локали в окружении некоторой оболочки действуют на те программы, которые будут запущены из этой оболочки _после_ изменения.

Смена локали у уже запущеного приложения технически возможна (хотя и с огромным трудом), а практически бессмысленна, так как практически все учитывающие локаль приложения подстройку производят почти сразу после запуска, а в дальнейшем считают, что они работают в той же локали.

Добавлено: 03 янв 2004, 22:58
fa3a
во-первых надобно уточнить для каких именно приложений требуется сменить локаль.

1. если для "частично выбранной", например abiword или gedit то достаточно в консоли (xterm, kterm, gnome-terminal) экспортнуть LANG а иногда в SuSE еще и LC_ALL для надежности и после этого стартовать отдельное приложение abiword, gedit и т.д.

2. Если же вопрос был о смене языка всего ГУИ-шного интерфейса KDE либо GNOME сессий, то естественно требуется рестарт всего ГУИ интерфейса.. так как он сам является отдельно написаной программой.. :-)

3. если требуется например из en_US-шной ГУИ сессии запусткать отдельно выбранное приложение на руском или белорусском (например mozilla), то для етого можно написать свой скрипт в котором перед запуском приложения будет экспортироваться LANG и/или LC_ALL..

gl

Добавлено: 03 янв 2004, 23:01
fa3a
Смена локали у уже запущеного приложения технически возможна (хотя и с огромным трудом)
это интересно каким же образом?? в смысле поделитесь плиз как изменить локаль, и что особенно важно, язык интерфейса у уже выполняющейся программы.. зарание сенкс! :-)

Добавлено: 03 янв 2004, 23:24
fa3a
а вообще программно насколько я знаю локаль поднимается с помощью 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.

Добавлено: 05 янв 2004, 09:45
Goliath
Есть скрипт, который выводит текст в KOI8, а локаль cp1251. Для него и нужно сменить локаль. Собственно с ним я тоже проверял - не работает.

Добавлено: 05 янв 2004, 13:01
fa3a
надо разделять понятия локаль и code page... локаль состоит из языка, страны, кодовой страницы.. так вот для приложений важен язык и страна, а кодировки могут быть разными.. например:

Код: Выделить всё

ru_RU.koi8r
ru -- means russian language
RU -- country Russia
koi8r -- code page
если проблемма в кодировке, но надо писать перекодировочные таблицы на соответсвие символов.. а локаль здесь непричем..