我将使用Devexpress v14.1通过Visual Studio 2013编写Web表单。
需要使用Web表单来更改CheckedChanged事件的语言。
我已经阅读了谷歌的一些文章, 但似乎需要逐个设置所有控件。
例如,如果我的网页中有30个标签,则需要添加30行:
Label1.Text = ...;
Label2.Text = ...;
...
Label30.Text = ...;
制作多语言网页的最佳方法是什么?
请帮助!!!
答案 0 :(得分:1)
我希望这些文章ASP.NET Web Page Resources Overview和How to: Retrieve Resource Values Programmatically可以帮助您解决问题:
例如。
<%@ Page Language="C#" %>
<script runat="server">
protected void Button1_Click(object sender, EventArgs e)
{
Button1.Text =
GetLocalResourceObject("Button1.Text").ToString();
Image1.ImageUrl =
(String)GetGlobalResourceObject(
"WebResourcesGlobal", "LogoUrl");
Image1.Visible = true;
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Button ID="Button1" runat="server"
OnClick="Button1_Click"
Text="Get Resources" />
<asp:Image ID="Image1" runat="server"
Visible="false" />
</div>
</form>
</body>
</html>
答案 1 :(得分:1)
实现多语言并不像你想象的那么简单。
页面上需要多语言的所有控件都应该是服务器控件。 e.g。
<Label runat="server" ID="lblName" Text="Type your name"></Label>
从ASP.NET网页生成本地资源文件
打开要为其创建资源文件的页面。
切换到设计视图。
在“工具”菜单中,单击“生成本地资源”。 (它将在本地资源文件夹中创建资源文件)
- 醇>
在应用程序中键入所需资源的值,然后保存文件。
了解更多Creating Resources From a Web Page
成功创建默认资源文件(例如mypage.resx
)后,将其复制/粘贴并使用特定语言重命名复制的文件,例如mypage.fr.resx
为法语
将值更改为语言特定值
Asp.net使用基于当前线程文化的resx文件,但问题是CheckedChanged
事件发生Page_Load
事件,因此CheckedChanged
事件方法不是更改的正确位置线程文化。
因此,您需要在
CheckedChanged
事件(在Page_Load之前发生)事件中手动捕获Page_Init
值Request.Form
值并设置文化或者在
CheckedChanged
内部保存会话或cookie中的值并重新加载页面,并在Page_Init
中使用session / cookie值来设置线程文化
答案 2 :(得分:0)
考虑几个方面:
SessionManager类中的代码:
public string SUICulture
{
get
{
if (HttpContext.Current.Session["SUICulture"] == null)
{
HttpContext.Current.Session["SUICulture"] = "es";
}
return HttpContext.Current.Session["SUICulture"].ToString();
}
set
{
HttpContext.Current.Session["SUICulture"] = value;
}
}
您网页中的代码:
protected override void InitializeCulture()
{
String currentUICulture = clsSessionManager.GetInstance().SUICulture;
if(currentUICulture != null){
UICulture = currentUICulture;
Thread.CurrentThread.CurrentUICulture = new CultureInfo(currentUICulture);
}
base.InitializeCulture();
}
protected void chckOnCheckedChange(object sender, EventArgs e)
{
if (clsSessionManager.GetInstance().SUICulture== "es")
{
clsSessionManager.GetInstance().SUICulture= "en";
}else
{
clsSessionManager.GetInstance().SUICulture= "es";
}
Response.Redirect(Page.Request.Url.ToString(), true);
}
您必须使用服务器控件才能实现此目的。例如:
<asp:Literal ID="lblTitle" runat="server" />
然后你必须在代码隐藏中更改它:
lblTitle.Text = GetGlobalResourceObject("Default","labelTitle").ToString();
您可以在此处找到更多信息 https://msdn.microsoft.com/en-us/library/fw69ke6f.aspx
此页面向您展示如何执行此操作https://msdn.microsoft.com/en-us/library/ms178426.aspx