.Net 下国际化资源文件的应用(一)
在上一篇的随笔中,简单的记录了.Net下的Attribute的一些应用,在实际使用Net进行开发中,对它的针对国际化良好的支持也很深刻,同样的,作为一名开发人员,
深入一门语言,了解它的特性后编程,是一件很快乐的事,这篇文章主要记录一些应用Net国际化的笔记。
在很久以前,没有接触国际化前,我都是通过txt文件的方式来配置窗体上的文本信息,这样,当需要改变某个窗体的标题时,只需要修改txt文件中对应的内容即可,这种方式比较简单,但是却失去了扩展性,没有对国际化有很好的支持,第一次接触国际化是在使用Struct做项目时,由于我们公司的接口程序一般都需要运行在中,英文操作系统上,因此转到Net开发后,花了比较多的时间学习这方面的知识,现在总结一下。
1.将旧有的txt配置文件转换成Net平台下的resources资源文件
旧有的txt文件格式如下
setting.txt文件信息如下
titil = MyTitle
okButtonText = ok
cancelButtonText = cancel
使用Net自带的resgen.exe工具,可以很方便的将上述的信息转换成Net平台下的资源文件,在命令行中,我们输入命令如下
在文件夹下,会生成一个setting.resources的资源文件,这个资源文件中就包含了上述我们配置好的信息,同时我们使用resgen.exe工具为我们生成一个资源管理类setting.cs,在命令行下,输入以下代码
在目录下,会生成对应的一个setting.cs文件,这个cs文件就可以用来访问我们设置的资源信息,自动生成的cs文件如下
我们新建一个Net的工程,将上面的setting.resources文件和setting.cs文件复制到项目目录下,输入以下代码
输出信息如下
错误信息是由于我们没有合适的链接资源文件造成的,使用如下CSC命令生成项目,代码如下
重新运行生成的exe文件,输出信息如下
深入一门语言,了解它的特性后编程,是一件很快乐的事,这篇文章主要记录一些应用Net国际化的笔记。
在很久以前,没有接触国际化前,我都是通过txt文件的方式来配置窗体上的文本信息,这样,当需要改变某个窗体的标题时,只需要修改txt文件中对应的内容即可,这种方式比较简单,但是却失去了扩展性,没有对国际化有很好的支持,第一次接触国际化是在使用Struct做项目时,由于我们公司的接口程序一般都需要运行在中,英文操作系统上,因此转到Net开发后,花了比较多的时间学习这方面的知识,现在总结一下。
1.将旧有的txt配置文件转换成Net平台下的resources资源文件
旧有的txt文件格式如下
setting.txt文件信息如下
titil = MyTitle
okButtonText = ok
cancelButtonText = cancel
使用Net自带的resgen.exe工具,可以很方便的将上述的信息转换成Net平台下的资源文件,在命令行中,我们输入命令如下
在文件夹下,会生成一个setting.resources的资源文件,这个资源文件中就包含了上述我们配置好的信息,同时我们使用resgen.exe工具为我们生成一个资源管理类setting.cs,在命令行下,输入以下代码
在目录下,会生成对应的一个setting.cs文件,这个cs文件就可以用来访问我们设置的资源信息,自动生成的cs文件如下
//------------------------------------------------------------------------------
// <auto-generated>
// 此代码由工具生成。
// 运行库版本:2.0.50727.1433
//
// 对此文件的更改可能会导致不正确的行为,并且如果
// 重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------
using System;
/// <summary>
/// 强类型资源类,用于查找本地化字符串等。
/// </summary>
// 此类是由 StronglyTypedResourceBuilder
// 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
// 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
// (以 /str 作为命令选项),或重新生成 VS 项目。
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class setting {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal setting() {
}
/// <summary>
/// 返回此类使用的缓存 ResourceManager 实例。
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("setting", typeof(setting).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// 为使用此强类型资源类的所有资源查找
/// 重写当前线程的 CurrentUICulture 属性。
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// 查找类似 cancel 的本地化字符串。
/// </summary>
internal static string cancelButtonText {
get {
return ResourceManager.GetString("cancelButtonText", resourceCulture);
}
}
/// <summary>
/// 查找类似 ok 的本地化字符串。
/// </summary>
internal static string okButtonText {
get {
return ResourceManager.GetString("okButtonText", resourceCulture);
}
}
/// <summary>
/// 查找类似 MyTitle 的本地化字符串。
/// </summary>
internal static string titil {
get {
return ResourceManager.GetString("titil", resourceCulture);
}
}
}
// <auto-generated>
// 此代码由工具生成。
// 运行库版本:2.0.50727.1433
//
// 对此文件的更改可能会导致不正确的行为,并且如果
// 重新生成代码,这些更改将会丢失。
// </auto-generated>
//------------------------------------------------------------------------------
using System;
/// <summary>
/// 强类型资源类,用于查找本地化字符串等。
/// </summary>
// 此类是由 StronglyTypedResourceBuilder
// 类通过类似于 ResGen 或 Visual Studio 的工具自动生成的。
// 若要添加或移除成员,请编辑 .ResX 文件,然后重新运行 ResGen
// (以 /str 作为命令选项),或重新生成 VS 项目。
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "2.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class setting {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal setting() {
}
/// <summary>
/// 返回此类使用的缓存 ResourceManager 实例。
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("setting", typeof(setting).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// 为使用此强类型资源类的所有资源查找
/// 重写当前线程的 CurrentUICulture 属性。
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// 查找类似 cancel 的本地化字符串。
/// </summary>
internal static string cancelButtonText {
get {
return ResourceManager.GetString("cancelButtonText", resourceCulture);
}
}
/// <summary>
/// 查找类似 ok 的本地化字符串。
/// </summary>
internal static string okButtonText {
get {
return ResourceManager.GetString("okButtonText", resourceCulture);
}
}
/// <summary>
/// 查找类似 MyTitle 的本地化字符串。
/// </summary>
internal static string titil {
get {
return ResourceManager.GetString("titil", resourceCulture);
}
}
}
我们新建一个Net的工程,将上面的setting.resources文件和setting.cs文件复制到项目目录下,输入以下代码
using System;
using System.Collections.Generic;
using System.Text;
namespace ResourcesTest
{
class Program
{
static void Main(string[] args)
{
Console.Write(setting.titil);
Console.Write(setting.okButtonText);
Console.Write(setting.cancelButtonText);
}
}
}
using System.Collections.Generic;
using System.Text;
namespace ResourcesTest
{
class Program
{
static void Main(string[] args)
{
Console.Write(setting.titil);
Console.Write(setting.okButtonText);
Console.Write(setting.cancelButtonText);
}
}
}
输出信息如下
错误信息是由于我们没有合适的链接资源文件造成的,使用如下CSC命令生成项目,代码如下
重新运行生成的exe文件,输出信息如下