为什么“de-IT”在本地是有效的 CultureInfo,但在生产中却不是?

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

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

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# localization cultureinfo culture regional-settings
1个回答
0
投票

如果您找到解决方案,请告诉我....

© www.soinside.com 2019 - 2024. All rights reserved.