在多语言资源软件制作中肯定会遇到这样的问题,如下面的代码:

System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("zh-CHS");
 

.codearea{ color:black; background-color:white; line-height:18px; border:1px solid #4f81bd; margin:0; width:auto !important; width:100%; overflow:auto; text-align:left; font-size:12px; font-family: "Courier New","Consolas","Fixedsys","BitStream Vera Sans Mono", courier,monospace,serif} .codearea pre{ color:black; line-height:18px; padding:0 0 0 12px !important; margin:0em; background-color:#fff !important} .linewrap pre{white-space:pre-wrap; white-space:-moz-pre-wrap; white-space:-pre-wrap; white-space:-o-pre-wrap; word-wrap:break-word; word-break:normal} .codearea pre.alt{ background-color:#f7f7ff !important} .codearea .lnum{color:#4f81bd;line-height:18px}

System.Threading.Thread.CurrentThread.CurrentCulture = new CultureInfo("en");
 

.codearea{ color:black; background-color:white; line-height:18px; border:1px solid #4f81bd; margin:0; width:auto !important; width:100%; overflow:auto; text-align:left; font-size:12px; font-family: "Courier New","Consolas","Fixedsys","BitStream Vera Sans Mono", courier,monospace,serif} .codearea pre{ color:black; line-height:18px; padding:0 0 0 12px !important; margin:0em; background-color:#fff !important} .linewrap pre{white-space:pre-wrap; white-space:-moz-pre-wrap; white-space:-pre-wrap; white-space:-o-pre-wrap; word-wrap:break-word; word-break:normal} .codearea pre.alt{ background-color:#f7f7ff !important} .codearea .lnum{color:#4f81bd;line-height:18px}

上面这两种写法,在执行时都会报异常:

如果修改成如下写法:

System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en");
 

.codearea{ color:black; background-color:white; line-height:18px; border:1px solid #4f81bd; margin:0; width:auto !important; width:100%; overflow:auto; text-align:left; font-size:12px; font-family: "Courier New","Consolas","Fixedsys","BitStream Vera Sans Mono", courier,monospace,serif} .codearea pre{ color:black; line-height:18px; padding:0 0 0 12px !important; margin:0em; background-color:#fff !important} .linewrap pre{white-space:pre-wrap; white-space:-moz-pre-wrap; white-space:-pre-wrap; white-space:-o-pre-wrap; word-wrap:break-word; word-break:normal} .codearea pre.alt{ background-color:#f7f7ff !important} .codearea .lnum{color:#4f81bd;line-height:18px}

System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("zh-CHS");
 

.codearea{ color:black; background-color:white; line-height:18px; border:1px solid #4f81bd; margin:0; width:auto !important; width:100%; overflow:auto; text-align:left; font-size:12px; font-family: "Courier New","Consolas","Fixedsys","BitStream Vera Sans Mono", courier,monospace,serif} .codearea pre{ color:black; line-height:18px; padding:0 0 0 12px !important; margin:0em; background-color:#fff !important} .linewrap pre{white-space:pre-wrap; white-space:-moz-pre-wrap; white-space:-pre-wrap; white-space:-o-pre-wrap; word-wrap:break-word; word-break:normal} .codearea pre.alt{ background-color:#f7f7ff !important} .codearea .lnum{color:#4f81bd;line-height:18px}

代码一可以正常执行,代码二执行出现如下错误:

上面的代码为什么会出现,这样的问题呢?

这里我们要来说一下:区域性、固定区域性、非特定区域性、特定区域性

区域性名称遵循 RFC 1766 标准,格式为“ - ”,其中 是从 ISO 639-1 派生的由两个小写字母构成的代码, 是从 ISO 3166 派生的由两个大写字母构成的代码。例如,美国英语为“en-US”。在双字母语言代码不可用的情况中,将使用从 ISO 639-2 派生的三字母代码;例如,三字母代码“div”用于使用 Dhivehi 语言的区域。某些区域性名称带有指定书写符号的后缀;例如“-Cyrl”指定西里尔语书写符号,“-Latn”指定拉丁语书写符号。

固定区域性不区分区域性。可以使用空字符串 ("") 按名称或者按区域性标识符 0x007F 来指定固定区域性。固定区域性由CultureInfo类的InvariantCulture属性来代表固定区域性的实例。固定区域性仅与英语语言关联,不与任何国家/地区关联。它几乎可用在要求区域性的“全局化”命名空间中的所有方法中。如果你的程序进行字符串比较或大小写更改操作,则应该使用 InvariantCulture 确保无论系统如何设置的区域性,行为都将按照InvariantCulture所代表的英语语言的固定区域性来完成。

非特定区域性是与某种语言关联但不与国家/地区关联的区域性。特定区域性是与某种语言和某个国家/地区关联的区域性。例如,“en”是非特定区域性,而“en-US”是特定区域性。注意,“zh-CHS”(简体中文)和“zh-CHT”(繁体中文)均为非特定区域性。

区域性有层次结构,即特定区域性的父级是非特定区域性,而非特定区域性的父级是 InvariantCulture。CultureInfo类的Parent属性将返回与特定区域性关联的非特定区域性。如果特定区域性的资源在系统中不存在,或因其它原因不可用,则使用非特定区域性的资源;如果非特定区域性的资源也不可用,那么使用主程序集中嵌入的资源。

下面这两个语句有什么异同:

var cultureSpecific = CultureInfo.CreateSpecificCulture(name);
var culture = new CultureInfo(name);
 

.codearea{ color:black; background-color:white; line-height:18px; border:1px solid #4f81bd; margin:0; width:auto !important; width:100%; overflow:auto; text-align:left; font-size:12px; font-family: "Courier New","Consolas","Fixedsys","BitStream Vera Sans Mono", courier,monospace,serif} .codearea pre{ color:black; line-height:18px; padding:0 0 0 12px !important; margin:0em; background-color:#fff !important} .linewrap pre{white-space:pre-wrap; white-space:-moz-pre-wrap; white-space:-pre-wrap; white-space:-o-pre-wrap; word-wrap:break-word; word-break:normal} .codearea pre.alt{ background-color:#f7f7ff !important} .codearea .lnum{color:#4f81bd;line-height:18px}

使用第一种方法,只能创建固定区域性或特定区域性的CultureInfo实例。如果name为空字符串,则建立固定区域性的实例,如果name为非特定区域性,那么建立name 关联的默认特定区域性的 CultureInfo实例。第二种方法,则是建立一个name所指定的区域性的CultureInfo实例,它可以是固定的,非特定的或特定区域性的。

虽然“en”和”zh-CHS”都是非固定区域,但是“en”默认有关联的特定区域,而”zh-CHS“和”zh-CHT“都没有默认关联特定区域,所以上面的第四段代码会报错。

如果要设置当前线程的区域性,用下面的代码就可以正常执行:

public static void SetCurrentThreadCultureInfo(string name)
        {
            Properties.Resource.Culture = new System.Globalization.CultureInfo(name);
            var newName = name;
            switch (Properties.Resource.Culture.Name)
            {
                case "zh-CHS":
                    newName = "zh-CN";
                    break;
                case "zh-CHT":
                    newName = "zh-TW";
                    break;
                default:
                    break;
            }
 
            System.Threading.Thread.CurrentThread.CurrentUICulture = System.Globalization.CultureInfo.CreateSpecificCulture(newName);
 
        }

.codearea{ color:black; background-color:white; line-height:18px; border:1px solid #4f81bd; margin:0; width:auto !important; width:100%; overflow:auto; text-align:left; font-size:12px; font-family: "Courier New","Consolas","Fixedsys","BitStream Vera Sans Mono", courier,monospace,serif} .codearea pre{ color:black; line-height:18px; padding:0 0 0 12px !important; margin:0em; background-color:#fff !important} .linewrap pre{white-space:pre-wrap; white-space:-moz-pre-wrap; white-space:-pre-wrap; white-space:-o-pre-wrap; word-wrap:break-word; word-break:normal} .codearea pre.alt{ background-color:#f7f7ff !important} .codearea .lnum{color:#4f81bd;line-height:18px}

到处,本文完成。

版权声明:

本Blog内的所有文章如非特别注明,版权均归作者个人所有,任何外部引用或摘抄请注明原文地址,未经作者授权不得用于任何以营利目的的行为,谢谢合作!

-------------------------------------------------------------------------------------------------------------------

  1. 多语言资源文件编辑插件:
  2. 此插件支持VS2005,2008,2010
  3. 和VS接合紧密,使用多语言资源文件的编辑非常简单
  4. 减少你多语言开发时的工作量
  5. 下载地址:工具下载

    -------------------------------------------------------------------------------------------------------------------

<script type="text/javascript">var addthis_pub="scottisafool";</script> <script type="text/javascript" src="http://s7.addthis.com/js/200/addthis_widget.js"></script>

多语言软件开发之new CultureInfo(“”)与CultureInfoCreateSpecificCulture(“”)的异同相关推荐

  1. 《高质量程序设计指南——C/C++语言》第1章 高质量软件开发之道

    第1章 高质量软件开发之道 本书的第1章之高质量软件开发之道,作者用大量的篇幅介绍了"软件质量"的基本概念,解释了软件质量的十大属性.这十大质量属性又分为功能性和非功能性两类,功能 ...

  2. 浅谈嵌入式MCU软件开发之S32K1xx系列MCU启动过程及重映射代码到RAM中运行方法详解

    内容提要 注:本文摘自NXP工程师胡恩伟的微信公众号"汽车电子expert成长之路",大家感兴趣可以关注一下. 引言 1. S32K1xx系列MCU启动过程详解(startup_S ...

  3. android软件开发之webView.addJavascriptInterface循环渐进【二】

    说明 文章列表 android软件开发之webView.addJavascriptInterface循环渐进[一]: http://www.sollyu.com/android-software-de ...

  4. Android软件开发之TextView详解(六)

    Android软件开发之TextView详解 雨松MOMO原创文章如转载,请注明:转载自雨松MOMO的博客原文地址:http://blog.csdn.net/xys289187120/article/ ...

  5. 图片轮播c语言,IOS开发之UIScrollView实现图片轮播器的无限滚动

    IOS开发之UIScrollView实现图片轮播器的无限滚动 简介 在现在的一些App中常常见到图片轮播器,一般用于展示广告.新闻等数据,在iOS内并没有现成的控件直接实现这种功能,但是通过UIScr ...

  6. 软件开发详细设计说明书_汽车软件开发之ASPICE系统需求过程组

    点击蓝字 关注我们 汽车电子软件开发流程 和朋友交流时,被问到是什么行业时? 我:汽车电子软件开发. 朋友:那你认为什么开发语言是最好的呢? 我:.......Matlab.ASCET? 朋友:gun ...

  7. 三十年软件开发之路:老码农的自我修养!

    [CSDN编者按]"千帆过尽仍少年",对于程序员来说,保留技术初心.不断提升实力是夯实自己的不二法则.而本文的作者,作为一名有着三十多年开发经验的"老"程序员, ...

  8. 浅谈嵌入式MCU软件开发之startup过程详解(从复位向量到main函数之前的准备工作)

    引言 一般工程师都怕研究MCU的startup过程,其原因可能有:1.觉得没有必要,startup的过程和启动代码在新建工程时,并且已经默认加入并配置好,能够保证MCU正常工作,只要关系main()函 ...

  9. 从易经中看软件开发之道

    <易经>是阐述天地世间关于万象变化的古老经典,是博大精深的辩证法哲学书. 老祖宗留下的东西,保罗万象,自然不会漏掉软件开发这个行当的. 从软件开发者角度去看易经,其实就是一个高层级的软件架 ...

最新文章

  1. SolidEdge 工程图中如何标注尺寸公差
  2. 助力AI腾飞,深度学习走向何方?
  3. tf.arg_max
  4. 2019b官方手册中文版_数据科学|「最全」实至名归,NumPy 官方早有中文教程,结合深度学习,还有防脱发指南...
  5. intellij idea 如何将普通项目转换为maven项目
  6. monotouch在ipad中的实例应用--显示图像和文字
  7. Spring Data JPA 从入门到精通~@EntityListeners注解示例
  8. java写的学生信息查询系统_Java编写学生信息查询系统,报错!!!
  9. 二进制分类(信息学奥赛一本通-T1412)
  10. 一统江湖的大前端(1)——PPT制作库impress.js(含附件)
  11. ASP.NET AjaxPro的应用 .AjaxPro使用中“XXX未定义”的一种解决方法(转载的)
  12. spring.net与OracleODP结合时发生的版本问题
  13. 操作系统(六) 进程同步
  14. SNMP 模拟器 vxsnmpsimulator 使用方法
  15. BugKidz专版NBSI
  16. 在launcher中隐藏app图标
  17. 弘玑Cyclone上榜36氪中国超自动化先锋企业
  18. 区块链应用 | 高盛报告深度解读:区块链在未来的5大应用
  19. PL2303HXD驱动
  20. Python 之 如何一行输入多个整数

热门文章

  1. 【java学习】 面向对象编程+java购物车系统
  2. 酷我音乐linux版本,酷我音乐盒的 Gtk/Linux 实现 – v2.5 版本发布
  3. 让docsify-katex支持化学公式mhchem扩展
  4. python numpy 实现与(and),非与(not),或(or),异或(xor)逻辑运算!
  5. 《算法笔记》第4章常用技巧及排序算法
  6. ps中常用模糊的区别
  7. Mysql视图和触发器
  8. 基于QUIC 协议的HTTP/3
  9. ulpfec,flexFec,Pro-MPEG cop3协议对比
  10. 蛇形矩阵之逆时针矩阵