gettext-go icon indicating copy to clipboard operation
gettext-go copied to clipboard

v1.0计划

Open chai2010 opened this issue 5 years ago • 3 comments

  • 目前的API还是从 google code 网址时代继承来的, 需要重新设计简化API和包路径
  • gettext是上个世纪的产物, 全局只有一个选择, 改进支持多局部多语言共存
  • 目前的context有缺陷, 内部闭包的路径解析不够稳定, 需要重新设计
  • 命令行工具, 可以自动从代码提取要翻译的文字, 同时对有问题的用法提供告警(比如传入的是变量字符串)
  • v0.1到v1.0的API变化, 尽量保证gofmt命令行替换可以完成升级
  • domain绑定到对象, 不同的pkg可以选择不同的domain, context是domain内部的区别, caller不再自动填充
  • 自动生成多国文本(调用翻译服务的API/插件模式)
  • 增加map类型的翻译文件, 可以作为po文件替代
  • 支持单个po/mo文件,和map类型,对于一个具体的翻译 FileSystem.LoadMessagesMap(domain, lang string) (map[string][]string, error)/map[domain][lang][msgid][]string/gettext/mapfs.NewXXX()/jsonString/map[string]interface{}/LoadJsonFile(domain, lang) ([]byte, error)
  • json: LoadMessagesFile("hello", "zh_CN", "json"), Json(s) FileSystem
  • 支持walk/playground等格式的json翻译
  • 其它

https://pkg.go.dev/github.com/chai2010/gettext-go

chai2010 avatar Apr 06 '20 11:04 chai2010

在一个并发的api环境中,setlocale方法,切换了语言,如果保证当前请求的context上下文不会被其他的干扰呢? setlocale以后,再gettext调用,这时候很可能别的协程就把语言切换了,最后得到的不是想要的。

singpenguin avatar Apr 17 '20 16:04 singpenguin

多语言支持:

func Example_multiLang() {
	zh := gettext.New("hello", "./examples/locale").SetLanguage("zh_CN")
	tw := gettext.New("hello", "./examples/locale").SetLanguage("zh_TW")

	fmt.Println(zh.PGettext(
		"code.google.com/p/gettext-go/examples/hi.SayHi",
		"pkg hi: Hello, world!",
	))

	fmt.Println(tw.PGettext(
		"code.google.com/p/gettext-go/examples/hi.SayHi",
		"pkg hi: Hello, world!",
	))

	// Output:
	// 来自"Hi"包的问候: 你好, 世界!(ctx:code.google.com/p/gettext-go/examples/hi.SayHi)
	// 來自"Hi"包的問候: 你好, 世界!(ctx:code.google.com/p/gettext-go/examples/hi.SayHi)
}
  • https://github.com/chai2010/gettext-go/blob/master/example_test.go#L54
  • https://pkg.go.dev/github.com/chai2010/gettext-go

chai2010 avatar Apr 18 '20 01:04 chai2010

好的,谢谢,清楚了。

singpenguin avatar Apr 18 '20 03:04 singpenguin