Skip to content

Commit e72ffa2

Browse files
committed
wip(i18n): Improve lang switcher
1 parent a587bd0 commit e72ffa2

File tree

1 file changed

+36
-4
lines changed

1 file changed

+36
-4
lines changed
Lines changed: 36 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,46 @@
11
<script setup>
2+
import {
3+
DropdownMenu,
4+
DropdownMenuContent,
5+
DropdownMenuItem,
6+
DropdownMenuTrigger,
7+
} from '@/components/ui/dropdown-menu'
8+
29
const { locale, locales } = useI18n()
310
const switchLocalePath = useSwitchLocalePath()
411
512
const availableLocales = computed(() => {
6-
return locales.value.filter(i => i.code !== locale.value)
13+
return locales.value
14+
})
15+
16+
const getFlagEmoji = function (code) {
17+
const flags = {
18+
en: '🇬🇧',
19+
fr: '🇫🇷',
20+
}
21+
return flags[code] || '🏳️'
22+
}
23+
24+
const getCurrentLocaleName = computed(() => {
25+
const current = locales.value.find(l => l.code === locale.value)
26+
return current ? `${getFlagEmoji(current.code)} ${current.name}` : ''
727
})
828
</script>
929

1030
<template>
11-
<NuxtLink v-for="locale in availableLocales" :key="locale.code" :to="switchLocalePath(locale.code)">
12-
{{ locale.name }}
13-
</NuxtLink>
31+
<DropdownMenu>
32+
<DropdownMenuTrigger class="outline-none">
33+
<span class="cursor-pointer border border-gray-300 rounded px-2 py-1 dark:border-gray-600 hover:bg-gray-100 dark:hover:bg-gray-800">{{ getCurrentLocaleName }}</span>
34+
</DropdownMenuTrigger>
35+
<DropdownMenuContent>
36+
<DropdownMenuItem
37+
v-for="loc in availableLocales"
38+
:key="loc.code"
39+
class="hover:bg-gray-100 dark:hover:bg-gray-800"
40+
@click="$router.push(switchLocalePath(loc.code))"
41+
>
42+
<span class="cursor-pointer text-gray-800 dark:text-gray-200 hover:text-gray-800 dark:hover:text-gray-200">{{ getFlagEmoji(loc.code) }} {{ loc.name }}</span>
43+
</DropdownMenuItem>
44+
</DropdownMenuContent>
45+
</DropdownMenu>
1446
</template>

0 commit comments

Comments
 (0)