Golang日期库go-carbon发布v1.3.2版本,新增i18n支持方法

Golang日期库go-carbon发布v1.3.2版本,新增i18n支持方法 go-carbon 是一个简单、语义化且对开发者友好的 Golang 日期时间包。

github: github.com/golang-module/carbon

设置区域

// 方式一(推荐)
c := carbon.Now().AddHours(1).SetLocale("zh-CN")
if c.Error != nil {
    // 错误处理...
    fmt.Println(c.Error)
}
c.DiffForHumans() // 1 小时后

// 方式二
lang := NewLanguage()
if err := lang.SetLocale("zh-CN");err != nil {
    // 错误处理...
    fmt.Println(err)
}
carbon.Now().AddHours(1).SetLanguage(lang).DiffForHumans() // 1 小时后

设置目录

lang := NewLanguage()
if err := lang.SetDir("lang");err != nil {
    // 错误处理...
    fmt.Println(err)
}
carbon.Now().AddHours(1).SetLanguage(lang).DiffForHumans() // 1 小时后

设置部分资源(其余资源仍从指定区域翻译)

lang := NewLanguage()

if err := lang.SetLocale("en");err != nil {
    // 错误处理...
    fmt.Println(err)
}

resources := map[string]string{
    "hour":"%dh",
}
lang.SetResources(resources)

carbon.Now().AddYears(1).SetLanguage(lang).DiffForHumans() // 1 year from now
carbon.Now().AddHours(1).SetLanguage(lang).DiffForHumans() // 1h from now

设置所有资源

lang := NewLanguage()
resources := map[string]string{
"year":"1 yr|%d yrs",
"month":"1 mo|%d mos",
"week":"%dw",
"day":"%dd",
"hour":"%dh",
"minute":"%dm",
"second":"%ds",
"now": "just now",
"ago":"%s ago",
"from_now":"in %s",
"before":"%s before",
"after":"%s after",
}
lang.SetResources(resources)

carbon.Now().AddYears(1).SetLanguage(lang).DiffForHumans() // in 1 yr
carbon.Now().AddHours(1).SetLanguage(lang).DiffForHumans() // in 1h

更多关于Golang日期库go-carbon发布v1.3.2版本,新增i18n支持方法的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于Golang日期库go-carbon发布v1.3.2版本,新增i18n支持方法的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


go-carbon v1.3.2 的 i18n 支持确实让国际化处理更加便捷。以下是几个实际使用示例:

基本区域设置示例:

// 设置中文区域
c := carbon.Now().AddMinutes(30).SetLocale("zh-CN")
fmt.Println(c.DiffForHumans()) // 30 分钟后

// 设置英文区域
c2 := carbon.Parse("2023-12-01 10:00:00").SetLocale("en")
fmt.Println(c2.AddDays(2).DiffForHumans()) // 2 days from now

自定义语言资源示例:

// 创建自定义语言配置
lang := carbon.NewLanguage()

// 设置基础区域
lang.SetLocale("en")

// 覆盖部分资源
customResources := map[string]string{
    "hour":     "%d小时",
    "minute":   "%d分钟",
    "second":   "%d秒",
    "from_now": "%s后",
}
lang.SetResources(customResources)

// 使用自定义语言
now := carbon.Now().SetLanguage(lang)
fmt.Println(now.AddHours(3).DiffForHumans())  // 3小时后
fmt.Println(now.AddMinutes(45).DiffForHumans()) // 45分钟后

错误处理完整示例:

func formatTimeWithLocale(t carbon.Carbon, locale string) (string, error) {
    c := t.SetLocale(locale)
    if c.Error != nil {
        return "", c.Error
    }
    return c.DiffForHumans(), nil
}

// 使用示例
result, err := formatTimeWithLocale(carbon.Now().AddDays(5), "zh-CN")
if err != nil {
    fmt.Printf("错误: %v\n", err)
} else {
    fmt.Println(result) // 5 天后
}

多语言切换示例:

// 准备多个语言配置
zhLang := carbon.NewLanguage()
zhLang.SetLocale("zh-CN")

enLang := carbon.NewLanguage()
enLang.SetLocale("en")

jpLang := carbon.NewLanguage()
jpLang.SetLocale("ja")

// 根据用户偏好显示
userLocale := "ja" // 从配置获取
var lang *carbon.Language

switch userLocale {
case "zh-CN":
    lang = zhLang
case "en":
    lang = enLang
case "ja":
    lang = jpLang
default:
    lang = enLang
}

c := carbon.Now().AddWeeks(2).SetLanguage(lang)
fmt.Println(c.DiffForHumans())

文件目录方式加载语言包:

// 假设有 lang/zh-CN.json 文件
lang := carbon.NewLanguage()
err := lang.SetDir("/path/to/lang/directory")
if err != nil {
    fmt.Printf("加载语言目录失败: %v\n", err)
    return
}

err = lang.SetLocale("zh-CN")
if err != nil {
    fmt.Printf("设置区域失败: %v\n", err)
    return
}

c := carbon.Now().AddMonths(3).SetLanguage(lang)
fmt.Println(c.DiffForHumans()) // 3 个月后

这些示例展示了如何在实际项目中应用 go-carbon v1.3.2 的 i18n 功能,特别是 SetLocaleSetLanguage 方法的使用方式。

回到顶部