Создание многоязычного сайта в 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 культуры один раз, когда выбор меняется.

Чтобы настроить культуру в соответствии с выбором пользователя для каждого запроса, существует несколько возможных способов.

  1. Установите культуру в (например) Page_Init событие главной страницы.
  2. Создать пользовательскую базовую страницу (возможно MyBasePage) для содержимого страниц и переопределить InitializeCulture метод этого класса. Затем сделайте все контентные страницы производными от класса, а не напрямую от Page,
  3. Добавьте код для установки культуры в подходящем событии в Global.asax,
  4. Вероятно, есть несколько других возможных способов справиться с этим.

Независимо от того, какой метод вы будете использовать, выбранная пользователем культура должна быть доступна для кода, который будет устанавливать культуру в потоке. Поэтому, когда пользователь меняет свой выбор, вы должны сохранить этот выбор в месте, где вы можете получить к нему доступ в последующих запросах. Это также может быть решено несколькими возможными способами. Вот несколько вариантов:

  1. Если вы используете ProfileProviderВы можете сохранить выбор в профиле пользователя.
  2. Кроме того, вы можете сохранить его в файле cookie.
  3. Вы могли бы сохранить его в Session хотя это будет означать, что пользователь должен повторно выбрать его всякий раз, когда Session был сброшен
  4. Вы можете использовать какой-то другой способ хранения выбора (база данных, некоторые файлы на диске и т. Д.).

Для более подробного примера того, как это можно сделать, используя Global.asax и cookieПосмотри сюда.

Проверьте эту статью - Как создать многоязычное веб-приложение ASP.NET MVC? Мы увидим в основном два подхода:

Подход 1: Использование статических страниц

Подход 2: Использование динамической страницы с локализованными данными во время выполнения

Другие вопросы по тегам