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

Если кто-то все еще ищет решение, вот что нужно делать начиная с версии 4.7:
function wp_noshor_redefine_locale($locale) {
if( is_admin() ):
switch_to_locale('en_US');
endif;
}
add_filter('init','wp_noshor_redefine_locale');
Это принудительно загружает админ-панель на английском языке, после чего вы можете перейти в настройки и выбрать желаемый язык.

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

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

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

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

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

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

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

Вот полное и лучшее решение для изменения языка только темы (фронтенд) или плагина. Оно также работает для изменения языка конкретной страницы/записи и т.д.
Кратко: Существует фильтр под названием 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 или для страницы вашего плагина и т.д.
Надеюсь, это поможет. Или дайте мне знать, если я что-то упустил.

Вот пример кода, который можно использовать для динамического изменения языка в 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; // возвращаем исходный язык, если условия не выполнены
}

Вы также можете попробовать это:
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 на странице

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