.NET系统学习----Globalization & Resources
l 前言
l 了解资源文件
l 创建资源文件
l 在程序中使用资源文件
l 资源文件的命名和部署
l 参考
前言:
在学习如何使用.NET资源文件以及如何开发World-Ready程序之前,我们先通过一个例子来看看为什么要使用资源文件,以及使用它的好处。
假设要在程序中根据当前的Culutre来设置Form的Title和Logo:
private void Form1_Load(object sender, System.EventArgs e) {
CultureInfo ci = new CultureInfo(Thread.CurrentThread.CurrentUICulture.ToString());
switch (ci.ToString().ToLower()) {
case "zh-cn": // 中文版本
this.Text=FormTitle_ZH_CN;
imgLogo.Image = new Bitmap(Application.StartupPath + "/Logo_ZH_CN.jpg");
break;
case "en-us": // 英文版本
this.Text=FormTitle_EN_US;
imgLogo.Image = new Bitmap(Application.StartupPath + "/Logo_EN_US.jpg");
break;
default: // 默认版本
this.Text=FormTitle_Neutral;
imgLogo.Image = new Bitmap(Application.StartupPath + "/Logo_Neutral.jpg");
break;
}
}
这段代码有两个问题:
首先,Logo文件是暴露给用户的,而且是以普通文件的格式存储的,这导致其他程序或是用户很容易修改这些文件;节省硬盘空间的用户还可能会选择删除它,这些都可能会导致应用程序出错。确保图片或任何其他文件和代码在一起的唯一的安全方式是将它作为资源文件嵌入在程序集中并加载。
其次,这是一个World-Ready程序,如果需要新加入一个新的Culture,你可能不得不更改你的源代码,加入新的case,然后重新编译来适应新的Culture的需要,这对一个World-Ready程序来说是不现实的。开发World-Ready程序很重要的一点就是要保证程序的逻辑界面和资源界面的隔离。任何时候加入一个新的Culture资源,我们都不应该重新编译源程序,相反,我们只需要把新的资源文件准备好,然后发布给用户并部署在合适的目录下就可以了。应用程序应该能够根据不同的Culture来自动寻找合适的资源。
本文的目的就是通过实例来帮助读者了解什么是Resources,以及如何使用Resources来消除上面所提到的两个问题。
全文分为四部分:
第一部分是一些和资源相关的概念。
第二部分是一个实例程序(ResourceGenerator),用来说明如何创建资源文件。
第三部分是另外一个实例程序(WorldAPP),用来说明如何在程序中使用资源文件
第四部分是关于资源文件的命名和部署。分别介绍.NET中资源文件的命名方式和如何在World-Ready程序中配置资源文件。
第一部分 概念
先来了解一些概念:
1. 什么是资源文件
顾名思义,资源文件当然包含的全是资源。不过,什么是资源?这里所谓的资源就是程序中可利用的任何数据,譬如:字符串、图片或任何二进制格式的数据。一个资源文件可以有多种语言文化版本,比如,一个Culture.resources 文件可以有英语版、简体中文版日文版等。ResourceManager可以自动根据Culture和资源文件名来确认调用哪个版本。只不过不同的资源版本需要在文件名中加入语言文化信息(.resource文件有一套严格的命名规范,参考第四部分:资源文件的命名和部署)。
2. 资源文件的类型
System.Resources名称空间支持三种类型的资源:
.txt文件,只能有字符串资源。因为不能被嵌入到