gettext_with_contextхук-фильтрWP 2.8.0

Позволяет изменить переведённый текст, который переводится с указанием контекста перевода — функция _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(строка)
Текстовый домен. Уникальный идентификатор для получения переведенных строк. Указывается при регистрации перевода.

Примеры

0

#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 Введена.

Где вызывается хук

translate_with_gettext_context()
gettext_with_context
wp-includes/l10n.php 265
$translation = apply_filters( 'gettext_with_context', $translation, $text, $context, $domain );

Где используется хук в WordPress

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