使文本字符串在Wordpress或WooCommerce中可翻译

时间:2019-09-16 16:41:41

标签: php wordpress woocommerce hook-woocommerce wpml

我已经接管了一个双语言的Woocommerce网站,州/县已使用自定义县进行了修改,但尚未进行翻译。

我该怎么做

这是来自functions.php的代码,看起来是BBloomers网站上的代码的改编。

add_filter( 'woocommerce_states', 'custom_woocommerce_states' ); 
function bbloomer_custom_woocommerce_states() {
     global $states;

     $states['IE'] = array( 
        'AN' => 'Antrim',
        'AR' => 'Armagh',
        'CE' => 'Clare',
        'CN' => 'Cavan',
        'CO' => 'Cork',
        'CW' => 'Carlow',
        'D]' => 'Dublin',
        'DL' => 'Donegal',
        'DW' => 'Down',
        'FE' => 'Fermanagh',
        'G]' => 'Galway',
        'KE' => 'Kildare',
        'KK' => 'Kilkenny',
        'KY' => 'Kerry',
        'LD' => 'Longford',
        'LH' => 'Louth',
        'LK' => 'Limerick',
        'LM' => 'Leitrim',
        'LO' => 'Derry',
        'LS' => 'Laois',
        'MH' => 'Meath',
        'MN' => 'Monaghan',
        'MO' => 'Mayo',
        'OY' => 'Offaly',
        'RN' => 'Roscommon',
        'SO' => 'Sligo',
        'TY' => 'Tipperary',
        'TE' => 'Tyrone',
        'WD' => 'Waterford',
        'WH' => 'Westmeath',
        'WW' => 'Wicklow',
        'WX' => 'Wexford',
    );
    return $states;
} 

是否可以将它们替换为字符串,以便我可以使用WPML进行翻译,还是需要在功能文件中再次进行硬编码?

2 个答案:

答案 0 :(得分:2)

要使任何文本字符串都可翻译,您需要为每个文本字符串(状态)使用特定的__() WordPress function

在您的代码中,$states变量已经在使用woocommerce_states时作为函数的参数提供,因此实际上并不需要错误的global $states;(请参阅此official code snippet )。

因此您的代码将为(在函数内设置活动主题的文本域)

add_filter( 'woocommerce_states', 'custom_ireland_country_states' ); 
function custom_ireland_country_states( $states ) {
     $domain = 'your-theme-domain-name'; // Here set your active theme's domain name

     $states['IE'] = array( 
        'AN' => __("Antrim", $domain ),
        'AR' => __("Armagh", $domain ),
        'CE' => __("Clare", $domain ),
        'CN' => __("Cavan", $domain ),
        'CO' => __("Cork", $domain ),
        'CW' => __("Carlow", $domain ),
        'D]' => __("Dublin", $domain ),
        'DL' => __("Donegal", $domain ),
        'DW' => __("Down", $domain ),
        'FE' => __("Fermanagh", $domain ),
        'G]' => __("Galway", $domain ),
        'KE' => __("Kildare", $domain ),
        'KK' => __("Kilkenny", $domain ),
        'KY' => __("Kerry", $domain ),
        'LD' => __("Longford", $domain ),
        'LH' => __("Louth", $domain ),
        'LK' => __("Limerick", $domain ),
        'LM' => __("Leitrim", $domain ),
        'LO' => __("Derry", $domain ),
        'LS' => __("Laois", $domain ),
        'MH' => __("Meath", $domain ),
        'MN' => __("Monaghan", $domain ),
        'MO' => __("Mayo", $domain ),
        'OY' => __("Offaly", $domain ),
        'RN' => __("Roscommon", $domain ),
        'SO' => __("Sligo", $domain ),
        'TY' => __("Tipperary", $domain ),
        'TE' => __("Tyrone", $domain ),
        'WD' => __("Waterford", $domain ),
        'WH' => __("Westmeath", $domain ),
        'WW' => __("Wicklow", $domain ),
        'WX' => __("Wexford", $domain ),
    );
    return $states;
} 
  

在WPML上:重新扫描您的活动主题的文件。然后,在WPML的“字符串翻译”部分中,每个状态都会出现在可翻译的字符串列表中。


  

要绝对阅读,以了解与Wordpress相关的翻译:I18n for WordPress Developers
所有内容都用所有不同的可用功能和代码示例进行了解释

相关踏板: Add states for shipping zones instead of postcodes in Woocommerce

有关信息: Bloomers代码来自官方的WooCommerce Add/Modify States in WooCommerce


答案 1 :(得分:0)

我还建议您通读http://ottopress.com/2012/internationalization-youre-probably-doing-it-wrong/

非常简短地复制在这里:

  • 请勿在任何翻译功能(包括域)中使用变量。
  • 翻译短语而不是单词。
  • 在必要时消除歧义。
  • 翻译最少的HTML。

这是一篇较老的文章,但有助于解释翻译的原因和目的。