Open Vectrex opened 2 years ago
Fixed it (partially): The example here https://vue-i18n.intlify.dev/guide/#html is erroneous. It has to be
const messages = {
en: {
hello: 'hello world'
},
ja: {
hello: 'こんにちは、世界'
},
de: {
hello: 'hi!'
},
}
/*
doesn't work
const messages = {
en: {
message: {
hello: 'hello world'
}
},
ja: {
message: {
hello: 'こんにちは、世界'
}
},
de: {
message: {
hello: 'hi!'
}
}
}
*/
const i18n = createI18n({
globalInjection: true,
locale: 'ja',
fallbackLocale: 'en',
legacy: false,
messages
})
However, the i18n section in an SFC is still ignored:
App.vue
<template>
<div class="flex justify-center text-3xl py-16">{{ $t('hello') }}</div>
</template>
<script>
export default {}
</script>
<i18n>
{
"de": {
"hello": "foo"
},
"en": {
"hello": "bar"
},
"ja": {
"hello": "baz"
}
}
</i18n>
Results in こんにちは、世界
on the screen From my understanding the SFC configuration should always override the global setting. Upon removing the messages obiect in the index.js We are back to
[intlify] Not found 'hello' key in 'ja' locale messages.
I haven't tried mixing global and custom blocks, but using only custom blocks is ok for me. https://github.com/intlify/bundle-tools/issues/120#issuecomment-1257126108
I changed 2 things to get rid of this error: 1.Use locale instead of inheritLocale in the options object. navigator.language seems to be good solution to get users agent language.
app.js
let userLocale = 'en' if (navigator.language === 'pl') { userLocale = 'pl' } const i18n = createI18n({ legacy: 'composition', inheritLocale: true,// must be removed globalInjection: true, locale: userLocale,// manually set locale messages: { en: en, pl: pl, } })
vite.config.js
vueI18n({ // This line must be removed. include: resolve(dirname(fileURLToPath(import.meta.url)), 'resources/js/locale/**'), }),
What if I don't have messages beforehand and get them from API?
Setting up vite with vite-plugin-vue-i18n according to the documentation followed by
npm run dev
and navigating tolocalhost:<port>
Will always display "message" and the console tells meBoth in a "full-scale" application and the minimal example below.
Expected behavior
Localized message string.
Reproduction
package.json
vite.config.js
index.js
App.vue
Issue Package
vite-plugin-vue-i18n
System Info
Screenshot
No response
Additional context
No response
Validations