почему перевод не работает на теме?

Вопрос или проблема

Фон

Я использую тему Rookie от Sportpress.

Я создал дочернюю тему.

Файлы перевода существуют, особенно немецкий в моем случае.

WordPress установлен на немецкий язык.

Проблема

Перевод работает нормально повсюду, кроме шаблонов, предоставленных темой, таких как контент страницы результатов поиска или пагинация.

Затронуты заголовок SRP, заголовок страницы ничего не найдено и контент страницы ничего не найдено. Они просто остаются на английском языке по умолчанию. Пагинация тоже затронута.

Форма поиска в контенте страницы ничего не найдено переведена нормально. Полагаю, потому что это шаблон по умолчанию WordPress.

Код

Вот некоторые затронутые строки кода из родительской темы.

Заголовок поиска

<h1 class="page-title entry-title"><?php printf( __( 'Search Results for: %s', 'rookie' ), '<span>' . get_search_query() . '</span>' ); ?></h1>

Заголовок “Ничего не найдено”:

<h1 class="page-title"><?php _e( 'Nothing Found', 'rookie' ); ?></h1>

Текст “Ничего не найдено”:

<p><?php _e( 'Sorry, but nothing matched your search terms. Please try again with some different keywords.', 'rookie' ); ?></p>

Пагинация:

<?php if ( get_next_posts_link() ) : ?>
            <div class="nav-previous"><?php next_posts_link( __( '<span class="meta-nav">&larr;</span> Older posts', 'rookie' ) ); ?></div>
            <?php endif; ?>

            <?php if ( get_previous_posts_link() ) : ?>
            <div class="nav-next"><?php previous_posts_link( __( 'Newer posts <span class="meta-nav">&rarr;</span>', 'rookie' ) ); ?></div>
            <?php endif; ?>

Выводы

Я проверил, что запись .mo для немецкого существует с помощью плагина Loco translate.

Я заменил заголовок результатов поиска Search Results for: %s на заголовок категории Category: %s, который переводится на странице категории (поскольку заголовок архива категории предоставлен WordPress), но также не на SRP!

Что может быть причиной такого поведения?

Решение

Родительская тема загружает домен через
load_theme_textdomain( 'rookie', get_template_directory() . '/languages' ); и указывает на правильное место, где находятся все файлы перевода (.pot, de_DE.po и de_DE.mo).

Я скопировал соответствующие файлы .po и .mo в директорию wp-content/languages/themes/ и теперь все работает.

Но является ли это настоящим лучшим решением?

Я скачал бесплатную родительскую тему Rookie и у меня нет проблем с отображением переводов “Search Results for: %s” на экране успешных результатов поиска.

Это работает в папке языков WordPress по адресу wp-content/languages/themes/rookie-de_DE.mo, а также в пользовательской директории Loco Translate. Это работает там, если файлы названы правильно, потому что родительская тема корректно загружает текстовый домен “rookie” с использованием “load_theme_textdomain”.

Правильно ли названы ваши файлы в директории языков WordPress? В отличие от файла de_DE.mo в папке темы, системное местоположение требует префикса, поэтому файлы должны называться rookie-de_DE.mo

Размещение файлов в wp-content/languages/themes/ — не лучшая идея, потому что при следующем обновлении файл будет перезаписан.

Лучший способ исправить это — положить файл .mo в дочернюю тему с именем de_DE.mo.
Тогда, если вы, например, положите файл в директорию wp-content/themes/rookie-child/languages, добавьте этот код в wp-content/themes/rookie-child/functions.php:

add_action("after_setup_theme", function () {

    load_theme_textdomain( 'rookie', get_stylesheet_directory() . '/languages' );


}, 5);

Ответ или решение

Почему перевод не работает в теме WordPress Rookie от Sportpress?

Введение

Ваша проблема с отсутствием перевода на некоторых страницах темы Rookie от Sportpress вызывает значительное недовольство, учитывая, что в остальной части темы переводы функционируют нормально, особенно для стандартных элементов WordPress. Рассмотрим подробнее возможные причины данной ситуации и их решения.

Описание проблемы

Вы указали, что:

  1. Перевод функционирует на большинстве страниц, но не работает на страницах результатов поиска и на странице с сообщением о том, что ничего не найдено.
  2. Элементы, требующие перевода, остаются на английском языке, в то время как стандартные элементы, такие как форма поиска, переводятся правильно.
  3. Вы создали дочернюю тему и загрузили соответствующие файлы перевода (.mo и .po).

Причины неполадок

  1. Некорректная загрузка текстового домена: Хотя вы указали, что функция load_theme_textdomain корректно ссылается на папку с языковыми файлами, важно убедиться, что файлы перевода с правильными именами находятся в нужной директории. Для загрузки языковых файлов из тем в системе WordPress используется формат имен с префиксом, например, rookie-de_DE.mo. Файлы, находящиеся в wp-content/languages/themes/ должны быть названы соответствующим образом, чтобы WordPress мог их распознать.

  2. Недостаточная инициализация перевода в дочерней теме: Если ваш дочерний шаблон (rookie-child) не загружает текстовый домен перед первоначальным вызовом функций, связанных с переводом, это может привести к нераспознанным строкам. Поэтому вам нужно убедиться, что код для загрузки текстового домена в дочерней теме включен и работает правильно.

  3. Конфликт строк перевода: На некоторых страницах, особенно имеющих нестандартную структуру, строки могут не совпадать с теми, что в языковых файлах, что приводит к тому, что они не отображаются на языке, установленном в WordPress.

Рекомендации по решению проблемы

  1. Проверьте имена и расположение файлов перевода: Убедитесь, что файлы перевода находятся в директории wp-content/languages/themes/ и имеют правильные имена, например, rookie-de_DE.mo.

  2. Переместите файлы в дочернюю тему: Вместо хранения файлов перевода в wp-content/languages/themes/, поместите их в папку wp-content/themes/rookie-child/languages/ и измените загрузку текстового домена в файле functions.php вашей дочерней темы:

    add_action("after_setup_theme", function () {
       load_theme_textdomain('rookie', get_stylesheet_directory() . '/languages');
    }, 5);
  3. Проверка строк для перевода: Перепроверьте строки, используемые в родительской теме, и убедитесь, что они соответствуют тем, что находятся в ваших .mo и .po файлах. Возможно, требуется повторное создание файлов перевода с помощью плагина Loco Translate.

  4. Избегайте директории wp-content/languages/themes/ для долгосрочных решений: Учитывая, что при обновлении темы ваши файлы могут быть перезаписаны, использование дочерней темы для хранения языковых файлов является более устойчивым решением.

Заключение

Хотя ваша проблема с переводом была временно решена путем копирования файлов в wp-content/languages/themes/, рекомендуется переместить файлы в дочернюю тему, как описано выше, чтобы избежать потенциальных конфликтов и потери информации при обновлениях. Соблюдение этих рекомендаций должно восстановить корректную работу переводов в вашей теме.

Оцените материал
Добавить комментарий

Капча загружается...