Load flags from SVG files with aliases and fallback; add SVG flags for missing languages (globe, ja, ko, id, fa, he, az, hy, am, ms, vi, th, tl, sw, uz, ta, te); build verified

This commit is contained in:
2026-02-09 21:36:01 +01:00
parent ee5d3fdb0d
commit 3fb5d6bde5
19 changed files with 117 additions and 2 deletions

View File

@@ -26,6 +26,25 @@ const isLangOpen = ref(false);
const langMenuRef = ref(null);
let displayModeMedia = null;
let prefersColorSchemeMedia = null;
const flagModules = import.meta.glob('./assets/flags/*.svg', { eager: true, as: 'url' });
const flagMap = Object.fromEntries(
Object.entries(flagModules).map(([path, url]) => [path.split('/').pop().replace('.svg', ''), url])
);
const flagAliases = {
'pt-br': 'pt',
'pt-pt': 'pt',
'fr-ca': 'fr',
'nl-be': 'nl',
'es-es': 'es',
'es-419': 'es',
'zh-hans': 'zh',
'zh-hant': 'zh'
};
const getFlagUrl = (code) => {
const base = flagAliases[code] || code;
return flagMap[base] || flagMap['globe'] || null;
};
const languageFlags = {
en: '<svg viewBox="0 0 24 16" xmlns="http://www.w3.org/2000/svg"><rect width="24" height="16" fill="#b22234"/><rect y="2" width="24" height="2" fill="#fff"/><rect y="6" width="24" height="2" fill="#fff"/><rect y="10" width="24" height="2" fill="#fff"/><rect y="14" width="24" height="2" fill="#fff"/><rect width="10" height="8" fill="#3c3b6e"/></svg>',
zh: '<svg viewBox="0 0 24 16" xmlns="http://www.w3.org/2000/svg"><rect width="24" height="16" fill="#de2910"/><circle cx="6" cy="5" r="2" fill="#ffde00"/></svg>',
@@ -229,7 +248,10 @@ onUnmounted(() => {
:aria-expanded="isLangOpen"
@click="isLangOpen = !isLangOpen"
>
<span class="lang-flag" v-html="languageFlags[locale]"></span>
<span class="lang-flag">
<img v-if="getFlagUrl(locale)" :src="getFlagUrl(locale)" alt="" />
<span v-else v-html="languageFlags[locale]"></span>
</span>
</button>
<div v-if="isLangOpen" class="lang-menu">
<div class="lang-search">
@@ -249,7 +271,10 @@ onUnmounted(() => {
type="button"
@click="selectLanguage(lang.code)"
>
<span class="lang-flag" v-html="languageFlags[lang.code]"></span>
<span class="lang-flag">
<img v-if="getFlagUrl(lang.code)" :src="getFlagUrl(lang.code)" alt="" />
<span v-else v-html="languageFlags[lang.code]"></span>
</span>
<span class="lang-name">{{ lang.label }}</span>
</button>
</div>