我要构建一个Silex/Symfony2项目,我一直在寻找一种方法来生成基于项目内要翻译的文本的XLIFF/PO/YAML翻译文件,但没有找到任何指令或文档。
我的问题是:是否有一种自动的方法来生成翻译文件(s)在特定格式的Symfony2/Silex项目?
如果是,请告诉我如何生成文件,然后更新翻译。
如果没有,请告诉我如何创建翻译文件,然后为我的项目添加更多的文本?我正在寻找一个基于桌面或基于web的编辑器,而不是使用正常的编辑器,如Transifex, GetLocalization(但他们没有选项来创建一个新的文件或添加更多的文本)
在网上搜索了很长时间后,我找到了一个不错的:
https://github.com/schmittjoh/JMSTranslationBundle我看到你已经找到了一个转换器,但是要回答你关于生成初始翻译文件的第一个问题-
如果你的系统上安装了Gettext,你可以从你的"项目内部要翻译的文本"生成一个PO文件。命令行程序xgettext
将扫描源文件,查找您正在使用的函数。
例子:
要扫描PHP文件以查找trans
方法调用的实例,如这里所示,您可以使用以下命令—
find . -name "*.php" | xargs xgettext --language=PHP --keyword=trans --output=messages.pot
关于编辑器的问题:
您可以使用任何PO编辑器(例如POEdit)来管理翻译,但是正如您所说,您最终需要将PO文件转换为Symfony的XLIFF或YAML语言包。
我看到你已经找到了一个转换工具。你也可以试试我为Loco写的那篇。它支持PO到YAML, PO到XLIFF
忙碌人群的解决方案(UNIX)
在终端中可以执行如下命令:
$ grep -rEo --no-filename "'.+'|btransb" templates/ > output.txt
将输出要翻译的消息列表:
'Please provide your email'|trans
'Phone'|trans
'Please provide your phone number'|trans
...
我是说几乎…但是你通常可以在这里做一些工作…
显然,你必须根据自己的喜好调整命令(transchoice
,双引号而不是单引号…)。
不理想,但可以帮助!
grep
options
-
grep -R, -r, --recursive
:读取每个目录下的所有文件,递归地,这相当于-d
递归选项。 -
grep -E, --extended-regexp
:将PATTERN解释为扩展正则表达式。 -
grep -o, --only-matching
:只显示匹配PATTERN的部分。 -
grep -h, --no-filename
:当搜索多个文件时,禁止输出文件名前缀
(源)