Schauen Sie sich diesen Link an, er sollte helfen.
Adriaan Stander
15
Warum? Wenn sie mich bei meinen Fragen nicht zufrieden stellten, warum muss ich dann falsche Vorschläge annehmen?
Red Swan
1
Wenn die .resx-Datei mit Visual Studio unter den Projekteigenschaften hinzugefügt wurde, finden Sie in meiner Antwort eine einfachere und weniger fehleranfällige Möglichkeit, auf die Zeichenfolge zuzugreifen.
// Create a resource manager to retrieve resources.ResourceManager rm =newResourceManager("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");
Auf der MSDN-Seite habe ich verwiesen auf: baseName Der Stammname der Ressourcendatei ohne Erweiterung, jedoch mit vollständig qualifiziertem Namespace-Namen. Der Stammname für die Ressourcendatei mit dem Namen MyApplication.MyResource.en-US.resources lautet beispielsweise MyApplication.MyResource.
JeffH
1
items == Namespace der Ressourcendatei
7
schlechtes Beispiel: Sie sollten erklären, dass Elemente Namespace + Root-Typ der Ressource sind
ActiveX
Sie benötigen nur, ResourceManagerwenn Sie eine externe Ressource laden möchten. Verwenden Sie <Namespace>.Propertiesstattdessen.
Yousha Aleayoub
131
ResourceManagersollte nicht benötigt werden, es sei denn, Sie laden von einer externen Ressource.
Angenommen, Sie haben ein Projekt erstellt (DLL, WinForms usw.), verwenden Sie einfach den Projektnamespace "Ressourcen" und die Ressourcenkennung. z.B:
Angenommen, ein Projekt-Namespace: UberSoft.WidgetPro
Optional können Sie auch die Kultur angeben - nützlich, wenn Sie eine kulturspezifische Ausgabe sicherstellen möchten, die der Standardeinstellung widerspricht. zB TestResource.ResourceManager.GetString (Beschreibung, neue CultureInfo ("en-GB"));
Ian
Ich erhalte die folgende Fehlermeldung: 'Ressourcen' enthält keine Definition für 'GetString'.
Lechucico
Sie benötigen nur, ResourceManagerwenn Sie eine externe Ressource laden möchten. Verwenden Sie <Namespace>.Propertiesstattdessen.
Yousha Aleayoub
29
Öffnen Sie die .resx-Datei und setzen Sie "Access Modifier" auf Public.
Funktioniert diese Methode mit mehreren Ressourcendateien (Sprachen), weil sie überall, wo ich hinschaue, die ResourceManager-Methode verwenden, und ich frage mich, ob ich das Risiko
eingehen
1
Funktioniert nicht. Meine Ressourcendatei wird nach Properties.Resources nicht angezeigt. "Mein Dateiname", auch wenn sie auf public gesetzt ist
user1804084
27
Angenommen, die .resx-Datei wurde mit Visual Studio unter den Projekteigenschaften hinzugefügt, gibt es eine einfachere und weniger fehleranfällige Möglichkeit, auf die Zeichenfolge zuzugreifen.
Wenn Sie die .resx-Datei im Projektmappen-Explorer erweitern, sollte eine .Designer.cs-Datei angezeigt werden.
Beim Öffnen verfügt die Datei .Designer.cs über einen Eigenschaften-Namespace und eine interne Klasse. In diesem Beispiel wird angenommen, dass die Klasse Ressourcen heißt.
Der Zugriff auf die Zeichenfolge ist dann so einfach wie:
var resourceManager =JoshCodes.Core.Testing.Unit.Properties.Resources.ResourceManager;var exampleXmlString = resourceManager.GetString("exampleXml");
Durch JoshCodes.Core.Testing.Unitden Standard-Namespace des Projekts ersetzen .
Ersetzen Sie "exampleXml" durch den Namen Ihrer Zeichenfolgenressource.
Wenn Sie Ihre Ressourcendateien aus irgendeinem Grund nicht in App_GlobalResources ablegen können, können Sie Ressourcendateien direkt mit ResXResourceReader oder einem XML-Reader öffnen.
Hier ist ein Beispielcode für die Verwendung des ResXResourceReader:
publicstaticstringGetResourceString(stringResourceName,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 nameList<string> resourceFileNameList =newList<string>();DirectoryInfo resourceDir =newDirectoryInfo(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 culturestring 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;}elseif(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.aspxResXResourceReader rsxr =newResXResourceReader(featureDirectory +"\\"+ strResourceFileName);//IDictionaryEnumerator idenumerator = rsxr.GetEnumerator();foreach(DictionaryEntry d in rsxr){if(d.Key.ToString().ToLower()== strKey.ToLower()){return d.Value.ToString();}}return"";}
Vielen Dank, beachten Sie, dass Sie einen Verweis hinzufügen müssen, um System.Windows.Formszu verwenden System.Resources.ResXResourceReader. Sie können var enumerator = rsxr.OfType<DictionaryEntry>();stattdessen auch LINQ verwenden.
Dunc
Es ist sehr schwierig, Artikel oder Beiträge zum "Lesen, Parsen und Laden" einer Resx-Datei zu finden. Alles, was Sie erhalten, ist "Verwenden Sie den Resx als Container für die Zeichenfolgen Ihres Projekts". Vielen Dank für diese Antwort!
Simone
9
Sobald Sie der Lösung / Assembly eine Ressource (Name: Ressourcenname und Wert: ResourceValue) hinzugefügt haben, können Sie einfach "Properties.Resources.ResourceName" verwenden, um die erforderliche Ressource abzurufen.
Ich habe die .resx-Datei über Visual Studio hinzugefügt. Dadurch wurde eine designer.csDatei mit Eigenschaften erstellt, die sofort den Wert eines beliebigen Schlüssels zurückgibt. Dies ist beispielsweise 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>publicstaticstringMyErrorMessage{get{returnResourceManager.GetString("MyErrorMessage", resourceCulture);}}
Auf diese Weise konnte ich einfach Folgendes tun:
string message =Errors.MyErrorMessage;
Wo Errorswird die Errors.resxDatei über Visual Studio erstellt und MyErrorMessageist der Schlüssel.
Ja, ich habe gerade VS2015 gemacht. Klicken Sie mit der rechten Maustaste, fügen Sie die Datei "Ressourcen" hinzu, und alle Schlüssel werden "dottable". Auf "MyResx.resx" mit einem Schlüssel "Script" kann also wie auf einen String zugegriffen werden scriptValue = MyResx.Script;
emery.noel
5
Ich habe meine Ressourcendatei direkt zu meinem Projekt hinzugefügt, sodass ich mit dem Namen der Resx-Datei problemlos auf die darin enthaltenen Zeichenfolgen zugreifen konnte.
Beispiel: Geben Sie in Resource1.resx den Schlüssel "resourceKey" -> string "dataString" ein. Um die Zeichenfolge "dataString" zu erhalten, habe ich einfach Resource1.resourceKey eingefügt.
Es mag Gründe geben, dies nicht zu tun, von denen ich nichts weiß, aber es hat bei mir funktioniert.
Der einfachste Weg, um Wert aus der Ressourcendatei zu erhalten. Fügen Sie dem Projekt eine Ressourcendatei hinzu. Holen Sie sich nun die Zeichenfolge, die Sie hinzufügen möchten, wie in meinem Fall ein Textblock (SilverLight). Es ist auch nicht erforderlich, einen Namespace hinzuzufügen. In meinem Fall funktioniert es einwandfrei
txtStatus.Text=Constants.RefractionUpdateMessage;
Konstanten ist mein Ressourcendateiname im Projekt.
Antworten:
Dieses Beispiel stammt von der MSDN-Seite in ResourceManager.GetString () :
quelle
ResourceManager
wenn Sie eine externe Ressource laden möchten. Verwenden Sie<Namespace>.Properties
stattdessen.ResourceManager
sollte nicht benötigt werden, es sei denn, Sie laden von einer externen Ressource.Angenommen, Sie haben ein Projekt erstellt (DLL, WinForms usw.), verwenden Sie einfach den Projektnamespace "Ressourcen" und die Ressourcenkennung. z.B:
Angenommen, ein Projekt-Namespace:
UberSoft.WidgetPro
Und dein Resx enthält:
Sie können einfach verwenden:
quelle
Versuchen Sie dies, funktioniert für mich .. einfach
Angenommen, Ihr Ressourcendateiname lautet "TestResource.resx" und Sie möchten den Schlüssel dann dynamisch übergeben.
Namespace hinzufügen
quelle
ResourceManager
wenn Sie eine externe Ressource laden möchten. Verwenden Sie<Namespace>.Properties
stattdessen.Öffnen Sie die .resx-Datei und setzen Sie "Access Modifier" auf Public.
quelle
Angenommen, die .resx-Datei wurde mit Visual Studio unter den Projekteigenschaften hinzugefügt, gibt es eine einfachere und weniger fehleranfällige Möglichkeit, auf die Zeichenfolge zuzugreifen.
Der Zugriff auf die Zeichenfolge ist dann so einfach wie:
Durch
JoshCodes.Core.Testing.Unit
den Standard-Namespace des Projekts ersetzen .quelle
Gefolgt von @ JeffH Antwort, empfehle ich,
typeof()
als String Assembly Name zu verwenden.quelle
Wenn Sie Ihre Ressourcendateien aus irgendeinem Grund nicht in App_GlobalResources ablegen können, können Sie Ressourcendateien direkt mit ResXResourceReader oder einem XML-Reader öffnen.
Hier ist ein Beispielcode für die Verwendung des ResXResourceReader:
quelle
System.Windows.Forms
zu verwendenSystem.Resources.ResXResourceReader
. Sie könnenvar enumerator = rsxr.OfType<DictionaryEntry>();
stattdessen auch LINQ verwenden.Sobald Sie der Lösung / Assembly eine Ressource (Name: Ressourcenname und Wert: ResourceValue) hinzugefügt haben, können Sie einfach "Properties.Resources.ResourceName" verwenden, um die erforderliche Ressource abzurufen.
quelle
Ich habe die .resx-Datei über Visual Studio hinzugefügt. Dadurch wurde eine
designer.cs
Datei mit Eigenschaften erstellt, die sofort den Wert eines beliebigen Schlüssels zurückgibt. Dies ist beispielsweise ein automatisch generierter Code aus der Designer-Datei.Auf diese Weise konnte ich einfach Folgendes tun:
Wo
Errors
wird dieErrors.resx
Datei über Visual Studio erstellt undMyErrorMessage
ist der Schlüssel.quelle
Ich habe meine Ressourcendatei direkt zu meinem Projekt hinzugefügt, sodass ich mit dem Namen der Resx-Datei problemlos auf die darin enthaltenen Zeichenfolgen zugreifen konnte.
Beispiel: Geben Sie in Resource1.resx den Schlüssel "resourceKey" -> string "dataString" ein. Um die Zeichenfolge "dataString" zu erhalten, habe ich einfach Resource1.resourceKey eingefügt.
Es mag Gründe geben, dies nicht zu tun, von denen ich nichts weiß, aber es hat bei mir funktioniert.
quelle
Der einfachste Weg, dies zu tun, ist:
quelle
Der einfachste Weg, um Wert aus der Ressourcendatei zu erhalten. Fügen Sie dem Projekt eine Ressourcendatei hinzu. Holen Sie sich nun die Zeichenfolge, die Sie hinzufügen möchten, wie in meinem Fall ein Textblock (SilverLight). Es ist auch nicht erforderlich, einen Namespace hinzuzufügen. In meinem Fall funktioniert es einwandfrei
Konstanten ist mein Ressourcendateiname im Projekt.
quelle
Erstellen Sie einen Ressourcenmanager, um Ressourcen abzurufen.
quelle
Das funktioniert bei mir. Angenommen, Sie haben eine Datei strings.resx mit der Zeichenfolge ok. um es zu lesen
quelle