始终相同的文化:en-US

2024-02-04

我有一个 asp.net core 项目,我想将默认语言设置为 nl-BE。由于某种原因,它总是采用 en-US 语言

请参阅下面的代码(ps:我创建了自己的 ApplicationLocalizer,它从数据库获取资源 => 工作正常)。

启动.cs

public void ConfigureServices(IServiceCollection services)
{
            //Add MVC
            services.AddMvc()
                .AddViewLocalization();

            //Localization factory
            services.AddSingleton<IStringLocalizerFactory, ApplicationLocalizerFactory>();

            ...
}


public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory, ApplicationDbContext context)
{
            ...

            //Localization
            var supportedCultures = new[]
                {
                    new CultureInfo("en-US"),
                    new CultureInfo("nl-BE")
                };
            var options = new RequestLocalizationOptions {
                DefaultRequestCulture = new RequestCulture("nl-BE"),
                SupportedCultures = supportedCultures,
                SupportedUICultures = supportedCultures
            };
            app.UseRequestLocalization(options);

            ...
}

控制器一个

public string Index()
{
    return CultureInfo.CurrentCulture.Name;
}

这段代码总是返回en-US

有人可以帮我解决这个问题吗?


经过几个小时的搜索解决方案但没有结果后,我进行了大量调试并意识到中间件服务是在一个order正如声明中所宣布的配置(IApplicationBuilder 应用程序...)。因此调用了本地化中间件after控制器操作已执行。

当我移动app.UseRequestLocalization(选项)在一开始的调用中,我在控制器操作中正确本地化了 Thread/CultureInfo。

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory,
        IApplicationLifetime appLifetime)
    {
        loggerFactory.AddConsole(Configuration.GetSection("Logging"));
        loggerFactory.AddDebug();

        // THIS HAS TO BE A VERY FIRST MIDDLEWARE REGISTRATION
        SetUpLocalization(app);

        app.UseCors("AllowAllOrigins");

        app.UseMvc();

        appLifetime.ApplicationStopped.Register(() => ApplicationContainer.Dispose());
    }

    private static void SetUpLocalization(IApplicationBuilder app)
    {
        var supportedCultures = new[]
        {
            new CultureInfo("en-US"),
            new CultureInfo("pl-PL"),
            new CultureInfo("pl")
        };

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

始终相同的文化:en-US 的相关文章

随机推荐