代码之家  ›  专栏  ›  技术社区  ›  Buu

如何检索app_globalresources中资源文件中的所有键值对

  •  1
  • Buu  · 技术社区  · 15 年前

    在我的ASP.NET MVC应用程序中,我管理位于中的.resx文件中的本地化文本 App_GlobalResources 文件夹。我能够检索任何文件中的任何文本值,知道它的键。

    现在,我要检索特定资源文件中的所有键/值对,以便将结果写入某些JavaScript。搜索结果显示我可能可以使用 ResXResourceReader 类并循环访问这些对;但是很遗憾,该类位于 System.Windows.Forms.dll 我不想将这种依赖关系连接到我的Web应用程序。有没有其他方法可以实现这个功能?

    2 回复  |  直到 15 年前
        1
  •  2
  •   Buu    15 年前

    我找到了解决办法。现在不需要引用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());
        }
    }
    
        2
  •  0
  •   Buu    15 年前

    好吧,没有其他答案。现在看来引用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());
        }
    }