ASP.NET 2.0及以上的开发平台,为全球化本地化应用程序提供了工具,而且实现起来非常简单。以下内容是使用c#,按照帮助一步步做的,将为初学者提供详细的实现步骤。

一 几个必要概念
 (一) 支持全球化
  由于Internet使得软件更容易跨越国家边界,所以全球化也就有了格外的重要。

  1. 全球化
  全球化是为本地化准备应用程序的过程。这一步包括确定应用程序中所有能够本地化的资源,并从可执行代码中分离车它们,一方便对它们进行修改。

  2. 本地化能力
  在此准备过程的本地化能力阶段,需要检查确定转化该应用程序是否真的不需要改变程序代码。

  3. 本地化
  再后,在此准备过程的本地化阶段,为新的区域性定制该应用程序。

 (二) 区域性

  1. 理解区域性
  .NET框架通过通过指定某个区域性来标识本地化内容的目标用户。区域性是比语言更为精确的一个概念。例如:美国英语和英国英语在.NET框架中就是两个不同的区域性。要完全本地化某个应用程序,就必须依靠区域性而不能依靠语言。

  2. 区域性代码
  .NET框架通过一组缩写词来表示区域性。每个缩写词是由区域性代码后跟一个或多个次区域性代码组成。区域性代码均为小写字母,而次区域性代码则为大写字母。例如:
  ·ni-BE 标识荷兰(比利时)区域性。方便生活在比利时的荷兰用户使用。
  ·sr-SP-Latn 这是多个次区域性的示例,标识在塞尔维亚以拉丁字母蛇蝎的塞尔维亚语。
  ·es 标识西班牙区域性。这是个非特定区域性,也就是不再指定次区域性。

 (三) 区域性的属性和方法

  1. CurrentUICulture和CurrentCulture之间的区别
  两者之间的区别在于.NET框架对他们的使用。CurrentUICulture属性用于从适当的文件检索区域性特定的资源(最重要的是用户界面文本)。CurrentCulture属性用于设置日期、时间、货币和数字格式,以及其他区域性的功能,包括排序顺序、字符串比较规则和包装规则等。

  在没有看完整个本文的情况下,以下示例可以不看,以免混淆概念。
  2. 可以通过使用System.Globallization命名空间中的CultureInfo类,简单更改线程的区域性。

  具体改变一个线程的区域性
  

using System;
using System.Globalization;
using System.Threading;
class test
{
public static void main()
{
Thread.CurrentThread.CurrentCulture = new CultureInfo("de-DE");
Console.WriteLine(CultureInfo.CurrentUICulture.Name);
}
}

二 创建文件系统网站
  打开 vs2005, 在菜单“文件”--“新建网站”,在“Visual Studio 已安装的模板”之下单击“ASP.NET 网站”。在“位置”框中输入要保存网站页面的文件夹的名称。 例如,键入文件夹名“C:\WebSites”。在“语言”列表中,单击您想使用的编程语言c#。单击“确定”。系统(Visual Web Developer) 创建该文件夹和一个名为 Default.aspx 的新页。

三 通过 ASP.NET 进行隐式本地化

 (一) 自动生成资源文件
  
  单击Default.aspx 页面底下的“设计” 或 “源”,可在 “设计”视图 和 “HTML源代码”视图 之间来回切换。

  1. 切换到“设计”视图。

  在“工具箱”中,从“标准”区域中将一个 Button控件拖动到页上。单击设计器图面或控件。
  在菜单上“工具”--“生成本地资源”,系统将在解决方案中自动创建一个 App_LocalResources 新文件夹,并在其中自动对应页面文件名称创建一个 Default.aspx.resx 新文件。使用隐式本地化时,资源文件名取决于各个页的名称。

  2. 切换到“源”视图。
  查看对控件声明的更改,系统已向控件添加了一个属性,以从新创建的资源文件检索其值。例如,Button 控件的标记具有新的 meta:resourcekey 属性。
  

<asp:Button ID="Button1" Runat="server" meta:resourcekey="ButtonResource1" Text="Button" />

  3. 浏览器向 Web 服务器发送区域性请求
  当浏览器向 Web 服务器发送请求时,该请求可包含有关当前语言和区域性的信息。例如,一个浏览器可能会发送字符串 "en-us" 以指示它已设置为使用美国英语;而另一个浏览器可能发送字符串 "zh-cn" 以指示它已设置为使用中国中文。

  4. 回退区域性的资源文件
  该资源文件用作所有请求的默认资源文件。(它是回退区域性的资源文件。)如果浏览器未指定任何区域性,或者浏览器请求包含不支持的语言或区域性,则会从此默认文件提取资源值。

  5.使用资源编辑器编辑资源文件
  现在已创建了资源文件,您可以使用资源编辑器将本地化后的文本放入该文件中。
  在解决方案资源管理器中打开 Default.aspx.resx
  在资源编辑器的“值”下,列出了页中放置的每个控件的“Text”属性。在此处更改值会导致更改默认区域性的值。 将“ButtonResource1.Text”设置为 local-auto-english。 保存该文件。

  对页进行测试,按 Ctrl+F5 运行该页,就会看到所做的改变。

 (二) 添加其他区域性

  每种语言和区域性的组合均需要有唯一的资源文件。若要添加其他区域性,可以使用默认文件作为起点。可以为不同的区域性和区域设置创建资源文件,方法是创建新的资源文件,并在文件名中包含 ISO 语言代码(如 zh-cn、en-us、fr-ca 和 en-gb)。这些 ISO 代码位于页名和 .resx 文件扩展名之间,如 Default.aspx.en-us.resx。若要指定非区域性特定的语言,则应删除国家/地区代码,例如指定法语时应使用文件名 Default.aspx.fr.resx。

  1.
  在解决方案资源管理器中,右击 Default.aspx.resx 文件,并单击“复制”。
  右击 App_LocalResources 文件夹,然后单击“粘贴”。
  右击“副本 Default.aspx.resx”文件,单击“重命名”,然后键入“Default.aspx.zh-CN.resx”。

  仿上,再建立一个 Default.aspx.en-US.resx 文件。双击打开以上两者,将 Button控件的“ButtonResource1.Text”分别设置为  本地化-可选修改-中文  和 local-modify-english 。并分别保存文件。

  结果如下:
  

 
文件Default.aspx.zh-CN.resx的内容
名称
ButtonResource1.Text 本地化-可选修改-中文
文件Default.aspx.en-US.resx的内容
名称
ButtonResource1.Text local-modify-english

  对页进行测试,按 CTRL+F5 运行页。按钮将显示为: 本地-修改-中文

  2. 用备用语言设置进行测试
  若要查看 ASP.NET 是否在使用这个新的资源文件,必须先将浏览器设置更改为请求所需的区域性。

  更改IE浏览器的语言设置,在 Microsoft Internet Explorer 中,单击菜单“工具”--“Internet 选项”。
  单击下部的“语言”。在“语言首选项”对话框中单击“添加”。
  在“添加语言”对话框的“语言”下,单击“英语(美国)[en-us]”,然后单击“确定”。
  在“语言首选项”对话框的“语言”下,单击“英语(美国)[en-us]”,单击“上移”,直到首位,再单击“确定”。
  Internet Explorer 现在设置为将 en-us 作为所有请求的语言设置传递。在 Default.aspx 页中将区域性设置为 auto 时,ASP.NET 会试图根据语言和区域性首选项定位资源文件及其相应值以生成页。

  对页进行测试,按 CTRL+F5 运行页。按钮将显示为: local-modify-english

  3. 在文件web.config中的语言选择

<system.web>
<globalization culture="en-US" uiCulture="en-US"/>
</system.web>

  这里文件web.config中的设置,将覆盖IE浏览其中的设置,而且为所有的网页所共有。   

  4. 单独页面的语言选择
  在单独页面的语言选择,使用指令 <%@ Page  Culture="zh-CN"   UICulture="zh-CN" %>
  它将覆盖IE浏览器,以及文件web.config中的设置,为自己所用。
  例如: UICulture="zh-CN" ,不管文件web.config和IE的语言如何设置,都将显示中文的信息。

  而当指令 <%@ Page 中的语言设置为 UICulture="auto"时,将先接受文件web.config,再接受IE的语言设置顺序。

  5.Culture和UICulture区别
  Culture主要针对有关日期/货币等语言内部的,  而 UICulture针对用户界面的安钮之类的控件显示。

四 使用显式本地化

  在上面部分,您已通过使用 ASP.NET 隐式本地化让控件显示本地化的文本。您生成了一个包含属性 (Property) 值的资源文件,并且在该过程中为每个控件添加了一个属性 (Attribute),该属性 (Attribute) 指示控件从资源文件填充其属性 (Property) 值(如果有)。隐式本地化自动工作,也就是说,您不需要逐个指定每个属性从资源文件读取信息的方式。
  但是,有时可能需要对属性的设置方式进行更直接的控制。要达到这个目的,不应使用隐式本地化,而应使用显式本地化。通过显式本地化,可以使用指向资源文件的表达式设置属性值。运行页时,会对表达式进行计算,从指定的资源文件中读取该值,然后使用该值设置属性。
  如果除了控件和标签外还需要本地化大量的文本或自定义消息,则显式本地化十分有用。例如,您可以为电子商务站点开发一系列本地化的欢迎消息和感谢消息,然后使用显式声明性表达式将此文本放置在页上。此外,显式本地化允许维护一个本地化的资源文件集,而不是为每个页单独维护一个文件集。

  1. 建立任意资源名称 
  在本部分中,您将手动创建资源文件,然后使用 ASP.NET 声明性表达式语法引用这些文件。您将为一个简单的感谢消息创建一个资源文件。与使用设计器时不同,此时不需要为每个 ASP.NET 页创建一个单独的资源文件。
  为了好记,将资源文件的基名称,写为我的名称 WuchaoText ,将来是区别资源的类名。对于要本地化的每种语言,都将另外创建一个文件,并在文件名中包含相应的语言代码(有时可能还有区域性代码)。例如,对于中国中文,将创建名为 WuchaoText.zh-CN.resx 的文件。对于美国英语,将创建名为 WuchaoText.en-US.resx 的文件。这两个文件都将放在 Web 应用程序的 Resources 目录下。与前面介绍的隐式示例不同,您无需为每个 .aspx 页维护一个资源文件;相反,您可为支持的每种语言或区域性维护一系列文件。

  2. 创建全局资源文件
  在解决方案资源管理器中,右击网站的根目录,单击“添加 ASP.NET 文件夹”,然后单击“App_GlobalResources”。

  右击“App_GlobalResources”文件夹,然后单击“添加新项”。
  在“Visual Studio 已安装的模板”之下单击“资源文件”。
  在“名称”框中,键入 WuchaoText.resx,然后单击“添加”。
  WuchaoText.resx 文件将充当回退区域性的资源。
  再创建两个 .resx 文件,并将其命名为 WuchaoText.zh-CN.resx 和  WuchaoText.en-US.resx 。
  双击打开以上两个 .resx 文件。
  在“名称”列的第一行中都键入 g_AddStr。
  而在“值”列的第一行中,分别键入  全球化-必须手工添加-中文  和 global-must-hand-add-english。

  结果如下:

文件WuchaoText.zh-CN.resx的内容
名称
g_AddStr 全球化-必须手工添加-中文
文件WuchaoText.en-US.resx的内容
名称
g_AddStr global-must-hand-add-english

  保存两个文件并将其关闭。

  注意
  若要插入带锐音符(如 í)的字母,请在打开数字锁定的同时使用数字键盘键入 Alt+0237。
  现在已经为名为 g_AddStr 的资源创建了两个值。ASP.NET 将根据浏览器设置的语言从相应的资源文件中读取值。
  现在已创建资源文件,您可以返回到页,并添加引用该资源的控件。

  3. 向页添加 Label 控件

  切换到页面 Default.aspx,然后切换到“设计”视图。
  从“工具箱”中将一个 Label 控件拖动到页上。
  右击该 Label 控件,单击“属性”,然后找到 数据 (Expressions),单击其右侧框中的省略号 (…) 按钮。将出现“表达式”对话框。
  在“可绑定属性”列表中单击“Text”。
  在“表达式类型”列表中选择资源“Resources”。
  在“表达式属性”下,将类名键“ClassKey”设置为 WuchaoText ,并将资源键“ResourceKey”选择设置为 g_AddStr。
  单击“确定”。
  切换到“源”视图。
  标签的文本属性现在具有一个显式表达式,说明将从其中检索要选择的资源和键的基文件。

  

<asp:Label ID="Label1" Runat="server" Text="<%$ Resources:WuchaoText, g_AddStr %>">

  注意
  WuchaoText 属性不具有语言指示符、区域性指示符或 .resx 扩展名,因为它不是实际的文件名。实际上,WuchaoText 表示基资源类。ASP.NET 将根据浏览器发送的区域性,从文件名中包含相应的语言或区域性代码的文件中选择资源,文件名可能类似 WuchaoText.zh-CN.resx 和  WuchaoText.en-US.resx,或者,如果未找到匹配的语言,则为 WuchaoText.resx。
  对页进行测试,按 Ctrl+F5 运行该页。测试期间,会多次更改浏览器的语言。在资源编辑器中提供的不同版本的文本将显示为 Label 控件的文本。

五  网页HTML源代码

  1. 默认创建网页的第一行
  

<%@ Page Language="C#"   CodeFile="Default.aspx.cs" Inherits="_Default" %>

  2. 创建本地资源后网页的第一行
  

<%@ Page Language="C#"   CodeFile="Default.aspx.cs" Inherits="_Default" Culture="auto" meta:resourcekey="PageResource1" UICulture="auto" %>

  3.最终的网页源代码为:网页强制按简体中文显示

<%@ Page Language="C#"   CodeFile="Default.aspx.cs" Inherits="_Default" Culture="zh-CN" meta:resourcekey="PageResource1" UICulture="zh-CN" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Button ID="Button1" runat="server" meta:resourcekey="Button1Resource1" />
<asp:Label ID="Label1" runat="server" Text="<%$ Resources:WuchaoText, g_AddStr %>"></asp:Label></div>
</form>
</body>
</html>

ASP.NET全球化与本地化 c#多国语言的支持 (项目支持多国语言的开发)的更多相关文章

  1. ASP.NET Core 中文文档 第三章 原理(6)全球化与本地化

    原文:Globalization and localization 作者:Rick Anderson.Damien Bowden.Bart Calixto.Nadeem Afana 翻译:谢炀(Kil ...

  2. Asp.Net Core 混合全球化与本地化支持

    前言 最近的新型冠状病毒流行让很多人主动在家隔离,希望疫情能快点消退.武汉加油,中国必胜! Asp.Net Core 提供了内置的网站国际化(全球化与本地化)支持,微软还内置了基于 resx 资源字符 ...

  3. ASP.NET Core搭建多层网站架构【13-扩展之支持全球化和本地化多语言】

    2020/02/03, ASP.NET Core 3.1, VS2019, ResXManager 摘要:基于ASP.NET Core 3.1 WebApi搭建后端多层网站架构[13-扩展之支持全球化 ...

  4. WPF全球化与本地化

    当一个App需要推出多语言版本时,就需要使用到[全球化与本地化]服务. 原理及过程 资源文件中包含了所有的控件信息,通过导出这些控件信息,修改其对应的相关属性(比如TextBlock的Text属性)的 ...

  5. 在asp.net core2.1中添加中间件以扩展Swashbuckle.AspNetCore3.0支持简单的文档访问权限控制

    Swashbuckle.AspNetCore3.0 介绍 一个使用 ASP.NET Core 构建的 API 的 Swagger 工具.直接从您的路由,控制器和模型生成漂亮的 API 文档,包括用于探 ...

  6. [.NET Core]ASP.NET Core中如何解决接收表单时的不支持的媒体类型(HTTP 415 Unsupported Media Type)错误呢?

    [.NET Core]ASP.NET Core中如何解决接收表单时的不支持的媒体类型(HTTP 415 Unsupported Media Type)错误呢? 在ASP.NET Core应用程序中,接 ...

  7. WPF页面 全球化和本地化

    传统的 新建.resx类型的文件中,然后利用ResourceManager来得到相应资源并根据当地的CultureInfo来给界面文本赋值. WPF 新建一个文件夹 Language 新建2个资源字典 ...

  8. WPF全球化与本地化 (二)

    Visual Baml Visual Locbaml is a free and open-source software to simplify the task of WPF applicatio ...

  9. mysql之全球化和本地化:字符集、校对集、中文编码问题

    本文内容: 什么是字符集?什么是校对集? 查看字符集和校对集 设置字符集和校对集 mysql中的中文数据问题 首发日期:2018-04-19 什么是字符集?什么是校对集? 字符集是字母和符号的集合,每 ...

随机推荐

  1. 软件测试技术之可用性测试之WhatsApp Web

    Tag:可行性测试.测试流程.结果分析.案例分析 WhatsApp是一款面向智能手机的网络通讯服务,它可以通过网络传送短信.图片.音频和视频.WhatsApp在全球范围内被广泛使用,是最受欢迎的即时聊 ...

  2. (转载) 搭建非域AlwaysOn win2016+SQL2016

    非域搭建Alwayson只是省去搭建域控那一部分,其他大同小异 条件: 操作系统:windows server 2016 数据库:SQL Server 2016 SSMS版本:17.3 节点1:HDD ...

  3. nohup 后台执行

    nohup  默认是当前用户执行的,当当前用户退出会导致执行进程异常. 所以正确的 nohup 是指定 /bin/bash 进行执行. nohup /bin/bash/ /opt/script/s.s ...

  4. 64位内核第三讲,Windbg的使用.以及命令

    目录 一丶驱动的调试. 1.线程 2.断点 3.内存查看命令 4.修改内存命令 5.栈相关操作命令 6.进程线程命令(内核命令) 一丶驱动的调试. 编写驱动免不了调试.所以这里介绍一下WinDbg的常 ...

  5. 如何查询数据库中所有表格,或者查询是否存在某个表格-mysql和oracle

    这个问题,在之前就有写过,但是想找到语句还是记不得,这里主要提及我自己有用到的数据库mysql和oracle 1.mysql 这个是自己安装的,所有配置都是默认配置没有改变,所以保存表名的表还是inf ...

  6. 解释下Http请求头和常见响应状态码

    Accept-Charset:指出浏览器可以接受的字符编码.英文浏览器的默认值是ISO-8859-1.ccept:指浏览器或其他客户可以接爱的MIME文件格式.可以根据它判断并返回适当的文件格式. A ...

  7. Redis面试问答(子文章)(持续更新)

    -----> 总文章 入口 文章目录 [-----> 总文章 入口](https://blog.csdn.net/qq_37214567/article/details/90174445) ...

  8. 重写mybatis的字符串类型处理器

    1.简介 无论是 MyBatis 在预处理语句(PreparedStatement)中设置一个参数时,还是从结果集中取出一个值时, 都会用类型处理器将获取的值以合适的方式转换成 Java 类型. St ...

  9. vmware exsi安装部署

    本文章参考:https://blog.csdn.net/fishinhouse/article/details/80980051 1.VMware-ESXi-6.5.0镜像下载 网盘链接:https: ...

  10. Android中Popupwindow和Dialog的区别

    Android中的对话框有两种:PopupWindow和AlertDialog.它们都可以实现弹窗功能,但是他们之间有一些差别,下面总结了一点. (1)Popupwindow在显示之前一定要设置宽高, ...