简体   繁体   English

为什么语言不会在回发时发生变化?

[英]Why doesn't the language change on postback?

My dropdownlist has a list of languages with values in the form of en-NZ, en-US etc but the page doesn't change the language on postback is my language codes wrong. 我的下拉列表中有一个语言列表,其中包含en-NZ,en-US等形式的值,但页面不会更改回发语言,因为我的语言代码错误。 Could someone have a look at my code and tell me what I'm doing wrong to change the language for my page 有人可以查看我的代码并告诉我改变我的页面语言我做错了什么

And my lbllanguage.Text changes on the second postback aswell so it's suppose to change on the ChangeLanguage_Click event first time it is clicked 而且我的lbllanguage.Text会在第二次回发时发生变化,所以它假设在第一次单击时更改ChangeLanguage_Click事件

Main Page: 主页:

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;
}

and my BasePage which my main page inherits 和我的主页继承的BasePage

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;
    }
}

You have to store your strings in a resource file or satellite assemblies for translations to happen: 您必须将字符串存储在资源文件或附属程序集中才能进行翻译:

ASP.NET Web Page Resources Overview ASP.NET网页资源概述

<asp:Button ID="Button1" runat="server" 
    Text="<%$ Resources:WebResources, Button1Caption %>" />

Configure the current thread too: 还要配置当前线程:

var culture = (HttpContext.Current.Profile as ProfileCommon).Preferences.Culture;
Thread.CurrentThread.CurrentCulture = culture;
Thread.CurrentThread.CurrentUICulture = culture;

尝试将Page_PreRender中的逻辑更改为DropDownList.SelectedIndexChanged的处理程序。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM