WooCommerce、代码片段和 WPML:允许从新国家翻译

WooCommerce, Code snippet and WPML: Allow translation from new country

我使用以下代码片段插件向 WooCommerce 添加了一个新国家:

add_filter( 'woocommerce_countries',  'add_my_country' );
function add_my_country( $countries ) {
     $new_countries = array( 'ESTI'  => __( 'Estonia (islands)', 'woocommerce' ), );
     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;
} 

代码运行良好。

现在我正在使用 WPML 插件进行翻译,但是 WPML 看不到这个新的国家/地区字符串。我在哪里遗漏了什么?如何将“爱沙尼亚(群岛)”翻译成其他语言?

Fist 如果您将代码保存在您的子主题 function.php 文件中,您应该首先将可翻译字符串的文本域名更改为您的子主题文本域,因此将 'woocommerce' 更改为您的子主题文本域。然后在 WPML 中重新扫描您的子主题以获得新的可翻译字符串。然后在“字符串翻译”部分,您将看到这些字符串。

现在,如果它不起作用,因为您正在使用 WPML 插件进行翻译并使用代码片段插件进行代码自定义,您可以使用 WPML ICL_LANGUAGE_CODE 常量来定位特定的国家/地区代码。

然后 gettext 挂钩应该适用于按国家/地区代码进行的翻译,例如:

add_filter( 'gettext', 'translate_some_custom_strings', 10000, 3 );
function translate_some_custom_strings( $translate_text, $original_text, $domain ) {
    if ( defined( 'ICL_LANGUAGE_CODE' ) && 'Estonia (islands)' === $original_text ) {
        // For Estonia
        if ( 'ESTI' === ICL_LANGUAGE_CODE ) {
            $translate_text = 'Eesti (saared)';
        } 
        // For France
        elseif ( 'FR' === ICL_LANGUAGE_CODE ) {
            $translate_text = 'Estonie (îles)';
        }
    }

    return $translate_text;
}

注意:您可能需要检查“ESTI”是否是 WPML 中的注册国家代码。

相关的 WPML 主题:[Resolved] I can’t see translation for Code Snippet plugin