2009-06-15 3 views
1

В моем приложении ASP.NET MVC я управляю локализованными текстами в файлах .resx, расположенных в папке App_GlobalResources. Я могу получить любое текстовое значение в любом файле, зная его ключ.Как получить все пары ключ-значение в файле ресурсов, расположенном в App_GlobalResources

Теперь я хочу получить все пары ключ/значение в конкретном файле ресурсов, чтобы записать результат на некоторый JavaScript. В результате поиска выяснилось, что я мог бы использовать класс ResXResourceReader и перебирать пары; однако класс, к сожалению, находится в System.Windows.Forms.dll, и я не хочу подключать эту зависимость к моему веб-приложению. Есть ли другой способ реализовать эту функцию?

ответ

2

Я нашел решение. Теперь не нужно ссылаться на 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

отличный мужчина !!!!!!!!!!!!!! –

0

Хорошо, никаких других ответов. Кажется, что ссылка на Forms.dll - единственный способ прямо сейчас. Вот код, который я придумал.

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