## 什么是本地化?
本地化描述了翻譯國際化插件的后續過程。 本地化縮寫為l10n(因為l和n之間有10個字母)
## 本地化文件
POT(便攜式對象模板)文件#POT(便攜式對象模板)文件
該文件包含插件中的原始字符串(英文)。 這是一個POT文件的例子:
```
#: plugin-name.php:123
msgid "Page Title"
msgstr ""
```
## PO(便攜式對象)文件
每個翻譯器都會使用POT文件,并以自己的語言翻譯msgstr部分。 結果是與POT具有相同格式的PO文件,但具有翻譯和一些特定標題。 每個語言有一個PO文件。
## MO(機器對象)文件
從每個翻譯的PO文件建立一個MO文件。 這些是gettext函數實際使用的機器可讀的二進制文件(它們不關心.POT或.PO文件),是PO文件的“編譯”版本。 轉換使用msgfmt工具完成。 通常,應用程序可以相應地使用多個大的邏輯可翻譯模塊和不同的MO文件。 文本域是每個模塊的句柄,它具有不同的MO文件。
## 生成POT文件
POT文件是您需要交給翻譯人員的文件,以便他們可以做他們的工作。 POT和PO文件可以輕松地重新命名,以便更改文件類型,而不會有任何問題。 提供POT文件和插件是一個好主意,因此翻譯人員不必專門詢問您。 有幾種方式為您的插件生成POT文件:
## 插件目錄管理工具
如果您的插件托管在WordPress.org插件目錄中,請轉到您的“管理”頁面,然后單擊“生成POT文件”部分的“繼續”。
- 插件管理區域
然后點擊獲取POT下載POT文件。
- 生成POT
## WordPress i18n工具
如果您的插件不在目錄中,您可以從SVN中檢出WordPress Trunk目錄(請參閱使用Subversion了解SVN)。 您需要檢出整個中繼線,因為wordpress-i18n工具使用WordPress核心的代碼生成POT。 您需要在您的服務器/計算機上安裝gettext(GNU國際化實用程序)軟件包和PHP才能運行以下命令。
打開命令行并將目錄更改為語言文件夾。
```
cd theme-name/languages
```
您可以在命令行中運行makepot.php腳本,如下所示:
```
php path/to/makepot.php wp-plugin path/to/your-plugin-directory
```
完成之后,您應該在當前目錄中看到POT文件。
## Poedit
您也可以在本地使用Poedit進行翻譯。 這是所有主要操作系統的開源工具。 免費的Poedit默認版本支持使用Gettext函數手動掃描所有源代碼。 它的專業版也具有一鍵掃描WordPress插件。 生成po文件后,您可以將文件重命名為POT。 如果生成了一個mo,那么您可以刪除該文件,因為它不需要。 如果您沒有專業版本,您可以輕松獲取空白POT,并將其用作POT文件的基礎。 將空白POT放入語言文件夾后,您可以單擊Poedit中的“更新”,使用字符串更新POT文件。
國際化 - 本地化03
## Grunt 的任務
甚至有一些拙劣的任務可以用來創建POT。 grunt-wp-i18n&grunt-pot
要設置它,您需要安裝node.js. 這是一個簡單的安裝。 然后,您需要在要使用grunt的目錄中安裝grunt。這通過命令行完成。 可以放置在插件根目錄中的Grunt.js和package.json的例子。 您可以在命令行中使用簡單的命令來執行grunt任務。
## 翻譯PO文件
翻譯PO文件有多種方法。
您可以使用文本編輯器輸入翻譯。 在文本編輯器中,它將如下所示。
```
#: plugin-name.php:123
msgid "Page Title"
msgstr ""
```
您輸入引號之間的翻譯。 對于德語翻譯,它看起來像這樣。
```
#: plugin-name.php:123
msgid "Page Title"
msgstr "Seitentitel"
```
您也可以在翻譯時使用Poedit。 這是所有主要操作系統的開源工具。 免費的Poedit默認版本支持使用Gettext函數手動掃描所有源代碼。 它的專業版也具有一鍵掃描WordPress插件和主題。
第三種選擇是使用在線翻譯服務。 一般的想法是您上傳POT文件,然后您可以授權用戶或翻譯人員翻譯您的插件。 這允許您跟蹤更改,始終具有最新的翻譯,并減少翻譯兩次。
Fran?ois-XavierBénard正在運行WP-Translations,這是一個“翻譯與開發人員會面”的社區。它運行在Transifex上,您可以提交作為開發人員翻譯的項目,或翻譯用于您的語言的現有插件和主題。 這是偉大的,因為那里有現有的翻譯。
以下是一些可用于在線翻譯PO文件的工具:
- Transifex
- WebTranslateIt
- Poeditor
- Google Translator Toolkit
- GlotPress
- You can even use WordPress plugins to do the translation.
## Codestyling本地化
翻譯后的文件將被保存為my-plugin- {locale} .mo。 語言環境是您在文件wp-config.php中的常量WPLANG中定義的語言代碼和/或國家/地區代碼。 例如,德語的語言環境是de_DE。 從上面的代碼示例,文本域是'my-plugin',因此德語MO和PO文件應該命名為my-plugin-de_DE.mo和my-plugin-de_DE.po。 有關語言和國家/地區代碼的更多信息,請參閱使用語言安裝WordPress。
#生成MO文件
## 命令行
程序msgfmt用于創建MO文件。 msgfmt是Gettext包的一部分。 否則可以使用命令行。 典型的msgfmt命令如下所示:
Unix操作系統
```
msgfmt -o filename.mo filename.po
```
Windows操作系統
```
msgfmt -o filename.mo filename.po
```
如果您有很多PO文件一次轉換,您可以作為批處理運行它。 例如,使用bash命令:
Unix操作系統
```
# Find PO files, process each with msgfmt and rename the result to MO
for file in `find . -name "*.po"` ; do msgfmt -o ${file/.po/.mo} $file ; done
```
Windows操作系統
對于Windows,您需要先安裝Cygwin。
創建一個potomo.sh
```
#! /bin/sh
# Find PO files, process each with msgfmt and rename the result to MO
for file in `/usr/bin/find . -name '*.po'` ; do /usr/bin/msgfmt -o ${file/.po/.mo} $file ; done
```
您可以在命令行中運行此命令。
```
cd C:/path/to/language/folder/my-plugin/languages & C:/cygwin/bin/bash -c /cygdrive/c/path/to/script/directory/potomo.sh
```
## Poedit
msgfmt也集成在Poedit中,允許您使用它來生成MO文件。 首選項中有一個設置可以啟用或禁用它。
國際化 - 本地化04
## Grunt task
有grunt-po2mo將轉換所有的文件。
#好翻譯提示
## 不要翻譯字面,有機地翻譯
雙語或多語言你無疑知道你所說的語言有不同的結構,節奏,色調和變化。翻譯的消息不需要像英語一樣的結構:采取所提出的想法,并提出一種以自然的方式表達目標語言的消息。創建相同消息和等效消息之間的區別是:不要復制,替換。即使在消息中有更多的結構性項目,如果您覺得對目標受眾更合乎邏輯或更適合您,您就有創造性的許可來適應和改變。
嘗試保持相同水平的手續(或非正式)
每個消息具有不同的正式或非正式級別。您的目標語言中每個消息使用的正式或非正式級別都是您自己(或與您的團隊)進行比較,但是WordPress消息(特別是信息性消息)往往會有禮貌的非正式英語口音嘗試在您的文化背景下完成目標語言中的等效項目。
##不要使用俚語或受眾特定的術語
在博客中可以預期一些術語,但不要使用只有“在”人群中獲得的口語化。如果未經開發的博主以您的語言安裝WordPress,他們會知道這個術語是什么意思嗎?像pingback,trackback和feed這樣的字是這個規則的例外;它們是通常很難翻譯的術語,許多翻譯選擇以英文留下。
以其語言閱讀其他軟件的本地化
如果您遇到困難或需要方向,請嘗試閱讀其他流行的軟件工具的翻譯,以了解常用的術語,如何解決方法等等。當然,WordPress有自己的語氣和感覺,所以保持在閱讀其他本地化時,請記住,但是請隨意挖掘UI術語等來保持與您的語言的其他軟件的一致性。
##使用本地化
將本地化文件放在語言文件夾中,無論是插件語言文件夾還是通常在wp-content下的插件語言文件夾中的WordPress 3.7。完整的路徑將是wp-content / languages / plugins / my-plugin-fr_FR.mo。
從WordPress 4.0開始,您可以在“常規設置”中更改語言。如果您沒有看到任何選項或要切換到的語言,請執行以下步驟:
將wp-config.php內的WPLANG定義為您選擇的語言。例如,如果你想使用法語,你會有:
```
define ('WPLANG', 'fr_FR');
```
轉到wp-admin / options-general.php或“設置” - >“常規”
在“網站語言”下拉列表中選擇您的語言
轉到wp-admin / update-core.php
點擊“更新翻譯”,如果可用
核心翻譯文件(如有)可以下載
##資源
- 為您的主題或插件創建.pot文件
- 如何國際化WordPress插件
- 翻譯你的主題
- 空白WordPress POT
- 改進了i18n WordPress工具
- 如何快速更新翻譯
- GitHub / Transifex之間的工作流程
- Gist:完成本地化Grunt任務
- WordPress.tv標簽:i18n,國際化和翻譯
- 簡介
- 主題開發
- WordPress許可證
- 什么是主題
- 開發環境
- 主題開發示例
- 主題基礎
- 模板文件
- 主樣式表(style.css)
- 文章類型
- 規劃主題文件
- 模板層級
- 模板標簽
- 循環
- 主題函數
- 連接主題文件和目錄
- 使用CSS和JavaScript
- 條件標簽
- 類別,標簽和自定義分類
- 模板文件
- 內容模板文件
- 頁面模板文件
- 附件模板文件
- 自定義內容類型
- 部分和其他模板文件
- 評論模板
- 分類模板
- 404頁面
- 主題功能
- 核心支持的功能
- 管理菜單
- 自定義Headers
- 自定義Logo
- 文章格式
- 置頂文章
- Sidebars
- Widgets
- 導航菜單
- 分頁
- 媒體
- Audio
- Images
- Galleries
- Video
- 精選圖片和縮略圖
- 國際化
- 本地化
- 輔助功能
- 主題選項 – 自定義API
- 定制對象
- 改進用戶體驗的工具
- 定制JavaScript API
- JavaScript / Underscore.js渲染的自定義控件
- 高級用法
- 主題安全
- 數據消毒/逃避
- 數據驗證
- 使用隨機數
- 常見漏洞
- 高級主題
- 子主題
- UI最佳實踐
- JavaScript最佳做法
- 主題單元測試
- 驗證你的主題
- Plugin API Hooks
- 發布你的主題
- 所需的主題文件
- 測試
- 主題評論指南
- 寫文檔
- 提交你的主題到WordPress.org
- 參考文獻
- 模板標簽列表
- 條件標簽列表
- 編碼標準
- HTML編碼標準
- CSS編碼標準
- JavaScript編碼標準
- PHP編碼標準
- 插件開發
- 插件開發簡介
- 什么是插件
- 插件基礎
- 頭部要求
- 包括軟件許可證
- 啟用 / 停用 Hooks
- 卸載方法
- 最佳做法
- 插件安全
- 檢查用戶功能
- 數據驗證
- 保護輸入
- 保護輸出
- 隨機數
- Hooks
- Actions
- Filters
- 自定義Hooks
- 高級主題
- 管理菜單
- 頂級菜單
- 子菜單
- 短代碼
- 基本短碼
- 封閉短碼
- 帶參數的短代碼
- TinyMCE增強型短碼
- 設置
- 設置API
- 使用設置API
- 選項API
- 自定義設置頁面
- 元數據
- 管理帖子元數據
- 自定義元數據
- 渲染元數據
- 自定義文章類型
- 注冊自定義文章類型
- 使用自定義文章類型
- 分類
- 使用自定義分類
- 在WP 4.2+中使用“split術語”
- 用戶
- 創建和管理用戶
- 使用用戶元數據
- 角色和功能
- HTTP API
- JavaScript
- jQuery
- Ajax
- 服務器端PHP和入隊
- Heartbeat API
- 概要
- 計劃任務
- 了解WP-Cron計劃
- 安排WP-Cron 事件
- 將WP-Cron掛接到系統任務計劃程序中
- WP-Cron簡單測試
- 國際化
- 本地化
- 如何國際化您的插件
- 國際化安全
- WordPress.org
- 詳細插件指南
- 規劃您的插件
- 如何使用Subversion
- 插件開發者常見問題
- 開發工具
- Debug Bar 和附加組件
- 輔助插件
- REST API手冊
- 資源
- 文章
- 文章修訂
- 文章類型
- 文章狀態
- 類別
- 標簽
- 頁面
- 評論
- 分類
- 媒體
- 用戶
- 設置
- 使用REST API
- 全局參數
- 分頁
- 鏈接和嵌入
- 發現
- 認證
- 經常問的問題
- 骨干JavaScript客戶端
- 客戶端庫
- 擴展REST API
- 添加自定義端點
- 自定義內容類型
- 修改回應
- 模式
- 詞匯表
- 路由和端點
- 控制器類