github.com/isyscore/isc-gobase@v1.5.3-0.20231218061332-cbc7451899e9/i18n/i18n.go (about)

     1  package i18n
     2  
     3  import (
     4  	"fmt"
     5  	"log"
     6  	"os"
     7  	"path/filepath"
     8  
     9  	f0 "github.com/isyscore/isc-gobase/file"
    10  )
    11  
    12  // InitI18N 初始化国际化,传入的语言为默认语言
    13  func InitI18N(language string) error {
    14  	pwd, _ := os.Getwd()
    15  	i18nDir := filepath.Join(pwd, "i18n")
    16  	if !f0.DirectoryExists(i18nDir) {
    17  		f0.MkDirs(i18nDir)
    18  	}
    19  	lngFile := filepath.Join(i18nDir, fmt.Sprintf("%s.po", language))
    20  	if !f0.FileExists(lngFile) {
    21  		return fmt.Errorf("没有找到指定的语言文件 %s", lngFile)
    22  	}
    23  	innerMap = NewI18NMap(language, lngFile)
    24  	return nil
    25  }
    26  
    27  // LoadI18NLanguage 加载指定语言,该语言将优先于默认语言,但是若指定语言中不存在某个key,将会从默认语言读取
    28  func LoadI18NLanguage(language string) error {
    29  	pwd, _ := os.Getwd()
    30  	i18nDir := filepath.Join(pwd, "i18n")
    31  	lngFile := filepath.Join(i18nDir, fmt.Sprintf("%s.po", language))
    32  	if !f0.FileExists(lngFile) {
    33  		return fmt.Errorf("没有找到指定的语言文件 %s", lngFile)
    34  	}
    35  	innerMap.Language = language
    36  	innerMap.Data = loadPo(lngFile)
    37  	return nil
    38  }
    39  
    40  func T(key string) string {
    41  	if v, ok := innerMap.Data[key]; ok {
    42  		return v
    43  	} else if v, ok := innerMap.DefaultData[key]; ok {
    44  		return v
    45  	} else {
    46  		log.Printf("没有找到key %s", key)
    47  		return ""
    48  	}
    49  }
    50  
    51  func Tf(key string, value ...any) string {
    52  	if v, ok := innerMap.Data[key]; ok {
    53  		return fmt.Sprintf(v, value...)
    54  	} else if v, ok := innerMap.DefaultData[key]; ok {
    55  		return fmt.Sprintf(v, value...)
    56  	} else {
    57  		log.Printf("没有找到key %s", key)
    58  		return ""
    59  	}
    60  }