当前位置: 首页 > news >正文

vue国际化(中英文切换)

思路:

构建了一个 VueI18n 的实例,明确了默认与备用语言及对应的语言包。在组件中获取组件实例以方便后续操作,设置一个点击事件实现语言切换并触发重新获取消息的动作,ref 创建的 msg 用于存储消息内容,设置一个函数负责消息请求与更新,onMounted 中的操作确保组件挂载后即获取消息。在模板里,展示 msg 并通过 $t 获取国际化翻译文本,同时提供选择框进行语言切换,整体形成了一个完整的国际化功能体系,能灵活切换语言并展示相应的消息和文本,两者紧密配合实现了 Vue 项目中的国际化需求与动态交互。

app.vue

<script setup>
import { getCurrentInstance, onMounted, ref } from "vue";
import { requestMsgApi } from "./api/message";// 获取当前组件实例
const instance = getCurrentInstance();// 切换语言
const onLanguageChange = (lang) => {// 执行语言切换instance.proxy.$i18n.locale = lang;// 重新获取消息requestMessage();
};// 显示在页面中的消息
const msg = ref("");async function requestMessage() {// 发送请求获取消息const response = await requestMsgApi();console.log(response.data.msg);// 保存消息msg.value = response.data.msg;
}// 组件挂载完成之后
onMounted(() => {// 获取消息requestMessage();
});
</script><template>{{ msg }}<ul><li>{{ $t("navbar.home") }}</li><li>{{ $t("navbar.about") }}</li><li>{{ $t("navbar.contact") }}</li></ul><select @change="onLanguageChange($event.target.value)"><option value="zh-CN">中文</option><option value="en-US">English</option></select>
</template>

utils/request.js

import axios from "axios";
import { i18n } from "../locales";const request = axios.create({baseURL: "http://localhost:3000",
});// 请求拦截器
request.interceptors.request.use((config) => {// 将当前语言设置到请求头中config.headers["Accept-Language"] = i18n.global.locale;// 返回配置return config;
});export default request;

main.js

import { createApp } from "vue";
import App from "./App.vue";
import { i18n } from "./locales/index";const app = createApp(App);
app.use(i18n);
app.mount("#app");

message.js

import request from "../utils/request";export function requestMsgApi() {return request({ url: "/msg" });
}

locales/en-US.json

{"navbar": {"home": "Home","about": "About","contact": "Contact"}
}

locales/zh-CN.json

{"navbar": {"home": "首页","about": "关于我们vvvv","contact": "联系方式"}
}

locales/index.js

import { createI18n } from "vue-i18n";
import zhCN from "./zh-CN.json";
import enUS from "./en-US.json";// 创建 VueI18n 实例
export const i18n = createI18n({// 设置默认语言为中文locale: "zh-CN",// 设置备用语言为英文fallbackLocale: "en-US",// 语言包messages: {// 引入中文翻译文件"zh-CN": zhCN,// 引入英文翻译文件"en-US": enUS,},
});

后端

app.js

const express = require("express");
const cors = require("cors");const app = express();app.use(cors());app.get("/", (req, res) => {res.send("welcome");
});app.get("/msg", (req, res) => {// 获取语言const lang = req.headers["accept-language"];// 根据不同的语言响应不同的内容switch (lang) {case "zh-CN":res.json({ msg: "你好" });break;case "en-US":res.json({ msg: "Hello" });break;default:res.json({ msg: "欢迎" });}
});app.listen(3000, () => {console.log(`服务器启动成功, 监听 3000 端口`);
});

相关文章:

  • 数据结构--实验
  • JVM (四)GC过程
  • Linux环境各种软件安装配置
  • 时间轴、流程类时间轴绘制
  • 7-1RT-Thread邮箱
  • LabVIEW在高校中的应用
  • 技术干货分享:初识分布式版本控制系统Git
  • 大学专业选择的岔路口:计算机相关专业的前景与适配性
  • DBSCAN 算法【python,机器学习,算法】
  • Web前端职业描述:编织数字世界的绚丽画卷
  • 360数字安全:2024年4月勒索软件流行态势分析报告
  • MySQL常用命令(Linux环境)
  • 2024年,计算机相关专业还值得选择吗?
  • 如何实现观察者模式和发布-订阅模式?
  • 高压电工作业历年试题分享(含答案)
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • Laravel核心解读--Facades
  • node 版本过低
  • OSS Web直传 (文件图片)
  • vue学习系列(二)vue-cli
  • Vue组件定义
  • Yeoman_Bower_Grunt
  • 关键词挖掘技术哪家强(一)基于node.js技术开发一个关键字查询工具
  • 关于 Cirru Editor 存储格式
  • 基于Android乐音识别(2)
  • 删除表内多余的重复数据
  • 使用parted解决大于2T的磁盘分区
  • 使用Swoole加速Laravel(正式环境中)
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 在Docker Swarm上部署Apache Storm:第1部分
  • ​Java基础复习笔记 第16章:网络编程
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • ‌U盘闪一下就没了?‌如何有效恢复数据
  • ‌前端列表展示1000条大量数据时,后端通常需要进行一定的处理。‌
  • # C++之functional库用法整理
  • #每天一道面试题# 什么是MySQL的回表查询
  • ${factoryList }后面有空格不影响
  • (10)STL算法之搜索(二) 二分查找
  • (3)选择元素——(14)接触DOM元素(Accessing DOM elements)
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (PySpark)RDD实验实战——取最大数出现的次数
  • (阿里云万网)-域名注册购买实名流程
  • (黑客游戏)HackTheGame1.21 过关攻略
  • (数据大屏)(Hadoop)基于SSM框架的学院校友管理系统的设计与实现+文档
  • (图)IntelliTrace Tools 跟踪云端程序
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (一)python发送HTTP 请求的两种方式(get和post )
  • .Net Core 生成管理员权限的应用程序
  • .net 桌面开发 运行一阵子就自动关闭_聊城旋转门家用价格大约是多少,全自动旋转门,期待合作...
  • .Net6使用WebSocket与前端进行通信
  • .Net的DataSet直接与SQL2005交互
  • .NET运行机制
  • .Net中wcf服务生成及调用
  • /etc/sudoer文件配置简析