C#/.NET 6如何根据语言名称和国家名称获取ISO 639-2三字母代码?
从语言名称+国家名称获取ISO 639-2三字母代码(.NET 6/C#10)
因为你没有language-country格式的文化代码,只能通过遍历系统所有可用文化项,匹配语言名称和国家名称来找到对应的ISO 639-2代码。下面是具体实现方案:
核心实现代码
using System.Globalization; public static string GetIso6392Code(string languageName, string countryName) { // 遍历所有可用文化(包括特定区域文化和中性文化) foreach (var culture in CultureInfo.GetCultures(CultureTypes.AllCultures)) { // 拆分文化的英文名称,分离语言和国家(格式如 "English (United States)") var nameParts = culture.EnglishName.Split(new[] { " (" }, StringSplitOptions.RemoveEmptyEntries); if (nameParts.Length != 2) continue; var cultureLangName = nameParts[0].Trim(); var cultureCountryName = nameParts[1].TrimEnd(')').Trim(); // 匹配输入的语言名称和国家名称 if (string.Equals(cultureLangName, languageName, StringComparison.OrdinalIgnoreCase) && string.Equals(cultureCountryName, countryName, StringComparison.OrdinalIgnoreCase)) { // 返回ISO 639-2三字母代码 return culture.ThreeLetterISOLanguageName; } } // 如果没有匹配项,返回null或抛出异常,根据你的需求调整 return null; }
使用示例
// 调用方法,传入语言名称和国家名称 var isoCode = GetIso6392Code("English", "United States"); Console.WriteLine(isoCode); // 输出: eng
注意事项
- 输入的语言名称、国家名称需要和
CultureInfo.EnglishName中的对应部分一致(区分大小写的问题已通过OrdinalIgnoreCase处理,但名称拼写要准确) - 如果同一语言对应多个国家,该方法会返回第一个匹配到的文化项的代码;如果需要更精确的匹配,可以添加额外筛选逻辑
- 对于极少数未被.NET文化库覆盖的小众语言/国家组合,可能无法找到对应代码,此时需要手动维护映射表补充
内容的提问来源于stack exchange,提问作者ShadowDragon
相关产品推荐
相关产品推荐

