From 38137f62c109c0e1eb85a1d709a03acbb0ab590a Mon Sep 17 00:00:00 2001 From: supalerk-ar66 Date: Mon, 19 Jan 2026 16:09:07 +0700 Subject: [PATCH] feat: add language switcher component with flag icons for English and Thai locales. --- .../components/common/LanguageSwitcher.vue | 57 ++++++++++++------ Frontend-Learner/public/flags/en.png | Bin 0 -> 23924 bytes Frontend-Learner/public/flags/th.png | Bin 0 -> 3544 bytes 3 files changed, 39 insertions(+), 18 deletions(-) create mode 100644 Frontend-Learner/public/flags/en.png create mode 100644 Frontend-Learner/public/flags/th.png diff --git a/Frontend-Learner/components/common/LanguageSwitcher.vue b/Frontend-Learner/components/common/LanguageSwitcher.vue index d27b9129..366cae3a 100644 --- a/Frontend-Learner/components/common/LanguageSwitcher.vue +++ b/Frontend-Learner/components/common/LanguageSwitcher.vue @@ -15,10 +15,8 @@ const availableLocales = computed(() => { })) }) -// Get current locale display (TH or EN) -const currentLocaleDisplay = computed(() => { - return locale.value.toUpperCase() -}) +// Get flag image path for a locale +const getFlagPath = (code: string) => `/flags/${code}.png` // Handle locale change const changeLocale = async (code: string) => { @@ -34,14 +32,19 @@ const changeLocale = async (code: string) => { class="language-btn" :aria-label="$t('language.label')" > - {{ currentLocaleDisplay }} + + - + {{ $t('language.label') }} @@ -56,7 +59,11 @@ const changeLocale = async (code: string) => { class="language-item" > - {{ loc.code === 'th' ? 'πŸ‡ΉπŸ‡­' : 'πŸ‡ΊπŸ‡Έ' }} + @@ -81,21 +88,33 @@ const changeLocale = async (code: string) => { .language-btn { width: 40px; height: 40px; - background: linear-gradient(135deg, var(--primary) 0%, #2f5ed7 100%); - color: white; + background: #ffffff; + border: 2px solid var(--border-color); transition: all 0.3s ease; - box-shadow: 0 2px 8px rgba(75, 130, 247, 0.3); + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1); + overflow: hidden; + padding: 0; } .language-btn:hover { transform: scale(1.05); - box-shadow: 0 4px 12px rgba(75, 130, 247, 0.4); + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); + border-color: var(--primary); } -.language-text { - font-size: 12px; - font-weight: 800; - letter-spacing: 0.5px; +.flag-icon { + width: 28px; + height: 28px; + object-fit: cover; + border-radius: 50%; +} + +.flag-icon-menu { + width: 28px; + height: 20px; + object-fit: cover; + border-radius: 4px; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); } .language-item { @@ -120,12 +139,14 @@ const changeLocale = async (code: string) => { } :global(.dark) .language-btn { - background: linear-gradient(135deg, #3b82f6 0%, #1e40af 100%); - box-shadow: 0 2px 8px rgba(59, 130, 246, 0.4); + background: #1e293b; + border-color: rgba(255, 255, 255, 0.15); + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.3); } :global(.dark) .language-btn:hover { - box-shadow: 0 4px 12px rgba(59, 130, 246, 0.5); + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.4); + border-color: var(--primary); } :global(.dark) :deep(.language-menu) { diff --git a/Frontend-Learner/public/flags/en.png b/Frontend-Learner/public/flags/en.png new file mode 100644 index 0000000000000000000000000000000000000000..fbdbf48961ee1eea36f42f3348e84a356e4e999e GIT binary patch literal 23924 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 PKxGV`u6{1-oD!Mk44ofy`glX(f`u%tWs zIx;Y9?C1WI$O=+Z;1OBOz`%DHgc*JV1_lKu1||ju7Y+voh6WBs4h9AR#Zkp0BQ!b+=Uk6* z2PTAXj~Pc3#b~N0GSw&9*zJFA1uQf+$nz_VmMEh|=4b^nTAk9Qabei^dDd%S{yI=+ z(*UfdM%yc+tv6ztr#