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_user_locale() .

Працює на основі:
get_locale() ,
get_user_locale()
1 раз – 0.000001 сек
(швидкість світла) | 50000 разів – 0.09 сек
(швидкість світла) |
PHP 7.2.5, WP 5.0

Хуки з функції

Повертає

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

Використання

$locale = 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 Filename of the current screen.

список змін

З версії 5.0.0Введено.

Код determine_locale() WP 6.0.2

function determine_locale() {
	/**
	 * Filters the locale for the current request prior to default determination process.
	 *
	 * За допомогою цього фільтра дозволяє зазнати більшої логіки, ефективно шорт-circuiting функцію.
	 *
	 * @ Since 5.0.0
	 *
	 * @param string|null $locale Місцезнаходження для повернення і шорт-circuit. Default null.
	 */
	$ determined_locale = apply_filters( 'pre_determine_locale', null );

	if ( ! empty( $determined_locale ) && is_string( $determined_locale ) ) {
		return $determined_locale;
	}

	$determined_locale = get_locale();

	if ( is_admin() ) {
		$determined_locale = get_user_locale();
	}

	if ( isset( $_GET['_locale'] ) && 'user' === $_GET['_locale'] && wp_is_json_request() ) {
		$determined_locale = get_user_locale();
	}

	$wp_lang = '';

	if ( ! empty( $_GET['wp_lang'] ) ) {
		$wp_lang = sanitize_text_field( $_GET['wp_lang'] );
	} elseif ( ! empty( $_COOKIE['wp_lang'] ) ) {
		$wp_lang = sanitize_text_field( $_COOKIE['wp_lang'] );
	}

	if ( ! empty( $wp_lang ) && ! empty( $GLOBALS['pagenow'] ) && 'wp-login.php' === $GLOBALS['pagenow'] ) {
		$determined_locale = $wp_lang;
	}

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

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *