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


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

11 76

11 ответов:

этот пример из страница 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's current culture setting.
String str = rm.GetString("welcome");

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

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

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

resx content example

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

Ubersoft.WidgetPro.Properties.Resources.RESPONSE_SEARCH_WILFRED

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

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

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

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

using System.Resources;

открыть .resx-файл и установите" модификатор доступа " в Public.

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

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

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

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

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

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

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

Если по какой-то причине вы не можете поместить файлы resources в App_GlobalResources, то вы можете открыть файлы resources непосредственно с помощью 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 "";
   }

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

я добавил .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 - это ключ.

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

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

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

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

  1. создайте системную папку App_GlobalResources и добавьте в нее файл ресурсов, например сообщения.resx
  2. создать записи в файле ресурсов, например, ErrorMsg = это ошибка.
  3. затем для доступа к этой записи: string errormsg = Resources.Сообщения.ErrorMsg