TL; DR: если вы используете строки, которые находятся в родительской теме, точно так же, как они используются в родительской теме, вам не нужно иметь текстовый домен для вашей дочерней темы.
Но если вы используете строки, которые не используются в родительской теме, чтобы сделать их переводимыми, вам понадобится другой текстовый домен со связанными .mo
файлами translation ( ).
Рабочий процесс перевода
Когда WordPress встречает строку в функции перевода, это:
- Проверяет, был ли загружен перевод для требуемого текстового домена (через
load_plugin_textdomain
или load_theme_textdomain
или load_textdomain
), если это так, перейдите к пункту 3.
- Проверяет,
wp-content/languages
содержит ли папка переводов (по умолчанию ) соответствующий файл текстового домена. Соответствующий файл textdomain - это "{$domain}-{$locale}.mo"
где $domain
текстовый домен строки для перевода и $locale
текущая локаль для веб-сайта. Если этот файл не найден, возвращается исходная строка, в противном случае она загружается и WP переходит к следующей точке.
- Когда текстовый домен загружен, WP проверяет, содержится ли необходимая строка в этом файле, если не возвращается исходная строка, в противном случае WP переходит к следующей точке.
- Если найденная переведенная строка требует некоторого разрешения в единственном / множественном числе (например, при использовании
_n()
), то все готово. В противном случае WP переходит к следующему пункту.
- Хуки фильтра применяются к переведенной строке (см. Https://developer.wordpress.org/?s=gettext&post_type%5B%5D=wp-parser-hook ) и, наконец, результат возвращается.
Так?
Когда вы используете текстовый домен родительской темы в функции перевода из дочерней темы (при условии, что родительская тема отправляет и загружает файл textdomain или у него есть файл перевода в папке переводов), WordPress прибудет в пункт 3. в списке выше, и поэтому, если строка доступна в файле (потому что используется в родительской теме), она будет переведена, в противном случае это не так.
Это означает, что для пользовательских строк в родительской теме необходим собственный файл перевода.
Теоретически, можно использовать родительский текстовый домен в другом файле перевода, потому что WordPress способен загружать один и тот же текстовый домен несколько раз, «объединяя» их, но это имеет проблемы, поскольку в формате "{$domain}-{$locale}.mo"
в папках перевода может существовать только один файл ( см. пункт 2. в списке выше).
Итак, в заключение, единственный реальный способ сделать перевод дочерней темы, если она содержит строки, не используемые в родительской теме, - это использовать собственный текстовый домен и собственный файл перевода.
__('background-color', 'parent-text-domain')
вы можете использовать то же самое в дочерней теме без необходимости делать что-либо еще, чтобы перевести ее.Если ваша дочерняя тема содержит строки, отличные от родительской.
Теперь правильным способом использования другого текстового домена в дочерней теме является
load_child_theme_textdomain()
функция. Вы можете использовать его так же, как и другие функции загрузки _..._ textdomain.Осторожно!
источник