Удобный и Быстрый Хостинг для сайтов на WordPress. Пользуюсь сам и вам рекомендую!

load_plugin_textdomain()WP 1.5.0

Подключает .mo файл перевода из указанной папки. Не работает с MU плагинами.

.mo файл должен называться: ДОМЕН_ПЕРЕВОДА-ЛОКАЛЬ.mo, где локаль это код языка (см. get_locale()). Например, если ДОМЕН_ПЕРЕВОДА=my-plugin и выбран русский язык (ЛОКАЛЬ=ru_RU), то файлы должны назваться: my-plugin-ru_RU.mo и my-plugin-ru_RU.po.

Вызывать функцию рекомендуется на хуке init, но можно и раньше например на plugins_loaded.

С WP 6.7.0 переводы не загружаются сразу, а регистрируются для загрузки в нужное время (если оно еще не наступило).

Если вызвать функцию ДО хука init, то перевод все равно будет подгружен на хуке init.

Подробнее смотрите здесь.

С версии 4.6. функция сначала пытается загрузить .mo файл с папки WP_LANG_DIR/plugins/ обычно это /wp-content/language/plugins.

Используйте load_theme_textdomain(), чтобы подключить перевод темы.

Работает на основе: load_textdomain()

Хуков нет.

Возвращает

true|false. Вернет false, если .mo файл не существует по указанному пути. В остальных случаях функция вернет true.

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

load_plugin_textdomain( $domain, $deprecated, $plugin_rel_path );
$domain(строка) (обязательный)
Уникальный идентификатор для получения строки перевода.
$deprecated(строка)
Отмененный аргумент, работает до версии 2.7. Путь подобный ABSPATH, до .mo файла.
По умолчанию: false
$plugin_rel_path(строка)

Путь до каталога .mo файла относительно WP_PLUGIN_DIR.

Если путь не указан, то им будет корневая директория плагинов WP_PLUGIN_DIR. Т.е. путь до файла будет такой: WP_PLUGIN_DIR/domain-ru_RU.mo

По умолчанию: false

Примеры

0

#1 Если мы хотим расположить файл перевода .mo в подпапку languages:

add_action( 'plugins_loaded', 'myplugin_init' );
function myplugin_init() {
	 load_plugin_textdomain( 'my-plugin', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
}
0

#2 Регистрация файла перевода для MU плагина

В WP есть специальная функция load_muplugin_textdomain().

-1

#3 Регистрация файла перевода для плагина

Подразумевается, что этот код будет расположен в основном файле плагина или в файле, который находится в корневой директории плагина. Если это не так, то __FILE__ нужно заменить на соответствующий путь.

Файл перевода должен лежать в каталоге плагина и должен называться: my-plugin-ru_RU.mo.

add_action( 'plugins_loaded', 'myplugin_init' );
function myplugin_init(){
	load_plugin_textdomain( 'my-plugin', false, dirname( plugin_basename( __FILE__ ) ) );
}

Заметки

  • 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_plugin_textdomain() WP 7.0.2

function load_plugin_textdomain( $domain, $deprecated = false, $plugin_rel_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 ( false !== $plugin_rel_path ) {
		$path = WP_PLUGIN_DIR . '/' . trim( $plugin_rel_path, '/' );
	} elseif ( false !== $deprecated ) {
		_deprecated_argument( __FUNCTION__, '2.7.0' );
		$path = ABSPATH . trim( $deprecated, '/' );
	} else {
		$path = WP_PLUGIN_DIR;
	}

	$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;
}
6 комментариев