Skip to content

Latest commit

 

History

History
140 lines (99 loc) · 7 KB

File metadata and controls

140 lines (99 loc) · 7 KB

10.2 Recursos localizados

En la sección anterior describimos cómo establecer la configuración regional, configuración regional establecida entonces tenemos que abordar el problema es cómo almacenar la información correspondiente a la configuración regional apropiada que? Esta información privilegiada incluye: mensajes de texto, fecha y hora, valores de moneda, imágenes, archivos de inclusión y ver otros recursos. Así que estamos hablando de información sobre las once de ellos se describen, Go idioma ponemos esta información se almacena en formato JSON, y luego a través de la forma adecuada para demostrarlo. (Seguido por el contrario Chino e Inglés, por ejemplo, el formato de almacenamiento en.json y zh-CN.json)

Mensajes de texto localizados

Esta información se utiliza con mayor frecuencia para la escritura de aplicaciones Web, pero también los recursos localizados en la mayoría de la información, que desea para adaptarse a la forma en idioma local para mostrar información de texto, una solución factible es: Crear un mapa correspondiente al idioma necesario para mantener una tecla -valor de la relación, antes de la salida necesaria para pasar de un mapa adecuado para el texto correspondiente en el siguiente es un ejemplo sencillo:

package main

import "fmt"

var locales map[string]map[string]string

func main() {
	locales = make(map[string]map[string]string, 2)
	en := make(map[string]string, 10)
	en["pea"] = "pea"
	en["bean"] = "bean"
	locales["en"] = en
	cn := make(map[string]string, 10)
	cn["pea"] = "豌豆"
	cn["bean"] = "毛豆"
	locales["zh-CN"] = cn
	lang := "zh-CN"
	fmt.Println(msg(lang, "pea"))
	fmt.Println(msg(lang, "bean"))
}

func msg(locale, key string) string {
	if v, ok := locales[locale]; ok {
		if v2, ok := v[key]; ok {
			return v2
		}
	}
	return ""
}

El ejemplo anterior demuestra una traducción diferente texto locale para lograr los chinos e Inglés para la misma aplicación idioma de visualización de teclas, para conseguir el mensaje de texto en chino arriba, si usted quiere cambiar a la versión en Inglés, sólo tiene que ajustar a es lang.

A veces, sólo un cambio de clave y valor no se cumple con la necesidad, por ejemplo, "tengo 30 años", expresión china "Tengo 30 años", y donde el 30 es una variable, cómo hacerlo? Esta vez, podemos combinar fmt.Printf función de lograr, consulte el siguiente código:

en["how old"] = "I am %d years old"
cn["how old"] = "我今年%d岁了"

fmt.Printf(msg(lang, "how old"), 30)

El código de ejemplo anterior es sólo para demostrar las implementaciones internas, pero los datos reales se almacena en el JSON dentro, por lo que podemos json.Unmarshal para rellenar los datos del map correspondiente.

Fecha y hora localizada

Dado que la relación entre las zonas horarias, al mismo tiempo, en las diferentes regiones, lo que significa que no es la misma, pero debido a la relación entre la configuración regional y de los formatos de hora no son lo mismo, por ejemplo, el medio ambiente de China puede aparecer: 24 de octubre de 2012 Miércoles 23:11 minutos y 13 segundos CST , mientras que en el entorno de Inglés puede mostrar: Mié 24 Oct 23:11:13 CST 2012 Lo que tenemos que abordar dos puntos.:

  1. zonas horarias
  2. problemas de formatos

$GOROOT/lib/time/package/timeinfo.zip contener escenario corresponde a la definición de zona horaria, con el fin de obtener un tiempo correspondiente a la localización actual, debemos usar primero time.LoadLocation (string nombre) Obtener la región correspondiente a la configuración regional, como Asia / Shanghai o America / Chicago correspondiente a la información de zona horaria y, a continuación, utilizar esta información para llamar a time.Now objeto tiempo obtenido colaborar para obtener el tiempo final. Vista Detallada del siguiente ejemplo (este ejemplo utiliza el ejemplo anterior, algunas de las variables):

en["time_zone"] = "America/Chicago"
cn["time_zone"] = "Asia/Shanghai"

loc, _ := time.LoadLocation(msg(lang, "time_zone"))
t := time.Now()
t = t.In(loc)
fmt.Println(t.Format(time.RFC3339))

Podemos manejar formato de texto de forma similar a resolver el problema de formato de hora, por ejemplo de la siguiente manera:

en["date_format"]="%Y-%m-%d %H:%M:%S"
cn["date_format"]="%Y年%m月%d日 %H时%M分%S秒"

fmt.Println(date(msg(lang,"date_format"),t))

func date(fomate string,t time.Time) string{
	year, month, day = t.Date()
	hour, min, sec = t.Clock()
	//Parsing the corresponding %Y%m%d%H%M%S and then return information
	//%Y replaced by 2012
	//%m replaced by 10
	//%d replaced by 24
}

Valor de la moneda localizada

Varias regiones de la moneda no es el mismo, también se trata con una fecha acerca de los detalles, véase el siguiente código:

en["money"] ="USD %d"
cn["money"] ="¥%d元"

fmt.Println(date(msg(lang,"date_format"),100))

func money_format(fomate string,money int64) string{
	return fmt.Sprintf(fomate,money)
}

Vistas de localización y recursos

Podemos utilizar la configuración regional para mostrar diferentes vistas que contienen diferentes imágenes, css, js y otros recursos estáticos. Entonces, ¿cómo hacer frente a estas informaciones? En primer lugar vamos a la configuración regional para organizar la información de archivos, consulte el siguiente Acuerdo de directorio de archivos:

views
|--en  //English Templates
	|--images     //store picture information
	|--js         //JS files 
	|--css        //CSS files
	index.tpl     //User Home
	login.tpl     //Log Home
|--zh-CN //Chinese Templates
	|--images
	|--js
	|--css
	index.tpl
	login.tpl

Con esta estructura de directorios que podemos rendir a darse cuenta de dónde este código:

s1, _ := template.ParseFiles("views" + lang + "index.tpl")
VV.Lang = lang
s1.Execute(os.Stdout, VV)

As for the inside of the resources inside the index.tpl set as follows:

// js file
<script type="text/javascript" src="views/{{.VV.Lang}}/js/jquery/jquery-1.8.0.min.js"></script>
// css file
<link href="views/{{.VV.Lang}}/css/bootstrap-responsive.min.css" rel="stylesheet">
// Picture files
<img src="views/{{.VV.Lang}}/images/btn.png">

Con este punto de vista, y la manera de localizar los recursos, se puede ampliar fácilmente.

Resumen

En esta sección se describe cómo utilizar y almacenar los recursos locales, a veces a través de la función de conversión de conseguir, a veces a través lang de configurar, pero con el tiempo a través de forma clave-valor para almacenar los datos cuando sea necesario Locale corresponde eliminar la información de la configuración regional correspondiente, si se trata de un mensaje de texto directamente a la salida, si es la fecha y la hora o el dinero, tiene que pasar fmt.Printf u otra función de formateo de tratar, y para los diferentes puntos de vista y los recursos de configuración regional es la más simple, siempre y cuando el aumento de la ruta de acceso que se puede lograr Lang.

Links