WooCommerce、Code Snippet与WPML:新增国家名称无法被WPML识别的翻译解决方案
解决WPML无法识别自定义WooCommerce国家名称的问题
我之前也遇到过类似的情况——自定义添加WooCommerce国家后,WPML没法自动抓取到这个国家名称的翻译字符串。问题出在WPML的字符串扫描机制上:默认情况下,它不会自动识别自定义代码里使用第三方文本域(比如你用的woocommerce)的新字符串,或者你的代码文件没被纳入WPML的扫描范围。下面是几种可行的解决方案:
方法一:手动注册可翻译字符串(最直接)
WPML提供了icl_register_string()函数,可以手动把你的国家名称注册为可翻译项。修改你的代码如下:
add_filter( 'woocommerce_countries', 'add_my_country' ); function add_my_country( $countries ) { // 仅当WPML激活时注册字符串 if ( function_exists( 'icl_register_string' ) ) { icl_register_string( 'WooCommerce Custom Countries', 'Estonia (islands)', 'Estonia (islands)' ); } // 获取翻译后的字符串(兼容无WPML的情况) $country_name = function_exists( 'icl_translate' ) ? icl_translate( 'WooCommerce Custom Countries', 'Estonia (islands)', 'Estonia (islands)' ) : __( 'Estonia (islands)', 'woocommerce' ); $new_countries = array( 'ESTI' => $country_name, ); return array_merge( $countries, $new_countries ); } add_filter( 'woocommerce_continents', 'add_my_country_to_continents' ); function add_my_country_to_continents( $continents ) { $continents['EU']['countries'][] = 'ESTI'; return $continents; }
修改后,进入WP后台的WPML → String Translation,搜索“Estonia (islands)”就能找到这个字符串,直接在那里添加其他语言的翻译即可。
方法二:让WPML扫描你的自定义代码文件
如果不想修改代码,可以让WPML扫描包含这段代码的文件(比如主题的functions.php或者自定义插件文件):
- 进入
WPML → Theme and Plugins Localization - 在“Strings in the theme”(如果代码在主题里)或“Strings in plugins”(如果是自定义插件)区域,找到对应的主题/插件,点击Scan selected files for strings
- 扫描完成后,再次进入
WPML → String Translation,就能搜索到你的国家名称字符串,进行翻译。
注意:如果你用的是woocommerce文本域,WPML默认只扫描WooCommerce官方插件的文件,你的自定义代码不在这个范围内,所以必须手动触发扫描你的文件。
方法三:使用自定义文本域(更规范)
创建一个属于自己的文本域,让WPML更容易识别和管理你的自定义翻译项:
- 先加载自定义文本域(以主题为例,添加到
functions.php):
add_action( 'after_setup_theme', 'load_my_custom_text_domain' ); function load_my_custom_text_domain() { // 加载主题的自定义文本域,语言文件放在主题根目录的languages文件夹 load_theme_textdomain( 'my-woocommerce-countries', get_stylesheet_directory() . '/languages' ); }
- 修改添加国家的代码,使用自定义文本域:
add_filter( 'woocommerce_countries', 'add_my_country' ); function add_my_country( $countries ) { $new_countries = array( 'ESTI' => __( 'Estonia (islands)', 'my-woocommerce-countries' ), ); return array_merge( $countries, $new_countries ); }
- 回到
WPML → Theme and Plugins Localization,扫描你的主题,选择my-woocommerce-countries文本域,完成扫描后就能在String Translation里找到并翻译这个字符串。
额外注意事项
- 你使用的国家代码
ESTI是自定义的,WPML不会翻译国家代码,只会处理名称部分,所以无需担心代码的多语言问题; - 完成翻译后,切换网站语言,检查结账页面、地址表单等区域的国家名称是否正确显示翻译后的内容。
内容的提问来源于stack exchange,提问作者Arkadij Dementjev
相关产品推荐
相关产品推荐

