Есть ли способ go заставить GNU xgettext (или что-то подобное) работать с scala файлами? - PullRequest
0 голосов
/ 16 января 2020

Мы используем утилиты GNU gettext для создания PO-файлов непосредственно из нашей базы кода. Проблема, однако, в том, что часть нашей базы кода написана на Scala (большая часть - Java). Мы используем gradle для сборки и развертывания.

Насколько я вижу, Scala не поддерживается в соответствии с документацией xgettext:

5.1.3 Выбор языка входного файла

'-L name'

'- language = name' Указывает язык входных файлов.

Поддерживаемые языки: C, C ++, Objective C, PO, Shell, Python, Lisp, EmacsLisp, librep, Scheme, Smalltalk, Java, JavaProperties, C#, awk , YCP, Tcl, Perl, PHP, G CC -источник, NXStringTable, RST, RSJ, Glade, Lua, JavaScript, Vala, GSettings, Рабочий стол.

Есть ли способ использовать xgettext для Scala файлов? Я нашел этот плагин sbt-компилятора , который делает то, что нам нужно, но, к сожалению, мы используем gradle вместо sbt.

1 Ответ

1 голос
/ 17 января 2020

Модуль Perl Locale :: XGettext позволяет вам написать свой вариант xgettext практически для любого текстового формата. Вам нужно только предоставить синтаксический анализатор для языка / формата, который способен извлекать строки.

Можно написать синтаксический анализатор в Java с минимальным шаблонным кодом Perl вокруг него. Я описал этот процесс в своем блоге Расширение Xgettext с помощью Locale :: XGettext . Пример экстрактора в Java доступен по адресу https://github.com/gflohr/Locale-XGettext/tree/master/samples/Java

Отказ от ответственности: я являюсь автором всего вышеупомянутого программного обеспечения и документов!

Если взаимодействие с Perl кодом звучит слишком сложно, вы также можете просто написать синтаксический анализатор для Scala на выбранном вами языке, запустить его до xgettext и вывести все переводимые строки в формат, который соответствует вашей версии. xgettext понимает, например, C:

gettext("Hello, world!");
gettext("Another string.");

И затем вы просто используете сгенерированный фиктивный исходный файл в качестве ввода для xgettext вместе с другими исходными файлами внутри вашей сборки.

Возможно, стоит отметить, что xgettext всегда будет распознавать .po и .pot файлы в качестве входных данных, даже если вы вызывали его с --language=java. Это означает, что файлы .po или .pot лучше всего подходят для выгрузки переводимых строк из файла Scala, при условии, что вы найдете способ создания файлов .po / .pot.

Наконец, источники инструментов gettext разработаны для расширения. Вы можете добавить язык Scala, если вы можете написать для него экстрактор строк и средство форматирования в C. Однако вы не можете добавить поддержку другого языка во время выполнения, но вы должны скомпилировать свою собственную версию xgettext или добавить свой экстрактор в проект gettext GNU.

...