Vue3全局配置国际化i18n,封装hook解决i18n警告

1. 安装包 

yarn add vue-i18n@next

2. 基础步骤

// locale/index.ts
import { createI18n } from "vue-i18n";
// locale/index.ts
// 导入全局英文配置对象
import en from './en-US'
import zh from './zh-CN'

// 默认读取本地存储语言设置
const defaultLocale = localStorage.getItem('locale') || 'en-US'

const i18n = createI18n({
  locale: defaultLocale,// 默认语言
  fallbackLocale: 'en-US',// 不存在默认则为英文
  allowComposition: true,// 允许组合式api
  messages: {
    'en-US': en, // 标识:配置对象
    'zh-CN': zh
  },
})
export default i18n
// main.ts
import { createApp } from 'vue' // 导入创建App实例
import App from './App.vue' // 导入App组件
import i18n from './locale' //引入国际化
const app = createApp(App) // 创建App实例 传入渲染组件
app.use(i18n)// 挂载国际化配置

3. 其他国际化配置对象引入全局英文配置文件

// locale/en-US.ts
import localeLogin from '@/views/login/locale/en-US'
export default {
  "navbar.action.locale": 'Switch to Englisth',
  ...localeLogin
}
// locale/zh-CN.ts
import localeLogin from '@/views/login/locale/zh-CN'
export default {
  "navbar.action.locale": '切换中文',
  ...localeLogin
}

4. 封装国际化处理hook

// hook/useLocale.ts
import { computed } from "vue";
import { useI18n } from "vue-i18n";
import { Message } from '@arco-design/web-vue'
export default function useLocale() {
  const i18n = useI18n();//实例化i18n
  const currentLocale = computed(() => {
    return i18n.locale.value // 固定写法 获取当前语言设置
  })
  // 切换语言
  const changeLocale = (value: string) => {
    i18n.locale.value = value;//赋值切换语言
    localStorage.setItem('locale', value);//修改本地存储
    Message.success(i18n.t('navbar.action.locale'));//提示信息
  }
  return {
    i18n,
    currentLocale,
    changeLocale
  }
}

5. 解决i18n警告

// vite.config.ts
export default defineConfig({
  resolve: {
    alias: [
      {
        find: 'vue-i18n',
        replacement: 'vue-i18n/dist/vue-i18n.cjs.js', //解决i8n警告
      },
    ]
  },
})

6. 使用方法

<script setup lang="ts"&gt;
import useLocale from '@/hooks/useLocale' // 国际化hook
const {
  i18n: { t }, // 解构实例用具t 访问语言变量
  currentLocale, //当前国际化
  changeLocale, // 修改国际化
} = useLocale()
// 切换语言
const switchLang = () => {
  if (currentLocale.value == 'zh-CN') {
    changeLocale('en-US')
  } else {
    changeLocale('zh-CN')
  }
}
</script>
<template>
   <button @click="switchLang">
        {{ t('login-switch') }}
   </button>
</template>

7. 总结

原文地址:https://blog.csdn.net/qq_43331318/article/details/125363838

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_36940.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注