determine_locale()WP 5.0.0

Получает текущую локаль сайта (язык сайта, например, en_US), которая подходит для текущего запроса.

  • Для фронта вернет значение функции get_locale().
  • Для админки вернет значение функции get_user_locale().
  • Для REST (JSON) запроса вернет значение функции get_user_locale(), если в GET параметре запроса указано ?_locale=user.
  • На странице wp-login.php можно изменить локаль, указав локаль в GET параметре запроса wp_lang, например, ?wp_lang=ru_RU.

Эта новая функция, во многих случаях, должна заменить get_locale() и get_user_locale().

Работает на основе: get_locale(), get_user_locale()
1 раз — 0.000001 сек (скорость света) | 50000 раз — 0.09 сек (скорость света) | PHP 7.2.5, WP 5.0
Хуки из функции

Возвращает

Строку. Локаль, например, ru_RU.

Использование

determine_locale();

Примеры

0

#1 Что возвращает функция

echo determine_locale();
// выведет 'ru_RU', если сайт на русском
0

#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 );
}

Заметки

  • Global. Строка. $pagenow The filename of the current screen.

Список изменений

С версии 5.0.0 Введена.

Код determine_locale() WP 6.7.1

function determine_locale() {
	/**
	 * Filters the locale for the current request prior to the default determination process.
	 *
	 * Using this filter allows to override the default logic, effectively short-circuiting the function.
	 *
	 * @since 5.0.0
	 *
	 * @param string|null $locale The locale to return and short-circuit. Default 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();
	}

	/**
	 * Filters the locale for the current request.
	 *
	 * @since 5.0.0
	 *
	 * @param string $determined_locale The locale.
	 */
	return apply_filters( 'determine_locale', $determined_locale );
}