vue3 语言国际化 vue-i18n

46 篇文章 6 订阅

vue3 + vite&webpack + 组合式Api开发;
vue-i18n 相关配置;
vue-i18n 安装、使用案例、教程、setup Api;


1、安装 vue-i18n,版本需 9.x 以上!

npm install vue-i18n@9

2、vue-i18n 相关配置、引入方式;

// main.ts
import { createApp,h } from 'vue'
import vueI18n from "@/i18n/index";
const app = createApp(App)
app.use(vueI18n)
// i18n/index.ts
import { createI18n, useI18n } from 'vue-i18n'
import en from './en.js'
import zh from './zh.js'

export default createI18n({
  // 默认语言
  locale: 'zh',

  legacy: false, // 想要同时能在setup语法糖、组合式API相关文件上使用,该项必须设置为 false。  固定false就行了,都vue3了,还想啥呢。。

  // 是否关闭控制台警告
  silentFallbackWarn: false,

  // 配置数字 格式; 用法: $n(1000, 'currency')
  numberFormats: {
    'zh': {
      currency: {
        style: 'currency', currency: 'USD', notation: 'standard'
      }
    },
    'en': {
      currency: {
        style: 'currency', currency: 'JPY', useGrouping: true, currencyDisplay: 'symbol'
      }
    }
  },

  // 设置语言环境
  messages: {
    'zh': zh,
    'en': en,
  },

  // 设置后备语言,当 locale 默认语言没数据时,从该数组内 按顺序从头到尾,在对应的 语言包 里找
  fallbackLocale: [ 'zh', 'en' ],
})
// i18n/zh.js
export default {
  "header": {
      "chat": "聊天"
  },
  animations: {
    lily: '终将成为你',
    slot1: '{c} 蒜', // 命名插入值 写法
    hello: '{0} world {1}', // 数组写法
    repeat: '@:animations.lily <重复的', // 文本引用

    // Modifier 修饰符  > 还可自定义修饰符规则,此处不做介绍,需要用到再去看文档
    sample1: 'liljiahui niu bi',
    test1: '@.upper:animations.sample1  全部 大写', // 全部 大写
    test2: '@.lower:animations.sample1  全部 小写', // 全部 小写
    test3: '@.capitalize:animations.sample1  首字母 大写', // 首字母 大写

    html1: '你好 <span>span标签</span> world', // html 结构

    // vue3 版的,不再需要使用 $tc(), 已经集成到 t() 和 $t() 
    car: '一个小车 | 多个车车',  // 只有2个时候, 不是单数1的,其他统统转译为复数 !
    apple: 'no apples | one apple | {count} apples', // 该声明方法 需保证声明顺序   无 | 单数 | 复数

    onlyZH: '默认语言有的,其他语言没有,则切换语言后,该内容不会变动',
    // onlyEN: '纯注释,写在这里方便当文档看'   //<> 当默认的zh 没有,则使用设置的 其他语言
  }
}
// i18n/en.js
export default {
  "header": {
      "chat": "chat"
  },
  animations: {
    lily: 'Yagate Kimi ni Naru',
    slot1: '{c} recoil', // 命名插入值 写法
    hello: '{1} world {0}', // 数组写法
    repeat: '@:animations.lily', // 文本引用

    // Modifier 修饰符
    sample1: 'lil JIA hui niu bi',
    test1: '@.upper:animations.sample1  ceshi', 
    test2: '@.lower:animations.sample1  ceshi',
    test3: '@.capitalize:animations.sample1  ceshi',

    html1: 'hello <span>span标签</span> world', // html 结构

    car: 'car | cars',
    apple: 'no apples | one apple | {count} apples',

    // onlyZH: '单纯的注释,无意义,不用管',
    onlyEN: 'en - 中文没有,英文有的,设置后备语言功能' // 当默认的zh 没有,则使用设置的 其他语言
  }
}

3、在组件中使用

<template>
  <div>
    <el-button plain  @click="setLang">切换语言</el-button>
    <el-button type="danger" plain  @click="$router.back()">返回</el-button>
  </div>
  <div>
    {{ $t('header.chat') }}
  </div>
  <div>
    {{ $t('animations.lily') }}
  </div>
  <div>
    {{ $t('animations.slot1', { c: '石'}) }}
  </div>
  <div>
    {{ $t('animations.hello', ['hello','sb2']) }}
  </div>
  <div>
    {{ $t('animations.repeat') }}
  </div>
  <div>
    {{ $t('animations.test1') }}
  </div>
  <div>
    {{ $t('animations.test2') }}
  </div>
  <div>
    {{ $t('animations.test3') }}
  </div>
  <div v-html="$t('animations.html1')"></div>
  <div>
    {{ $t('animations.car',0) }} 》
    {{ $t('animations.car',1) }} 》
    {{ $t('animations.car',2) }} 》
  </div>
  <div>
    {{ $t('animations.apple', 0) }} 》
    {{ $t('animations.apple', 1) }} 》
    {{ t('animations.apple', 66) }} 》: 该写法可直接传入数字,或者照旧对象写法 {count: 4}
    <p>{{ t('animations.apple', {count: '第三个参数指定 无和单复数,该对象则为命名插入值 写法'}, 110) }}</p>
  </div>
  <div>
    {{ $n(10000, 'currency') }}
  </div>
  <div>
    {{ $t('animations.onlyZH') }} -- onlyZH
  </div>
  <div>
    {{ $t('animations.onlyEN') }} -- onlyEN
  </div>
</template>

<script lang="ts" setup>
import { useI18n } from "vue-i18n";
const { locale, t } = useI18n();

let lang = 'zh'
function setLang() {
  locale.value = lang  == 'zh' ? 'en' : 'zh' // 更改语言!
  lang = lang == 'zh' ? 'en' : 'zh'
}

</script>

<style lang="less" scoped>
  
</style>


此文章质量较低,请凑够行数?

此文章质量较低,请凑够行数?

此文章质量较低,请凑够行数?

此文章质量较低,请凑够行数?

此文章质量较低,请凑够行数?

此文章质量较低,请凑够行数?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值