" ZH-HK"文化不会在ASP.NET中输出中文,但会在WinForms中输出中文吗?

时间:2013-12-11 12:40:56

标签: c# asp.net winforms cultureinfo

我有这个C#代码:

Thread.CurrentThread.CurrentCulture = new CultureInfo(cultureName);    
dateScale.EndDate.ToString("dd/MMMM", CultureInfo.CurrentCulture);

如果我将culture设置为"zh-HK",则在ASP.NET中输出为英文。 但是当相同的逻辑作为单元测试运行时(与运行WinForms应用程序相同),输出是中文的。

2 个答案:

答案 0 :(得分:0)

运行asp.net网站的服务器是否安装了正确的语言包?

默认的.NET框架instalations,具有语言中性二进制文件。我相信,对于中文,您需要安装特定于语言的语言包。

您可以在此处获取更多信息

http://msdn.microsoft.com/en-us/library/vstudio/5a4x27ek(v=vs.100).aspx

  

这些软件包的一些示例是dotNetFx40LP_Full_x86_x64de.exe(用于德国 - 德国文化)和dotNetFx40LP_Full_x86_x64ja.exe(用于日本文化)。

更新:正如Panagiotis Kanavos写的那样,这只是字符串输出,就像一周中的几天。 你为什么要在线程中设置文化?您应该在web.config中指定文化。

<globalization uiCulture="zh-HK" culture="zh-HK" />

答案 1 :(得分:0)

Web应用程序使用多个线程来处理大量请求。在一个线程中设置文化并不意味着它将在其他线程中可用。

此外,用于每个请求的文化取决于web.config中的全球化设置,页面级设置和最终用户的语言首选项。即使您为一个请求设置了文化,当重新使用该线程来为另一个请求提供服务时,它也会被重置。

实际上,如果要格式化特定文化,没有理由更改当前线程的文化。以下代码可以正常运行:

var culture = new CultureInfo("zh-hk");    
Console.WriteLine(DateTime.Now.ToString("dd/MMMM", culture));

这将返回11/十二月(.NET小提琴here)。

检查How to: Set the Culture and UI Culture for ASP.NET Web Page Globalization以了解您需要设置的设置,以确保将特定文化用于全球化。

首先,如果要对所有页面使用“zh-hk”,可以在web.config中添加以下设置:

<system.web>
  <globalization uiCulture="zh" culture="zh-HK" />
</system.web>

其次,如果要在页面上以编程方式设置文化,根据某些条件(例如查询参数或用户配置文件设置),您可以覆盖InitializeCulture并在UICulture中设置所需的文化,文化属性。

最后,如果要创建特定于语言的页面,可以在每个页面的Page指令上设置文化:

<%@ Page UICulture="zh" Culture="zh-HK" %>