Функция _x() в WordPress
Функция _x() используется для получения перевода определённого текста с учётом контекста. Это позволяет избежать путаницы, когда одно и то же слово может переводиться по-разному в зависимости от его использования.
Что такое _x()?
Функция _x() работает аналогично функции __(), но с одним важным отличием: нужно указать второй параметр $context.
Чтобы отобразить результат на экране, используйте функцию _ex(), которая аналогична функции _e(), но также принимает параметр контекста.
Как добавить контекст в Poedit?
Контекст должен быть указан в файле .pot или .po, чтобы во время перевода было понятно, в каком контексте переводить строку.
Как добавить контекст в Poedit:
При добавлении ключа _x в поле поиска, используйте следующий формат:
_x:1,2c
Этот формат говорит Poedit искать функцию _x и брать первый аргумент как строку для перевода (msgid), а второй — как строку контекста (msgctxt).
Возвращаемое значение
Функция возвращает строку. Это может быть переведённый текст или оригинальный текст, если перевод невозможен.
Как использовать _x()?
Синтаксис функции _x():
_x( $text, $context, $domain );
$text(string) — текст, который нужно перевести (обязательный параметр).$context(string) — информация о контексте для переводчиков (обязательный параметр).$domain(string) — текстовый домен. Уникальный идентификатор для получения переведённых строк.- Значение по умолчанию: 'default'.
Примеры использования
Пример 1: Перевод строк с контекстом
Слово "Читать" может иметь разные значения. Второй параметр поясняет, в каком контексте используется это слово:
$translated = _x( 'Read', 'прошедшее время: книги, которые я прочитал', 'text_domain' );
Пример 2: Как должен выглядеть файл .po
Чтобы отобразить перевод с контекстом, необходимо указать второй параметр в _x(). Но стоит помнить, что этот второй параметр (строка) должен быть указан в файле .po. Пример кода:
msgctxt "экзамен"
msgid "testing"
msgstr "Тестирование"
msgctxt "эксперимент"
msgid "testing"
msgstr "Испытания"
Вывод этого перевода в PHP:
echo '"testing" как "экзамен": ' . _x('testing', 'экзамен', 'myl10n');
echo '"testing" как "эксперимент": ' . _x('testing', 'эксперимент', 'myl10n');
Ожидаемый вывод:
"testing" как "экзамен": Тестирование
"testing" как "эксперимент": Испытания
Этот код подразумевает, что файл .mo подключен с помощью функции load_textdomain() и под идентификатором myl10n.
Изменения
Функция _x() была введена в версии 2.8.0 WordPress.
Связанные функции
- __() — Функция для простого перевода текста.
- _e() — Показывает переведённый текст на экране.
- _n() и _nx() — Функции для работы с множественным числом.
- load_textdomain() — Загружает текстовый домен для переводов.
Эти функции полезны для локализации и интернационализации вашего сайта на WordPress.