bundle-tools icon indicating copy to clipboard operation
bundle-tools copied to clipboard

vite-plugin-vue-i18n custom block messages aren't loaded

Open ldsenow opened this issue 3 years ago • 11 comments

Reporting a bug?

Hi guys,

I have been using custom blocks in sfc for a while.

I migrated from Vue 2 to 3 and Vue i18n from v8 to 9. I used vue cli and vue i18n loader for the custom block. Since the migration, i now use vue 3 + Vue i18n v9 + vite vite-plugin-vue-i18n.

I want to use the legacy api for i18n to minimize the page migration work. However, $t only picks up the global resources loaded from vite.config and my i18n setting below

export default defineConfig({
  plugins: [
    vue(),
    vueI18n({
      // if you want to use Vue I18n Legacy API, you need to set `compositionOnly: false`
      compositionOnly: false,
      include: resolve(__dirname, "./src/locales/**"),
    }),
  ],
});
import { createI18n } from "vue-i18n";
import messages from "@intlify/vite-plugin-vue-i18n/messages";

const i18n = createI18n({
  legacy: true, // you must set `false`, to use Composition API
  locale: 'en-US',
  fallbackLocale: 'en-US',
  messages,
});

The custom block doesnt seem to be loaded into the instance for some reason.

Is it a bug or not supported or I missed something?

Expected behavior

custom block messages should be loaded

Reproduction

see description above

Issue Package

vite-plugin-vue-i18n

System Info

System:
    OS: Windows 10 10.0.22598
    CPU: (8) x64 11th Gen Intel(R) Core(TM) i7-1185G7 @ 3.00GHz
    Memory: 10.05 GB / 31.71 GB
  Binaries:
    Node: 16.14.2 - C:\Program Files\nodejs\node.EXE
    npm: 8.5.5 - C:\Program Files\nodejs\npm.CMD
  Browsers:
    Edge: Spartan (44.22598.200.0), Chromium (101.0.1210.39)
    Internet Explorer: 11.0.22598.1

Screenshot

No response

Additional context

No response

Validations

  • [X] Read the Contributing Guidelines.
  • [X] Read the README
  • [X] Check that there isn't already an issue that reports the same bug to avoid creating a duplicate.
  • [X] Check that this is a concrete bug. For Q&A open a GitHub Discussion.

ldsenow avatar May 11 '22 01:05 ldsenow

I'm using vue-i18n-bridge with vite-plugin-vue-i18n in composition mode. Custom block messages aren't loaded either.

kingyue737 avatar Jul 06 '22 10:07 kingyue737

I tried to use custom block with vue3 in legacy mode, and it works,code below https://stackblitz.com/edit/vitejs-vite-7wz2pl?file=src/App.vue

But I don't konw how to use i18n like this with vue2, can anyone help me?

UI-Mario avatar Sep 25 '22 05:09 UI-Mario

Same problem here. I'm trying to progressively a big project to Vue 3 and trying to at least get vue-i18n to work with SFC blocks and Vite with Vue 2.7 while relying on global $t() function. Global messages coming from files are ok, but SFC blocks are not interpreted.

I've tried a lot of variations, including unplugin-vue and the bundle tools.

mmorainville avatar Oct 10 '22 08:10 mmorainville

Same with Nuxt3 + unplugin-vue-i18n

NexZhu avatar Nov 03 '22 11:11 NexZhu

Vue's context.messages doesn't include locales defined in SFCs

NexZhu avatar Nov 03 '22 11:11 NexZhu

Sorry I have not been able to reply for a while now.

I have been focused on nuxtjs/i18n for a while now. I recently released a nutxjs/i18n beta version of it and will be looking at an issue soon.

Pleases wait🙏

kazupon avatar Nov 03 '22 11:11 kazupon

Sorry I have not been able to reply for a while now.

I have been focused on nuxtjs/i18n for a while now. I recently released a nutxjs/i18n beta version of it and will be looking at an issue soon.

Pleases wait🙏

Thanks for the hard work. Btw, will nuxtjs/i18n work with this plugin? What's the benefits of using it over pure plugin/i18n.ts with this plugin in a Nuxt project?

NexZhu avatar Nov 03 '22 13:11 NexZhu

One year later, I am still experiencing this problem. Any progress? Anyone has found a workaround?

beda42 avatar Nov 03 '23 12:11 beda42

@kazupon any progress thanks ?

vAhyThe avatar Jan 23 '24 15:01 vAhyThe

I also encountered this problem and I solved it with the composable useI18n. The composable works with custom block messages, but the $t function does not.

<template>
<h1>{{ t('headline') }}</h1>
</template>

<i18n lang="json5">
{
  de: {
    headline: 'Überschrift'
  },
  en: {
    headline: 'Headline'
  },
}
</i18n>

<script lang="ts" setup>
import { useI18n } from 'vue-i18n';

const { t } = useI18n();
</script>

medialwerk avatar Jan 25 '24 21:01 medialwerk