2009-06-15 4 views
1

In meiner ASP.NET MVC-Anwendung verwalte ich lokalisierte Texte in RESX-Dateien im Ordner App_GlobalResources. Ich bin in der Lage, jeden Textwert in jeder Datei mit seinem Schlüssel abzurufen.So rufen Sie alle Schlüssel/Wert-Paare in einer Ressourcendatei in App_GlobalResources ab

Jetzt möchte ich alle Schlüssel/Wert-Paare in einer bestimmten Ressource-Datei abrufen, um das Ergebnis auf einige JavaScript zu schreiben. Eine Suche ergab, dass ich in der Lage sein könnte, ResXResourceReader Klasse zu verwenden und durch die Paare zu iterieren; Allerdings befindet sich die Klasse leider in der System.Windows.Forms.dll und ich möchte diese Abhängigkeit nicht mit meiner Web-App verbinden. Gibt es eine andere Möglichkeit, diese Funktion zu implementieren?

Antwort

2

Ich habe die Lösung gefunden. Jetzt müssen Sie Forms.dll nicht mehr referenzieren.

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

ausgezeichneter Mann !!!!!!!!!!!!!! –

0

Okay, keine andere Antwort. Scheint so, als ob die Referenzierung von Forms.dll der einzige Weg ist. Hier ist der Code, den ich mir ausgedacht habe.

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()); 
    } 
} 
Verwandte Themen