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

Форум предназначен для новичков. В нем предполагается рассматривать вопросы, которые встают на первых этапах освоения Linux
Goliath
Неотъемлемая часть форума
Сообщения: 214
Зарегистрирован: 22 май 2003, 12:15

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

Сообщение Goliath »

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

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

ab
Маньяк
Сообщения: 198
Зарегистрирован: 28 май 2002, 19:02
Откуда: Espoo, Finland

Сообщение ab »

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

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

Аватара пользователя
fa3a
Неотъемлемая часть форума
Сообщения: 619
Зарегистрирован: 25 июл 2003, 17:22
Откуда: Minsk

Сообщение 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
Never touch the running program!!!

Аватара пользователя
fa3a
Неотъемлемая часть форума
Сообщения: 619
Зарегистрирован: 25 июл 2003, 17:22
Откуда: Minsk

Сообщение fa3a »

Смена локали у уже запущеного приложения технически возможна (хотя и с огромным трудом)
это интересно каким же образом?? в смысле поделитесь плиз как изменить локаль, и что особенно важно, язык интерфейса у уже выполняющейся программы.. зарание сенкс! :-)
Never touch the running program!!!

Аватара пользователя
fa3a
Неотъемлемая часть форума
Сообщения: 619
Зарегистрирован: 25 июл 2003, 17:22
Откуда: Minsk

Сообщение 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.
Never touch the running program!!!

Goliath
Неотъемлемая часть форума
Сообщения: 214
Зарегистрирован: 22 май 2003, 12:15

Сообщение Goliath »

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

Аватара пользователя
fa3a
Неотъемлемая часть форума
Сообщения: 619
Зарегистрирован: 25 июл 2003, 17:22
Откуда: Minsk

Сообщение fa3a »

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

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

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

Ответить