【问题标题】:poedit and xml filespoedit 和 xml 文件
【发布时间】:2011-03-19 11:13:49
【问题描述】:

如何配置poedit从xml文件中提取字符串?

我在 .xml 中有 Zend Framework 导航项,如下所示:

<entry-i>
    <label>Text to translate</label>
    <params>
       ...
    <params>
<entry-i>

我希望 poedit 只读取来自&lt;label&gt;s 的消息。

【问题讨论】:

    标签: internationalization translation gettext poedit xgettext


    【解决方案1】:

    上述滥用 Glade 提取器来解析 non-Glade XML 文件的建议是错误的。它永远不会很好地工作(例如:这里有一些 cmets)。当然,这比 2010 年的什么都没有要好。

    从 gettext 0.19.7 开始(自 1.8.7 起与 Poedit 捆绑),有一个更好的方法:现在通过 ITS rules 在 gettext 中内置支持自定义 XML 文件。

    从自定义 XML 文件中提取字符串的最佳方法是

    1. 为您的扩展添加一个自定义提取器,指定标准 gettext 调用,没有-L glade 位。
    2. Write ITS rules 用于您的文件格式。
    3. 将它们放在 Poedit 安装中其他 .its 和 .loc 文件的位置。

    【讨论】:

      【解决方案2】:

      效果很好!!我在 Windows 7 中使用 Poedit 1.4.6 发现了关于“glade not supported”的问题,但我通过下载最后一个 gnuwin32 二进制文件和依赖项来修复,如 user496209 所说。不要下载完整包,因为 PoEdit 自带了自己的 gettext 库,所以只需下载二进制文件和依赖项并将请求的文件替换到 poedit 文件夹中。

      【讨论】:

        【解决方案3】:

        对于在 Windows 上遇到 Poedit 配置问题的任何人,特别是如果您收到一条错误消息,指出 glade 和 expat 不可用,请将提供的 xgettext.exe 替换为 gnuwin32 项目中的当前一个:

        http://gnuwin32.sourceforge.net/packages/gettext.htm

        您需要下载二进制文件和依赖项。但是,只有二进制 xgettext.exe 必须提取和相关文件(只需运行它,它会告诉你缺少什么)

        【讨论】:

        • 请注意,这不再需要,从 Poedit 1.6 左右开始。当前版本是在启用 xgettext 中的所有内容的情况下构建的。
        【解决方案4】:

        我也一直在寻找解决方案,我刚刚得到它的工作!

        在 Poedit(我有 1.4.2)中,添加具有以下属性的新解析器 (Edit &gt; Preferences):

        • 语言:XML
        • 以分号分隔的扩展名列表(例如 .cpp;.h):*.xml
        • 解析器命令:xgettext --force-po -o %o %C %K %F -L glade
        • 关键字列表中的一项:-k%k
        • 输入文件列表中的一项:%f
        • 源代码字符集:--from-code=%c

        在您的翻译项目中,将label 和title 添加到您的关键字列表并更新目录。

        【讨论】:

        • 抱歉,这对我不起作用,我已按照说明进行操作,但无法打开 XML 文件。
        • 嗨,有没有办法用这个配置翻译属性 title="Text to translate" ?谢谢
        • 你好,我也想知道XML属性是否可以解析?有任何想法吗?谢谢
        【解决方案5】:

        看起来 PoEdit 还不支持 XML。

        我创建了一个小 php 脚本,将标签提取到 .php 文件中, PoEdit 确实理解。

        $xml = simplexml_load_file("../application/configs/navigation.xml") 
           or die("Error: Cannot open XML file");
        
        echo '<?';
        foreach($xml->xpath('//label') as $label){
          echo 'echo _("'.$label.'");'. PHP_EOL;
        }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-04-22
          • 2010-11-25
          • 2019-01-28
          • 1970-01-01
          • 2016-01-10
          • 2012-02-24
          • 1970-01-01
          相关资源
          最近更新 更多