• 用VS2005实现软件多语言版本的迅捷开发(转载)


    VS2005彻底改变了开发软件多语言版本费时费力的现状,现在用VS2005可以方便地实现一个针对世界上所有语言的地方版本。

    1. 文化和区域
    世界分为若干个文化和区域,应用程序必须知道这些文化和区域的区别。文化是基于用户的语言和文化习惯的一组特性。RFC 1766定义了文化的名称,这些名称根据语言和国家或区域的不同在世界各地使用。例如en-AU、en-CA、en-GB和en-US分别用于表示澳大利亚、加拿大、英国和美国的英语。

    2. CurrentCulture和CurrentUICulture
    应用程序中的文化分为两种类型:用户界面的文化和数字及日期格式的文化。文化与线程相关,有了这两种文化类型,就可以把两个文化设置应用于线程。用线程设置文化时,Thread类提供了属性CurrentCultureCurrentUICulture。属性CurrentCulture用于设置与格式化和排序选项一起使用的文化,而属性CurrentUICulture用于设置用户界面的语言。

    使用Windows控制面板中的“区域和语言”选项,用户就可以改变CurrentCulture的默认设置。使用这个配置,还可以改变文化的默认数字、时间和日期格式。CurrentUICulture不依赖于这个配置,而依赖于操作系统的语言。

    3. 应用程序加载的过程
    对于一个本地化的软件,.Net应用程序都有CurrentCultureCurrentUICulture两个属性,当它加载时,这两个属性默认为操作系统中预定义的值。.Net应用程序会去程序目录下寻找有文化名称为名字的目录,以及寻找相对应的语言包(附属资源程序集),文件名为assemblyname.resources.dll,如果找到就会加载,如果找不到就会去用默认的(不变的)文化语言包,如果这个语言包也找不到——程序当然会报错。

    4. 多语言版CurrentUICulture
    每个窗体都有一个可以设置为 true 或 false 的 Localizable 属性。将该属性设置为 true,就创建了该窗体的多语言版本,Visual Studio 2005 将在幕后为您创建和维护一组已本地化的资源文件。接着,将窗体的Language 属性更改为特定语言(如"中文 (简体)"),则 Visual Studio 会新建一个本地化资源文件,编译后将自动生成该语言的语言包。因此您需要作的就是,更改Language 属性后,直接用该种语言编辑窗体.您可以修改该窗体上的字符串、控件的大小以及位置、甚至替换图片。这样的特性,可以允许您的软件的中文版和英文风格炯异。
    图:

    5. 不在窗体上的本地化资源
    无需将所有的需本地化资源放置到窗体上,程序中使用的字符串、图片、xml文件等等需要本地化的资源还可以装入到资源文件中。VS2005在项目属性设置中预置了一个资源文件。
    图:

    您可以将程序中需要本地化的东西都放在这个资源文件中,在C#程序中您可以以assemblyName.Properties.Resource.resourcename的方式直接引用它。
    那项目资源文件中的资源怎样本地化呢?你只需要复制该文件,用新的名称命名,如Resources.zh-CHS.resx,注意到新的名称新增加的部分必须是文化名。接着你在IDE中本地化这个新的资源文件就可以了,剩下的事情,VS2005都帮我们去作了。

    6. 多语言版CurrentCulture
    多语言版CurrentCulture主要体现在对一些函数,尤其是FormatToString函数的使用上,很多函数同string、date类一样,提供在格式化为本地格式的重载函数,这些函数一般带有IFormatProvider参数,允许用编程的方式提供不同文化的格式化的结果。例如:下面的代码生成了法语法国地区的数字与日期的格式化字符串。

    int val = 12345678;
    val.ToString(
    "N"new CultureInfo("fr-FR")

    DateTime d 
    = new DateTime(20030809);
    d.ToString(
    "D"new CultureInfo("fr-FR"));

    7. 编程改变当前CurrentUICulture和CurrentCulture
    对于许多大型的项目,会产生编程动态改变当前应用程序的文化的需求,在.Net中,这似乎也简单:

          // set culture for formatting
          Thread.CurrentThread.CurrentCulture = ci;

          
    // set culture for resources
          Thread.CurrentThread.CurrentUICulture = ci;

    参考文献:

  • 相关阅读:
    GNU C与ANSI C的不同
    在 Windows 上使用 Cygwin
    VS2010程序调试
    VS2010中visual assist x的一些问题
    专访TK教主于旸:原来那些搞安全的说的都是真的(图灵访谈)
    程序员必看的书
    msp430学习笔记-时钟及延时函数
    指针函数与函数指针
    msp430学习笔记-IO及低功耗
    运算符优先级常识
  • 原文地址:https://www.cnblogs.com/chorrysky/p/698318.html
Copyright © 2020-2023  润新知