120 votes

lire la chaîne de caractères d'un fichier .resx en C#

Comment lire la chaîne de caractères à partir d'un fichier .resx en c# ? Veuillez m'envoyer des instructions. étape par étape

0 votes

Jetez un coup d'œil à ce lien, cela devrait aider.

15 votes

Pourquoi ? s'ils ne me satisfont pas sur mes questions, alors pourquoi je dois accepter de mauvaises suggestions ?

1 votes

Si le fichier .resx a été ajouté à l'aide de Visual Studio dans les propriétés du projet, voir ma réponse pour une manière plus simple et moins sujette aux erreurs d'accéder à la chaîne.

169voto

nathanchere Points 2707

ResourceManager ne devrait pas être nécessaire, sauf si vous chargez à partir d'un fichier externe ressource.
Pour la plupart des choses, disons que vous avez créé un projet (DLL, WinForms, etc.), il suffit d'utiliser l'espace de nom du projet, "Ressources" et l'identifiant de la ressource :

En supposant un espace de nom de projet : UberSoft.WidgetPro

Et votre resx contient :

resx content example

Vous pouvez simplement utiliser :

Ubersoft.WidgetPro.Properties.Resources.RESPONSE_SEARCH_WILFRED

4 votes

Merci beaucoup pour cette réponse.

1 votes

Merci, ceci devrait être marqué comme une réponse. Beaucoup plus clair et propre que la "réponse" de cette question.

0 votes

Le type ou l'espace de nom n'existe pas

85voto

JeffH Points 6059

Cet exemple est tiré du 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");

4 votes

D'après la page MSDN que j'ai référencée : baseName Le nom racine du fichier de ressources sans son extension mais en incluant tout nom d'espace de nom pleinement qualifié. Par exemple, le nom racine du fichier de ressources nommé MyApplication.MyResource.en-US.resources est MyApplication.MyResource.

1 votes

Items == espace de nom du fichier de ressources

10 votes

Mauvais exemple : vous devriez expliquer que items est namespace + Root type de la ressource

68voto

Essayez ceci, ça marche pour moi simple.

Supposons que le nom de votre fichier de ressources soit "TestResource.resx", et que vous vouliez alors passer la clé dynamiquement,

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

Ajouter un espace de nom

using System.Resources;

0 votes

Vous pouvez également spécifier la culture - utile si vous voulez assurer une sortie spécifique à la culture qui contredit la valeur par défaut. Par exemple, TestResource.ResourceManager.GetString(description,new CultureInfo("en-GB")) ;

1 votes

J'obtiens l'erreur suivante : "Resources" ne contient pas de définition pour "GetString".

1 votes

Vous avez seulement besoin ResourceManager lorsque vous voulez charger une ressource externe. Utilisez <Namespace>.Properties à la place.

38voto

SasHok.Tk Points 137

Ouvrez le fichier .resx et réglez le "Modificateur d'accès" sur Public.

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

4 votes

Cette méthode fonctionne-t-elle avec plusieurs fichiers de ressources (langues), car partout où je regarde, ils utilisent la méthode ResourceManager, et je me demande si je dois prendre le risque d'utiliser cette méthode, ou pas...

3 votes

Ne fonctionne pas. Mon fichier de ressources n'est pas affiché après Properties.Resources. "mon nom de fichier", même s'il est défini comme public.

33voto

Joshcodes Points 1411

En supposant que le fichier .resx a été ajouté à l'aide de Visual Studio dans les propriétés du projet, il existe un moyen plus simple et moins sujet aux erreurs d'accéder à la chaîne.

  1. L'expansion du fichier .resx dans l'explorateur de solutions doit faire apparaître un fichier .Designer.cs.

  2. Lorsqu'il est ouvert, le fichier .Designer.cs comporte un espace de nom Propriétés et une classe interne. Pour cet exemple, supposons que la classe s'appelle Resources.

  3. Il suffit ensuite d'accéder à la chaîne :

    var resourceManager = JoshCodes.Core.Testing.Unit.Properties.Resources.ResourceManager;
    var exampleXmlString = resourceManager.GetString("exampleXml");
  4. Remplacer JoshCodes.Core.Testing.Unit avec l'espace de nom par défaut du projet.

  5. Remplacez "exempleXml" par le nom de votre ressource de chaîne.

3 votes

Très utile. Merci.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X