.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
相关产品推荐
相关产品推荐

