我决定使用ResourceBundles为我的php应用程序提供翻译。虽然ResourceBundle(http://www.php.net/manual/en/class.resourcebundle.php)功能很新,但我更喜欢它在gettext上的工作方式。
我的问题是有没有好的ResourceBundle编辑器?特别是我正在寻找能够扫描所有源文件并生成需要翻译和/或更新的消息ID列表的文件。
以前,我使用POEdit为gettext生成翻译文件。它能够扫描我的源文件以获取_()等函数,并向我提供要翻译的消息ID列表。
我已经尝试安装了一个eclipse插件(http://sourceforge.net/projects/eclipse-rbe/),虽然它有一个很好的GUI,但它不扫描我的源文件以生成一个消息ID列表平移。
有人可以推荐任何资源包编辑器吗?
答案 0 :(得分:6)
在花了大量时间尝试了大量不同的工具之后,我已经设计了这个工作流程,并且它也会帮助其他人。
ResourceBundles对于PHP来说还是一个新手,并没有太多的信息。令人惊讶的是,虽然资源包已被各种语言(如Java)使用了很长一段时间,但我无法找到任何能够以一般方式处理RB的工具。
SirDarius建议尝试RB Manager是一个好的开始。它很容易使用,但有一些问题:
我尝试过各种格式之间的转换工具,即XLIFF格式,但我发现生成的XLIFF文件经常出错,下一部分软件会拒绝处理它。
对于那些可能在将来遇到这个问题的人来说,这就是我所做的:
我假设你将有一些类或函数来包装MessageFormatter和ResourceBundle类。在我的应用程序中,我使用$translate->_('text');
之类的东西来执行翻译。诀窍是使用POEdit。 POEdit将扫描您的源文件_()并获取密钥列表并删除旧密钥。请记住,在MessageFormatter中,您只使用消息ID,例如system.warning.reason而不是完整字符串“您的操作被拒绝。已记录”。
然后您应该使用POEdit编写您的翻译。处理复数有点不同。您不应该设置任何处理复数的规则。处理复数是为翻译字符串内联完成的,这非常灵活。有关示例,请参见此处:http://userguide.icu-project.org/formatparse/messages。
翻译完成后,我编写了一个小PHP脚本,将POEdit生成的.mo文件转换为等效的ICU文件。为解析.mo文件,我在Zend_Translate中使用了gettext适配器。它还包含一个捕获所有消息ID和消息的功能,这非常有用。然后,您将该数据转换为ICU格式,如下所示:
root {
// message ID {" Pattern "}
system.warning.reason { "Your action was denied. This has been logged" }
}
完成此操作后,您需要从http://site.icu-project.org/download下载ICU包。在bin目录中,您将找到一个名为genrb的可执行文件,它将resourcebundle编译为二进制文件供PHP使用。
命令为genrb inputfile.txt -e UTF-8
,注意输入编码指定为UTF-8。您可以将其更改为输入文件使用的任何编码。
就是这样。我相信这是为PHP生成和翻译资源包时最简单,最高效的工作流程。
如果有人想出更好的方法,或者甚至是一个完整的独立程序来处理这个问题,请发表评论!
答案 1 :(得分:0)
您可以尝试:http://icu-project.org/download/rbmanager.html
为PHP资源包类所基于的ICU项目编写的Resource Bundle Manager。