.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文件如下

          
//------------------------------------------------------------------------------
// <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);
        }

    }

}

输出信息如下



错误信息是由于我们没有合适的链接资源文件造成的,使用如下CSC命令生成项目,代码如下


重新运行生成的exe文件,输出信息如下



posted @ 2008-06-24 10:22 VincentWP 阅读(...) 评论(...) 编辑 收藏