使用gettext过滤器从翻译后的字符串中更改特定单词

问题描述

我需要从带有变量的翻译字符串中更改特定单词。我使用的是WooCommerce的西班牙语版本,不知道英语版本中出现的确切方式...但是我认为,理解这一点并不重要。

我尝试使用长期有效的这种代码段:

function my_text_strings( $translated_text,$text,$domain ) {
switch ( $translated_text )
    
     case 'Sample' :
     $translated_text = __( 'Example!' );
     break;}    

return $translated_text;
}
add_filter( 'gettext','my_text_strings',20,3 );

在WooCommerce上,当将超过可用数量的产品添加到购物车时,您会收到以下消息(西班牙语):“否puedesañadiresa cantidad al carrito-tenemos 9 existencias y ”。(我想用英语来说是这样的:“您不能将数量添加到购物车中-我们有9个库存,您已经将9个添加到购物车中。” ),其中“ 9”是变量...这就是为什么我无法使用gettext过滤器挂钩转换所有字符串的原因。

我正在尝试将字符串“存货” 更改为“ existencias”

请问有什么主意吗?

解决方法

请尝试以下操作,而不要使用strpos()str_replace() php函数:

add_filter(  'gettext','change_add_to_cart_not_enough_stock_message',10,3 );
add_filter(  'ngettext',3 );
function change_add_to_cart_not_enough_stock_message( $translated_text,$text,$domain ) {
    // Singular (I don't know if this one will work)
    if ( strpos( $translated_text,'existencia y has añadido' ) !== false ) {
        $translated_text = str_replace('existencia y has añadido','unidad en stock y has añadido',$translated_text);
    }
    // Plural
    if ( strpos( $translated_text,'existencias y has añadido' ) !== false ) {
        $translated_text = str_replace('existencias y has añadido','unidades en stock y has añadido',$translated_text);
    }

    return $translated_text;
}

它可以工作。

有关信息,翻译句子位于1203here in WC_Cart add_to_cart method行:

sprintf( __( 'You cannot add that amount to the cart — we have %1$s in stock and you already have %2$s in your cart.','woocommerce' ),wc_format_stock_quantity_for_display( $product_data->get_stock_quantity(),$product_data ),wc_format_stock_quantity_for_display( $products_qty_in_cart[ $product_data->get_stock_managed_by_id() ],$product_data ) )

相关:How do I check if a string contains a specific word?