傻瓜式uni-app/h5/app 中接入i18n国际化(切换语言)

难点:之前没接触过国际化,也没整过切换语言,以为类似翻译呢,结果不是

知识点:得用到vue-i18n这个第三方,接下来一起看看如何傻瓜式接入

先看uni官方的文档|点击这里,查看官方文档----vue界面和js内容的国际化

1.先下载对应的插件或者使用插件市场引进来,都行

pnpm install -D vue-i18n

2.main.js里引入插件

let i18nConfig = {
  locale: uni.getLocale(),
  messages
}

import VueI18n from 'vue-i18n'
// 这个是语言包,放置各种语言的json文件
import messages from './locale/index'



Vue.use(VueI18n)
const i18n = new VueI18n(i18nConfig)

const app = new Vue({
  i18n,
  ...App
})

3.设置默认语言

onShow: function() {
  if (!uni.getLocale()) {
    // 这里的zh-Hans要和你配置的json名字对上
    uni.setLocale("zh-Hans");
  }
}

4.创建你要切换的语言包,在项目根目录下,和page同级创建文件夹locale

        4.1 locale下创建文件index.js

import en from './en.json'
import zhHans from './zh-Hans.json'
import zhHant from './zh-Hant.json'
import thai from './thai.json'
import korean from './korean.json'
import russian from './russian.json'
import japanese from './japanese.json'
export default {
  en,
  'zh-Hans': zhHans,
  'zh-Hant': zhHant,
  japanese: japanese,
  russian: russian,
  korean: korean,
  thai: thai,
}

        4.2 在locale下创建各种json语言文件比如japanese.json和korean.json

        这里如果产品或者甲方不提供语言包,推荐一下,可以使用简体中文的直接让chatgpt翻译生成,好用的一批

{
  "password.new-password": "新しいパスワード",
  "password.old-password": "古いパスワード",
  "password.input-new-password": "新しいパスワードを入力してください",
  "password.input-new-password2": "新しいパスワードを再度入力してください",
  "password.input-old-password": "古いパスワードを入力してください",
  "password.confirm-password": "パスワードを確認",
  "password.set-capital-password": "資金パスワードを設定",
  "password.set-login-password": "ログインパスワードを設定",
  "public.confirm": "확인"
}
{
  "password.new-password": "새 비밀번호",
  "password.old-password": "이전 비밀번호",
  "password.input-new-password": "새 비밀번호 입력",
  "password.input-new-password2": "새 비밀번호 다시 입력",
  "password.input-old-password": "이전 비밀번호 입력",
  "password.confirm-password": "비밀번호 확인",
  "password.set-capital-password": "자금 비밀번호 설정",
  "password.set-login-password": "로그인 비밀번호 설정",
  "public.confirm": "確認"
}

5.如何切换语言和使用,我使用了uview的ui,你们可以自己改成自己的ui

用法就是$t('public.confirm')

<template>
  <view class="lang">
    <u-cell-group>
      <u-cell :arrow="false" v-for="(val, index) in langList" @click="selectLangIndex = index" :key="index"
        :title="val.title">
        <u-icon v-if="selectLangIndex == index" slot="right-icon" size="40rpx" name="checkbox-mark"></u-icon>
      </u-cell>
    </u-cell-group>
    <u-button v-if="!isWx" type="primary" :text="$t('public.confirm')" shape="circle" @click="switchLang">
    </u-button>
  </view>
</template>

<script>
  export default {
    data() {
      return {
        langList: [{
          title: "简体中文",
          name: "zh-Hans",
        }, {
          title: "繁體中文",
          name: "zh-Hant",
        }, {
          title: "English",
          name: "en",
        }, {
          title: "Русский",
          name: "russian",
        }, {
          title: "ภาษาไทย",
          name: "thai",
        }, {
          title: "日本語",
          name: "japanese",
        }, {
          title: "한국어",
          name: "korean",
        }],
        selectLangIndex: 0,
      };
    },
    mounted() {
      console.log(uni.getLocale());
      this.selectLangIndex = this.langList.findIndex(item => item.name === uni.getLocale())
      this.selectLangIndex = this.selectLangIndex <= 0 ? 0 : this.selectLangIndex;
      uni.setLocale(this.langList[this.selectLangIndex].name);
    },
    methods: {
      switchLang() {
        let code = this.langList[this.selectLangIndex].name;
        uni.setLocale(code);
        this.$i18n.locale = code;
      }
    }

  }
</script>

<style lang="scss">
  .lang {
    >.u-button {
      margin-top: 30rpx;
      box-shadow: 0 5rpx 10rpx 1rpx $uni-color-primary;
      width: 90%;
    }
  }
</style>

到这里国际化就告一断落了,但是还有uni自带的一些也需要国际化,比如uni.showToast的提示文案

6.接着在locale下创建对应的json,比如uni-app.xxx.json,这里只要配置上即可,不用单独再引入

比如uni-app.japanese.json,japanese要和你上面4.1中创建的对应的语言的json名字对上

{
  "common": {
    "uni.app.quit": "もう一度押すと、アプリケーションが終了します",
    "uni.async.error": "サーバーへの接続がタイムアウトしました。画面をクリックして再試行してください",
    "uni.showActionSheet.cancel": "キャンセル",
    "uni.showToast.unpaired": "使用するには、showToastとhideToastをペアにする必要があることに注意してください",
    "uni.showLoading.unpaired": "使用するには、showLoadingとhideLoadingをペアにする必要があることに注意してください",
    "uni.showModal.cancel": "キャンセル",
    "uni.showModal.confirm": "OK",
    "uni.chooseImage.cancel": "キャンセル",
    "uni.chooseImage.sourceType.album": "アルバムから選択",
    "uni.chooseImage.sourceType.camera": "カメラ",
    "uni.chooseVideo.cancel": "キャンセル",
    "uni.chooseVideo.sourceType.album": "アルバムから選択",
    "uni.chooseVideo.sourceType.camera": "カメラ",
    "uni.previewImage.cancel": "キャンセル",
    "uni.previewImage.button.save": "画像を保存",
    "uni.previewImage.save.success": "画像をアルバムに正常に保存します",
    "uni.previewImage.save.fail": "画像をアルバムに保存できませんでした",
    "uni.setClipboardData.success": "コンテンツがコピーされました",
    "uni.scanCode.title": "スキャンコード",
    "uni.scanCode.album": "アルバム",
    "uni.scanCode.fail": "認識に失敗しました",
    "uni.scanCode.flash.on": "タッチして点灯",
    "uni.scanCode.flash.off": "タップして閉じる",
    "uni.startSoterAuthentication.authContent": "指紋認識...",
    "uni.picker.done": "完了",
    "uni.picker.cancel": "キャンセル",
    "uni.video.danmu": "「弾幕」",
    "uni.video.volume": "ボリューム",
    "uni.button.feedback.title": "質問のフィードバック",
    "uni.button.feedback.send": "送信"
  },
  "ios": {},
  "android": {}
}

结语:到这里就基本完成了,接着就快乐的开发吧~~~如有疑问可以评论或者私信我

  • 10
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

咸喵小宇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值