如何使我的网络表单成为多语言的

本文关键字:语言 表单 何使 我的 网络 | 更新日期: 2023-09-27 18:25:11

我将使用Devexpress v14.1通过Visual Studio 2013编写一个web表单。

需要web表单才能使用CheckedChanged事件更改语言。

我读过谷歌的一些文章,但似乎需要逐一设置所有控件。

例如,如果我的网页中有30个标签,则需要添加30行:

Label1.Text=。。。;

Label2.Text=。。。;

Label30.Text=。。。;

制作多语言网页的最佳方法是什么?

请帮忙!!!

如何使我的网络表单成为多语言的

实现多语言并不像您想象的那么简单。

先决条件:-

页面上所有需要多语言的控件都应该是服务器控件。例如

<Label runat="server" ID="lblName" Text="Type your name"></Label>
  1. 创建资源文件

从ASP.NET网页生成本地资源文件

  1. 打开要为其创建资源文件的页面。

  2. 切换到设计视图。

  3. 在"工具"菜单中,单击"生成本地资源"。(它将在本地资源文件夹中创建一个资源文件)

  4. 键入应用程序中所需的每个资源的值,然后保存文件。

阅读更多从网页创建资源

  1. 成功创建默认资源文件(例如mypage.resx)后,复制/粘贴该文件,并使用特定语言重命名复制的文件,例如mypage.fr.resx用于法语

  2. 将值更改为特定于语言的值


Asp.net使用基于当前线程区域性的resx文件,但问题是CheckedChanged事件发生在Page_Load事件之后,因此CheckedChanged事件方法不是更改线程区域性。

因此,您需要从Request.Form值中手动捕获Page_Init事件(发生在Page_Load之前)中的CheckedChanged值,并设置区域性

或者在CheckedChanged中,在会话或cookie中保存一个值并重新加载页面,在Page_Init中,使用会话/cookie值设置线程区域性

我希望这些文章ASP.NET网页资源概述和如何:以编程方式检索资源值可以帮助您解决问题:

  1. 为ASP.NET网站创建资源文件
  2. 使用网页中的资源
  3. 为不同语言选择资源文件

例如。

<%@ 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.您必须跟踪会话中的UICulture(例如,使用SessionManager类)。然后,您必须在页面上初始化

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();
    }

2.更改页面特定事件的UICulture(在本例中为onCheckedChanged)。在本例中,页面仅提供两种可能的语言,英语或西班牙语

    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);
    }

3.更改页面的标签。最佳方法:使用资源文件,即可以有两个资源文件

您必须使用服务器控件才能实现这一点。例如:

   <asp:Literal ID="lblTitle" runat="server" />

然后你必须在你的代码中更改它:

    lblTitle.Text = GetGlobalResourceObject("Default","labelTitle").ToString();

您可以在此处找到更多信息https://msdn.microsoft.com/en-us/library/fw69ke6f.aspx

4.除了使用页面内容的资源文件外,您还可能需要翻译菜单(当使用网站地图时)

本页向您展示如何做到这一点https://msdn.microsoft.com/en-us/library/ms178426.aspx