Используйте одно и то же решение для приложений CSharp Console, .NET Core, Blazor или Xamarin для iOS и Android.

Давайте сегодня улучшим пользовательский опыт наших приложений, показав смайлики с флагами вместо старых простых названий стран или кодов стран. Использование эмодзи в файлах изображений стран значительно повышает производительность и эффективность разработки. Его удивительно легко и безопасно реализовать в ваших приложениях.

Используя System.Globalization и System.Linq, ниже приведен пример того, как это выглядит в консольном приложении:

Следя за форумом советов по javascript, я нашел этот изящный трюк. Но я не смог найти хорошего решения в C#/.NET. Но через 30 дней после того, как я собирался сдаться, я нашел решение, которое отлично работает, и подумал, что им стоит поделиться! Если вы не хотите запускать его с помощью статических функций, вы можете просто вызвать GetFlag() и передать название страны в функцию:

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)));

Если у вас уже есть двузначный код страны, вы можете пропустить GetFlag(), просто вызвав функцию IsoCountryCodeToFlagEmoji().

Надеюсь, вы нашли это полезным!

Бонусный код конвертера XAML:

Для тех, кто любит конвертеры (например, Charlin и Ammar), вы можете просто использовать этот код, чтобы преобразовать название страны, полученное из свойства ViewModel, в эмодзи:

public class CountryToFlagConverter : Xamarin.Forms.IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) => GetFlag((string)value);

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) => value;

    private 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);
    }

    private string IsoCountryCodeToFlagEmoji(string countryCode)
        => string.Concat(countryCode.ToUpper().Select(x => char.ConvertFromUtf32(x + 0x1F1A5)));
}

После создания конвертера вы можете добавить его ключ в ResourceDictionary любой Страницы вот так:
<local:CountryToFlagConverter x:Key=”FlagDetermination”/>

А вот как вы могли бы использовать это в своем XAML:

<Label Text="{Binding GroupCountryName}"
       TextColor="#424242"
       HorizontalOptions="Start"
       FontFamily="OpenSansBoldFont"
       FontSize="22" />
<Label Text="{Binding GroupCountryName ,Converter={StaticResource FlagDetermination}}"
       HorizontalOptions="EndAndExpand"
       FontSize="30" />

Не стесняйтесь обращаться ко мне с вопросами в Twitter или Linkedin и ознакомьтесь с нашим портфолио! Кроме того, попробуйте нашу бета-версию Приложение iOS BeAware для глухих или наше видео на YouTube Начало работы с Xamarin Native!