前端传递的字符串转国际化tag

	zh, _ := language.ParseBase("zh") // 语言
	CN, _ := language.ParseRegion("CN") // 地区
	zhLngTag, _ := language.Compose(zh, CN)
	
	tag := language.MustParse(e.tag)

经过测试,中国语言存在中文Chinese,简体SimplifiedChinese,繁体TraditionalChinese
通过一下方式测试可以查看到,繁体的默认地址是台湾

fmt.Println(language.SimplifiedChinese.Base())
fmt.Println(language.TraditionalChinese.Region())
zh-CHS 是单纯的简体中文。
zh-CHT 是单纯的繁体中文。

zh-Hans和zh-CHS相同相对应。
zh-Hant和zh-CHT相同相对应。

以上时zh-CHS/zh-Hans 和 zh-CHT/zh-Hant的关系。

然后是
zh-CN 简体中文,中华人民共和国
zh-HK 繁体中文,香港特别行政区
zh-MO 繁体中文,澳门特别行政区
zh-SG 繁体中文,新加坡-
zh-SG 简体中文,新加坡
zh-TW 繁体中文,台湾

读取配置文件

package config

import (
	"encoding/json"
	"fmt"
	"golang.org/x/text/language"
	"golang.org/x/text/message"
	"os"
)

type LangageConfigguration struct {
	SimplifiedChinese  []LangageEntity `json:"simplifiedChinese"`
	TraditionalChinese []LangageEntity `json:"traditionalChinese"`
	English            []LangageEntity `json:"english"`
}
type LangageEntity struct {
	Key   string `json:"key"`
	Value string `json:"value"`
}

func LocalLangageConfigguration() {
	info, err := os.Stat("resources/config/")
	if os.IsExist(err) {
		fmt.Println("base config path 目录信息出错")
		panic("The path is not existed:")
	}
	if !info.IsDir() {
		panic("The path is not dir, please check:")
	}
	configFile, err := os.Open("resources/config/langage.json")
	if err != nil {
		logger.Error("本地nacos配置文件加载失败:", err)
	}
	jsonParse := json.NewDecoder(configFile)
	var langageConfig LangageConfigguration
	err = jsonParse.Decode(&langageConfig)
	if err != nil {
		logger.Error("nacos配置文件转换失败:", err)
	}
	setMsg(langageConfig)
}
func setMsg(langageConfig LangageConfigguration) {
	simplifiedChinese := langageConfig.SimplifiedChinese
	if len(simplifiedChinese) > 0 {
		setm(language.SimplifiedChinese, simplifiedChinese)
	}
	traditionalChinese := langageConfig.TraditionalChinese
	if len(traditionalChinese) > 0 {
		setm(language.TraditionalChinese, traditionalChinese)
	}
	english := langageConfig.English
	if len(english) > 0 {
		setm(language.AmericanEnglish, english)
	}
}

var SimplifiedChinese *message.Printer
var TraditionalChinese *message.Printer
var EnUS *message.Printer

func setm(tag language.Tag, list []LangageEntity) {
	for _, v := range list {
		message.SetString(tag, v.Key, v.Value)
	}
	SimplifiedChinese = message.NewPrinter(language.SimplifiedChinese)
	TraditionalChinese = message.NewPrinter(language.TraditionalChinese)
	EnUS = message.NewPrinter(language.AmericanEnglish)
}

设计一个nacos配置的读取和监听

在这里插入代码片

将配置信息进行初始化配置

处理单复数问题和是否存在问题,这个在有些情况不需要输出两个占位符内容,有时候是英文的单复数问题。

package main
func init() {
	
	//根据参数处理不同的返回语句
	message.Set(language.English, "APP_COUNT",
		plural.Selectf(1, "%d",
			"=1", "I have an apple",
			"=2", "I have two apples",
			"other", "I have %[1]d apples",
		))
}

func main() {
	fmt.Println("placehold中的条件判断-------------------")
	// 条件判断
	p.Printf("APP_COUNT", 1)
	fmt.Println()
	p.Printf("APP_COUNT", 2)
	p.Println()
}