vue项目国际化 vue-i18n以及踩坑解决 小姐姐手把手教你VUE国际化~

2023-10-29

1.安装配置

- 安装 $ npm install vue-i18n

或者:

<script src="https://unpkg.com/vue/dist/vue.js"></script>
<script src="https://unpkg.com/vue-i18n/dist/vue-i18n.js"></script>
import VueI18n from 'vue-i18n'

Vue.use(VueI18n) // 通过插件的形式挂载

const i18n = new VueI18n({
    locale: 'zh-CN',    // 语言标识
    fallbackLocale: 'zh-CN',//没有英文的时候默认中文语言
    silentFallbackWarn: true,//抑制警告
    //this.$i18n.locale // 通过切换locale的值来实现语言切换
    messages: {
      'zh-CN': require('./common/lang/zh'),   // 中文语言包
      'en-US': require('./common/lang/en')    // 英文语言包
    }
})

window.vm = new Vue({
  el: '#app',
  i18n,  // 不要忘记
  store,
  router,
  template: '<App/>',
  components: { App }
})

--- ok, 引入的事情就是这样,那么既然实现国际化,这边简单的是中英文切换,那么自然我们需要中英文两套语言的文件,vue-i18n中相对简单,只需要两个 js 文件,通过 require 的形式引入到 main.js。

这里写图片描述

en.js 英文语言包:

export const lang = { 
  test: 'English',//英文
}

zh.js 中文语言包:

export const lang = {
  test:'中文',
}

最后我们只需要通过触发事件的形式,来控制 locale 的值,去调用对应的语言包就可以实现国际化啦。

--- 组件中如何去切换 locale 的值,实现语言切换。

locale: 'zh-CN',    // 语言标识
    messages: {
      'zh-CN': require('./common/lang/zh'),   // 中文语言包
      'en-US': require('./common/lang/en')    // 英文语言包
    }

在 main.js 中的代码中,可以看到,当 locale 的值为‘zh-CN’时,版本为中文;当 locale 的值为‘en-US’,版本为英文。当然你也可以换成 zh 和 en,这个不固定,只需要对应上。

好了,现在来看一下,我组件中的一个点击事件中如何进行切换。

<div @click="changeLangEvent" class="changeLang"></div>

changeLangEvent() {
      if ( this.lang === 'zh-CN' ) {
        this.lang = 'en-US';
        this.$i18n.locale = this.lang;//关键语句      
      }else {
        this.lang = 'zh-CN';
        this.$i18n.locale = this.lang;//关键语句      
      }
    }

2.语法

在vue文件里面的实现:

// 普通:
<span>{{$t('lang.test')}}</span>
// placeholder:
<input type="text" v-model="description" :placeholder=" $t('lang.test')" >
// 三目运算:
<span>{{flag?flag:$t('lang.test')}}</span>

在js代码里面调用多语言字段:

// TODO:写法:this.$t('lang.test');
// TODO:因为js里面的数据无法实时刷新,所以需要写在computed里面
computed:{
      testName: function () {
        return this.$t('lang.test');
      },
    }

---如果是双向绑定的数据,则需要set

computed:{
   mailAuthTxt: { //获取验证码--倒计时
      get() {
        if(this.isCountDown){
          return this.$t('dc_lang.获取验证码');
        } else {
          return this.countDown;
        }
      },
      set() {
        if(this.isCountDown){
          return this.$t('dc_lang.获取验证码');
        } else {
          return this.countDown;
        }
      }
  }
}

在common.js里面的写法:

//因为common.js没有在vue文件中。所以$t.('xxxx')写法会报错。所以在main.js中写
window.vm= new Vue({});

window.vm.$i18n.t('lang.test');

 

问题1:在刷新页面之后,我的语言状态会恢复成原始状态。所以我采用了sessionStorage来存储我的语言状态。

//国际化
import VueI18n from 'vue-i18n'
Vue.use(VueI18n)

let lang = window.sessionStorage.getItem('lang')||'zh-CN';
const i18n = new VueI18n({
    locale: lang,    // 语言标识
    fallbackLocale: 'zh-CN',//没有英文的时候默认中文语言
    silentFallbackWarn: true,//抑制警告
    // this.$i18n.locale // 通过切换locale的值来实现语言切换
    messages: {
        'zh-CN': require('../static/js/lang/zh.js'),   // 中文语言包
        'en-US': require('../static/js/lang/en.js')    // 英文语言包
    }
})
changeLangEvent() {
      if ( this.lang === 'zh-CN' ) {
        this.lang = 'en-US';
        this.$i18n.locale = this.lang;//关键语句
        window.sessionStorage.setItem('lang', this.lang);
      }else {
        this.lang = 'zh-CN';
        this.$i18n.locale = this.lang;//关键语句
        window.sessionStorage.setItem('lang', this.lang);
      }
    }

问题2:修改index.html里的title

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta content="yes" name="apple-mobile-web-app-capable">
  <meta content="yes" name="apple-touch-fullscreen">
  <meta content="telephone=no,email=no" name="format-detection">
  <title>我的网站名</title>
</head>
<body>
<div id="app"></div>
</body>
<script>
  document.getElementsByTagName("title")[0].innerText = window.vm.$i18n.t('lang.我的网站名');
</script>
</html>

  

--- 之前在网上看到国际化的解决方案有四种。谷歌插件翻译很不准确,不考虑。中英文两套很费劲,不考虑。之前还写过freeMarker的翻译,后台返回给前端直接添加就好了。

有空去研究一下tran.js

就此就完成啦~~~给自己比心心~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

vue项目国际化 vue-i18n以及踩坑解决 小姐姐手把手教你VUE国际化~ 的相关文章

  • Spring MVC Web 应用程序 - 从属性启用/禁用控制器

    我有一个在 Tomcat 中运行的 Web 应用程序 并使用 Spring MVC 来定义控制器和映射 我有以下课程 Controller api test public class TestController RequestMappin
  • 使用 ruby​​ on Rails 向静态网站添加功能

    我是 ruby on Rails 的新手 我有一个包含很多静态页面的网站 我想向网站添加一些动态页面 我将在 ruby on Rails 中开发这些页面 当用户单击静态页面之一上的按钮之一时 将触发这些页面提供的功能 我想我将把动态页面放在
  • 如何通过 HTML 输入标签获取文件的引用? (角度2)

    我想在 Firebase 中上传图片 但要做到这一点 我必须先获取文件 例如 如何通过 HTML 获取我的计算机的图像 我正在尝试这样做 但我不知道这样做的回报是什么 帮帮我吧伙计们
  • 将网页中的表格导入 Excel

    我只有中高级的Excel水平和中级的VBA与Excel背景 我想要做的是从链接中显示的网页导入表格 http www admission unmsm edu pe res20130914 A 011 0 html http www admi
  • Tomcat 是否立即支持 JAX-RS(它是否支持 JAX-RS)?

    从教材 RESTful Java with JAX RS 中我们可以读到 如果我们的应用程序服务器是 JAX RS 感知的 或者换句话说 与 JAX RS 紧密集成 则声明我们的ShoppingApplication作为 servlet 的
  • IIS 7.5:对网站的初始请求永远不会加载

    当我第一次浏览我的网站时 互联网不断旋转 加载 如果我两秒钟后尝试再次加载它 一切都会正常 就好像它 睡着了 一样 我想这一定和 回收 有关 我已将 空闲超时 设置为 0 将回收 定期时间间隔 设置为 0 在浏览我的网站之前 我查看了 工作
  • 最长和最短的 HTML 字符实体名称是什么? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 管子周围有
  • IIS 6 网站根目录与应用程序?解决Url()?

    IIS 6 ASP NET 3 5 C NET 我们遇到一个问题 即同一组文件的行为会有所不同 具体取决于它是根 IIS 网站还是 IIS 网站下的应用程序 使用生成的网址解析网址 http msdn microsoft com en us
  • 尝试访问我的网站时出现内部服务器错误

    我收到这个错误 内部服务器错误 服务器遇到内部错误或配置错误 无法完成您的请求 请联系服务器管理员 电子邮件受保护 cdn cgi l email protection和 告知他们错误发生的时间以及您可能会发生的任何事情 所做的事情可能导致
  • Electron 应用程序可以与 java 代码集成吗?

    由于node js仍然缺乏Java中存在的重要功能 因此我想使用Java而不是node js 并使用Web语言 html js css 创建客户端 Electron 是跨平台的 java 也是跨平台的 因此似乎有一个能够两全其美的解决方案
  • 从 Harp.js 中的 EJS 模板调用另一个文件上的 javascript 函数

    尝试使用 Harp js 制作一个网站 我使用 ejs 模板 并希望将一些有用的 javascript 函数存储在中央文件中 我怎么做 我尝试使用 但它不起作用 似乎js文件没有被解析 有任何想法吗 谢谢 尽管有多种方法 有时 可以实现这一
  • 我应该将标签存储在文本字段还是单独的表中?

    我有一个表 其中的行如下所示 id path tags 1 pictures pic1 jpg car bmw 3 pictures pic2 jpg cat animal pussy 4 pictures pic3 png gun 基本上
  • 在 Tomcat 上部署 Java Web 项目,无需 WAR 或 EAR

    我有一个 Java Web 项目 Struts Spring 在我的本地主机上完美运行 我必须将其部署在我的网站上 但虚拟主机提供的 Tomcat Manager 界面显示 由于安全原因 它无法上传 WAR 文件 当联系技术支持时 我被告知
  • VSTS 构建失败/发布无法在 bin 文件夹中找到 roslyn\csc.exe

    我们有一个网站项目 安装了以下 nuget 软件包 Microsoft CodeDom Providers DotNetCompilerPlatform 1 0 8 Microsoft Net Compilers 2 4 0 The web
  • 在 Blogger 中使用相对链接

    我正在使用博主 当我需要在我的博客文章中提到一个链接并且该链接实际上是我自己的博客文章的链接时 我在其旁边提到标签 www my blog name blogspot in 12 2013 how to do html if i chang
  • MVC4更新部分视图

    我正在开发一个简单的 MVC 应用程序 我有主视图 部分视图和控制器 这是我的主要视图 model partitalViewTest Models Qset div class transbox style height 1 Html Pa
  • Safari 的“阅读器模式” - 开源解决方案? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 Safari 有一个 阅读器模式 可以删除网站上除文本之外的所有内容 有谁知道提供相同功能的开源库 或
  • 发送变量后的 wsdl 服务响应,php

    我是 SOAP WSDL 函数的新手 我有一位客户从一家从事汽车测试的公司获得了 wsdl 文件 我的客户是他们的分包商 他们告诉我们上传有关车牌 类别等信息 一旦详细信息发送完毕 服务器就会做出成功或失败的响应 请您协助 浏览不同的信息
  • 重新加载更新的 javascript> 代码而不完全重新加载 html 页面

    我正在开发一个单页 Web 应用程序 它具有许多不同的功能和形式 当开发一个深度 我的意思是主页上没有的 功能时 我会经历这个循环 开发代码 编辑类和函数 刷新整个页面 一路点击 直到到达我需要测试的部分 有时加起来大约一分钟 测试新代码
  • 如何从文件系统访问 api window.showDirectoryPicker() 获取选定的目录路径

    当我选择一个文件夹时 我确实得到了 dirHandle 但无法弄清楚什么属性或方法将为我提供完整路径 const dirHandle await window showDirectoryPicker 所以类似 let path dirHan

随机推荐

  • C++获取CPUID

    include
  • 客户流失预测--基于R语言C5.0

    对于中国各大电信运营商而言 在整体市场规模相对稳定的情况下 能否维护好现有的客户是保证其收益的重中之重 因此 预测客户流失的可能性与否 直接关系到运营商的客户维护的重点正确与否 本文将基于 狗熊会 基础案例 收集客户流失 来演示基于C5 0
  • flutter webview 在iOS上不显示的问题

    使用的插件是 webview flutter 0 3 22 1 在android中可以正常显示 但是在ios端中既没有报错 又没有显示出来 后来查看插件使用说明才发现 忘记在ios端中端配置文件中进行配置了 此时我们需要在ios的runne
  • java 包扫描器

    java 包扫描器 扫描指定包下的所有java文件 并返回class数组 直接上代码 import java io File import java net URISyntaxException import java net URL im
  • 【Linux】gcc编译过程、make和makefile的概念与区别、Linux简单进度条实现

    文章目录 1 gcc编译过程 1 1预处理 1 2编译 1 3汇编 1 4链接 2 自动化构建工具 make和makefile 2 1使用背景 2 2两者的概念和区别 2 3项目清理 3 Linux简单进度条的实现 1 gcc编译过程 1
  • ubuntu安装qt

    ubuntu安装qt 第一步 下载安装包https download qt io archive qt 5 14 5 14 2 第二步 更改权限 sudo chmod x qt opensource linux x64 5 12 12 ru
  • JS中使用正则表达式g模式和非g模式的区别

    g是global的缩写啊 就是匹配全部可匹配结果 如果你不带g 在正则过程中 字符串是从左至右匹配的 如果匹配成功就不再继续向右匹配了 如果你带g 它会重头到尾的把正确匹配的字符串挑选出来 例如 1 2 3 4 5 var str aaaa
  • C++ std::vector删除元素的几种方式及区别

    容器vector在删除过程中 常用的函数 函数 作用 pop back 删除 vector 容器中最后一个元素 该容器的大小 size 会减 1 但容量 capacity 不会发生改变 erase iter 删除 vector 容器中ite
  • 机器学习——Kmeans聚类算法

    目录 简介 手肘法 手肘法核心思想 轮廓系数 代码举例1 代码举例2 实例 简介 K均值聚类算法是先随机选取K个对象作为初始的聚类中心 然后计算每个对象与各个种子聚类中心之间的距离 把每个对象分配给距离它最近的聚类中心 聚类中心以及分配给它
  • Qt之对话框设计——利用QPalette改变控件颜色

    QPalette类相当于对话框或控件的调色板 它管理着控件或窗体的所有颜色信息 每个窗体或控件都包含一个QPalette对象 在显示时按照它的QPalette对象中对各部分各状态下的颜色的描述来进行绘制 QPalette类有两个基本的概念
  • 【数学建模】混合整数规划MIP(Python+Gurobi代码实现)

    目录 1 概述 2 入门算例 2 1 算例 2 2 求解 Pulp库和cvxpy 3 进阶算例 3 1 算例 3 2 Python Gurobi代码实现 3 3 运行结果 1 概述 混合整数规划 MIP 是 NP hard 问题中的一类 它
  • ASP.NET MVC 之View相关

    VS2015 新建一个MVC工程 验证改成No Authentication 界面大致如下 得到一个解决方案如下 下面分析一下View ViewBag Title ViewPageOne Layout Views Shared Layout
  • 什么是数据挖掘,给出一个你在生活中应用数据挖掘技术的例子,分析数据挖掘的意义。...

    数据挖掘是指从大量数据中自动或半自动地发现有用的信息 模式和知识的过程 数据挖掘通常包括预处理数据 选择适当的数据挖掘技术 应用算法和模型 评估结果和解释发现的知识 一个我在生活中应用数据挖掘技术的例子是使用社交媒体平台的推荐算法 社交媒体
  • 【SQL触发器】类型 FOR 、AFTER、 Instead of到底是什么鬼

    前言 上一篇博客 博客连接 https blog csdn net jerry11112 article details 82924714 讲述了触发器的基本概念 触发器什么时候用 为什么用 这篇博客将简述触发器的类型 由于FOR触发器与A
  • GD32F330搭建工程记录: cannot open source input file “RTE_Components.h“: No such file or director

    有网友提出了解决方案 GD32F103搭建工程记录 cannot open source input file RTE Components h No such file or director 但没有确认原因 因此对此解决方案不是很满意
  • push代码时git did not exit cleanly (exit code 1).

    先缓存代码 stash changes 接着将代码拉下来 最后在把缓存读回去
  • 全力冲unreal了

    顺利辞职 其实 自己没想象中的那么重要 哈哈 交接清楚了 自然就批准离职了 以前种种 已成过往云烟 如今 再次全职unreal 再次两万五 该雪耻了 两年前的今天 好像也是全职unreal 两万五 哈哈 自以为这次准备充足了 全力冲就是了
  • 抽象类,接口,以及两者的区别

    1抽象类 含有abstract修饰符的class即为抽象类 abstract 类不能创建的实例对象 含有abstract方法的类必须定义为abstract class abstract class类中的方法不必是抽象的 abstract c
  • Python Mako

    git clone https bitbucket org zzzeek mako git Mako是用python语言开发的开源模板引擎 功能很强大 使用起来也很方便 下面介绍一下安装步骤 下载 请到官方网站http www makote
  • vue项目国际化 vue-i18n以及踩坑解决 小姐姐手把手教你VUE国际化~

    1 安装配置 安装 npm install vue i18n 或者 import VueI18n from vue i18n Vue use VueI18n 通过插件的形式挂载 const i18n new VueI18n locale z