Files
AstralRinth/apps/frontend/src/pages/settings/language.vue
Calum H. a903e46be9 feat: remove nuxt i18n for in house i18n for web (#5131)
* feat: remove nuxt i18n for in house

* cleanup: remove old nuxt/i18n patch

* prepr

---------

Co-authored-by: Prospector <6166773+Prospector@users.noreply.github.com>
2026-01-15 23:49:38 +00:00

81 lines
1.6 KiB
Vue

<script setup lang="ts">
import {
Admonition,
commonSettingsMessages,
injectI18n,
IntlFormatted,
LanguageSelector,
languageSelectorMessages,
LOCALES,
useVIntl,
} from '@modrinth/ui'
const { formatMessage } = useVIntl()
const { locale, setLocale } = injectI18n()
const platform = formatMessage(languageSelectorMessages.platformSite)
const $isChanging = ref(false)
async function onLocaleChange(newLocale: string) {
if (locale.value === newLocale) return
$isChanging.value = true
try {
await setLocale(newLocale)
} finally {
$isChanging.value = false
}
}
</script>
<template>
<div>
<section class="universal-card">
<h2 class="text-2xl">{{ formatMessage(commonSettingsMessages.language) }}</h2>
<Admonition type="warning">
{{ formatMessage(languageSelectorMessages.languageWarning, { platform }) }}
</Admonition>
<div class="card-description mt-4">
<IntlFormatted
:message-id="languageSelectorMessages.languagesDescription"
:values="{ platform }"
>
<template #~crowdin-link="{ children }">
<a href="https://translate.modrinth.com">
<component :is="() => children" />
</a>
</template>
</IntlFormatted>
</div>
<LanguageSelector
:current-locale="locale"
:locales="LOCALES"
:on-locale-change="onLocaleChange"
:is-changing="$isChanging"
/>
</section>
</div>
</template>
<style scoped lang="scss">
.card-description {
margin-bottom: calc(var(--spacing-card-sm) + var(--spacing-card-md));
a {
color: var(--color-link);
&:hover {
color: var(--color-link-hover);
}
&:active {
color: var(--color-link-active);
}
}
}
</style>