В качестве этапа сборки моего приложения на C++ (с использованием CMake в качестве системы сборки) мне нужно создать несколько файлов шаблонов, которые должны включать локализованные строки.
Строки доступны у переводчиков уже в виде файлов gettext .po (таких же, которые будут использоваться для перевода самого приложения).
Поэтому мне нужен способ извлечь перевод на заданную исходную строку на английском языке из файла .po (либо через Bash/shell, либо через CMake)
То, что я придумал до сих пор, следующее
translated_string=$(
msggrep --msgid -e "^${untranslated_string}$" ${po_file} \
| msgattrib --no-fuzzy \
| grep -A 1 'msgid "${untranslated_string}$"' \
| sed -n 's/msgstr "\(.*\)"/\1/p'
)
Очевидно, что это много вызовов «простой» функции:
msggrep
выводит файл .po, в котором есть только нужная мне строкаmsgattrib
следит за тем, чтобы перевод не был "нечетким" (т.е. нуждался в обновлении), так как я не могу использовать эти- Затем я вручную извлекаю перевод, используя
grep
иsed
.
Я полагаю, должен быть лучший подход к этому? В конце концов, gettext упрощает перевод моего приложения во время выполнения, но кажется несколько негибким во время сборки...