力区域与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");
在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]
。
之前的'Main()'方法中添加了它,我也尝试过,但仍然没有帮助。正如我上面写的,我可以在视图中看到CurrentCulture&CurrentUICulture已正确设置为“sv-SE”,所以这可能不是问题。但即使这样,视图模型属性的渲染仍然使用en-US语言环境呈现。 – NeoDarque
刚刚尝试过,但结果仍然一样。我会假设在Controller的构造函数中设置这些属性,或者Actions也会覆盖这种情况。但谢谢你的建议。 – NeoDarque
@NeoDarque在创建'WebHostBuilder'并调用'Build()'之前配置了它吗? –
是的,正确的。在创建WebHostBuilder之前尝试设置CultureInfo.CurrentCulture,CultureInfo.CurrentUICulture,CultureInfo.DefaultThreadCurrentCulture&CultureInfo.DefaultThreadCurrentUICulture。 – NeoDarque