F21*_*F21 4 php resourcebundle internationalization
我决定使用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列表.
任何人都可以推荐任何资源包编辑器吗?
在花了大量时间尝试了大量不同的工具之后,我已经设计了这个工作流程,并且它也会帮助其他工具.
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" }
}
Run Code Online (Sandbox Code Playgroud)完成后,您需要从http://site.icu-project.org/download下载ICU软件包.在bin目录中,您将找到一个名为genrb的可执行文件,它将resourcebundle编译为二进制文件供PHP使用.
该命令genrb inputfile.txt -e UTF-8注意到输入编码被指定为UTF-8.您可以将其更改为输入文件使用的任何编码.
而已.我相信这是为PHP生成和翻译资源包时最简单,最高效的工作流程.
如果有人想出更好的方法,或者甚至是一个完整的独立程序来处理这个问题,请发表评论!
| 归档时间: |
|
| 查看次数: |
1866 次 |
| 最近记录: |