前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >nuxt + element-ui +vue+ nuxt-i18n国际化

nuxt + element-ui +vue+ nuxt-i18n国际化

作者头像
用户2323866
修改2021-06-25 10:13:46
1.7K0
修改2021-06-25 10:13:46
举报
文章被收录于专栏:技术派

这里以中英文切换为例:

1. 安装 nuxt-i18n npm install nuxt-i18n -S

2.新建lang 文件夹,放置语言包

zh.js

代码语言:javascript
复制
const zh = {
index: '首页',
list:'列表'
}
export default zh

en.js

代码语言:javascript
复制
const en = {
index: 'Home',
list:'list'
}
export default en

3.新建i18n.js 配置文件

代码语言:javascript
复制
import zh from './lang/zh'
import en from './lang/en'
 
// 加载element-ui语言包
import enLocale from 'element-ui/lib/locale/lang/en'
import zhLocale from 'element-ui/lib/locale/lang/zh-CN'
 
const mergeZH = Object.assign(zhLocale.default, zh);
const mergeEN = Object.assign(enLocale.default, en);
 
const I18N = {
  locales: [{
      code: 'en',
      iso: 'en-US',
      name: 'English'
    },
    {
      code: 'zh',
      iso: 'zh-ZH',
      name: '中文'
    }
  ],
  defaultLocale: 'zh',
  vueI18n: {
    fallbackLocale: 'zh',
    messages: {
      en: mergeEN,
      zh: mergeZH
    }
  }
}
 
export default I18N

4.添加中间件:lang.js,切换语言时,更改路由,同时更新store中语言类型

代码语言:javascript
复制
import getCookie from '@/config/get-cookie'
 
export default function ({store, route, redirect, req}) {
  const {lang} = getCookie(req)
  if (lang) {
    store.commit('setLang', lang)
  }
  const routePath = route.path
  if (store.state.lang === 'en' && routePath.indexOf(`/${store.state.lang}/`) === -1) {
    console.log('redirect')
    return redirect({path: `/${store.state.lang}${routePath}`, query: route.query})
  }
}

4. store中添加mutaion:

代码语言:javascript
复制
setLang(state, lang) {
        state.lang = lang
      }

5.在nuxt.config.js中配置module

代码语言:javascript
复制
import I18N from './config/i18n'
 
module.exports = {
 
  modules: [
    ['nuxt-i18n', I18N],
  ]
 
}

6. plugins/element-ui.js

代码语言:javascript
复制
import Vue from 'vue'
import Element from 'element-ui/lib/element-ui.common'
export default ({
  app
}) => {
  Vue.use(Element, {
    i18n: (key, value) => app.i18n.t(key, value)
  })
}

7.切换语言组件

代码语言:javascript
复制
<template>
  <span class="lang-switcher">
    <nuxt-link v-for="(locale, i) in showLocales" :key="i" :to="switchLocalePath(locale.code)">
      <span @click="handleChangeLang(locale.code)">点击切换{{ locale.name }}</span>
    </nuxt-link>
  </span>
</template>
 
<script>
const Cookie = process.client ? require("js-cookie") : undefined;
export default {
  name: "LangSwitcher",
  computed: {
    showLocales() {
      return this.$i18n.locales.filter(
        locale => locale.code !== this.$i18n.locale
      );
    }
  },
  methods: {
    handleChangeLang(lang) {
      this.$store.commit("setLang", lang);
      Cookie.set("lang", lang);
    }
  }
};
</script>

demo参考:https://github.com/liuzhumin/nuxt-demo.git

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
消息队列 TDMQ
消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档