Si vous utilisez des sites Web (sites Web ASP.NET modèle de projet) vous pouvez faire ceci: HttpContext.GetGlobalResourceObject(classKey, resourceKey)
où le ClassKey est le nom de votre fichier .resx et resourcekey est la chaîne localisée dans votre Ressource.
Si vous utilisez des applications web et vous avez vos ressources comme un projet distinct (bibliothèque C#), vous pouvez jeter un oeil à ce code:
public class SatelliteResourceManager
{
private const string Resources = "Resources";
private readonly string _assemblyName;
public SatelliteResourceManager(string assemblyName)
{
_assemblyName = assemblyName;
}
public Assembly Assembly { get { return Assembly.Load(_assemblyName); } }
protected IEnumerable<Type> ResourceTypes
{
get
{
return Assembly.GetTypes().Where(a => a.IsClass && a.Namespace == Resources);
}
}
public IEnumerable<ResourceManager> GetAllManagers()
{
foreach (var manager in ResourceTypes)
{
yield return (ResourceManager) manager.GetProperty("ResourceManager").GetValue(this, null);
}
}
public string GetGlobalResource(string classKey, string resourceKey, string fallback)
{
var manager = GetAllManagers().FirstOrDefault(m => m.BaseName.EndsWith(classKey, StringComparison.InvariantCultureIgnoreCase));
if (manager != null) return manager.GetString(resourceKey);
return fallback;
}
}
Vous devez par exemple la classe en passant une paramètre avec votre nom d'assembly de projet de ressource, vous pouvez obtenir cette information à partir des propriétés du projet. J'ai également ajouté un champ "Ressources" cela devrait être utile si vous avez décidé de remplacer l'espace de nom par défaut de chaque fichier .resx, sachez que vous pouvez étendre cette classe pour autoriser plusieurs "espaces de noms" pour vos fichiers .resx ci-joint)
