【问题标题】:Need just the strings for translation to be generated by xgettext, not all the strings in the source files只需要 xgettext 生成的翻译字符串,而不是源文件中的所有字符串
【发布时间】:2011-04-06 16:00:08
【问题描述】:

真的很纠结这个。

我最近设置了一个 bash shell 脚本来提取、连接和去重字符串以翻译出整个网站的视图页面(使用 MVC 框架),它看起来像这样:

for x in *.php; do xgettext --no-wrap --language=PHP -e --flag=_:1:pass-c-format -a "$x" -o "${x%.php}.pot"; done
msgcat -u -s --output-file=$WEBSITENAME-concat.pot *.pot
msguniq -u --output-file=$WEBSITENAME-unique.pot $WEBSITENAME-concat.pot
msgmerge -s -v -U $WEBSITENAME.po $WEBSITENAME-unique.pot

除了按照难度顺序排列的这两件事之外,上述工作绝对正常:

  1. 在所有网站源代码中,我一直小心确保所有需要翻译的字符串都被函数 _( 'string to translate here' ) 包围,但是 xgettext 命令正在从我所知道的内容中提取文件中的几乎每个字符串,而不仅仅是 _('') 函数包围的字符串。这意味着我生成的 .pot 文件包含变量名、URL、格式字符串、函数参数、配置数据和其他不应传递给我们的翻译器的不适当字符串。由于网站的大小,手动删除这些是不切实际的 - 我们正在查看近 80,000 个字符串条目,这只是我需要在接下来的 6 个中以相同方式处理的数字中的第一个网站周!如何将 xgettext 配置为仅提取用于翻译的字符串?

  2. 提取的很多字符串中都有换行符,在字符串中插入为\n。有什么方法可以将 xgettext 配置为不这样做,或者有一种简单的方法来删除这些?

我一直在阅读文档并在网上搜索数小时甚至数天,试图找到解决方案,特别是解决问题。 1,非常感谢 gettext 大师的帮助!提前谢谢..

【问题讨论】:

    标签: php gettext xgettext


    【解决方案1】:

    这里只是猜测,但您遇到的第一个问题可能是由 -a 选项引起的。来自xgettext manual

    -a, --extract-all           extract all strings
    

    附带说明一下,您的 xgettext 调用似乎相当复杂。当然,我并不确切知道你想做什么,但对我来说,以下命令就足够了:

    xgettext -L PHP --from-code=utf-8 *.php -o messages.pot
    

    这会将所有_() 括起来的字符串保存到messages.pot 中。

    【讨论】:

    • 从您的命令中删除“-a”将解决问题编号 1。对于间距,我在命令中添加了“--no-wrap”,它停止包装长字符串。
    【解决方案2】:

    第 1 点的可能答案。

    我不知道您使用的版本,但使用 Delphi 版本,您可以添加一个名为 ggexclude.cfg 的文件来排除某些组件。

    # exclude all occurences of the specified class
    # and property in all DFM files in or below the
    # path where "ggexclude.cfg" is in
    [exclude-form-class-property]
    TField.FieldName
    ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-09
      • 1970-01-01
      • 2017-01-26
      • 1970-01-01
      • 1970-01-01
      • 2021-02-02
      相关资源
      最近更新 更多