Как получить все пары ключ-значение в файле ресурсов, расположенном в App_GlobalResources - PullRequest
1 голос
/ 15 июня 2009

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

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

Ответы [ 2 ]

2 голосов
/ 19 июня 2009

Я нашел решение. Теперь нет необходимости ссылаться на 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 голосов
/ 17 июня 2009

Хорошо, другого ответа нет. Похоже, что ссылка на 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());
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...