Читать строку из файла .resx в С#

Как читать строку из .resx файла в С#? пришлите мне рекомендации. шаг за шагом

Ответ 1

Этот пример приведен на странице MSDN в ResourceManager.GetString():

// Create a resource manager to retrieve resources.
ResourceManager rm = new ResourceManager("items", Assembly.GetExecutingAssembly());

// Retrieve the value of the string resource named "welcome".
// The resource manager will retrieve the value of the  
// localized resource using the caller current culture setting.
String str = rm.GetString("welcome");

Ответ 2

Менеджер ресурсов не нужен, если вы не загружаетесь с внешнего ресурса. Для большинства вещей, скажем, вы создали проект (DLL, WinForms, независимо), вы просто используете пространство имен проектов, "Ресурсы" и идентификатор ресурса. например:

Предполагая пространство имен проекта: UberSoft.WidgetPro

И ваш resx содержит:

resx content example

Вы можете просто использовать:

Ubersoft.WidgetPro.Properties.Resources.RESPONSE_SEARCH_WILFRED

Ответ 3

Попробуйте это, работает для меня.. просто

Предположим, что ваше имя файла ресурса - "TestResource.resx", и вы хотите динамически передавать ключ,

string resVal = TestResource.ResourceManager.GetString(dynamicKeyVal);

Добавить пространство имен

using System.Resources;

Ответ 4

Откройте файл .resx и установите для параметра "Модификатор доступа" значение "Общий".

var <Variable Name> = Properties.Resources.<Resource Name>

Ответ 5

Предполагая, что файл .resx был добавлен с использованием Visual Studio в свойствах проекта, существует более простой и менее подверженный ошибкам способ доступа к строке.

  • Расширение файла .resx в обозревателе решений должно содержать файл .Designer.cs.
  • При открытии файл .Designer.cs имеет пространство имен свойств и внутренний класс. Для этого примера предположим, что класс называется Resources.
  • Доступ к строке тогда прост, как:

    var resourceManager = JoshCodes.Core.Testing.Unit.Properties.Resources.ResourceManager;
    var exampleXmlString = resourceManager.GetString("exampleXml");
    
  • Замените JoshCodes.Core.Testing.Unit пространством имен по умолчанию проекта.

  • Замените "exampleXml" на имя вашего ресурса строки.

Ответ 6

В ответ на @JeffH я рекомендую использовать typeof(), чем имя сборки строки.

    var rm = new ResourceManager(typeof(YourAssembly.Properties.Resources));
    string message = rm.GetString("NameOfKey", CultureInfo.CreateSpecificCulture("ja-JP"));

Ответ 7

Если по какой-то причине вы не можете поместить свои файлы ресурсов в App_GlobalResources, вы можете открывать файлы ресурсов напрямую с помощью ResXResourceReader или XML Reader.

Здесь пример кода для использования ResXResourceReader:

   public static string GetResourceString(string ResourceName, string strKey)
   {


       //Figure out the path to where your resource files are located.
       //In this example, I'm figuring out the path to where a SharePoint feature directory is relative to a custom SharePoint layouts subdirectory.  

       string currentDirectory = Path.GetDirectoryName(HttpContext.Current.Server.MapPath(HttpContext.Current.Request.ServerVariables["SCRIPT_NAME"]));

       string featureDirectory = Path.GetFullPath(currentDirectory + "\\..\\..\\..\\FEATURES\\FEATURENAME\\Resources");

       //Look for files containing the name
       List<string> resourceFileNameList = new List<string>();

       DirectoryInfo resourceDir = new DirectoryInfo(featureDirectory);

       var resourceFiles = resourceDir.GetFiles();

       foreach (FileInfo fi in resourceFiles)
       {
           if (fi.Name.Length > ResourceName.Length+1 && fi.Name.ToLower().Substring(0,ResourceName.Length + 1) == ResourceName.ToLower()+".")
           {
               resourceFileNameList.Add(fi.Name);

           }
        }

       if (resourceFileNameList.Count <= 0)
       { return ""; }


       //Get the current culture
       string strCulture = CultureInfo.CurrentCulture.Name;

       string[] cultureStrings = strCulture.Split('-');

       string strLanguageString = cultureStrings[0];


       string strResourceFileName="";
       string strDefaultFileName = resourceFileNameList[0];
       foreach (string resFileName in resourceFileNameList)
       {
           if (resFileName.ToLower() == ResourceName.ToLower() + ".resx")
           {
               strDefaultFileName = resFileName;
           }

           if (resFileName.ToLower() == ResourceName.ToLower() + "."+strCulture.ToLower() + ".resx")
           {
               strResourceFileName = resFileName;
               break;
           }
           else if (resFileName.ToLower() == ResourceName.ToLower() + "." + strLanguageString.ToLower() + ".resx")
           {
               strResourceFileName = resFileName;
               break;
           }
       }

       if (strResourceFileName == "")
       {
           strResourceFileName = strDefaultFileName;
       }



       //Use resx resource reader to read the file in.
       //https://msdn.microsoft.com/en-us/library/system.resources.resxresourcereader.aspx

       ResXResourceReader rsxr = new ResXResourceReader(featureDirectory + "\\"+ strResourceFileName);         

       //IDictionaryEnumerator idenumerator = rsxr.GetEnumerator();
       foreach (DictionaryEntry d in rsxr)
       {
           if (d.Key.ToString().ToLower() == strKey.ToLower())
           {
               return d.Value.ToString();
           }
       }


       return "";
   }

Ответ 8

Как только вы добавите ресурс (Name: ResourceName и Value: ResourceValue) в решение/сборку, вы можете просто использовать "Properties.Resources.ResourceName", чтобы получить требуемый ресурс.

Ответ 9

Я добавил файл .resx через Visual Studio. Это создало файл designer.cs со свойствами для немедленного возврата значения любой желаемой клавиши. Например, это некоторый автоматически сгенерированный код из файла конструктора.

/// <summary>
///   Looks up a localized string similar to When creating a Commissioning change request, you must select valid Assignees, a Type, a Component, and at least one (1) affected unit..
/// </summary>
public static string MyErrorMessage {
    get {
        return ResourceManager.GetString("MyErrorMessage", resourceCulture);
    }
}

Таким образом, я смог просто сделать:

string message = Errors.MyErrorMessage;

Где Errors - это файл Errors.resx, созданный с помощью Visual Studio, и MyErrorMessage - это ключ.

Ответ 10

Я добавил свой файл ресурсов в свой проект напрямую, и поэтому мне удалось получить доступ к строкам внутри, просто с именем файла resx.

Пример: в Resource1.resx, key "resourceKey" → string "dataString". Чтобы получить строку "dataString", я просто поставлю Resource1.resourceKey.

Могут быть причины не делать этого, о которых я не знаю, но это сработало для меня.

Ответ 11

Самый простой способ сделать это:

  • Создайте системную папку App_GlobalResources и добавьте к ней файл ресурсов, например. Messages.resx
  • Создайте свои записи в файле ресурсов, например. ErrorMsg = Это ошибка.
  • Затем для доступа к этой записи: строка errormsg = Resources.Messages.ErrorMsg

Ответ 12

Самый простой способ получить значение из файла ресурсов. Добавить файл ресурсов в проект. Теперь получите строку, куда вы хотите добавить, как в моем случае это был текстовый блок (SilverLight). Не нужно также добавлять пространство имен. В моем случае это нормально работает

txtStatus.Text = Constants.RefractionUpdateMessage;

Константы - это имя моего файла ресурсов в проекте.Here how my resource file look like

Ответ 13

Создайте менеджер ресурсов для получения ресурсов.

ResourceManager rm = new ResourceManager("param1",Assembly.GetExecutingAssembly());

String str = rm.GetString("param2");

param1 = "AssemblyName.ResourceFolderName.ResourceFileName"

param2 = имя строки, которую нужно извлечь из файла ресурсов