首先我们在.NET Core控制台项目的Main方法中,设置当前线程的CurrentCulture和CurrentUICulture为zh-CN: static void Main(string[] args 其实资源文件类DemoResource也是可以通过设置其Culture属性来指定使用某一种特定的语言,如下代码所示,虽然我们设置当前线程的CurrentCulture和CurrentUICulture为 和CurrentUICulture也都为ja-JP 现在我们设置主线程的CurrentCulture和CurrentUICulture为ja-JP,但是将第一层线程的CurrentCulture和CurrentUICulture 和CurrentUICulture属性是由启动它的线程来决定的,上面的结果很明显由于第一层线程的CurrentCulture和CurrentUICulture为zh-CN,所以由第一层线程启动的后续线程 所以在.NET Core中要设置线程的CurrentCulture和CurrentUICulture属性,最简单的办法就是在根线程(主线程)上设置CurrentCulture和CurrentUICulture
case "en": CultureInfo.CurrentCulture = new CultureInfo("en-US"); CultureInfo.CurrentUICulture case "cn": CultureInfo.CurrentCulture = new CultureInfo("zh-CN"); CultureInfo.CurrentUICulture = new CultureInfo("en-US"); //Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US = new CultureInfo("zh-CN"); //Thread.CurrentThread.CurrentUICulture = new CultureInfo("zh-CN = new CultureInfo("zh-TW"); //Thread.CurrentThread.CurrentUICulture = new CultureInfo("zh-TW
CultureAwareHttpModule : IHttpModule 2: { 3: private CultureInfo currentCulture; 4: private CultureInfo currentUICulture args) 13: { 14: currentCulture = Thread.CurrentThread.CurrentCulture; 15: currentUICulture = Thread.CurrentThread.CurrentUICulture; 16: HttpContextBase contextWrapper = new HttpContextWrapper Thread.CurrentThread.CurrentCulture = currentCulture; 34: Thread.CurrentThread.CurrentUICulture = currentUICulture; 35: } 36: } 我们只需要通过如下配置对CultureAwareHttpModule进行注册即可。
Thread.CurrentThread.CurrentCulture = currentCulture[0]; 11: Thread.CurrentThread.CurrentUICulture CultureInfo currentCulture = Thread.CurrentThread.CurrentCulture; 17: CultureInfo currentUICulture = Thread.CurrentThread.CurrentUICulture; 18: 19: if (message.Headers.FindHeader 最有返回保存有原来CurrentCulture和CurrentUICulture的Array。 在AfterInvoke中通过correlationState参数将这个Array取出,重置CurrentCulture和CurrentUICulture。
[源代码从这里下载] 要让资源服务具有识别语言文化的能够,我们必须将客户端服务调用线程当前的语言文化信息(具体来说就是Thread的两个属性:CurrentUICulture和CurrentCulture 和CurrentCulture放到出栈消息中;而服务端将其从入栈消息中取出,并对当前线程的CurrentUICulture和CurrentCulture进行相应的设置。 CurrentCulture和CurrentUICulture。 从中我们可以看到,我们一共进行了四次针对GetString操作的服务调用,在调用之前我们对当前线程的CurrentUICulture(它决定了语言的种类和对资源文件的选择)。 前面两次和后面两次是在CurrentUICulture为en-US和zh-CN情况下进行调用的。
{ throw new InvalidOperationException(string.Format(CultureInfo.CurrentUICulture { throw new InvalidOperationException(string.Format(CultureInfo.CurrentUICulture InvalidOperationException( String.Format( CultureInfo.CurrentUICulture throw new InvalidOperationException(String.Format( CultureInfo.CurrentUICulture throw new InvalidOperationException(String.Format( CultureInfo.CurrentUICulture
CultureAwareHttpModule : IHttpModule { private CultureInfo currentCulture; private CultureInfo currentUICulture EventArgs args) { currentCulture = Thread.CurrentThread.CurrentCulture; currentUICulture = Thread.CurrentThread.CurrentUICulture; HttpContextBase contextWrapper = new HttpContextWrapper Thread.CurrentThread.CurrentCulture = currentCulture; Thread.CurrentThread.CurrentUICulture = currentUICulture; } } } 这里必须做个声明:下面2段第一段支持MVC3,第二段支持MVC4 -----------------------MVC3.0
given by the compiler command line arguments, not the CurrentCulture P:System.Globalization.CultureInfo.CurrentUICulture ; Analyzers should use the locale given by the compiler command line arguments, not the CurrentUICulture
static void DisplayResource(ResourceManager resourceManager) 2: { 3: Thread.CurrentThread.CurrentUICulture = new CultureInfo("en-US"); 4: Console.WriteLine(CultureInfo.CurrentUICulture.EnglishName); \t" + resourceManager.GetString("Greeting4NewYear") + "\n"); 7: 8: Thread.CurrentThread.CurrentUICulture = new CultureInfo("zh-CN"); 9: Console.WriteLine(CultureInfo.CurrentUICulture.EnglishName); = new CultureInfo("ja-JP"); 14: Console.WriteLine(CultureInfo.CurrentUICulture.EnglishName);
CultureInfo(cultureQuery); CultureInfo.CurrentCulture = culture; CultureInfo.CurrentUICulture CultureInfo(cultureQuery); CultureInfo.CurrentCulture = culture; CultureInfo.CurrentUICulture
ValidatorContext的属性RuleName和Culture表示当前的验证规则和语言文化(默认值为当前线程的CurrentUICulture),而字典类型的属性Properties用户存放一些额外信息 CultureInfo.CurrentUICulture; 15: } 16: 17: public static ValidatorContext Current originalCulture = CultureInfo.CurrentCulture; 22: CultureInfo originalUICulture = CultureInfo.CurrentUICulture Thread.CurrentThread.CurrentCulture = culture; 29: Thread.CurrentThread.CurrentUICulture Thread.CurrentThread.CurrentCulture = originalCulture; 51: Thread.CurrentThread.CurrentUICulture
CultureInfo(cultureQuery); CultureInfo.CurrentCulture = culture; CultureInfo.CurrentUICulture CultureInfo(cultureQuery); CultureInfo.CurrentCulture = culture; CultureInfo.CurrentUICulture
就会出现英文的异常 Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture; Thread.CurrentThread.CurrentUICulture
acceptCultureHeader) 7: { 8: request.Properties["__CurrentCulture"] = Thread.CurrentThread.CurrentUICulture ; 9: Thread.CurrentThread.CurrentUICulture = new CultureInfo(acceptCultureHeader.Value request.Properties.TryGetValue("__CurrentCulture", out culture)) 17: { 18: Thread.CurrentThread.CurrentUICulture
CultureInfo.GetCultureInfo("en-US"); Thread.CurrentThread.CurrentCulture = culture; Thread.CurrentThread.CurrentUICulture CultureInfo.GetCultureInfo("en-US"); Thread.CurrentThread.CurrentCulture = culture; Thread.CurrentThread.CurrentUICulture
通常本地化有以下几点需求: 在程序启动时根据CultureInfo.CurrentUICulture或配置项显示对应语言的UI。 在程序运行时可以动态切换UI语言(无需重启程序)。 <SolidColorBrush x:Key="Background" Color="#88FF0000"/> </ResourceDictionary> 在程序启动时根据CultureInfo.CurrentUICulture ReadCultureFromConfig(); var cultureInfo = new System.Globalization.CultureInfo(culture); Thread.CurrentThread.CurrentUICulture void ChangeCulture(System.Globalization.CultureInfo cultureInfo) { Thread.CurrentThread.CurrentUICulture _language = value; var cultureInfo = new CultureInfo(value); Thread.CurrentThread.CurrentUICulture
culture; 15: CultureInfo currentCulture = CultureInfo.CurrentCulture; 16: CultureInfo currentUICulture = CultureInfo.CurrentUICulture; 17: try 18: { 19: if (context.GetRouteData routeKey, out culture)) 20: { 21: CultureInfo.CurrentCulture = CultureInfo.CurrentUICulture { 27: CultureInfo.CurrentCulture = currentCulture; 28: CultureInfo.CurrentUICulture = currentUICulture; 29: } 30: } 31: } 如上面的代码片段所示,LocalizationMiddleware的Invoke方法被执行的时候
Assembly.GetExecutingAssembly()); private static CultureInfo uiCulture = Thread.CurrentThread.CurrentUICulture
调用代码: var currentThreadLanguage = Thread.CurrentThread.CurrentUICulture.LCID; var cl = new CultureInfo
Assembly.GetExecutingAssembly()); private static CultureInfo uiCulture = Thread.CurrentThread.CurrentUICulture