WordPress как на ладони
WordCamp Saint Petersburg 2018 wordpress jino

_x() WP 2.8.0

Переводит указанный текст, на основе указанного контекста. Использует файл перевода.

Функция нужна, чтобы не было путаницы, когда одинаковый текст может переводиться по разному, исходя из того в каком месте (в каком контексте) он используется.

_x() работает точно также как и __(), только нужно указать второй параметр $context, строку.

Чтобы сразу вывести результат на экран, используйте _ex() это аналог _e() только с контекстом.

Как добавить контекст в poedit?

Строка контекста должна быть указана в .pot или .po файле, чтобы во время перевода было понятно в каком контексте нужно переводить текст.

Чтобы добавить контекст в программе poedit. При добавлении _x как ключа для поиска строк, добавьте его так:

_x:1,2c

Это указатель для poedit, искать _x и получать первый аргумент, как строку для перевода: msgid, а второй, как строку контекста: msgctxt.

Используется в: _ex().
Работает на основе: translate_with_gettext_context()

Хуков нет.

Возвращает

Переведенную строку.

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

_x( $text, $context, $domain );
$text(строка) (обязательный)
Текст, который нужно перевести.
$context(строка) (обязательный)
Дополнительная строка (контекст) по которой будет искаться перевод в файле перевода.
$domain(строка)
ID файла перевода, указывается при регистрации и подключении файла перевода.
По умолчанию: 'default'

Примеры

#1 Перевод строки с контекстом

$translated = _x('Read', 'past participle: books I have 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().

Код x: wp-includes/l10n.php VER 4.9.6

<?php
function _x( $text, $context, $domain = 'default' ) {
	return translate_with_gettext_context( $text, $context, $domain );
}

Cвязанные функции

Из раздела: Локализация

_x 5 комментов
  • @ Andrey

    Здравствуйте, Тимур! Скачал плагин и исправил ошибку в файле перевода .po
    миниотюры на миниатюры, но в интерфейсе так и остался неправильный вариант. Где он кэшируется и что нужно обновить, чтобы изменения вступили в силу? Спасибо!

    Ответить2.4 года назад #
    • Kama5235

      Как исправили? Для перевода используется .mo файл ... который создается из .po.

      1
      Ответить2.4 года назад #
      • @ Andrey

        Спасибо. Понятно. Использовать poedit правильное решение?

        Ответить2.4 года назад #
        • Kama5235

          Да самое то! Туда суйте .po и сохраняйте, он создаст .mo

          1
          Ответить2.4 года назад #
          • @ Андрей

            Спасибо! Оказывается, у меня перед носом в статье всё расписано, а я вас тереблю. Спасибо, буду внимательнее. thank_you

            Ответить2.4 года назад #

Здравствуйте, !