有没有办法从 C# CultureInfo 获取标志图像?
Is there a way to get a flag image from a C# CultureInfo?
如果我有一个 CultureInfo
实例,是否有任何简单的方法——内置、通过框架或通过 OS——来获得匹配的 "flag" 图标文化?这将避免必须创建单独的查找。
我在 the documentation for CultureInfo
中找不到一个成员函数来完成这项工作,但也许还有一些其他不太费力的方法涉及我尚未找到的其他 .NET 类。
没有。没有简单的内置方法可以通过 .NET 框架或 Windows 操作系统为给定的 CultureInfo
实例获取匹配的 "flag" 图标。
正如@Peter Duniho 所说,.NET Framework 中没有内置方法。此外,CultureInfo 代表语言环境,而旗帜代表国家,在很多情况下两者并不完全匹配。如果你遇到一些用户,你可能会遇到外交问题。
无论如何,如果你想要一些简单的东西,你可能想使用 famfamfam's flag icons,它以 ISO 3166-alpha1 2 字母国家代码命名,然后将你的 CultureInfo 转换为 RegionInfo 给定locale,最后得到两个字母的ISO区域名:
var r = new RegionInfo(yourCultureInfo.LCID);
var flagName = r.TwoLetterISORegionName + ".gif";
最后,如果存在这样的文件,则显示。请注意,您可以使用 PNG 版本,并且不同的语言可能映射到同一个国家(我想到的是瑞士,他们说 4 种官方语言)。
扩展 Alex 的答案。获得 ISO 代码后,您可以使用这个简单的库从两个字符串中生成标志的 ImageSource
(来自 famfamfam 集):
https://github.com/drewnoakes/famfamfam-flags-wpf
它不是内置的,但很容易使用。
图像最终看起来像这样:
你猜怎么着!现在可以在 C# 中执行此操作,并且得到大多数平台的支持,包括 Windows 11 种设备!您可以只使用表情符号,不需要旗帜图标包!
在 Windows 10 上,它目前仅适用于 Firefox 浏览器。但它确实适用于 iOS、MacOS 和 Android 应用程序
public string GetFlag(string country)
{
var regions = CultureInfo.GetCultures (CultureTypes. SpecificCultures).Select(x => new RegionInfo(x.LCID));
var englishRegion = regions.FirstOrDefault(region => region.EnglishName.Contains(country));
if (englishRegion == null) return "";
var countryAbbrev = englishRegion.TwoLetterISORegionName;
return IsoCountryCodeToFlagEmoji(countryAbbrev);
}
public string IsoCountryCodeToFlagEmoji(string countryCode) => string.Concat(countryCode.ToUpper().Select(x => char.ConvertFromUtf32(x + 0x1F1A5)));
https://itnext.io/convert-country-name-to-flag-emoji-in-c-the-net-ecosystem-115f714d3ef9
如果我有一个 CultureInfo
实例,是否有任何简单的方法——内置、通过框架或通过 OS——来获得匹配的 "flag" 图标文化?这将避免必须创建单独的查找。
我在 the documentation for CultureInfo
中找不到一个成员函数来完成这项工作,但也许还有一些其他不太费力的方法涉及我尚未找到的其他 .NET 类。
没有。没有简单的内置方法可以通过 .NET 框架或 Windows 操作系统为给定的 CultureInfo
实例获取匹配的 "flag" 图标。
正如@Peter Duniho 所说,.NET Framework 中没有内置方法。此外,CultureInfo 代表语言环境,而旗帜代表国家,在很多情况下两者并不完全匹配。如果你遇到一些用户,你可能会遇到外交问题。
无论如何,如果你想要一些简单的东西,你可能想使用 famfamfam's flag icons,它以 ISO 3166-alpha1 2 字母国家代码命名,然后将你的 CultureInfo 转换为 RegionInfo 给定locale,最后得到两个字母的ISO区域名:
var r = new RegionInfo(yourCultureInfo.LCID);
var flagName = r.TwoLetterISORegionName + ".gif";
最后,如果存在这样的文件,则显示。请注意,您可以使用 PNG 版本,并且不同的语言可能映射到同一个国家(我想到的是瑞士,他们说 4 种官方语言)。
扩展 Alex 的答案。获得 ISO 代码后,您可以使用这个简单的库从两个字符串中生成标志的 ImageSource
(来自 famfamfam 集):
https://github.com/drewnoakes/famfamfam-flags-wpf
它不是内置的,但很容易使用。
图像最终看起来像这样:
你猜怎么着!现在可以在 C# 中执行此操作,并且得到大多数平台的支持,包括 Windows 11 种设备!您可以只使用表情符号,不需要旗帜图标包!
在 Windows 10 上,它目前仅适用于 Firefox 浏览器。但它确实适用于 iOS、MacOS 和 Android 应用程序
public string GetFlag(string country)
{
var regions = CultureInfo.GetCultures (CultureTypes. SpecificCultures).Select(x => new RegionInfo(x.LCID));
var englishRegion = regions.FirstOrDefault(region => region.EnglishName.Contains(country));
if (englishRegion == null) return "";
var countryAbbrev = englishRegion.TwoLetterISORegionName;
return IsoCountryCodeToFlagEmoji(countryAbbrev);
}
public string IsoCountryCodeToFlagEmoji(string countryCode) => string.Concat(countryCode.ToUpper().Select(x => char.ConvertFromUtf32(x + 0x1F1A5)));
https://itnext.io/convert-country-name-to-flag-emoji-in-c-the-net-ecosystem-115f714d3ef9