2008-08-27 13 views
13

Ich habe eine Anwendung, auf der ich die Lokalisierung implementiere.Dynamischer Verweis auf Ressourcendateien in C#

Ich muss jetzt dynamisch einen Namen in der resouce Datei referenzieren.

gehe ich davon aus, eine Ressource-Datei Login.resx, eine eine Reihe von Zeichenketten genannt: foo = „Hallo“, bar = „grausam“ und baz = „Welt“

normalerweise verweise ich als: Zeichenfolge result = Login.foo; und Ergebnis == "Hallo";

Mein Problem ist, dass ich zur Zeit des Codes nicht weiß, ob ich auf foo, bar oder baz verweisen will - ich habe eine Zeichenfolge, die entweder "foo", "bar" oder "baz" enthält.

Ich brauche so etwas wie:

Login [ "foo"];

Weiß jemand, ob es eine Möglichkeit gibt, dynamisch auf eine Zeichenfolge in einer Ressourcendatei zu verweisen?

Antwort

19

Sie werden ein ResourceManager für die Login.resx zum Beispiel benötigen:

var resman = new System.Resources.ResourceManager(
    "RootNamespace.Login", 
    System.Reflection.Assembly.GetExecutingAssembly() 
) 
var text = resman.GetString("resname"); 

Es könnte an dem generierten Code in den Code-Behind-Dateien der Ressourcen-Dateien suchen helfen, die von der IDE erstellt werden. Diese Dateien enthalten im Wesentlichen schreibgeschützte Eigenschaften für jede Ressource, die eine Abfrage an einen internen Ressourcenmanager sendet.

+10

Oder noch einfacher, Sie können einfach auf den 'ResourceManager' auf der Ressource selbst zugreifen. z.B. Login.ResourceManager.GetString ("foo") –

2

Wenn Sie Ihre Ressourcen-Datei in den Ordner App_GlobalResources setzen wie ich, müssen Sie

global :: System.Resources.ResourceManager temp = neue global :: System.Resources.ResourceManager verwenden ("RootNamespace.Login", global :: System.Reflection.Assembly.Load ("App_GlobalResources"));

Ich brauchte eine Weile, um das herauszufinden. Hoffe, das wird jemandem helfen. :)