【问题标题】:How to automatically remove unused gettext strings?如何自动删除未使用的 gettext 字符串?
【发布时间】:2012-05-03 16:54:33
【问题描述】:

我有一个 Web 应用程序,其中我有几个使用 gettext 的翻译。但现在我已经对应用程序进行了重大重写,虽然大部分字符串是相同的,但也有相当多的字符串被显着更改或删除。

我使用 xgettext 创建 .po 文件,很高兴能够在代码中找到新字符串并将它们添加到 .po 文件中,但我没有看到删除未找到字符串的选项在代码中。

是否有一种自动化的方法可以从 .po 文件中删除不再在代码中的字符串?

【问题讨论】:

  • 它不是自动化的,但我的工作是运行 xgettext 两次。第一次运行我使用参数--no-location。第二次运行将位置放回文件上。现在不再使用的文本字符串没有位置,可以轻松识别删除。

标签: gettext xgettext


【解决方案1】:

假设您有一个新的 PO 模板文件,其中 在名为 messages.pot 的文件中仅包含应位于最终 PO 目录中的字符串,并且在 messages.po 中包含目标 PO 目录,您可以这样做这个:

msgattrib --set-obsolete --ignore-file=messages.pot -o messages.po messages.po

这会标记所有过时的字​​符串。 --set-obsolete 开关告诉 msgattrib 将 obsolete 标志应用于目标文件中的所有字符串,--ignore-file 告诉它忽略出现在指定文件中的字符串(在我们的例子中是 PO 模板)。

如果您还想完全删除它们,还有一个步骤:

msgattrib --no-obsolete -o messages.po messages.po

您可以阅读有关msgattrib 命令here 的更多信息。

【讨论】:

    【解决方案2】:

    就这样

    find . -name '*.po' -print0 | while read -d '' -r file; do msgattrib --output-file="$file" --no-obsolete "$file"; done
    

    【讨论】:

      猜你喜欢
      • 2014-12-26
      • 1970-01-01
      • 2015-07-04
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多