9

He creado un sitio web MVC localizado utilizando el código que se encuentra en this blog by Alex Adamyan.ResourceManager no selecciona el conjunto de recursos correcto al usar cultura personalizada

Esto funciona muy bien si utilizo una cultura existente. Sin embargo, estoy tratando de localizar el tagalo (tl o tl-PH). Windows no tiene esta cultura integrada, por lo que he creado uno (he intentado tanto TL y TL-PH) según el código de abajo:

public static void CreateCustomCultures() 

{ 

    var cultureBuilder = new CultureAndRegionInfoBuilder(
          "tl", CultureAndRegionModifiers.Neutral); 

    cultureBuilder.LoadDataFromCultureInfo(new CultureInfo("en-US")); 
    cultureBuilder.LoadDataFromRegionInfo(new RegionInfo("US")); 
    cultureBuilder.IsMetric = true; 
    cultureBuilder.CultureEnglishName = "Tagalog"; 
    cultureBuilder.CultureNativeName = "Tagalog"; 
    cultureBuilder.RegionEnglishName = "Tagalog"; 
    cultureBuilder.RegionNativeName = "Tagalog"; 
    cultureBuilder.TwoLetterISOLanguageName = "tl"; 
    cultureBuilder.ThreeLetterISORegionName = "PH"; 
    cultureBuilder.Register(); 

    var cultureBuilder2 = new CultureAndRegionInfoBuilder(
          "tl-PH", CultureAndRegionModifiers.None); 

    cultureBuilder2.LoadDataFromCultureInfo(new CultureInfo("en-US")); 
    cultureBuilder2.LoadDataFromRegionInfo(new RegionInfo("US")); 
    cultureBuilder2.IsMetric = true; 
    cultureBuilder2.CultureEnglishName = "Tagalog"; 
    cultureBuilder2.CultureNativeName = "Tagalog"; 
    cultureBuilder2.RegionEnglishName = "Tagalog"; 
    cultureBuilder2.RegionNativeName = "Tagalog"; 
    cultureBuilder2.TwoLetterISOLanguageName = "tl"; 
    cultureBuilder2.ThreeLetterISORegionName = "PH"; 
    cultureBuilder2.Register(); 

} 

También tengo cuatro archivos de recursos en mi sitio de prueba situado en ~/Views/Home/Resources:

  • Home.aspx.resx;
  • Home.aspx.tl.resx
  • Home.aspx.tl-PH.resx
  • Home.aspx.de.resx

Cuando construyo, consigo tres directorios con nombres correspondientes bajo mi directorio bin, cada uno con un dll apropiadamente nombrado.

Así que cuando voy a la página de inicio de mi sitio web http://localhost:1907 obtengo las cadenas de idioma predeterminadas (inglés).

Cuando voy a la página de inicio de alemán (de) http://localhost:1907/de obtengo la versión alemana del sitio.

Cuando voy a las versiones de tagalo http://localhost:1907/tl o http://localhost:1907/tl-PH, obtengo la versión en inglés en lugar de la versión en tagalo.

He colocado puntos de interrupción en el código de obtención de recursos y he confirmado que la cultura de la hebra actual y la cultura de UI están configuradas correctamente en la cultura Tagalog y que Tagalog es la cultura que se pasa a resourceManager.GetString (clave, cultura).

¿Alguna idea? ¿No creé mis culturas correctamente?

+0

cultureBuilder2.LoadDataFromCultureInfo (new CultureInfo ("en-US")); cultureBuilder2.LoadDataFromRegionInfo (new RegionInfo ("US")); es-US? –

+0

@Avatar: Simplemente carga configuraciones (como separadores y formatos de decimales y agrupaciones) de la cultura de inglés estadounidense. No debería tener ningún efecto en la carga de recursos apropiados ... –

+0

Estoy bastante seguro de que ha creado su cultura personalizada correctamente. La única preocupación que tengo es su código de país de tres letras ISO 3166, que aparentemente solo son dos letras. Sin embargo, no debería importar. –

Respuesta

1

Creo que sus culturas nunca están registradas, al menos una de ellas no lo es.

El código siguiente arrojará una excepción ya que no puede especificar valores regionales para una cultura neutral. Al igual que no puede crear un objeto DateTimeFormatInfo para una cultura neutral.

var cultureBuilder = new CultureAndRegionInfoBuilder(
         "tl", CultureAndRegionModifiers.Neutral); 

cultureBuilder.LoadDataFromCultureInfo(new CultureInfo("en-US")); 
cultureBuilder.LoadDataFromRegionInfo(new RegionInfo("US")); 
cultureBuilder.IsMetric = true; 
cultureBuilder.CultureEnglishName = "Tagalog"; 
cultureBuilder.CultureNativeName = "Tagalog"; 
cultureBuilder.RegionEnglishName = "Tagalog"; 
cultureBuilder.RegionNativeName = "Tagalog"; 
cultureBuilder.TwoLetterISOLanguageName = "tl"; 
cultureBuilder.ThreeLetterISORegionName = "PH"; 
cultureBuilder.Register(); 

Debería ser algo como esto

var cultureBuilder = new CultureAndRegionInfoBuilder(
         "tl", CultureAndRegionModifiers.Neutral); 

cultureBuilder.LoadDataFromCultureInfo(new CultureInfo("en-US")); 
cultureBuilder.CultureEnglishName = "Tagalog"; 
cultureBuilder.CultureNativeName = "Tagalog"; 
cultureBuilder.TwoLetterISOLanguageName = "tl"; 
cultureBuilder.Register(); 

El segundo cultivo específico parece bien.

Cuestiones relacionadas