zoukankan      html  css  js  c++  java
  • C#:设置当前线程的区域性

       设置当前线程的区域性

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

            }

     

     

     注:

     如下面的代码:

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

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

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

    如果修改成如下写法:

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

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

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

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

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

    区域性名称遵循 RFC 1766 标准,格式为“<languagecode2>-<country/regioncode2>”,其中 <languagecode2> 是从 ISO 639-1 派生的由两个小写字母构成的代码,<country/regioncode2> 是从 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);

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

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

  • 相关阅读:
    poj 1113 Wall 凸包的应用
    NYOJ 78 圈水池 (入门级凸包)
    Monotone Chain Convex Hull(单调链凸包)
    poj Sudoku(数独) DFS
    poj 3009 Curling 2.0(dfs)
    poj 3083 Children of the Candy Corn
    Python join()方法
    通过FISH和下一代测序检测肺腺癌ALK基因融合比较
    华大病原微生物检测
    NGS检测ALK融合大起底--转载
  • 原文地址:https://www.cnblogs.com/shenchao/p/2982049.html
Copyright © 2011-2022 走看看