首页 > 解决方案 > 为什么“de-IT”是本地有效的 CultureInfo 而不是生产?

问题描述

我正在验证一种新文化,国家/地区部分来自用户选择,需要检查,所以我使用以下代码:

string language = submittedCulture.TwoLetterISOLanguageName;  // de
string countryCode = GetIso3166Country(model.Country); // submitted Italy and countryCode IT
string cultureString = string.IsNullOrEmpty(countryCode)
    ? language
    : $"{language}-{countryCode}";
bool validCulture = cultureString.TryParseCultureInfo(out CultureInfo newCulture);

TryParseCultureInfo是一个简单的扩展方法,使用CultureInfo.GetCultureInfo

public static bool TryParseCultureInfo(this string stringValue, out CultureInfo value)
{
    value = null;
    if (stringValue == null)
    {
        return false;
    }

    try
    {
        value = CultureInfo.GetCultureInfo(stringValue);
        return true;
    }
    catch (CultureNotFoundException)
    {
        return false;
    }
}

如果我在本地测试它,一切都会按预期工作。我得到了一种文化"de-IT",因此验证成功,我将解析重定向 URL 作为下一步。但是在生产(实际上是 UAT)上它失败了,不支持文化。

是否需要安装每种文化?如果我尝试“it-IT”,它也适用于生产,所以看起来问题不是意大利,而是“de-IT”不存在。为什么行为如此不同,是什么原因造成的,我该怎么做才能在本地和生产中获得相同的行为?

是否可以选择CultureAndRegionInfoBuilder在应用启动时创建这种文化,或者最好的解决方案是什么?编辑:我试过了,但你需要管理权限,这是不可能的。

那么,即使(尚未)支持这种文化,规避这个问题的最佳方法是什么?

标签: c#localizationcultureinfocultureregional-settings

解决方案


推荐阅读