I18N
国际化
GF
框架支持I18N
国际化,由gi18n
模块实现。
...
https://godoc.org/github.com/gogf/gf/i18n/gi18n
使用配置
文件格式
gi18n
国际化模块支持框架通用的五种配置文件格式:xml/ini/yaml/toml/json
。同样的,和配置管理模块一样,框架推荐使用toml
文件格式。
文件目录
默认情况下gi18n
会自动读取当前项目根目录下的i18n
目录,默认将该目录作为国际化转译文件存储目录。开发者也可以通过SetPath
方法自定义i18n
文件的存储目录路径。
...
├── i18n
│ ├── en.toml
│ ├── ja.toml
│ ├── ru.toml
│ ├── zh-CN.toml
│ └── zh-TW.toml
├── i18n-dir
│ ├── en
│ │ ├── hello.toml
│ │ └── world.toml
│ ├── ja
│ │ ├── hello.yaml
│ │ └── world.yaml
│ ├── ru
│ │ ├── hello.ini
│ │ └── world.ini
│ ├── zh-CN
│ │ ├── hello.json
│ │ └── world.json
│ └── zh-TW
│ ├── hello.xml
│ └── world.xml
└── i18n-file
├── en.toml
├── ja.yaml
├── ru.ini
├── zh-CN.json
└── zh-TW.xml
资源管理器
gi18n
默认支持资源管理器,也就是说,默认情况下会从gres
配置管理器中检索i18n
目录,或者开发者设置的i18n
目录路径。
对象创建
大多数场景下,我们推荐使用g.I18n
单例对象,并可自定义配置不同的单例对象,但是需要注意的是,单例对象的配置修改是全局有效的。例如:
...
i18n := gi18n.New()
i18n.T("{#hello} {#world}")
T
方法
T
方法为Translate
方法的别名,也是大多数时候我们推荐使用的方法名称。T
方法可以给定关键字名称,也可以直接给定模板内容,将会被自动转译并返回转译后的字符串内容。
...
// T translates <content> with configured language and returns the translated content.
// The parameter <language> specifies custom translation language ignoring configured language.
func T(content string, language ...string) string
关键字转译
关键字的转译直接给T
方法传递关键字即可,例如:T("hello")
、T("world")
。
模板内容转译
T
方法支持模板内容转换,模板中的关键字默认使用{#
和}
标签进行包含,模板解析时将会自动替换该标签中的关键字内容。使用示例: 1. 转译文件 - ja.toml
toml hello = "こんにちは" world = "世界"
- ru.toml
toml hello = "Привет" world = "мир"
- zh-CN.toml
toml hello = "你好" world = "世界"
1. 示例代码 “`go package main
import (
"fmt"
"github.com/gogf/gf/i18n/gi18n"
)
func main() {
i18n := gi18n.New()
i18n.SetLanguage("en")
fmt.Println(i18n.Translate(`hello`))
fmt.Println(i18n.Translate(`GF says: {#hello}{#world}!`))
i18n.SetLanguage("ja")
fmt.Println(i18n.Translate(`hello`))
fmt.Println(i18n.Translate(`GF says: {#hello}{#world}!`))
i18n.SetLanguage("ru")
fmt.Println(i18n.Translate(`hello`))
fmt.Println(i18n.Translate(`GF says: {#hello}{#world}!`))
fmt.Println(i18n.Translate(`hello`, "zh-CN"))
fmt.Println(i18n.Translate(`GF says: {#hello}{#world}!`, "zh-CN"))
}
```
执行后,终端输出为:
```html
Hello
GF says: HelloWorld!
こんにちは
GF says: こんにちは世界!
Привет
GF says: Приветмир!
你好
GF says: 你好世界!
```
Tf
方法
Tf
为TranslateFormat
的别名,该方法支持格式化转译内容,字符串格式化语法参考标准库fmt
包的Sprintf
方法。
...
为方便演示,该示例中对支付金额的处理比较简单,在实际项目中往往需要在业务代码中对支付金额的单位按照区域做自动转换,再渲染
i18n
显示内容。
Tfl
方法
Tfl
为TranslateFormatLang
的别名,该方法支持格式化转译内容,并可指定转译的语言,字符串格式化语法参考标准库fmt
包的Sprintf
方法。
...
为方便演示,该示例中对支付金额的处理比较简单,在实际项目中往往需要在业务代码中对支付金额的单位按照区域做自动转换,再渲染
i18n
显示内容。
I18N
与视图引擎
gi18n
默认已经集成到了GF
框架的视图引擎中,直接在模板文件/内容中使用gi18n
的关键字标签即可。
...