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

Термины

Объекты ПО

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

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

Эти инструменты применяются реже:

Тактика локализации

Достоинства и недостатки тактик

Gettext и Babel

Про gettext:

Про Babel:

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

  1. I18n:
    • Подключим в текущий namespace волшебную функцию «_()» — «перевести»

    • Обмажем этой функцией все строки, нуждающиеся в переводе
    • Внимание! Новомодные (им, вообще-то уже больше года) f-strings (форматные строки вида «f"...{имя}..."») по понятным причинам в python gettext не поддерживаются. Пользуйтесь методом .format()!

    • Не удаляйте комментарий #, python-brace-format из po-файла, он нужен:)

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

  3. (babel init) Создадим прототип перевода (для русского — ru.po)

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

  5. (babel compile) Скомпилируем перевод в файл ru.mo

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

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

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

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

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

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

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

Процесс локализации

Пример перевода начинается с этого коммита

Основную информацию см.там

Некоторые замечания

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

Про память переводов

Очень важно соблюдать единообразие при переводе одинаковых надписей. Для этого все переводы по проекту можно сложить в т. н. compendium (но же translation memory, она же память переводов) — большой .po-файл, получаемый /!\ TODO как?

Множественные формы

Описание того, какие числа какой множественной форме соответствуют содержится в заголовке ru.po. Это описание компилируется в некоторый код .mo-файла, который gettext интерпретирует (замечание vslutov@, спасибо).

Д/З

В семестровом проекте должен присутствовать перевод. Если вы пишете какой-то модуль/бот/библиотеку без UI, переводите документацию (см. Руководство по переводу)

LecturesCMC/PythonDevelopment2021/09_I18n (последним исправлял пользователь FrBrGeorge 2021-04-15 22:23:13)