我创建了一个我希望翻译的WordPress主题。
在我的主题中,我使用woocommerce
的一些翻译(即<?php _('Your cart', 'woocommerce'); ?>
)。
Theese woocommerce字符串,我不想再翻译,因为它们已经翻译过了。但是当我使用poedit扫描我的主题时,它当然会找到所有文本域。
所以我的问题是:
如何告诉POEdit只选择特定文本域中的字符串?
__('Something', 'my-text-domain')
_e('Something else', 'my-text-domain')
我找到了这个答案:
但它似乎对我不起作用。我已按照说明将ri:1,3c
添加到列表中,但它并没有改变任何内容,而且我没有其他任何关于如何处理它的线索。
看看我是怎么做到的:
答案 0 :(得分:1)
GNU gettext工具和Poedit(使用它们)都不支持这种特殊的gettext滥用。
在gettext中, domain 大致是“一块软件” - 一个程序,一个库,一个插件,一个主题。因此,它通常驻留在单个目录树中,并且单独 - 或者至少,如果您有多个=域,您可以将它们组织成一些子目录,您可以限制它们提取到。
在单个文件中混合和匹配域不是如何使用gettext的,除了使用自己的帮助函数之外,没有合理的解决方案来处理它,例如:通过将所有woocommerce文本包装到__woo
(显然必须定义)和不将其添加到Poedit中的关键字列表中。
答案 1 :(得分:1)
最好的解决方案是,如果gettext或Poedit能够将翻译限制到某个域。作为瓦茨拉夫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