2008-08-27 17 views
13

Mam aplikację, w której implementuję lokalizację.Dynamiczne odwołanie do plików zasobów w C#

Muszę teraz dynamicznie odwoływać się do nazwy w pliku Resouce.

zakładać Mam plik o nazwie Login.resx zasobów, co oznacza liczbowo ciągi: foo = "hello", bar = "okrutny" i baz = "świat"

normalnie odniosę jako: Wynik ciągu = Login.foo; i wynik == "cześć";

Mój problem polega na tym, że w czasie kodowania nie wiem, czy chcę odnosić się do foo, bar czy baz - mam ciąg zawierający "foo", "bar" lub "baz".

Potrzebuję coś takiego:

Zaloguj się ["foo"];

Czy ktoś wie, czy istnieje sposób dynamicznego odwoływania się do łańcucha w pliku zasobów?

Odpowiedz

19

Musisz przykład ResourceManager dla Login.resx:

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

To może pomóc spojrzeć na wygenerowanego kodu w plikach kodu źródłowego tych plików zasobów, które są tworzone przez IDE. Te pliki zasadniczo zawierają właściwości tylko do odczytu dla każdego zasobu, który wysyła zapytanie do wewnętrznego menedżera zasobów.

+10

Lub jeszcze łatwiej, można uzyskać dostęp do 'ResourceManager' na samym zasobu. na przykład Login.ResourceManager.GetString ("foo") –

2

Jeśli umieścisz plik zasobu w App_GlobalResources folderu jak ja, trzeba użyć

globalnego :: System.Resources.ResourceManager temp = new globalny :: System.Resources.ResourceManager ("RootNamespace.Login", global :: System.Reflection.Assembly.Load ("App_GlobalResources"));

Zabrało mi to trochę czasu. Mam nadzieję, że to pomoże komuś. :)