跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
JavaScript大前端

Vue 项目前端国际化 i18n 实现指南

Vue 项目前端国际化 i18n 实现涉及安装 vue-i18n 依赖、创建语言包文件、配置 i18n 实例及在组件中调用翻译函数。支持中英文切换并持久化存储用户偏好,确保不同语言环境下界面文本正确显示。

赛博朋克发布于 2026/3/30更新于 2026/6/819 浏览
Vue 项目前端国际化 i18n 实现指南

解释与说明

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

核心概念是语言转换,让以其他语言作为母语的人能看懂前端中的文字。

常用中文简体(zh_CN)与英文(美国)(en_US)的转换,也可以添加中文繁体(zh_TW)等其他语言。

缩写的由来

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

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

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

项目使用

安装

  1. 打开控制台
  2. 进入前端的文件夹
cd web
  1. 使用下载安装命令
npm install vue-i18n

也可以使用 pnpm 或 yarn:

pnpm add vue-i18n
# 或
yarn add vue-i18n

配置

第一步:创建语言库

  1. 在 src 文件夹下创建一个文件夹 locales;
  2. 再在 locales 文件夹下创建要转换成的语言文件;
  3. 在 src 文件夹下创建 i18n.js 文件。

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

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

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

  1. 在 zh-CN.json 文件中添加代码:
{
  "common": {
    "confirm": "确定",
    "cancel": "取消",
    "pleaseEnterUsernameAndPassword": "请输入账号和密码",
    "loginSuccess": "登录成功",
    "loginFail": 
  
   
     
     
     
     
     
     
     
     
     
  

"登录失败"
}
,
"loginPage"
:
{
"title"
:
"XX 管理系统"
,
"userLogin"
:
"用户登录"
,
"username"
:
"账号"
,
"password"
:
"密码"
,
"usernamePlaceholder"
:
"请输入账号"
,
"passwordPlaceholder"
:
"请输入密码"
,
"languageLabel"
:
"语言"
,
"loginButton"
:
"登录"
,
"text1"
:
"如有疑问,请联系技术人员以提供支持。"
}
}

命名方法建议使用首个单词首字母小写,其余单词首字母大写,无空格,无连接线,无下划线。

需要注意的是,JSON 文件里不允许最后有逗号,否则会报错。

  1. 在 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."
  }
}
  1. 在 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,
  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 文件中的 script 标签顶部写入代码:

import { useI18n } from 'vue-i18n';

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

const { t } = useI18n();

示例:

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

第四步:在模板中使用 i18n

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

{{ $t('key') }}

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

例如登录的标题如下:

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

需要填入外面的大名称和里面的小名称,中间使用英文的点'.'来连接。

示例登录页 template 使用:

<template>
  <div>
    <img src="@/assets/Logo.png" alt="logo">
    <h1>{{ $t('loginPage.title') }}</h1>
    <h2>{{ $t('loginPage.userLogin') }}</h2>
    <input type="text" v-model="loginForm.username" :placeholder="$t('loginPage.usernamePlaceholder')">
    <button @click="debouncedLogin">{{ $t('loginPage.loginButton') }}</button>
  </div>
</template>

最后加上逻辑与样式的代码即可完成。

默认中文界面

文章配图

英文界面

文章配图

目录

  1. 解释与说明
  2. 项目使用
  3. 安装
  4. 或
  5. 配置
  • 💰 8折买阿里云服务器限时8折了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • FPGA Transformer 加速:从模型优化到硬件实现
  • AI 变现真相:为何学百种工具仍难盈利
  • OpenClaw 本地部署与 AI 助理搭建实战指南
  • LLaMaFactory 基于魔搭社区免费 GPU 微调大模型实战
  • 使用 Web Scraper 插件抓取知乎评论数据实战指南
  • Netty 主从 Reactor 多线程模型详解
  • 基于 Python OpenCV 的停车场车位检测与空余计数系统
  • VR 华夏神舟:沉浸式航天科普体验设备介绍
  • OpenClaw 大龙虾机器人:本地部署与飞书对接全攻略
  • Rust与WebAssembly深度实战:浏览器与Node.js 高性能应用
  • 新能源汽车实训系统:数字孪生与 VR/AR 技术架构
  • 从 vw/vh 到 clamp():前端响应式设计的痛点与进化
  • OpenClaw 本地部署与飞书机器人接入教程
  • Git 分布式版本控制系统:安装、配置与实战指南
  • 搜索二叉树、HashMap 与 HashSet 数据结构详解
  • ToDesk 内置 ToClaw AI 实现科技新闻日报自动化实战
  • Redis 哈希(Hash)深度解析:Field-Value 层级、原子性与内部编码
  • 大模型的 6 项核心技术:Transformer、预训练与 RLHF 等
  • 通义万相 2.1 文生视频模型部署与测试体验
  • 基于 SpringBoot 和 PostGIS 的应急运输事件影响分析

相关免费在线工具

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online