Функция load_textdomain()
в WordPress используется для загрузки файлов переводов в формате .mo
в текстовый домен. Она позволяет добавлять или обновлять переводы для определенного текстового домена. Это важно для локализации (l10n) веб-сайта и работы с многоязычными проектами.
load_textdomain( string $domain, string $mofile, string $locale = null ): bool
- $domain (обязательный) — Уникальный идентификатор для текстового домена, используемый для извлечения переведённых строк.
- $mofile (обязательный) — Абсолютный путь до
.mo
файла (например,wp-content/plugins/my-plugin/languages/ru_RU.mo
). - $locale (опциональный) — Локаль. По умолчанию используется текущая локаль сайта.
Функция возвращает true
при успешной загрузке файла .mo
, либо false
в случае неудачи (например, если файл отсутствует).
Пример работы
При успешной загрузке, функция добавляет содержимое файла .mo
в глобальную переменную $l10n
, которая содержит переводы для текстового домена.
$l10n[ $domain ] = & $mo;
Если для этого текстового домена уже загружены другие переводы, они будут объединены с новым набором переводов.
Использование
Файл перевода должен быть загружен до его использования в шаблонах или плагинах WordPress. Чаще всего вызов функции load_textdomain()
производится в момент события plugins_loaded
, чтобы быть уверенным, что переводы загружены вовремя.
Пример 1: Загрузка перевода в плагине
Предположим, у нас есть плагин, который использует текстовый домен mydomain
и файл перевода .mo
, находящийся в папке languages
. Мы можем загрузить перевод следующим образом:
add_action( 'plugins_loaded', 'load_my_plugin_textdomain' );
function load_my_plugin_textdomain() {
$locale = determine_locale();
$mo_file_path = plugin_dir_path( __FILE__ ) . 'languages/' . $locale . '.mo';
load_textdomain( 'mydomain', $mo_file_path );
}
В этом примере мы используем функцию determine_locale()
, которая определяет текущую локаль WordPress. Для версий ниже WordPress 5.0 вместо нее нужно использовать get_locale()
.
Пример 2: Многоязычные сайты
При работе с многоязычными сайтами иногда нужно загружать переводы, отличные от текущей локали пользователя. Это особенно важно, если администратор редактирует многоязычные посты или виджеты.
if ( is_textdomain_loaded( 'myplugin' ) ) {
unload_textdomain( 'myplugin' );
}
$locale = 'fr_FR'; // Например, загрузка перевода на французский
$mofile = sprintf( '%s-%s.mo', 'myplugin', $locale );
$domain_path = WP_LANG_DIR . '/plugins/';
$loaded = load_textdomain( 'myplugin', $domain_path . $mofile );
if ( ! $loaded ) {
// Если перевод не найден, загрузить из директории плагина
$domain_path = WP_PLUGIN_DIR . '/myplugin/languages/';
load_textdomain( 'myplugin', $domain_path . $mofile );
}
Этот код сначала проверяет, загружен ли уже текстовый домен для плагина. Если загружен, он выгружается с помощью функции unload_textdomain()
, затем загружается файл перевода для определенной локали.
Заключение
Функция load_textdomain()
— это основной инструмент для загрузки переводов в WordPress. Она позволяет загружать .mo
файлы, добавляя локализацию для плагинов, тем или других элементов веб-сайта, обеспечивая многоязычную поддержку.