WordPress как на ладони
Мощный и не дорогой хостинг от Fornex.com Хостинг, VPS/VDS и отдельные сервера только на SSD дисках. 7 дней бесплатного тестирования.

load_theme_textdomain() WP 1.5

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

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

С версии 4.6. функция сначала пытается загрузить .mo файл с папки /wp-content/language/themes. Файл должен называиться ДОМЕН_ПЕРЕВОДА-ЛОКАЛЬ.mo, например, 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 5.0.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', determine_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)

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

6 комментов
  • Alexandrov Yan8 cайт: codyshop.ru

    Подскажите, хранится ли $domain где то в глобальных переменных, чтобы к ним можно было бы обратиться?

    Ответить5 мес назад #
    • Alexandrov Yan8 cайт: codyshop.ru

      Нашел только это: wp_get_theme()->get( 'TextDomain' )

      Ответить5 мес назад #
      • Kama7099

        Нет не храниться, все это налету происходит:

        • тут указывается домен, по сути это начальная точка когда домен начинает фигурировать
        • далее по этому домену ищется файл переводов
        • потом этот файл парсится и сохраняется в память в виде PHP объекта и с ним дальше работают функции локализации __() и т.д. где опять же указывается домен по которому идет поиск перевода
        Ответить5 мес назад #
  • Павел

    Здравствуйте! Отличный у вас сайт. Часто им подьзуюсь.
    Ставлю руссифицированный WP на 2 разных хостинга из одной коробки, на одном все ок, а на втором половина админки не русифицирована, сами файлы переводов после установки идентичны.
    Подскажите пожалуйста в чем может быть проблема. Поддержка хостинга валит все на файлыи конфигурацию wp.
    Спасибо и извините что может не в тему спрашиваю, но очень нужна помощь!

    Ответить2 мес назад #
Здравствуйте, !     Войти . Зарегистрироваться