WordPress как на ладони
wordpress jino

load_theme_textdomain() WP 1.5

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

Файл .mo должен находится в корневой директории темы. Он будет загружен в виде строки для указанного идентификатора $domain.

Файл перевода .mo должен иметь точно такое же название как и текущая локализация (локаль), например, ru_RU.mo - mytheme/languages/ru_RU.mo.

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

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

Локализация у плагинов обязывает указывать идентификатор $domain в названии файла перевода, для тем это не нужно. Файл перевода темы должен называться как локаль: ru_RU.mo.

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

Используется в: load_child_theme_textdomain().
Работает на основе: load_textdomain()
Хуки из функции:
Возвращает

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

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

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

Примеры

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

load_theme_textdomain() обычно вызывается во время события 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 это текущая локаль...

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

Заметки

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

  • l10n - это сокращение для localization.

  • i18n - это сокращение для internationalization. 18 - это количество букв между начальной i и конечной n.

Код load theme textdomain: wp-includes/l10n.php VER 4.9.1

<?php
function load_theme_textdomain( $domain, $path = false ) {
	/**
	 * Filters a theme's locale.
	 *
	 * @since 3.0.0
	 *
	 * @param string $locale The theme's current locale.
	 * @param string $domain Text domain. Unique identifier for retrieving translated strings.
	 */
	$locale = apply_filters( 'theme_locale', is_admin() ? get_user_locale() : get_locale(), $domain );

	$mofile = $domain . '-' . $locale . '.mo';

	// Try to load from the languages directory first.
	if ( load_textdomain( $domain, WP_LANG_DIR . '/themes/' . $mofile ) ) {
		return true;
	}

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

	return load_textdomain( $domain, $path . '/' . $locale . '.mo' );
}

Cвязанные функции

Из метки: textdomain (файлы переводов po mo)

Еще из метки: localize (локализация Internationalization)

Еще из раздела: Локализация

load_theme_textdomain 1 комментарий
  • Отлично! Почти то что искал. Подскажите, а как реализовать переключения языка перевода аналогично этому примеру www.example.com/?l=ru_RU только, чтобы переключение осуществлялось по такому url www.example.com/ru

    Ответитьгод назад #

Здравствуйте, !

Ваш комментарий