Нужен ли текстовый домен для дочерней темы?

8

Извините за вопрос нуба.

Нужен ли текстовый домен для дочерней темы? Я создаю простую дочернюю тему без объявленного текстового домена. Поэтому, когда я использую строки, которые должны быть переведены, я должен использовать текстовую область родительской темы (да, родительская тема имеет загруженный текстовый домен, а также файлы .mo / .po).

Например, добавив эту строку в шаблон моей дочерней темы

<?php __('Some String', 'parent-text-domain');> 

Будет ли строка выше переведена?

заранее спасибо

Ayanize
источник

Ответы:

7

TL; DR: если вы используете строки, которые находятся в родительской теме, точно так же, как они используются в родительской теме, вам не нужно иметь текстовый домен для вашей дочерней темы.

Но если вы используете строки, которые не используются в родительской теме, чтобы сделать их переводимыми, вам понадобится другой текстовый домен со связанными .moфайлами translation ( ).


Рабочий процесс перевода

Когда WordPress встречает строку в функции перевода, это:

  1. Проверяет, был ли загружен перевод для требуемого текстового домена (через load_plugin_textdomainили load_theme_textdomainили load_textdomain), если это так, перейдите к пункту 3.
  2. Проверяет, wp-content/languagesсодержит ли папка переводов (по умолчанию ) соответствующий файл текстового домена. Соответствующий файл textdomain - это "{$domain}-{$locale}.mo"где $domainтекстовый домен строки для перевода и $localeтекущая локаль для веб-сайта. Если этот файл не найден, возвращается исходная строка, в противном случае она загружается и WP переходит к следующей точке.
  3. Когда текстовый домен загружен, WP проверяет, содержится ли необходимая строка в этом файле, если не возвращается исходная строка, в противном случае WP переходит к следующей точке.
  4. Если найденная переведенная строка требует некоторого разрешения в единственном / множественном числе (например, при использовании _n()), то все готово. В противном случае WP переходит к следующему пункту.
  5. Хуки фильтра применяются к переведенной строке (см. Https://developer.wordpress.org/?s=gettext&post_type%5B%5D=wp-parser-hook ) и, наконец, результат возвращается.

Так?

Когда вы используете текстовый домен родительской темы в функции перевода из дочерней темы (при условии, что родительская тема отправляет и загружает файл textdomain или у него есть файл перевода в папке переводов), WordPress прибудет в пункт 3. в списке выше, и поэтому, если строка доступна в файле (потому что используется в родительской теме), она будет переведена, в противном случае это не так.

Это означает, что для пользовательских строк в родительской теме необходим собственный файл перевода.

Теоретически, можно использовать родительский текстовый домен в другом файле перевода, потому что WordPress способен загружать один и тот же текстовый домен несколько раз, «объединяя» их, но это имеет проблемы, поскольку в формате "{$domain}-{$locale}.mo"в папках перевода может существовать только один файл ( см. пункт 2. в списке выше).

Итак, в заключение, единственный реальный способ сделать перевод дочерней темы, если она содержит строки, не используемые в родительской теме, - это использовать собственный текстовый домен и собственный файл перевода.

Gmazzap
источник
Отличный ответ! Еще один вопрос - скажем, родительская тема имеет эту строку "background-color", а в дочерней также эта строка существует. Так что в этом случае я могу смело использовать текстовую область родительской темы? __ ('background-color', 'parent-text-domain')?
Ayanize
yes @Ayanize, если есть родительская тема, __('background-color', 'parent-text-domain')вы можете использовать то же самое в дочерней теме без необходимости делать что-либо еще, чтобы перевести ее.
gmazzap
0

Если ваша дочерняя тема содержит строки, отличные от родительской.

Теперь правильным способом использования другого текстового домена в дочерней теме является load_child_theme_textdomain()функция. Вы можете использовать его так же, как и другие функции загрузки _..._ textdomain.

Осторожно!

В отличие от языковых файлов плагинов, имя my_child_theme-de_DE.mo НЕ будет работать. Хотя языковые файлы плагина позволяют вам указать текстовый домен в имени файла, это НЕ будет работать с темами и дочерними темами. Языковые файлы для тем должны включать ТОЛЬКО ярлык языка .

докер
источник