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

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

Термины

Объекты ПО

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

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

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

Пример

TODO: подробнее

gettext и autotools

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

Пример

репозиторий с примером

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

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

Д/З

LecturesCMC/LinuxApplicationDevelopment2020/09_I18nL10n (последним исправлял пользователь FrBrGeorge 2020-12-08 23:37:55)