只需要由xgettext生成转换字符串,而不是源文件中的所有字符串

时间:2011-04-06 16:00:08

标签: php gettext xgettext

真的在努力解决这个问题。

我最近设置了一个bash shell脚本来提取,连接和重复删除字符串,以便从整个webite的视图页面(正在使用的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. 在整个网站源代码中,我一直小心翼翼地确保所有需要翻译的字符串都被函数 _('要翻译的字符串')所包围,但是< strong> xgettext 命令几乎从我所知道的文件中提取文件中的每个字符串,而不仅仅是 _('')函数包围的字符串。这意味着我生成的 .pot 文件包含变量名,URL,格式字符串,函数参数,配置数据和其他不合适的字符串,这些字符串不应传递给我们的翻译人员。由于网站的大小,手动删除这些是不切实际的 - 我们正在查看近80,000个字符串条目,这只是我需要在接下来的6个中以相同方式处理的数字的第一个网站周!如何将 xgettext 配置为仅提取用于翻译的字符串?

  2. 提取的很多字符串都有换行符,在字符串中插入 \ n 。是否有某种方法可以将 xgettext 配置为不执行此操作,或者是一种简单的方法来删除它们?

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

2 个答案:

答案 0 :(得分:4)

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

-a, --extract-all           extract all strings

作为旁注,您的xgettext调用看起来相当复杂。我当然不知道你想要做什么,但对我来说,以下命令就足够了:

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

这会将所有_()个封闭的字符串保存到messages.pot。

答案 1 :(得分:0)

第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
...