Поддержка Переводы Проблема с переводом собственной темы.

  • WordPress 5.4.2
    Settings -> General -> Site Language: English (United States).

    Создал тему mytheme при помощи underscores.me.
    Создал дочернюю тему mytheme-child и АКТИВИРОВАЛ её:

    /*!
    Theme Name: mytheme child theme
    Template: mytheme
    Text Domain: mytheme-child
    Description: Child theme for mytheme.
    Version: 1.0
    */

    Установил и активировал плагин Loco Translate.
    В файл functions.php дочерней темы занёс следующий текст:

    add_action('after_setup_theme', 'myLocalizationSetup');
    function myLocalizationSetup(){
      load_child_theme_textdomain('mytheme-child', 
                                  get_stylesheet_directory() . '/languages' );
    }

    В файл-шаблон page-main.php занёс следующий текст.

    <?php get_header("main"); ?>
    <?php
      echo(__('Hello, interpreter !', 'mytheme-child'));
    ?>
    <?php get_footer("main"); ?>

    Запустил страницу. Она появилась и поздоровалась по-английски.
    Отлично.
    Теперь надо, чтобы она поздоровалась на некотором языке ml_ML, «слева направо».
    Запускаю Loco Translate (панель управления WP — на АНГЛИЙСКОМ).
    Выбираю активную тему mytheme-child.
    Выбираю язык «My Language».
    Адрес для файлов *.mo, *.po, *.pot — themes/mytheme-child/languages
    Делаю перевод. Со стороны Loco Translate — всё отлично, перевод — 100%,
    файлы созданы: ml_ML.mo, ml_ML.po, mytheme-child.pot.
    Сохраняю.

    В файл-шаблон page-main.php отредактировал.

    <?php get_header("main"); ?>
    echo(determine_locale() . '</br>');
    if(switch_to_locale('ml_ML')){echo('ml_ML');}
    else{echo('Sorry.');}
    echo(__('Hello, interpreter !', 'mytheme-child'));
    <?php get_footer("main"); ?>

    Запускаю.
    Вышло:
    en_US
    Sorry.Hello, interpreter !

    Что я пропустил или сделал неправильно ?

    Спасибо.

Просмотр 1 ответа (всего 1)
  • Ну, короче. Отчёт о проделанной работе.

    Из functions.php дочерней темы mytheme-child я все выбросил.
    Оставил только функцию

    function myLocalizationSetup(){
      load_child_theme_textdomain('mytheme-child', get_stylesheet_directory() . '/languages' );
    }

    В файле-шаблоне page-main.php ввёл такой текст:

    <?php
    $currentLocal = determine_locale(); // Исходная «локация»

    // Отображение исходной «локации» тремя способами.
    echo(‘determine_locale: ‘ . determine_locale() . ‘</br>’);
    echo(‘get_locale: ‘ . get_locale() . ‘</br>’);
    echo(‘get_user_locale: ‘ . get_user_locale() . ‘</br>’);

    // Активация требуемой локации ml_ML.
    add_filter(‘locale’, function() {return ‘ml_ML’;});
    apply_filters(‘locale’, ‘ml_ML’); // Второй параметр — формально.
    myLocalizationSetup(); // См. functions.php

    // Отображение «локации» после активации.
    echo(‘determine_locale: ‘ . determine_locale() . ‘</br>’);
    echo(‘get_locale: ‘ . get_locale() . ‘</br>’);
    echo(‘get_user_locale: ‘ . get_user_locale() . ‘</br>’);

    // Перевод.
    echo(__(‘Hello, interpreter !’, ‘mytheme-child’) . ‘</br></br>’);

    // Попытка восстановить исходную «локацию».
    switch_to_locale($currentLocal);

    // Проверка, что получилось после восстановления исходной «локации».
    echo(‘determine_locale: ‘ . determine_locale() . ‘</br>’);
    echo(‘get_locale: ‘ . get_locale() . ‘</br>’);
    echo(‘get_user_locale: ‘ . get_user_locale() . ‘</br>’);

    // Перевод
    echo(__(‘Hello, interpreter !’, ‘mytheme-child’) . ‘</br>’);
    ?>

    РЕЗУЛЬТАТ, кстати, совершенно одинаковый: как при запуске
    из «админки» в режиме view, так и при «обычном» запуске
    после log out из «админки».
    ———————————————————
    // Отображение исходной «локации» тремя способами.
    determine_locale: en_US
    get_locale: en_US
    get_user_locale: en_US

    // Отображение «локации» после активации.
    determine_locale: ml_ML
    get_locale: ml_ML
    get_user_locale: ml_ML

    // Перевод.
    Слава КПСС !

    // Проверка, что получилось после «восстановления» исходной «локации».
    determine_locale: ml_ML
    get_locale: ml_ML
    get_user_locale: ml_ML

    // Перевод.
    Hello, interpreter !

    Такие дела.

Просмотр 1 ответа (всего 1)