Как получить все пары "ключ-значение" в файле ресурсов, расположенном в App_GlobalResources

Мой ответ на все вопросы формы «Должен ли я изучать язык X или Y? Должен ли я изучать Z до Y и X после Y?» и т. д. то же самое: не беспокойтесь о таких вопросах. Забудь их. Если вы думаете, что изучение C # сейчас будет более полезным (может быть, есть больше рабочих мест, или вы хотите присоединиться к проекту, или, может быть, вам просто любопытно), тогда сядьте и начните учиться.

Если вы уже хорошо владеете одним языком, вам не понадобится много времени, чтобы подобрать достаточно для того, чтобы понять, сможете ли вы продуктивно использовать его. И вы не можете решить, стоит ли вам уделять много времени изучению языка, не зная его. Поэтому начните изучать C #, если хотите.

Чтобы довести это до крайности, я думаю, тот факт, что около 30 лет назад я изучил сборку Z80 еще до изучения BASIC, очень помог мне в этом. Тем не менее, я бы никогда не советовал вам изучать другие языки, пока вы не освоите сборку. (Кстати, все, что я помню, это код операции 0xc9 RET).

Итак, начните изучать C #. Если вам любопытно, продолжайте изучать C, все время помня, что, несмотря на то, что оба имеют фигурные скобки, они совершенно разные языки. Так же, как C и C ++.

1
задан Buu Nguyen 15 June 2009 в 08:07
поделиться

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());
    }
}
2
ответ дан 3 September 2019 в 01:25
поделиться

Хорошо, другого ответа нет. Похоже, что ссылка на 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());
    }
}
0
ответ дан 3 September 2019 в 01:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: