使用 Asp.Net Core 强制区域设置

2023-12-20

我在使用 Asp.Net Core 1.1 和完整的 .Net Framework v4.6.2 编写的 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 没有效果。


我在 ASP Net Core 3.0 中遇到了类似的问题。网站托管位于不同的国家/地区,导致格式出现问题。

我在启动中添加了以下内容:

using Microsoft.AspNetCore.Localization;
using System.Globalization;

在配置服务中:

services.AddLocalization();

在配置中:

var supportedCultures = new[]{
    new CultureInfo("en-US")
};
app.UseRequestLocalization(new RequestLocalizationOptions {
    DefaultRequestCulture = new RequestCulture("en-US"),
    SupportedCultures = supportedCultures,
    FallBackToParentCultures= false
});
CultureInfo.DefaultThreadCurrentCulture = CultureInfo.CreateSpecificCulture("en-US");
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Asp.Net Core 强制区域设置 的相关文章

随机推荐