.Net Frameword使用System.Globalization.Culture类型表示一个"语言/国家"对(根据RFC 1766标准).例如,'en-US'代表美国英语,'en-AU'代表澳大利亚英语,而'de-DE'代表德国德语.

在CLR中,每个线程都关联了两个特殊的属性,每个属性都引用一个CultureInfo对象.属性如下:

(1)、CurrentCultrue属性

Thread类下面的CurrentCultrue属性,关联的是当前线程的CultrueInfo对象.返回当前线程的CultrueInfo(语言/国家)实例对象.

该属性用于数字和日期的格式化、字符串大小写转换以及字符串比较.格式化的同时要用到CultureInfo对象的"语言"和"国家"部分.创建线程时,这个线程属性被设为一个默认的CultrueInfo对象,其值通过调用Win32函数GetUserDefaultLCID来获取。可通过Windows控制面板的"区域和语言"对话框来修改这个值.

不确定是不是创建线程时通过GetUserDefaultLCID()方法来获取语言/国家信息,因为Thread类下面我没有查到GetUserDefaultLCID方法,但是.Net Framework确实提供了这个方法.由于是internal所以无法调用显示,有点尴尬.另外我在CultureInfo类下面发现了LCID属性,调用代码如下:

var currentThreadLanguage = Thread.CurrentThread.CurrentCulture.LCID;
var cl = new CultureInfo(CurrentThreadLanguage);
Console.WriteLine("简称:{0},全称:{1}",cl.Name,cl.NativeName); //输出简称:zh-CN,全称:中文(中国)

(2)、CurrentUICultrue属性

调用代码:

var currentThreadLanguage = Thread.CurrentThread.CurrentUICulture.LCID;
var cl = new CultureInfo(CurrentThreadLanguage);
Console.WriteLine("简称:{0},全称:{1}",cl.Name,cl.NativeName); //输出简称:zh-CN,全称:中文(中国)

(3)、CompareInfo属性

.Net Framework中每个CultureInfo实例中都有一个CompareInfo属性实例,该属性初始化了一个根据当前语言/国家的CompareInfo实例,该类型封装了语言文化的字符排序表信息(根据Uniocde标准的定义)。

var a = "sie";
var b = "Ich";
var ci = new CultureInfo("de-DE");
Console.WriteLine(string.Compare(a,b,false, ci)); //输出:1

还有其他语言的判断,具体请自行验证

CLR关于语言文化的类型一CultureInfo类和字符串与线程的关联的更多相关文章

  1. C# 自定义类型通过实现IFormattable接口,来输出指定的格式和语言文化的字符串(例:DateTime)

    常规的调用ToString()方法,存在两个问题. (1).调用者无法控制字符串的格式 (2).调用者不能方便的选择一种特定的语言文化来格式化字符串. 在开发一些国际化的应用时,应用程序需要调用与当前 ...

  2. 重温CLR(十一) 枚举类型、位标志和数组

    枚举类型 枚举类型(enumerated types)定义了一组"符号名称/值"配对.例如,以下Color类型定义了一组符号,每个符号都标识一种颜色: internal enum ...

  3. C/C++/Java/C#语言的基本类型

    C语言的基本类型有:char, short ,int ,long ,float ,double 一共6种基本类型. C++语言有:bool, char ,wchar_t, short, int , l ...

  4. CLR via C#可空值类型

    我们知道,一个值类型的变量永远不可能为null.它总是包含值类型本身.遗憾的是,这在某些情况下会成为问题.例如,设计一个数据库时,可将一个列定义成为一个32位的整数,并映射到FCL的Int32数据类型 ...

  5. C语言中不同类型的循环(Different types of loops in C)

    C语言中有三种类型的循环:for,while,do-while. while循环先判断循环条件. while (condition) { //gets executed after condition ...

  6. C语言的函数类型

    C语言的函数类型与返回值类型不一致时出现,是以函数类型为标准; 而如果在java与c#语言中上述情况是编译错误的;

  7. C++语言中的类型(一)

    --分门别类是简化事物最有效的方式. 类型是C++语言的基础,对象类型决定了能对该对象进行的操作. 一.基本内置数据类型 C++预先定义的基本内置数据类型是构造世界万物的原子,数据类型告诉我们数据的意 ...

  8. 浅析c++和c语言的enum类型

    1.先看c语言枚举类型 1.c语言定义枚举类型,每一个枚举元素都是一个整数2.注重数据类型,没有数据类型限定3.相邻枚举元素相差整数4.可以通过整数访问,不够安全 2.上代码: 1 #include& ...

  9. C#6.0语言规范(四) 类型

    C#语言的类型分为两大类:值类型和引用类型.值类型和引用类型都可以是泛型类型,它们采用一个或多个类型参数.类型参数可以指定值类型和引用类型. type : value_type | reference ...

随机推荐

  1. 诡异的 ERROR 1045 (28000): Access denied for user 错误

    问题描述: 用户已建,权限已赋予.long long ago这个用户是可以正常访问的,但是今天它就不能访问了.报错如下: ERROR 1045 (28000): Access denied for u ...

  2. Jquery获取选中的文本值

    $(document).ready(function() { $(".contenttext").mouseup(function(e) { var txt; var parent ...

  3. leaflet入门(四)API翻译(上)

    L.Map L.Marker L.Popup L.Map API各种类中的核心部分,用来在页面中创建地图并操纵地图. Constructor(构造器) 通过div元素和带有地图选项的描述的文字对象来实 ...

  4. POJ1064--Cable master(Binary Search)

    Description Inhabitants of the Wonderland have decided to hold a regional programming contest. The J ...

  5. js-倒计时应用

    <!DOCTYPE html><html>    <head>        <meta charset="UTF-8">      ...

  6. Linux vi 文本代码时显示行号或不显示行号

    Linux vi 文本代码时显示行号或不显示行号 前提  安装了vim $vi ~/.vimrc 显示的话加上 set nu 不想显示的话可以注释掉 "set nu 之后 $source ~ ...

  7. linux-python在vim下的自动补全功能

    linux-python在vim下的自动补全功能 安装配置: wget https://github.com/rkulla/pydiction/archive/master.zipunzip -q m ...

  8. unigui1404在delphi10.2.2安装

    unigui1404在delphi10.2.2安装 UNIGUI1404不能直接在DELPHI10.2.2下面编译安装,在10.2.1下面是可以的. 这里讲下怎样安装的方法: 1)执行FMSoft_u ...

  9. unigui session超时时间设置

    unigui session超时时间设置 默认的SESSION超时时间是10分钟. 网络 SOCKET 程序,像 数据库,中间件,UNIGUI等...为了防止过多的僵死连接卡死服务端,服务端都会主动踢 ...

  10. Android-Kotlin-抽象类与多态的表现

    选择包名,然后右键: 选择Class类型,会有class:  选择File类型,不会自动有class: 目录结构: 定义描述抽象类 Person人类: package cn.kotlin.kotlin ...