我有这个C#代码:
Thread.CurrentThread.CurrentCulture = new CultureInfo(cultureName);
dateScale.EndDate.ToString("dd/MMMM", CultureInfo.CurrentCulture);
如果我将culture设置为"zh-HK"
,则在ASP.NET中输出为英文。
但是当相同的逻辑作为单元测试运行时(与运行WinForms应用程序相同),输出是中文的。
答案 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" %>