ASP.net не использует другие файлы ресурсов локали - PullRequest
6 голосов
/ 22 сентября 2011

У меня есть Default.aspx файл, в который я получаю локализованные значения:

Default.aspx :

<asp:Localize meta:resourcekey="lblTitle" runat="server">Welcome</asp:Localize>

Затем я создаю соответствующий резервный файл ресурса:

Default.aspx.resx

lblTitle.Text    Welcome to Stackoverflow Localized

И это работает:

enter image description here

Теперь я хочу создать, например, французскую локализацию:

Default.aspx.fr.resx

lblTitle.Text    Bienvenue Stackoverflow

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

enter image description here

(что и делает):

GET http://stackoverflow.com/ HTTP/1.1
Accept: application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, */*
Accept-Language: fr-CH,qps-ploc;q=0.5
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E)
Accept-Encoding: gzip, deflate
Connection: Keep-Alive
Host: stackoverflow.com

За исключением того, что он просто не работает:

enter image description here

Я следую тому, что Microsoft говорит :

Например, если у вас есть страница с именем Default.aspx в папке App_LocalResources, вы можете создать следующие файлы:

  • Default.aspx.resx. Это файл локальных ресурсов по умолчанию (резервный файл ресурсов), если совпадение языков не найдено.

  • Default.aspx.es.resx. Это файл ресурсов для испанского языка без информации о культуре.

  • Default.aspx.es-mx.resx. Это файл ресурсов для испанского (Мексика), в частности.

  • Default.aspx.fr.resx. Это файл ресурсов для французского языка, без информации о культуре.

Почему .NET делает не то, что должен делать .NET?


Обновление:

Из MSDN:

Выбор файлов ресурсов для разных языков

ASP.NET может установить для свойств страницы UICulture и Culture значения языка и культуры, которые передаются браузером. ... Подробнее см. Как: установить культуру и культуру пользовательского интерфейса для глобализации веб-страниц ASP.NET.

Как мне заставить ASP.NET установить для свойств UICulture и Culture страницы значения языка и культуры, которые передаются браузером?


С Как: установить культуру и культуру пользовательского интерфейса для глобализации веб-страниц ASP.NET :

Пользователи могут устанавливать культуру пользовательского интерфейса в своих браузерах. За Например, в Microsoft Internet Explorer, в меню Сервис, пользователи могут нажмите Свойства обозревателя, на вкладке Общие нажмите Язык, а затем установить свои языковые предпочтения. Если enableClientBasedCulture атрибут элемента глобализации в файле Web.config установлен истинно, ASP.NET может установить культуру пользовательского интерфейса для веб-страницы автоматически на основе значений, отправляемых браузером.

Чтобы декларативно установить культуру и культуру пользовательского интерфейса для веб-страницы ASP.NET

  • Чтобы ASP.NET установил для языка и культуры пользовательского интерфейса первый язык, указанный в текущих настройках браузера, установите для UICulture и Culture значение auto. В качестве альтернативы вы можете установить это значение на auto: culture_info_name , где culture_info_name - это имя культуры. Список названий культур см. В CultureInfo . Вы можете сделать этот параметр либо в директиве @ Page , либо в файле Web.config.

Ответы [ 3 ]

11 голосов
/ 22 сентября 2011

Попробуйте установить UICulture="auto" и Culture="auto" в директиве @ Page в вашем файле .aspx.

Как: установить культуру и культуру пользовательского интерфейса для глобализации веб-страниц ASP.NET

Или вы можете выполнить то же самое в файле web.config, за исключением того, что это применимо к каждой странице:

<system.web>
    <globalization uiCulture="auto" culture="auto" />
</system.web>
6 голосов
/ 22 сентября 2011

По умолчанию язык браузера не влияет на локаль приложения. Вам нужно добавить код для достижения этой цели. Одним из способов является добавление кода в Global.asax или HttpModule в BeginRequest.

Чтобы прочитать настройки языка из браузера, вы можете использовать что-то вроде:

var languages = Request.UserLanguages
if (languages != null)
{
    var lang = languages[0];
    Thread.CurrentThread.CurrentUICulture = new CultureInfo(lang);
}

Если вы хотите также повлиять на дату, время, форматы чисел и т. Д., Также установите CurrentCulture.

Thread.CurrentThread.CurrentCulture = new CultureInfo(lang);
1 голос
/ 22 сентября 2011

Я не верю, что среда выполнения ASP.NET по умолчанию задает культуру пользовательского интерфейса потока обработки. Вы должны явно назначить это. Вы можете сделать это с помощью своего собственного пользовательского модуля HttpModule или даже в вашем Global.asax.cs.

Что-то вроде:

string selectedCulture = browserPreferredCulture;
Thread.CurrentThread.CurrentUICulture = new
  CultureInfo(selectedCulture);
Thread.CurrentThread.CurrentCulture =
  CultureInfo.CreateSpecificCulture(selectedCulture);

См. http://msdn.microsoft.com/en-us/library/bz9tc508.aspx для примера в качестве отправной точки.

...