前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CLR关于语言文化的类型一CultureInfo类和字符串与线程的关联

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

作者头像
郑小超.
发布2018-05-28 18:02:35
6290
发布2018-05-28 18:02:35
举报
文章被收录于专栏:GreenLeavesGreenLeaves

.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属性,调用代码如下:

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

(2)、CurrentUICultrue属性

调用代码:

代码语言:javascript
复制
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标准的定义)。

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

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

本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-05-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com