jjzjj

php - 资源包编辑器

coder 2024-04-14 原文

我决定使用 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 列表翻译。

谁能推荐任何资源包编辑器?

最佳答案

在一天中的大部分时间都在尝试各种不同的工具之后,我设计了这个工作流程,而且它对其他人也很有帮助。

ResourceBundle 对 PHP 来说是相当新的,而且没有太多信息。令人惊讶的是,虽然资源包已被各种语言(如 Java)使用了很长一段时间,但我无法找到任何可以以通用方式处理 RB 的工具。

SirDarius 建议试用 RB Manager 是一个好的开始。使用起来很简单,但是有一些问题:

  • 要扫描您的源代码,您需要使用 xml 文件设置扫描器,这可能不直观。
  • 更重要的是,扫描仪将报告未使用 key 和新 key 的列表。这些仍然需要使用 RB 管理器主应用程序手动添加到您的资源包中。
  • 最后,RB 管理器导出的 ICU 文件被破坏了。当内容本身应该作为内容导出时,RB 管理器以某种方式将它们转换为 ASCII 码的十进制等价物。这会使文件无法使用。

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

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

  1. 我假设您将有一些类或函数来包装 MessageFormatter 和 ResourceBundle 类。在我的应用程序中,我使用类似 $translate->_('text'); 的东西来执行翻译。诀窍是使用 POEdit。 POEdit 将扫描您的源文件以查找 _() 并获取 key 列表并删除旧 key 。请记住,在 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" }
    }
    

完成后,您需要从以下地址下载 ICU 包:http://site.icu-project.org/download .在 bin 目录中,您会找到一个名为 genrb 的可执行文件,它将 resourcebundle 编译成二进制文件供 PHP 使用。

命令是 genrb inputfile.txt -e UTF-8 注意输入编码指定为 UTF-8。您可以将其更改为您的输入文件使用的任何编码。

就是这样。我相信这是为 PHP 生成和翻译资源包时最简单、最高效的工作流程。

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

关于php - 资源包编辑器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7136799/

有关php - 资源包编辑器的更多相关文章

  1. ruby-on-rails - Rails 编辑表单不显示嵌套项 - 2

    我得到了一个包含嵌套链接的表单。编辑时链接字段为空的问题。这是我的表格:Editingkategori{:action=>'update',:id=>@konkurrancer.id})do|f|%>'Trackingurl',:style=>'width:500;'%>'Editkonkurrence'%>|我的konkurrencer模型:has_one:link我的链接模型:classLink我的konkurrancer编辑操作:defedit@konkurrancer=Konkurrancer.find(params[:id])@konkurrancer.link_attrib

  2. ruby - 安装 Ruby 时遇到问题(无法下载资源 "readline--patch") - 2

    当我尝试安装Ruby时遇到此错误。我试过查看this和this但无济于事➜~brewinstallrubyWarning:YouareusingOSX10.12.Wedonotprovidesupportforthispre-releaseversion.Youmayencounterbuildfailuresorotherbreakages.Pleasecreatepull-requestsinsteadoffilingissues.==>Installingdependenciesforruby:readline,libyaml,makedepend==>Installingrub

  3. ruby-on-rails - Rails 3,嵌套资源,没有路由匹配 [PUT] - 2

    我真的为这个而疯狂。我一直在搜索答案并尝试我找到的所有内容,包括相关问题和stackoverflow上的答案,但仍然无法正常工作。我正在使用嵌套资源,但无法使表单正常工作。我总是遇到错误,例如没有路线匹配[PUT]"/galleries/1/photos"表格在这里:/galleries/1/photos/1/edit路线.rbresources:galleriesdoresources:photosendresources:galleriesresources:photos照片Controller.rbdefnew@gallery=Gallery.find(params[:galle

  4. ruby - Chef LW 资源属性默认值如何引用另一个属性? - 2

    我正在尝试将一个资源属性的默认值设置为另一个属性的值。我正在为我正在构建的tomcat说明书定义一个资源,其中包含以下定义。我想要可以独立设置的“名称”和“服务名称”属性。当未设置服务名称时,我希望它默认为为“名称”提供的任何内容。以下不符合我的预期:attribute:name,:kind_of=>String,:required=>true,:name_attribute=>trueattribute:service_name,:kind_of=>String,:default=>:name注意第二行末尾的“:default=>:name”。当我在Recipe的新block中引用我

  5. ruby-on-rails - 尝试打开 .gitignore 以在文本编辑器中对其进行编辑,但在 OS X Mountain Lion 上找不到文件位置 - 2

    我使用“newapp_name”创建了一个新的Rails应用程序,我正在尝试编辑.gitignore文件,但在我的应用程序文件夹中找不到它。我在哪里可以找到它?我安装了Git。 最佳答案 .gitignore位于项目的root中,而不是app子目录中。首先打开终端并进入您的目录。您需要使用ls-a来显示stash文件。然后使用打开.gitignore 关于ruby-on-rails-尝试打开.gitignore以在文本编辑器中对其进行编辑,但在OSXMountainLion上找不到文件位

  6. ruby-on-rails - 这个 C 和 PHP 程序员如何学习 Ruby 和 Rails? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我来自C、php和bash背景,很容易学习,因为它们都有相同的C结构,我可以将其与我已经知道的联系起来。然后2年前我学了Python并且学得很好,Python对我来说比Ruby更容易学。然后从去年开始,我一直在尝试学习Ruby,然后是Rails,我承认,直到现在我还是学不会,讽刺的是那些打着简单易学的烙印,但是对于我这样一个老练的程序员来说,我只是无法将它

  7. ruby-on-rails - 如何在 vim 编辑器中使用 bundler 打开 gem 源代码 - 2

    尝试使用bundleopen命令打开gem源代码,accordingtoofficialdocumentationandinstruction.因此,我在.profile中导出编辑器:exportBUNDLER_EDITOR=viexportEDITOR=vi并尝试打开例如rails使用控制台的源代码:bundleopenrails出现错误CouldnotlocaleGemfile[ruby-2.1.1][~/]$:rails-vRails4.0.3[ruby-2.1.1][~/]$:bundle-vBundlerversion1.5.3[ruby-2.1.1][~/]$:bundle

  8. ruby-on-rails - Rails 编辑序列化的 JSON 数据 - 2

    我有一个存储JSON数据的列。当它处于编辑状态时,我不知道如何显示它。serialize:value,JSON=f.fields_for:valuedo|ff|.form-group=ff.label:short=ff.text_field:short,class:'form-control'.form-group=ff.label:long=ff.text_field:long,class:'form-control' 最佳答案 代替=f.fields_for:valuedo|ff|请使用以下代码:=f.fields_for:va

  9. ruby - block 看不到方法( Chef 资源) - 2

    假设我们有两个资源:template'template1'doowner'root'group'root'endtemplate'template2'doowner'root'group'root'end我想在资源中重用代码。但是,如果我在配方中定义了一个过程,您会得到owner、group等的NoMethodError。为什么会这样?词法范围没有什么不同,是吗?因此,我必须使用self.instance_eval&common_cfg。common_cfg=Proc.new{owner'root'group'root'}template'template1'docommon_cfg.

  10. ruby - IO::EAGAINWaitReadable:资源暂时不可用 - 读取会阻塞 - 2

    当我尝试使用“套接字”库中的方法“read_nonblock”时出现以下错误IO::EAGAINWaitReadable:Resourcetemporarilyunavailable-readwouldblock但是当我通过终端上的IRB尝试时它工作正常如何让它读取缓冲区? 最佳答案 IgetthefollowingerrorwhenItrytousethemethod"read_nonblock"fromthe"socket"library当缓冲区中的数据未准备好时,这是预期的行为。由于异常IO::EAGAINWaitReadab

随机推荐