0

Простой. Я хочу локализовать свое приложение. Я много раз искал 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.

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

+0

Почему полное имя культуры здесь не доступно в каждом случае? –

+0

@ AdamTuliper-MSFT CurrentUICulture принимает только две буквенные строки. –

+1

CurrentUICulture принимает значение CultureInfo, которое является полным именем (не двумя символами), такими как new CultureInfo («en-US»), также я бы установил это в BeginRequest, это происходит раньше в жизненном цикле страницы и обычно является местом этого кода находит себя. –

ответ

0

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

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

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