Функция determine_locale()
предназначена для определения текущей локали (языка), который наиболее подходит для текущего запроса в WordPress. Эта функция более универсальна, чем такие методы, как get_locale()
и get_user_locale()
, поскольку она учитывает различные контексты, такие как административная панель, фронтэнд, REST API и страницу авторизации.
determine_locale(): string
Возвращаемое значение
- string: Возвращает локаль, например,
en_US
,ru_RU
, в зависимости от текущего языка сайта или пользователя.
Как работает функция
- Для фронтенда (основного сайта): возвращает локаль, установленную в настройках сайта с помощью функции
get_locale()
. - Для админки: возвращает локаль текущего пользователя с помощью функции
get_user_locale()
. - Для REST API запросов: возвращает локаль пользователя, если в GET-параметрах запроса присутствует
_locale=user
. В противном случае возвращается локаль сайта. - Для страницы авторизации (wp-login.php): можно указать локаль с помощью GET-параметра
wp_lang
. Например, запросwp-login.php?wp_lang=ru_RU
установит локаль наru_RU
.
Эта функция является более гибким решением и может использоваться в тех случаях, когда необходимо точно определить, какой язык должен быть использован для отображения контента.
Хуки
Функция determine_locale()
поддерживает два хука:
pre_determine_locale
: Позволяет изменить локаль перед её определением.determine_locale
: Срабатывает после того, как локаль была определена.
Пример 1: Определение текущей локали
Простой пример, показывающий, какую локаль вернет функция в зависимости от контекста.
echo determine_locale();
// Например, выведет 'ru_RU', если локаль сайта или пользователя установлена на русский язык.
Пример 2: Загрузка файла перевода в зависимости от локали
Функция может быть полезна для загрузки различных файлов перевода в зависимости от текущей локали. Например, если у вас есть файл перевода для вашего плагина или темы, вы можете загрузить его на основе текущего языка:
add_action( 'plugins_loaded', 'load_my_textdomain' );
function load_my_textdomain() {
$locale = determine_locale();
$mo_file_path = dirname(__FILE__) . '/lang/' . $locale . '.mo';
load_textdomain( 'mytextdomain', $mo_file_path );
}
Этот код проверяет, какую локаль возвращает функция determine_locale()
и загружает соответствующий файл перевода .mo
для плагина или темы.
Пример 3: Изменение локали на странице входа
Можно изменить локаль на странице входа, добавив GET-параметр wp_lang
в URL. Например, если ваш сайт работает на английском, но вы хотите видеть форму входа на русском, можно использовать следующий URL:
wp-login.php?wp_lang=ru_RU
WordPress автоматически установит локаль для страницы авторизации в соответствии с переданным параметром.
Пример 4: Использование хуков для изменения локали
Используя фильтр pre_determine_locale
, можно изменить локаль перед ее окончательным определением. Например, вы хотите, чтобы сайт всегда отображался на английском языке, даже если пользователь выбрал другой язык:
add_filter('pre_determine_locale', 'force_english_locale');
function force_english_locale($locale) {
return 'en_US';
}
Этот код перезаписывает локаль на английский язык для всех пользователей и страниц.
Заключение
Функция determine_locale()
предоставляет универсальный механизм для определения подходящей локали для любого запроса в WordPress. Она учитывает множество контекстов, таких как фронтенд, админка и REST API, что делает ее более гибкой и точной по сравнению с традиционными методами, такими как get_locale()
или get_user_locale()
. Использование этой функции особенно полезно при работе с многоязычными сайтами или сайтами, где важно динамически определять локаль.