1

我多年来使用的代码(下面的示例)已经有一段时间没有工作了。尝试了此处发布的其他一些代码,但没有任何乐趣。WC 似乎改变了过滤/翻译的方式,并且每个改变的文本都需要分开。那是对的吗?最初使用此代码进行了 11 次文本更改...

希望有一些代码可以在 WC 5.0 中执行文本更改谢谢!

add_filter('gettext', 'translate_text');
add_filter('ngettext', 'translate_text');

function translate_text($translated) {
$translated = str_ireplace('Products', 'Prints', $translated);
$translated = str_ireplace('Product', 'Print', $translated);
$translated = str_ireplace('Product Categories', 'Prints', $translated);
return $translated;
}
4

3 回答 3

1

WordPress 挂钩gettext,并且ngettext有一段时间没有变化,并且可以处理可翻译的字符串,独立于 WooCommerce 版本......</p>

使其与钩子一起工作的正确方法gettextngettext简化一点并添加一些缺少的函数参数)

add_filter( 'gettext', 'change_some_woocommerce_strings', 10, 3 );
add_filter( 'ngettext', 'change_some_woocommerce_strings', 10, 3 );
function change_some_woocommerce_strings( $translate_text, $original_text, $domain ) {
    if ( stripos( $original_text, 'Product') !== false || stripos( $original_text, 'Categories') !== false ) {
        $translate_text = str_ireplace( 
            array('Product categories', 'Products', 'Product'),
            array('Prints', 'Prints', 'Print'), 
        $original_text );
    }

    return $translate_text;
}

如果某些字符串未翻译,可能是因为它们添加了一些上下文。在这种情况下,钩子gettext_with_context是必需的,例如:

add_filter( 'gettext_with_context', 'change_some_woocommerce_strings_with_context', 10, 4 );
function change_some_woocommerce_strings_with_context( $translate_text, $original_text, $context, $domain ) {
    if ( stripos( $original_text, 'Product') !== false || stripos( $original_text, 'Categories') !== false ) {
        $translate_text = str_ireplace( 
            array('Product categories', 'Products', 'Product'),
            array('Prints', 'Prints', 'Print'), 
        $original_text );
    }

    return $translate_text;
}

代码位于活动子主题(或活动主题)的 functions.php 文件中。测试和工作。

于 2021-02-11T14:09:27.260 回答
0

这是最终为我工作的代码。将 2 ibc 更改为您想要的名称或直接保留它。不要忘记更改您希望使用的名称而不是 Print(s)

   add_filter( 'gettext', 'ibc_translate_woocommerce_strings', 999, 3 );

   function ibc_translate_woocommerce_strings( $translated, $untranslated, $domain ) {

     if ( ! is_admin() && 'woocommerce' === $domain ) {

        switch ( $translated ) {

           case 'Products':

           $translated = 'Prints';
           break;

           case 'Product':

           $translated = 'Print';
           break;

           case 'Product Categories':

           $translated = 'Print';
           break;

         // ETC
   
   }

 }   

      return $translated;

 }
于 2021-02-11T18:18:25.290 回答
0

也许这也有帮助。在测试时,您应该在刷新页面以查看更改之前清空购物车。至少这是我使用迷你购物车小部件的方式。祝大家成功!

于 2021-11-25T00:51:17.940 回答