У меня есть локализованное приложение, в котором пользователь может выбрать предпочитаемый язык в выпадающем меню. После события OnSelectedIndexChanged происходит обратная передача, и для CurrentThread.CurrentCulture должно быть установлено то, что выбирает пользователь.
Login.aspx.cs
public partial class Login : BasePage
{
protected void LanguageDrop_changed(object sender, EventArgs e)
{
var lang = LanguageDropDown.SelectedValue;
Thread.CurrentThread.CurrentUICulture = new CultureInfo(lang);
Thread.CurrentThread.CurrentCulture = new CultureInfo(lang);
}
}
Однако, это не работает правильно, потому что событие LanguageDrop_click срабатывает после InitializeCulture, поэтому инициализируется некоторая культура по умолчанию, элементы управления локализуются на язык по умолчанию, а затем устанавливается CurrentThread.CurrentCulture. Поэтому пользователю необходимо обновить страницу еще раз, чтобы увидеть ее на выбранном языке.
UPDATE:
Я нашел частичный ответ: http://www.codeproject.com/Kb/aspnet/localizationByVivekTakur.aspx
Он извлекает раскрывающееся значение языка в событии InitializeCulture () из коллекции Form