App Engine的I18n Go策略

我想不一定特定于GAE,但我对人们使用什么来翻译或本地化他们的Web应用程序感到好奇。


恐怕我自己的方法是天真无望的,实际上只是通过根据用户个人资料中记录的语言环境值从数据存储区为每个程序包加载一个实体来解决这个问题。至少这允许提供一些字符串的翻译:


package foo


...


type Messages struct {

    Locale string

    ErrorDatastore string

    LoginSuccessful string

    ...

}

使用与区域设置相对应的字符串ID进行存储,然后加载到Gorilla上下文或类似环境中:


const Messages ContextKey = iota


...


k := datastore.NewKey(c, "Messages", "en_US", 0, nil)

m := new(Messages)

if err := datastore.Get(c, k, m); err != nil {

    ...

} else {

    context.Set(r, Messages, m)

}

这显然受到了难以置信的限制,但是至少可以通过context.Get(r,foo.Messages)从调用代码中使用字符串。谁能指出我更有用的实现方式,或提出更好的方法?


素胚勾勒不出你
浏览 252回答 3
3回答

慕仙森

go-i18n是具有一些不错功能的替代软件包:实施CLDR复数规则。对带变量的字符串使用文本/模板。翻译文件是简单的JSON。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go