Использование POEdit — только поиск строк в определенном домене

Я создал тему WordPress, которую хочу перевести.

В моей теме я использую некоторые переводы из woocommerce (Т.е. <?php _('Your cart', 'woocommerce'); ?>).

Эти строки woocommerce, я не хочу переводить снова, естественно, так как они уже переведены. Но когда я использую poedit для сканирования моей темы, конечно, он найдет ВСЕ текстовые домены.

Итак, мой вопрос:

Как я могу сказать POEdit, чтобы он брал только строки в определенном текстовом домене?

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

Я нашел этот ответ:

Однако это не похоже на работу для меня. я добавил ri:1,3c в список, как описано, но это ничего не меняет, и я не имею никакого другого представления о том, что с ним делать.

Посмотрите, как я это сделал:

поедит источники ключевых слов

5

Решение

Ни инструменты GNU gettext, ни Poedit (который их использует) не поддерживают это конкретное неправильное использование gettext.

В gettext, домен это примерно «кусок программного обеспечения» — программа, библиотека, плагин, тема. Как таковой, он обычно находится в одном дереве каталогов и является в одиночестве там — или, по крайней мере, если у вас есть несколько частей = доменов, они разумно организованы в несколько подкаталогов, которыми вы можете ограничить извлечение.

Смешивание и сопоставление доменов в пределах отдельный файл как вы делаете, это не то, как gettext предназначался для использования, и нет разумного решения, чтобы справиться с этим, кроме использования вашей собственной вспомогательной функции, например, оборачивая все тексты WooCommerce в __woo (который вы должны определить, очевидно) и не добавив это в список ключевых слов в Poedit.

1

Другие решения

Лучшее решение было бы, если бы 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
1

По вопросам рекламы [email protected]