Я создал тему WordPress, которую хочу перевести.
В моей теме я использую некоторые переводы из woocommerce
(Т.е. <?php _('Your cart', 'woocommerce'); ?>
).
Эти строки woocommerce, я не хочу переводить снова, естественно, так как они уже переведены. Но когда я использую poedit для сканирования моей темы, конечно, он найдет ВСЕ текстовые домены.
Итак, мой вопрос:
Как я могу сказать POEdit, чтобы он брал только строки в определенном текстовом домене?
__('Something', 'my-text-domain')
_e('Something else', 'my-text-domain')
Я нашел этот ответ:
Однако это не похоже на работу для меня. я добавил ri:1,3c
в список, как описано, но это ничего не меняет, и я не имею никакого другого представления о том, что с ним делать.
Посмотрите, как я это сделал:
Ни инструменты GNU gettext, ни Poedit (который их использует) не поддерживают это конкретное неправильное использование gettext.
В gettext, домен это примерно «кусок программного обеспечения» — программа, библиотека, плагин, тема. Как таковой, он обычно находится в одном дереве каталогов и является в одиночестве там — или, по крайней мере, если у вас есть несколько частей = доменов, они разумно организованы в несколько подкаталогов, которыми вы можете ограничить извлечение.
Смешивание и сопоставление доменов в пределах отдельный файл как вы делаете, это не то, как gettext предназначался для использования, и нет разумного решения, чтобы справиться с этим, кроме использования вашей собственной вспомогательной функции, например, оборачивая все тексты WooCommerce в __woo
(который вы должны определить, очевидно) и не добавив это в список ключевых слов в Poedit.
Лучшее решение было бы, если бы gettext или Poedit смогли ограничить переводы определенным доменом. Как Вацлав указывает на то, это невозможно.
Обходной путь может заключаться в последующей обработке файлов 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