Как изменить язык только для фронтенда в WordPress?

8 февр. 2014 г., 13:50:40
Просмотры: 18.1K
Голосов: 14

Я установил тему WordPress и вижу файлы .mo и .po в /public_html/wp-content/themes/themename/lang, нужный мне язык доступен.

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

1
Комментарии

Возможный дубликат вопроса Изменить локаль во время выполнения?

T.Todua T.Todua
4 нояб. 2018 г. 18:34:41
Все ответы на вопрос 7
0

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

  1. перейдите в настройки и установите Язык сайта на язык фронтенда, например - немецкий, затем сохраните.

  2. перейдите в Пользователи, затем нажмите "редактировать" для вашей учетной записи администратора. Там вы можете установить Язык на английский и сохранить. Вот и всё. Ваш фронтенд будет использовать немецкий как основной язык, а административная часть будет на английском.

24 февр. 2019 г. 23:20:38
0

Если кто-то все еще ищет решение, вот что нужно делать начиная с версии 4.7:

function wp_noshor_redefine_locale($locale) {
    if( is_admin() ):
        switch_to_locale('en_US');
    endif;
}
add_filter('init','wp_noshor_redefine_locale');

Это принудительно загружает админ-панель на английском языке, после чего вы можете перейти в настройки и выбрать желаемый язык.

7 апр. 2018 г. 04:24:39
8

Вы можете фильтровать строку для locale, в ней хранится текущий язык. Также вы можете исключить админку из этого фильтра:

is_admin() or add_filter( 'locale', function() {
    return 'ar';
});
8 февр. 2014 г. 13:54:08
Комментарии

На самом деле, я имею в виду, как можно активировать определенный язык для темы?

Hicham Hicham
8 февр. 2014 г. 13:56:12

Это происходит автоматически, когда locale соответствует существующему файлу перевода.

fuxia fuxia
8 февр. 2014 г. 13:57:11

извините за беспокойство, я новичок в WP, но как я могу сделать так, чтобы locale соответствовал файлу перевода?

Hicham Hicham
8 февр. 2014 г. 13:57:49

Добавив приведенный выше код в плагин или файл functions.php вашей темы.

fuxia fuxia
8 февр. 2014 г. 13:58:17

мне нужно указать ar-AR, чтобы моя тема была на арабском?

Hicham Hicham
8 февр. 2014 г. 14:01:09

Это зависит от названия ваших файлов mo. Попробуйте, если не уверены.

fuxia fuxia
8 февр. 2014 г. 14:04:06

Я хочу изменить язык только фронтенда на арабский, не затрагивая бэкенд (админку WordPress), то есть только язык темы. Если я правильно понял, мне нужно изменить functions.php моей темы и добавить следующий код:is_admin() or add_filter( 'locale', function() { return 'ar-AR'; });

Hicham Hicham
8 февр. 2014 г. 14:06:41

Да, именно так. Просто попробуйте.

fuxia fuxia
8 февр. 2014 г. 14:27:05
Показать остальные 3 комментариев
0

Я считаю, что самым простым вариантом для вас будет обновление вашей установки с использованием локализованной версии WordPress на вашем родном языке (и убедившись, что параметр WPLANG остаётся установленным соответствующим образом), а затем использование плагина, такого как:

... чтобы переключить только административную часть интерфейса на английский язык.

15 авг. 2014 г. 17:55:17
0

Вот полное и лучшее решение для изменения языка только темы (фронтенд) или плагина. Оно также работает для изменения языка конкретной страницы/записи и т.д.

Кратко: Существует фильтр под названием locale, который определяет, какой язык загружать. Вы можете изменить его на нужный вам язык в зависимости от предпочтительных условий.

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

add_filter('locale', function($locale) {

    if( is_admin() ) {
        return $locale; // Оставляем язык по умолчанию для админки.
    }

    // Здесь вы можете загружать язык на основе любых условных тегов, таких как is_page(), is_singular(), is_archive() и т.д.
    // В этом примере я хочу изменить язык для всего фронтенда.

    $locale = 'en_US'; // Измените на нужный вам язык. Язык должен быть установлен и загружен.

    return $locale; // Возвращаем язык, который будет использоваться.

});

Перед изменением языка вам может потребоваться сначала загрузить этот язык.

В вашей теме или дочерней теме загрузите пользовательский язык, используя этот сниппет.

add_action( 'after_setup_theme', function() {

    // Предполагается, что ваши языковые файлы находятся в /wp-content/themes/ваша-тема/languages
    // Не забудьте заменить 'text-domain' на текстовый домен вашей темы.

    // Для основной темы.
    load_theme_textdomain( 'text-domain', get_template_directory() . '/languages' );

    // Для дочерней темы.
    load_child_theme_textdomain( 'text-domain', get_stylesheet_directory() . '/languages' );

    // Удалите load_child_theme_textdomain, если используете его для основной темы,
    // ИЛИ удалите load_theme_textdomain, если загружаете язык дочерней темы.

});

Аналогично вы можете изменить язык на основе URL или для страницы вашего плагина и т.д.

Надеюсь, это поможет. Или дайте мне знать, если я что-то упустил.

1 авг. 2020 г. 07:20:43
0

Вот пример кода, который можно использовать для динамического изменения языка в WordPress:

add_filter('locale', 'change_user_lang');
function change_user_lang($locale)
{
    if (is_admin()) return 'en_US'; // устанавливаем язык админки на Английский
    // ваша пользовательская логика смены языка, например:
    // if (некое условие) return 'fr_FR'; // устанавливаем язык Французский
    // if (другое условие) return 'de_DE'; // устанавливаем язык Немецкий

    return $locale; // возвращаем исходный язык, если условия не выполнены
}
15 апр. 2023 г. 08:04:02
2

Вы также можете попробовать это:

1. Скачайте скрипт jQuery для перевода по этой ссылке

2. Как это работает ( документация, живой тест )

<?php
function ravs_frontend_translate_script() {
    wp_enqueue_script( 'translate', get_template_directory_uri() . '/js/jquery.translate.js', array( 'jquery' ), '0.0.1', true );
}
add_action( 'wp_enqueue_scripts', 'ravs_frontend_translate_script' );


function ravs_translate_webpage_fx(){
?>
<script>
    // запускаем скрипт после загрузки обоих скриптов для перевода веб-страницы
        jQuery(document).ready(function(){
          //с английского на арабский:
          jQuery('body').translate( 'ar' );
        });
</script>
<?php
add_action('wp_footer','ravs_translate_webpage_fx', 999 ); // убедитесь, что этот хук выполняется после подключения jquery-translate на странице
12 февр. 2014 г. 15:31:04
Комментарии

Но это же использование Google для перевода страницы, а не использование уже имеющихся .po файлов, верно?

Rup Rup
12 февр. 2014 г. 20:26:46

@Rup Да, используется Google Переводчик, а не .po файл. Возможно, что .po файл не содержит перевода для какого-то случайного слова, тогда _e() просто выводит его, в то время как Google Переводчик переводит всю веб-страницу.

Ravinder Kumar Ravinder Kumar
12 февр. 2014 г. 20:52:06