Nuxt.js国际化的前提是,已经使用脚手架工具搭建好了Nuxt.js的开发环境。

我使用的环境是nuxt@2.3 + vuetify@1.4 + vue-i18n@7.3

1. 先安装vue-i18n

  1. npm install --save vue-i18n

2. 更新store文件

在@/store/index.js文件中,修改添加如下代码:

  1. export const state = () => ({
  2. locales: ['en-US', 'zh-CN'],
  3. locale: 'en-US'
  4. })
  5. export const mutations = {
  6. SET_LANG(state, locale) {
  7. if (state.locales.indexOf(locale) !== -1) {
  8. state.locale = locale
  9. }
  10. }
  11. }

注意,是mutations对象下的SET_LANG函数

3. 更新plugins文件

在此目录下,添加文件:i18n.js

  1. import Vue from 'vue'
  2. import VueI18n from 'vue-i18n'
  3. Vue.use(VueI18n)
  4. export default ({ app, store }) => {
  5. // Set i18n instance on app
  6. // This way we can use it in middleware and pages asyncData/fetch
  7. app.i18n = new VueI18n({
  8. locale: store.state.locale,
  9. fallbackLocale: 'en-US',
  10. messages: {
  11. 'en-US': require('@/locales/en-US.json'),
  12. 'zh-CN': require('@/locales/zh-CN.json')
  13. }
  14. })
  15. app.i18n.path = (link) => {
  16. // 如果是默认语言,就省略
  17. if (app.i18n.locale === app.i18n.fallbackLocale) {
  18. return `/${link}`
  19. }
  20. return `/${app.i18n.locale}/${link}`
  21. }
  22. }

messages对象的key要和state.locales中的相同

4. 更新middleware文件

在此目录下,添加文件: i18n.js

  1. export default function({ isHMR, app, store, route, params, error, redirect }) {
  2. const defaultLocale = app.i18n.fallbackLocale
  3. // If middleware is called from hot module replacement, ignore it
  4. if (isHMR) return
  5. // Get locale from params
  6. const locale = params.lang || defaultLocale
  7. if (store.state.locales.indexOf(locale) === -1) {
  8. return error({ message: 'This page could not be found.', statusCode: 404 })
  9. }
  10. // Set locale
  11. store.commit('SET_LANG', locale)
  12. app.i18n.locale = store.state.locale
  13. // If route is /<defaultLocale>/... -> redirect to /...
  14. if (locale === defaultLocale && route.fullPath.indexOf('/' + defaultLocale) === 0) {
  15. const toReplace = '^/' + defaultLocale + (route.fullPath.indexOf('/' + defaultLocale + '/') === 0 ? '/' : '')
  16. const re = new RegExp(toReplace)
  17. return redirect(
  18. route.fullPath.replace(re, '/')
  19. )
  20. }
  21. }

5. 增加locales文件夹

增加对应语言的对照json数据,en-US.json、zh-CN.json等等

其中,两个json数据,需要相同的key,才能翻译成功。

  1. {
  2. "links": {
  3. "home": "Home",
  4. "about": "About",
  5. "english": "English version",
  6. "chinese": "简体中文"
  7. },
  8. "home": {
  9. "title": "Welcome",
  10. "introduction": "This is an introduction in English."
  11. },
  12. "about": {
  13. "title": "About",
  14. "introduction": "This page is made to give you more informations."
  15. }
  16. }

6. 修改nuxt.config.js文件

修改或者增加如下对象:

  1. router: {
  2. middleware: 'i18n'
  3. },
  4. plugins: ['@/plugins/i18n.js'],
  5. generate: {
  6. routes: ['/', '/about', '/zh-CN', '/zh-CN/about']
  7. }

7. 修改pages文件夹下相应的页面

在pages文件夹下新建_lang文件夹,之后在此文件夹下新建对应的页面组件。

例如:

@/pages/_lang/index.vue

@/pages/_lang/about.vue

一定要带下划线的_lang,否则params.lang,获取不到值。可以参考官网这里

  1. <template >
  2. <div> {{ $t('home.title') }}</div>
  3. </template>

页面中的需要翻译的内容,都使用语法$t('')给包裹起来,其中里面的值,是从@/locales/***.json文件中获取对应的key

8. 总结

经过以上7个步骤之后,国际化基本可以完成了。完成国际化的过程中,提到了三个需求

  1. 切换语言,不刷新页面。【只需要在切换的时候,设置store中的locale值为对应的language值,不做其他操作】
  2. 刷新页面之后,还是当前语言。【这个需要将设置好的语言保存起来,放到本地缓存中,是个不错的选择】
  3. 根据浏览器的语言,显示语言。【使用navigator.language来获取浏览器默认语言,之后将其赋值给为store中的locale值】

2、3的优先级,首次进来,根据浏览器系统语言决定,刷新的时候,根据缓存决定。最后都需要给store中的locale赋值。显示何种语言,是由$i18n.locale决定。

参考案例

  1. nuxt官网示例

Nuxt.js国际化vue-i18n的搭配使用的更多相关文章

  1. nuxt.js部署vue应用到服务端过程

    由于seo的需要,最近将项目移植道nuxt.js下采用ssr渲染 移植完成后,一路顺畅,但是到了要部署到服务器端上时候,还是个头疼的问题,但最终还是顺利完成.现在记录一下部署中的过程. 注:部署时候过 ...

  2. Nuxt.js 学习笔记

    起源 最主要的原因时使用vue-cli搭建的SPA(单页应用)不利于搜索引擎的SEO操作.搜索引擎对SPA的抓取并不好,特别是百度根本没法抓取到SPA的内容页面,所以我们必须把我们的应用在服务端渲染成 ...

  3. Nuxt.js学习心得

    一.官网 Nuxt.js - Universal Vue.js Applications https://nuxtjs.org/ 二.中文官网 Nuxt.js - Vue.js 通用应用框架 http ...

  4. vue.js国际化vue-i18n插件的使用问题,在模版文本、组件方法、jsf方法里的使用

    vue.js国际化vue-i18n插件的使用问题,在模版文本.组件方法.jsf方法里的使用 1.在文本里使用{{$t("xxx")}} <span>{{$t(" ...

  5. Vue 爬坑之路(十一)—— 基于 Nuxt.js 实现服务端渲染(SSR)

    直接使用 Vue 构建前端单页面应用,页面源码时只有简单的几行 html,这并不利于网站的 SEO,这时候就需要服务端渲染 2016 年 10 月 25 日,zeit.co 背后的团队对外发布了一个 ...

  6. 从壹开始前后端分离 [ vue + .netcore 补充教程 ] 二八║ Nuxt 基础:面向源码研究Nuxt.js

    前言 哈喽大家周五好,又是一个开开心心的周五了,接下来就是三天小团圆啦,这里先祝大家节日快乐咯,希望都没有加班哈哈,今天公司发了月饼,嗯~时间来不及了,上周应该搞个活动抽中几个粉丝发月饼的,下次吧,这 ...

  7. Vue.js + Nuxt.js 项目中使用 Vee-validate 表单校验

    vee-validate 是为 Vue.js 量身打造的表单校验框架,允许您校验输入的内容并显示对应的错误提示信息.它内置了很多常见的校验规则,可以组合使用多种校验规则,大部分场景只需要配置就能实现开 ...

  8. vue.js 服务端渲染nuxt.js反向代理nginx部署

    vue.js的官方介绍里可能提到过nuxt.js,我也不太清楚我怎么找到这个的 最近项目vue.js是主流了,当有些优化需求过来后,vue还是有点力不从心, 比如SEO的优化,由于vue在初始化完成之 ...

  9. [Vue] Create Vue.js Layout and Navigation with Nuxt.js

    Nuxt.js enables you to easily create layout and navigation by replacing the default App.vue template ...

随机推荐

  1. (双指针) leetcode 485. Max Consecutive Ones

    Given a binary array, find the maximum number of consecutive 1s in this array. Example 1: Input: [1, ...

  2. Windows下U盘管理程序

    一个操作系统的作业,生成的程序需要使用管理员权限运行,参考了很多网上的代码,如果打开错误,请修改字符集为使用多字节字符集,并且调整为release模式. 作业的内容如下: 任务操作系统API应用体验与 ...

  3. xgboost-Python&R

    sklearn实战-乳腺癌细胞数据挖掘(博主亲自录制视频) https://study.163.com/course/introduction.htm?courseId=1005269003& ...

  4. com.fasterxml.jackson工具类

    老版本的Jackson使用的包名为org.codehaus.jackson,而新版本使用的是com.fasterxml.jackson. Jackson主要包含了3个模块: jackson-core ...

  5. 自定义element-ui中的图标

    element-ui图标库图标较少,比如有关于登录页面输入框里的用户名和密码的小图标就没有,这个时候可以自定义图标. <el-input v-model="loginForm.user ...

  6. 桥接模式-Bridge(Java实现)

    桥接模式-Bridge 桥梁模式的用意是"将抽象化(Abstraction)与实现化(Implementation)脱耦, 将"类的功能层次结构" 与 "类的实 ...

  7. ./runInstaller: Permission denied

    一:问题描述 安装oracle过程中出现 二:解决 /usr/local/Oracle11./database/runInstaller /usr/local/Oracle11./database/i ...

  8. python2和python3的区别

    python2和python3的区别 参考链接:http://www.runoob.com/python/python-2x-3x.html 1.源码上的区别 python2 python3 源码不规 ...

  9. python 使用win32com实现对word文档批量替换页眉页脚

    最近由于工作需要,需要将70个word文件的页眉页脚全部进行修改,在想到这个无聊/重复/没有任何技术含量的工作时,我的内心是相当奔溃的.就在我接近奔溃的时候我突然想到完全可以用python脚本来实现这 ...

  10. 深入web的请求过程

    一.深入web的请求过程 1.1.B/S网络架构概述 · 从前端到后端,都基于应用层协议HTTP来交互数据.一个请求就对应了一个操作,完成操作之后就断开了连接.基于这样的特点可以用来满足海量的用户的操 ...