从C#中的.resx文件中读取字符串

时间:2009-10-02 09:29:46

标签: c# .net string

如何从c#中读取.resx文件中的字符串?请寄给我指导。一步一步

14 个答案:

答案 0 :(得分:95)

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

假设项目命名空间:UberSoft.WidgetPro

你的resx包含:

resx content example

你可以使用:

Ubersoft.WidgetPro.Properties.Resources.RESPONSE_SEARCH_WILFRED

答案 1 :(得分:70)

此示例来自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");

答案 2 :(得分:44)

试试这个,对我有用..简单

假设您的资源文件名是" TestResource.resx",并且您想要动态传递密钥,

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

添加命名空间

using System.Resources;

答案 3 :(得分:26)

打开.resx文件并将“Access Modifier”设置为Public。

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

答案 4 :(得分:22)

假设在项目属性下使用Visual Studio添加了.resx文件,则访问该字符串的方法更容易且更不容易出错。

  1. 在解决方案资源管理器中展开.resx文件应显示.Designer.cs文件。
  2. 打开时,.Designer.cs文件具有Properties命名空间和内部类。对于此示例,假设该类名为Resources。
  3. 访问字符串非常简单:

    var resourceManager = JoshCodes.Core.Testing.Unit.Properties.Resources.ResourceManager;
    var exampleXmlString = resourceManager.GetString("exampleXml");
    
  4. JoshCodes.Core.Testing.Unit替换为项目的默认命名空间。

  5. 将“exampleXml”替换为字符串资源的名称。

答案 5 :(得分:15)

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

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

答案 6 :(得分:9)

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

答案 7 :(得分:8)

将一个资源(Name:ResourceName和Value:ResourceValue)添加到解决方案/程序集后,您只需使用&#34; Properties.Resources.ResourceName&#34;获得所需的资源。

答案 8 :(得分:6)

我通过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是通过Visual Studio创建的Errors.resx文件,而MyErrorMessage是关键。

答案 9 :(得分:5)

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

示例:在Resource1.resx中,键&#34; resourceKey&#34; - &GT; string&#34; dataString&#34;。 要获取字符串&#34; dataString&#34;,我只需要放置Resource1.resourceKey。

可能有理由不这样做,我不知道,但它对我有用。

答案 10 :(得分:3)

最简单的方法是:

  1. 创建App_GlobalResources系统文件夹并向其添加资源文件,例如Messages.resx
  2. 在资源文件中创建条目,例如ErrorMsg =这是一个错误。
  3. 然后访问该条目:string errormsg = Resources.Messages.ErrorMsg

答案 11 :(得分:1)

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

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

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

param1 =“ AssemblyName.ResourceFolderName.ResourceFileName”

     

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

答案 12 :(得分:0)

从资源文件获取价值的最简单方法。 在项目中添加资源文件。 现在获取要添加到的字符串,在我的情况下是文本块(SilverLight)。 无需添加任何名称空间。在我看来,它可以正常工作

txtStatus.Text = Constants.RefractionUpdateMessage;

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

答案 13 :(得分:0)

这对我有用。 说您有一个string.resx文件,其中包含字符串ok。阅读

String varOk = My.Resources.strings.ok