care42freelancer 27.02.2023 11:32

Как настроить автоматическое обновление переводов темы и плагинов в WordPress?

Здравствуйте!

У меня возникла проблема с настройкой автоматического обновления переводов темы и плагинов в WordPress. Я разрабатываю сайт на нескольких языках, и в моей теме и плагинах есть файлы .po и .mo для каждого языка.

Я ищу способ автоматически обновлять эти переводы, чтобы не приходилось каждый раз вручную загружать новую версию файлов, когда выходят обновления темы или плагинов. У меня есть некоторый код, который я использовал, но он не работает должным образом.

// Код, который я использовал

function my_translation_updater( $translations ) {
    $my_theme = wp_get_theme();
    
    if ( $my_theme->get( 'TextDomain' ) === 'my-theme' ) {
        $translation_file = get_stylesheet_directory() . '/languages/' . get_locale() . '.mo';
        
        if ( file_exists( $translation_file ) ) {
            load_textdomain( 'my-theme', $translation_file );
        }
    }
    
    return $translations;
}
add_filter( 'load_textdomain_mofile', 'my_translation_updater', 10, 2 );

Я хотел бы узнать, как исправить эту проблему и добиться автоматического обновления переводов при обновлении темы или плагинов. Может быть, у меня есть ошибка в коде или я что-то пропустил?

Буду очень благодарен за любую помощь или совет!

Спасибо!

Ответы:

variantaVeronika1981 27.02.2023 11:46

Для автоматического обновления переводов темы и плагинов в WordPress, ты можешь использовать функцию load_plugin_textdomain() или load_theme_textdomain(). Вот как это можно сделать:

// Для обновления переводов плагинов

function update_plugin_translations( $translated, $text, $domain ) {
    if ( 'my-plugin' === $domain ) {
        $translations = get_translations_for_domain( $domain );
        $translation_file = WP_LANG_DIR . '/plugins/my-plugin-' . get_locale() . '.mo';
        
        if ( file_exists( $translation_file ) ) {
            $translations->load_textdomain( $domain, $translation_file );
        }
    }
    
    return $translated;
}
add_filter( 'gettext', 'update_plugin_translations', 20, 3 );

// Для обновления переводов темы

function update_theme_translations( $locale ) {
    $translation_file = WP_LANG_DIR . '/themes/my-theme-' . $locale . '.mo';
    
    if ( file_exists( $translation_file ) ) {
        load_theme_textdomain( 'my-theme', $translation_file );
    }
    
    return $locale;
}
add_filter( 'locale', 'update_theme_translations' );

В этих примерах я использовал функции get_translations_for_domain(), load_textdomain() и load_theme_textdomain() для обновления переводов. Ты можешь заменить "my-plugin" и "my-theme" на имена своего плагина и темы соответственно, чтобы сделать код работающим для твоего проекта.

Убедись, что у тебя есть директория "languages" в корневой папке твоей темы или плагина, в которую нужно поместить файлы .mo и .po с переводами. Например, для плагина "my-plugin" путь будет таким: /wp-content/plugins/my-plugin/languages/. А для темы "my-theme" - /wp-content/themes/my-theme/languages/.

Также убедись, что файлы .mo и .po имеют правильные названия. Файлы переводов должны иметь следующие названия:

  • Для плагинов: my-plugin-{language}.mo и my-plugin-{language}.po (где {language} - это код языка, например, "ru_RU" для русского языка).
  • Для тем: my-theme-{language}.mo и my-theme-{language}.po (где {language} - это код языка, например, "ru_RU" для русского языка).

Надеюсь, эти примеры помогут тебе обновить переводы темы и плагинов автоматически. Если у тебя остались вопросы или нужна дополнительная помощь, не стесняйся обращаться!

Удачи!


Добавить ответ