load_plugin_textdomain

Загружает строку для перевода плагина.

Если путь не указан, то им будет корневая директория плагинов.

.mo файл должен называться: $domain-локаль, где локаль это код языка или страны. Например, немецкая локаль – de_DE, русская – ru_RU. Если $domain (ключ файла переводов) my-plugin, то русские .mo и .po файлы должны назваться: my-plugin-ru_RU.mo и my-plugin-ru_RU.po.

Вызывать функцию нужно через хук plugins_loaded.

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

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

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

<?php load_plugin_textdomain( $domain, $deprecated, $plugin_rel_path ) ?>
$domain(строка) (обязательный)
Уникальный идентификатор для получения строки перевода.
По умолчанию: нет
$deprecated(строка)
Отмененный аргумент, работает до версии 2.7. Путь подобный ABSPATH, до .mo файла.
По умолчанию: false
$plugin_rel_path(строка)
Путь (с закрывающим слэшем) до каталога .mo файлов относительно WP_PLUGIN_DIR. Этот аргумент следует использовать вместо $abs_rel_path.
По умолчанию: false

Примеры

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

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

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

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

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

Код из


wp-includes/l10n.php

WP 4.7.2

<?php
function load_plugin_textdomain( $domain, $deprecated = false, $plugin_rel_path = false ) {
	/**
	 * Filters a plugin's locale.
	 *
	 * @since 3.0.0
	 *
	 * @param string $locale The plugin's current locale.
	 * @param string $domain Text domain. Unique identifier for retrieving translated strings.
	 */
	$locale = apply_filters( 'plugin_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 . '/plugins/' . $mofile ) ) {
		return true;
	}

	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;
	}

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

Комментарии:


Оставить комментарий

Your email address will not be published. Required fields are marked *