Blazor项目en-AT文化报错:CultureNotFoundException无效文化标识符
解决Blazor中en-AT(英语(奥地利))文化渲染异常问题
问题原因
你遇到的CultureNotFoundException是因为en-AT并非.NET/Windows预装的预定义文化,对应的LCID(4096)属于未注册的无效标识符,直接通过LCID实例化CultureInfo自然会失败。
解决方案
1. 直接使用文化名称实例化(优先推荐)
替换当前出错的代码,放弃通过LCID创建CultureInfo,直接用文化名称字符串:
// 直接用文化名称创建 CultureInfo cultureInfo = new CultureInfo("en-AT"); // 或者更简单:直接使用已设置的默认文化 // CultureInfo cultureInfo = CultureInfo.CurrentCulture;
2. 注册自定义en-AT文化(如果第一步仍有问题)
如果系统中完全没有en-AT文化的定义,可在应用启动时手动注册自定义文化,同时配置符合奥地利习惯的格式规则:
// 在Program.cs的应用初始化阶段添加以下代码 var targetCultureName = "en-AT"; // 检查是否已存在该文化 if (!CultureInfo.GetCultures(CultureTypes.AllCultures).Any(c => c.Name.Equals(targetCultureName, StringComparison.OrdinalIgnoreCase))) { // 以英语(en)为基础文化创建自定义文化 var baseCulture = new CultureInfo("en"); var customEnAtCulture = new CultureInfo(targetCultureName); // 配置奥地利地区的格式规则(示例) // 货币格式:欧元,保留2位小数,符合奥地利分隔符习惯 customEnAtCulture.NumberFormat.CurrencySymbol = "€"; customEnAtCulture.NumberFormat.CurrencyDecimalDigits = 2; customEnAtCulture.NumberFormat.CurrencyGroupSeparator = "."; customEnAtCulture.NumberFormat.CurrencyDecimalSeparator = ","; // 日期格式:奥地利常用的日.月.年格式 customEnAtCulture.DateTimeFormat.ShortDatePattern = "dd.MM.yyyy"; customEnAtCulture.DateTimeFormat.LongDatePattern = "dd MMMM yyyy"; // 将自定义文化注册到系统 CultureInfo.RegisterCulture(customEnAtCulture); } // 设置应用默认文化 CultureInfo.DefaultThreadCurrentCulture = new CultureInfo(targetCultureName); CultureInfo.DefaultThreadCurrentUICulture = new CultureInfo(targetCultureName);
3. 确认Blazor的文化配置
确保你在Blazor项目中正确设置了请求本地化配置,比如在Program.cs中添加:
builder.Services.Configure<RequestLocalizationOptions>(options => { var supportedCultures = new[] { "en-AT", "en" }; options.DefaultRequestCulture = new RequestCulture("en-AT"); options.SupportedCultures = supportedCultures; options.SupportedUICultures = supportedCultures; });
内容的提问来源于stack exchange,提问作者UdhayaKumar Duraisamy
相关产品推荐
相关产品推荐

