Я немного запутался с загрузкой файла моей темы .MO. Я много искал в Google, и у меня работает версия, но я не понимаю, почему.
Прежде всего, я установил свой текстовый домен в файле CSS тем:
Text Domain: beauty
Я начал с темы Roots, которая выполняет after_setup_theme, и я загружаю туда файл MO:
load_theme_textdomain('beauty', get_template_directory() . '/lang');
Этот файл MO имеет контекст «красоты» и контекст «корней». Файл MO загружается, потому что, когда я выгружаю $l10n[$domain]
, я вижу, что мои 3 значения имеют контекст красоты.
Для экономии места я покажу только одну запись:
array (size=3)
'beautyInloggen' =>
object(Translation_Entry)[218]
public 'is_plural' => boolean false
public 'context' => string 'beauty' (length=6)
public 'singular' => string 'Inloggen' (length=8)
public 'plural' => null
public 'translations' =>
array (size=1)
0 => string 'Login' (length=5)
public 'translator_comments' => string '' (length=0)
public 'extracted_comments' => string '' (length=0)
public 'references' =>
array (size=0)
empty
public 'flags' =>
array (size=0)
empty
У меня на сайте 2 местных, nl_NL и en_UK. Они устанавливаются с помощью WPML и загружаются правильно. У меня есть файлы nl_NL.mo и en_UK.mo в папке lang
темы.
Итак, все это выглядит хорошо.
Однако в моем header.php у меня есть привязка для входа:
<a href="<?php echo $login_url; ?>" target="_self"><?php _e( 'Inloggen', 'beauty' ); ?></a>
который в моем понимании должен грузить контекст "красота" и ключ "Inloggen".
Итак, это не работает, когда я нахожусь в своей локали nl_UK, я вижу стандартный голландский текст «Inloggen» вместо «Login».
Как ни странно, когда я удаляю контекст msgctxt "beauty"
из моего PO-файла и сохраняю его для создания нового MO-файла, он ДЕЙСТВИТЕЛЬНО работает.
Я использовал контексты раньше в своем плагине, где я использую load_textdomain
для загрузки файлов MO, и это работает нормально.
Причина, по которой я хочу использовать контексты, заключается в том, что один файл содержит тексты, связанные с корнями и красотой, а меня интересуют только тексты красоты. Я не хочу удалять все записи _e
темы Roots, чтобы она не появлялась при загрузке исходников.
Итак, это был один вопрос.
Вопрос 2 менее важен, но также ставит меня в тупик: когда я смотрю на пример с темой двадцать пятый, у них есть файлы PO и MO в папке wp-content/languages/themes/ как двадцать пятый-nl_NL.mo. Я прочитал эту замечательную статью (https://localise.biz/help/wordpress/loading-translations) и этот пост (https://wordpress.stackexchange.com/questions/137427/themes-text-domain-language-po-file-not-working) и понял, что вы всегда должны давать MO-файлу имя локали, а не имя контекста + локаль .
В этом прекрасном документе (https://localise.biz/help/wordpress/loading-translations а>) я нахожу
So in short, WordPress will look in only two places for a theme's MO file:
{absolute_path}/{locale}.mo
wp-content/languages/themes/{domain}-{locale}.mo
e.g. for twentyfourteen's French translations:
wp-content/themes/twentyfourteen/languages/fr_FR.mo
wp-content/languages/themes/twentyfourteen-fr_FR.mo
Однако, когда у меня был файл MO/PO в wp-content/languages/themes, он не работал, но это могло быть связано с той же проблемой, что и у меня с контекстом (вопрос 1).
ваше здоровье
hr_HR.po/.mo
, тема не воспринимала мой перевод. Но когда я переименовал его вhr.po/.mo
, это произошло. - person dingo_d   schedule 10.11.2015