【问题标题】:Using POEdit -- only search for strings in specific domain使用 POEdit -- 仅搜索特定域中的字符串
【发布时间】:2015-08-05 23:38:33
【问题描述】:

我创建了一个想要翻译的 WordPress 主题。

在我的主题中,我使用了来自woocommerce(即<?php _('Your cart', 'woocommerce'); ?>)的一些翻译。

这些 woocommerce 字符串,我自然不想再翻译,因为它们已经翻译了。但是当我使用 poedit 扫描我的主题时,它当然会找到所有文本域。

所以我的问题是:

如何告诉 POEdit 只选取特定文本域中的字符串?

  • __('Something', 'my-text-domain')
  • _e('Something else', 'my-text-domain')

我找到了这个答案:

但是它似乎对我不起作用。我已按照描述将ri:1,3c 添加到列表中,但它并没有改变任何东西,而且我不知道如何处理它。

看看我是怎么做到的:

【问题讨论】:

  • 您真的完全不理解您所链接的那个答案(和问题)吗? ri:1,3c 不是什么神奇的调用,它用于特定用途的名为ri的函数
  • 哦,那个链接的答案是非常错误的,它混淆了 domainscontexts 这两个完全不同的东西,正如 Andy 所说的那样。跨度>

标签: php wordpress translation poedit po


【解决方案1】:

最好的解决方案是如果 gettext 或 Poedit 能够将翻译限制到某个域。作为 Václav points out,这是不可能的。

解决方法可能是对 my-text-domain.pot 或 *.po 文件进行后处理,并删除实际上来自其他插件(如 woocommerce)的所有字符串:

#!/bin/bash

# DRY_RUN="echo"
DRY_RUN=""
MY_DOMAIN="my-text-domain"

for PO in *.po; do
  echo "Removing other domains from file: $PO"
  # OTHER_DOMAINS are all the domain that are not MY_DOMAIN
  OTHER_DOMAINS=`grep "# @ " $PO  | grep -v $MY_DOMAIN | sort | uniq | grep -o '\w*'`
  for OTHER_DOMAIN in $OTHER_DOMAINS; do
    echo "  Removing ${OTHER_DOMAIN}..."
    # Replace ever "foreign" strings with a linebreak
    # Begins with "# @ OTHER_DOMAIN" and ends with an empty line
    $DRY_RUN perl -0777 -i -pe "s/# @ ${OTHER_DOMAIN}\n.+?\n\n//smg" $PO
  done
done

【讨论】:

    【解决方案2】:

    GNU gettext 工具和 Poedit(使用它们)都不支持这种对 gettext 的特殊滥用。

    在 gettext 中,domain 大致是“一个软件”——一个程序、一个库、一个插件、一个主题。因此,它通常驻留在单个目录树中并且单独在那里 - 或者至少,如果您有多个片段=域,您可以将它们合理地组织到一些您可以限制的子目录中提取到。

    在一个单个文件中混合和匹配域并不是你想要使用 gettext 的方式,除了使用你自己的辅助函数之外,没有合理的解决方案来处理它,例如通过将所有 woocommerce 文本包装到 __woo (显然,您必须定义)并且将其添加到 Poedit 中的关键字列表中。

    【讨论】:

    • 这真的很有趣,同时也很令人失望……为什么还要在 WordPress 中使用文本域?
    • @GDY 因为您的 WordPress 实例通常同时运行多个包,即 (WP 本身、主题、所有插件),而您不需要希望他们的翻译发生冲突。这就是域适用于的原因。
    猜你喜欢
    • 2012-09-26
    • 1970-01-01
    • 1970-01-01
    • 2017-09-18
    • 1970-01-01
    • 2019-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多