2010-10-08 64 views
16

J'ai un client qui veut spécifier sa propre version du contenu localisé pour un sous-ensemble de mes ressources de chaîne.Quelle est la méthode recommandée pour créer une culture personnalisée et des fichiers de ressources associés pour un client spécifique?

Pour simplifier voici exemple de base:
Disons que j'ai 2 chaînes localisées (affichage du contenu anglais)
PageTitle = « Bonjour tout le monde »
PageDescription = « Ceci est une version plus verbeux de Bonjour tout le monde! »

Je souhaite localiser ceux-ci afin que j'ai des fichiers de ressources.

  • Strings.resx (contient mon string anglais )
  • Strings.fr-ca.resx (contient mes chaînes canadiennes-françaises)
  • Strings.fr-ca-clientX .resx (contient mes chaînes pour un client qui est canadienne-française et therfore très pointilleux ;) - je plaisante)

Idéalement, "Strings.fr-ca-clientX" ne peut spécifier que les chaînes à "surcharger". En d'autres termes, ils peuvent simplement souhaiter changer le PageTitle et continuer à utiliser la PageDescription du fichier de ressources "fr-ca".

Alors, comment puis-je faire pour ça dans .NET? Idéalement, je voudrais juste créer le fichier resx et spécifiez la culture dans mon « web.config » et il devrait fonctionner ...

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

Cependant, cela ne fonctionne pas. "La balise contient une valeur invalide pour l'attribut 'culture'" est mon premier obsticle.

Merci,
Justin

+1

I wouldn ne recommande pas cette façon de fournir la localisation. C'est loin d'être facile, mais pour de telles demandes, je créerais probablement une façade de ressources qui sera un point de décision unique sur les chaînes à charger à l'exécution. –

Répondre

1

Vous devez probablement créer votre propre culture et l'enregistrer. Vous trouverez l'article MSDN sur ce sujet here.

Vous n'avez pas besoin de modifier l'attribut de culture, il devrait rester à "fr-CA", car l'attribut uiCulture est responsable du chargement des chaînes à partir des ressources.

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

Vous pouvez créer une nouvelle culture avec le code suivant:

 //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(); 

J'ai écrit un message sur la création d'une application pour le faire que ..

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