Интернационализация и локализация

Лекции прошлых лет:

Термины

Объекты ПО

Другие объекты продукта

Локализация: инструменты

GNU Gettext

Документация

Создание перевода

  1. I18n: Обмажем функцией gettext() все строки, нуждающиеся в переводе

    • Есть ещё ngettext(), см. ниже

  2. xgettext: Создадим на основе i18n-ванного исходного кода шаблон перевода, файл domain.pot (domain — это довольно произвольное название того, что мы переводим)

    • Не удаляйте сгенерированные комментарии из файла, это не комментарии ☺!
  3. msginit: Создадим прототип перевода (для русского — ru.po)

  4. (текстовый редактор или специализированный инструмент редактирования .po) Переведём все строки в ru.po

  5. msgfmt: Скомпилируем перевод в файл ru.mo

Обновление перевода

Вышла новая версия программы (или сами поправили). Там «поехали» строки с сообщениями (появились новые, пропали/изменились/переместились старые).

  1. (xgettext) Сгенерируем новый шаблон

  2. msgmerge: Обновим содержимое ru.po на основании шаблона и старого ru.po. У msgmerge много искусственного мозга:

    • Не теряет старые переводы (только комментирует)
    • Размечает новые сообщения возможными переводами из старых/законмментированных

  3. Допереводим ru.po

  4. (msgfmt) Компилируем новый перевод

LecturesCMC/PythonDevelopment2020/08_L10n/Gettext.svg.png

(есть ещё вспомогательные инструменты)

Ход работы

Варианты «пути к локализации»

  1. Локальный — положить рядом с бинарником или в подкаталог po/

    • /!\ Так в Linux не принято!

  2. Системный — положить в /usr/share/locale и/или в /usr/local/share/locale

    • /!\ Требует прав администратора и средств деинсталляции

  3. Микс — предусмотреть два варианта сборки, определить переменную в configure и т. д.

  4. С относительным путём: сформировать путь относительно местоположения бинарника

    • если бинарник ставится в /usr/bin, а переводы — в /usr/share/locale

      • то путь получится ../share/locale

    • выполнить тестовую установку куда-нибудь в /tmp или /home/пользователь/что-то-там

      • при этом бинарник должен ставиться в /home/пользователь/что-то-там/bin/программа

      • оттуда и запускать
      • а путь до локали /home/пользователь/что-то-там/share/locale/… остаётся тот же самый: ../share/locale

Использование множественных форм

В английском их две, в русском — три: 1¹ / 2,3,4² / 5-20³ / 21¹ и т. д.

Страшная формула в строке Plural-Forms:

Если увеличить nplurals до 4 и добавить в начало формулы n==1? 3 :, получим четвёртую словоформу — для ровно одного объекта (в таких случаях можно число 1 не выводить)

Translation memory в комментариях

gettext и autotools

Есть поддержка, она в первую очередь имеет смысл для больших проектов

Пример

В этом примере autotools использовались для всего, кроме переводов.

Под конец пример переключается на autotools

После каждого коммита я делал

Поддержка Gettext в других системах сборки

Д/З

LecturesCMC/LinuxApplicationDevelopment2022/09_I18n (последним исправлял пользователь FrBrGeorge 2022-11-15 18:28:04)