I18N国际化

    使用方式

    接口文档

    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文件格式。

    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. ├── zh-CN.toml
    5. ├── i18n-dir
    6. ├── en
    7. ├── hello.toml
    8. └── world.toml
    9. ├── ja
    10. ├── hello.yaml
    11. └── world.yaml
    12. ├── ru
    13. ├── hello.ini
    14. └── world.ini
    15. ├── zh-CN
    16. ├── hello.json
    17. └── world.json
    18. └── zh-TW
    19. ├── hello.xml
    20. └── world.xml
    21. └── i18n-file
    22. ├── en.toml
    23. ├── ja.yaml
    24. ├── ru.ini
    25. ├── zh-CN.json
    26. └── zh-TW.xml

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

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

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

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

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

      执行后,终端输出为:

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

    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/?lang=ja
      1. GF says: こんにちは世界!