i18ninternationalizationk8s
开门见山,这篇文章主要是灌水,仓库里有详细的使用说明和介绍。仓库地址:https://github.com/jjonline/i18n-stringer
一、go实用哲学
下面罗列一些go语言的伪哲学思想,山非山水非水,最终山还是山水还是水,颇有一股一本正经胡说八道的意味。
一切皆接口
interface
一切皆接口duck typing
anyanyinterface
只要error不要exception
exceptionpanictry {} catch {}recoverpanic恐慌
errorinterfaceError() string
枚举常量用数值类型
这里数值类型是多个类型的集合称呼,罗列出来就是int、uint、int8、uint8等等这些。
const
作为业务开发中常见的枚举值一般是推荐使用数值型,当然简单的非是即否的用布尔型也没问题,超过2个待选的枚举集合你要用字符串是可以的。
二、i18n-stringer
这个工具是因工作中的项目需要,单独定义的翻译文件可以直接丢给PM去填,是一个甩锅卷KPI的开源项目----这段是吹水。该工具参考了go官方的tool工具stringer:https://github.com/golang/tools/tree/master/cmd/stringer
buitin.error
i18n-stringerfmt.Stringerbuitin.errorError() stringString() stringgo generate//go:generatego generate
i18n-stringer
自动生成的代码方法概要
// 自动生成的代码导出方法列表 String() string Error() string Wrap(err error, locale string, args ..._T_) *I18nError_T_Wrap WrapWithContext(ctx context.Context, err error, args ..._T_) *I18n_T_ErrorWrap IsLocaleSupport(locale string) bool Lang(ctx context.Context, args ..._T_) string Trans(locale string, args ..._T_) string // 自动生成的代码里还会提供一个错误包装结构体 // 结构体名称形如:I18nError_T_Wrap // 也会提供一些导出方法列表 Translate() string String() string Error() string Format() string Value() _T_ Unwrap() error // 以上 _T_ 指代你的数值类型的自定义类型名称
README.md
fmt.Stringerbuitin.error
TOML语言文件取语言类型标识规则
因为定义多语言的翻译文本通过toml格式文件单独配置,识别需要支持的多语言通过目录名或文件名实现。具体而言语言包目录下的toml文件的文件名被作为语言标识符,语言包目录下的文件夹名称也会被当做语言标识符,这种惯例约定可以减少很多不必要的配置麻烦,按惯例定义toml后缀的翻译文件即可,举个栗子:
. ├── i18n │ └── en.toml │ ├── zh_cn.toml │ └── zh_hk │ │ ├── user.toml │ │ └── merchant.toml └── pill.go
i18nen.tomlzh_cn.tomlenzh_cnzh_hkzh_hk
zh_hkzh_hkenen
关于编译后二进制文件是否要将TOML文件包含?
先给答案:不需要!
因为定义的TOML文件仅在自动生成代码时使用,属于编译前依赖,代码生成时将这些TOML文件中定义的键值对硬编码至了代码中,业务代码调用时不需要再去读取TOML文件,所以你的业务代码编译成的二进制可执行程序不需要包含这些TOML文件。
----
buitinbuitin.error
----