J’ai une assemblée de ressources avec des textes traduits dans différentes langues. Le type de projet ressemble à ceci:
Je peux obtenir les textes en utilisant des propriétés statiques comme ceci:
var value = FooBar.Hello;
Ou en utilisant une reflection comme celle-ci:
var value = resourceAssembly .GetType("Namespace.FooBar") .GetProperty("Hello") .GetValue(null, null) as ssortingng;
Les deux méthodes me procureront la valeur appartenant à la culture d’interface utilisateur actuelle du fil actuel. Ce qui est bien et totalement ce que je voudrais habituellement.
Mais est-ce que je peux faire quelque chose si je veux explicitement, par exemple, la valeur suédoise, sans avoir à changer la culture de l’interface utilisateur?
Vous pouvez modifier manuellement la propriété Culture
de la classe FooBar générée par Visual Studio. Ou si vous utilisez directement la classe ResourceManager , vous pouvez utiliser la surcharge de GetSsortingng qui prend la culture souhaitée en tant que paramètre.
Essayez le code suivant. Cela a bien fonctionné pour moi au moins:
FooBar.ResourceManager.GetSsortingng("Hello", CultureInfo.GetCultureInfo("sv-SE"))
Vous pouvez modifier manuellement la culture dans votre classe d’access aux ressources. Mais cela n’est pas recommandé car cela pose d’autres problèmes d’internationalisation.
Par exemple, vous devriez:
Donc, si possible, changez la culture d’interface utilisateur actuelle du thread actuel.
Voici un code que j’ai utilisé pour récupérer un fichier de ressources par nom de culture – c’est vb.net, mais vous voyez l’idée.
Dim reader As New System.Resources.ResXResourceReader(Ssortingng.Format(Server.MapPath("/App_GlobalResources/{0}.{1}.resx"), resourceFileName, culture))
Et si vous voulez le retourner sous forme de dictionnaire:
If reader IsNot Nothing Then Dim d As New Dictionary(Of Ssortingng, Ssortingng) Dim enumerator As System.Collections.IDictionaryEnumerator = reader.GetEnumerator() While enumerator.MoveNext d.Add(enumerator.Key, enumerator.Value) End While Return d End If
Utilisez la deuxième surcharge de GetValue: –
.GetValue(null, BindingFlags.GetProperty, null, null, CultureInfo.GetCultureInfo("sv-SE"))