我决定使用 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 是一个好的开始。使用起来很简单,但是有一些问题:
我尝试过各种格式之间的转换工具,即XLIFF格式,但我发现生成的XLIFF文件经常是格式错误的,下一个软件会拒绝处理它。
对于那些将来可能会遇到这个问题的人,这是我所做的:
我假设您将有一些类或函数来包装 MessageFormatter 和 ResourceBundle 类。在我的应用程序中,我使用类似 $translate->_('text'); 的东西来执行翻译。诀窍是使用 POEdit。 POEdit 将扫描您的源文件以查找 _() 并获取 key 列表并删除旧 key 。请记住,在 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" }
}
完成后,您需要从以下地址下载 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/
我得到了一个包含嵌套链接的表单。编辑时链接字段为空的问题。这是我的表格: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
当我尝试安装Ruby时遇到此错误。我试过查看this和this但无济于事➜~brewinstallrubyWarning:YouareusingOSX10.12.Wedonotprovidesupportforthispre-releaseversion.Youmayencounterbuildfailuresorotherbreakages.Pleasecreatepull-requestsinsteadoffilingissues.==>Installingdependenciesforruby:readline,libyaml,makedepend==>Installingrub
我真的为这个而疯狂。我一直在搜索答案并尝试我找到的所有内容,包括相关问题和stackoverflow上的答案,但仍然无法正常工作。我正在使用嵌套资源,但无法使表单正常工作。我总是遇到错误,例如没有路线匹配[PUT]"/galleries/1/photos"表格在这里:/galleries/1/photos/1/edit路线.rbresources:galleriesdoresources:photosendresources:galleriesresources:photos照片Controller.rbdefnew@gallery=Gallery.find(params[:galle
我正在尝试将一个资源属性的默认值设置为另一个属性的值。我正在为我正在构建的tomcat说明书定义一个资源,其中包含以下定义。我想要可以独立设置的“名称”和“服务名称”属性。当未设置服务名称时,我希望它默认为为“名称”提供的任何内容。以下不符合我的预期:attribute:name,:kind_of=>String,:required=>true,:name_attribute=>trueattribute:service_name,:kind_of=>String,:default=>:name注意第二行末尾的“:default=>:name”。当我在Recipe的新block中引用我
我使用“newapp_name”创建了一个新的Rails应用程序,我正在尝试编辑.gitignore文件,但在我的应用程序文件夹中找不到它。我在哪里可以找到它?我安装了Git。 最佳答案 .gitignore位于项目的root中,而不是app子目录中。首先打开终端并进入您的目录。您需要使用ls-a来显示stash文件。然后使用打开.gitignore 关于ruby-on-rails-尝试打开.gitignore以在文本编辑器中对其进行编辑,但在OSXMountainLion上找不到文件位
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我来自C、php和bash背景,很容易学习,因为它们都有相同的C结构,我可以将其与我已经知道的联系起来。然后2年前我学了Python并且学得很好,Python对我来说比Ruby更容易学。然后从去年开始,我一直在尝试学习Ruby,然后是Rails,我承认,直到现在我还是学不会,讽刺的是那些打着简单易学的烙印,但是对于我这样一个老练的程序员来说,我只是无法将它
尝试使用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
我有一个存储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
假设我们有两个资源: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.
当我尝试使用“套接字”库中的方法“read_nonblock”时出现以下错误IO::EAGAINWaitReadable:Resourcetemporarilyunavailable-readwouldblock但是当我通过终端上的IRB尝试时它工作正常如何让它读取缓冲区? 最佳答案 IgetthefollowingerrorwhenItrytousethemethod"read_nonblock"fromthe"socket"library当缓冲区中的数据未准备好时,这是预期的行为。由于异常IO::EAGAINWaitReadab