Я пытаюсь реализовать типичное меню языков, в котором пользователи могут выбрать язык, на котором они хотят просмотреть сайт, через меню, которое появляется на всех страницах сайта.Лучший способ реализовать меню языков в приложении ASP.NET
Меню будет отображаться на нескольких основных страницах (в настоящее время для страниц, на которых пользователи вошли в систему, и на страницах, где нет пользователей).
В моей текущей реализации есть базовый класс основной страницы (назовем его MasterBase). MasterBase имеет событие
public event LanguageChangedEventHandler LanguageChanged;
где LanguagedChangedEventHandler просто определяется как
public delegate void LanguageChangedEventHandler(string NewCulture);
MasterBase также имеет Overridable метод
protected virtual void OnLanguageChanged(string NewCulture)
, который только в основном запускает событие.
Каждый мастер-страница, которая наследует MasterBase переопределяет OnLanguageChanged и делает обычные вещи, как набор CurrentUICulture Нити и язык печенье затем делает
Server.Transfer(this.Page.AppRelativeVirtualPath, true);
получить перезагрузку страницы с локализованными значениями для новой культуры. На главной странице для зарегистрированных пользователей он также обновляет язык пользователя pref в db.
Каждый языковой параметр в настоящее время является LinkButton на главной странице, которая наследуется от MasterBase. При щелчке ссылки он вызывает базовый метод OnLanguagedChanged, передающий правильную информацию о культуре. Например.
protected void btnEnglish_Click(object sender, EventArgs e) {
this.OnLanguageChanged("en-US");
}
Каждая страница, которая должна обрабатывать изменения языка, то есть некоторый код на странице загрузки, которая выглядит как ...
((MasterBase)this.Master).LanguageChanged += this.Page_OnLanguageChanged;
// Where Page_OnLanguageChanged has the signature of LanguageChangedEventHandler
// and has stuff like reloading options in a drop down using the new language.
Довольно запутанный «рамки» =)
- Во-первых, новым разработчикам сложно понять, что они должны подключить метод к событию LanguageChanged MasterBase для обработки изменений языка. Да, мы это документируем. Но все же это не что-то прямое и очевидное.
- Во-вторых, все языковые изменения - это обратная связь. Это особенно проблематично, если вы хотите вернуться назад с помощью кнопки «Назад» браузера.
Я ищу более элегантное решение. Тот, у которого нет проблем, описанных выше, а также обрабатывает мои текущие требования.
Большое спасибо за любые предложения. Благодарю.
Полезно, но по-прежнему не решает проблему не требовать обратной передачи. – Fung 2008-11-09 14:35:58