为什么不是语言变化对回传? [英] Why doesn't the language change on postback?

查看:70
本文介绍了为什么不是语言变化对回传?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的DropDownList有不同的语言,价值观的EN-NZ形式的列表,EN-US等,但页面没有改变回传的语言就是我的语言codeS错了。可能有人看看我的code,告诉我什么,我做错了更改语言为我的网页

和第二回发藏汉所以我们假设改变对ChangeLanguage_Click事件第一次被点击我lbllanguage.Text变化

主页:

 保护无效Page_ preRender(对象发件人,EventArgs的发送)
{
    串文化=(HttpContext.Current.Profile为的ProfileCommon)preferences.Culture。
    如果(ddlChangeLanguage.Items.FindByValue(文化)!= NULL)
    {
        ddlChangeLanguage.SelectedValue =(HttpContext.Current.Profile为的ProfileCommon)preferences.Culture。
    }
}保护无效的Page_Load(对象发件人,EventArgs的发送)
{
    如果(!Page.IsPostBack)
    {
        清单<&的CultureInfo GT;语言= CultureInfo.GetCultures(CultureTypes.SpecificCultures).OrderBy(X => x.Name).ToList();        SortedDictionary<字符串,字符串> sortedLanguages​​ =新SortedDictionary<字符串,字符串>();        的foreach(在语言CultureInfo的语言)
        {
            RegionInfo regionInfo =新RegionInfo(language.Name);
            如果(!sortedLanguages​​.ContainsKey(regionInfo.EnglishName))
            {
                sortedLanguages​​.Add(regionInfo.EnglishName,language.Name);
            }
        }        的foreach(KeyValuePair<字符串,字符串>语言sortedLanguages​​)
        {
            ddlChangeLanguage.Items.Add(新的ListItem {值= language.Value,文本= language.Key});
        }
        ddlChangeLanguage.SelectedValue =(HttpContext.Current.Profile为的ProfileCommon)preferences.Culture。
    }
    lbllanguage.Text = this.UICulture;}保护无效ChangeLanguage_Click(对象发件人,EventArgs的发送)
{
    (HttpContext.Current.Profile为的ProfileCommon)preferences.Culture = ddlChangeLanguage.SelectedValue。
}

和我的BasePage其中我的主页继承

 公共类的BasePage:System.Web.UI.Page
{
    公众的BasePage()
    {
    }    保护覆盖无效InitializeCulture()
    {
        this.Culture =(HttpContext.Current.Profile为的ProfileCommon)preferences.Culture。
        this.UICulture =(HttpContext.Current.Profile为的ProfileCommon)preferences.Culture。
    }
}


解决方案

您有您的字符串存储在资源文件或卫星组件的转换发生的:

ASP.NET网页资源概述

 < ASP:按钮的ID =Button1的=服务器
    文字=<%$资源:WebResources,Button1Caption%GT; />

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. 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

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

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:Button ID="Button1" runat="server" 
    Text="<%$ Resources:WebResources, Button1Caption %>" />

这篇关于为什么不是语言变化对回传?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆