I18N国际化

GF框架支持I18N国际化,由gi18n模块实现。

为方便开发者使用,提高开发效率,该模块已完美地集成到了WebServer及视图引擎组件中。

使用方式

  1. import "github.com/gogf/gf/i18n/gi18n"

接口文档

https://godoc.org/github.com/gogf/gf/i18n/gi18n

  1. func SetDelimiters(left, right string)
  2. func SetLanguage(language string)
  3. func SetPath(path string) error
  4. func T(content string, language ...string) string
  5. func Translate(content string, language ...string) string
  6. type Manager
  7. func Instance(name ...string) *Manager
  8. func New(options ...Options) *Manager
  9. func (m *Manager) SetDelimiters(left, right string)
  10. func (m *Manager) SetLanguage(language string)
  11. func (m *Manager) SetPath(path string) error
  12. func (m *Manager) T(content string, language ...string) string
  13. func (m *Manager) Translate(content string, language ...string) string
  14. type Options
  15. func DefaultOptions() Options

使用配置

文件格式

gi18n国际化模块支持框架通用的五种配置文件格式:xml/ini/yaml/toml/json。同样的,和配置管理模块一样,框架推荐使用toml文件格式。

文件目录

默认情况下gi18n会自动读取当前项目根目录下的i18n目录,默认将该目录作为国际化转译文件存储目录。开发者也可以通过SetPath方法自定义i18n文件的存储目录路径。

i18n目录下可以直接给定国际化文件如:en.toml/ja.toml/zh-CN.toml;也可以给定国际化文件目录,如:en/editor.toml/en/user.tomlzh-CN/editor.toml/zh-CN/user.toml

例如,以下的i18n目录配置以及文件格式都是支持的:

  1. ├── i18n
  2. ├── en.toml
  3. ├── ja.toml
  4. ├── ru.toml
  5. ├── zh-CN.toml
  6. └── zh-TW.toml
  7. ├── i18n-dir
  8. ├── en
  9. ├── hello.toml
  10. └── world.toml
  11. ├── ja
  12. ├── hello.yaml
  13. └── world.yaml
  14. ├── ru
  15. ├── hello.ini
  16. └── world.ini
  17. ├── zh-CN
  18. ├── hello.json
  19. └── world.json
  20. └── zh-TW
  21. ├── hello.xml
  22. └── world.xml
  23. └── i18n-file
  24. ├── en.toml
  25. ├── ja.yaml
  26. ├── ru.ini
  27. ├── zh-CN.json
  28. └── zh-TW.xml

资源管理器

gi18n默认支持资源管理器,也就是说,默认情况下会从gres配置管理器中检索i18n目录,或者开发者设置的i18n目录路径。

T/Translate方法

其中T方法为Translate方法的简写,也是大多是时候我们推荐使用的方法名称。T方法可以给定关键字名称,也可以直接给定模板内容,将会被自动转译并返回转译后的字符串内容。

此外,T方法可以通过第二个语言参数指定需要转译的目标语言名称,该名称需要和配置文件/路径中的名称一致,往往是标准化的国际化语言缩写名称如:en/ja/ru/zh-CN/zh-TW等等。否则,将会自动使用Manager转译对象中设置的语言进行转译。

关键字转译

关键字的转译直接给T方法传递关键字即可,例如:T("hello")T("world")

模板内容转译

T方法支持模板内容转换,模板中的关键字默认使用{#}标签进行包含,模板解析时将会自动替换该标签中的关键字内容。使用示例:

  1. 转译文件
    • ja.toml
      1. hello = "こんにちは"
      2. world = "世界"
    • ru.toml
      1. hello = "Привет"
      2. world = "мир"
    • zh-CN.toml
      1. hello = "你好"
      2. world = "世界"
  2. 示例代码

    1. package main
    2. import (
    3. "fmt"
    4. "github.com/gogf/gf/i18n/gi18n"
    5. )
    6. func main() {
    7. t := gi18n.New()
    8. t.SetLanguage("en")
    9. fmt.Println(t.Translate(`hello`))
    10. fmt.Println(t.Translate(`GF says: {#hello}{#world}!`))
    11. t.SetLanguage("ja")
    12. fmt.Println(t.Translate(`hello`))
    13. fmt.Println(t.Translate(`GF says: {#hello}{#world}!`))
    14. t.SetLanguage("ru")
    15. fmt.Println(t.Translate(`hello`))
    16. fmt.Println(t.Translate(`GF says: {#hello}{#world}!`))
    17. fmt.Println(t.Translate(`hello`, "zh-CN"))
    18. fmt.Println(t.Translate(`GF says: {#hello}{#world}!`, "zh-CN"))
    19. }

    执行后,终端输出为:

    1. Hello
    2. GF says: HelloWorld!
    3. こんにちは
    4. GF says: こんにちは世界!
    5. Привет
    6. GF says: Приветмир!
    7. 你好
    8. GF says: 你好世界!

I18N与视图引擎

gi18n默认已经集成到了GF框架的视图引擎中,直接在模板文件/内容中使用gi18n的关键字标签即可。

此外,也可以通过设置模板变量I18nLanguage设置当前模板的解析语言,该变量可以控制不同的模板内容按照不同的国际化语言进行解析。

使用示例:

  1. package main
  2. import (
  3. "github.com/gogf/gf/frame/g"
  4. "github.com/gogf/gf/net/ghttp"
  5. )
  6. func main() {
  7. s := g.Server()
  8. s.BindHandler("/", func(r *ghttp.Request) {
  9. r.Response.WriteTplContent(`GF says: {#hello}{#world}!`, g.Map{
  10. "I18nLanguage": r.Get("lang", "zh-CN"),
  11. })
  12. })
  13. s.SetPort(8199)
  14. s.Run()
  15. }

执行后,访问以下页面,将会输出:

  1. http://127.0.0.1:8199
    1. GF says: 你好世界!
  2. http://127.0.0.1:8199/?lang=ja
    1. GF says: こんにちは世界!