WordPress как на ладони
rgbcode is looking for WordPress developers.

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.

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

С версии 1.5.0 Введена.
С версии 4.6.0 The function now tries to load the .mo file from the languages directory first.

Код load_theme_textdomain() WP 6.4.3

function load_theme_textdomain( $domain, $path = false ) {
	/** @var WP_Textdomain_Registry $wp_textdomain_registry */
	global $wp_textdomain_registry;

	/**
	 * 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', determine_locale(), $domain );

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

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

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

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

	return load_textdomain( $domain, $path . '/' . $locale . '.mo', $locale );
}
3 комментария
    Войти