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
Сообщения: 5470
Откуда: СССР, Харьков
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
Сообщения: 5297
Откуда: Москва
Кажется оно как-то чинило клавишу 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
Сообщения: 5297
Откуда: Москва
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
Сообщения: 5297
Откуда: Москва
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
Сообщения: 5297
Откуда: Москва
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 часа


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

Зарегистрированные пользователи: AMDmi3, Bing [Bot], Google [Bot], Google Feedfetcher


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

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