Categories: ASP.NET

Как делать локализацию

Решение:

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

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

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

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

<asp:Label id="lblGreeting2" runat="server" 
Text='<%$ Resources:Messages, Greeting2 %>' >

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

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

<asp:Label id="lblGreeting2" runat="server" 
Text='<%$ Resources:Greeting2 %>' >

Программно:
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)

void Application_BeginRequest(Object sender, EventArgs e)
{
if(Request.UserLanguages.Length>0)
{
CultureInfo culture = CultureInfo.CrateSpecificCulture(Request.UserLanguages[0]);
Thread.CurrentThread.CurrentCulture= culture;
Thread.CurrentThread.CurrentUICulture= culture;
} 
}
- в Web.config
<configuration>
<system.web>
<globalization culture="auto" uiCulture="auto">

</system.web>
</configuration>

- в странице
<%@ Page Culture="auto" UICulture="auto" ... %>

 

Руслан Раянов

Recent Posts

Зачем мне нужен партнер? #вебстартап

Источник: https://falconspace.ru/blog/partnerstvo-pri-razrabotke-proekta---tonkaya-shtuka

1 день ago

Сколько стоит сделать сайт? #вебстартап

Источник: https://falconspace.ru/blog/cenoobrazovanie-v-mire-veb-razrabotki

2 дня ago

Любой проект можно запустить с минимальным бюджетом #вебстартап

Источник: https://falconspace.ru/blog/kak-zapustit-proekt-s-minimumom-zatrat

3 дня ago

Что такое MVP простыми словами? Зачем нужен MVP стартапу?Создание MVP для веб-проекта и других сфер

В этой статье мы рассмотрим такое понятие как - Minimal Viable Product (минимально жизнеспособный продукт).…

4 дня ago

Кто такой Product-owner? #понятия_веб_разработки #вебликбез

https://falconspace.ru/blog/bazovye-voprosy-i-ponyatiya-v-sfere-sozdaniya-veb-proektov - Основы веб-разработки. Базовые понятия для владельца сайта

1 неделя ago

Что такое бизнес-логика? #понятия_веб_разработки #вебликбез

https://falconspace.ru/blog/bazovye-voprosy-i-ponyatiya-v-sfere-sozdaniya-veb-proektov - Основы веб-разработки. Базовые понятия для владельца сайта

1 неделя ago