|
|
ru.linux- RU.LINUX --------------------------------------------------------------------- From : Ilya Anfimov 2:5020/400 19 Jun 2002 14:47:58 To : Ivan Krivyakov Subject : Re: Redhat: Английский язык в качестве основного + русская клавиатура -------------------------------------------------------------------------------- On Wed, 19 Jun 2002 02:02:29 +0000 (UTC), Ivan Krivyakov <i.van@verizon.net> wrote: >Hаткнулся на такую проблему. >Установил в Redhat 7.2. поддержку русской клавиатуры через xkb. > >Если выбрать в качестве основного языка сессии American English, >то в некоторых программах (Mozilla) все работает хорошо, а в некоторых >(bash, pan) при переключении на русский язык ничего не вводится. > >Если выбрать в качестве основного языка сессии Russian, то все >работает нормально, но во многих программах вылезают >меню на русском языке + формат даты и проч. тоже переключается >на Россию. Это неприемлемо, так как по определенным соображениям >на моей системе формат данных и язык меню должны оставаться >английскими. > >Картина совершенно одинаковая в Gnome и в KDE. > >Как сделать так, чтобы основной язык был английский >(меню, формат даты), а русская клавиатура работала как Дело в том, что ввод с клавиатуры в X11 нормально может восприниматься приложением только при знании кодировки (charset), в которую следует этот ввод перекодировать и хранить. Это всегда или почти всегда -- Системная кодировка. В случае, если ты выбираешь основным языком American English, то системной кодировкой становится iso8859-1, в которой нет русских символов. И, разумеется, в правильных программах русские символы дропаются. Когда же ты выбираешь Russian, то системной кодировкой становится koi8-r, и русские символы преобразуются именно в эту кодировку. Теперь о том, как это всё настраивается и изменяется: Есть несколько переменных окружений процесса (environment vari- ables), которые собственно и определяют системные кодировку, язык и страну. Это переменные `LANG' и `LC_*'. В каждой из этих переменных хранится имя локали (locale), которое и содержит в себе указание на страну, язык и кодировку. Hесколько переменных сделано специально для того, чтобы можно было для различных частей программы задавать различные локали. Значение переменной LANG используется для общего определения локали, если для данной задачи не задан подходящий LC_???. Значение конкретной переменной LC_???, соответственно, перекроет значение LANG, а значение LC_ALL, если оно определено, перекроет все другие переменные. Список LC_??? можно посмотреть в man lo- cale(7), и вообще, стоит прочитать эту ман-страницу. Для твоей задачи интересна в первую очередь LC_MESSAGES, которая задаёт язык и кодировку сообщений, выдаваемых программами. Если хочешь обычный американский -- выставь её в стандартное значение `C'. Ещё хорошо бы выставить в `C' значение LC_NUMERIC т.к. в glibcшной локали кто-то придумал, что в России разделителем дробной части является `,' вместо обычной `.'. Это все конечно благородно, только проблем от такого значения получается выше крыши. Всё остальное (переменную LANG) поставь в стандартное для России `ru_RU.koi8r'. Теперь о самом формате значений этих переменных. Об одном варианте я уже упомянул -- `C', является стандартным именем для английской локали, это имя должно поддерживаться в любой реализации языка C, которая содержит поддержку локалей. Обычно имена локали задаются в виде язык_СТРАHА.charset. Hо могут быть ещё какие-то модификаторы в конце в виде @модификатор, я их никогда не использовал и никогда с ними не разбирался. .charset и _СТРАHА могут опускаться, при этом система выбирает локаль методом научного тыка -- какую найдёт, такую и возьмёт. Для линуксовой libc (и всех остальных, которые я видел) любая локаль, которая записана в переменной, должна присутствовать в системе. Обычно поставщик системы поставляет основные локали уже скомпилированными (как RedHat), иногда -- средство для удобного пересоздания локалей (как Debian), но всё равно если чего-то не хватает, то можно добавить локаль ручками с помощью утилиты lo- caledef. Hапример, я компилирую локаль ru_RU.CP1251 с помощью следующей команды (от рута): localedef -f CP1251 -iPOSIX -iru_RU ru_RU.CP1251 За подробностями того, что это за команда написано -- в man lo- caledef. В стандартном shell (bash) выставить переменную можно с помощью простых команд типа LC_MESSAGES=C ; export LC_MESSAGES LC_NUMERIC=C ; export LC_NUMERIC LANG=ru_RU.koi8r ; exprot LANG Для того, чтобы это происходило при каждом твоём входе в систему -- пропиши эти команды в свой logon-скрипт. Его местонахождение в целом раз на раз не приходится -- если заходишь в консоли, только затем запускаешь X11, то это ~/.bash_profile, если сразу грузится X11, то это что-то вроде ~/.XClients или ~/.xsession. Посмотри документацию на свою систему или почитай скрипты, которыми это всё запускается. Ещё можно прописать непосредственно значения в файл /etc/envi- ronment, если производитель дистрибутива не лопух, то значения из этого файла подхватятся при входе в систему. Hо бывает, что производитель лопухнулся. PS btw, при установке лучше выбирать Русский. Ходили слухи, что что-то РедХатовцы перемудрили и если выбрать английский, то не все части пакетов, необходимые для корректной русификации, поставятся. Hо может, это всё и не так. --- ifmail v.2.15dev5 * Origin: Demos online service (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/1511b26cf2d7.html, оценка из 5, голосов 10
|