Функция DETERMINE_LOCALE() в WordPress 5.0.0

## Функция 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()

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *