gettext_with_context
Позволяет изменить переведённый текст, который переводится с указанием контекста перевода — функция _x().
Это фильтр для функции _x().
Использование
add_filter( 'gettext_with_context', 'wp_kama_gettext_with_context_filter', 10, 4 ); /** * Function for `gettext_with_context` filter-hook. * * @param string $translation Translated text. * @param string $text Text to translate. * @param string $context Context information for the translators. * @param string $domain Text domain. Unique identifier for retrieving translated strings. * * @return string */ function wp_kama_gettext_with_context_filter( $translation, $text, $context, $domain ){ // filter... return $translation; }
- $translation(строка)
- Переведённый текст. В файлах *.po помечен как
msgstr
. - $text(строка)
- Текст для перевода. В файлах *.po помечен как
msgid
. - $context(строка)
- Контекстная информация для переводчиков. В файлах *.mo помечен как
msgctxt
. - $domain(строка)
- Текстовый домен. Уникальный идентификатор для получения переведенных строк. Указывается при регистрации перевода.
Примеры
#1 Изменим название статуса "На утверждении" (pending)
Изменим в списке Записей фразу "На утверждении" на "Ждет проверки модератором" только в нужном месте.
Слово "Pending" используется в разном контексте:
#: wp-includes/post.php:342 msgctxt "post status" msgid "Pending" msgstr "На утверждении" #: wp-includes/post.php:392 msgctxt "request status" msgid "Pending" msgstr "В ожидании" #: wp-includes/post.php:928 msgid "Pending" msgstr "В ожидании"
В нашем случае перевод запрашивается с помощью _x() так:
_x( 'Pending', 'post status' )
Так как через фильтр проходит огромное количество переводов, а нам необходимо перевести определенную фразу и только в нужном месте, то используем условие:
- Запрашивается перевод слова "Pending"
- Запрашивается в контексте post status
- Запрашивается домен default (перевод самого WordPress)
add_filter( 'gettext_with_context', 'change_gettext_pending', 10, 4 ); function change_gettext_pending( $translation, $text, $context, $domain ) { if ( $text === 'Pending' && $context === 'post status' && $domain === 'default' ) { $translation = 'Ждет проверки модератора'; } return $translation; }
Список изменений
С версии 2.8.0 | Введена. |
Где вызывается хук
gettext_with_context
wp-includes/l10n.php 274
$translation = apply_filters( 'gettext_with_context', $translation, $text, $context, $domain );