Alex 'AdUser' Z
8 years ago
2 changed files with 112 additions and 0 deletions
After Width: | Height: | Size: 6.6 KiB |
@ -0,0 +1,112 @@ |
|||||||
|
--- |
||||||
|
title: Поддержка ввода восточных языков в линуксе |
||||||
|
tags: linux, репост |
||||||
|
--- |
||||||
|
|
||||||
|
Как многие знают, сестра у меня учится на восточке, и поддержка ввода иероглифов для неё - необходимая вещь. |
||||||
|
Мне это не особо нужно, хватает гугло-транслейта. Поэтому, чтобы не забыть, как настраивать - пишу этот пост. |
||||||
|
|
||||||
|
Сразу оговорюсь, что это - своеобразная шпаргалка по настройке и на полноценное исследование не претендует. |
||||||
|
|
||||||
|
--- |
||||||
|
|
||||||
|
Теоретическая часть |
||||||
|
------------------- |
||||||
|
|
||||||
|
Вообще, в линуксе традиционно существует зоопарк велосипедов, независимо от выбранной области. |
||||||
|
Буйство альтернатив ограничивается разве что сложностью подсистемы, например видео-. |
||||||
|
Но и там умудряются выкатить минимум две альтернативы. |
||||||
|
|
||||||
|
Область ввода не стала исключением, и здесь существует несколько вариантов реализации, |
||||||
|
разной степени универсальности, качества и удобства. |
||||||
|
|
||||||
|
Суть проблемы. В языке "европейского" типа у нас есть алфавит, достаточно короткий набор символов (в среднем - 30). |
||||||
|
На обычной клавиатуре, заточенной под такие языки - чуть больше сотни кнопок. |
||||||
|
Их с лихвой хватает на сам алфавит языка, сервисные знаки (диакритика, пунктуация), |
||||||
|
остаётся на цифры, управляющие клавиши и даже на спецфункции. |
||||||
|
Система проста как лом: давишь нужную клавишу - получаешь нужный символ. |
||||||
|
|
||||||
|
В восточных языках не так. Там есть не только алфавит (и даже не один), |
||||||
|
но и большой набор графем для обозначения устоявшихся терминов. |
||||||
|
Графемы эти могут *комбинироваться* между собой, образуя графемы второго порядка - иероглифы[^fn1], |
||||||
|
но всё так же занимая при этом одно знакоместо. |
||||||
|
[Подробнее](https://anashina.com/ieroglify/), на примере китайского. |
||||||
|
Суть в том, что этот набор иероглифов не влезет ни на одну клавиатуру разумного размера. |
||||||
|
В обычной новости из японской газеты, в тексте могут использоваться обе слоговые азбуки, цифры, иероглифы и латиница. |
||||||
|
|
||||||
|
Следовательно, чтобы как-то набирать всё это, метод ввода должен стать значительно умнее. |
||||||
|
Как минимум, он должен уметь воспринимать последовательности символов, для образования графем первого порядка - ключей, |
||||||
|
уметь "сворачивать" последовательность ключей в графемы второго порядка - иероглифы, |
||||||
|
попутно предлагая *варианты* начертания итогового символа в случае неоднозначности. |
||||||
|
|
||||||
|
То есть, нам мало переключения просто языка - русский, английский, японский. |
||||||
|
Для последнего нам нужен ещё как минимум переключатель режимов ввода: две слоговые азбуки и прямой ввод. |
||||||
|
|
||||||
|
Но хватит теории. |
||||||
|
|
||||||
|
Варианты реализации |
||||||
|
------------------- |
||||||
|
|
||||||
|
Такая сложная система ввода традиционно строится двухуровневой: фреймворк и модуль поддержки конкретного языка. |
||||||
|
|
||||||
|
Первый реализует поддержку ввода из различных источников (gtk/qt/x11/curses/...), отображение подсказок, |
||||||
|
значки в трее, хранение настроек, и т.д. |
||||||
|
Фреймворки, в порядке появления[^fn2]: scim, ibus, fcitx, uim. |
||||||
|
|
||||||
|
Второй непосредственно преобразует ввод в ключи и иероглифы, выдаёт варианты для подсказки и т.д.. |
||||||
|
Модули поддержки: anthy (японский), byeoru (корейский), canna (японский), chewing (китайский), m17n (мультиязычный), mozc (японский), pinyin (китайский), skk (японский), viqr (вьетнамский). |
||||||
|
|
||||||
|
Немного по истории фреймворков. |
||||||
|
Наиболее старый - SCIM. Со временем был заброшен, что привело к потребности в его замене на что-то более свежее. |
||||||
|
Гномеры, в своей обычной манере написали "замену" - IBUS. Название вполне соответствует, он прибит гвоздями к dbus, gconf и работает без нареканий по большей частью только в gtk. |
||||||
|
Остальные, кто гном на дух не переносил и не хотел от него зависеть, пошли оживлять FCITX. Этот фреймворк появился примерно в одно время со scim, но был менее фичастым на тот момент. |
||||||
|
Ещё позже появился UIM. Этот позиционируется ещё более модульным и даже кроссплатформенным. |
||||||
|
|
||||||
|
В теории, для беспроблемной работы может использоваться любой из последних трёх. |
||||||
|
На практике, гномософта я стараюсь избегать, FCITX пилится в основном китайцами и в первую очередь под них, поэтому беру UIM, который пилится в основном японцами. :-) |
||||||
|
|
||||||
|
Практическая часть |
||||||
|
------------------ |
||||||
|
|
||||||
|
# apt-get install uim uim-mozc im-switch unifont |
||||||
|
|
||||||
|
Тут есть одна тонкость - uim на самом деле это метапакет. Он притащит модули для поддержки gtk2, gtk3, qt4 и qt5. |
||||||
|
Если что-то из этого у вас не стоит - значит будет. Вместо этого, можно ставить не сам метапакет, а только нужные зависимости. |
||||||
|
`im-switch` облегчает первоначальную настройку, `unifont` нужен для отображения иероглифов, если у вас нет ни одного другого шрифта с нужным символом. |
||||||
|
|
||||||
|
Рекомендую прочитать `/usr/share/doc/im-config/README.Debian.gz` для понимания, что в данном конкретном случае вам стоит использовать. |
||||||
|
|
||||||
|
Потребуется также сгенерить нужную локаль. |
||||||
|
|
||||||
|
$ su - |
||||||
|
# sed -i -e '/ja_JP.UTF-8/ s/^# *//' /etc/locale.gen |
||||||
|
# locale-gen |
||||||
|
|
||||||
|
Запускаем `im-config`, выбираем нужный метод ввода. Перелогиниваемся, чтобы сработал автостарт для демона IME. |
||||||
|
После логина в трее должна появиться панелька с иконками метода: |
||||||
|
|
||||||
|
![](ime-panel-tray.png) |
||||||
|
|
||||||
|
Здесь выбран японский язык (самый левая иконка - переключатель раскладок), IME - mozc в режиме хираганы и методом ввода иероглифов с клавиатуры - romaji |
||||||
|
(1, 2 и 3 иконки в блоке, выделенной чёрной рамкой, 4 - это доп. утилиты модуля mozc, 5 - настройки самого uim). |
||||||
|
|
||||||
|
Запускаем uim-pref-{gtk,gtk3,qt}, и немного подправим настройки. |
||||||
|
|
||||||
|
Global Settings > [x] Specify default IM |
||||||
|
Default input method [Direct] |
||||||
|
[x] Enable IM switching by hotkey |
||||||
|
IM switching key ["<Control>Shift_key", "<Shift>Control_key"] |
||||||
|
Alternative input method [Mozc] |
||||||
|
Mozc > Default input method [Hiragana] |
||||||
|
|
||||||
|
Работает это так: на Alt-Shift вешается изменение языка: en/ru/jp. На Ctrl-Shift вешается изменение метода ввода: direct/mozc. |
||||||
|
direct выключает всю эвристику и печатает "как есть". По опыту, лучше по умолчанию держать включенным его, а не IME. |
||||||
|
А вот если мы включили IME, то наверное хотим сразу и какой-то метод ввода IME, отличный от direct, что и выставляется последней строчкой. |
||||||
|
|
||||||
|
Т.е. по факту получается трёхуровневая иерархия: [lang: en/ru/jp] > [IME: direct/mozc] > [method: direct/hiragana/katakana/...] |
||||||
|
|
||||||
|
Вот как-то так. |
||||||
|
|
||||||
|
[^fn1]: В качестве самого известного примера (на китайском): [女](https://en.wiktionary.org/wiki/%E5%A5%B3) - женщина; [奻](https://en.wiktionary.org/wiki/%E5%A5%BB) - ссора, глупый; [姦](https://en.wiktionary.org/wiki/%E5%A7%A6) - зло, вероломство |
||||||
|
|
||||||
|
[^fn2]: Только живые, рабочие и с поддержкой большинства языков. [Полный список](https://en.wikipedia.org/wiki/List_of_input_methods_for_Unix_platforms). |
Loading…
Reference in new issue