_x()
Получает перевод указанной строки с учетом указанного контекста.
Функция нужна, чтобы не было путаницы, когда одинаковый текст может переводиться по разному, исходя из того в каком месте (в каком контексте) он используется. Для этого кроме строки перевода указывается еще и контекст (дополнительная строка), которая дополнением строки перевода, так одинаковые строки перевода будут отличаться между собой и при непосредственном переводе строки будет видна указанная строка контекста, это позволит переводчику понять как нужно перевести указанную строку.
_x() работает точно также как и __(), только нужно указать второй параметр $context, строку.
Как добавить контекст в poedit?
Строка контекста должна быть указана в .pot
или .po
файле, чтобы во время перевода было понятно в каком контексте нужно переводить текст.
Чтобы добавить контекст в программе poedit. При добавлении _x
как ключа для поиска строк, добавьте его так:
_x:1,2c
Это указатель для poedit, искать _x и получать первый аргумент, как строку для перевода: msgid
, а второй, как строку контекста: msgctxt
.
Хуков нет.
Возвращает
Строку
. Переведенную строку или оригинальный текст, если не удалось перевести строку.
Использование
_x( $text, $context, $domain );
- $text(строка) (обязательный)
- Текст, который нужно перевести.
- $context(строка) (обязательный)
- Дополнительная строка (контекст) по которой будет искаться перевод в файле перевода.
- $domain(строка)
- ID файла перевода, указывается при регистрации и подключении файла перевода.
По умолчанию: 'default'
Примеры
#1 Перевод строки с контекстом
$translated = _x( 'Read', 'past participle: books I have read', 'text_domain' );
Так как просто слово Read может иметь разные значения, вторая строка поясняет что имеется ввиду под словом read в данном случае. Т.е. в каком контексте используется это слово.
#2 Как должен выглядеть .po файл
Для вывода перевода с контекстом, нужно указать второй параметр в _x(). Но нужно понимать, что вторая строка указывается и в .po файле. Там одна строка переводится по-разному. Вот так выглядит код .po файла, где msgctxt
содержит контекст:
msgctxt "examination" msgid "testing" msgstr "Тестирование" msgctxt "experiment" msgid "testing" msgstr "Испытания"
Выводим в PHP этот перевод так:
echo '"testing" как "examination": ' . _x('testing', 'examination', 'myl10n'); echo '"testing" как "experiment": ' . _x('testing', 'experiment', 'myl10n'); // Получим: // "testing" как "examination": Тестирование // "testing" как "experiment": Испытания
В этом коде подразумевается, что .mo
файл подключен под ID "myl10n" с помощью функции load_textdomain().
Список изменений
С версии 2.8.0 | Введена. |
Код _x() x WP 6.7.1
function _x( $text, $context, $domain = 'default' ) { return translate_with_gettext_context( $text, $context, $domain ); }