修改WooCommerce订阅价格字符串:3个字段翻译失效求助
问题解决思路与修正代码
你遇到的问题核心是匹配了已翻译后的文本而非原始未翻译字符串,另外部分字段可能存在匹配精度或专用过滤器的问题,以下是针对性修正方案:
核心问题分析
原代码里switch ($translated_text)是判断已经经过翻译处理后的文本,但你要替换的是原始的英文字段(比如"USD"、"/ Month"),应该匹配$text参数——这才是WooCommerce输出的原始未翻译字符串。
修正后的代码方案
方案1:修正gettext过滤器逻辑
把判断对象改为$text,同时确保字符串完全匹配(注意空格、大小写):
function wc_billing_field_strings( $translated_text, $text, $domain ) { // 匹配原始未翻译的字符串,而非已翻译后的文本 switch ( $text ) { case '/ Month' : $translated_text = __( 'Monthly-Cycle', 'woocommerce' ); break; case '/ Month for 1 Month For' : $translated_text = __( 'Monthly-Cycle for a Month', 'woocommerce' ); break; case 'USD' : $translated_text = __( 'US-Dollar', 'woocommerce' ); break; case 'First renewal' : $translated_text = __( 'First-Cycle', 'woocommerce' ); break; } return $translated_text; } // 提高优先级,确保在其他翻译逻辑后执行 add_filter( 'gettext', 'wc_billing_field_strings', 99, 3 );
方案2:货币符号专用处理(更推荐)
对于"USD"这类货币符号,WooCommerce有专门的woocommerce_currency_symbol过滤器,比gettext更精准:
function custom_woocommerce_currency_symbol( $symbol, $currency ) { switch( $currency ) { case 'USD': $symbol = 'US-Dollar'; break; } return $symbol; } add_filter( 'woocommerce_currency_symbol', 'custom_woocommerce_currency_symbol', 10, 2 );
额外注意事项
- 检查原始字符串的精确格式:比如确认"/ Month"是否是"/Month"(无空格),如果实际输出是无空格的,要同步修改case里的字符串
- 清除WooCommerce缓存:修改代码后刷新页面缓存,避免旧翻译缓存影响结果
内容的提问来源于stack exchange,提问作者DDJ
相关产品推荐
相关产品推荐

