From ef07a19de688e32d9cd1c71a760137c627e276e9 Mon Sep 17 00:00:00 2001 From: Ramel Tecnologia - Rafa Martins <146174365+rafacpti23@users.noreply.github.com> Date: Sun, 14 Jun 2026 09:44:34 -0300 Subject: [PATCH] fix(ui): render country flags via flagcdn SVGs for Windows compatibility (#3814) Windows does not render regional-indicator flag emojis. The LanguageSelector now maps a flag emoji's regional-indicator code points to an ISO country code and renders the flag from flagcdn, falling back to the raw emoji span when the glyph is not a two-letter regional pair or the image fails to load (onError). Integrated into release/v3.8.25. Co-authored-by: diegosouzapw --- src/shared/components/LanguageSelector.tsx | 29 ++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/src/shared/components/LanguageSelector.tsx b/src/shared/components/LanguageSelector.tsx index 7786e3fbfa..94d6f70b0c 100644 --- a/src/shared/components/LanguageSelector.tsx +++ b/src/shared/components/LanguageSelector.tsx @@ -16,6 +16,31 @@ function persistLocale(code: Locale) { } } +function CountryFlag({ emoji, alt }: { emoji: string; alt: string }) { + const [error, setError] = useState(false); + + if (!emoji) return null; + + const chars = [...emoji]; + const codePoints = chars.map((c) => c.codePointAt(0) || 0); + const isRegional = codePoints.every((cp) => cp >= 127462 && cp <= 127487); + + if (!isRegional || codePoints.length !== 2 || error) { + return {emoji}; + } + + const countryCode = codePoints.map((cp) => String.fromCharCode(cp - 127462 + 97)).join(""); + + return ( + {alt} setError(true)} + /> + ); +} + export default function LanguageSelector() { const locale = useLocale(); const router = useRouter(); @@ -54,7 +79,7 @@ export default function LanguageSelector() { className="flex items-center gap-1.5 px-2.5 py-1.5 rounded-lg text-sm font-medium text-text-main hover:bg-surface-hover transition-all border border-transparent hover:border-border" title={currentLang.name} > - {currentLang.flag} + {currentLang.label} - {lang.flag} + {lang.name} {lang.code === locale && ( check