如何让我的webform成为多语言?

时间:2014-09-30 06:16:19

标签: c# asp.net webforms devexpress multilingual

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

需要使用Web表单来更改CheckedChanged事件的语言。

我已经阅读了谷歌的一些文章, 但似乎需要逐个设置所有控件。

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

Label1.Text = ...;

Label2.Text = ...;

...

Label30.Text = ...;

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

请帮助!!!

3 个答案:

答案 0 :(得分:1)

我希望这些文章ASP.NET Web Page Resources OverviewHow to: Retrieve Resource Values Programmatically可以帮助您解决问题:

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

    <%@ 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>
  1. 创建资源文件
  2.   

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

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

    2.   
    3. 切换到设计视图。

    4.   
    5. 在“工具”菜单中,单击“生成本地资源”。 (它将在本地资源文件夹中创建资源文件)

    6.   
    7. 在应用程序中键入所需资源的值,然后保存文件。

    8.   

    了解更多Creating Resources From a Web Page

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

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


    3. Asp.net使用基于当前线程文化的resx文件,但问题是CheckedChanged事件发生Page_Load事件,因此CheckedChanged事件方法不是更改的正确位置线程文化。

        

      因此,您需要在CheckedChanged事件(在Page_Load之前发生)事件中手动捕获Page_InitRequest.Form值并设置文化

           

      或者在CheckedChanged内部保存会话或cookie中的值并重新加载页面,并在Page_Init中使用session / cookie值来设置线程文化

答案 2 :(得分:0)

考虑几个方面:

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