Skip to content

Commit 1aa75bf

Browse files
committed
remove hardcoded locales
1 parent 2020fdf commit 1aa75bf

File tree

1 file changed

+12
-10
lines changed

1 file changed

+12
-10
lines changed

resources/js/components/LanguageSwitcher.vue

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,22 @@ withDefaults(defineProps<Props>(), {
1717
display: 'dropdown',
1818
});
1919
20-
const { locale, t } = useI18n();
20+
const { t, locale } = useI18n();
2121
const page = usePage();
2222
const { initializeLocale } = useLocale();
2323
24-
const languages = [
25-
{ code: 'en', name: 'English', flag: '🇺🇸' },
26-
{ code: 'fr', name: 'Français', flag: '🇫🇷' },
27-
];
24+
const availableLocales = page.props.locale.available;
2825
29-
const currentLanguage = computed(() => languages.find((lang) => lang.code === locale.value) || languages[0]);
26+
const capitalize = (s: string) => (s ? s.charAt(0).toUpperCase() + s.slice(1) : s);
27+
28+
const languages = availableLocales.map((code: string) => {
29+
const name = new Intl.DisplayNames([code], { type: 'language' }).of(code);
30+
return { code, name: capitalize(name || code) };
31+
});
32+
33+
const currentLanguage = computed(() => {
34+
return languages.find((lang) => lang.code === locale.value) || languages[0];
35+
});
3036
3137
watch(locale, async (newLocale, oldLocale) => {
3238
if (newLocale !== oldLocale && oldLocale) {
@@ -77,7 +83,6 @@ const switchLanguage = async (langCode: string) => {
7783
@click="switchLanguage(language.code)"
7884
:class="{ 'bg-accent': language.code === currentLanguage.code }"
7985
>
80-
<span class="mr-2">{{ language.flag }}</span>
8186
{{ language.name }}
8287
</DropdownMenuItem>
8388
</DropdownMenuContent>
@@ -88,15 +93,13 @@ const switchLanguage = async (langCode: string) => {
8893
<SelectTrigger class="w-[180px]">
8994
<SelectValue class="text-foreground">
9095
<span class="flex items-center gap-2">
91-
<span>{{ currentLanguage.flag }}</span>
9296
<span class="text-foreground">{{ currentLanguage.name }}</span>
9397
</span>
9498
</SelectValue>
9599
</SelectTrigger>
96100
<SelectContent>
97101
<SelectItem v-for="language in languages" :key="language.code" :value="language.code">
98102
<span class="flex items-center gap-2">
99-
<span>{{ language.flag }}</span>
100103
<span>{{ language.name }}</span>
101104
</span>
102105
</SelectItem>
@@ -123,7 +126,6 @@ const switchLanguage = async (langCode: string) => {
123126
variant="outline"
124127
:class="['justify-start', language.code === currentLanguage.code ? 'border-primary bg-primary/5' : 'hover:bg-muted']"
125128
>
126-
<span class="mr-3 text-lg">{{ language.flag }}</span>
127129
<div class="flex w-full items-center justify-between">
128130
<span class="font-medium">{{ language.name }}</span>
129131
<span v-if="language.code === currentLanguage.code" class="text-xs text-muted-foreground">

0 commit comments

Comments
 (0)