BSDPORTAL.RU

На этом сайте обсуждаются вопросы использования ОС FreeBSD
 Портал  •  Статьи  •  Форум  •  Wiki  •  Поиск  •  FAQ  •  Обои  •   Официальная документация  •  Новые темы 

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 77 ]  На страницу 1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения: Русификация консоли
СообщениеДобавлено: Чт 17 янв, 2013 11:57 pm 
Не в сети

Зарегистрирован: Вс 28 ноя, 2010 9:10 am
Сообщения: 176
Форумчане, помогите, пожалуйста, решить такую проблему.

Сегодня сделал попытку русифицировать консоль FreeBSD так, чтобы была возможность ввода и отображения на экране русских букв в кодировке KOI-8R. Речь идет в данном случае о чистой консоли, т. е. экране в текстовом режиме, а не о консольном окошке в иксах (типа xterm). Отображение кириллических символов вроде бы у меня пошло успешно, но вот переключить раскладку клавиатуры с латиницы на кириллицу для того, чтобы можно было начать ввод символов на русском языке никак не получается. Насколько я понял из Интернета, в раскладке ru.koi8-r для переключения между двумя языками служит клавиша CapsLock. Жму, находясь в шелле (у меня в данный момент установлен tcsh), на эту клавишу, начинаю вводить символы, вместо русских букв слышу пищание из динамика корпуса или вижу, что вводятся какие-то контрольные символы: стрелки, Enter и т. п.

Вроде русифицировал консоль строго по инструкции: в файл /etc/rc.conf добавил несколько строк, связанных с добавлением таблиц отображения, в /etc/ttys все cons25 исправил на cons25r.

На всякий случай привожу содержимое /etc/rc.conf целиком и кусок /etc/ttys, в котором я заменил cons25 -> cons25r.

/etc/rc.conf
Код:

# -- sysinstall generated deltas -- # Wed Jan  9 18:08:16 2013
# Created: Wed Jan  9 18:08:16 2013
# Enable network daemons for user convenience.
# Please make all changes to this file, not to /etc/defaults/rc.conf.
# This file now contains just the overrides from /etc/defaults/rc.conf.
hostname="Computer1"
ifconfig_re0="DHCP"
keymap="ru.koi8-r"
keychange="61 ^[[K"
scrnmap="koi8-r2cp866"
font8x16="cp866b-8x16"
font8x14="cp866-8x14"
font8x8="cp866-8x8"


Кусок /etc/ttys
Код:
#
ttyv0   "/usr/libexec/getty Pc"         cons25r      on  secure
# Virtual terminals
ttyv1   "/usr/libexec/getty Pc"         cons25r      on  secure
ttyv2   "/usr/libexec/getty Pc"         cons25r      on  secure
ttyv3   "/usr/libexec/getty Pc"         cons25r      on  secure
ttyv4   "/usr/libexec/getty Pc"         cons25r      on  secure
ttyv5   "/usr/libexec/getty Pc"         cons25r      on  secure
ttyv6   "/usr/libexec/getty Pc"         cons25r      on  secure
ttyv7   "/usr/libexec/getty Pc"         cons25r      on  secure
ttyv8   "/usr/local/bin/xdm -nodaemon"   xterm      off  secure


Подскажите, что я делаю неправильно?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт 18 янв, 2013 12:09 am 
Не в сети
Аватара пользователя

Зарегистрирован: Ср 26 май, 2004 10:37 pm
Сообщения: 334
Откуда: Ukraine, Kyiv
Какая версия FreeBSD? 8-ка?

P.S.
Вообще-то, по данной "проблеме" в инете полно информации ...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт 18 янв, 2013 12:53 am 
Не в сети

Зарегистрирован: Вс 28 ноя, 2010 9:10 am
Сообщения: 176
Да, 8-ка, FreeBSD 8.3.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт 18 янв, 2013 1:07 am 
Не в сети
Аватара пользователя

Зарегистрирован: Ср 26 май, 2004 10:37 pm
Сообщения: 334
Откуда: Ukraine, Kyiv
JohnnieWalker писал(а):
Да, 8-ка, FreeBSD 8.3.

Ну тогда в зависимости какой у вас shell,
нужно установить нужные параметры.
Например, для csh:
Код:
setenv   LANG ru_RU.KOI8-R
setenv   LC_ALL ru_RU.KOI8-R
setenv   MM_CHARSET KOI8-R

Во всяком случае, всё уже давно написано в хэнбуке ... 8)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт 18 янв, 2013 1:16 am 
Не в сети

Зарегистрирован: Вс 28 ноя, 2010 9:10 am
Сообщения: 176
В общем, вашу идею понял.
Что сама консоль в принципе русифицирована и принимать/выводить русские символы она умеет, теперь нужно всем программам указать русскоязычную локаль. Т. е. через переменные окружения сообщить им, что они должны поддерживать русский язык. И пищание и странные действия shell'а в моем случае в ответ на нажатие клавиш в русской раскладке - это не проблема консоли (которая кириллицу уже понимает), а проблема данного шелла, который коды русских букв без соответствующей локализации просто отфильтровывает и игнорирует. Правильно я суть примерно понял?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт 18 янв, 2013 1:20 am 
Не в сети
Аватара пользователя

Зарегистрирован: Ср 26 май, 2004 10:37 pm
Сообщения: 334
Откуда: Ukraine, Kyiv
Ну если не настроена локаль, то естественно, что вводимые "символы" правильно не воспринимаются ... :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт 18 янв, 2013 1:44 am 
Не в сети

Зарегистрирован: Вс 28 ноя, 2010 9:10 am
Сообщения: 176
w@sp писал(а):
Ну если не настроена локаль, то естественно, что вводимые "символы" правильно не воспринимаются ... :)


Ну понятно :)

На самом деле масса примитивных консольных программ вообще никакой такой интернализации, как я понимаю, не имеет. Они просто принимают на вход и выдают на выход набор кодов символов. А уж как его интерпретирует драйвер консоли - это его проблема. И для них локаль не имеет никакого значения, чхали они на нее.
Первый пример - программа cat, которая без проблем вывела мне содержимое файла на русском языке в KOI-8. Также программа залогинивания после переключения CAPSLock'ом в русскую раскладку стала в логине писать русские символы. А вот less и vi без локали похоже уже не выводят русского текста. Вместо русских букв их hex-коды. Видимо, это уже сложные программы и они настраиваются на национальный алфавит. И к таким же интернационализированным программам, видимо, относятся shell'ы. Без локали они отказываются работать с кодами чужих символов. Так что, как я понял, локаль это все-таки не проблема консоли, а проблема конкретных программ.

И еще один момент. Держу перед глазами handbook, и они в нем советуют вместо того, чтобы настраивать переменные окружения в оболочках (через файл, например, /etc/csh.login), настраивать локаль в классе логина (файлы /etc/login.conf для root'а и ~/.login_conf для обычного пользователя). Как пишут в хэндбуке, лучше это тем, что не надо будет каждую оболочку, которую пользователь будет устанавливать в систему, настраивать на нужную локаль. Настройка будет наследоваться всеми оболочками сама собой. Ничего не придумал, пересказываю хэндбук, подумал, вдруг вам это будет интересно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт 18 янв, 2013 1:57 am 
Не в сети
Модератор
Аватара пользователя

Зарегистрирован: Ср 08 ноя, 2006 2:53 pm
Сообщения: 5464
Откуда: СССР, Харьков
w@sp писал(а):
JohnnieWalker писал(а):
Да, 8-ка, FreeBSD 8.3.

Ну тогда в зависимости какой у вас shell,
нужно установить нужные параметры.
Например, для csh:
Код:
setenv   LANG ru_RU.KOI8-R
setenv   LC_ALL ru_RU.KOI8-R
setenv   MM_CHARSET KOI8-R

Во всяком случае, всё уже давно написано в хэнбуке ... 8)

Букаф много вводить надо :wink:
Можно проще сделать:
Код:
#pw usermod root -L russian

и для любого юзвера аналогично.
Переключение CapsLock на русский и обратно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт 18 янв, 2013 2:12 am 
Не в сети

Зарегистрирован: Вс 28 ноя, 2010 9:10 am
Сообщения: 176
Еще один тонкий вопрос.
Я в /etc/rc.conf указал строку
Код:
keychange="61 ^[[K"

В одном старом пособии по настройке FreeBSD (от Иван Паскаль) эта настройка есть и ее введение автор объясняет необходимостью согласовать поведение консоли с ее описанием в termcap для cons25r. Вот цитата
Цитата:
А вот следующая строчка
keychange="61 ^[[K"
имеет к русификации косвенное отношение.
Дело в том, что загружая новые шрифты, мы меняем свойства терминала. По крайней мере, символы псевдографики перемещаются другой диапазон кодов. Следовательно, описание терминала cons25 в termcap уже не будет полностью соответствовать реальным свойствам syscons. Поэтому, для русифицированного syscons в том же termcap предусмотрено другое описание и, соответственно, другой тип терминала - cons25r. Именно поэтому, те же инструкции по русификации рекомендуют подправить файл /etc/ttys (исправить все cons25 на cons25r) чтобы на каждом виртуальном терминале при старте очередной сессии переменная окружения TERM (которая и сообщает программам тип терминала) по умолчанию получала значение cons25r.
Но описание терминала cons25r отличается от cons25 не только символами псевдографики. Согласно этому описанию, клавиша fkey61 (кнопка [Delete]) должна при нажатии выдавать последовательность кодов "Esc [ K", а не код 177, как это делает syscons (и как указано в описании терминала cons25).
Поэтому, нам рекомендуется "подрегулировать" сам syscons, чтобы его поведение соответствовало описанию в termcap. (Почему нельзя исправить termcap и оставить syscons в покое, я не знаю).
Итак, эта строчка служит только для "подгонки" syscons к его новому описанию в termcap. Она представляет из себя аргумент для программы kbdcontrol, которая заменит для клавиши fkey61 ([Delete]) выдаваемый код.


Но вот в хэндбуке о том, что нужно вставить в файл rc.conf эту строчку ничего не написано. О ней нет ни слова. Может, первая инструкция (от Иван Паскаль) уже устарела, разработчики давно внесли в файлы (в тот же termcap) нужные исправления, и эта строчка уже не нужна или ее введение вообще уже является ошибкой?
Подскажите, пожалуйста.


Последний раз редактировалось JohnnieWalker Пт 18 янв, 2013 5:19 pm, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт 18 янв, 2013 4:51 pm 
Не в сети

Зарегистрирован: Вс 28 ноя, 2010 9:10 am
Сообщения: 176
И все-таки вопрос по поводу строчки
Код:
keychange="61 ^[[K"

остается нерешенным.

Что она означает и нужна ли она в FreeBSD 8.3 или ее добавление в rc.conf этой версии системы является ошибкой? Подскажите, пожалуйста.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пт 18 янв, 2013 6:29 pm 
Не в сети
Модератор

Зарегистрирован: Сб 11 сен, 2004 6:33 am
Сообщения: 5296
Откуда: Москва
Кажется оно как-то чинило клавишу delete. Если она работает и так, этот keychange не нужен.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб 19 янв, 2013 6:53 am 
Не в сети

Зарегистрирован: Вс 28 ноя, 2010 9:10 am
Сообщения: 176
Да, этот keychange действительно не нужен.
Когда он установлен, при нажатии клавиши delete вместо удаления символа на консоль поступает последовательность символов ^[[K, проверил это в шелле. Убираешь этот keychange из конфига, и все начинает работать нормально.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб 19 янв, 2013 7:52 am 
Не в сети

Зарегистрирован: Вс 28 ноя, 2010 9:10 am
Сообщения: 176
w@sp, ankor, AMDmi3 - спасибо вам всем за помощь. Локализацию системы настроить удалось. По итогу, помог совет ankor'а
Цитата:
Можно проще сделать:
Код:
#pw usermod root -L russian

и для любого юзвера аналогично.


Еще пара вопросов к уважаемым участникам.

1. Для русификации консоли в файл /etc/rc.conf нужно добавить согласно Handbook'у 3 строчки, благодаря которым, как я понял, происходит загрузка шрифтов:
Код:
font8x16="cp866b-8x16"
font8x14="cp866-8x14"
font8x8="cp866-8x8"

Почему этих шрифтов целых три штуки, а не достаточно загрузить один? Что здесь означает каждая конкретная строчка, для чего она служит?

Объясните коротко или дайте ссылки на материалы, где этот вопрос понятно и доходчиво изложен.

2. После того, как русские шрифты заработали, обратил внимание на следующее. Отображение символов корректно, но русские буковки по сравнению с латинскими какие-то маленькие и некрасивые. Особенно бросается в глаза то, что кириллические буквы меньше по размеру латинских. Это как-то лечится?
Обращаю внимание, что речь идет о чистой консоли (т. е. о видеокарте в текстовом режиме), а не об эмуляторах терминала в иксах.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб 19 янв, 2013 5:47 pm 
Не в сети
Модератор

Зарегистрирован: Сб 11 сен, 2004 6:33 am
Сообщения: 5296
Откуда: Москва
JohnnieWalker писал(а):
Да, этот keychange действительно не нужен.
Когда он установлен, при нажатии клавиши delete вместо удаления символа на консоль поступает последовательность символов ^[[K, проверил это в шелле. Убираешь этот keychange из конфига, и все начинает работать нормально.

Вообще-то ^[ там это один символ (escape), а не два. []

JohnnieWalker писал(а):
Почему этих шрифтов целых три штуки, а не достаточно загрузить один? Что здесь означает каждая конкретная строчка, для чего она служит?

Потому что разрешений консоли несколько, соответственно шрифты разного размера. Попробуте vidcontrol 80x50

JohnnieWalker писал(а):
2. После того, как русские шрифты заработали, обратил внимание на следующее. Отображение символов корректно, но русские буковки по сравнению с латинскими какие-то маленькие и некрасивые. Особенно бросается в глаза то, что кириллические буквы меньше по размеру латинских. Это как-то лечится?

Такой шрифт. Возьмите нормальный cp866-8x16, без b.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб 19 янв, 2013 7:36 pm 
Не в сети

Зарегистрирован: Вс 28 ноя, 2010 9:10 am
Сообщения: 176
AMDmi3 писал(а):
Вообще-то ^[ там это один символ (escape), а не два. []

AMDmi3, я сейчас проверил, добавил этот keychange в /etc/rc.conf. Вот как выглядела эта строка
Код:
keychange="61 ^[[K"

Перезагрузился и получил следующую картину.
При работе в tcsh нажимаю delete, получаю на экране вместо удаления символов последовательность знаков дословно
^[[K
Почему ^[ трактуется не как escape, а именно как два символа - ничего не могу сказать, слишком мало знаний. Но выводится на экран именно такая последовательность.

При работе в vi нажимаю на delete и получаю сообщение:
K не является командой VI

Стоит мне этот keychange убрать из rc.conf и презагрузиться, как delete в tcsh трактуется так же, как backspace, а в vi нажатие на него в командном режиме приводит к удалению символов (т. е. он действует именно как delete в обычном текстовом редакторе).

Так подробно описываю просто, чтобы не было никаких двусмысленностей и разночтений. Можете проверить на своем компьютере, AMDmi3, добавив этот keychange, хотя это не так и важно.

AMDmi3 писал(а):
JohnnieWalker писал(а):
Почему этих шрифтов целых три штуки, а не достаточно загрузить один? Что здесь означает каждая конкретная строчка, для чего она служит?

Потому что разрешений консоли несколько, соответственно шрифты разного размера. Попробуте vidcontrol 80x50

Понял, вопросов нет.

AMDmi3 писал(а):
JohnnieWalker писал(а):
2. После того, как русские шрифты заработали, обратил внимание на следующее. Отображение символов корректно, но русские буковки по сравнению с латинскими какие-то маленькие и некрасивые. Особенно бросается в глаза то, что кириллические буквы меньше по размеру латинских. Это как-то лечится?

Такой шрифт. Возьмите нормальный cp866-8x16, без b.

Попробовал. После этого, когда я cp866-8x16b заменил на cp866-8x16, русские и латинские буквы действительно стали отображаться в одинаковом размере, но буква "а-малое" стала отображаться как "А-большое" только в уменьшенном размере, прямо как в детском букваре. Я взял и вернул шрифт назад к cp866-8x16b, хотя это дело вкуса. Будем считать, что это проблема консольных шрифтов для кириллицы. Жаль, что ни у кого не дошли руки нарисовать красивые русские шрифты для консоли (такого же уровня, как и латинский шрифт), хотя это в принципе и мелочь.

С этими вопросами мне пока все ясно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб 19 янв, 2013 8:24 pm 
Не в сети

Зарегистрирован: Вс 28 ноя, 2010 9:10 am
Сообщения: 176
Форумчане, с этой русификацией у меня последний к вам вопрос. Посмотрите, пожалуйста, если можете, подскажите.

После настройки системы на русскую локаль tcsh (который у меня, как и положено, является shell'ом для root) кроме того, что стал воспринимать русские буквы с клавиатуры (чего я в принципе и добивался), начал сообщения об ошибках выводить на русском языке. bash пока не инсталлировал, не знаю, будет ли он в русской локализации делать то же самое. Bourne Shell, посмотрел, такой русификации не имеет - все диалоговые сообщения он пишет по-английски.

Это, конечно, очень удобно, спору нет, но мне хотелось бы отказаться от этой опции, т. к., имея дело с любой из Unix-систем, лучше привыкать работать на английском языке - все равно все команды системы имеют англоязычные названия и документация также написана на нем. Можно ли настроить shell (в моем случае tcsh), чтобы он по-прежнему понимал русские символы при вводе и выводе, но все сообщения выдавал на английском языке, как и раньше?

Аналогичный вопрос про редактор vi. Он тоже в нижней командной строке стал выдавать сообщения на русском. Можно ли ему вернуть английский язык?

Что касается mc (Midnight Commander), то можно попробовать с ним работать и на английском, и на русском языке, может для такой программы родной язык будет даже лучше. Для ряда чисто прикладных программ интерфейс на русском будет безоговорочно лучше и удобнее. Но для многих базовых программ хотелось бы сохранить английский язык.

Форумчане, подскажите, пожалуйста, как это сделать и как это обычно делается. Просто разбираться с этим самому очень долго, нет сейчас времени, да и не очень понятно, где искать инфу. Буду очень вам благодарен за помощь, советы, рецепты и инструкции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс 20 янв, 2013 4:05 pm 
Не в сети
Модератор

Зарегистрирован: Сб 11 сен, 2004 6:33 am
Сообщения: 5296
Откуда: Москва
JohnnieWalker писал(а):
Почему ^[ трактуется не как escape, а именно как два символа - ничего не могу сказать, слишком мало знаний. Но выводится на экран именно такая последовательность.

Насколько я понимаю, она интерпретируется как есть. ^[ нужно ввести как один символ через Ctrl+V, Esc. У меня с этим keychange delete не работает вообще, так что наверное про него можно просто забыть. []

JohnnieWalker писал(а):
Это, конечно, очень удобно, спору нет, но мне хотелось бы отказаться от этой опции, т. к., имея дело с любой из Unix-систем, лучше привыкать работать на английском языке - все равно все команды системы имеют англоязычные названия и документация также написана на нем. Можно ли настроить shell (в моем случае tcsh), чтобы он по-прежнему понимал русские символы при вводе и выводе, но все сообщения выдавал на английском языке, как и раньше?

LC_MESSAGES=C в окружение. Также может пригодиться LC_TIME=C (для форматирование времени) и LC_NUMERIC=C (для форматирования чисел - чтобы дробная часть отделялась точкой, а не запятой). csh на локаль плюёт, так что ей нужно дополнительно NLSPATH=/nonexistent. Всё это можно добавить прямо в login.conf:

Код:
russian|Russian Users Accounts:\
   :charset=KOI8-R:\
   :lang=ru_RU.KOI8-R:\
   :setenv=MAIL=/var/mail/$,BLOCKSIZE=K,FTP_PASSIVE_MODE=YES,LC_MESSAGES=C,LC_TIME=C,LC_NUMERIC=C,NLSPATH=/nonexistent:\
   :tc=default:


(и не забыть сделать cap_mkdb после его изменения).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн 21 янв, 2013 1:14 am 
Не в сети

Зарегистрирован: Вс 28 ноя, 2010 9:10 am
Сообщения: 176
AMDmi3, спасибо большое вам за объяснения.
Еще напоследок такие вопросы.

1.Как я понял, charset и lang - это переменные окружения, позволяющие настроить локализацию в общем, а LC_MESSAGES, LC_TIME, LC_NUMERIC и т. п. - это переменные окружения, которые дают возможность настроить частные свойства локализации по отдельности. И я так понял, что все переменные окружения, задающие локаль и определенные в файле login.conf, наследуются всеми программами пользовательского сеанса. А можно ли настроить систему так, чтобы разные программы работали с различными параметрами локализации.

Например, так.
Все программы создаются с переменными окружения локали, имеющими такие-то значения, а для программ A, B и C действует другой набор значений этих переменных.

Или так.
Все программы разделены на з класса.
Для программ класса 1 определяется свой набор значений переменных локализации.
Для программ класса 2 определяется другой набор значений этих переменных.
Для класса 3 (допустим, это все остальные программы, не входящие в классы 1 и 2) действует третий набор.

Или так.
Для всех программ действует один стандартный набор пар переменная_локализации=значение, а для ряда программ, для которых эти параметры нас не устраивают, эти наборы определяются индивидуально для каждой.

Я не говорю, что задача должна решаться именно так, как я описал, я лишь обрисовал примерную картину, в общем. Хотелось узнать, можно ли во FreeBSD сделать что-то подобное, существуют ли в ней для этого какие-то настройки.

2.В handbook'е вопросы, связанные с локалазацией, описаны очень слабо, даны лишь общие рецепты по настройке и без объяснения принципов, как это все работает. Оно и понятно, тема сложная. Есть ли какие-нибудь пособия, в которых этот вопрос подробно изложен с рассмотрением деталей? Интересуют книги, выпущенные издательствами (учебники, справочники), статьи, приличные материалы в Интернете. Как я понимаю, такой способ задания локали принят не только во FreeBSD, а является общим для всех Unix-систем (будь то Linux, Solaris, QNX и т. п.). Поэтому сойдут учебники и материалы, посвященные любой из Unix-систем, совсем не обязательно, чтобы они касались исключительно FreeBSD. На русском и английском языке.

3.Интересуют аналогичные книги и материалы, описывающие эту интернационализацию и локализацию с точки зрения программиста. Как написать программу, которая будет корректно настраиваться и работать в соответствии со всеми этими настройками. Как написать такую программу, не используя специально разработанных для этого библиотек, используя элементарные средства языка, чтобы она при этом с точки зрения правил локализации была совершенно корректна. И как написать такую программу, используя общепринятые для этой цели библиотеки локализации. Язык C я неплохо знаю. Есть ли учебная, справочная или иная литература, где этот вопрос подробно описан (посвящены описанию вопроса хотя бы 2 главы).

4.Кстати, хотелось бы узнать, правила, попределяющие локализацию, являются частью стандарта POSIX, SUS или какого-то иного стандарта?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн 21 янв, 2013 1:56 am 
Не в сети
Модератор

Зарегистрирован: Сб 11 сен, 2004 6:33 am
Сообщения: 5296
Откуда: Москва
JohnnieWalker писал(а):
1.Как я понял, charset и lang - это переменные окружения, позволяющие настроить локализацию в общем, а LC_MESSAGES, LC_TIME, LC_NUMERIC и т. п. - это переменные окружения, которые дают возможность настроить частные свойства локализации по отдельности. И я так понял, что все переменные окружения, задающие локаль и определенные в файле login.conf, наследуются всеми программами пользовательского сеанса.

Примерно так. Для каждой категории (MESSAGES, TIME, NUMERIC, ...) настройки локали сначала берутся из $LANG, могут быть переопределены соответстветстсующей $LC_*, и, c ещё большим приоритетом, $LC_ALL. lang из login.conf задаёт умолчальное значение $LANG, charset - $MM_CHARSET (которая я, честно говоря, не знаю где используется).

JohnnieWalker писал(а):
А можно ли настроить систему так, чтобы разные программы работали с различными параметрами локализации.

Например, так.
Все программы создаются с переменными окружения локали, имеющими такие-то значения, а для программ A, B и C действует другой набор значений этих переменных.

Wrapper-скрипт или shell alias для нужных программ с соответствующим setenv, например.

JohnnieWalker писал(а):
3.Интересуют аналогичные книги и материалы, описывающие эту интернационализацию и локализацию с точки зрения программиста. Как написать программу, которая будет корректно настраиваться и работать в соответствии со всеми этими настройками. Как написать такую программу, не используя специально разработанных для этого библиотек, используя элементарные средства языка, чтобы она при этом с точки зрения правил локализации была совершенно корректна. И как написать такую программу, используя общепринятые для этой цели библиотеки локализации. Язык C я неплохо знаю. Есть ли учебная, справочная или иная литература, где этот вопрос подробно описан (посвящены описанию вопроса хотя бы 2 главы).

Можно начать с man setlocale и документации к gettext.

JohnnieWalker писал(а):
4.Кстати, хотелось бы узнать, правила, попределяющие локализацию, являются частью стандарта POSIX, SUS или какого-то иного стандарта?

ЕМНИП, POSIX.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пн 21 янв, 2013 5:08 am 
Не в сети

Зарегистрирован: Вс 28 ноя, 2010 9:10 am
Сообщения: 176
AMDmi3, большое спасибо! :)

AMDmi3 писал(а):
JohnnieWalker писал(а):
Интересуют аналогичные книги и материалы, описывающие эту интернационализацию и локализацию с точки зрения программиста.

Можно начать с man setlocale и документации к gettext.

По поводу книг, затрагивающих тему написания интернационализируемых программ, сейчас посмотрел немножко в сети, с этим, похоже, действительно не густо.
Удалось найти только вот эту книжку, в которой есть глава на 40 страниц, посвященная этой теме:
http://forcoder.ru/linux/pages/3/
http://rutracker.org/forum/viewtopic.php?t=510520 (другая ссылка)

Локализация с точки зрения пользователя и сисадмина - нашел вот эти подборки:
http://www.linuxcenter.ru/enc/locale.phtml
http://rus-linux.net/lib.php?name=/MyLDP/rus/index


Есть еще вот эта статья:
http://www.sensi.org/~alec/locale/index.html
http://rus-linux.net/lib.php?name=/MyLD ... index.html (другая ссылка)
В ней вроде как и пользовательские, и программистские аспекты имеются, но я проглядел ее, мне что-то не понравилось, как статья написана. Настоящая помойка, лучше по такому ничего не изучать.

Небольшое перечисление основных переменных окружения, определяющих локаль:
http://gentoo.theserverside.ru/book/ar68s20.html

Если кто-то знает другие более или менее достойные материалы по локализации и интернализации - бумажные книжки (это самое лучшее!), статьи, документацию, сайты - поделитесь этой информацией!


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 77 ]  На страницу 1, 2, 3, 4  След.

Часовой пояс: UTC + 4 часа


Кто сейчас на конференции

Зарегистрированные пользователи: Bing [Bot], Majestic-12 [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB
Яндекс.Метрика