read string from .resx file in C#

How to read the string from .resx file in c#? please send me guidelines . step by step

243284 次浏览

这个例子来自 MSDN page on 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");

打开.resx 文件,并将“ Access 修饰符”设置为 Public。

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

除非从 外部资源加载,否则不需要 ResourceManager
对于大多数情况,假设您已经创建了一个项目(DLL、 WinForms 等等) ,您只需使用项目名称空间、“ Resources”和资源标识符。例如:

Assuming a project namespace: UberSoft.WidgetPro

你的雷斯克斯包含:

resx content example

You can just use:

Ubersoft.WidgetPro.Properties.Resources.RESPONSE_SEARCH_WILFRED

假设。使用 VisualStudio 在项目属性下添加 resx 文件时,有一种更容易和更少出错的方法来访问字符串。

  1. 在解决方案资源管理器中展开. resx 文件应该会显示一个. Designer.cs 文件。
  2. 当打开时,。Cs 文件有一个 Properties 命名空间和一个内部类。对于本例,假设该类名为 Resources。
  3. 那么访问字符串就像下面这样简单:

    var resourceManager = JoshCodes.Core.Testing.Unit.Properties.Resources.ResourceManager;
    var exampleXmlString = resourceManager.GetString("exampleXml");
    
  4. Replace JoshCodes.Core.Testing.Unit with the project's default namespace.

  5. Replace "exampleXml" with the name of your string resource.

最简单的方法是:

  1. Create an App_GlobalResources system folder and add a resource file to it e.g. Messages.resx
  2. 在资源文件中创建条目,例如 ErrorMsg = 这是一个错误。
  3. 然后访问该条目: string ErrorMsg = Resources.Messages.ErrorMsg

试试这个,对我来说很简单

假设您的资源文件名是“ TestResource.resx”,然后您想动态地传递键,

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

添加命名空间

using System.Resources;

我添加了。通过 Visual Studio 的 resx 文件。这样就创建了一个包含属性的 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是通过 VisualStudio 创建的 Errors.resx文件,而 MyErrorMessage是关键。

后跟@JeffH 回答,我建议使用 typeof()而不是字符串程序集名称。

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

如果由于某种原因无法将资源文件放在 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 "";
}

我直接将我的资源文件添加到我的项目中,因此我能够使用 resx 文件名访问其中的字符串。

示例: 在 Resource1.resx 中,键“ resource ceKey”-> string“ dataString”。 要获取字符串“ dataString”,我只需要将 Resource1.resources 键。

也许有我不知道的理由不这么做,但这对我很有效。

将资源(Name: ResourceName 和 Value: ResourceValue)添加到解决方案/程序集后,可以简单地使用“ Properties”。资源。“ ResourceName”获取所需的资源。

从资源文件获取价值的最简单方法。 在项目中添加资源文件。 Now get the string where you want to add like in my case it was text block(SilverLight). 也不需要添加任何名称空间。在我的例子中它工作得很好

txtStatus.Text = Constants.RefractionUpdateMessage;

常量是项目中的资源文件名。Here how my resource file look like

创建资源管理器以检索资源。

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


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

Param1 = “ AssemblyName.ResourceFolderName.ResourceFileName”

Param2 = 要从资源文件中检索的字符串的名称

这对我有用。 假设您有一个 strings.resx 文件,其中包含 string ok

String varOk = My.Resources.strings.ok
  1. ResourceFileName.ResourceManager.GetString (ResourceFileName.Name)

2. 返回资源