Механизм обработчика ресурсов ASP.NET в MVC4

Просто. Я хочу локализовать свое приложение. Я гуглил несколько дней и пробовал миллион разных подходов, чтобы добраться до моих ресурсов. Единственный способ добиться успеха - использовать стандартные папки asp.net "App_LocalResource", сделать файлы ресурсов общедоступными и дать им Custom Tool Name, В представлении я могу импортировать Custom Tool Name с @using,

Моя проблема в том, что элементы языка / ресурса не меняются, когда я меняю культуру.

Вот как я могу изменить это в global.asax:

    protected void Application_AcquireRequestState(object sender, EventArgs e)
    {
        if (HttpContext.Current.Session != null)
        {
            CultureInfo ci = (CultureInfo)this.Session["Culture"];
            if (ci == null)
            {
                string langName = "en";
                string autoLang = "";
                if (HttpContext.Current.Request.UserLanguages != null && HttpContext.Current.Request.UserLanguages.Length != 0)
                {
                    autoLang = HttpContext.Current.Request.UserLanguages[0].Substring(0, 2);
                }
                if (autoLang == "da")
                    langName = autoLang;
                ci = new CultureInfo(langName);
                this.Session["Culture"] = ci;
            }

            Thread.CurrentThread.CurrentUICulture = ci;
            Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(ci.Name);
        }
    }

Так что культура либо da или же en, Но я заметил, что имена файлов ресурсов должны иметь определенный синтаксис. Должно быть задано значение по умолчанию (в данном случае на английском языке) без кода страны / культуры, а другое - имя по умолчанию, например reFile.da-DK.resx. Он должен иметь код языка и культуры.

Я боюсь, что обработчик ресурсов может распознать мой файл, потому что для культуры задано значение "da", а не "da-DK". Если я назову мой da восстановить файл в resFile.da.resx я не могу импортировать Custom Tool Name это мои файлы ресурсов.

Что мне сделать, чтобы решить это?

1 ответ

Решение

Используйте полную строку информации о культуре, например:

var info = new CultureInfo("en-US")

Также для лучшей практики переместите код в метод Application_BeginRequest, это стандартное расположение, в котором вы будете видеть этот тип кода.

Другие вопросы по тегам