Je travaille sur une application C # .NET localisée et nous utilisons un strings.resx
fichier pour traduire les chaînes codées en dur dans l'application. J'utilise le code suivant pour les extraire:
using MyNamespace.Resources
...
string someString = strings.someString;
Mais, maintenant, je veux pouvoir définir le nom de la chaîne dans l'appel, quelque chose comme ceci:
string someString = GetString("someString");
J'ai joué un peu avec le ResourceManager
, mais je ne trouve pas de moyen de le diriger vers mon strings.resx
fichier.
Comment je fais ça?
Une petite recherche a fait l'affaire. J'ai le droit ResourceManager
disponible dans ma classe strings
:
ResourceManager rm = strings.ResourceManager;
string someString = rm.GetString("someString");
ResourceManager.GetString
devrait faire l'affaire.
Exemple supprimé de MSDN:
ResourceManager rm = new ResourceManager("RootResourceName",
typeof(SomeClass).Assembly);
string someString = rm.GetString("someString");
J'ai eu le même problème en utilisant ASP.NET Core MVC et j'ai réussi à le résoudre en utilisant
ResourceManager rm = new ResourceManager(typeof(YourResourceClass));
string someString = rm.GetString("someString");
Très similaire à la solution de @ Vlad, mais sinon j'avais un MissingManifestResourceException
Il existe un moyen beaucoup plus simple de le faire
[NameOfyourResxfile].ResourceManager.GetString("String Name");
dans ton cas
strings.resx.ResourceManager.GetString("someString");
Vous pouvez écrire une méthode statique comme celle-ci:
public static string GetResourceTitle<T>(string key)
{
ResourceManager rm = new ResourceManager(typeof(T));
string someString = rm.GetString(key);
return someString;
}
Et appelez n'importe où:
var title= GetResourceTitle<*YouResourceClass*>(key);
Il est utile lorsque vous souhaitez disposer d'une fonction générique pour obtenir la chaîne de n'importe quel fichier de ressources.