尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

时间格式化与国际化:Carbon如何用一个SetLocale搞定35+语言输出?

时间格式化与国际化:Carbon如何用一个SetLocale搞定35+语言输出? 时间格式化与国际化Carbon如何用一个SetLocale搞定35语言输出【免费下载链接】carbonA simple, semantic and developer-friendly time package for golang项目地址: https://gitcode.com/gh_mirrors/carbon44/carbon如果你正在用 Go 写时间相关功能一定被时间格式化 国际化折磨过标准库time包的月份、星期全是英文想输出八月星期三得自己拼映射表。而 Go 时间库 Carbon 只需用一行SetLocale(zh-CN)就能让ToMonthString、ToWeekString、Season等输出直接变成对应语言——内置 33 个语言文件从中文、日语到波斯语、俄语全覆盖堪称时间输出国际化的万能开关。为什么标准库的时间格式化不够用Go 的time.Format只能套用布局模板layout比如Jan 2, 2006但月份和星期永远是英文January无法变成一月或ژانویه波斯语Wednesday无法变成星期三或Wednesday不同语言写法不同4 years ago 这种相对时间描述各语言语序完全不同中文是4 年前波斯语是4 سال پیشCarbon 的解决思路很直接把每种语言的月份、星期、季节、星座、相对时间词组做成 JSON 语言包随二进制文件嵌入embedSetLocale切换时只换一个资源文件格式化逻辑保持不变。SetLocale一行代码切换 30 语言核心 API 在 language.go 中用法简单到只有三行lang : carbon.NewLanguage() lang.SetLocale(zh-CN) // 切换为简体中文 carbon.Parse(2020-08-05).SetLanguage(lang).ToMonthString() // 八月切换语言后同一个时间点的所有文字输出都会变装实际运行效果如下来自 language_example_test.go调用方法英文en中文zh-CNToMonthStringAugust八月ToShortMonthStringAug8月ToWeekStringWednesday星期三ToShortWeekStringWed周三SeasonSummer夏季ConstellationLeo狮子座DiffForHumans4 years before4 年前一张表就能看出价值代码零改动输出语言随心切换底层做了什么embed 加载 全局缓存SetLocale的实现并不复杂但有两处对新手友好的巧妙设计//go:embed lang语言文件通过 lang/ 目录下的 JSON 文件内置到二进制中部署时不需要额外拷贝语言包sync.Map缓存 sync.Once每种语言只解析一次 JSON之后每次SetLocale都是内存拷贝性能几乎为零开销可参考 language_bench_test.go 的基准测试。每种语言的词条结构完全统一以 lang/zh-CN.json 为例{ months: 一月|二月|三月|...|十二月, weeks: 星期日|星期一|...|星期六, seasons: 春季|夏季|秋季|冬季, year: %d 年, ago: %s前, from_now: %s后 }月份、星期用|分隔成 12 / 7 项代码里按下标取词见 outputer.go。多语言复数问题也用同一个|技巧解决波斯语 lang/fa.json 中day: 1 روز|%d روز表示1 天和N 天用不同词形翻译工作完全前移到了数据层。 小贴士SetLocale()会返回ErrEmptyLocale错误语言不存在时返回ErrNotExistLocale错误信息里会带上缺失的 JSON 文件名方便排查。进阶全局默认语言与自定义资源如果你希望整个应用默认使用某语言可以直接设置全局 Locale见 default.go 与 setter.go之后所有新建的 Carbon 实例都会默认使用该语言无需逐个SetLanguage。如果需要非标准表达还可以用SetResources覆盖部分词条例如把月份替换成罗马数字lang : carbon.NewLanguage() lang.SetLocale(en).SetResources(map[string]string{ months: Ⅰ月|Ⅱ月|Ⅲ月|Ⅳ月|Ⅴ月|Ⅵ月|Ⅶ月|Ⅷ月|Ⅸ月|Ⅹ月|Ⅺ月|Ⅻ月, short_months: Ⅰ|Ⅱ|Ⅲ|Ⅳ|Ⅴ|Ⅵ|Ⅶ|Ⅷ|Ⅸ|Ⅹ|Ⅺ|Ⅻ, })未覆盖的词条如星座、星期仍沿用原语言只改需要改的部分非常适合做品牌化时间文案。三步上手清单 ✅引入 Carboncarbon.Parse(2020-08-05)创建时间对象carbon.NewLanguage().SetLocale(ja)选择目标语言支持 30 语言代码如zh-CN、ja、fa、ru调用ToMonthString/ToWeekString/Season/Constellation/DiffForHumans获取本地化输出。一句话总结Carbon 把时间国际化做成了数据驱动——语言是 JSON切换是SetLocale格式化逻辑永远不变。对需要多语言后台、出海产品或国际化 CLI 工具的 Go 开发者来说这就是开箱即用的时间格式化方案。【免费下载链接】carbonA simple, semantic and developer-friendly time package for golang项目地址: https://gitcode.com/gh_mirrors/carbon44/carbon创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表