vue3+ts使用vue-i18n

vue3+ts使用vue-i18n

1、安装插件

复制代码
npm install --save vue-i18n

yarn add vue-i18n

2、配置文件

locale/index.ts

ts 复制代码
import { createI18n } from 'vue-i18n'
import zhCN from './lang/zh-CN'
import enUS from './lang/en-US'

export const LOCALE_OPTIONS = [
  { label: '中文', value: 'zh-CN' },
  { label: 'English', value: 'en-US' },
];
const defaultLocale = localStorage.getItem('locale') || 'zh-CN';
const i18n = createI18n({
  locale: defaultLocale,
  legacy: false, // 解决控制台报错 Uncaught SyntaxError: Not available in legacy mode
  messages: {
    'zh-CN': zhCN,
    'en-US': enUS,
  }
})

export default i18n

locale/lang/zh-CN.ts

ts 复制代码
export default {
  'menu.list': '列表',
  'menu.message': '信息',
}

locale/lang/en-US.ts

ts 复制代码
export default {
  'menu.list': 'List',
  'menu.message': 'Message'
}

3、在main.ts引入

main.ts

ts 复制代码
import i18n from './locale'

// 在app.mount之前
app.use(i18n)

4、在页面中使用

html 复制代码
<template>
  <div>
    <ul>
      <li
        v-for="(item, index) in locales"
        :key="index"
        @click="changeLocale(item.value)"
      >{{ item.label }}</li>
    </ul>
    <p>{{ $t('menu.list') }}</p>
    <p>{{ $t('menu.message') }}</p>
    <p></p>
  </div>
</template>

<script setup lang="ts">
import { LOCALE_OPTIONS } from '@/locale'
import { useI18n } from 'vue-i18n'

const locales = [
  ...LOCALE_OPTIONS
]

const i18n = useI18n()
function changeLocale(value: string) {
  i18n.locale.value = value;
  localStorage.setItem('locale', value)
}
</script>

5、解决控制台报错/警告

5.1、需要配置全局变量

  • 警告信息

    You are running the esm-bundler build of vue-i18n. It is recommended to configure your bundler to explicitly replace feature flag globals with boolean literals to get proper tree-shaking in the final bundle.

  • 解决方案

vue.config.js

js 复制代码
const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
  chainWebpack: (config) => {
    config.resolve.alias
    .set('vue-i18n', 'vue-i18n/dist/vue-i18n.cjs.js')
  },
})

5.2、遗留模式报错

  • 报错信息

    Uncaught SyntaxError: Not available in legacy mode

  • 解决方案

ts 复制代码
import { createI18n } from 'vue-i18n'

const i18n = createI18n({
  ...
  legacy: false, // 解决控制台报错 Uncaught SyntaxError: Not available in legacy mode
  ...
})
相关推荐
自学it的攻城狮8 分钟前
elpis-core ,koa实现的系统底座, 沉淀80% 的通用能力,剩下20% 用于定制化开发
前端
CappuccinoRose1 小时前
模块化体系
前端·import·export·es modules
AIDANHANG1 小时前
放开靠时间戳对日志前先核请求ID跨服务传播与采样关联
前端·人工智能
Buke..2 小时前
【APP 逆向】哔哩哔哩 sign 参数逆向(下):OLLVM 混淆还原 sign 算法
java·javascript·爬虫·python·算法
半生过往3 小时前
前端学 Java 课程笔记
java·前端·笔记
广州华水科技3 小时前
2026年单北斗GNSS变形监测系统推荐,破解水库安全监测难题
前端
独爱香菜4 小时前
Next.js 15 + Cloudflare Workers 实战:零中间件多语言 SEO 站点架构
前端
计算机魔术师4 小时前
DeepSeek、Qwen3比肩GPT-5,本地跑大模型的时代来了
前端
xcyxiner4 小时前
flutter wsl2安装记录(使用宿主机虚拟机)
前端·flutter
前端炒粉4 小时前
长会话虚拟滚动与渲染优化
前端·javascript·vue.js