我正在使用asp.net本地化尝试创建一个多语言网站,基本上我有两个全球资源,一个用于英语,另一个用于阿拉伯语。
我添加了一个包含两种语言的下拉列表:
<asp:DropDownList runat="server" ID="changeLang" AutoPostBack="true" >
<asp:ListItem Value="en">English</asp:ListItem>
<asp:ListItem Value="ar">Arabic</asp:ListItem>
</asp:DropDownList>
我正在使用此代码隐藏:
protected override void InitializeCulture() //changing the languages
{
string lang = Request["changeLang"];
if (lang != null && lang != "")
{
Thread.CurrentThread.CurrentUICulture = new CultureInfo(lang);
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(lang);
}
}
但语言不会改变,调试字符串lang的值总是为空。
我正在使用asp.net 4.0。
问题是什么,谢谢。
答案 0 :(得分:0)
听起来有两个不同的问题。
1)您没有从代码隐藏中的下拉列表中获取值,只是null。您是否尝试过直接访问对象而不是通过Request对象。例如:
string lang = changeLang.SelectedValue
2)文化没有被设定。对于第二项,请先尝试创建特定文化,然后将其用于CurrentUICulture
和CurrentCulture
。例如:
CultureInfo info = CultureInfo.CreateSpecificCulture("en-US");
Thread.CurrentThread.CurrentUICulture = info;
Thread.CurrentThread.CurrentCulture = info;
此外,您可能正在关注此MSDN article的代码示例。您需要在下拉列表中使用特定的文化标识符(例如en-US和ar-EG)
答案 1 :(得分:-1)
我建议将页面设置为自动从用户的浏览器设置中确定文化:
<%@ Page UICulture="auto" Culture="auto" %>
或者整个网站,将这些条目添加到web.config
文件中:
<globalization uiCulture="auto" culture="auto" /><!-- Automatically set culture from HTTP request -->
<globalization uiCulture="auto:en" culture="auto:en-US" /><!-- Optionally set a default culture -->
然后在控件上使用隐式声明绑定:
<asp:Button ID="btnSubmit" runat="server"
meta:resourcekey="btnSubmit" />
有关详细信息和代码示例,请参阅Resources and Localization in ASP.NET 2.0。如果您希望按照示例以编程方式执行此操作,请参阅以下资源: