ASP.NET网站支持多语言

(本地资源文件和全局资源文件的调用及需注意的地方总结)

 

一、   本地资源文件(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:langlbl_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、全局资源文件可以在本网站的所有页面中调用。

其他需要注意的地方和本地资源差不多,这里就不重复讲解。

以上是我对本地资源和全局资源的理解, 如果有错误的地方请各位大神给予指导。^.^

未解决的问题:

无法实现外部Javascript中调用资源的问题,如果各位大神有好的解决办法,麻烦分享下噢,谢谢哈!

 

关于网站支持多语言问题相关文章:

http://www.cnblogs.com/FredTang/archive/2013/01/23/2873231.html

http://www.cnblogs.com/wenjl520/archive/2010/10/17/1853367.html

http://www.cnblogs.com/lansetiankong/archive/2010/07/30/1788790.html

http://www.cnblogs.com/winsonet/archive/2010/09/08/1821107.html

多语言资源文件制作工具:

http://www.cnblogs.com/LifelongLearning/archive/2010/07/04/1771019.html

ASP.NET 网站支持多语言的更多相关文章

  1. 让asp.net网站支持多语言,使用资源文件

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="test.aspx.cs&quo ...

  2. VS2010 Chart控件(一)Chart控件在ASP.NET网站中的应用示例详解(C#语言)

    步骤如下: 1. Chart控件(一)Chart控件在ASP.NET网站中的应用示例详解(C#语言)" title="VS2010 Chart控件(一)Chart控件在ASP.NE ...

  3. asp.net core 实现支持多语言

    asp.net core 实现支持多语言 Intro 最近有一个外国友人通过邮件联系我,想用我的活动室预约,但是还没支持多语言,基本上都是写死的中文,所以最近想支持一下更多语言,于是有了多语言方面的一 ...

  4. 搭建调用 WebService 的 ASP.NET 网站 (VS2010, C#)

    [系统环境]Windows 7 / 2008r2 [软件环境]Visual Studio 2010 [开发语言]C# [感谢]本文是在 <C#开发和调用Web Service> 一文的基础 ...

  5. 在Windows系统搭建.NET Core环境并创建运行ASP.NET网站

    微软于6月27日在红帽DevNation峰会上 正式发布了.NET Core 1.0.ASP.NET 1.0和Entity Framework Core 1.0,其将全部支持Windows.OS X和 ...

  6. 让你的.NET程序支持多语言

    辛辛苦苦做出来的软件,我们当然希望能让更多的人用,支持多语言是必须的.下面我将以Asp.net Web Form为例来介绍如何支持多语言.其他程序比如windows程序,过程都是大同小异的. 大概分以 ...

  7. NET Core环境并创建运行ASP.NET网站

    kungge 在Windows系统搭建.NET Core环境并创建运行ASP.NET网站 微软于6月27日在红帽DevNation峰会上 正式发布了.NET Core 1.0.ASP.NET 1.0和 ...

  8. FineUIPro中如何支持多语言(全局资源文件和本地资源文件)

    一个客户在邮件中问到了FineUIPro的多语言实现问题,其实 FineUIPro 并没有对此做特殊处理,因此直接使用 ASP.NET 原生支持的资源文件就能实现. 下面我们就以FineUIPro的空 ...

  9. 【转】windows下nginx+mono+fastCGI部署asp.net网站

    原文链接:http://www.cnblogs.com/amityat/archive/2011/08/23/2150153.html 1,什么是nginx 简介Nginx ("engine ...

随机推荐

  1. C语言实现单链表-03版

    在C语言实现单链表-02版中我们只是简单的更新一下链表的组织方式: 它没有更多的更新功能,因此我们这个版本将要完成如下功能: Problem 1,搜索相关节点: 2,前插节点: 3,后追加节点: 4, ...

  2. MYSQL中约束及修改数据表

    MYSQL中约束及修改数据表 28:约束约束保证数据的完整性和一致性约束分为表级约束和列级约束约束类型包括:    NOT NULL(非空约束)    PRIMARY KEY(主键约束)    UNI ...

  3. 结构体快排回顾(sort)

    一般来说,我做竞赛的时候排序一般用快排 很快很方便 普通sort(从小到大) sort(a,a+n); 直接贴一段代码吧,包含了vector,sort,结构体等简单东西综合 #include < ...

  4. 详解Bootstrap面板组件

    面板组件主要作用是用来处理一些其他组件无法完成的功能,在不同的版本中具有不同的源码: LESS:panels.less SASS:_panels.scss 基础面板非常简单,就是一个div容器中运用了 ...

  5. Accessorizer的使用说明!

    工欲善其事,必先利其器 还是这句老话!但是老话藏真金! 今天我们来说说Accessorizer这个软件吧!!Accessorizer这个软件真的很不错!!但是我没有见到程序员使用它!! Accesso ...

  6. Asp.Net实现FORM认证的一些使用技巧(转)

    最近因为项目代码重构需要重新整理用户登录和权限控制的部分,现有的代码大体是参照了.NET的FORM认证,并结合了PORTAL KITS的登录控制,代码比较啰嗦,可维护性比较差.于是有了以下的几个需求( ...

  7. zz c++ Useful resources

    Useful resources < cpp The Standard C++ Foundation - Non-profit hub for C++ news, articles, and e ...

  8. int android.graphics.Bitmap.getRowBytes()

    int android.graphics.Bitmap.getRowBytes() Return the number of bytes between rows in the bitmap's pi ...

  9. 使用ClipboardUtils兼容API LEVEL 11以下实现复杂粘贴

    实现功能:复杂粘贴内容 问题描述:android.content.ClipboardManager在APILevel 11之后才可以使用,而我们目前还要兼容API Level 10(2.3.3) 解决 ...

  10. webdriver实用指南迁移至gitbbok并改名为selenium webdriver从入门到提高

    背景 几年前我写了一本关于selenium webdriver的小册子,主要讲了一些selenium在进行测试过程中会遇到的场景以及解决方案,陆陆续续在github上收到了100+的star,在这里我 ...