Як змусити 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 його правильно розпізнав.