前端国际化之i18n(VUE项目)

前端国际化之i18n(VUE项目)

解释与说明

        i18n,全名是internationalization,称为国际化。

        我理解的就四个字:语言转换。

        让以其他语言作为母语的人能看懂你的前端中的文字。

        我们常用的就是中文简体(zh_CN)与英文(美国)(en_US)的转换。

        当然也可以增添中文繁体(zh_TW)等等你想要的其他语言。

缩写的由来

internationalization,首字母 ​​i​​ 和末字母 ​​n​​ 之间有 ​​18​​ 个字母,故缩写为 ​​i18n​。

与之对应的是L10n,本地化,Localization。

        最好在项目初期就计划使用国际化,这样相对后期使用会大大减少工作量。

项目使用

安装

1,在你的软件中打开控制台

        我使用的是IDEA,其实前端更推荐使用VSCode。

2,进入前端的文件夹

cd web

        我的前端的文件夹名称是web,相应变换成你自己命名的前端文件夹名称。

3,使用下载安装命令

npm install vue-i18n

        我使用的是npm命令,你也可以转换成你使用的命令。我更推荐pnpm,推陈出新嘛,而且使用这个在启动时会更快。

        yarn有点不同:

yarn add vue-i18n

使用

第一步,创建语言库。

1,在src文件夹下创建一个文件夹locales;

2,再在locales文件夹下创建要转换成的语言;

3,在src文件夹下创建i18n.js文件。

注意i18n.js文件是与locales文件夹同级的,都在src文件夹下。

不要被向右的小箭头迷惑了。

先把所有src文件夹下的所有文件夹收缩起来在创建哦。

        我需要的是中文简体和英文(美国),所以是zh-CN.json和en-US.json。

第二步,在相应创建的文件夹下写入代码。

        以我创建的文件为例。

1,在zn-CN.json文件中添加代码:

{ "common": { "confirm": "确定", "cancel": "取消", "pleaseEnterUsernameAndPassword": "请输入账号和密码", "loginSuccess":"登录成功", "loginFail": "登录失败" }, "loginPage": { "title": "XX管理系统", "userLogin": "用户登录", "username":"账号", "password": "密码", "usernamePlaceholder": "请输入账号", "passwordPlaceholder": "请输入密码", "languageLabel": "语言", "loginButton": "登录", "text1":"如有疑问,请联系技术人员以提供支持。" } }

        我使用的命名方法是首个单词首字母小写,其余单词首字母大写,无空格,无连接线,无下划线的形式来存储的。你也可以按照你想要的方式去取名,但是我就不知道会不会出错了,因为我没试过。

        上面的common是消息提示框里的,loginPage是登录页面。

        需要注意的是,.json文件里不允许最后有逗号",",否则会报错,例如下面的:

{ "common": { ... "loginFail": "登录失败", }, "loginPage": { ... "text1":"如有疑问,请联系技术人员以提供支持。" }, }

里有两处错误的地方:

        需要删除两个逗号才正确。

2,在en-US.json文件中添加代码:

{ "common": { "confirm": "Confirm", "cancel": "Cancel", "pleaseEnterUsernameAndPassword": "Please enter username and password", "loginSuccess":"Login success", "loginFail": "Login fail" }, "loginPage": { "title": "XX Management System", "userLogin": "User Login", "username":"Username", "password": "Password", "usernamePlaceholder": "Please enter username", "passwordPlaceholder": "Please enter password", "languageLabel": "Language", "loginButton": "Login", "text1": "If you have any questions, please contact technical support for assistance." } }

3,在i18n.js文件中添加代码添加代码:

// src/i18n.js import { createI18n } from 'vue-i18n' import zhCN from './locales/zh-CN.json' import enUS from './locales/en-US.json' // 从本地存储中读取用户之前设置的语言,如果没有则使用浏览器语言或默认中文 const savedLocale = localStorage.getItem('user-locale') const browserLocale = navigator.language || 'zh-CN' // 判断浏览器语言是否是英文,否则使用中文 const defaultLocale = savedLocale || (browserLocale.startsWith('en') ? 'en-US' : 'zh-CN') const i18n = createI18n({ legacy: false, // 必须设置为 false,以使用 Composition API 模式 locale: defaultLocale, // 当前激活的语言 fallbackLocale: 'zh-CN', // 如果当前语言包缺少某个翻译,回退到中文 messages: { 'zh-CN': zhCN, 'en-US': enUS } }) // 提供一个方法用于切换语言并持久化 export function setLocale(locale) { i18n.global.locale.value = locale localStorage.setItem('user-locale', locale) } export default i18n

第三步,在逻辑中添加i18n

        在需要转换的vue文件中的scripts标签的顶部写入代码:

import { useI18n } from 'vue-i18n';

        同样在scripts标签中,在所有导入(import)的下面写入代码:

const { t } = useI18n();

        示例:

<script setup> import { useI18n } from 'vue-i18n'; const { t } = useI18n(); //你的其他代码 </script>

第四步,在模板中使用i18n

        在你的想展示可转换文字的地方变成:

{{ $t('     ') }}

        在单引号中间加上你刚刚定义的英文。

        例如我的登录的标题如下

{{$t('loginPage.title')}}

        需要填入外面的大名称和里面的小名称,中间使用英文的点“.”来连接,这样系统才能找到你的自定义的文字。

举一个例子吧:

        例如在我的登录界面(login.vue)中的template中使用i18n:

<template> <div> <div> <div> <div> <img src="@/assets/Logo.png" alt="logo"> </div> <h1>{{ $t('loginPage.title') }}</h1> </div> <div> <div> <h2>{{ $t('loginPage.userLogin') }}</h2> </div> <!-- 账号输入框 - 横向布局 --> <div> <div>{{ $t('loginPage.username') }}</div> <div> <el-icon><User /></el-icon> <input type="text" v-model="loginForm.username" :placeholder="$t('loginPage.usernamePlaceholder')" > </div> </div> <!-- 密码输入框 - 横向布局 --> <div> <div>{{ $t('loginPage.password') }}</div> <div> <el-icon><Lock /></el-icon> <input :type="passwordVisible ? 'text' : 'password'" v-model="loginForm.password" :placeholder="$t('loginPage.passwordPlaceholder')" > <el-icon @click="togglePasswordVisibility" > <View v-if="passwordVisible" /> <Hide v-else /> </el-icon> </div> </div> <!-- 语言选择 - 横向布局 --> <div> <div>{{ $t('loginPage.languageLabel') }}</div> <div> <select v-model="currentLanguage" @change="changeLanguage"> <option value="zh-CN">简体中文</option> <option value="en-US">English</option> </select> </div> </div> <button @click="debouncedLogin">{{ $t('loginPage.loginButton') }}</button> <div> <p>{{ $t('loginPage.text1') }}</p> </div> </div> <div> </div> </div> </div> </template> <script setup> ... </script> <style scoped> ... </style>

        最后再加上逻辑与样式的代码就完成啦!

展示一下

默认中文界面

英文界面

Read more

一分钟看完:深圳都有哪些机器人公司

1. 人形机器人与具身智能(当下最火,运控/LLM背景) 序号公司名称核心业务(10字内)公司地址(补齐与精确化)1优必选 (UBTECH)商业化双足人形机器人南山区学苑大道1001号南山智园 C1 栋2乐聚机器人 (Leju)人形机器人本体与算法南山区学苑大道1068号南山智园 C2 栋3众擎机器人 (EngineAI)通用人形与外骨骼电机南山区学苑大道1001号南山智园 (具体栋数在C区)4逐际动力 (LimX)动态双足/四足运控算法南山区南头街道前海华润金融中心 (研发中心)5星尘智能 (Astribot)绳驱 AI 机器人与灵巧手南山区打石一路深圳国际创新谷 6 栋6帕西尼感知 (PaXini)触觉传感器与人形手南山区粤海街道深圳湾科技生态园7自变量机器人 (X Square)端到端具身智能大模型南山区西丽街道万科云城8数字华夏康养与文旅服务人形机器人南山区西丽街道留仙大道创智云城9跨维智能 (DexForce)三维视觉与具身操作大模型南山区粤海街道软件产业基地10腾讯 Robotics X实验室前沿轮足与灵巧手南山区粤海街道腾讯滨海大厦/朗科大厦11易择智擎VLA 具身

VRCT完整使用指南:5分钟掌握VRChat跨语言交流神器

在VRChat的全球化社区中,语言障碍常常成为国际交流的瓶颈。VRCT(VRChat Chatbox Translator & Transcription)作为一款专为VRChat设计的智能辅助工具,通过实时语音转录和多语言翻译功能,让来自世界各地的玩家能够无障碍沟通。这款免费开源工具让语言不再是VR社交的障碍!✨ 【免费下载链接】VRCTVRCT(VRChat Chatbox Translator & Transcription) 项目地址: https://gitcode.com/gh_mirrors/vr/VRCT 核心功能概览 智能语音识别系统 VRCT采用先进的语音识别技术,能够准确捕捉并转换麦克风输入和扬声器输出的音频内容。无论是个人发言还是他人对话,系统都能实时转录为文字,特别适合记录重要对话或回顾交流内容。 主要特性包括: * 实时音频流处理 * 多语言自动检测 * 智能噪音过滤 * 动态阈值调整 多语言实时翻译引擎 支持英语、中文、日语、韩语等多种语言间的即时互译。用户可以根据自己的语言习惯灵活设置源语言和目标语言,系统支持双向转换,确保对话

从0到1打造RISC-V智能家居中控:硬件+固件+通信全链路实战

从0到1打造RISC-V智能家居中控:硬件+固件+通信全链路实战

👋 大家好,欢迎来到我的技术博客! 📚 在这里,我会分享学习笔记、实战经验与技术思考,力求用简单的方式讲清楚复杂的问题。 🌱 无论你是刚入门的新手,还是正在进阶的开发者,希望你都能有所收获! 文章目录 * 从0到1打造RISC-V智能家居中控:硬件+固件+通信全链路实战 🏠💡 * 为什么选择RISC-V?🤔 * 系统整体架构概览 🧩 * 第一步:硬件选型与电路搭建 🔌 * 主控芯片选择 * 外设连接 * 第二步:开发环境搭建 🛠️ * 安装步骤(以Ubuntu为例) * 第三步:裸机驱动开发(Bare Metal)⚡ * 示例1:DHT11温湿度读取(Bit-banging) * 示例2:BH1750光照传感器(I2C) * 第四步:引入FreeRTOS实现多任务调度 🔄 * 第五步:Wi-Fi连接与MQTT通信 ☁️📡 * 连接Wi-Fi * MQTT客户端(使用esp-mqtt库) * 第六步:BLE本地控制(无需Wi-Fi)📱

Flutter 组件 upnp_client 的鸿蒙适配实战 - 实现跨设备服务发现、智能家居自动关联与多媒体投屏协议控制

Flutter 组件 upnp_client 的鸿蒙适配实战 - 实现跨设备服务发现、智能家居自动关联与多媒体投屏协议控制

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 upnp_client 的鸿蒙适配实战 - 实现跨设备服务发现、智能家居自动关联与多媒体投屏协议控制 前言 在“万物互联”的愿景下,鸿蒙系统(OpenHarmony)最核心的武器就是跨设备协同能力。然而,如何让你的 Flutter 应用在复杂的家庭或办公内网中,自动发现并操控那些非鸿蒙生态但同样广泛分布的设备(如:DLNA 智能电视、家用路由器、网络打印机、甚至是 NAS 存储)? UPnP(Universal Plug and Play)协议此时扮演了全局搜索的关键角色。作为一套基于 SSDP 和 HTTP 处理发现与控制的老牌协议,它依然是局域网互联互通的“基础设施”。 upnp_client 为 Flutter