Skip to content

Latest commit

 

History

History
141 lines (95 loc) · 3.64 KB

i18n.md

File metadata and controls

141 lines (95 loc) · 3.64 KB

国际化(i18n)

1. 概述

这个国际化(i18n)支持库提供了一个简单而强大的方式来为Go应用程序添加多语言支持。它支持动态加载翻译、切换语言、添加新的翻译,以及格式化带参数的翻译。

2. 主要特性

  • 支持多种语言的翻译
  • 动态加载和切换语言
  • 线程安全的操作
  • 支持从文件或字节数组加载翻译
  • 支持添加和更新翻译
  • 支持带参数的翻译格式化

3. 初始化

3.1 初始化全局i18n实例

使用 InitGlobal 函数初始化全局i18n实例:

err := i18n.InitGlobal("en", "path/to/translations")
if err != nil {
    log.Fatalf("初始化i18n失败: %v", err)
}

参数:

  • 第一个参数是初始语言代码
  • 第二个参数(可选)是翻译文件的自定义目录路径

4. 基本用法

4.1 翻译文本

使用 T 函数翻译文本:

translatedText := i18n.T("hello_world")

4.2 格式化翻译

使用 FormatTranslation 函数格式化带参数的翻译:

formattedText := i18n.FormatTranslation("welcome_message", "Alice")

4.3 切换语言

使用 SetLang 函数切换当前语言:

err := i18n.SetLang("fr")
if err != nil {
    log.Printf("切换语言失败: %v", err)
}

4.4 获取当前语言

使用 GetCurrentLang 函数获取当前语言:

currentLang := i18n.GetCurrentLang()

5. 高级用法

5.1 添加新的翻译

使用 AddTranslation 函数为当前语言添加或更新翻译:

err := i18n.AddTranslation("new_key", "New translation")
if err != nil {
    log.Printf("添加翻译失败: %v", err)
}

5.2 从字节数组加载翻译

使用 LoadTranslationsFromBytes 函数从字节数组加载翻译:

data := []byte(`{"hello": "Bonjour"}`)
err := i18n.LoadTranslationsFromBytes("fr", data)
if err != nil {
    log.Printf("从字节数组加载翻译失败: %v", err)
}

6. 文件结构

翻译文件应该是JSON格式,每种语言一个文件,文件名应为语言代码加.json后缀。例如:

  • en.json
  • fr.json
  • zh.json

文件内容示例(en.json):

{
  "hello_world": "Hello, World!",
  "welcome_message": "Welcome, %s!"
}

7. 线程安全

这个库的所有操作都是线程安全的,可以在并发环境中安全使用。

8. 错误处理

所有可能失败的操作都返回一个 error。建议在生产环境中妥善处理这些错误。

9. 最佳实践

  1. 在应用启动时调用 InitGlobal 初始化i18n库。
  2. 使用有意义的键来组织你的翻译,例如 user.greeting 而不是简单的 greeting
  3. 对于包含变量的翻译,使用 FormatTranslation 函数。
  4. 定期备份你的翻译文件,特别是在使用 AddTranslation 函数时。
  5. 在开发过程中,可以使用 AddTranslation 函数快速添加新的翻译,但在生产环境中,最好通过更新翻译文件来管理翻译。

10. 性能考虑

  • 翻译会被缓存在内存中,所以重复的翻译查询非常快。
  • 切换语言会触发新的语言文件加载,可能会有轻微的性能影响。
  • 添加新的翻译会触发文件写入操作,在高并发场景下要谨慎使用。

11. 局限性

  • 目前不支持复数形式的处理。
  • 不支持基于地区的变体(例如 en-US 和 en-GB 的区别)。

12. 结论

这个i18n支持库提供了一个简单而有效的方式来为Go应用程序添加国际化支持。通过合理使用这个库,可以轻松地创建多语言应用,提高应用的国际化水平。在使用过程中,如果遇到任何问题或有改进建议,请及时反馈给开发团队。