Comment lire la chaîne d'un fichier .resx en c #? s'il vous plaît envoyez-moi des directives. pas à pas
Cet exemple provient de la page MSDN sur 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");
Gestionnaire de ressources ne devrait pas être nécessaire, sauf si vous chargez à partir d'une ressource externe. Pour la plupart des choses, supposons que vous ayez créé un projet (DLL, WinForms, peu importe), il vous suffit d'utiliser l'espace de nom du projet, "Ressources" et l'identifiant de la ressource. par exemple:
En supposant un espace de nom de projet: UberSoft.WidgetPro
Et votre resx contient:
Vous pouvez simplement utiliser:
Ubersoft.WidgetPro.Properties.Resources.RESPONSE_SEARCH_WILFRED
Essayez ceci, fonctionne pour moi .. simple
Supposons que le nom de votre fichier de ressources soit "TestResource.resx" et que vous souhaitez ensuite transmettre la clé de manière dynamique.
string resVal = TestResource.ResourceManager.GetString(dynamicKeyVal);
Ajouter un espace de noms
using System.Resources;
Ouvrez le fichier .resx et définissez "Access Modifier" sur Public.
var <Variable Name> = Properties.Resources.<Resource Name>
En supposant que le fichier .resx ait été ajouté à l'aide de Visual Studio sous les propriétés du projet, il existe un moyen plus facile et moins sujet aux erreurs d'accéder à la chaîne.
Accéder à la chaîne est alors aussi simple que:
var resourceManager = JoshCodes.Core.Testing.Unit.Properties.Resources.ResourceManager;
var exampleXmlString = resourceManager.GetString("exampleXml");
Remplacer JoshCodes.Core.Testing.Unit
avec l'espace de noms par défaut du projet.
Suivi par @JeffH answer, je recommande d'utiliser typeof()
plutôt que la chaîne nom de l'assembly.
var rm = new ResourceManager(typeof(YourAssembly.Properties.Resources));
string message = rm.GetString("NameOfKey", CultureInfo.CreateSpecificCulture("ja-JP"));
Si, pour une raison quelconque, vous ne pouvez pas placer vos fichiers de ressources dans App_GlobalResources, vous pouvez ouvrir les fichiers de ressources directement à l'aide de ResXResourceReader ou d'un lecteur XML.
Voici un exemple de code d'utilisation de 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 "";
}
Une fois que vous avez ajouté une ressource (Nom: NomRessource et Valeur: ValeurRessource) à la solution/Assembly, vous pouvez simplement utiliser "Properties.Resources.ResourceName" pour obtenir la ressource requise.
J'ai ajouté le fichier .resx via Visual Studio. Cela a créé un designer.cs
fichier avec propriétés pour renvoyer immédiatement la valeur de la clé que je voulais. Par exemple, il s'agit d'un code généré automatiquement à partir du fichier de concepteur.
/// <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);
}
}
De cette façon, j'ai pu faire simplement:
string message = Errors.MyErrorMessage;
Où Errors
est le Errors.resx
fichier créé par Visual Studio et MyErrorMessage
est la clé.
J'ai ajouté mon fichier de ressources à mon projet directement, et j'ai donc pu accéder aux chaînes contenues parfaitement avec le nom du fichier resx.
Exemple: dans Resource1.resx, clé "resourceKey" -> chaîne "dataString". Pour obtenir la chaîne "dataString", je viens de mettre Resource1.resourceKey.
Il y a peut-être des raisons de ne pas faire cela que je ne connais pas, mais cela a fonctionné pour moi.
La façon la plus simple de faire ceci est:
Créez un gestionnaire de ressources pour récupérer des ressources.
ResourceManager rm = new ResourceManager("param1",Assembly.GetExecutingAssembly());
String str = rm.GetString("param2");
param1 = "AssemblyName.ResourceFolderName.ResourceFileName"
param2 = nom de la chaîne à extraire du fichier de ressources
Le moyen le plus simple d'obtenir de la valeur à partir d'un fichier de ressources. Ajouter un fichier de ressources dans le projet. Maintenant, récupérez la chaîne à ajouter, comme dans mon cas, il s'agissait d'un bloc de texte (SilverLight). Pas besoin d'ajouter un espace de noms aussi. Cela fonctionne très bien dans mon cas.
txtStatus.Text = Constants.RefractionUpdateMessage;
Constants est le nom de mon fichier de ressources dans le projet .