使用i18n国际化方案

使用i18n国际化方案

  1. 创建单独国际化文件夹 locales
文件夹结构
locales ->
 common -> 存放所有的语言文件
  en.json
  zh.json
 index.ts -> 国际化方法封装
  1. 国际化index.ts文件
import type { App } from 'vue'
import { createI18n } from "vue-i18n";
import zh from './common/zh.json'
import en from './common/en.json'

const messages = {
  en: { ...en },
  zh: { ...zh }
}

export const getlang = () => {
  const url = new URL(window.location as any)
  let lang = url.searchParams.get('lang')
  if (!lang) {
    const langDefault = navigator?.languages[1] || 'zh'
    lang = sessionStorage.getItem('lang') || langDefault
  }
  sessionStorage.setItem('lang', lang)
  return lang
}

export const i18n = createI18n({
  legacy: false, // 是否使用传统API模式,设为false指定使用Composition API模式(vue3设为false)
  globalInjection: true, // 为每个组件注入全局属性和函数
  silentTranslationWarn: true, // 抑制本地化失败警告
  silentFallbackWarn: true, // 抑制回退失败警告
  locale: getlang(), // 语言
  fallbackLocale: 'zh', // 回退语言
  messages, // 语言包(配置语言包的教程在下方)
})

export const $t: any = i18n.global.t

export const i18Key = (key: string) => key

export const initI18n = (app: App) => {
  app.use(i18n)
}

  1. main.ts

import { createApp } from 'vue'
import App from './App.vue'
import { initRouter } from '@/router'
import { initPinia } from '@/stores'
import { initI18n } from '@/locales'
import './assets/main.css'

const app = createApp(App)
initPinia(app)
initI18n(app)
initRouter(app)
app.mount('#app')

  1. 组件中使用
// 模板中直接使用$t
<div>{{ $t('common.home') }}</div>

// 其他
import { $t } from '@/locales'
$t('common.test')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值