i18n 函数(__()、_x()、_n() 和 _nx())为代码中使用的字符串提供翻译。如果需要覆盖这些函数的返回值,可以使用以下过滤器使其可过滤:

  • i18n.gettext
  • i18n.gettext_with_context
  • i18n.ngettext
  • i18n.ngettext_with_context

过滤器参数

这些过滤器传递的参数与其 PHP 等效项一致。

i18n.gettext

function i18nGettextCallback( translation, text, domain ) {
    return translation;
}

i18n.gettext_with_context

function i18nGettextWithContextCallback( translation, text, context, domain ) {
    return translation;
}

i18n.ngettext

function i18nNgettextCallback( translation, single, plural, number, domain ) {
    return translation;
}

i18n.ngettext_with_context

function i18nNgettextWithContextCallback(
    translation,
    single,
    plural,
    number,
    context,
    domain
) {
    return translation;
}

基本示例

下面是一个简单的示例,使用 i18n.gettext 过滤器来覆盖特定的翻译。

// Define our filter callback.
function myPluginGettextFilter( translation, text, domain ) {
    if ( text === 'Create Reusable block' ) {
        return 'Save to MyOrg block library';
    }
    return translation;
}

// Adding the filter
wp.hooks.addFilter(
    'i18n.gettext',
    'my-plugin/override-add-to-reusable-blocks-label',
    myPluginGettextFilter
);

使用特定于“文本域”的过滤器

出于性能考虑,通常建议使用针对你正在操作的文本域特定的过滤器(因为你的回调函数将仅针对相关文本域中的字符串运行)。

要附加到特定于文本域的过滤器,请在标准过滤器名称后追加下划线和文本域名称。例如,如果过滤文本域为 “woocommerce” 的字符串,你可以使用以下其中一个过滤器:

  • i18n.gettext_woocommerce
  • i18n.gettext_with_context_woocommerce
  • i18n.ngettext_woocommerce
  • i18n.ngettext_with_context_woocommerce

例如:

// Define our filter callback.
function myPluginGettextFilter( translation, text, domain ) {
    if ( text === 'You’ve fulfilled all your orders' ) {
        return 'All packed up and ready to go. Good job!';
    }
    return translation;
}

// Adding the filter
wp.hooks.addFilter(
    'i18n.gettext_woocommerce',
    'my-plugin/override-fulfilled-all-orders-text',
    myPluginGettextFilter
);

注意:若要应用于文本域为 undefined(例如 WordPress core 字符串)的过滤器,请使用名称 “default” 来构造过滤器名称。

  • i18n.gettext_default
  • i18n.gettext_with_context_default
  • i18n.ngettext_default
  • i18n.ngettext_with_context_default