-
Notifications
You must be signed in to change notification settings - Fork 5
/
example_test.go
186 lines (167 loc) · 5.17 KB
/
example_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
package t_test
import (
"embed"
"fmt"
"sync"
"github.com/youthlin/t"
)
var mu sync.Mutex
func markSeq() func() {
mu.Lock() // 顺序执行
t.SetGlobal(t.NewTranslations())
return func() { mu.Unlock() }
}
// Example_init_path Load 绑定 path 到默认文本域
func Example_init_path() {
defer markSeq()()
t.Load("testdata")
// empty means system default locale
// 设置为使用系统语言这一步骤可以省略,因为初始化时就是使用系统语言
t.SetLocale("")
// 为了能在其他环境测试通过,所以指定 zh_CN
t.SetLocale("zh_CN")
fmt.Println(t.T("Hello, World"))
// Output:
// 你好,世界
}
// Example_init_file Load 绑定 path 到默认文本域, path 可以是单个文件
func Example_init_file() {
defer markSeq()()
t.Load("testdata/zh_CN.po")
// will normalize to ll_CC form => zh_CN
// 会格式化为 ll_CC 的形式
t.SetLocale("zh_hans")
fmt.Println(t.T("Hello, World"))
// Output:
// 你好,世界
}
//go:embed testdata
var pathFS embed.FS
//go:embed testdata/zh_CN.po
var fileFS embed.FS
// Example_initFS LoadFS 绑定文件系统到默认文本域
func Example_initFS() {
defer markSeq()()
t.LoadFS(pathFS)
t.SetLocale("zh")
fmt.Println(t.T("Hello, World"))
// Output:
// 你好,世界
}
// Example_init_fileFS embed.FS 可以是单个文件或文件夹
func Example_init_fileFS() {
defer markSeq()()
t.LoadFS(fileFS)
t.SetLocale("zh_hans")
fmt.Println("Current locale =", t.Locale()) // zh_CN
fmt.Println(t.T("Hello, World"))
// 设置不支持的语言,会原样返回
t.SetLocale("zh_hant")
fmt.Println("Current locale =", t.Locale()) // zh_TW
fmt.Println(t.T("Hello, World"))
// Output:
// Current locale = zh_CN
// 你好,世界
// Current locale = zh_TW
// Hello, World
}
// Example_locale 语言设置示例
func Example_locale() {
defer markSeq()()
t.LoadFS(pathFS)
t.SetLocale("zh")
fmt.Println("UsedLocale =", t.UsedLocale()) // zh_CN
t.SetLocale("zh_TW")
fmt.Println("UsedLocale =", t.UsedLocale()) // en_US
fmt.Println("SourceCodeLocale =", t.SourceCodeLocale()) // en_US
ts := t.NewTranslations()
ts.SetSourceCodeLocale("zh_CN")
ts.SetLocale("en_US")
fmt.Println("empty ts SourceCodeLocale =", ts.SourceCodeLocale()) // zh_CN
fmt.Println("empty ts Locale =", ts.Locale()) // en_US
fmt.Println("empty ts UsedLocale =", ts.UsedLocale()) // zh_CN
fmt.Println(ts.T("你好,世界"))
// Output:
// UsedLocale = zh_CN
// UsedLocale = en_US
// SourceCodeLocale = en_US
// empty ts SourceCodeLocale = zh_CN
// empty ts Locale = en_US
// empty ts UsedLocale = zh_CN
// 你好,世界
}
// Example_bindDomain 绑定到指定文本域
func Example_bindDomain() {
defer markSeq()()
t.SetLocale("zh")
t.Bind("main", "testdata/zh_CN.po")
fmt.Println("HasDomain(main) =", t.HasDomain("main"))
fmt.Println("HasDomain(no) =", t.HasDomain("no"))
fmt.Println("Domains =", t.Domains())
fmt.Println(t.T("Hello, World"))
t.SetDomain("main")
fmt.Println(t.T("Hello, World"))
// Output:
// HasDomain(main) = true
// HasDomain(no) = false
// Domains = [main]
// Hello, World
// 你好,世界
}
func Example_gettext() {
defer markSeq()()
t.Load("testdata")
t.SetLocale("zh_CN")
fmt.Println(t.T("Hello, World")) // 你好,世界
fmt.Println(t.T("Hello, %s", "Tom")) // 你好,世界
fmt.Println(t.N("One apple", "%d apples", 1)) // %d 个苹果
fmt.Println(t.N("One apple", "%d apples", 1, 1)) // 1 个苹果
fmt.Println(t.N("One apple", "%d apples", 2)) // %d 个苹果
fmt.Println(t.N("One apple", "%d apples", 2, 2)) // 2 个苹果
fmt.Println(t.N64("One apple", "%d apples", 200, 200)) // 200 个苹果
fmt.Println(t.X("File|", "Open")) // 打开文件
fmt.Println(t.X("Project|", "Open")) // 打开工程
fmt.Println(t.XN("File|", "Open One", "Open %d", 1, 1)) // 打开 1 个文件
fmt.Println(t.XN("Project|", "Open One", "Open %d", 1)) // 打开 %d 个工程
fmt.Println(t.XN("Project|", "Open One", "Open %d", 1, 1)) // 打开 1 个工程
fmt.Println(t.XN64("Project|", "Open One", "Open %d", 100, 100)) // 打开 100 个工程
// Output:
// 你好,世界
// 你好,Tom
// %d 个苹果
// 1 个苹果
// %d 个苹果
// 2 个苹果
// 200 个苹果
// 打开文件
// 打开工程
// 打开 1 个文件
// 打开 %d 个工程
// 打开 1 个工程
// 打开 100 个工程
}
func Example_with() {
defer markSeq()()
t.Bind("main", "testdata")
l := t.L("zh_CN")
fmt.Println(l.T("Hello, World")) // Hello, World
d := t.D("main").L("zh_CN")
fmt.Println(d.T("Hello, World")) // 你好,世界
// Output:
// Hello, World
// 你好,世界
}
func Example_locales() {
defer markSeq()()
fmt.Println(t.Locales()) // [en_US] // SourceCodeLocale
t.Load("testdata")
fmt.Println(t.Locales()) // [en_US zh_CN]
t.Bind("main", "testdata")
fmt.Println(t.D("main").Locales()) // [en_US zh_CN]
fmt.Println(t.D("no-such-domain").Locales()) // [en_US]
// Output:
// [en_US]
// [en_US zh_CN]
// [en_US zh_CN]
// [en_US]
}