我们使用GNU gettext utilities直接从我们的代码库创建PO文件。但问题是-我们的某些代码库是用Scala编写的(大部分是Java)。我们正在使用gradle进行构建和部署。
据我所知,根据xgettext文档,Scala不是受支持的语言:
有什么方法可以将xgettext用于Scala文件吗?我发现this sbt compiler plugin可以满足我们的需求,但是不幸的是,我们使用的是gradle而不是sbt。
最佳答案
Perl模块Locale::XGettext允许您为几乎每种文本格式编写自己的xgettext变体。您只需要提供能够提取字符串的语言/格式的解析器即可。
可以用最少的Perl样板代码用Java编写解析器。我已经在博客文章Extending Xgettext With Locale::XGettext中描述了该过程。 https://github.com/gflohr/Locale-XGettext/tree/master/samples/Java提供了Java样本提取器
免责声明:我是上述所有软件和文档的作者!
如果与Perl代码的接口(interface)听起来太复杂,您也可以只使用自己选择的语言为Scala编写一个解析器,在xgettext之前运行该解析器,然后将所有可翻译的字符串转储为xgettext
版本可以理解的格式,例如C:
gettext("Hello, world!");
gettext("Another string.");
然后,您只需使用生成的虚拟源文件以及构 build 置中的其他源文件作为
xgettext
的输入即可。值得注意的是,即使您已使用
xgettext
调用.po
,它也始终会将.pot
和--language=java
文件识别为输入。这意味着,.po
或.pot
文件最适合从Scala文件中转储可翻译字符串,前提是您找到一种生成.po
/ .pot
文件的方法。最后,gettext工具的源被设计为可扩展的。如果您能够在C语言中编写字符串提取器和格式检查器,则可以添加Scala语言。但是,您无法在运行时添加对另一种语言的支持,但必须编译自己的
xgettext
版本或贡献您的提取器到GNU gettext项目。关于scala - 有什么方法可以使GNU gettext(或类似的东西)与scala文件一起使用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59769632/