我遇到了一个使用Asp.Net Core 1.1编写,使用完整的.Net Framework v4.6.2的Web应用程序的一些奇怪问题。
我想强制应用程序使用瑞典语环境(sv-SE)。这在开发机器上运行得非常好(当然...),但是在它应该运行的服务器上(运行Windows Server 2012r2),却不起作用。
我已经尝试了以下方法:
1)在appsettings.json文件中加入“SiteLocale”:“sv-SE”。
2)在web.config中加入以下内容
<configuration>
<system.web>
<globalization culture="sv-SE" uiCulture="sv-SE" />
</system.web>
...
</configuration
3) 在 program.cs 中初始化应用程序之前,设置默认语言环境。
System.Globalization.CultureInfo.DefaultThreadCurrentCulture = new System.Globalization.CultureInfo("sv-SE");
System.Globalization.CultureInfo.DefaultThreadCurrentUICulture = new System.Globalization.CultureInfo("sv-SE");
4) 在 Startup.cs 中的 Configure(...) 中添加了 RequestLocalization
var supportedCultures = new[]
{
new CultureInfo("sv-SE")
};
app.UseRequestLocalization(new RequestLocalizationOptions
{
DefaultRequestCulture = new RequestCulture("sv-SE"),
SupportedCultures = supportedCultures,
SupportedUICultures = supportedCultures
});
5) 在我的控制器构造函数中设置当前线程的区域性
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("sv-SE");
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("sv-SE");
6)在我的控制器操作中设置当前线程的文化
System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("sv-SE");
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("sv-SE");
7)为服务器安装了瑞典语言包(服务器最初只有英语)。
完成以上步骤后,视图中输出的任何日期或数字仍使用en-US区域设置进行呈现。
查看视图中的当前区域设置,我可以看到以下内容:
System.Globalization.CultureInfo.CurrentCulture.Name => "sv-SE"
System.Globalization.CultureInfo.CurrentUICulture.Name => "sv-SE"
System.Globalization.CultureInfo.InstalledUICulture => "en-US"
在我的开发机上,这个工作正常,数字和日期根据瑞典语区域设置格式化。但是在服务器上,它们没有。
在服务器上,应用程序正在 ApplicationPoolIdentity 下运行。我假设它配置为使用 "en-US" 作为区域设置,因为操作系统最初只安装了英语语言。
对于为什么设置 CurrentThread.CurrentCulture/CurrentUICulture 没有效果感到困惑。