一个网站可能具备多个语言,要实现这个功能在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

最新文章

  1. 转 C# 只允许运行一个实例
  2. Intel Code Challenge Final Round (Div. 1 + Div. 2, Combined) E. Goods transportation (非官方贪心解法)
  3. 文本提交带单引号引起mysql报错
  4. QEMU/KVM功能测试
  5. C#中,接口不能被实例化,但存在特例
  6. 第一个Sprint冲刺第四天
  7. JSF 2 textarea example
  8. java守护线程(后台线程)
  9. QT Slot/Signal
  10. Makefile分析基础
  11. Cocos2d-x3.0 RenderTexture(一) 保存
  12. white-space详解
  13. 老李分享:robotium3.6与4.0 later 的区别 2
  14. Orcle导入导出dmp文件
  15. django同时查询两张表的数据,合并检索对象返回
  16. ANSYS渡槽槽身动水压力的施加(2)——U型渡槽
  17. Eclipse给安卓应用签名
  18. AppiumDriverLocalService 启动appium控制台不显示日志以及把日志保存到本地
  19. 多线程执行顺序诡异现象谈,你不知道的pthread_create
  20. ruby里面module和class的区别

热门文章

  1. Xshell连接linux(deepin)时提示ssh服务器拒绝了密码,请再试一次解决方法
  2. Redis实现用户关注功能
  3. jQuery到Vue的迁移之路
  4. js学习路线
  5. python---信用卡ATM
  6. poj1222(枚举or高斯消元解mod2方程组)
  7. 51nod1445(最短路)
  8. OkHttp 3.x 源码解析之Interceptor 拦截器
  9. ios配置xmpp即时聊天-服务器端
  10. P2105 K皇后