• ASP.NET中多语言的实现


    一个网站可能具备多个语言,要实现这个功能在ASP.NET中是非常简单的。我们需要为项目添加资源文件文件夹,并且添加针对网站的特定的资源文件等即可。在ASP.NET中资源文件分成两类:全局和页面级(即“本地”级)。

    一、全局资源文件:

      顾名思义,全局资源文件是供整个网站内部全部页面调用的。因此必须放在App_GlobalResources中(可以通过右键创建该文件夹,然后继续右键创建资源文件)。

      命名规则:任意。

      使用规则:使用“<$Resources:全局资源文件名称,资源名称>”进行对特定属性的绑定。

      当然,也可以通过后台代码形式绑定(因为生成了强类型:可以通过Resource.全局资源文件名.资源名称)形式绑定读取。

      注意:如果是多语言的话,应该按照以下命名规则进行:任意全局文件名称.语言(区域)名称.resx。

      绑定的时候则按照上面蓝色(使用规则)进行绑定,注意此时“全局资源文件名称”不能指定语言区域!

    二、页面级资源文件:

      也叫本地资源文件,一般只用于单个页面。命名规则:控件的ID.属性名。

      绑定的时候只要手动在某个控件之后增加meta:resourceKey="本地资源文件中控件的ID",注意ID和控件的ID必须对应!

      如果针对某个页面特定控件创建多语言版本,命名规则:页面名称.aspx.语言(区域).resx。

    三、示例代码:

      本实例演示多语言版本:

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" Inherits="CSharp.WebForm1" UICulture="zh-CN" %>
    
    <!DOCTYPE html>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        <title>语言测试</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            请选择对应语言:
            <asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True">
                <asp:ListItem Value="zh-CN">中文</asp:ListItem>
                <asp:ListItem Value="en-US">英语</asp:ListItem>
            </asp:DropDownList>
            <asp:Panel ID="Panel1" runat="server" BackColor="<%$Resources:GlobalResource,PanelBackColor %>">
                <asp:Label ID="Label1" runat="server" Text="Label" meta:resourceKey="Label1"></asp:Label>
            </asp:Panel>
        </div>
        </form>
    </body>
    </html>

    注意上面代码中划线的部分——UlCulture,可以直接指定当前页面的语言(假设是zh-CN)。另外注意绑定的方式。

    项目结构:

    两个全局文件中定义了一个叫做PanelBackColor的Key,而值则是(zh-CN:Red,默认是LightBlue)。同理,两个本地资源文件中定义了Label1作为Key,zh-CN中是中文“欢迎来到ASP.NET的世界”,另外一个是英语版本。大家可以测试一下。

    以下给出后台代码:

    public partial class WebForm1 : System.Web.UI.Page
        {
            /// <summary>
            /// 动态设置当前语言,改变当前线程的语言
            /// </summary>
            protected override void InitializeCulture()
            {
                string language = Request.Form["DropDownList1"];
                if (language != null)
                {
                    Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(language);
                }
            }
        }

    另外想补充一点:

    1)动态改变当前语言,必须按照后台代码(重写InitializeCulture)实现。

    2)或者可以修改配置文件(全局其作用, system.web节点下追加):

    <globalization uiCulture="zh-CN"/>

    3)又或者在aspx中加入UICulture属性(参考我给出的aspx示例代码)。

    其中如果同时设置,优先级大小如下:2<3<1

  • 相关阅读:
    缓存
    Java缓存
    数据库事务
    spring 事务管理
    MySQL错误解决10038
    mysql存储过程
    ECS修改默认端口22及限制root登录
    xunsearch安装配置
    https和http共存的nginx配置
    ECS 安装redis 及安装PHPredis的扩展
  • 原文地址:https://www.cnblogs.com/ServiceboyNew/p/3162382.html
Copyright © 2020-2023  润新知