1. <optgroup id="1j155"><li id="1j155"><source id="1j155"></source></li></optgroup><track id="1j155"></track>
          <acronym id="1j155"></acronym>
            首頁 / WordPress資訊 / WordPress 5.0+支持JavaScript i18n本地化翻譯
            Loading收藏1

            前些天看到WordPress官方發布的關于JavaScript本地化翻譯的消息,對于開發者來說,這個或許是一個好消息,在此之前,對于JS里需要翻譯的字段,一般是用?wp_localize_script() 來實現的,而如果能使用和PHP一樣的機制實現,那還真是不錯的選擇。

            以下內容出自:https://make.wordpress.org/core/2018/11/09/new-javascript-i18n-support-in-wordpress/,大多使用Google翻譯的,英文好的朋友,可以去官方看看。

            多年來,國際化(i18n)在PHP開發方面得到了很好的支持。對于PHP,WordPress已經提供了所有必要的工具,使其盡可能簡單地將WordPress核心,、主題和插件本地化為任何語言。今天,我們為WordPress的JavaScript開發帶來了相同的功能。

            如何實現

            注冊腳本時,您可以添加 wp-i18n 作為依賴項,以允許您像在PHP中一樣添加可翻譯字符串:

            1
            
            wp_register_script( 'my-handle', plugins_url( '/js/my-file.js', MY_PLUGIN ), array( 'wp-i18n' ) );

            在腳本中,您將能夠使用wp-i18n,如下所示:

            1
            2
            3
            4
            5
            6
            
            const { __, _x, _n, _nx } = wp.i18n;
             
            __( '__', 'my-domain' );
            _x( '_x', '_x_context', 'my-domain' );
            _n( '_n_single', '_n_plural', number, 'my-domain' );
            _nx( '_nx_single', '_nx_plural', number, '_nx_context', 'my-domain' );

            這些函數鏡像它們的PHP對應字段,并可以以完全相同的方式使用。

            最后一步是告訴WordPress你的腳本包含翻譯和使用哪個文本域,這是為了讓WordPress有選擇地只加載必要的翻譯,以確保一切盡可能快:

            1
            
            wp_set_script_translations( 'my-handle', 'my-domain' );

            還要確保在插件文件的標題中為您的翻譯指定了文本域(Text Domain)。否則,translate.wordpress.org將不會提取翻譯。

            高級用法

            現在,已經可以使用load_textdomain函數發送您自己的翻譯并傳遞您自己的MO文件。這也可以使用 wp_set_script_translations 接受可選的第三個路徑參數,該參數允許您告訴WordPress先查找其他地方的翻譯:

            1
            
            wp_set_script_translations( 'my-handle', 'my-domain', plugin_dir_path( MY_PLUGIN ) . 'languages' );

            如果通過,WordPress將首先檢查格式為 ${domain}-${locale}-${handle}.json?的文件是否存在于給定路徑中,如果是,則將其用作翻譯源。或者,在默認為WordPress語言目錄之前,它還將首先檢查md5文件名的給定路徑。

            如果您想發送自己的翻譯文件,這些文件應該是?JED?1.x ( .json ) 格式。GlotPress能夠與其他工具(如po2json)一起創建這些工具。理想情況下,這些文件應該只包含在各自的JS文件中出現的翻譯。使用po2json,您可以生成以下文件:

            1
            
            po2json translation.po translation.json -f jed

            這將生成以下格式的JSON:

            1
            2
            3
            4
            5
            6
            7
            8
            9
            10
            11
            12
            13
            14
            15
            16
            17
            18
            19
            20
            21
            22
            23
            24
            25
            26
            27
            28
            29
            30
            
            {
              "translation-revision-date": "+0000",
              "generator":                 "GlotPress/2.3.0-alpha",
              "domain":                    "messages",
              "locale_data":               {
                "messages": {
                  "":                                                             {
                    "domain":       "messages",
                    "plural-forms": "n != 1",
                    "lang":         "en-gb"
                  },
                  "This file is too big. Files must be less than %d KB in size.": [
                    "This file is too big. Files must be less than %d KB in size."
                  ],
                  "%d Theme Update":                                              [
                    "%d Theme Update",
                    "%d Theme Updates"
                  ],
                  "password strength\u0004Medium":                                [
                    "Medium"
                  ],
                  "taxonomy singular name\u0004Category":                         [
                    "Category"
                  ],
                  "post type general name\u0004Pages":                            [
                    "Pages"
                  ]
                }
              }
            }

            屏幕背后

            當您將插件或主題上傳到 wordpress.org 時,所有JS文件將自動解析為已經為PHP文件完成的文件。任何檢測到的翻譯都將添加到translate.wordpress.org,以允許社區合作以確保WordPress、插件和主題以盡可能多的語言提供。

            為了解析所有JS文件,使用了用于wp-cli的i18n命令。這取代了makepot.php,不僅允許在JS文件中獲取翻譯,而且還允許審計字符串,僅解析特定文本域的字符串,甚至拾取makepot.php未檢測到的一些字符串。這個命令是免費提供的,并且像makepot.php那樣是開源的,并且建議任何使用makepot.php的人都可以轉換到這個改進的替代品。

            基于這些解析的翻譯,生成語言包。傳統上這些用于僅包含PO和MO文件,每個區域設置一對。為了有選擇地僅加載必要的翻譯,無論是否使用它們,還要添加更多文件,每個JS文件的一個JSON文件包含每個語言環境的翻譯。

            在解析JS文件以進行翻譯時,我們不知道使用哪個句柄來注冊該文件,因此我們必須使用備用機制來查找屬于每個文件的翻譯。為此,我們使用每個文件的相對路徑的md5。即以?${domain}-${locale} 名稱格式來命名的 ${domain}-${locale}-${md5}.json 文件。

            當您為句柄設置腳本翻譯時,WordPress會自動找出源文件的相對md5哈希值,檢查是否存在翻譯文件,如果存在,請確保在腳本運行之前將其加載到wp.i18n中。

            插件和主題支持

            在WP官方庫的主題和插件的翻譯、語言包支持,預計將在未來幾周內完成。補丁準備就緒并等待提交。鼓勵插件和主題作者在他們的JavaScript項目中開始使用wp-i18n。

            致謝

            如果沒有@ocean90,@sswssspidy,@rinrad,@atimmer,@sslessera以及最近@herregroen的長期努力,這個API是不可能實現的。非常感謝你們為實現這一目標而付出的令人難以置信的工作!還要感謝@herregroen為本演講提供必要的文案。

            你可能還喜歡

            發表評論

            我們是靠譜的WordPress建站團隊!

            專業承接WordPress網站建設及運維、WordPress主題和插件開發、漢化、安裝等服務

            聯系電話:189-3334-7774

            查看所有服務項目

            視頻教程: 點擊聯系我們
            建站咨詢: 點擊聯系我們
            售后支持: 點擊聯系我們
            廣告合作: 點擊聯系我們

            建站咨詢:189-3334-7774

            固定電話:0773-8282-430

            售后支持:133-0773-9152

            微信掃一掃,聯系我們

            丁香网