Подтвердить что ты не робот

Получение строки динамически из строк ресурсов

Я работаю над локализованным С#.NET-приложением, и мы используем файл strings.resx для перевода жестко заданных строк в приложение. Для их использования я использую следующий код:

using MyNamespace.Resources

...

string someString = strings.someString;

Но теперь я хочу иметь возможность определить имя строки в вызове, что-то вроде этого:

string someString = GetString("someString");

Я немного играл с ResourceManager, но я не могу найти способ перенаправить его в мой файл strings.resx.

Как это сделать?

4b9b3361

Ответ 1

Небольшой поиск сделал трюк. У меня есть право ResourceManager, доступное в моем классе strings:

ResourceManager rm = strings.ResourceManager;
string someString = rm.GetString("someString");

Ответ 2

ResourceManager.GetString должен делать.

Вырезанный пример из MSDN:

ResourceManager rm = new ResourceManager("RootResourceName",
                                         typeof(SomeClass).Assembly);
string someString = rm.GetString("someString");

Ответ 3

У меня была такая же проблема с использованием ASP.NET Core MVC и удалось решить ее с помощью

ResourceManager rm = new ResourceManager(typeof(YourResourceClass));
string someString = rm.GetString("someString");

Очень похоже на решение @Vlad, но в остальном я имел MissingManifestResourceException

Ответ 4

Вы можете написать статический метод следующим образом:

public static string GetResourceTitle<T>(string key)
{
  ResourceManager rm = new ResourceManager(typeof(T));
  string someString = rm.GetString(key);
  return someString;
}

И звоните куда угодно:

var title=  GetResourceTitle<*YouResourceClass*>(key);

Это полезно, если вы хотите иметь общую функцию для получения String любого файла ресурсов.

Ответ 5

Существует гораздо более простой способ сделать это

 [NameOfyourResxfile].ResourceManager.GetString("String Name");

в твоем случае

strings.resx.ResourceManager.GetString("someString");