_x()
Отримує переклад зазначеного рядка з урахуванням зазначеного контексту.
Функція потрібна, щоб не було плутанини, коли однаковий текст може перекладатися по-різному, тому в якому місці (у якому контексті) він використовується. Для цього крім рядка перекладу вказується ще й контекст (додатковий рядок), який доповненням рядка перекладу, так однакові рядки перекладу відрізнятимуться між собою і при безпосередньому перекладі рядка буде видно зазначений рядок контексту, це дозволить перекладачеві зрозуміти як потрібно перекласти вказаний рядок.
_x() працює так само як і __() , тільки потрібно вказати другий параметр $context , рядок.
Щоб одразу вивести результат на екран, використовуйте _e() тільки з контекстом.
Як додати контекст у poedit ?
Рядок контексту повинен бути вказаний у .pot
файлі .po
, щоб під час перекладу було зрозуміло в якому контексті потрібно перекладати текст.
Щоб додати контекст у програмі poedit . При додаванні _x
ключа для пошуку рядків, додайте його так:
_x:1,2c
Це покажчик для poedit , шукати _x і отримувати перший аргумент як рядок для перекладу: msgid
, а другий як рядок контексту: msgctxt
.
Ця функція вважається внутрішньою для використання самим ядром . Не рекомендується використовувати цю функцію у своєму коді.
translate_with_gettext_context()
_ex()
Хуків немає.
Повертає
Строку
. Перекладений рядок або оригінальний текст, якщо не вдається перевести рядок.
Використання
_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 "тестування" msgstr "Тестування" msgctxt "experiment" msgid "тестування" msgstr "Випробування"
Виводимо в PHP цей переклад так:
echo '"тестування" як "examination": ' . _x('testing', 'examination', 'myl10n'); echo '"тестування" як "experiment": ' . _x('testing', 'experiment', 'myl10n'); // Отримаємо: // "Testing" як "examination": Тестування // "Testing" як "experiment": Випробування
У цьому коді мається на увазі, що .mo
файл підключений під ID “myl10n” за допомогою функції load_textdomain() .
список змін
З версії 2.8.0 | Введено. |
Код _x() x WP 6.0.2
function _x( $text, $context, $domain = 'default' ) { return translate_with_gettext_context( $text, $context, $domain ); }