Sección anterior describe cómo manejar los recursos localizados, es decir, una configuración regional de los archivos de configuración correspondientes, por lo que si se trabaja con múltiples recursos localizados? Por ejemplo, algunos de nuestros equipos de frecuencia: la simple traducción del texto, fecha y hora, número, etc Si manejarlo? Esta sección once resolver estos problemas..
En el desarrollo de una aplicación, lo primero que tenemos que decidir si apoyar un solo idioma, o idiomas, si usted quiere apoyar a varios idiomas, se tendrá que desarrollar una estructura organizativa para facilitar el futuro para añadir más idiomas. Aquí hemos diseñado de la siguiente manera: Los archivos relacionados con el entorno nacional estén colocados en los config / locales , supongamos que usted quiere apoyar Chino e Inglés, entonces usted necesita para ser colocado en esta carpeta y en.json zh.json. Probablemente los contenidos son los siguientes:
# zh.json
{
"zh": {
"submit": "提交",
"create": "创建"
}
}
#en.json
{
"en": {
"submit": "Submit",
"create": "Create"
}
}
Con el fin de apoyar la internacionalización, en el que se utilizó un paquetes relacionados internacionales - go-i18n ( More advanced i18n package can be found here ),lo primero que vamos-i18n paquete para registrar config/locales este directorio, para cargar todos los archivos de configuración regional
Tr := i18n.NewLocale()
Tr.LoadPath("config/locales")
Este paquete es fácil de usar, puede ser examinado por el siguiente método:
fmt.Println (Tr.Translate ("submit")) //Output Submit Tr.SetLocale ("zn") fmt.Println (Tr.Translate ("submit")) //Outputs " Submit"
fmt.Println(Tr.Translate("submit"))
//Output "submit"
Tr.SetLocale("zn")
fmt.Println(Tr.Translate("submit"))
//Outputs "递交"
Arriba describimos cómo cargar automáticamente los paquetes de idioma de encargo, de hecho, la biblioteca go-i18n ha habido un montón de información de formato por defecto pre-cargado, como el formato de tiempo, formato de moneda, el usuario puede personalizar la configuración de anulación estas configuraciones predeterminadas, consulte el siguiente proceso:
//Load the default configuration files, which are placed below `go-i18n/locales`
//File naming zh.json, en-json, en-US.json etc., can be continuously extended to support more languages
func (il *IL) loadDefaultTranslations(dirPath string) error {
dir, err := os.Open(dirPath)
if err != nil {
return err
}
defer dir.Close()
names, err := dir.Readdirnames(-1)
if err != nil {
return err
}
for _, name := range names {
fullPath := path.Join(dirPath, name)
fi, err := os.Stat(fullPath)
if err != nil {
return err
}
if fi.IsDir() {
if err := il.loadTranslations(fullPath); err != nil {
return err
}
} else if locale := il.matchingLocaleFromFileName(name); locale != "" {
file, err := os.Open(fullPath)
if err != nil {
return err
}
defer file.Close()
if err := il.loadTranslation(file, locale); err != nil {
return err
}
}
}
return nil
}
A través del método anterior para cargar la información de configuración en el archivo por defecto, de manera que podamos personalizar el tiempo que no tenemos información de cuando se ejecuta el código siguiente para obtener la información correspondiente:
//locale = zh, execute the following code:
fmt.Println(Tr.Time(time.Now()))
//Output: 2009年1月08日 星期四 20:37:58 CST
fmt.Println(Tr.Time(time.Now(),"long"))
//Output: 2009年1月08日
fmt.Println(Tr.Money(11.11))
//Output: ¥11.11
Por encima se consigue un número de paquetes de idioma y gestión de la carga, y algunos implementación de la función se basa en la capa lógica, por ejemplo: "Tr.Translate", "Tr.Time", "Tr.Money" y así sucesivamente, mientras que en el nivel lógico Usted puede utilizar estas funciones para los parámetros necesarios para la conversión al representar la salida de capa de plantilla directamente, pero si queremos utilizarlas directamente en las funciones de la capa de plantilla que la forma de lograrlo? No sé si usted recuerda, en el momento, dijo a principios de plantilla: Ir soporte de plantillas de idioma función de plantilla personalizada, el siguiente es nuestra aplicación para facilitar la operación de mapfunc:
1 información de texto
La información de texto llamada Tr.Translate para lograr la conversión de la información adecuada, mapFunc se implementa de la siguiente manera:
func I18nT(args ...interface{}) string {
ok := false
var s string
if len(args) == 1 {
s, ok = args[0].(string)
}
if !ok {
s = fmt.Sprint(args...)
}
return Tr.Translate(s)
}
Registration function de la siguiente manera
t.Funcs(template.FuncMap{"T": I18nT})
usando la siguiente plantilla:
{{.V.Submit | T}}
- la fecha y la hora
Fecha y hora de llamar Tr.Time función de lograr el momento apropiado para un cambio, mapFunc se implementa de la siguiente manera:
func I18nTimeDate(args ...interface{}) string {
ok := false
var s string
if len(args) == 1 {
s, ok = args[0].(string)
}
if !ok {
s = fmt.Sprint(args...)
}
return Tr.Time(s)
}
Registration function is as follows:
t.Funcs(template.FuncMap{"TD": I18nTimeDate})
Using the following template:
{{.V.Now | TD}}
3 Moneda Información
Moneda llama Tr.Money función de lograr el momento apropiado para un cambio, mapFunc se implementa de la siguiente manera:
func I18nMoney(args ...interface{}) string {
ok := false
var s string
if len(args) == 1 {
s, ok = args[0].(string)
}
if !ok {
s = fmt.Sprint(args...)
}
return Tr.Money(s)
}
Registration function is as follows:
t.Funcs(template.FuncMap{"M": I18nMoney})
Using the following template:
{{.V.Money | M}}
A través de esta sección sabemos cómo implementar un paquete multi-idioma para aplicaciones web, a través de unos paquetes de idiomas a medida que podamos facilitar la realización de varios idiomas, pero también a través del archivo de configuración puede ser muy conveniente para expandir en varios idiomas, por De forma predeterminada, vaya-i18n será auto-fijo carga la información de configuración comunes, como el tiempo, el dinero, etc, podemos estar muy cómodo de usar, y con el fin de apoyar el uso de estas funciones en la plantilla, pero también para lograr las funciones de plantilla adecuados, lo que nos permite desarrollar aplicaciones Web en el tiempo directamente en la plantilla de la forma a través de la tubería de operar varios paquetes de idioma..
- Directory
- Previous section: Localized resources
- Next section: Summary