Frage Lesezeichenkette aus .resx Datei in C #


Wie liest man die Zeichenfolge aus der .resx-Datei in c #? Bitte senden Sie mir Richtlinien. Schritt für Schritt


75
2017-10-02 09:29


Ursprung


Antworten:


Dieses Beispiel stammt aus der MSDN-Seite auf 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");

70
2017-10-15 16:07



Der Ressourcenmanager sollte nicht benötigt werden, es sei denn, Sie laden von einer externen Ressource. Für die meisten Dinge, sagen Sie, dass Sie ein Projekt erstellt haben (DLL, WinForms, was auch immer), verwenden Sie einfach den Projektnamensraum, "Ressourcen" und die Ressourcen-ID. z.B:

Einen Projektnamensraum annehmen: UberSoft.WidgetPro

Und dein Resx enthält:

resx content example

Sie können einfach verwenden:

Ubersoft.WidgetPro.Properties.Resources.RESPONSE_SEARCH_WILFRED

68
2017-12-10 22:04



Versuchen Sie das, funktioniert für mich .. einfach

Angenommen, der Ressourcendateiname lautet "TestResource.resx" und Sie möchten den Schlüssel dann dynamisch übergeben.

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

Hinzufügen eines Namespace

using System.Resources;

40
2018-03-19 00:48



Öffne die .resx Datei und setze "Access Modifier" auf Public.

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

24
2017-07-16 20:50



Angenommen, die .resx-Datei wurde mithilfe von Visual Studio unter den Projekteigenschaften hinzugefügt, und es gibt eine einfachere und weniger fehleranfällige Methode für den Zugriff auf die Zeichenfolge.

  1. Das Erweitern der RESX-Datei in dem Projektmappen-Explorer sollte eine .Designer.cs-Datei anzeigen.
  2. Beim Öffnen hat die Datei .Designer.cs einen Eigenschaften-Namespace und eine interne Klasse. In diesem Beispiel wird angenommen, dass die Klasse Resources heißt.
  3. Der Zugriff auf die Zeichenfolge ist dann so einfach wie:

    var resourceManager = JoshCodes.Core.Testing.Unit.Properties.Resources.ResourceManager;
    var exampleXmlString = resourceManager.GetString("exampleXml");
    
  4. Ersetzen JoshCodes.Core.Testing.Unit mit dem Standard-Namespace des Projekts.

  5. Ersetzen Sie "exampleXml" durch den Namen Ihrer Zeichenfolgenressource.

20
2017-08-13 16:38



Gefolgt von @ Jeff Antwort, empfehle ich zu verwenden typeof() als String-Assemblyname.

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

13
2017-10-13 13:28



Wenn Sie Ihre Ressourcendateien aus irgendeinem Grund nicht in App_GlobalResources platzieren können, können Sie Ressourcendateien direkt mit ResXResourceReader oder einem XML Reader öffnen.

Hier ist ein Beispielcode für die Verwendung des 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
2018-04-27 09:15



Sobald Sie der Lösung / Baugruppe eine Ressource (Name: ResourceName und Value: ResourceValue) hinzugefügt haben, können Sie einfach "Properties.Resources.ResourceName" verwenden, um die erforderliche Ressource abzurufen.


7
2018-02-17 12:52



Ich habe die .resx-Datei über Visual Studio hinzugefügt. Dies erstellt ein designer.cs Datei mit Eigenschaften, um sofort den Wert eines beliebigen Schlüssels zurückzugeben. Dies ist zum Beispiel ein automatisch generierter Code aus der Designer-Datei.

/// <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);
    }
}

Auf diese Weise konnte ich einfach tun:

string message = Errors.MyErrorMessage;

Woher Errors ist der Errors.resx Datei erstellt über Visual Studio und MyErrorMessage ist der Schlüssel.


5
2017-10-03 18:23



Ich habe meine Ressourcendatei direkt zu meinem Projekt hinzugefügt, und so war ich in der Lage, auf die Strings innerhalb des resx-Dateinamens zuzugreifen.

Beispiel: in Resource1.resx, Schlüssel "resourceKey" -> String "dataString". Um den String "dataString" zu erhalten, habe ich einfach Resource1.resourceKey gesetzt.

Es kann Gründe geben, dies nicht zu tun, von denen ich nichts weiß, aber es hat für mich funktioniert.


4
2017-07-23 17:14



Der einfachste Weg dies zu tun ist:

  1. Erstellen Sie einen App_GlobalResources-Systemordner und fügen Sie ihm eine Ressourcendatei hinzu, z. Nachrichten.resx
  2. Erstellen Sie Ihre Einträge in der Ressourcendatei, z. ErrorMsg = Dies ist ein Fehler.
  3. Um dann auf diesen Eintrag zuzugreifen: string errormsg = Resources.Messages.ErrorMsg

2
2018-01-26 16:47