使用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上,当将超过可用数量的产品添加到购物车时,您会收到消息(西班牙语(:"没有一个地方是卡里托的坎蒂达-tenemos 9存在y在卡里托有一个地方">(我想在英语中是这样的:"你不能把这个数量添加到购物车中-我们有9个库存,而你已经把9个添加到了你的购物车中;9〃;是可变的。。。这就是为什么我不能使用gettext过滤器挂钩来翻译所有的字符串。

我正试图把单词"strong"改成"strong";existencias"乘以字符串"strong>";库存统一"。

你知道吗?

使用strpos()str_replace()php函数尝试以下操作:

add_filter(  'gettext',  'change_add_to_cart_not_enough_stock_message', 10, 3 );
add_filter(  'ngettext',  'change_add_to_cart_not_enough_stock_message', 10, 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;
}

这是可行的。

有关信息,要翻译的句子位于WC_Cartadd_to_cart方法的1203:行

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 ) )

相关:如何检查字符串是否包含特定单词?

最新更新