## Функция DETERMINE_LOCALE() │ WP 5.0.0
Функция determine_locale() определяет текущую локализацию сайта (язык сайта, например, en_US), необходимую для текущего запроса.
### Как работает функция
- На страницах сайта (front-end) функция возвращает результат работы get_locale().
- На административных страницах (admin) возвращает результат работы get_user_locale().
- При запросах REST (JSON) возвращает результат get_user_locale(), если в GET-параметрах указан ?_locale=user.
- На странице wp-login.php можно изменить локализацию с помощью параметра wp_lang, например: ?wp_lang=ru_RU.
Эта новая функция является оберткой для удобного использования функций: get_locale() и get_user_locale().
### Время выполнения
- Время выполнения: 1 раз — 0.000001 сек (околосветовая скорость).
- 50000 раз — 0.09 сек (околосветовая скорость).
- PHP 7.2.5, WP 5.0
### Хуки функции
- pre_determine_locale
- determine_locale
### Возвращаемое значение
Функция возвращает строку, представляющую определенную локализацию. Например: ru_RU.
### Применение
Для использования функции просто вызовите её:
```php
determine_locale();
Примеры
Пример 1: Что возвращает функция
echo determine_locale();
// вывод: 'ru_RU' для русского сайта
Пример 2: Пример загрузки файла перевода
add_action( 'plugins_loaded', 'load_my_textdomain' );
function load_my_textdomain(){
$mo_file_path = dirname(__FILE__) . '/lang/'. determine_locale() . '.mo';
load_textdomain( 'mytexdomain', $mo_file_path );
}
Примечания
- Глобальная переменная:
$pagenow— имя текущего экрана.
Изменения
- Начиная с версии 5.0.0 — введена функция.
Исходный код функции DETERMINE_LOCALE()
function determine_locale() {
/**
* Фильтрует локализацию для текущего запроса перед стандартным процессом определения.
*
* Используя этот фильтр, можно переопределить стандартную логику, фактически прервав выполнение функции.
*
* @since 5.0.0
*
* @param string|null $locale Локализация для возврата и прерывания. По умолчанию null.
*/
$determined_locale = apply_filters( 'pre_determine_locale', null );
if ( $determined_locale && is_string( $determined_locale ) ) {
return $determined_locale;
}
if (
isset( $GLOBALS['pagenow'] ) && 'wp-login.php' === $GLOBALS['pagenow'] &&
( ! empty( $_GET['wp_lang'] ) || ! empty( $_COOKIE['wp_lang'] ) )
) {
if ( ! empty( $_GET['wp_lang'] ) ) {
$determined_locale = sanitize_locale_name( $_GET['wp_lang'] );
} else {
$determined_locale = sanitize_locale_name( $_COOKIE['wp_lang'] );
}
} elseif (
is_admin() ||
( isset( $_GET['_locale'] ) && 'user' === $_GET['_locale'] && wp_is_json_request() )
) {
$determined_locale = get_user_locale();
} elseif (
( ! empty( $_REQUEST['language'] ) || isset( $GLOBALS['wp_local_package'] ) )
&& wp_installing()
) {
if ( ! empty( $_REQUEST['language'] ) ) {
$determined_locale = sanitize_locale_name( $_REQUEST['language'] );
} else {
$determined_locale = $GLOBALS['wp_local_package'];
}
}
if ( ! $determined_locale ) {
$determined_locale = get_locale();
}
/**
* Фильтрует локализацию для текущего запроса.
*
* @since 5.0.0
*
* @param string $determined_locale Локализация.
*/
return apply_filters( 'determine_locale', $determined_locale );
}
Связанные функции
Определение локализации (языка сайта)
get_locale()get_user_locale()is_locale_switched()sanitize_locale_name()switch_to_locale()
Локализация (L10N)
__()_e()_n()translate()