力区域与Asp.Net核心

问题描述:

我在使用Asp.Net 1.1内核编写一个Web应用程序的一些奇怪的问题,使用完整的.NET框架v4.6.2。力区域与Asp.Net核心

我想迫使应用程序使用瑞典区域设置(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)添加RequestLocalization配置(.. )在Startup.cs中

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)安装瑞典语言包的服务器端(server最初只有英文)

后做所有上述任何日期或数字输出在视图中仍然使用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没有任何影响。

你尝试在Program.cs设置CultureInfo.CurrentCulture属性:

using System.Globalization; 

CultureInfo.CurrentCulture = new CultureInfo("sv-SE"); 
+0

刚刚尝试过,但结果仍然一样。我会假设在Controller的构造函数中设置这些属性,或者Actions也会覆盖这种情况。但谢谢你的建议。 – NeoDarque

+0

@NeoDarque在创建'WebHostBuilder'并调用'Build()'之前配置了它吗? –

+0

是的,正确的。在创建WebHostBuilder之前尝试设置CultureInfo.CurrentCulture,CultureInfo.CurrentUICulture,CultureInfo.DefaultThreadCurrentCulture&CultureInfo.DefaultThreadCurrentUICulture。 – NeoDarque

Microsoft ASP.NET Core Docs - Globalization and localization看看。

4)添加RequestLocalization配置(...)在Startup.cs

从文档:

上的请求的当前培养被设定在本地化中间件。本地化中间件在Startup.cs文件的Configure方法中启用。

注意,定位中间件必须可能检查请求培养任何中间件之前进行配置(例如,app.UseMvc())。

5)在我的控制器构造函数设置当前线程的文化

6)在我的控制器操作设置当前线程的文化

,而不是在构造函数或在每一个动作设定,请尝试在OnActionExecuting筛选器上设置文化。下面是一个例子代码:

public class InternationalizationAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     var cultureInfo = CultureInfo.GetCultureInfo("sv-SE"); 

     Thread.CurrentThread.CurrentCulture = cultureInfo; 
     Thread.CurrentThread.CurrentUICulture = cultureInfo; 
    } 
} 

在你的控制器类,把这个:[Internationalization]

+0

之前的'Main()'方法中添加了它,我也尝试过,但仍然没有帮助。正如我上面写的,我可以在视图中看到CurrentCulture&CurrentUICulture已正确设置为“sv-SE”,所以这可能不是问题。但即使这样,视图模型属性的渲染仍然使用en-US语言环境呈现。 – NeoDarque