Blazor Server .SetDefaultCulture() 在 IIS10 中托管时不适用于所有浏览器

问题描述 投票:0回答:2

我的目标

我想将 CurrentCulture 和 CurrentUICulture 初始化分开。 该应用程序使用一种货币标准,但可以为不同用户显示多种文本翻译(基于 .resx 文件)。

我的代码

我在 Startup.Configure 中使用以下代码来实现此目的。

 var configuredCulture = "da-DK";
        var supportedUICultures = new[] { "en", "nl" };
        var localizationOptions = new RequestLocalizationOptions()
            .SetDefaultCulture(configuredCulture)
            .AddSupportedUICultures(supportedUICultures);
        app.UseRequestLocalization(localizationOptions);

*configuredCulture 通常从 AppSettings.json 读取,因此可以由应用程序管理员进行设置。

我的问题

上面的代码在我的 Chromium Edge、Chrome 和 FireFox 开发机器(使用 Visual Studio 中的 IIS Express)上按预期工作。文本翻译基于浏览器语言,货币是从 appSettings.config 读取的(或者在本例中是硬编码的)。

将应用程序发布到运行 IIS10 的 Server 2019 后,FireFoxChrome 始终显示美元符号,因此我假设它们将 CurrentCulture 转换为 en-US。 Chromium EdgeIphone 上的 Safari 显示了正确的值(在本例中为 2.95 瑞典克朗),因此它们确实按预期工作。

我的问题

我的文化配置设置正确吗?换句话说,我需要更改代码还是应该查看 IIS 配置? (虽然我在IIS10中没有找到本地化设置)。

c# localization blazor-server-side iis-10 .net-5
2个回答
1
投票

FireFox和Chrome似乎要求将设置的Culture包含在UICulture列表中。我认为这些是不同的事情。 如此改变:

var supportedUICultures = new[] { "en", "nl" };

进入:

var supportedUICultures = new[] { "en", "nl", "da-DK" };

修复了所有浏览器的问题。


0
投票

我通过在添加支持的文化后调用

.SetDefaultCulture
解决了这个问题,如下所示:

var supportedCultures = new string[] { "fa", "en", "ar" };
var localizationOptions = new RequestLocalizationOptions()
    .AddSupportedCultures(supportedCultures)
    .AddSupportedUICultures(supportedCultures)
    .SetDefaultCulture(supportedCultures[0]);
localizationOptions.DefaultRequestCulture = new RequestCulture("fa");
app.UseRequestLocalization(localizationOptions);
© www.soinside.com 2019 - 2024. All rights reserved.