2008-08-27 7 views
13

J'ai une application sur laquelle j'implémente la localisation.Référence dynamique aux fichiers de ressources en C#

J'ai maintenant besoin de référencer dynamiquement un nom dans le fichier de résolution.

suppose que j'ai un fichier de ressources appelé Login.resx, un un certain nombre de chaînes: foo = "bonjour", bar = "cruel" et baz = "world"

normalement, je ferai référence comme: Chaîne result = Login.foo; et résultat == "bonjour"; Mon problème est que, au moment du code, je ne sais pas si je veux faire référence à foo, bar ou baz - j'ai une chaîne qui contient soit "foo", "bar" ou "baz".

je besoin de quelque chose comme:

Connexion [ "foo"];

Est-ce que quelqu'un sait s'il existe un moyen de référencer dynamiquement une chaîne dans un fichier de ressources?

Répondre

19

Vous devrez par exemple un ResourceManager pour la Login.resx:

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

Il pourrait aider à regarder le code généré dans les fichiers de code-behind des fichiers de ressources qui sont créés par l'EDI. Ces fichiers contiennent essentiellement des propriétés readonly pour chaque ressource qui effectue une requête à un gestionnaire de ressources interne.

+10

Ou même plus facile, vous pouvez simplement accéder au 'ResourceManager' sur la ressource elle-même. par exemple. Login.ResourceManager.GetString ("foo") –

2

Si vous mettez votre fichier de ressources dans le dossier App_GlobalResources comme je l'ai fait, vous devez utiliser

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

Il m'a fallu un certain temps pour comprendre cela. J'espère que cela aidera quelqu'un. :)