Вход на хостинг
IT-новости
20.04.2016 iPhone 2017 года поместят в водонепроницаемый корпус из стекла
Линейка iPhone в новом году серьезно поменяется. В этом уверен аналитический исследователь Мин Чи Ку......
30.07.2015 Ищем уникальный контент для сайта
Ищем уникальный контент для сайта Без уникального контента Ваш сайт обречен на то, что его страницы......
Вот как должен выглядеть скрипт для переключения локали и консоли в режим работы с кодировкой CP1251, выполненный в точном соответствии с таблицей 1:
# cat console2cp1251
#!/bin/sh
PREF=/etc/sysconfig
[ "1$UID" != "10" ] && { echo "you must be root!" ; exit ; }
# Console
perl -i -p -e 's/^CONSOLE_FONT=.*/CONSOLE_FONT=Cyr_a8x16.psfu/g' $PREF/console
perl -i -p -e 's/^CONSOLE_SCREENMAP=.*/CONSOLE_SCREENMAP=cp1251_to_uni/g' $PREF/console
perl -i -p -e 's/^CONSOLE_ENCODING=.*/CONSOLE_ENCODING=CP1251/g' $PREF/console
# Keyboard
perl -i -p -e 's/^KEYTABLE=.*/KEYTABLE=ru_win.map.gz/g' $PREF/keyboard
# Language
perl -i -p -e 's/^RC_LANG=.*/RC_LANG=ru_RU.CP1251/g' $PREF/language
rckbd restart
exit
Аналогичным образом строятся скрипты для переключения в другие локали (см. [7]). Результат перевода консоли в режим ru_RU.CP866 изображен на рис. 3.
Характерной особенностью является отсутствие прописной буквы «Ы» (на рисунке 3 в строке приглашения консоли), которая совпадает по коду со служебным символом управления кодовыми таблицами SCI (0x9B). Но в остальном все прекрасно работает.
Рисунок 3. Консоль в режиме ru_RU.CP866
Итак, потенциально возможно настроить консольный драйвер и окружение пользователя для работы в любой из перечисленных локалей. Так почему же все настойчиво предлагают работать в ru_RU.UTF-8 и так пренебрежительно относятся ко всем остальным локалям?
Использование локали приложениями
Безусловно, это самый важный вопрос. При его исследовании можно встретить как приятные открытия, так и озадачивающие. Тема эта неисчерпаема, как и сам набор возможных приложений. Для нас здесь принципиальным является тот факт, что корректное использование локалей всецело на совести разработчиков программного обеспечения. Более того, приложение может «уметь» использовать локали, но не поддерживать часть из них.
Например, X Window в используемом большинством дистрибутивов Linux варианте Xorg является, по сути, обычным приложением. Переведем SuSE Linux в локаль ru_RU.CP1251 и затем внутри работающего X Window переключимся в CP866 и запустим новую сессию konsole. Результат на рис. 4.
Рисунок 4. Запуск konsole в CP866
Получаем сразу две проблемы: во-первых, сообщение «QT: Locales not supported on X server» и, во-вторых, внутри созданного окна не наблюдается кириллицы в CP866. Первая из-за того, что нужная локаль не создана в /usr/lib/X11/locale, а вторая из-за того, что теперь надо для данного экземпляра konsole указать кодировку вручную. Вспоминаем о том, что оптимисты считают локаль свойством процесса и ... недоумеваем! Вероятно, оптимисты не входят в число авторов этих программ.
Проявляем настойчивость и получаем уже несколько иной результат на рис. 5.
Рисунок 5. Konsole в CP866 с кодировкой, указанной вручную
Обратите внимание: появилась кириллица в ответе date, корректно представлена псевдографика mc, и, самое главное, нет проблем с прописной «Ы», так как клавиатура работает в «сыром» (raw в оригинале), прозрачном режиме, и текстовая консоль не участвует в процессе вывода. Только не получится повторить то же самое в локали ru_RU.MACCYRILLIC, так как в konsole эту кодировку нельзя указать принудительно – ее просто нет. Приятно то, что варианты 14 из таблицы 1 работают в SuSE Linux в режиме X Window, как говорится, «из коробки».