首页 文章

System.Globalization.RegionInfo完整的有效文化输入列表

提问于
浏览
0

我有一份从外部来源获得的ISO 3166双字母国家代码列表 . 对于每一个,我创造

new System.Globalization.RegionInfo(countryCode)

偶尔有一个是无效的,导致ArgumentException“不支持文化名称'xx' . ”

在将其传递给构造函数之前,我想要一个函数来确定国家/地区代码是否有效 . 这是我的尝试:

private bool IsCultureValid(string cultureName)
    {
        return CultureInfo.GetCultures(CultureTypes.AllCultures)
            .Any(c => c.Name.Equals(cultureName, StringComparison.InvariantCultureIgnoreCase));
    }

该函数为许多输入返回一个假阴性(函数返回false,但如果我尝试,我可以用该输入创建一个RegionInfo对象) . 一些输入:

  • zw(津巴布韦)

  • au(澳大利亚)

  • mx(墨西哥)

  • ve(委内瑞拉玻利瓦尔共和国)

  • hn(洪都拉斯)

  • kw(科威特)

我错过了什么?这里有更好的方法吗?提前致谢!

3 回答

  • 1

    我意识到这是一个过时的问题 . 但是,我最近碰到了类似的情况,我需要验证传入的ISO货币代码 . 我在这里和其他地方找到的所有示例都依赖于捕获尝试创建具有无效代码/ id的区域或文化时引发的异常 . 这不是一个好习惯 .

    我对这个问题的研究使我意识到,在很大程度上,问题是不变的文化和中立的文化 . 一旦从CultureInfo数组中删除它们,就可以生成仅有效的RegionInfo对象的列表 .

    这是我自己的问题的推断,以提供所要求的答案 . 虽然显然可以在任何需要有效RegionInfo对象的地方应用此变体 .

    private bool IsValidRegion(string isoCountryCode)
        {
            return CultureInfo.GetCultures(CultureTypes.AllCultures)
                .Where(x => !x.Equals(CultureInfo.InvariantCulture)) //Remove the invariant culture as a region cannot be created from it.
                .Where(x => !x.IsNeutralCulture) //Remove nuetral cultures as a region cannot be created from them.
                .Select(x => new RegionInfo(x.LCID))
                .Any(x => x.Name.Equals(isoCountryCode, StringComparison.InvariantCulture));
        }
    

    Edit: 除非使用自定义文化,否则实际上可以更直接地完成 . 只需使用"CultureTypes.SpecificCultures"枚举值即可 .

  • 2

    您可以编写一个函数,在try / catch块中创建特定的文化,并返回CultureInfo对象而不是bool .

    顺便说一句,对于墨西哥,洪都拉斯来说,没有像ve这样的文化,它是es-VE等等 . “衍生”文化的文化信息必须具有父母文化代码 . en-AU,en-US等

    http://www.localeplanet.com/dotnet/es-VE/index.html

    要获取已安装文化的所有正确值的列表,请使用:

    CultureInfo.GetCultures();
    

    https://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.getcultures(v=vs.110).aspx

  • -1

    你因为不存在而变得虚假 . 以下是使用以下循环获得的所有文化列表:

    foreach (CultureInfo ci in CultureInfo.GetCultures(CultureTypes.AllCultures))
    {
        ci.Name
    }
    

    AR,BG,CA,ZH-汉斯,CS,DA,德,EL,EN,ES,FI,FR,他,胡,就是它,JA,KO,NL,NO,PL,PT,RM,RO, RU,小时,SK,平方,SV,TH,TR,UR,ID,英国,是SL等,LV,LT,TG,FA,VI,HY,AZ,欧盟,HSB,MK,TN,XH,つ,AF,KA,FO,喜公吨,SE,GA,毫秒,KK,KY,SW,TK,UZ,TT,BN,PA,合谷,或,TA,TE,KN,毫升,如,MR, SA,MN,博时,CY,公里,卤味,GL,角,SYR,SI,IU,上午,TZM,NE,风 Cloud ,PS,FIL,DV,哈,哟,QUZ,国家统计局,BA,磅,KL, IG,II ARN,MOH,BR ,,微克,MI,OC,CO,GSW,SAH,QUT,RW,WO,PRS,GD,AR-SA,BG-BG,CA-ES,ZH-TW,CS -CZ,DA-DK,DE-DE,EL-GR,EN-US,FI-FI,FR-FR,他-IL,HU-HU,IS-IS,它-IT,JA-JP,KO-KR ,NL-NL,NB-NO,PL-PL,PT-BR,RM-CH,滚装船,RU-RU,HR-HR,SK-SK,SQ-AL,SV-SE,TH-TH,TR -TR,UR-PK,ID-ID,UK-UA,是-BY,SL-SI,ET-EE,LV-LV,LT-LT,TG-Cyrl-TJ,FA-IR,VI-VN,HY -AM,AZ-LATN-AZ,EU-ES,HSB-DE,MK-MK,TN-ZA,XH-ZA,祖ZA,AF-ZA,KA-GE,FO-FO,高保真IN,山-MT,SE-NO,MS-MY,KK-KZ,KY-KG,SW-KE,TK-TM,UZ-LATN-UZ,TT-RU,BN-IN,PA-IN,GU-IN,或-IN,TA-IN,TE-IN,KN-IN,ML-IN,如-IN,MR-IN,SA-IN,MN-MN,博-CN,CY-GB,KM-KH,LO-LA ,GL-ES,KOK-IN,SYR-SY,SI-LK,IU- jar -CA,AM-ET,NE-NP,FY-NL,PS-AF,FIL-PH,DV-MV,HA-LATN -NG,溜溜NG,QUZ-BO,NSO-ZA,BA-RU,LB-LU,KL-GL,IG-NG,II-CN,ARN-CL,MOH-CA,BR- FR,UG-CN,MI-NZ,OC-FR,CO-FR,GSW-FR,SAH-RU,QUT-GT,RW-RW,WO-SN,PRS-AF,GD-GB,AR-IQ, ZH-CN,DE-CH,EN-GB,ES-MX,FR-BE,它-CH,NL-BE,NN-NO,PT-PT,SR-LATN-CS,SV-FI,AZ-Cyrl- AZ,DSB-DE,SE-SE,GA-IE,MS-BN,UZ-Cyrl-UZ,BN-BD,MN-旺-CN,IU-LATN-CA,TZM-LATN-DZ,QUZ-EC, AR-EG,ZH-HK,DE-AT,EN-AU,ES-ES,FR-CA,SR-Cyrl-CS,SE-FI,QUZ-PE,AR-LY,ZH-SG,DE-LU,烯CA,ES-GT,FR-CH,HR-BA,SMJ-NO,AR-DZ,ZH-MO,DE-LI,烯NZ,ES-CR,FR-LU,BS-LATN-BA, SMJ-SE,AR-MA,EN-IE,ES-PA,FR-MC,SR-LATN-BA,SMA-NO,AR-TN,烯ZA,ES-DO,SR-Cyrl-BA,SMA- SE,AR-OM,烯JM,ES-VE,BS-Cyrl-BA,SMS-FI,AR-YE,EN-029,ES-CO,SR-LATN-RS,SMN-FI,AR-SY,烯-BZ,ES-PE,SR-Cyrl-RS,AR-JO,EN-TT,ES-AR,SR-LATN-ME,AR-LB,烯ZW,ES-EC,SR-Cyrl-ME, AR-KW,烯PH,ES-CL,AR-AE,ES-UY,AR-BH,ES-PY,AR-QA,EN-IN,ES-BO,烯MY,ES-SV,烯SG,ES-HN,ES-NI,ES-PR,ES-US,BS-Cyrl,BS-LATN,SR-Cyrl,SR-LATN,SMN,AZ-Cyrl,短信,ZH,NN,BS,AZ- LATN,SMA,UZ-Cyrl,MN-Cyrl,IU- jar ,ZH-汉特,NB,SR,TG-Cyrl,DSB,SMJ,UZ-LATN,MN-旺,IU-LATN,TZM-LATN,HA- LATN,ZH-CHS,ZH-CHT

    所以你可以看到它不包含zw,但它具有en-ZW,因为它具有en-AU

相关问题