什么是國際化?
國際化是開發(fā)主題的過程,因此可以輕松將其翻譯成其他語言。國際化通常縮寫為i18n
(因?yàn)樽帜竔和n之間有18個(gè)字母)。
為什么國際化很重要?
在英語不是主要語言的國家/地區(qū)中,WordPress遍及世界各地。WordPress插件中的字符串需要以特殊方式進(jìn)行編碼,以便可以輕松地翻譯成其他語言。作為開發(fā)人員,您可能無法為所有用戶提供本地化。但是,翻譯人員可以成功定位主題,而無需修改源代碼本身。
如何使您的主題國際化?
為了使主題中的文本易于翻譯,不應(yīng)在主題中對文本進(jìn)行硬編碼,而應(yīng)將其作為參數(shù)通過WordPress中的一種本地化功能傳遞。
除非翻譯者修改了效率不高的源代碼,否則以下示例將無法翻譯。
1個(gè) | <h1>Settings Page</h1> |
通過將字符串傳遞給本地化函數(shù),可以很容易地對其進(jìn)行解析以進(jìn)行翻譯。
1個(gè) | <h1><?php _e( 'Settings Page' ); ?></h1> |
WordPress使用??gettext庫能夠在PHP中添加翻譯。在WordPress中,您應(yīng)該使用WordPress本地化功能,而不是與本機(jī)PHP gettext兼容的翻譯功能。
文字域
文本域是國際化功能中使用的第二個(gè)參數(shù)。文本域是唯一的標(biāo)識(shí)符,允許WordPress區(qū)分所有已加載的翻譯。僅需要為主題和插件定義文本域。
WordPress.org文本域上托管的主題必須與主題URL(wordpress.org/themes/<slug>
)的匹配項(xiàng)匹配。這是必需的,以便來自translate.wordpress.org的翻譯??正常工作。
文本域名必須使用短劃線而不是下劃線,并且必須小寫。例如,如果主題名稱My Theme
?在中定義,style.css
?或者包含在名為my-theme
text domain?的文件夾中,則該名稱為my-theme
。
文本域在三個(gè)不同的地方使用:
- 在
style.css
主題標(biāo)題中 - 作為本地化功能的一個(gè)論點(diǎn)
- 使用
load_theme_textdomain()
或??加載翻譯時(shí)作為參數(shù)load_child_theme_textdomain()
style.css主題標(biāo)頭#style.css主題標(biāo)頭
文本域被添加到style.css
標(biāo)題,以便即使未啟用主題也可以翻譯主題描述之類的主題元數(shù)據(jù)。文本域應(yīng)與加載文本域時(shí)使用的域相同。
例:
1個(gè)2345 | /* * Theme Name: My Theme * Author: Theme Author * Text Domain: my-theme */ |
域路徑
將翻譯保存在以外的目錄時(shí),需要使用域路徑languages
?。這樣,當(dāng)主題未激活時(shí),WordPress便知道在哪里可以找到譯文。例如,如果.mo文件位于languages文件夾中,則“域路徑”將/languages
且必須以第一個(gè)斜杠寫入。默認(rèn)為languages
主題中的文件夾。
例:
1個(gè)23456 | /* * Theme Name: My Theme * Author: Theme Author * Text Domain: my-theme * Domain Path: /languages */ |
將文本域添加到字符串
應(yīng)該將文本域作為自變量添加到所有本地化功能中,以使翻譯正常工作。
范例1:
1個(gè) | __( 'Post' ) |
應(yīng)該成為
1個(gè) | __( 'Post' , 'my-theme' ) |
范例2:
1個(gè) | _e( 'Post' ) |
應(yīng)該成為
1個(gè) | _e( 'Post' , 'my-theme' ) |
例子3:
1個(gè) | _n( 'One post' , '%s posts' , $count ) |
應(yīng)該成為
1個(gè) | _n( 'One post' , '%s posts' , $count , 'my-theme' ) |
警告:文本域應(yīng)作為字符串而不是變量傳遞給本地化功能。它允許使用解析工具來區(qū)分文本域。不做什么的例子:
1個(gè) | __( 'Translate me.' , $text_domain ); |
加載翻譯
WordPress中的翻譯已保存在其中,.po
并且.mo
需要加載文件。可以使用load_theme_textdomain()
或加載它們load_child_theme_textdomain()
。這{locale}.mo
將從主題的基本目錄或{text-domain}-{locale}.mo
中的WordPress主題語言文件夾中加載/wp-content/languages/themes/
。
注意:從4.6版開始,WordPress會(huì)自動(dòng)檢查語言目錄中wp-content
?是否有來自??translate.wordpress.org的翻譯。這意味著不再需要通過translate.wordpress.org翻譯的插件load_plugin_textdomain()
。
如果您不想向插件添加load_plugin_textdomain()
調(diào)用,則應(yīng)將Requires at least:
readme.txt中的字段設(shè)置為4.6。
要了解有關(guān)不同語言和國家/地區(qū)代碼的更多信息,請參閱語言列表。
小心
{locale}.mo
如果將翻譯添加到主題文件夾,則將您的MO文件命名為(例如de_DE.po和de_DE.mo)。{text-domain}-{locale}.mo
如果要將翻譯添加到WordPress主題語言文件夾中,則將MO文件命名為(例如my-theme-de_DE.po和my-theme-de_DE.mo)。
例:
1個(gè)234 | function my_theme_load_theme_textdomain() { load_theme_textdomain( 'my-theme' , get_template_directory() . '/languages' ); } add_action( 'after_setup_theme' , 'my_theme_load_theme_textdomain' ); |
理想情況下,此功能應(yīng)在主題的范圍內(nèi)運(yùn)行function.php
。
語言包
如果您對語言包以及對translation.wordpress.org的導(dǎo)入的工作方式感興趣,請閱讀有關(guān)Translations的Meta Handbook頁面。
來源于:
https://developer.wordpress.org/themes/functionality/internationalization/