【发布时间】:2017-02-28 21:28:19
【问题描述】:
我在使用完整的 .Net Framework v4.6.2 使用 Asp.Net Core 1.1 编写的 Web 应用程序时遇到了一些奇怪的问题。
我想强制应用程序使用瑞典语言环境 (sv-SE)。这在开发机器上工作得很好(当然......),但在它应该运行的服务器(运行 Windows Server 2012r2)上却不行。
我尝试了以下方法:
1) 将 "SiteLocale": "sv-SE" 放入 appsettings.json 文件中。
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 没有效果。
【问题讨论】:
标签: c# .net asp.net-core asp.net-core-mvc iis-8.5