2009-06-15 6 views
1

Dans mon application ASP.NET MVC, je gère les textes localisés dans des fichiers .resx situés dans le dossier App_GlobalResources. Je suis capable de récupérer n'importe quelle valeur de texte dans n'importe quel fichier connaissant sa clé.Comment récupérer toutes les paires clé-valeur dans un fichier de ressources situé dans App_GlobalResources

Maintenant, je veux récupérer toutes les paires clé/valeur dans un fichier de ressources particulier afin d'écrire le résultat dans du JavaScript. Une recherche a révélé que je pourrais être en mesure d'utiliser ResXResourceReader classe et itérer à travers les paires; Cependant, la classe est malheureusement située dans le System.Windows.Forms.dll et je ne veux pas câbler cette dépendance à mon application Web. Existe-t-il un autre moyen de mettre en œuvre cette fonctionnalité?

Répondre

2

J'ai trouvé la solution. Maintenant, pas besoin de référencer Forms.dll.

public class ScriptController : BaseController 
{ 
    private static readonly ResourceSet ResourceSet = 
     Resources.Controllers.Script.ResourceManager.GetResourceSet(CurrentCulture, true, true); 

    public ActionResult GetResources() 
    { 
     var builder = new StringBuilder(); 
     builder.Append("var LocalizedStrings = {"); 
     foreach (DictionaryEntry entry in ResourceSet) 
     { 
      builder.AppendFormat("{0}: \"{1}\",", entry.Key, entry.Value); 
     } 
     builder.Append("};"); 
     Response.ContentType = "application/x-javascript"; 
     Response.ContentEncoding = Encoding.UTF8; 
     return Content(builder.ToString()); 
    } 
} 
+0

excellent homme !!!!!!!!!!!!!! –

0

D'accord, pas d'autre réponse. On dirait que référencer Forms.dll est le seul moyen maintenant. Voici le code que j'ai trouvé.

public class ScriptController : BaseController 
{ 
    private const string ResxPathTemplate = "~/App_GlobalResources/script{0}.resx"; 
    public ActionResult GetResources() 
    { 
     var resxPath = Server.MapPath(string.Format(ResxPathTemplate, string.Empty)); 
     var resxPathLocalized = Server.MapPath(string.Format(ResxPathTemplate, 
      "." + CurrentCulture)); 
     var pathToUse = System.IO.File.Exists(resxPathLocalized) 
          ? resxPathLocalized 
          : resxPath; 

     var builder = new StringBuilder(); 
     using (var rsxr = new ResXResourceReader(pathToUse)) 
     { 
      builder.Append("var resources = {"); 
      foreach (DictionaryEntry entry in rsxr) 
      { 
       builder.AppendFormat("{0}: \"{1}\",", entry.Key, entry.Value); 
      } 
      builder.Append("};"); 
     } 
     Response.ContentType = "application/x-javascript"; 
     Response.ContentEncoding = Encoding.UTF8; 
     return Content(builder.ToString()); 
    } 
} 
Questions connexes