Использование двоичных файлов .mo и извлечение оттуда строки, как это было предложено Гвидо Флором в https://stackoverflow.com/a/54707280/2514664, оказалось работоспособным решением.
Однако, используя собственный исполняемый файл gettext
, в конечном итогеизвлекать строку, как было предложено в первоначальном ответе, оказалось слишком много последствий (в конце концов, она предназначена для извлечения видимой пользователем строки в локали, наиболее подходящей для пользователя, из существующего каталога сообщений, а не как инструмент сборкикоторый "просто" должен извлечь одну строку на определенном языке из определенного файла).В конечном счете, он слишком хрупок для использования в системе сборки, которая должна работать на нескольких платформах.
Я использую Python, и его собственный модуль gettext работает намного лучше и может сэкономить многоусилий (особенно если вы знакомы с Python).
Создание файлов .mo из файлов .po может работать так, как предлагается в связанном ответе:
mkdir -p locale/de/LC_MESSAGES
msgfmt de.po -o locale/de/LC_MESSAGES/package.mo
Получение переводав Python это так же просто, как
import gettext
translation = gettext.translation('package', localedir='locale', languages=['de'])
translated_string = translation.gettext('unstranslated_string')
Кстати.после решения моей собственной проблемы я обнаружил, что в папке / Tools / i18n моего дистрибутива Python есть также msgfmt.py
и pygettext.py
, которые должны предлагать те же функциональные возможности, что и сами msgfmt
и gettext
.Они оба могут быть интересны для решения схожих проблем, либо для непосредственного использования, либо для изучения их реализации для создания чего-то нового (например, msgfmt.py включает в себя простой анализатор файлов .po).