You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET C# Blazor中Globalization无法返回全部预期文化国籍信息

Blazor WebAssembly 下 CultureInfo.GetCultures 返回结果截断问题说明

问题现象

开发个人简介国籍下拉选择功能时,原计划使用 .NET 全球化(Globalization)能力实现,参考 .NET 6 官方文档中 CultureTypes 的说明编写测试代码,遍历 CultureInfo.GetCultures(CultureTypes.NeutralCultures) 返回结果,输出文化名称、ISO语言编码、显示名、英文名等字段:

foreach (CultureInfo ci in CultureInfo.GetCultures(CultureTypes.NeutralCultures))
{
    Console.Write("{0,-7}", ci.Name);
    Console.Write(" {0,-3}", ci.TwoLetterISOLanguageName);
    Console.Write(" {0,-3}", ci.ThreeLetterISOLanguageName);
    Console.Write(" {0,-3}", ci.ThreeLetterWindowsLanguageName);
    Console.Write(" {0,-40}", ci.DisplayName);
    Console.WriteLine(" {0,-40}", ci.EnglishName);
}

按照官方文档示例,该接口应返回包含 ar、bg、ca、zh-Hans、cs、da 在内的数十种中性文化条目,但实际在 Blazor WebAssembly 环境运行时,仅返回固定语言(Invariant Language (Invariant Country))、de、en、es、fr、it 极少数条目,列表大幅截断。更换普通浏览器、无痕浏览器模式测试结果完全一致。

问题原因

该现象由 Blazor WebAssembly 运行时的默认构建规则导致:

  • Blazor WASM 为了控制应用下载包体积,默认启用了全球化功能的精简模式(Invariant Globalization 裁剪),默认只打包极少数常用语言的文化数据,未被纳入默认打包范围的文化信息会被构建阶段的裁剪器直接移除,运行时无法获取到对应条目。
  • 该行为和服务端 ASP.NET Core、控制台程序的默认行为完全不同:非WASM的 .NET 运行时默认会携带操作系统/运行时内置的全量全球化文化数据,因此能返回官方文档示例中的完整列表。

修复方式

如果需要在 WASM 环境获取完整的文化列表,只需修改项目文件关闭全球化精简模式即可:
在项目 .csproj 文件的 <PropertyGroup> 节点下添加如下配置:

<InvariantGlobalization>false</InvariantGlobalization>

注意:关闭该模式后,WASM 应用的包体积会有几MB的涨幅,需要根据业务场景权衡是否接受。如果仅需要国籍列表这类固定枚举数据,手动维护静态列表的方案反而包体积更小、加载更快。

附:手动整理的可用国籍枚举

为遇到相同问题的开发者提供已整理完成的 Nationality 国籍枚举,枚举中已将连字符替换为HH、空格替换为_,可根据UI展示需求自行转换处理:

public enum Nationality{
    Afghan=1,
    Albanian=2,
    Algerian=3,
    American=4,
    Andorran=5,
    Angolan=6,
    Antiguans=7,
    Argentinean=8,
    Armenian=9,
    Australian=10,
    Austrian=11,
    Azerbaijani=12,
    Bahamian=13,
    Bahraini=14,
    Bangladeshi=15,
    Barbadian=16,
    Barbudans=17,
    Batswana=18,
    Belarusian=19,
    Belgian=20,
    Belizean=21,
    Beninese=22,
    Bhutanese=23,
    Bolivian=24,
    Bosnian=25,
    Brazilian=26,
    British=27,
    Bruneian=28,
    Bulgarian=29,
    Burkinabe=30,
    Burmese=31,
    Burundian=32,
    Cambodian=33,
    Cameroonian=34,
    Canadian=35,
    Cape_Verdean=36,
    Central_African=37,
    Chadian=38,
    Chilean=39,
    Chinese=40,
    Colombian=41,
    Comoran=42,
    Congolese=43,
    Costa_Rican=44,
    Croatian=45,
    Cuban=46,
    Cypriot=47,
    Czech=48,
    Danish=49,
    Djibouti=50,
    Dominican=51,
    Dutch=52,
    East_Timorese=53,
    Ecuadorean=54,
    Egyptian=55,
    Emirian=56,
    Equatorial_Guinean=57,
    Eritrean=58,
    Estonian=59,
    Ethiopian=60,
    Fijian=61,
    Filipino=62,
    Finnish=63,
    French=64,
    Gabonese=65,
    Gambian=66,
    Georgian=67,
    German=68,
    Ghanaian=69,
    Greek=70,
    Grenadian=71,
    Guatemalan=72,
    GuineaHHBissauan=73,
    Guinean=74,
    Guyanese=75,
    Haitian=76,
    Herzegovinian=77,
    Honduran=78,
    Hungarian=79,
    IHHKiribati=80,
    Icelander=81,
    Indian=82,
    Indonesian=83,
    Iranian=84,
    Iraqi=85,
    Irish=86,
    Israeli=87,
    Italian=88,
    Ivorian=89,
    Jamaican=90,
    Japanese=91,
    Jordanian=92,
    Kazakhstani=93,
    Kenyan=94,
    Kittian_and_Nevisian=95,
    Kuwaiti=96,
    Kyrgyz=97,
    Laotian=98,
    Latvian=99,
    Lebanese=100,
    Liberian=101,
    Libyan=102,
    Liechtensteiner=103,
    Lithuanian=104,
    Luxembourger=105,
    Macedonian=106,
    Malagasy=107,
    Malawian=108,
    Malaysian=109,
    Maldivian=110,
    Malian=111,
    Maltese=112,
    Marshallese=113,
    Mauritanian=114,
    Mauritian=115,
    Mexican=116,
    Micronesian=117,
    Moldovan=118,
    Monacan=119,
    Mongolian=120,
    Moroccan=121,
    Mosotho=122,
    Motswana=123,
    Mozambican=124,
    Namibian=125,
    Nauruan=126,
    Nepalese=127,
    New_Zealander=128,
    NiHHVanuatu=129,
    Nicaraguan=130,
    Nigerian=131,
    Nigerien=132,
    North_Korean=133,
    Northern_Irish=134,
    Norwegian=135,
    Omani=136,
    Pakistani=137,
    Palauan=138,
    Panamanian=139,
    Papua_New_Guinean=140,
    Paraguayan=141,
    Peruvian=142,
    Polish=143,
    Portuguese=144,
    Qatari=145,
    Romanian=146,
    Russian=147,
    Rwandan=148,
    Saint_Lucian=149,
    Salvadoran=150,
    Samoan=151,
    San_Marinese=152,
    Sao_Tomean=153,
    Saudi=154,
    Scottish=155,
    Senegalese=156,
    Serbian=157,
    Seychellois=158,
    Sierra_Leonean=159,
    Singaporean=160,
    Slovakian=161,
    Slovenian=162,
    Solomon_Islander=163,
    Somali=164,
    South_African=165,
    South_Korean=166,
    Spanish=167,
    Sri_Lankan=168,
    Sudanese=169,
    Surinamer=170,
    Swazi=171,
    Swedish=172,
    Swiss=173,
    Syrian=174,
    Taiwanese=175,
    Tajik=176,
    Tanzanian=177,
    Thai=178,
    Togolese=179,
    Tongan=180,
    Trinidadian_or_Tobagonian=181,
    Tunisian=182,
    Turkish=183,
    Tuvaluan=184,
    Ugandan=185,
    Ukrainian=186,
    Uruguayan=187,
    Uzbekistani=188,
    Venezuelan=189,
    Vietnamese=190,
    Welsh=191,
    Yemenite=192,
    Zambian=193,
    Zimbabwean=194,
}

内容的提问来源于stack exchange,提问作者Mitch Storrie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 07:06:19