Решение:

Надо создавать ресурсные файлы Messages.resx — для языка по умолчанию, Messages.it-IT.resx для итальянского и т.д.

1. Глобальные ресурсы(для многих страниц) создаются в папке App_GlobalResources с расширегием resx.

Программно обратиться к ресурсам:
Resource.Messages.Greeting1

Декларативно:

2. Локальные — хранятся в папке ~/path/APP_LocalResources/ с именем как у страницы + префикс языка
например для ~/Store/Home.aspx будет ~/Store/App_LocalResources/Home.aspx.it-IT.resx.

Декларативно — поле classkey оставляем пустым:

Программно:
string greeting = (string)this.GetKocalResourceObject(«greeting2″);
3.ВАЖНО
Сгенерировать локальный файл ресурсов для страницы:
— перейти на design view страницы
— нажать Tools/Generate Local Resource

Он создаст файл ресурсов и вставит в страницу у элементов атрибуты meta/
Локализайются те свойства, ктороые объявлены с атрибутом [Localize(true)].

После этой операции можно из кода убрать все свойства Text, Tooltip

У страницы тоже появляется атрибут meta:
<%@ Page Language=»C#» meta:resourcekey=»PageResource1″ … %>

Для локализации элементов лучше использовать элемент Localize(хотя можно просто Label)

<asp:Localize ID=»locDesc» runat=»server»
meta:resourcekey=»locDescResource1″ Text=»The page provides…» />
4. Установка текущей культуры
а. Для установки можно читать html заголовок в Accept-Language или брать из профиля пользователя
б. установка культуры
— в BasePage(лучшее решение если брать из хранилища)
protected override void InitializeCulture()
{
string culture=Helpers.GetCurrentCulture();
this.Culture = culture;
this.UICulture = culture;
}
или в Page_Init и PageLoad

— в Global.asax(
самый худший способ — автоматическая генерация локальных ресурсов устанавливает в Page культуру в значение auto, что перезапишет значение установленное ранее в Global.asax, так что придется чистить страницы от атрибутов culture и uiculture)

 

Опубликовано в ASP.NET

Если вам понравилась статья, помогите, пожалуйста с распространением этого материала в Сети.

Подпишитесь на наши новости

Добавить комментарий

Ваш e-mail не будет опубликован.

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.