我的目标
我想将 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 后,FireFox 和 Chrome 始终显示美元符号,因此我假设它们将 CurrentCulture 转换为 en-US。 Chromium Edge 和 Iphone 上的 Safari 显示了正确的值(在本例中为 2.95 瑞典克朗),因此它们确实按预期工作。
我的问题
我的文化配置设置正确吗?换句话说,我需要更改代码还是应该查看 IIS 配置? (虽然我在IIS10中没有找到本地化设置)。
FireFox和Chrome似乎要求将设置的Culture包含在UICulture列表中。我认为这些是不同的事情。 如此改变:
var supportedUICultures = new[] { "en", "nl" };
进入:
var supportedUICultures = new[] { "en", "nl", "da-DK" };
修复了所有浏览器的问题。
我通过在添加支持的文化后调用
.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);