Локализация приложений на Python

https://habr.com/ru/company/otus/blog/523112/

Вообще, есть довольно стандартный вариант - использовать библиотеку gettext, для которой есть биндинги в том числе и для Python (причем, в стандартной библиотеке, не исключено, что это реализация gettext на Python).

Принцип работы примерно такой: все строки, подлежащие переводу оборачиваются в вызов специальной функции _().

Далее, программа обрабатывается утилитой pygettext, вытаскивающей все переводимые строки, в результате получается файл .pot (шаблон перевода), в который в дальнейшем можно добавить перевод. Это текстовый файл с относительно простой внутренней структурой, его можно редактировать чем-то блокнотоподобным, но есть и специализированные утилиты, например, poedit, также его можно загрузить на какой-нибудь из сервисов онлайн-перевода типа crowdin.com или transifex.com, и редактировать там совместно с другими переводчиками.

Из файла .pot получается файл .po (по сути тот же .pot, но с заполненным переводом строк на нужный язык), который потом компилируется в файл .mo (бинарный файл, хотя тоже с довольно простой внутренней структурой) с помощью утилиты msgfmt из пакета gettext или утилиты msgfmt.py из пакета Python.

Далее, перевод импортируется в переводимую программу при помощи команды gettext.install(‘mary’, ‘./locale’, unicode=True) (пример отсюда, реальные параметры могут быть другими).

Парочка нагугленных руководств:

Если потребуется редактировать перевод онлайн совместно с другими переводчиками, могу сказать, что упомянутые выше crowdin и transifex бесплатны для Opensource продуктов, но в crowdin с этим довольно строго, в то время как в transifex достаточно того, чтобы перевод был доступен публично, и в настройках проекта была ссылка на исходный код. При этом субъективно у crowdin более дружелюбный интерфейс.

Видел я данные статьи. Просто мне показалось, что gettext - еще более велосипедистый велосипед, чем тот, который я использую :) – Xyanight 6 мая 2016 в 20:59

@Xyanight, ну, это довольно бородатый велосипед, вокруг которого уже сложилась своя инфраструктура. Наличие спец. редакторов и поддержка сервисами онлайн переводов уже о чем-то говорят. Плюс, он, например, поддерживает возможность указания различного перевода в зависимости от числительного (1 - “велосипед”, 2 - “велосипеда”, 5 - “велосипедов”), возможность автоматического слияния имеющегося перевода с обновленным шаблоном, и другие плюшки – insolor 6 мая 2016 в 21:12