Создание многоязычного сайта в asp.net
Я создаю веб-сайт, который будет многоязычным по своей природе. Я предоставляю функциональность, благодаря которой пользователь может выбрать нужный язык, выбрав его из выпадающего списка.
Теперь моя проблема начинается здесь (когда язык выбирается из выпадающего списка). В настоящее время я использую 2 языка: английский и арабский.
Проблема в том, что когда пользователь выбирает арабский язык из выпадающего меню на странице входа, страница обновляется, и браузер загружает все содержимое на арабском языке.
Но...
Когда я снова выбираю английский, страница обновляется, но содержание языка не меняется!!
У меня есть проверить код и значения (значение имени культуры) применяются правильно!
Любые подсказки относительно того, что не так и где...
Вот мой код...
protected override void InitializeCulture()
{
String selectedLanguage = string.Empty;
if (Request.Form["ddlLanguage"] != null)
{
selectedLanguage = Request.Form["ddlLanguage"];
CultureInfo ci = new CultureInfo(selectedLanguage);
Thread.CurrentThread.CurrentCulture = ci;
Thread.CurrentThread.CurrentUICulture = ci;
}
base.InitializeCulture();
}
Любая помощь будет отличной!
Спасибо
2 ответа
Culture
Настройки должны быть установлены для каждого запроса. Недостаточно установить Thread
культуры один раз, когда выбор меняется.
Чтобы настроить культуру в соответствии с выбором пользователя для каждого запроса, существует несколько возможных способов.
- Установите культуру в (например)
Page_Init
событие главной страницы. - Создать пользовательскую базовую страницу (возможно
MyBasePage
) для содержимого страниц и переопределитьInitializeCulture
метод этого класса. Затем сделайте все контентные страницы производными от класса, а не напрямую отPage
, - Добавьте код для установки культуры в подходящем событии в
Global.asax
, - Вероятно, есть несколько других возможных способов справиться с этим.
Независимо от того, какой метод вы будете использовать, выбранная пользователем культура должна быть доступна для кода, который будет устанавливать культуру в потоке. Поэтому, когда пользователь меняет свой выбор, вы должны сохранить этот выбор в месте, где вы можете получить к нему доступ в последующих запросах. Это также может быть решено несколькими возможными способами. Вот несколько вариантов:
- Если вы используете
ProfileProvider
Вы можете сохранить выбор в профиле пользователя. - Кроме того, вы можете сохранить его в файле cookie.
- Вы могли бы сохранить его в
Session
хотя это будет означать, что пользователь должен повторно выбрать его всякий раз, когдаSession
был сброшен - Вы можете использовать какой-то другой способ хранения выбора (база данных, некоторые файлы на диске и т. Д.).
Для более подробного примера того, как это можно сделать, используя Global.asax
и cookie
Посмотри сюда.
Проверьте эту статью - Как создать многоязычное веб-приложение ASP.NET MVC? Мы увидим в основном два подхода:
Подход 1: Использование статических страниц
Подход 2: Использование динамической страницы с локализованными данными во время выполнения