我在我的网站上使用asp.net文化以不同语言显示网站,即荷兰语(nl)和法语(fr)。该网站有一个按钮,通过将?lang = nl添加到网站的网址,将网站更改为另一种语言。当您更改语言时,会保存一个cookie,以便下次访问时保留语言。
由于某种原因,该网站不会看到cookie。 cookie在那里并被发送到服务器,我用fiddler检查。有时它的值为null,有时它是一个空字符串。
这是我在我的基页类中使用的代码:
protected override void InitializeCulture()
{
if (!Page.IsPostBack)
{
string cookieLang = "";
try
{
cookieLang = HttpContext.Current.Request.Cookies["UserSettings"]["lang"];
}
catch (Exception e)
{
Response.Write(string.Format("<!-- {0} -->", e.Message));
}
if (!string.IsNullOrEmpty(Request.QueryString["lang"]))
{
cookieLang = Request.QueryString["lang"].ToLower();
}
if (!string.IsNullOrEmpty(cookieLang))
{
string selectedCulture = cookieLang == "fr" ? "fr-BE" : "nl-BE";
this.Lang = cookieLang;
UICulture = selectedCulture;
Culture = selectedCulture;
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(selectedCulture);
Thread.CurrentThread.CurrentUICulture = new CultureInfo(selectedCulture);
Response.Cookies["UserSettings"]["lang"]= Lang;
Response.Cookies["UserSettings"].Expires = DateTime.Now.AddDays(7);
}
base.InitializeCulture();
}
}
有谁能告诉我这里我做错了什么?
修改 我忘了告诉我这个代码在我的本地电脑上测试时工作正常,但是当部署在服务器上时它不起作用。
答案 0 :(得分:1)
我认为你的错误在于你如何处理cookie以及事件顺序。
以下代码一直适用于我:
protected override void InitializeCulture()
{
var cultureName = string.Empty;
// Step 1
var cookie = this.Request.Cookies["culture"];
if (cookie != null)
{
cultureName = cookie.Value;
}
// Step 2
var query = this.Request.QueryString["culture"];
if (query != null)
{
cultureName = query;
}
// Step 3
var culture = new CultureInfo(cultureName);
Thread.CurrentThread.CurrentCulture = culture;
Thread.CurrentThread.CurrentUICulture = culture;
// Step 4
this.Response.Cookies["culture"].Value = culture.Name;
base.InitializeCulture();
}
答案 1 :(得分:0)
由于您的代码在本地而不是部署的服务器上运行,因此您也可以检查以下内容
希望这有帮助, 感谢。