[golang]Go 官方提供的多語系(i18n)解決方案之一(golang.org/x/text/language)
golang.org/x/text/language 是 Go 官方提供的多語系(i18n)解決方案之一,主要用於 語言偵測、標記匹配和格式化。但它本身不提供翻譯功能,要搭配 golang.org/x/text/message 來處理翻譯。
安裝
1. 使用 message 來處理翻譯
這種方式適用於小型應用程式,直接在程式內定義翻譯字串。
💡 適用場景:
- 小型應用
- 內建少量翻譯字串
- 不需要從 JSON/TOML 文件載入翻譯
2. 使用 Matcher 來自動選擇語言
如果你的應用支援多語系,可以讓程式根據 Accept-Language 標頭來選擇最佳匹配語言。
輸出:
適用場景:
- 根據
Accept-Language選擇最佳語言 - 需要支援多種語言
3. 搭配 Plural 處理複數規則
有時候我們需要根據數量來改變翻譯內容,例如:
1 apple✅5 apples✅
這可以透過 message.Set 和 message.NewPrinter 來實現。
適用場景:
- 根據數量變化翻譯內容(如 複數規則)
- 需要更細緻的語系支援
4. 搭配 JSON 檔案實現完整翻譯系統
如果要用 JSON 檔案管理翻譯,可以手動載入翻譯內容。
建立 locales.json
使用 Go 讀取 JSON
適用場景:
- 需要從 JSON 檔案載入翻譯
- 適用於 動態翻譯更新
- 可擴充性高,支援多語系
總結
| 方案 | 適用場景 | 特色 |
|---|---|---|
message.SetString | 小型應用,內建翻譯 | 簡單易用 |
language.Matcher | 多語系切換 | 可根據 Accept-Language 自動選擇 |
message.Plural | 複數規則處理 | 適用於多變化詞彙 |
| JSON 翻譯檔案 | 大型應用,動態更新 | 可擴充性高,管理大量翻譯 |
如果只是處理簡單的翻譯,建議使用 message.SetString。
留言
張貼留言