Механизм обработчика ресурсов 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, это стандартное расположение, в котором вы будете видеть этот тип кода.