首頁 >CMS教程 >&#&按 >WordPress I18N:準備您的插件翻譯

WordPress I18N:準備您的插件翻譯

Jennifer Aniston
Jennifer Aniston原創
2025-02-19 12:37:11304瀏覽

WordPress I18N:準備您的插件翻譯

在上一篇文章中,我涵蓋了WordPress國際化的基本原理(縮寫為I18N);如何安裝WordPress的本地化版本以及如何輕鬆將現有WordPress站點轉換為本地化版本。 在本文中,我將引導您完成WordPress插件的國際化過程。該過程並不困難,一旦獲取知識,您就可以將WordPress插件輕鬆翻譯成其他語言。

鑰匙要點

國際化(I18N)是開發插件以容易翻譯成其他語言的過程,而本地化(L10N)是將國際化插件轉換為新語言的隨後過程。

>“準備WordPress插件”翻譯對於吸引全球受眾,增強用戶體驗並通過使使用不同語言的用戶可以訪問用戶群至關重要。

>
    準備翻譯的插件的過程涉及設置翻譯標題(文本域和域路徑),加載文本域以及國際化各種元素,例如字符串,佔位符,佔位符,html,html,plurals,proceponts ,context and context and casting translation strings。 >
  • > WordPress I18N使用GNU getText本地化框架,該框架提供了翻譯文本的工具。這涉及將所有文本字符串包裝在__()或_e()函數中,並創建.pot(Portable Object Template)文件,該文件包含插件中的所有可翻譯字符串。
  • 國際化和本地化之間的差異
  • 多年來,開發人員傾向於誤解這些術語的含義 - 國際化和本地化。
  • 國際化是開發插件的過程,因此可以輕鬆地翻譯成其他語言。 >
  • >本地化描述了將國際化插件轉換為新語言的後續過程。
>值得注意的是,國際化通常被縮寫為I18N(因為“ i”和“ n'之間有18個字母),並且本地化被縮寫為L10N(因為“ L”和“ L'和之間有10個字母) 'n'。 )

為什麼國際化?

答案很簡單; WordPress以許多不同的語言在世界範圍內使用。當插件被國際化時,它們會吸引來自世界其他地區的較大受眾,他們顯然會通過使用自己的語言使用插件來受益。
    > 作為開發人員,您可能沒有時間提供插件的本地版本,因為您不會說其他語言。但是,當您國際化插件時,您會為他人打開大門,以創建本地化而不一定要修改源代碼。
  • 插件國際化

    >現在我們已經熟悉了插件國際化和本地化的概念,讓我們開始研究準備翻譯的插件的過程。

    >

    >設置翻譯頭

    進行插件可翻譯的第一步是在插件標題中包含翻譯標題。

    翻譯標題是文本域和域路徑。 >

    >文本域用於表示屬於插件的所有文本。 這是一個唯一的標識符,可確保WordPress可以區分所有加載的翻譯。這增加了可移植性,並且使用已經存在的WordPress工具可以更好地發揮作用。

    >

    >文本域必須匹配插件的slug。例如,如果您的插件是一個稱為sample-plugin.php的單個文件,或者它包含在稱為sample-plugin的文件夾中,則應為sample-plugin。

    >文本域上的註釋 文本域名必須使用破折號而不是下劃線。

    >還記得我說過文本域必須與插件slug匹配嗎?畢竟這可能不是真的。我對我的一個插件進行了快速實驗,而不是插件的插件,我使用了一個唯一的文本,並且沒有任何問題。

    道德:確保文本域是唯一的,以免與其他插件相衝突。

    >

    域路徑是文件夾WordPress將搜索.mo Translation Files。

    默認情況下,WordPress搜索要使用的翻譯文件的插件目錄。將翻譯文件放在插件的根文件夾中可能會使您的插件結構混亂。

    > 例如,如果您想將翻譯文件保存在文件夾中,例如; /語言,您需要使用域路徑標頭通知WordPress。

    下面是WordPress插件的典型標題。

    >加載文本域

    >現在,我們將使用load_plugin_textdomain()函數告訴WordPress如果使用用戶的語言,請加載翻譯文件。

    >

    以下是函數概要。

    第一個參數$域應該是文本域; $ abs_rel_path已被棄用,應設置為false;最後,$ plugin_rel_path是翻譯文件的相對路徑。

    <span><span><?php
    </span></span><span><span>/*
    </span></span><span><span> Plugin Name: Enable Shortcode and PHP in Text widget
    </span></span><span><span> Plugin URI: http://w3guy.com/shortcode-php-support-wordpress-text-widget/
    </span></span><span><span> Description: Enable shortcode support and execute PHP in WordPress's Text Widget
    </span></span><span><span> Author: Agbonghama Collins
    </span></span><span><span> Version: 1.2
    </span></span><span><span> Author URI: http://w3guy.com
    </span></span><span><span> Text Domain: espw-plugin
    </span></span><span><span> Domain Path: /languages/
    </span></span><span><span> */</span></span>
    如果翻譯mo文件在插件自己的目錄中,則使用如下:>

    如果翻譯mo文件在插件的語言子目錄中。使用如下:

    >您不僅要調用load_plugin_textdomain函數,還應在插件中以插件_loaded這樣的操作在插件中調用:

    >
    <span><span><?php load_plugin_textdomain( $domain, $abs_rel_path, $plugin_rel_path ) ?></span></span>

    >深入研究插件i18n

    >現在設置了文本域和域路徑標頭,是時候學習如何國際化插件了。

    <span>load_plugin_textdomain( 'espw-plugin', false, dirname( plugin_basename( __FILE__ ) ) );</span>
    該教程的這一段將分為以下:
    1. >字符串翻譯
    2. 使用佔位符
    3. html翻譯
    4. 與復數打交道
    5. 通過上下文
    6. 逃脫翻譯字符串

    請注意:字符串ESPW-Plugin將在本教程中用作文本域。

    1。字符串翻譯

    要在插件中翻譯一個字符串,請將原始字符串包裝在__()函數調用中如下:
    <span><span><?php
    </span></span><span><span>/*
    </span></span><span><span> Plugin Name: Enable Shortcode and PHP in Text widget
    </span></span><span><span> Plugin URI: http://w3guy.com/shortcode-php-support-wordpress-text-widget/
    </span></span><span><span> Description: Enable shortcode support and execute PHP in WordPress's Text Widget
    </span></span><span><span> Author: Agbonghama Collins
    </span></span><span><span> Version: 1.2
    </span></span><span><span> Author URI: http://w3guy.com
    </span></span><span><span> Text Domain: espw-plugin
    </span></span><span><span> Domain Path: /languages/
    </span></span><span><span> */</span></span>

    如果您想將字符串與瀏覽器相呼應,而不是Echo語言構造,請使用_e函數:
    <span><span><?php load_plugin_textdomain( $domain, $abs_rel_path, $plugin_rel_path ) ?></span></span>

    2。使用佔位符

    作為PHP和WordPress開發人員,我認為您知道什麼是佔位符。您可以快速瀏覽Sprintf和printf()PHP文檔以獲取更多信息。

    如果您在字符串中使用變量,例如下面的示例,則應使用佔位符。

    >
    <span>load_plugin_textdomain( 'espw-plugin', false, dirname( plugin_basename( __FILE__ ) ) );</span>

    正確的方法是使用printf()函數如下:

    >
    <span>load_plugin_textdomain( 'espw-plugin', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );</span>

    瀏覽WordPress插件存儲庫中某些插件的代碼,我確實看到了這樣的內容:

    >
    <span>function load_plugin_textdomain() {
    </span>  <span>load_plugin_textdomain( 'espw-plugin', FALSE, basename( dirname( __FILE__ ) ) . '/languages/' );
    </span><span>}
    </span>
    <span>add_action( 'plugins_loaded', 'load_plugin_textdomain' );</span>
    <span>$text =  __( 'Hello, SitePoint Readers!', 'espw-plugin' );</span>

    儘管現在可以翻譯字符串,但php變量$ city也可以翻譯。

    這是一個不好的做法,因為翻譯器可能會錯誤地將變量或將惡意代碼更改為插件代碼庫,這最終將導致插件故障。

    sprintf函數與printf相似,因為他們使用佔位符格式字符串,而printf輸出格式的字符串,sprintf返回字符串。

    >示例:以下代碼將格式的字符串分配給變量$ text。

    3。 html翻譯

    <span>_e( 'Hello, SitePoint Readers!', 'espw-plugin' );</span>
    在可翻譯字符串中包括HTML取決於上下文。 >

    一個示例是一個鏈接(與周圍的文本分開):>

    另一個示例是段落中的鏈接(未與周圍的文本分開):

    4。處理複數

    >當可以使用_n()函數國際化的項目數量時,該字符串會更改。
    <span>echo 'Your city is $city.'</span>
    >
    <span>printf(
    </span>    <span>__( 'Your city is %s.', 'espw-plugin' ),
    </span>    <span>$city
    </span><span>);</span>
    此函數接受4個參數,即:

    >

    單數 - 字符串的單數形式

    >

    複數 - 字符串的複數形式

      計數 - 將確定是否應返回單數或複數形式的對像數量
    • >文本域 - 插件文本域
    • >讓我們來了解一些示例,以理解_n()函數的工作方式。
    • 在英語中,您有“一個評論”和“兩個評論”。在其他語言中,您可以具有多種複數形式。
    • 下面的代碼演示瞭如何使用_n()函數來處理此類情況。
    • >
    代碼說明上面的代碼由這三個函數組成-printf,_n和number_format_i18n。

    >易於同化,將用所述的每個函數組件剖析功能代碼。
    <span><span><?php
    </span></span><span><span>/*
    </span></span><span><span> Plugin Name: Enable Shortcode and PHP in Text widget
    </span></span><span><span> Plugin URI: http://w3guy.com/shortcode-php-support-wordpress-text-widget/
    </span></span><span><span> Description: Enable shortcode support and execute PHP in WordPress's Text Widget
    </span></span><span><span> Author: Agbonghama Collins
    </span></span><span><span> Version: 1.2
    </span></span><span><span> Author URI: http://w3guy.com
    </span></span><span><span> Text Domain: espw-plugin
    </span></span><span><span> Domain Path: /languages/
    </span></span><span><span> */</span></span>

    第一個參數傳遞給_n函數是當評論數是單數時要顯示的文本。

    第二個是當評論數大於一個時顯示的文本。 >

    佔位符%s將包含number_format_i18n(get_comments_number())的值。

    第三個參數get_comments_number()被認為是返回註釋計數的函數。

    如果它返回1,則第一個參數一個註釋將由printf輸出,否則第二個參數%s如果大於1。

    請注意:佔位符%s被Number_format_i18n返回的整數(get_comments_number()),這是傳遞給printf函數的第二個參數。

    >最後,第四個參數是翻譯

    文本域

    >。

    >函數number_format_i18n()根據語言環境將註釋計數轉換為格式。有關更多信息,請參見文檔。

    >類似於number_format_i18n()是基於時間戳的局部格式的日期。 仍在_n()函數上,下面是該函數如何工作的另一個演示。

    >如果變量$ count返回1,我們將顯示一條垃圾郵件消息的文本;但是,如果它大於1,我們將刪除%d垃圾郵件消息,佔位符%d被$ count的整數替換。

    >

    5。通過上下文

    歧義

    >有時在幾種情況下使用一個術語,儘管它是英語中的一個和相同的單詞,它必須以其他語言的方式翻譯不同。

    >

    例如,單詞帖子可以用作動詞,例如“單擊此處以發布您的評論”和名詞“編輯此帖子”。
    <span><span><?php load_plugin_textdomain( $domain, $abs_rel_path, $plugin_rel_path ) ?></span></span>
    >

    在這種情況下,應使用_x或_ex函數。

    >

    它類似於__()和_e(),但是它有一個額外的參數 - $上下文。

    在兩種情況下,使用此方法都使用此方法,我們將獲得原始版本的字符串註釋,但是翻譯人員將在不同的上下文中看到兩個評論字符串。

    >當通過poedit等翻譯工具(例如poedit)解析函數_x()的字符串時,上下文參數為翻譯器提供了在上下文上使用字符串/文本的提示。 在德語中,作為一個名詞的帖子是beitrag,而動詞為詞。

    > 下面的

    是Poedit的屏幕截圖,將字符串柱翻譯為德語,並帶有上下文平方。

    _x()檢索翻譯的字符串,_ex()顯示它。

    >
    <span>load_plugin_textdomain( 'espw-plugin', false, dirname( plugin_basename( __FILE__ ) ) );</span>
    6。逃避翻譯字符串

    具有許多用於驗證和消毒數據的功能。

    列表中的

    是用於逃脫翻譯文本的函數 - esc_html(),ESC_HTML_E(),ESC_HTML_X(),ESC_ATTR(),ESC_ATTR_E()和ESC_ATTR_E()和ESC_ATTR_X()。您可以在WordPress codex中獲取有關這些功能的更多信息。

    >我不需要解釋其中的每一個,但是他們所做的基本上是逃脫可翻譯的文本。

    總結

    WordPress的目標之一是使世界各地的用戶輕鬆發佈內容。作為插件開發人員,您可以在國際化插件時幫助進一步簡化用戶的發布流程。

    >

    >本教程的第一部分本質上是關於您需要了解的有關插件I18N的所有內容。

    >結論部分將是關於如何準備插件翻譯以及學習如何將插件定位到新語言的演練。

    >

    我希望您從本教程中學到了新知識。

    >

    >快樂編碼!

    經常詢問有關WordPress I18N和插件翻譯的問題(常見問題解答)

    >使WordPress插件準備就緒?

    >使WordPress插件轉換準備就緒對於吸引全球受眾至關重要的重要性是什麼。並非所有WordPress用戶都是說英語的人。通過國際化您的插件,您可以將講不同語言的用戶訪問,從而增加用戶群。它還可以增強用戶體驗,因為用戶可以用母語與您的插件進行交互,從而使其更友好。使插件的文本字符串可翻譯成其他語言。這是通過將這些文本字符串包裹在一個特殊功能中,可以翻譯它們來實現。 WordPress為此目的使用gnu getText本地化框架,該框架提供了一組用於翻譯文本的工具。

    是哪些步驟可以使WordPress插件轉換準備?插件翻譯就緒涉及多個步驟。首先,您需要通過包裝__()或_e()函數中的所有文本字符串來國際化插件。接下來,您需要創建一個.pot(Portable對像模板)文件,該文件包含插件中的所有可翻譯字符串。該文件用作創建.po(Portable Object)和.mo(Machine Object)文件的模板,該模板包含翻譯字符串。

    __()和_e()函數之間有什麼區別WordPress I18N?

    __()和_e()函數都在WordPress I18N中使用,以使文本字符串可翻譯。它們之間的主要區別是__()返回翻譯的字符串,而_e()迴聲或直接輸出翻譯的字符串。因此,當要將翻譯的字符串存儲在變量中時,您將使用__(),當要向用戶顯示翻譯字符串時_e()。

    >如何將WordPress插件轉換為不同的語言?

    >將您的WordPress插件轉換為不同的語言,您需要為每種語言創建.po和.mo文件。這些文件包含翻譯的字符串,並根據ISO-639語言代碼命名(例如,英語en_us,fr_fr,法語)。您可以使用poedit或loco等工具來創建和管理這些翻譯文件。

    我可以使用哪些工具用於WordPress I18N? >

    >如何測試我的WordPress插件以進行翻譯準備?可以通過更改WordPress設置中的語言並檢查插件的文本字符串是否正確翻譯來測試您的WordPress插件是否準備轉換。您還可以使用WordPress I18N Checker插件之類的工具,該工具會檢查您的插件中的常見i18n錯誤。

    >我如何為WordPress插件翻譯貢獻?

    您可以為WordPress插件翻譯貢獻通過WordPress Polyglots團隊。他們負責將WordPress定位為不同的語言。您可以加入團隊並開始將插件和主題轉換為母語。

    > .pot,.po和.mo文件在WordPress I18N?

    進行WordPress主題翻譯準備涉及與插件類似的過程。您需要通過將所有文本字符串包裝在__()或_e()函數中來國際化主題。然後,您需要創建一個.pot文件並將其用作為每種語言創建.po和.mo文件的模板。

以上是WordPress I18N:準備您的插件翻譯的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn