当前位置:   article > 正文

nuxtjs配置i18n多语言、切换语言data中数据不起作用解决方案_nuxt i18n

nuxt i18n

i18n多语言简介

         官方介绍,I18n 是 Vue.js 的国际化插件。它可以轻松地将一些本地化功能集成到你的 Vue.js 应用程序中。简单来说就是能有助于我们项目进行多语言配置,实现一套系统多种语言的一个插件。

实现

实现起来那其实也很简单,跟着官方文档进行肯定是没问题的。但是在官方文档中介绍的是在vue中的使用方法。看标题就知道肯定不是再把不饿中的说一下,那么这篇文章咱就来说一下在nuxtjs中使用i18n的话要做哪些配置。网上的方案配置很多、很杂,下面是的是我自己整理出来的,可以参考一下。

1. 第一步

  1. 首先是要下载安装我们的i18n插件依赖。安装指令:
  2.         npm install --save @nuxtjs/i18n
  3.         
  4.     !!!!!! 这里千万不要下载错了   
  5.         错误命令:npm install vue-i18n     // 这是vue中的


2. 第二步
   

  1. 在项目的根目录中找到nuxt.config.js文件  在里面进行i18n的配置
  2.     // nuxt的配置文件 nuxt.config.js
  3.     export default {
  4.     
  5.           ......
  6.           
  7.       modules: [
  8.         '@nuxtjs/i18n'
  9.       ],
  10.       i18n: {
  11.       // 指定支持的语言列表。
  12.       //每个语言都需要指定 code(语言代码)、name(语言名称)、file(存储语言翻译信息的文件名)等属性。
  13.          locales: [
  14.              { name_cn: "英文", name: "English", code: "en", file: "en-US.json" },
  15.              {
  16.                name_cn: "中文",
  17.                name: "简体中文",
  18.                code: "zh-cn",
  19.                file: "zh-CHS.json",
  20.              },
  21.             ......
  22.          ],
  23.          lazy: true,    // 是否使用懒加载,即是否在需要的时候才加载翻译文件
  24.          langDir: "locales/",     // 存储语言翻译信息的目录
  25.          defaultLocale: "en",   // 默认语言
  26.          vueI18n: {
  27.                fallbackLocale: "en",   // 使用i18n配置
  28.          },
  29.      }
  30.      
  31.           ......
  32.           
  33.     }
注释 :基本配置

      

  1. // nuxt.config.js
  2. {
  3. // ...其他配置
  4. i18n: {
  5. // 启动懒加载
  6. lazy: true,
  7. // 使用组件级别的翻译
  8. vueI18nLoader: true,
  9. // 设置翻译文件目录, 从项目根目录开始查找,通常来说是 locales
  10. langDir: 'locales/',
  11. // 设置翻译策略, 不同策略对应不同行为,如果我们希望在路由上添加翻译类型作为前缀,例如:/zh/home,可以使用 prefix_except_default
  12. strategy: 'no_prefix',
  13. // 默认语言
  14. defaultLocale: 'en-US',
  15. // 支持的翻译语言
  16. locales: [
  17. {
  18. code: "en-US",
  19. iso: 'en-US', // 用于 SEO 优化
  20. name: "English(US)",
  21. file: "en-US.json", // locales/ 目录下的翻译文件路径,当开启 lazy 时,这个是必填的
  22. },
  23. {
  24. code: "zh-CN",
  25. iso: 'zh-Hans',
  26. name: "简体中文",
  27. file: "zh-CN.json",
  28. }
  29. ],
  30. // 用于传递给 vue-i18n 的配置
  31. vueI18n: {
  32. // 配置回退语言
  33. fallbackLocale: 'en-US'
  34. },
  35. // 启用浏览器语言检测,以便在访问者第一次访问您的站点时自动将其重定向到首选语言环境。
  36. // nuxt-i18n 会在 cookie 中添加一个用于存储当前语言环境的变量,当我们修改语言时,nuxt-i18n 会更新它
  37. detectBrowserLanguage: {
  38. // 启动 cookie
  39. useCookie: true,
  40. // 用于存储当前语言环境的变量名
  41. cookieKey: 'currentLang',
  42. // (建议用于改进SEO) -仅检测站点根路径(/)上的浏览器区域设置。只有当使用策略而不是“no_prefix”时才有效。
  43. redirectOn: 'root',
  44. }
  45. }
  46. }
关于刷新页面 语言会重置为初始语言的问题 我不太清楚具体情况,但是原因可能是因为配置中的detectBrowserLanguage导致, 默认为true 跟随浏览器语言展示,改为false即可

3. 第三步

  1. 创建我们的语言文件 -- json文件
  2.     因为我指定的目录为locales/    所以我就在locales文件夹中进行创建   --- locales文件夹在根目录
  3.     // locales/en-US.json
  4.     {
  5.         "desc":"detailed introduction !"
  6.     }
  7.     // locales/zh-CHS.json
  8.     {
  9.         "desc":"详细的介绍 !"
  10.     }


4. 第四步
   

  1. 在页面中使用的方式
  2.     1.第一种方式 -- 直接在结构层使用
  3.     <template>
  4.       <div>
  5.         {{ $t('desc') }}
  6.       </div>
  7.     </template>
  8.     
  9.     2.第二种方式 -- 在data中使用
  10.     methods: {
  11.       data(){
  12.           return{
  13.               desc:this.$t('desc')
  14.           }
  15.        }
  16.     }


 5. 切换语言的方法

  1. // 在页面上添加一个语言切换按钮:
  2.     <template>
  3.       <div>
  4.         <button @click="switchLocalePath('en')">English</button>
  5.         <button @click="switchLocalePath('zh-cn')">Français</button>
  6.       </div>
  7.     </template>
  8.     
  9.     
  10.     // 这个方式会发生路由跳转 !!!   
  11.     // !!!!!!!  switchLocalePath是官方提供的切换语言的方法  !!!!!!!!

!!!!!补充

  1. // 在进行 路由跳转的时候请使用官网给的特定方法进行跳转,不然跳转后会出现重置为初始语言的情况!!!!!!!!!!!!!!!!!
  2. 示例:<nuxtLink>标签
  3. <nuxt-link :to="localePath('/login')">登录</nuxt-link>
  4. 示例:普通标签
  5. <div @click="$router.push(localePath('/login'))">登录</div>
  6. 示例:js中路由跳转
  7. this.$router.push(this.localePath('/login'))

6. 切换语言时data中数据不起作用/变换的解决方案

官方是这么说的:

将this.$t() 写到了data属性里,切换语言不起作用data是一次性生产的,你这么写只能是在 data 初始化的时候拿到这些被国际化的值,并不能响应变化。官方的解决办法是,建议我们将表达式写到computed属性里,不要写到data里。

  1. 所以我们就按照官方给的解决方案,使用computed属性
  2.     
  3.     computed:{
  4.         desc(){
  5.             return this.$t('desc')
  6.          }
  7.      }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小惠珠哦/article/detail/971382
推荐阅读
相关标签
  

闽ICP备14008679号