设置当前线程的区域性

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“都没有默认关联特定区域,所以上面的第四段代码会报错。

C#:设置当前线程的区域性相关推荐

  1. 14.6 设置后台线程

    1.默认都不是后台线程, 通过setDaemon():方法来设置后台线程. 通过   对象.setDaemon(true);设置为后台线程,true表示是后台线程,false表示不是后台线程. 2.j ...

  2. 监控 线程 php,Linux平台PHP5.4设置FPM线程数量的方法

    本文实例讲述了Linux平台PHP5.4设置FPM线程数量的方法.分享给大家供大家参考,具体如下: PHP5.4安装完毕后,FPM的默认配置文件位于/usr/local/php/etc/php-fpm ...

  3. java 设置主线程_Java线程编程中的主线程讲解

    当Java程序启动时,一个线程立刻运行,该线程通常叫做程序的主线程(main thread),因为它是程序开始时就执行的.主线程的重要性体现在两方面: 它是产生其他子线程的线程: 通常它必须最后完成执 ...

  4. Java线程池设置多少线程合适

    文章目录 前言 一.经典方法 二.要点分析 1. 确定CPU的数量 2. 确定任务类型 三.工程限制 纵向限制 横向限制 总结 前言 线程池在Java服务中随处可见,但到底设置多少个线程是合适的往往见 ...

  5. java线程池合理设置最大线程数和核心线程数

    工作中有这样一个场景,需要处理千万级别的数据的一个算法,大部分是增删查的操作.这个时候就需要使用多线程去处理. 一开始是这么配置的: @Configuration @EnableAsync(proxy ...

  6. mysql 线程池大小设置_MySQL线程池参数解析

    线程池是数据库系统非常重要功能,然而MySQL社区版并不包含线程池功能,不过好在MySQL的Percona发行版本提供了这个功能,除此之外,MySQL的企业版也提供线程池,从性价比上说,Percona ...

  7. Thread.setDaemon设置守护线程

      Java中线程分为用户线程(user thread)和守护线程(daemon thread),它们通过Thread的daemon属性标识:true表示守护线程,false表示用户线程.   一个T ...

  8. NIO和BIO如何影响应用程序的设计-设置处理线程数

    NIO 可让您只使用一个(或几个)单线程管理多个通道(网络连接或文件),但付出的代价是解析数据可能会比从一个阻塞流中读取数据更复杂. 如果需要管理同时打开的成千上万个连接,这些连接每次只是发送少量的数 ...

  9. 线程池到底参数设置多少线程才合适?

    目录 一.抛出问题 二.分析 三.实际应用 四.总结: 抛出问题 关于如何计算并发线程数,一般分两派,来自两本书,且都是好书,到底哪个是对的?问题追踪后,整理如下: 「第一派:<Java Con ...

最新文章

  1. 管理者如何打造一个有执行力的团队?
  2. 找到反例!博士后数学家推翻困扰数学界80多年的单位猜想
  3. 机器人操作学习系列分享:模仿学习
  4. 服务器双网卡冗余备份技术的实现
  5. 智伴机器人安卓怎么设置个人热点_周五到!!宿舍断网怎么办,教你一招
  6. 服务器绑定域名可修改吗,云服务器可以绑定域名吗
  7. 异常详细信息: System.UnauthorizedAccessException: 对路径的访问被拒绝。
  8. 怎样用springboot开发cs_springboot 系列 springboot 初探
  9. bigdecimal 怎么做除法_面向对象之BigDecimal
  10. 室内无源定位—激光SLAM在无人机上的飞行测试
  11. 下载全球高清卫星影像地图
  12. 深入浅出Word2Vec原理解析
  13. video call BT audio音频流程
  14. 51单片机(一)最小系统介绍
  15. ARM探索之旅 | 二、ARM Cortex-M 用什么指令集?
  16. scrapy框架的使用
  17. Python如何输出当前时间,时分秒,以及ms
  18. vue 添加子路由 默认选中子路由
  19. 七种图像阈值分割技术
  20. linux usb drivers开发

热门文章

  1. 在vue-cli项目中使用echarts
  2. 2019 年,容器技术生态会发生些什么?
  3. C#面向集合的扩展(讨论)
  4. Android.Hook框架xposed篇(Http流量监控)
  5. 知识点丨你一定要了解的Win10 RS2重大更新,绝不只是装补丁!
  6. BZOJ4298 : [ONTAK2015]Bajtocja
  7. [Lua]50行代码的解释器,用来演示lambda calculus
  8. VMware HA环境搭建七:WIN2012 ISCSI目标服务器的安装
  9. 三星6.0系统手机最简单激活XPOSED框架的教程
  10. BOOL,int,float,指针变量与零值比较的if语句