有什么方法可以使GNU xgettext(或类似的东西)与scala文件一起使用?

问题描述 投票:0回答:1

我们正在使用GNU gettext utilities直接从我们的代码库创建PO文件。但问题是-我们的某些代码库是用Scala编写的(大部分是Java)。我们正在使用gradle进行构建和部署。

据我所知,根据xgettext文档,Scala不是受支持的语言:

5.1.3输入文件语言的选择

‘-L名称’

‘-language = name’指定输入文件的语言。

支持的语言是C,C ++,ObjectiveC,PO,Shell,Python,Lisp,EmacsLisp,librep,Scheme,Smalltalk,Java,JavaProperties,C#,awk,YCP,Tcl,Perl,PHP,GCC源,NXStringTable, RST,RSJ,Glade,Lua,JavaScript,Vala,GSettings,桌面。

有什么方法可以将xgettext用于Scala文件?我发现this sbt compiler plugin可以满足我们的需求,但不幸的是,我们使用的是gradle而不是sbt。

scala gradle gettext po xgettext
1个回答
1
投票

Perl模块Locale::XGettext允许您为几乎每种文本格式编写自己的xgettext变体。您只需要提供能够提取字符串的语言/格式的解析器即可。

可以用最少的Perl样板代码用Java编写解析器。我已经在博客文章Extending Xgettext With 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工具的源被设计为可扩展的。如果您能够用C编写字符串提取器和格式检查器,则可以添加Scala语言。但是,您不能在运行时添加对另一种语言的支持,但是必须编译自己的xgettext版本或进行贡献您的提取器到GNU gettext项目。

© www.soinside.com 2019 - 2024. All rights reserved.