2010-10-08 5 views
16

Tengo un cliente que quiere especificar su propia versión de contenido localizado para un subconjunto de mis recursos de cadena.¿Cuál es la forma recomendada de crear una cultura personalizada y archivos de recursos asociados para un Cliente específico?

Por simplicidad aquí es ejemplo básico:
Digamos que tengo 2 cadenas localizadas (Presentación de contenidos Inglés)
PageTitle = "Hello World"
PageDescription = "Esta es una versión más prolijo de Hello World!"

Deseo localizar esto, así que tengo archivos de recursos.

  • Strings.resx (contiene mi Inglés cadena)
  • Strings.fr-ca.resx (contiene las cuerdas de mi franco-canadienses)
  • Strings.fr-ca-clientX resx (contiene mis cuerdas para un cliente quien es franco-canadiense y therfore muy exigente ;) - sólo broma)

Lo ideal es que "Strings.fr-ca-clientX" pueda especificar solo las cadenas que desea "anular". En otras palabras, es posible que deseen cambiar el título de la página y continuar utilizando la descripción de la página desde el archivo de recursos "fr-ca".

Entonces, ¿cómo puedo hacer esto en .NET? Lo ideal sería simplemente crear el resx y especificar la cultura en mi "Web.config" y debería funcionar ...

<globalization uiCulture="fr-ca-clientX" culture="fr-ca-clientX" /> 

Sin embargo, esto no funciona. "La etiqueta contiene un valor no válido para el atributo 'cultura'" es mi primer obstículo.

Gracias,
Justin

+1

I wouldn No recomiendo esta forma de proporcionar localización. No es nada fácil, pero para tales demandas, probablemente crearía Resource Facade, que será un punto único de decisión sobre qué cadenas cargar en el tiempo de ejecución. –

Respuesta

1

es probable que necesite para crear su propia cultura y registrarlo. Encontrará el artículo de MSDN sobre ese tema here.

No es necesario alterar el atributo cultural, debe permanecer en "fr-CA", ya que el atributo uiCulture es responsable de cargar cadenas desde los recursos.

2
public void AddCustomCulture(string cultureName, string baseCulture) 
    { 
     var cultureBuilder = new CultureAndRegionInfoBuilder(cultureName, CultureAndRegionModifiers.None); 

     cultureBuilder.LoadDataFromCultureInfo(new CultureInfo(baseCulture)); 

     var region = baseCulture.Substring(3, 2); 

     cultureBuilder.LoadDataFromRegionInfo(new RegionInfo(region)); 

     cultureBuilder.Register(); 
    } 
2

Puede crear una nueva cultura con el siguiente código:

 //Get culture info based on Great Britain 
     CultureInfo cultureInfo = new CultureInfo("en-GB"); 
     RegionInfo regionInfo = new RegionInfo(cultureInfo.Name); 

     CultureAndRegionInfoBuilder cultureAndRegionInfoBuilder = new CultureAndRegionInfoBuilder(txtCultureName.Text, CultureAndRegionModifiers.None); 

     cultureAndRegionInfoBuilder.LoadDataFromCultureInfo(cultureInfo); 
     cultureAndRegionInfoBuilder.LoadDataFromRegionInfo(regionInfo); 

     // Custom Changes 
     cultureAndRegionInfoBuilder.CultureEnglishName = txtCultureName.Text; 
     cultureAndRegionInfoBuilder.CultureNativeName = txtNativeName.Text; 

     cultureAndRegionInfoBuilder.Register(); 

he escrito un post sobre cómo crear una aplicación para hacer precisamente eso ..

http://wraithnath.blogspot.com/search/label/Globalization

Cuestiones relacionadas