页面通过Vue进行整体页面不同语言切换 i18n库

news2024/10/7 10:20:53

目录

引入

如何做到

下载i18n库

构建整体翻译文件结构

语言包文件

i18n配置文件

把i18n挂载到vue实例上

添加按钮点击事件切换语言


引入

我们现在有这样一个要求,我们想要对我们开发的网页进行国际化操作,也就是我们不仅要有中文,还要有英文等。用户可以随时进行不同语言的切换,页面中页呈现出不同的语言文字。

如何做到

下载i18n库

我们通过i18n这个库来进行操作

我们首先要在我们本地下载这个库:

npm install vue-i18n

构建整体翻译文件结构

我们在我们vue工程目录下的src中新建i18n文件夹,里面的结果如图所示


语言包文件

我们在langs的en.js和zh.js中分别写上如下代码

这两个其实就是我们的语言包,自己定义的,也可以添加更多的,只需要加入js文件,然后写入对应语言即可

en.js(英文翻译)

export default {
    messages: {
        //英文的苹果叫apple
        apple:'apple'
    }
}

zh.js(中文翻译)

export default {
    messages: {
        //中文的苹果叫苹果
        apple:'苹果'
    }
}

i18n配置文件

i18n目录下的index.js文件(主要的配置文件)

import { createI18n } from "vue-i18n"
// 英文翻译包
import en from './langs/en'
// 中文翻译包
import zh from './langs/zh'

// 把语言包放进去
const messages = {
    zh,
    en
}
const i18n = createI18n({
    // vue2 legacy写false和true就行, vue3 写false
    legacy:false,
    // locale是表示我们当前的语言,你是中文他就会用zh.js,你是英文他就会用en.js
    //本地存储中有就用本地存储中的,没有就默认为en
    locale:localStorage.getItem('lang') || 'en',
    messages
})

export default i18n

把i18n挂载到vue实例上

这里是用的vue3的语法,vue2也一样的,挂载上去就行

import { createApp } from 'vue'
import App from './App.vue'
//这里
import i18n from './i18n';

const app = createApp(App)
//这里
app.use(i18n)

app.mount('#app')

添加按钮点击事件切换语言

按钮

<button @click="changeLang1('en')">切换到英文</button>

<button @click="changeLang1('zh')">切换到中文</button>

在vue的script中导入useI18n

import { useI18n } from 'vue-i18n';

点击事件代码

这里是vue3的语法setup,vue2也同理

setup() {
    // 语言类型对象读取
    const {locale} = useI18n();

    const changeLang1 = (type) => {
      showToast('1s后切换英文语言');
      setTimeout(() => {
        locale.value = type;
        localStorage.setItem('lang',type)
        location.reload();
      },1000)
      // console.log(locale.value);
    };
    const changeLang2 = (type) => {
      showToast('Switch chinese language after 1s');
      setTimeout(() => {
        locale.value = type;
        localStorage.setItem('lang',type)
        location.reload();
      },1000)
      // console.log(locale.value);
    };
    return {
        changeLang1,
        changeLang2
    }
}

解释这里的 const {locale} = useI18n() 是什么

我们回到我们的i18n目录下的index文件

我们可以看到,他就是我们的语言包类型!

import { createI18n } from "vue-i18n"
// 英文翻译包
import en from './langs/en'
// 中文翻译包
import zh from './langs/zh'

const messages = {
    zh,
    en
}
const i18n = createI18n({
    legacy:false,
    //这个东西
    locale:localStorage.getItem('lang') || 'en',
    messages
})

export default i18n

因此,这句代码就是在修改我们的语言包类型

locale.value = type

最后一步,显示在网页上!

在标签之间的话就是

<div>{{ $t('messages.apple') }}</div>

如果是在标签上的话,v-bing,v-model等

<Button :label="$t('messages.apple')"/>

这里的messages就是我们语言包里的东西,apple就是语言包里的标识

注意语言包里的翻译标识在不同语言中的应该是一样的

比如我这里想要翻译的是apple,那么英文包里面的标识是apple,中文包下的也是apple,只是他们的值一个是英文,一个是中文而已

export default {
    //messages在这
    messages: {
        //中文的苹果叫苹果
        //apple在这
        apple:'苹果'
    }
}

当然也可以改成其他的,在里面添加多个,例如

zh.js

export default {
    big: {
        a:'哈哈',
        apple:'苹果'
    }
}

en.js

export default {
    big: {
        a:'haha',
        apple:'apple'
    }
}

我们这里调用的时候就应该是

<div>{{ $t('big.a') }}</div>
<div>{{ $t('big.apple') }}</div>

当我们点击中文按钮时,按照 $t这种写法的会自动翻译成中文显示在页面上

点击英文时,自动翻译成英文显示在页面上

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1423534.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

langchain+xray:prompt控制漏洞扫描

写在前面 xray是长亭推出的一款漏洞扫描工具。 langchain是调用LLM大模型完成自动化任务的框架。 本篇文章是对langchain自定义工具的探索&#xff0c;通过编写一个xray调用的工具&#xff0c;联合ChatGPT对xray进行调用&#xff0c;实现对目标的漏洞扫描。 xray功能分析 …

洛谷-P4124题-手机号码-Java

题目 题目链接&#xff1a; https://www.luogu.com.cn/problem/P4124 分析 给定两个长度为11位的数字&#xff0c;代表两个区间 [L,R] 需要编写程序来计算出&#xff0c;这两个区间内满足要求的数字个数。这样的题一般来说就是数位dp题。首先我们可以根据容斥原理 [0,R]中满…

第一批 Apple Vision Pro 开箱和佩戴体验新鲜出炉!!!

注: 本文转自微信公众号 BravoAI (专注AI资讯和技术分享), 原文网址:第一批 Apple Vision Pro 开箱和佩戴体验新鲜出炉!!!, 扫码关注公众号 编者按: 整个AR/VR行业都在等AVP, 期待它能带来ChatGPT般的冲击 AVP(Apple Vision Pro) 是苹果公司研发的第一款"空间计算 (Spa…

跟着pink老师前端入门教程-day11

3、CSS 三角 网页中常见一些三角形&#xff0c;使用CSS直接画出来即可&#xff0c;不必做成图片或字体图标 4、CSS 用户界面样式 4.1 什么是界面样式 界面样式&#xff1a;更改一些用户操作样式&#xff0c;以便提高更好的用户体验&#xff08;更改用户的鼠标样式、表单轮廓…

Redis简单阐述、安装配置及远程访问

目录 一、Redis简介 1.什么是Redis 2.特点 3.优势 4.数据库对比 5.应用场景 二、 安装与配置 1.下载 2.上传解压 3.安装gcc 4.编译 5.查看安装目录 6.后端启动 7.测试 8.系统服务配置 三、Redis远程访问 1.修改访问IP地址 2.设置登录密码 3.重启Redis服务 …

《QDebug 2024年1月》

一、Qt Widgets 问题交流 1. 二、Qt Quick 问题交流 1.Repeator 的 delegate 在 remove 移除时的注意事项 Qt Bug Tracker&#xff1a;https://bugreports.qt.io/browse/QTBUG-47500 Repeator 在调用 remove 函数之后&#xff0c;对应的 Item 会立即释放&#xff0c;后续就…

RabbitMQ之死信队列、延迟队列和懒队列

目录 死信队列 何时会产生死信 死信队列的配置方式 参数x-dead-letter-routing-key 如何确定一个消息是不是死信 延迟队列 懒队列 声明懒队列的两种方式 参数声明 策略指定 死信队列 死信队列是RabbitMQ中非常重要的一个特性。简单理解&#xff0c;他是RabbitMQ对于未…

第九节HarmonyOS 常用基础组件20-Divider

1、描述 提供分割器组件&#xff0c;分割不同内容块或内容元素。 2、接口 Divider() 3、属性 名称 参数类型 描述 vertical boolean 使用水平分割线还是垂直分割线。 false&#xff1a;水平分割线 true&#xff1a;垂直分割线 color ResourceColor 分割线颜色 默认…

数字图像处理(实践篇)三十七 OpenCV-Python 使用SIFT和BFmatcher对两个输入图像的关键点进行匹配实践

目录 一 涉及的函数 二 实践 三 报错处理 使用SIFT(尺度不变特征变换)算法

【Midjourney】AI绘画案例(1)龙年吉祥神兽

说明&#xff1a; 1、文中图片版权均为Midjourney所有&#xff0c;请勿用作商业用途。 2、文中图片均经过 Upscale x 4 处理。 3、由于模型原因&#xff0c;某些图片存在暇玼。 1、吉祥神兽——天马&#xff08;独角兽&#xff09; 天马消灾星。 提示词 Prompt: Sky Unicor…

力扣(LeetCode)227. 基本计算器 II

给你一个字符串表达式 s &#xff0c;请你实现一个基本计算器来计算并返回它的值。 整数除法仅保留整数部分。 你可以假设给定的表达式总是有效的。所有中间结果将在 [-231, 231 - 1] 的范围内。 注意&#xff1a;不允许使用任何将字符串作为数学表达式计算的内置函数&#…

Java在网络通信中应该如何选择合适的序列化框架?

前言 说到网络通信就会牵涉到数据的序列化与反序列化&#xff0c;现如今序列化框架也是层出不穷&#xff0c;比如FST、Kryo、ProtoBuffer、Thrift、Hessian、Avro、MsgPack等等&#xff0c;有的人可能会有疑问&#xff0c;为什么市面上有这么多框架&#xff0c;JDK不是已经有自…

LeetCode刷题日志-117填充每个节点的下一个右侧指针II

二叉树的题目&#xff0c;我认为二叉树必须要掌握递归的三种遍历算法&#xff0c;以及层序遍历算法才能做二叉树题目。这道题目我的想法是&#xff1a; 因为在二叉树每一层中&#xff0c;next指针指向的是的当前节点的右边的节点&#xff0c;所以&#xff0c;使用层序遍历&…

中国建设银行,这年终奖噶噶高!!!!(含算法原题)

国企年终 今天刷到一个近期帖子:「中国建设银行&#xff0c;这年终奖噶噶高!!!!」 先撇去具体内容不看&#xff0c;能在自然年的 月初&#xff0c;就把去年的奖金发了的企业&#xff0c;首先值得一个点赞。 再细看内容&#xff0c;年终奖是一个 字头的 位数。 由于国企通常没…

springboot-前后端分离——第二篇

本篇主要介绍一个发送请求的工具—postman&#xff0c;然后对请求中的参数进行介绍&#xff0c;例如简单参数、实体参数、数组参数、集合参数、日期类型参数以及json类型参数&#xff0c;对这些参数接收进行总结。最后对响应数据进行介绍&#xff0c;使用统一响应结果返回浏览器…

知识蒸馏(paper翻译)

paper&#xff1a;Distilling the Knowledge in a Neural Network 摘要&#xff1a; 提高几乎所有机器学习算法性能的一个非常简单的方法是在相同的数据上训练许多不同的模型&#xff0c;然后对它们的预测进行平均[3]。 不幸的是&#xff0c;使用整个模型集合进行预测非常麻烦…

养老院|基于Springboot的养老院管理系统设计与实现(源码+数据库+文档)

养老院管理系统目录 目录 基于Springboot的养老院管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、老人信息管理 2、家属信息管理 3、公告类型管理 4、公告信息管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选…

2023强网杯复现

强网先锋 SpeedUp 要求2的27次方的阶乘的逐位之和 在A244060 - OEIS 然后我们将4495662081进行sha256加密 就得到了flag flag{bbdee5c548fddfc76617c562952a3a3b03d423985c095521a8661d248fad3797} MISC easyfuzz 通过尝试输入字符串判断该程序对输入字符的验证规则为9…

计算机设计大赛 深度学习 python opencv 动物识别与检测

文章目录 0 前言1 深度学习实现动物识别与检测2 卷积神经网络2.1卷积层2.2 池化层2.3 激活函数2.4 全连接层2.5 使用tensorflow中keras模块实现卷积神经网络 3 YOLOV53.1 网络架构图3.2 输入端3.3 基准网络3.4 Neck网络3.5 Head输出层 4 数据集准备4.1 数据标注简介4.2 数据保存…

万物简单AIoT 端云一体实战案例学习 之 智能小车

学物联网,来万物简单IoT物联网!! 下图是本案的3步导学,每个步骤中实现的功能请参考图中的说明。 1、简介 1.1、背景 市面上各种遥控的小车很多,小车的性能不同具备的能力也不一样,大概实现的逻辑就是通过遥控器控制小车的前进、后退、左转或者右转。遥控小车具备一定…