ResourceBundle编辑器

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列表.

任何人都可以推荐任何资源包编辑器吗?

F21*_*F21 6

在花了大量时间尝试了大量不同的工具之后,我已经设计了这个工作流程,并且它也会帮助其他工具.

ResourceBundles对于PHP来说还是一个新手,并没有太多的信息.令人惊讶的是,虽然资源包已被各种语言(如Java)使用了很长一段时间,但我无法找到任何能够以一般方式处理RB的工具.

SirDarius建议尝试RB Manager是一个好的开始.它很容易使用,但有一些问题:

  • 要扫描源代码,您需要使用xml文件设置扫描程序,这可能不直观.
  • 更重要的是,扫描仪将报告未使用的密钥和新密钥的列表.这些仍然需要使用RB Manager主应用程序手动添加到资源包中.
  • 最后,RB Manager导出的ICU文件被破坏.如果内容应该仅作为内容导出,RB Manager会以某种方式将它们转换为ASCII代码的十进制等效值.这使文件不可用.

我尝试过各种格式之间的转换工具,即XLIFF格式,但我发现生成的XLIFF文件经常出错,下一篇软件会拒绝处理它.

对于那些可能在将来遇到这个问题的人来说,这就是我所做的:

  1. 我假设你将有一些类或函数来包装MessageFormatter和ResourceBundle类.在我的应用程序中,我使用类似的东西$translate->_('text');来执行翻译.诀窍是使用POEdit.POEdit将扫描您的源文件_()并获取密钥列表并删除旧密钥.请记住,在MessageFormatter中,您只使用消息ID,例如system.warning.reason而不是完整字符串"您的操作被拒绝.已记录".

  2. 然后,您应该使用POEdit编写您的翻译.处理复数有点不同.您不应该设置任何处理复数的规则.处理复数是为翻译字符串内联完成的,这非常灵活.有关示例,请参见http://userguide.icu-project.org/formatparse/messages.

  3. 翻译完成后,我编写了一个小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生成和翻译资源包时最简单,最高效的工作流程.

如果有人想出更好的方法,或者甚至是一个完整的独立程序来处理这个问题,请发表评论!