Neo*_*que 4 .net c# iis-8.5 asp.net-core-mvc asp.net-core
使用完整的.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不起作用。
小智 12
我在 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");
您是否尝试在中设置CultureInfo.CurrentCulture属性Program.cs:
using System.Globalization;
CultureInfo.CurrentCulture = new CultureInfo("sv-SE");
查看Microsoft ASP.NET Core 文档 - 全球化和本地化。
4) 在Startup.cs中的Configure(...)中添加了RequestLocalization
来自文档:
请求的当前文化是在本地化中间件中设置的。本地化中间件在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]。
| 归档时间: | 
 | 
| 查看次数: | 7083 次 | 
| 最近记录: |