Функция _x() в WordPress: использование, добавление контекста и примеры

Функция _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.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *