Инициализируйте ResourceManager динамически
У меня есть эта функция, и она прекрасно работает, чтобы получить переведенное значение из этого конкретного файла ресурсов с именем OkayMessages.
public static string GetResourceString(string resourceKey){
ResourceManager resourceManager = Resources.OkayMessages.ResourceManager;
return resourceManager.GetString(resourceKey);
}
Но у меня есть более 1 файла ресурсов, и я хочу, чтобы эта функция также получала значения из этих файлов. Только у меня проблемы с динамическим / программным выбором правильного ресурса (менеджер). Я пытался использовать код ниже, и некоторые варианты, но я всегда получаю сообщение об ошибке.
public static string GetResourceString(string resourceFile, string resourceKey){
ResourceManager resourceManager = new System.Resources.ResourceManager("Resources." + resourceFile, Assembly.GetExecutingAssembly());
return resourceManager.GetString(resourceKey);
}
В большинстве случаев я получал ошибку: не удалось найти ресурсы, подходящие для указанной культуры или нейтральной культуры. Убедитесь, что "Resources.OkayMessages.resources" правильно встроен или связан с сборкой.
Обновление: я использую папку \App_GlobalResources\ для своих файлов ресурсов, и кажется, что это проблема. Когда я помещаю файл ресурсов в корень моего проекта, я могу без проблем инициализировать ResourceManager.
2 ответа
Пройдя некоторое время в неправильном направлении, я просто нашел самый простой ответ на эту проблему. Оказывается, есть метод GetGlobalResourceObject
,
Так что в моем случае я сейчас использую эту строку кода, которая делает все:
GetGlobalResourceObject("OkayMessages", "PasswordChanged").ToString();
Внимательно прочитайте эту статью, и вы обнаружите, что вам нужно указать правильное пространство имен ресурса. Это твоя проблема. Вот рабочий пример, если OkayResources.resx находится в корневой папке проекта:
using System.Reflection;
using System.Resources;
using System.Web.UI;
namespace WebApplication1
{
public partial class _Default : Page
{
public _Default()
{
var result = GetResourceString("OkayResources", "SomeKey");
}
private static string GetResourceString(string resourceFileName, string key)
{
var resourceName = "WebApplication1." + resourceFileName;
var resourceManager = new ResourceManager(resourceName, Assembly.GetExecutingAssembly());
return resourceManager.GetString(key);
}
}
}
Если вы поместите файл ресурсов в папку "Ресурсы", вам придется обновить пространство имен ресурса:
var resourceName = "WebApplication1.Resources." + resourceFileName;