Простой. Я хочу локализовать свое приложение. Я много раз искал Google и пытался использовать миллионы различных подходов к моим ресурсам. Единственным способом, которым я был успешным, является использование стандартных папок asp.net «App_LocalResource», что делает файлы ресурсов общедоступными и дает им Custom Tool Name
. В представлении я могу затем импортировать Custom Tool Name
с @using
.ASP.NET Механизм обработчика ресурсов в MVC4
Моя проблема заключается в том, что при изменении культуры меняются переменные языка/ресурсов.
Вот как я могу изменить его в 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
resouce для resFile.da.resx, я не могу импортировать Custom Tool Name
, который является моим файлом resouce.
Что делать, чтобы решить эту проблему?
Почему полное имя культуры здесь не доступно в каждом случае? –
@ AdamTuliper-MSFT CurrentUICulture принимает только две буквенные строки. –
CurrentUICulture принимает значение CultureInfo, которое является полным именем (не двумя символами), такими как new CultureInfo («en-US»), также я бы установил это в BeginRequest, это происходит раньше в жизненном цикле страницы и обычно является местом этого кода находит себя. –