pourquoi? s'ils ne m'ont pas satisfait sur mes questions, alors pourquoi je dois accepter de fausses suggestions?
Red Swan
1
Si le fichier .resx a été ajouté à l'aide de Visual Studio sous les propriétés du projet, consultez ma réponse pour un moyen plus simple et moins sujet aux erreurs d'accéder à la chaîne.
// 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");
À partir de la page MSDN que j'ai référencée: baseName Le nom racine du fichier de ressources sans son extension mais incluant tout nom d'espace de noms complet. Par exemple, le nom racine du fichier de ressources nommé MyApplication.MyResource.en-US.resources est MyApplication.MyResource.
JeffH
1
items == namespace du fichier de ressources
7
mauvais exemple: vous devriez expliquer que les éléments sont l'espace de noms + le type racine de la ressource
ActiveX
Vous n'en avez besoin que ResourceManagerlorsque vous souhaitez charger une ressource externe. Utilisez <Namespace>.Propertiesplutôt.
Yousha Aleayoub le
131
ResourceManagerne devrait pas être nécessaire sauf si vous chargez à partir d'une ressource externe .
Pour la plupart des choses, disons que vous avez créé un projet (DLL, WinForms, peu importe), vous utilisez simplement l'espace de noms du projet, «Resources» et l'identificateur de ressource. par exemple:
En supposant un espace de noms de projet: UberSoft.WidgetPro
Vous pouvez également éventuellement spécifier la culture - utile si vous souhaitez garantir une sortie spécifique à la culture qui contredit la valeur par défaut. par exemple TestResource.ResourceManager.GetString (description, new CultureInfo ("en-GB"));
Ian
J'obtiens l'erreur suivante: «Resources» ne contient pas de définition pour «GetString».
Lechucico le
Vous n'en avez besoin que ResourceManagerlorsque vous souhaitez charger une ressource externe. Utilisez <Namespace>.Propertiesplutôt.
Yousha Aleayoub le
29
Ouvrez le fichier .resx et définissez "Access Modifier" sur Public.
cette méthode fonctionne-t-elle avec plusieurs fichiers de ressources (langues), parce que partout où je regarde, ils utilisent la méthode ResourceManager, et je me demande si je devrais risquer d'utiliser de cette façon, ou pas ...
deadManN
1
Ne marche pas. Mon fichier de ressources n'apparaît pas après Properties.Resources. "My filename" même s'il est défini sur public
user1804084
27
En supposant que le fichier .resx a été ajouté à l'aide de Visual Studio sous les propriétés du projet, il existe un moyen plus simple et moins sujet aux erreurs d'accéder à la chaîne.
Le développement du fichier .resx dans l'Explorateur de solutions doit afficher un fichier .Designer.cs.
Une fois ouvert, le fichier .Designer.cs possède un espace de noms Properties et une classe interne. Pour cet exemple, supposons que la classe s'appelle Resources.
Accéder à la chaîne est alors aussi simple que:
var resourceManager =JoshCodes.Core.Testing.Unit.Properties.Resources.ResourceManager;var exampleXmlString = resourceManager.GetString("exampleXml");
Remplacez JoshCodes.Core.Testing.Unitpar l'espace de noms par défaut du projet.
Remplacez "exampleXml" par le nom de votre ressource de chaîne.
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 pour utiliser 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"";}
Merci, notez que vous devez ajouter une référence à System.Windows.Formspour utiliser System.Resources.ResXResourceReader. En outre, vous pouvez faire var enumerator = rsxr.OfType<DictionaryEntry>();et utiliser LINQ à la place.
Dunc
Il est très difficile de trouver des articles ou des messages sur la façon de «lire, analyser et charger» un fichier resx. Tout ce que vous obtenez est "utilisez le resx comme conteneur pour les chaînes de votre projet". Merci pour cette réponse!
Simone
9
Une fois que vous avez ajouté une ressource (Nom: ResourceName et Value: ResourceValue) à 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.csfichier avec des propriétés pour renvoyer immédiatement la valeur de toute 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>publicstaticstringMyErrorMessage{get{returnResourceManager.GetString("MyErrorMessage", resourceCulture);}}
De cette façon, j'ai pu simplement faire:
string message =Errors.MyErrorMessage;
Où Errorsest le Errors.resxfichier créé via Visual Studio et MyErrorMessageest la clé.
Ouais, je viens de faire ceci est VS2015 aujourd'hui. Faites un clic droit, ajoutez le fichier "Resources" et toutes les clés deviennent "dottables". Ainsi "MyResx.resx" avec une clé "Script" est accessible comme la chaîne scriptValue = MyResx.Script;
emery.noel
5
J'ai ajouté mon fichier de ressources directement à mon projet, et j'ai donc pu accéder aux chaînes à l'intérieur très bien avec le nom de fichier resx.
Exemple: dans Resource1.resx, clé "resourceKey" -> string "dataString". Pour obtenir la chaîne "dataString", je viens de mettre Resource1.resourceKey.
Il peut y avoir des raisons de ne pas faire cela que je ne connais pas, mais cela a fonctionné pour moi.
Le moyen le plus simple d'obtenir de la valeur à partir du fichier de ressources. Ajoutez un fichier de ressources dans le projet. Maintenant, récupérez la chaîne où vous souhaitez ajouter comme dans mon cas, c'était un bloc de texte (SilverLight). Pas besoin d'ajouter un espace de noms également, cela fonctionne bien dans mon cas
txtStatus.Text=Constants.RefractionUpdateMessage;
Constantes est le nom de mon fichier de ressources dans le projet.
Réponses:
Cet exemple provient de la page MSDN sur ResourceManager.GetString () :
la source
ResourceManager
lorsque vous souhaitez charger une ressource externe. Utilisez<Namespace>.Properties
plutôt.ResourceManager
ne devrait pas être nécessaire sauf si vous chargez à partir d'une ressource externe .Pour la plupart des choses, disons que vous avez créé un projet (DLL, WinForms, peu importe), vous utilisez simplement l'espace de noms du projet, «Resources» et l'identificateur de ressource. par exemple:
En supposant un espace de noms de projet:
UberSoft.WidgetPro
Et votre resx contient:
Vous pouvez simplement utiliser:
la source
Essayez ceci, ça marche pour moi .. simple
Supposons que votre nom de fichier de ressources est "TestResource.resx" et que vous souhaitez passer la clé dynamiquement,
Ajouter un espace de noms
la source
ResourceManager
lorsque vous souhaitez charger une ressource externe. Utilisez<Namespace>.Properties
plutôt.Ouvrez le fichier .resx et définissez "Access Modifier" sur Public.
la source
En supposant que le fichier .resx a été ajouté à l'aide de Visual Studio sous les propriétés du projet, il existe un moyen plus simple et moins sujet aux erreurs d'accéder à la chaîne.
Accéder à la chaîne est alors aussi simple que:
Remplacez
JoshCodes.Core.Testing.Unit
par l'espace de noms par défaut du projet.la source
Suivi de la réponse @JeffH, je recommande d'utiliser le
typeof()
nom d'assembly de chaîne.la source
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 pour utiliser ResXResourceReader:
la source
System.Windows.Forms
pour utiliserSystem.Resources.ResXResourceReader
. En outre, vous pouvez fairevar enumerator = rsxr.OfType<DictionaryEntry>();
et utiliser LINQ à la place.Une fois que vous avez ajouté une ressource (Nom: ResourceName et Value: ResourceValue) à la solution / assembly, vous pouvez simplement utiliser "Properties.Resources.ResourceName" pour obtenir la ressource requise.
la source
J'ai ajouté le fichier .resx via Visual Studio. Cela a créé un
designer.cs
fichier avec des propriétés pour renvoyer immédiatement la valeur de toute clé que je voulais. Par exemple, il s'agit d'un code généré automatiquement à partir du fichier de concepteur.De cette façon, j'ai pu simplement faire:
Où
Errors
est leErrors.resx
fichier créé via Visual Studio etMyErrorMessage
est la clé.la source
J'ai ajouté mon fichier de ressources directement à mon projet, et j'ai donc pu accéder aux chaînes à l'intérieur très bien avec le nom de fichier resx.
Exemple: dans Resource1.resx, clé "resourceKey" -> string "dataString". Pour obtenir la chaîne "dataString", je viens de mettre Resource1.resourceKey.
Il peut y avoir des raisons de ne pas faire cela que je ne connais pas, mais cela a fonctionné pour moi.
la source
Le moyen le plus simple de procéder est:
la source
Le moyen le plus simple d'obtenir de la valeur à partir du fichier de ressources. Ajoutez un fichier de ressources dans le projet. Maintenant, récupérez la chaîne où vous souhaitez ajouter comme dans mon cas, c'était un bloc de texte (SilverLight). Pas besoin d'ajouter un espace de noms également, cela fonctionne bien dans mon cas
Constantes est le nom de mon fichier de ressources dans le projet.
la source
Créez un gestionnaire de ressources pour récupérer des ressources.
la source
Cela fonctionne pour moi. disons que vous avez un fichier strings.resx avec la chaîne ok dedans. pour le lire
la source