Як змусити gVim правильно відображати українськомовні довідку та меню
Оскільки редактор vim з самого початку створювався для Unix-подібних систем, то для локалізації він використовує кодування koi-8u, яке по замовчуванні некоректно відображається в системах Windows. Для вирішення цієї проблеми ви просто можете перекодувати перекладені файли локалізації в кодування cp1251.
Зауваження: в версії gvim64 проблема частково вирішена, локалізація меню виконана в кодуванні cp1251, проте допомога все ще незрозумілими гачками. Для тих хто не може чи не хоче міняти свою версію на останню публікую цей рецетп. Зауважу, що він є можливо надлишковим тому відкритий для ідей. Отже попередні умови
Необхідне програмне забезпечення:
- Cygwin з пакетом gettext та gettext-devel, а також треба встановити бібліотеку ICU(International Components for Unicode)
Перше можна отримати тут: http://www.cygwin.com/, друге тут http://www.ibm.com/software/globalization/icu/downloads.jsp. Компілятор c++, якщо ви бажаєте самі побудувати бібліотеку ICU. На сайті є попередньо побудована двійкова версія бібліотеки. Детальніше про їх встановлення дивіться на їхніх сторінках.
На всякий випадок збережіть файли
ВАШ_ШЛЯХ_ДО_ВСТАНОВЛЕНОГО_VIM\vim64\lang\uk\LC_MESSAGES\vim.mo
(в мене наприкладD:\Vim\vim64\lang\uk\LC_MESSAGES\vim.mo
) таВАШ_ШЛЯХ_ДО_ВСТАНОВЛЕНОГО_VIM\vim64\lang\menu_uk_ua.koi8-u.vim
десь в надійному місці, щоб у випадку їх пошкодження мож було їх відновити.
Для локалізації повідомлень Vim використовує бібліотеку gettext, портована версія якої входить в пакет Cygwin. З цього пакету нам потрібно утиліти msgfmt.exe та msgunfmt.exe.- Декомпіляція двійкового vim.mo з основними повідомлення в .po формат.
Утиліта msgunfmt.exe саме для цього. Рядок запуску:msgunfmt.exe vim.mo -o vim.po
(vim.mo ви повинні перемістити в папку з msgunfmt.exe, найпростіше скопіювати його до домашньої папки встановленого Cygwin в мене це наприкладD:\cygwin\home\Administrator
). - Перекодовуємо текстовий vim.po в кодування cp1251, для цього в пакеті gettext нібито є msgconv.exe, але змусити перекодовувати я його не зміг, ось рядок виклику:
msgconv.exe vim.po -t CP1251 -o vom1251.po
тому для цього я використав утиліту з айбіемівської бібліотеки ICU uconv.exe
рядок запуску:uconv.exe -f koi8-u vim.po -t cp1251 -o vim1251.po
,
де vim.po це файл отриманий на попередньому етапі koi8-u та vim1251.po це результуючий файл повідомлень в кодуванні cp1251.
В результаті отримаємо файл повідомлень в кодуванні 1251, так само чинимо з переводом меню, тільки без кроку декомпіляції (Для версії 6.4 цього робити не потрібно). - В vim1251.po міняємо в рядку (він на самому початку файлу)
"Content-Type: text/plain; charset=koi8-u\n"
на "Content-Type: text/plain; charset=cp1251\n" - Компляція назад в двійковий формат (Найпростіше знову скопіювати vim1251.po в домашню папку Cygwin)
msgfmt.exe vim1251.po -o vim.mo
- заміняємо старий vim.mo за шляхом
ВАШ_ШЛЯХ_ДО_ВСТАНОВЛЕНОГО_VIM\vim64\lang\uk\LC_MESSAGES\vim.mo
на перекодований vim.mo - Запускаємо gvim.exe і насолоджуємося результатом.
- Для старіших версій gVim потрібно повторити кроки 2,3,4 для файлу menu_uk_ua.koi8-u.vim (за шляхом
ВАШ_ШЛЯХ_ДО_ВСТАНОВЛЕНОГО_VIM\vim64\lang\
) , замінивши відповідно назви файлів, результуючий файл потрібно назвати menu_uk_ua.cp1251.vim, щоб Vim його правильно розпізнав.