本文档介绍了 WordPress 中用于过滤 i18n 函数(如 __(), _x(), _n(), _nx())返回值的过滤器,允许开发者覆盖字符串翻译。这些过滤器包括 i18n.gettext、i18n.gettext_with_context、i18n.ngettext 和 i18n.ngettext_with_context,并支持基于文本域(text domain)的特定过滤器以提高性能。
// 使用 i18n.gettext 过滤器覆盖特定翻译
function myPluginGettextFilter( translation, text, domain ) {
if ( text === 'Create Reusable block' ) {
return 'Save to MyOrg block library';
}
return translation;
}
// 添加过滤器
wp.hooks.addFilter(
'i18n.gettext',
'my-plugin/override-add-to-reusable-blocks-label',
myPluginGettextFilter
);The i18n functions (__(), _x(), _n() and _nx()) provide translations of strings for use in your code. The values returned by these functions are filterable if you need to override them, using the following filters:
i18n.gettexti18n.gettext_with_contexti18n.ngettexti18n.ngettext_with_contextThe filters are passed the following arguments, in line with their PHP equivalents.
function i18nGettextCallback( translation, text, domain ) {
return translation;
}
function i18nGettextWithContextCallback( translation, text, context, domain ) {
return translation;
}
function i18nNgettextCallback( translation, single, plural, number, domain ) {
return translation;
}
function i18nNgettextWithContextCallback(
translation,
single,
plural,
number,
context,
domain
) {
return translation;
}
Here is a simple example, using the i18n.gettext filter to override a specific translation.
// 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
);
Filters that are specific to the text domain you’re operating on are generally preferred for performance reasons (since your callback will only be run for strings in the relevant text domain).
To attach to a text domain-specific filter append an underscore and the text-domain to the standard filter name. For example, if filtering a string where the text domain is “woocommerce”, you would use one of the following filters:
i18n.gettext_woocommercei18n.gettext_with_context_woocommercei18n.ngettext_woocommercei18n.ngettext_with_context_woocommerceFor example:
// 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
);
Note: To apply a filter where the text-domain is undefined (for example WordPress core strings), then use the name “default” to construct the filter name.
i18n.gettext_defaulti18n.gettext_with_context_defaulti18n.ngettext_defaulti18n.ngettext_with_context_default