load_theme_textdomain()WP 1.5.0

Загружает файл перевода темы (.mo) в память, для дальнейшей работы с ним.

Файл .mo должен находится в корневой директории темы и иметь название ЛОКАЛЬ.mo, например: ru_RU.mo.

С версии 4.6. функция сначала пытается загрузить .mo файл ДОМЕН_ПЕРЕВОДА-ЛОКАЛЬ.mo с папки /wp-content/language/themes. Пример названия такого файла: twentyeleven-ru_RU.mo.

Функцию следует вызывать во время хука after_setup_theme.

Для подключения перевода плагина, используйте load_plugin_textdomain().

Интернационализация (Internationalization) и локализация (localization) означает адаптацию компьютерных программ под различные языки.

  • l10n - это сокращение для localization.
  • i18n - это сокращение для internationalization. 18 - это количество букв между начальной i и конечной n.
Работает на основе: load_textdomain()
Основа для: load_child_theme_textdomain()

Хуков нет.

Возвращает

true|false. Логический. true - если файл перевода был загружен, false - если не удалось получить.

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

load_theme_textdomain( $domain, $path );
$domain(строка) (обязательный)
Уникальный идентификатор по которому позднее в функциях перевода: __(), _e() можно будет обратиться именно к этой строке перевода.
$path(строка)
Путь до директории в которой расположен .mo файл (без оканчивающего слэша). По умолчанию указывается путь до каталога темы: get_template_directory().
По умолчанию: false

Примеры

0

#1 Как принято вызывать функцию

Функция обычно вызывается во время события after_setup_theme или можно напрямую сунуть в functions.php темы:

add_action( 'after_setup_theme', 'my_theme_setup');
function my_theme_setup(){
	load_theme_textdomain( 'my_theme', get_template_directory() . '/languages' );
}

Сначала WP попытается загрузить файл перевода из папки /wp-content/language/themes - /wp-content/language/themes/my_theme-ru_RU.mo.

Если там подходящего mo файла нет, то попытается загрузить его из папки темы /wp-content/themes/my_theme/language/ru_RU.mo

Тут my_theme - это указанный домен перевода, а ru_RU это текущая локаль...

0

#2 Переключения языка перевода

Этот пример можно использовать, когда нужно переключать язык. Для переключения будет использоваться переменная передаваемая в URL. Например, для переключения на русский, URL будет выглядеть так: www.example.com/?l=ru_RU. Так будет найден файл ru_RU.mo, в каталоге language в директории темы:

// Изменение языка локализации
// нужно вызвать до вызова load_theme_textdomain()
add_filter( 'locale', 'my_theme_localized' );
function my_theme_localized( $locale ){
	if ( ! isset( $_GET['l'] ) )
		return esc_attr( $_GET['l'] );

	return $locale;
}

// Устанавливаем каталог перевода для темы
// Переводы темы должны быть расположены в каталоге my_theme/languages/
// Переводы WordPress должны быть расположены в каталоге wp-content/languages
add_action('after_setup_theme', 'my_theme_setup');
function my_theme_setup(){
	load_theme_textdomain('my_theme', get_template_directory() . '/languages');
}

Заметки

  • Global. WP_Textdomain_Registry. $wp_textdomain_registry WordPress Textdomain Registry.
  • Global. Массив<Строка,. WP_Translations|NOOP_Translations> $l10n An array of all currently loaded text domains.

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

С версии 1.5.0 Введена.
С версии 4.6.0 The function now tries to load the .mo file from the languages directory first.
С версии 6.7.0 Translations are no longer immediately loaded, but handed off to the just-in-time loading mechanism.

Код load_theme_textdomain() WP 6.7.2

function load_theme_textdomain( $domain, $path = false ) {
	/** @var WP_Textdomain_Registry $wp_textdomain_registry */
	/** @var array<string, WP_Translations|NOOP_Translations> $l10n */
	global $wp_textdomain_registry, $l10n;

	if ( ! is_string( $domain ) ) {
		return false;
	}

	if ( ! $path ) {
		$path = get_template_directory();
	}

	$wp_textdomain_registry->set_custom_path( $domain, $path );

	// If just-in-time loading was triggered before, reset the entry so it can be tried again.
	if ( isset( $l10n[ $domain ] ) && $l10n[ $domain ] instanceof NOOP_Translations ) {
		unset( $l10n[ $domain ] );
	}

	return true;
}
3 комментария
    Войти