import type { FlagComponent } from 'country-flag-icons/react/3x2' import { AE, AM, AR, AT, AU, AZ, BE, BG, BR, BY, CA, CH, CL, CY, CZ, DE, DK, EE, ES, FI, FR, GB, GE, GR, HK, HR, HU, ID, IE, IL, IN, IS, IT, JP, KG, KR, KZ, LT, LU, LV, MD, MX, MY, NL, NO, PL, PT, RO, RS, RU, SE, SG, SI, SK, TH, TR, TW, UA, US, UZ, VN, ZA, } from 'country-flag-icons/react/3x2' // Курируемый список стран, где обычно арендуют VPN-серверы: полный набор country-flag-icons весит // ~1 МБ SVG, а named-импорты тришейкаются. Нужна новая страна — добавить её сюда (бэкенд принимает // любой ISO 3166-1 alpha-2; неизвестный UI код показывается текстом вместо флага). // Emoji-флаги не используем: Windows их не рисует (вместо 🇩🇪 показывает «DE»). export const FLAGS: Record = { AE, AM, AR, AT, AU, AZ, BE, BG, BR, BY, CA, CH, CL, CY, CZ, DE, DK, EE, ES, FI, FR, GB, GE, GR, HK, HR, HU, ID, IE, IL, IN, IS, IT, JP, KG, KR, KZ, LT, LU, LV, MD, MX, MY, NL, NO, PL, PT, RO, RS, RU, SE, SG, SI, SK, TH, TR, TW, UA, US, UZ, VN, ZA, } export const COUNTRY_CODES = Object.keys(FLAGS) /** Зарезервированный код «инбаунд за балансировщиком, страна выхода неизвестна» (см. * Inbound.BalancerCountryCode на бэкенде) — вместо флага рисуется значок балансира. */ export const BALANCER_COUNTRY_CODE = 'XX' /** Локализованное имя страны по ISO-коду (Intl), без собственных переводов. */ export function countryName(code: string, language: string): string { try { return new Intl.DisplayNames([language], { type: 'region' }).of(code) ?? code } catch { return code } }