Почему язык не меняется при обратной передаче? - PullRequest
1 голос
/ 27 декабря 2011

В моем выпадающем списке есть список языков со значениями в форме en-NZ, en-US и т. Д., Но страница не меняет язык при обратной передаче, если мои языковые коды неверны.Может ли кто-нибудь взглянуть на мой код и сказать, что я делаю неправильно, чтобы изменить язык для моей страницы

И мой lbllanguage.Text также изменяется на втором постбэке, поэтому предполагается изменить его на событие ChangeLanguage_Clickпри первом нажатии

Главная страница:

protected void Page_PreRender(object sender, EventArgs e)
{
    string Culture = (HttpContext.Current.Profile as ProfileCommon).Preferences.Culture;
    if (ddlChangeLanguage.Items.FindByValue(Culture) != null)
    {
        ddlChangeLanguage.SelectedValue = (HttpContext.Current.Profile as ProfileCommon).Preferences.Culture; 
    }
}

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        List<CultureInfo> languages = CultureInfo.GetCultures(CultureTypes.SpecificCultures).OrderBy(x => x.Name).ToList();

        SortedDictionary<string, string> sortedLanguages = new SortedDictionary<string, string>();

        foreach (CultureInfo language in languages)
        {
            RegionInfo regionInfo = new RegionInfo(language.Name);
            if (!sortedLanguages.ContainsKey(regionInfo.EnglishName))
            {
                sortedLanguages.Add(regionInfo.EnglishName, language.Name);
            }
        }

        foreach (KeyValuePair<string, string> language in sortedLanguages)
        {
            ddlChangeLanguage.Items.Add(new ListItem { Value = language.Value, Text = language.Key });
        }
        ddlChangeLanguage.SelectedValue = (HttpContext.Current.Profile as ProfileCommon).Preferences.Culture;
    }
    lbllanguage.Text = this.UICulture;

}

protected void ChangeLanguage_Click(object sender, EventArgs e)
{
    (HttpContext.Current.Profile as ProfileCommon).Preferences.Culture = ddlChangeLanguage.SelectedValue;
}

и моя базовая страница, которую наследует моя главная страница

public class BasePage : System.Web.UI.Page
{
    public BasePage()
    {
    }

    protected override void InitializeCulture()
    {            
        this.Culture = (HttpContext.Current.Profile as ProfileCommon).Preferences.Culture;
        this.UICulture = (HttpContext.Current.Profile as ProfileCommon).Preferences.Culture;
    }
}

Ответы [ 3 ]

2 голосов
/ 28 декабря 2011

Вы должны хранить свои строки в файле ресурсов или сателлитных сборках, чтобы выполнялись переводы:

Обзор ресурсов веб-страницы ASP.NET

<asp:Button ID="Button1" runat="server" 
    Text="<%$ Resources:WebResources, Button1Caption %>" />
1 голос
/ 27 декабря 2011

Настройте также текущий поток:

var culture = (HttpContext.Current.Profile as ProfileCommon).Preferences.Culture;
Thread.CurrentThread.CurrentCulture = culture;
Thread.CurrentThread.CurrentUICulture = culture;
0 голосов
/ 27 декабря 2011

Попробуйте изменить логику в Page_PreRender на обработчик для DropDownList.SelectedIndexChanged.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...