You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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更容易识别和管理你的自定义翻译项:

  1. 先加载自定义文本域(以主题为例,添加到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' );
}
  1. 修改添加国家的代码,使用自定义文本域:
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 );
}
  1. 回到WPML → Theme and Plugins Localization,扫描你的主题,选择my-woocommerce-countries文本域,完成扫描后就能在String Translation里找到并翻译这个字符串。

额外注意事项

  • 你使用的国家代码ESTI是自定义的,WPML不会翻译国家代码,只会处理名称部分,所以无需担心代码的多语言问题;
  • 完成翻译后,切换网站语言,检查结账页面、地址表单等区域的国家名称是否正确显示翻译后的内容。

内容的提问来源于stack exchange,提问作者Arkadij Dementjev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 09:42:46