viernes, 18 de agosto de 2017

Multi-idioma

Tengo una web asp .net webForm  el  multi-idioma lo tenia resuelto con  resources.
Llega el cliente y exige que  una página web del sitio los textos estén en ficheros po 😥😥.

Que es un fichero po : portable object

Es un fichero donde están las etiquetas. Más información

http://www.xperimentos.com/2009/02/21/ficheros-de-traduccin-pot-po-y-mo/

Si se puede editar con el poedit y con un block de notas. Esto me parece super  interesante con respecto al resources. Pero claro estamos es el último sprint, ahora tengo que usar algo diferente 😥😥😥

Bueno todo tiene solución y está vez la solución está en 
https://github.com/turquoiseowl/i18n

A mi personalmente no me funciona las opciones de otras rutas u otro nombre del fichero, pero el resto me fue de lujo.

La próxima vez además de asegurarme si la aplicación  tiene que ser multi-idioma,  preguntaré donde tienen que ir los textos traducidos.

Tengo una “manía” y es que los formatos de fecha los almaceno en fichero de recursos,  para evitarme problema de separadores y diferente formatos de fechas.

Para que el idioma del PO  me funcionará en servidor
1.       Establecemos el idioma

Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo(culture);
Thread.CurrentThread.CurrentCulture = Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo(culture);
i18n.LanguageTag lt = i18n.LanguageTag.GetCachedInstance(culture);
HttpContext.Current.SetPrincipalAppLanguageForRequest(lt);

2.       Leer etiquetas del po en servidor
public string GetTraduccionPO(string name)
        {
            i18n.TranslateSvc_HttpContext auixc = new i18n.TranslateSvc_HttpContext(this.Context);
            string cad = auixc.ParseAndTranslate("[[[" + name + "]]]");
            return cad;
        }
     3. Para el caso de las fechas

lbFecha.Text = string.Format(CultureInfo.InvariantCulture, GetTraduccionPO("fecha"), dato.FechaInicio);