• ASP.NET开发的网站如何实现多语言的功能啊?
  • 发布于 2个月前
  • 171 热度
    3 评论
  • 王建栗
  • 0 粉丝 16 篇博客
  •   
最近开发一个网站,老板要求要能同时支持中文,英文和法文三种语言,这种多语言的功能要怎么实现?做三套模板吗?
用户评论
  • 泪水的诉求
  • 你可以使用数据库把不同版本的显示内容存储起来,然后你根据用户选择的不同语言去数据库抓取相关语言的显示内容并最终呈现出来就好了
  • 2018/5/17 11:47:00 [ 0 ] [ 0 ] 回复
  • 赵睿
  • 一、   本地资源文件(App_LocalResources):

    ①、     本地资源的生成及调用
    1、本地资源的VS自动生成方法:
    将页面调整到【设计】视图,然后在VS2008菜单栏中

    【工具】=》【生成本地资源】即可生成该页面的资源文件,在App_LocalResources文件夹中可查看。eg:Default2.aspx.resx

    2、本地资源的手动生成方法:
    选中网站=》添加新项=》然后选择【资源文件】即可创建一个资源文件,但是此时可以看到刚刚创建的资源文件.resx存放在App_GlobalResources文件夹中,当前为全局资源文件,需要在网站中创建一个名为App_LocalResources的文件夹(即本地资源文件夹)然后将刚刚创建的全局资源文件拖到当前文件夹中即可,然后在调用的时候需要在控件中添加meta:resourcekey=”资源键” 代码,具体在调用中讲解。

    3、本地资源的调用:
    (1)、服务器控件
       1.1、前台隐示使用本地化资源,VS2008自动生成本地资源在控件中就会自动包含meta:resourcekey=”资源键” 代码,如果某控件未扫描到则就不会有该代码标识需要手动添加此代码
    eg:
    <asp:Label ruant=”server” ID=”lbl_msg”  meta:resourcekey=”lbl_msg” ></asp:Label>
       1.2、前台显示使用本地化资源
    eg:
    <asp:Label ruant=”server” ID=”lbl_msg” 
    Text=”<%$  Resources: lbl_msg .Text %>”
    ToolTip=”<%$  Resources: lbl_msg .ToolTip %>”

    ></asp:Label>

    1.3、后台编码时使用本地化资源
    方法一:
    //后台通过资源键来获取资源值,然后赋值给页面对象
    this.txtbox1.Text=(string)GetLocalResourceObject("资源键");
     或
    this.txtbox1.Text=(string)HttpContext.GetLocalResourceObject("资源文件名", "资源键");
    (2)、非服务器控件(HTML控件,input …):

       1.1、html控件或input控件都无法自动生成资源文件,需要手动添加meta:resourcekey=”资源键” 标记,并将其添加到资源文件中,但必须注意的是控件中必须添加服务器标识属性,即:runat=”server”

    eg:
    <input id=”txt_msg” type=”text” meta:resourcekey=” txt_msg” />
    测试结果:无法显示资源txt_msg值,将其修改如下:
    <input id=”txt_msg” type=”text” meta:resourcekey=”txt_msg”  runat="server" />
    测试结果:正常显示资源txt_msg值

    ②、注意事项:
    1、  每个页面必须包含一个默认的本地资源文件,(资源文件名和页面文件名区别在于资源文件名是在页面文件名(包含文件的后缀)基础上添加一个.resx后缀)
    eg:index.aspx.resx。

    默认的本地资源文件的作用:当其他本地资源文件,eg:index.aspx.en-US.resx 或…资源文件中未包含某键,而默认的本地资源文件中包含某键,则从默认的本地资源文件中取值。

    2、  如果页面需要支持多语言则可以复制默认的本地资源文件,然后修改其文件名称
    eg:index.aspx.en-US.resx(英文)
    然后将index.aspx.en-US.resx中的键值修改为英文即可

    3、  1)如果需要将所有的页面都使用同一种语言则可以配置web.config文件,前提将页面Page指令中的culture="auto" uiCulture="auto" 删除,否则首先使用页面中的语言形式
    eg:
    <system.web>
    <!—en-US(英文),zh-CN(中文)  … 
    UICulture - 针对用户界面的安钮之类的控件显示
    Culture - 决定各种数据类型是如何组织,如数字与日期,货币
    -->
             <globalization culture="en-US"  uiCulture="en-US"/>
    </system.web>
           2)如果某个页面和其他的页面使用的语言不同,则可以在某个页面Page命令中设置culture和uiCulture, 这两个属性的作用是使页面优先跟据浏览器的语言设置自动加载相应语言的资源文件等显示方式
      eg:
     <%@ Page culture="zh-CN" uiCulture="zh-CN" %>
    4、  如果想在页面后台(即.cs文件)通过传递参数的方式设置使用的语言,则
    eg:
    命名空间引用:
    using System.Threading;
    using System.Globalization;
    protected override void InitializeCulture()
    {
    string culture = Request.QueryString[“culture”].ToString();
            if (culture != "")
            {
                Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(culture);
                Thread.CurrentThread.CurrentUICulture = new CultureInfo(culture);
            }
            else

            {
               //默认中文
                Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("zh-CN");
                Thread.CurrentThread.CurrentUICulture = new CultureInfo("zh-CN");
            }
            base.InitializeCulture();

    }

     通过传递编码参数的方式,进行重写InitializeCulture (初始化语言方法)来改变页面语言显示方式。

    5、  本地资源文件只能在本页面调用,不能被其他页面调用,假如有两个页面Index1.aspx和Page 2.aspx则,如下资源文件
    eg:Index1.aspx.resx
    Page2.aspx.resx
    Index1.aspx页面不能调用Page 2.aspx.resx中的资源键值;
    Page 2.aspx页面也不能调用Index1.aspx.resx中的资源键值;
    Index1.aspx页面只能调用Index1.aspx.resx中的资源键值;
    Page 2.aspx页面只能调用Page 2.aspx.resx中的资源键值;

    二、   全局资源文件(App_GlobalResources):
    ①  、全局资源的生成及调用
    1、全局资源的手动生成方法:
    选中网站=》添加新项=》然后选择【资源文件】即可创建一个资源文件,但是此时可以看到刚刚创建的资源文件.resx存放在App_GlobalResources文件夹中,当前为全局资源文件.
    2、前台全局资源文件的调用:
      1)、在需要调用的控件中添加<%$ Resources : 资源文件名,资源键 %>
    eg:
    <asp:Label ID="lbl_global" runat ="server"  Text ="<%$ Resources:lang,lbl_global %>">
    </asp:Label>
     2)、前台页面级JavaScript中调用全局资源文件方法:
    <%= Resources .资源文件名 . 资源键 %>
    eg:
    <script>
    var msg=” <%= Resources . lang . lbl_global %>”
    </script>
      3、后台全局资源文件的调用:
          1)、在后台直接使用Resources  .资源文件名  .资源键 方可获取资源值
            eg:
           this. lbl_global.Text=Resources . lang . lbl_global ;
          //后台获取image类型对象
           System.Drawing.Bitmap imgJpg= Resources.lang.img_jpg
         2)、
    //后台通过资源键来获取资源值,然后赋值给页面对象
    this.lbl_global.Text=(string)GetGlobalResourceObject ("资源键");

    this.lbl_global.Text=(string)HttpContext.GetGlobalResourceObject("资源文件名", "资源键");
         3)、后台使用 ResourceManager类来获取资源
             ResourceManager rm = new ResourceManager(Resource1.ResourceManager.BaseName,
                    Assembly.GetExecutingAssembly());
    string str=rm. GetString(“资源键”);
    ②  注意事项:
    1、全局的资源文件,存放在App_GlobalResources文件夹中,以.resx为后缀,首先必须添加一个默认的全局资源文件
    eg:lang.resx。
    默认的全局资源文件的作用:①、当其他全局资源文件,eg:lang.en-US.resx 或lang.zh-CN.resx等 资源文件中未包含某键,而默认的全局资源文件中包含某键,则从默认的全局资源文件中取值;②、资源调用时只能通过默认的资源文件名去调用,即
    Resources . lang . 资源键   (正确√)
    而不能使用
    Resources . lang . en-US . 资源键; (错误×)
    lang.en-US.resx 或lang.zh-CN.resx 只是根据使用的语言不同来自动调用
    2、全局资源文件可以在本网站的所有页面中调用。
  • 2018/5/17 11:44:00 [ 0 ] [ 0 ] 回复