Javascript Vue 3+;vue-i18n-next:我做错了什么?

Javascript Vue 3+;vue-i18n-next:我做错了什么?,javascript,vue.js,vue-cli,vuejs3,vue-i18n,Javascript,Vue.js,Vue Cli,Vuejs3,Vue I18n,我已经启动了一个VUE3项目(目前只不过是一个带有TypeScript的样板文件),并尝试将i18n添加到其中 就我所知,vue-i18n不能与vue 3正常工作;但是vue-i18n-next应该 这是我的主要任务 import { createApp } from "vue"; import "./registerServiceWorker"; import router from "./router"; import store

我已经启动了一个VUE3项目(目前只不过是一个带有TypeScript的样板文件),并尝试将i18n添加到其中

就我所知,vue-i18n不能与vue 3正常工作;但是vue-i18n-next应该

这是我的主要任务

import { createApp } from "vue";
import "./registerServiceWorker";
import router from "./router";
import store from "./store";
import { createI18n } from 'vue-i18n'
import App from "./App.vue";

//import en from "./locale/en.json"
//import ru from "./locale/ru.json"

const messages = {
    en: {
        message: {
            hello: 'hello world'
        }
    },
    ru: {
        message: {
            hello: 'Таки здравствуйте'
        }
    }
}

const i18n = createI18n({
    locale: 'ru',
/*    messages: {
        en,
        ru
        },*/
    messages,
    fallbackLocale: 'en'
})

const app = createApp(App)
    .use(store)
    .use(router)
    .use(i18n);
    .mount("#app");
这是我的App.vue

<template>
  <div id="nav">
    <router-link to="/">Home</router-link> |
    <router-link to="/about">About</router-link>
  </div>
  <div>{{ $t("message.hello") }}</div>
  <router-view />
</template>
事实上,我已经找到并安装了@intlify/message编译器——但我对如何使用它没有任何想法

我的webpack.config.js取自示例

const path = require("path");
module.exports = {
  rules: [
    {
      test: /\.(json5?|ya?ml)$/, // target json, json5, yaml and yml files
      type: "javascript/auto",
      loader: "@intlify/vue-i18n-loader",
      include: [
        // Use `Rule.include` to specify the files of locale messages to be pre-compiled
        path.resolve(__dirname, "./src/locale"),
      ],
    },
  ],
};
我的vue.config.js看起来非常简单

module.exports = {
  chainWebpack: (config) => {
    config.plugin("html").tap((args) => {
      args[0].template = "./resources/index.html";
      return args;
    });
  },
  configureWebpack: {
    devServer: {
      watchOptions: {
        ignored: ["/node_modules/", "/public/", "**/.#*"],
      },
    },
  },
  parallel: true,
  devServer: {
    disableHostCheck: true,
    public: process.env.DEV_PUBLIC ?? "mlb.ru",
    port: process.env.DEV_PORT ?? 8080,
  },
};
我甚至发现我的消息已经被编译成了包


也许任何人在vue-18n-next或其他针对vue 3的i18n解决方案方面都取得了成功?

与vue本身一样,i18n软件包也有不同的版本。与Vue一样,它们有一个有运行时编译器的版本,也有一个没有运行时编译器的版本。发件人:

vue-i18n.esm bundler.js
:包括运行时编译器。如果您正在使用绑定器,但仍然需要编译区域设置消息(例如,通过内联JavaScript字符串编译模板),请使用此选项

您收到的警告显然告诉您需要此编译器版本。文档对此不太清楚,但您需要将导入指向包的运行时编译器版本,如下所示:

从“vue-i18n/dist/vue-i18n.esm bundler.js”导入{createI18n};

回购和单据已移动:

我已经尝试过一个非常类似的代码,从“vue-i18n”导入{createI18n}应该可以为您工作,只要您在vue中-i18n@9.0.0-beta.16

... [code]

import { createI18n } from 'vue-i18n'

const messages = {
  es: {
    message: {
      value: 'Hola Español.',
    },
  },
  en: {
    message: {
      value: 'Hello English.',
    },
  },
}

const i18n = createI18n({
  locale: 'es',
  messages,
})

app
  .use(i18n)
  .mount('#app')

[code] ...

当然可以。我只希望有一天它会被记录下来。。。
... [code]

import { createI18n } from 'vue-i18n'

const messages = {
  es: {
    message: {
      value: 'Hola Español.',
    },
  },
  en: {
    message: {
      value: 'Hello English.',
    },
  },
}

const i18n = createI18n({
  locale: 'es',
  messages,
})

app
  .use(i18n)
  .mount('#app')

[code] ...