【问题标题】:WooCommerce, Code snippet and WPML: Allow translation from new countryWooCommerce、代码片段和 WPML:允许来自新国家/地区的翻译
【发布时间】:2021-02-27 10:13:12
【问题描述】:

我使用 Code sn-p 插件向 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 没有看到这个新的国家字符串。我在哪里错过了什么?如何将“爱沙尼亚(岛屿)”翻译成其他语言?

【问题讨论】:

  • 如果您将代码保存在您的子主题function.php文件中,您应该首先将可翻译字符串的文本域名更改为您的子主题文本域,因此将'woocommerce'更改为您的孩子主题文本域。然后在 WPML 中重新扫描您的子主题以查找新的可翻译字符串。然后在“字符串翻译”部分你会看到这些字符串。
  • @LoicTheAztec 我通过这个插件添加代码wordpress.org/plugins/code-snippets
  • 在 WPML 论坛上搜索了一下,我在下面回答了(未经测试)……如果这个答案回答了你的问题,你可以请 accept 答案,如果你喜欢/想要你也可以@ 987654323@也有答案,谢谢。

标签: php wordpress woocommerce country wpml


【解决方案1】:

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

【讨论】:

  • 我尝试使用您的代码,但网站出现故障。我做错了什么? add_filter( 'gettext', 'translate_some_custom_strings', 10000, 3 ); function change_some_woocommerce_strings( $translate_text, $original_text, $domain ) { if ( defined( 'ICL_LANGUAGE_CODE' ) && 'Estonia (islands)' === $original_text ) { if ( 'RU' === ICL_LANGUAGE_CODE ) { $translate_text = 'Эстония (острова)'; } elseif ( 'LV' === ICL_LANGUAGE_CODE ) { $translate_text = 'Estonia (salas)'; } } return $translate_text; }
  • @ArkadijDementjev 哎呀!抱歉……已更新,现在可以正常工作了。
  • 所以我尝试了更新的代码,它没有翻译国家,我将我的代码复制到子主题,按照你说的扫描和翻译。以及它的工作,谢谢
猜你喜欢
  • 2022-11-14
  • 2012-02-18
  • 1970-01-01
  • 1970-01-01
  • 2016-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-09
  • 1970-01-01
相关资源
最近更新 更多