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“都没有默认关联特定区域,所以上面的第四段代码会报错。
C#:设置当前线程的区域性相关推荐
- 14.6 设置后台线程
1.默认都不是后台线程, 通过setDaemon():方法来设置后台线程. 通过 对象.setDaemon(true);设置为后台线程,true表示是后台线程,false表示不是后台线程. 2.j ...
- 监控 线程 php,Linux平台PHP5.4设置FPM线程数量的方法
本文实例讲述了Linux平台PHP5.4设置FPM线程数量的方法.分享给大家供大家参考,具体如下: PHP5.4安装完毕后,FPM的默认配置文件位于/usr/local/php/etc/php-fpm ...
- java 设置主线程_Java线程编程中的主线程讲解
当Java程序启动时,一个线程立刻运行,该线程通常叫做程序的主线程(main thread),因为它是程序开始时就执行的.主线程的重要性体现在两方面: 它是产生其他子线程的线程: 通常它必须最后完成执 ...
- Java线程池设置多少线程合适
文章目录 前言 一.经典方法 二.要点分析 1. 确定CPU的数量 2. 确定任务类型 三.工程限制 纵向限制 横向限制 总结 前言 线程池在Java服务中随处可见,但到底设置多少个线程是合适的往往见 ...
- java线程池合理设置最大线程数和核心线程数
工作中有这样一个场景,需要处理千万级别的数据的一个算法,大部分是增删查的操作.这个时候就需要使用多线程去处理. 一开始是这么配置的: @Configuration @EnableAsync(proxy ...
- mysql 线程池大小设置_MySQL线程池参数解析
线程池是数据库系统非常重要功能,然而MySQL社区版并不包含线程池功能,不过好在MySQL的Percona发行版本提供了这个功能,除此之外,MySQL的企业版也提供线程池,从性价比上说,Percona ...
- Thread.setDaemon设置守护线程
Java中线程分为用户线程(user thread)和守护线程(daemon thread),它们通过Thread的daemon属性标识:true表示守护线程,false表示用户线程. 一个T ...
- NIO和BIO如何影响应用程序的设计-设置处理线程数
NIO 可让您只使用一个(或几个)单线程管理多个通道(网络连接或文件),但付出的代价是解析数据可能会比从一个阻塞流中读取数据更复杂. 如果需要管理同时打开的成千上万个连接,这些连接每次只是发送少量的数 ...
- 线程池到底参数设置多少线程才合适?
目录 一.抛出问题 二.分析 三.实际应用 四.总结: 抛出问题 关于如何计算并发线程数,一般分两派,来自两本书,且都是好书,到底哪个是对的?问题追踪后,整理如下: 「第一派:<Java Con ...
最新文章
- 管理者如何打造一个有执行力的团队?
- 找到反例!博士后数学家推翻困扰数学界80多年的单位猜想
- 机器人操作学习系列分享:模仿学习
- 服务器双网卡冗余备份技术的实现
- 智伴机器人安卓怎么设置个人热点_周五到!!宿舍断网怎么办,教你一招
- 服务器绑定域名可修改吗,云服务器可以绑定域名吗
- 异常详细信息: System.UnauthorizedAccessException: 对路径的访问被拒绝。
- 怎样用springboot开发cs_springboot 系列 springboot 初探
- bigdecimal 怎么做除法_面向对象之BigDecimal
- 室内无源定位—激光SLAM在无人机上的飞行测试
- 下载全球高清卫星影像地图
- 深入浅出Word2Vec原理解析
- video call BT audio音频流程
- 51单片机(一)最小系统介绍
- ARM探索之旅 | 二、ARM Cortex-M 用什么指令集?
- scrapy框架的使用
- Python如何输出当前时间,时分秒,以及ms
- vue 添加子路由 默认选中子路由
- 七种图像阈值分割技术
- linux usb drivers开发
热门文章
- 在vue-cli项目中使用echarts
- 2019 年,容器技术生态会发生些什么?
- C#面向集合的扩展(讨论)
- Android.Hook框架xposed篇(Http流量监控)
- 知识点丨你一定要了解的Win10 RS2重大更新,绝不只是装补丁!
- BZOJ4298 : [ONTAK2015]Bajtocja
- [Lua]50行代码的解释器,用来演示lambda calculus
- VMware HA环境搭建七:WIN2012 ISCSI目标服务器的安装
- 三星6.0系统手机最简单激活XPOSED框架的教程
- BOOL,int,float,指针变量与零值比较的if语句