2017-08-25 94 views
-1

我有一个用golang编写的网络应用程序,我打算让它以多种语言提供,我查看了多个可用的l18n软件包,但有些东西并不清楚。Golang网络应用本地化

哪些软件包可以理想地确定用户的语言环境并相应地加载网站?喜欢从浏览器首选项或位置?

+1

太广,太多的问题,其中有一些是高度意见为主,其中一些正在寻求一个非现场资源......这个问题应该由于多种原因而关闭。 – Adrian

+0

我同意,对不起,修改了我的问题。 –

+0

问题仍然要求为离线站点资源提供建议,仍然是SO的主题。 – Adrian

回答

0

您可以使用https://github.com/nicksnyder/go-i18n/

然后在你的项目,你必须创建一个名为的i18n文件夹/和使用这样的功能:

import (
    "fmt" 
    "io/ioutil" 

    "github.com/nicksnyder/go-i18n/i18n" 
) 

func loadI18nFiles() { 
    files, _ := ioutil.ReadDir("i18n") 
    exists := false 

    for _, file := range files { 
     if err := i18n.LoadTranslationFile(fmt.Sprintf("i18n/%s", file.Name())); err != nil { 
      log.Errorf("i18n: error loading file %s. err: %s", file.Name(), err) 
     } else { 
      log.Infof("i18n: lang file %s loaded", file.Name()) 
     } 

     # Check if you have a default language 
     if file.Name() == fmt.Sprintf("%s.json", "en-US") { 
      exists = true 
     } 
    } 

    if !exists { 
     panic(fmt.Sprintf("Hey! You can't use a default language (%s) that doesn't exists on i18n folder", props.DefaultLang)) 
    } 
} 

即可使用,进口封装和调用功能:

T, _ := i18n.Tfunc("es-AR", "en-US") 

fmt.Printf(T("key")) 

I18N文件夹内的每个文件是一个上传.json

例子:

EN-US.json

[ 
    { 
    "id": "key", 
    "translation": "Hello World" 
    } 
] 

ES-AR.json

[ 
    { 
    "id": "key", 
    "translation": "Hola Mundo" 
    } 
]