Reserved CountryCode "XX" (Inbound.BalancerCountryCode) marks an inbound behind a load balancer whose exit country is unknown: the site shows a Shuffle icon with a tooltip instead of a flag, the bot shows 🔀. Admin can pick it in the publish dialog. Fits the existing column, no migration. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
32 lines
1.9 KiB
TypeScript
32 lines
1.9 KiB
TypeScript
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<string, FlagComponent> = {
|
|
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
|
|
}
|
|
}
|