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