繁体   English   中英

如何通过会话变量保持文化

[英]How to maintain culture through session variable

我有一个使用语言文件的多语言Web表单Web应用程序,还有一个BasePage类,该类根据从该类继承的页面中包含的QueryString设置区域性。 如果我有点笨拙,因为我不得不对每个按钮执行这种操作,那么这一切都会很好,这会将用户带到不同的页面以保持文化:

if (Thread.CurrentThread.CurrentCulture.ToString() == "cy-GB")
{
    return "~/Secure/Details.aspx?lang=cy-GB&PersonId=" + currentPersonId;
}
else
{
    return "~/Secure/Details.aspx?PersonId=" + currentPersonId;  
}

我知道这样做可能是更好的方法,但是作为新手,我只是做了。

直到我必须实现asp:SiteMapPath控件。 我最初以为我可以像为title那样简单地为url属性创建一个资源条目:

<siteMapNode 
    title="$resources:SiteMapLocalizations,HomePageTitle" 
    description="Home" 
    url="~$resources:SiteMapLocalizations,HomePageUrl">

但是,这导致服务器错误:

从客户端(:)检测到潜在的危险Request.Path值。

我已经读了一些书,我相信我需要以某种方式将当前区域性存储到会话变量中,该变量将跟随用户,因此当他们在面包屑上单击“主页”时,它将与区域性一致并从中获取适当的文本资源文件,我也希望这将允许我删除为维护整个应用程序中的当前语言而必须编写的所有IF ELSE语句。

但是我的问题是,我从哪里开始,我找不到逐步实现该目标的任何指南,有人可以提供一些说明吗?

确保您具有某种触发语言更改的按钮。 就我而言,我有两个版本的标题,一个带有英语链接,该链接会将查询字符串附加到英语,另一个用于威尔士语,例如:

均价

<a id="languagelink" runat="server" title="Cymraeg">Cymraeg</a>

C#

    if (Thread.CurrentThread.CurrentCulture.ToString() == "en-GB")
    {
        Uri uri = new Uri(currentPage);
        languagelink.HRef = String.Format(uri.GetLeftPart(UriPartial.Path)+"?lang=cy-GB");         
    }

每个需要语言切换的页面都需要从我的自定义BasePage继承,如下所示:

遗产

public partial class Secure_CustomerSummary : BasePage

基本页面

public partial class BasePage : System.Web.UI.Page
    {
        protected override void InitializeCulture()
        {
            if (Session["language"] == null)
            {
                Session["language"] = "en-GB";
            }

            else
            {
                if (Request.QueryString["lang"] == null)
                {
                    SetSessionCulture();
                }

                if (Request.QueryString["lang"] != null)
                {
                    string qs = Request.QueryString["lang"];
                    Session["language"] = qs;
                }

                SetSessionCulture();
            }

            SetSessionCulture();           
        }

        private void SetSessionCulture()
        {
            Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(Session["language"].ToString());
            Thread.CurrentThread.CurrentUICulture = new CultureInfo(Session["language"].ToString());
            base.InitializeCulture();
        }
    }

暂无
暂无

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

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