Vue3 中使用 i18n

news2025/6/7 1:03:00

Vue3 中使用i18n

在 Vue 3 中使用国际化(i18n)可以通过官方的 vue-i18n 库来实现。vue-i18n 是专门为 Vue 应用设计的国际化解决方案,支持多语言切换、动态内容插值等功能。

以下是如何在 Vue 3 中使用 vue-i18n 的详细步骤:


1. 安装 vue-i18n

使用 npm 或 yarn 安装 vue-i18n

npm install vue-i18n

或者:

yarn add vue-i18n

2. 创建语言文件

在项目中创建一个文件夹(例如 locales),用于存储不同语言的翻译内容。

示例语言文件:

locales/en.json(英文):

{
  "welcome": "Welcome, {{name}}!",
  "language": "English"
}

locales/zh.json(中文):

{
  "welcome": "欢迎,{{name}}!",
  "language": "中文"
}

3. 初始化 vue-i18n

在 Vue 3 中,vue-i18n 需要通过 createI18n 方法初始化。

示例代码:

main.js

import { createApp } from 'vue';
import { createI18n } from 'vue-i18n';
import App from './App.vue';

// 导入语言文件
import en from './locales/en.json';
import zh from './locales/zh.json';

// 创建 i18n 实例
const i18n = createI18n({
  locale: 'en', // 设置默认语言
  fallbackLocale: 'en', // 设置回退语言
  messages: {
    en, // 英文语言包
    zh  // 中文语言包
  }
});

// 创建 Vue 应用并挂载 i18n
const app = createApp(App);
app.use(i18n);
app.mount('#app');

4. 在组件中使用 vue-i18n

在 Vue 组件中,可以通过 $t 方法访问翻译内容。

示例代码:

App.vue

<template>
  <div>
    <h1>{{ $t('welcome', { name: 'John' }) }}</h1>
    <p>{{ $t('language') }}</p>
    <button @click="changeLanguage('zh')">切换到中文</button>
    <button @click="changeLanguage('en')">Switch to English</button>
  </div>
</template>

<script>
export default {
  methods: {
    changeLanguage(lang) {
      this.$i18n.locale = lang; // 动态切换语言
    }
  }
};
</script>
运行结果:
  • 默认显示英文:Welcome, John!
  • 点击按钮后切换到中文:欢迎,John!

5. 使用 Composition API

如果你使用 Vue 3 的 Composition API,可以通过 useI18n Hook 来访问 vue-i18n 的功能。

示例代码:

App.vue

<template>
  <div>
    <h1>{{ t('welcome', { name: 'John' }) }}</h1>
    <p>{{ t('language') }}</p>
    <button @click="changeLanguage('zh')">切换到中文</button>
    <button @click="changeLanguage('en')">Switch to English</button>
  </div>
</template>

<script>
import { useI18n } from 'vue-i18n';

export default {
  setup() {
    const { t, locale } = useI18n(); // 使用 useI18n Hook

    const changeLanguage = (lang) => {
      locale.value = lang; // 动态切换语言
    };

    return {
      t,
      changeLanguage
    };
  }
};
</script>

6. 处理日期和数字的本地化

vue-i18n 支持日期和数字的本地化处理,可以通过 datetimeFormatsnumberFormats 配置。

示例代码:

main.js

const i18n = createI18n({
  locale: 'en',
  fallbackLocale: 'en',
  messages: { en, zh },
  datetimeFormats: {
    en: {
      short: {
        year: 'numeric', month: 'short', day: 'numeric'
      }
    },
    zh: {
      short: {
        year: 'numeric', month: 'long', day: 'numeric'
      }
    }
  },
  numberFormats: {
    en: {
      currency: {
        style: 'currency', currency: 'USD'
      }
    },
    zh: {
      currency: {
        style: 'currency', currency: 'CNY'
      }
    }
  }
});
在组件中使用:
<template>
  <div>
    <p>{{ $d(new Date(), 'short') }}</p>
    <p>{{ $n(123456.78, 'currency') }}</p>
  </div>
</template>

7. 动态加载语言文件

如果你的项目支持多种语言,可能不希望一次性加载所有语言文件。可以使用动态加载的方式来优化性能。

示例代码:

动态加载语言文件

const loadLanguageAsync = async (lang) => {
  const messages = await import(`./locales/${lang}.json`);
  i18n.global.setLocaleMessage(lang, messages.default);
  i18n.global.locale = lang;
};

在组件中调用:

methods: {
  async changeLanguage(lang) {
    await loadLanguageAsync(lang);
  }
}

8. vue-i18n 的最佳实践

  1. 使用占位符
    • 在翻译内容中使用占位符(如 {{name}}),以便动态插入内容。
  2. 避免硬编码
    • 所有用户可见的文本都应该存储在语言文件中,避免直接写在代码中。
  3. 支持动态加载
    • 对于大型项目,动态加载语言文件可以减少初始加载时间。
  4. 测试多语言支持
    • 在不同语言环境下测试应用,确保翻译内容正确且布局不会因文本长度变化而破坏。
  5. 处理日期和货币
    • 使用 datetimeFormatsnumberFormats 配置处理日期和货币的本地化。

总结

在 Vue 3 中使用 vue-i18n 是实现国际化的最佳选择。通过语言文件、动态切换和本地化处理,开发者可以轻松地为应用添加多语言支持,从而提升用户体验并扩大用户群体。无论是使用 Options API 还是 Composition API,vue-i18n 都能很好地适配 Vue 3 的开发模式。

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

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

相关文章

Tailwind CSS 实战:基于 Kooboo 构建 AI 对话框页面(七):消息框交互功能添加

Tailwind CSS 实战&#xff0c;基于Kooboo构建AI对话框页面&#xff08;一&#xff09; Tailwind CSS 实战&#xff0c;基于Kooboo构建AI对话框页面&#xff08;二&#xff09;&#xff1a;实现交互功能 Tailwind CSS 实战&#xff0c;基于 Kooboo 构建 AI 对话框页面&#x…

【计算机网络】网络层IP协议与子网划分详解:从主机通信到网络设计的底层逻辑

&#x1f525;个人主页&#x1f525;&#xff1a;孤寂大仙V &#x1f308;收录专栏&#x1f308;&#xff1a;计算机网络 &#x1f339;往期回顾&#x1f339;&#xff1a; 【计算机网络】传输层TCP协议——协议段格式、三次握手四次挥手、超时重传、滑动窗口、流量控制、 &…

基于WSL搭建Ubnutu 20.04.6 LTS(二)-部署Docker环境

Docker是一组平台即服务&#xff08;PaaS&#xff09;的产品。它基于操作系统层级的虚拟化技术&#xff0c;将软件与其依赖项打包为容器。托管容器的软件称为Docker引擎。Docker能够帮助开发者在轻量级容器中自动部署应用程序&#xff0c;并使得不同容器中的应用程序彼此隔离&a…

【图像处理入门】6. 频域图像处理:傅里叶变换与滤波的奥秘

摘要 频域图像处理通过傅里叶变换将图像从空间域转换到频率域,为图像增强、去噪、压缩等任务提供全新视角。本文将深入解析傅里叶变换原理,介绍低通、高通滤波的实现方式,结合OpenCV和Python代码展示频域滤波在去除噪声、增强边缘中的应用,帮助读者掌握图像频域处理的核心…

基于开源AI智能名片链动2+1模式S2B2C商城小程序的生态农庄留存运营策略研究

摘要&#xff1a;本文聚焦于生态农庄运营中的游客留存问题&#xff0c;以村长与乡亲们吸引游客进村为背景&#xff0c;深入探讨如何借助开源AI智能名片链动2 1模式S2B2C商城小程序实现游客的有效留存。通过分析该小程序在信息传递、服务整合、营销激励等方面的优势&#xff0c…

Jenkins实现自动化部署Springboot项目到Docker容器(Jenkinsfile)

Jenkins实现自动化部署Springboot项目到Docker容器 引言:为什么需要自动化部署? 在软件开发中,频繁的手动部署既耗时又容易出错。通过 Docker + Jenkins + Git 的组合,您可以实现: ✅ 一键部署:代码推送后自动构建和部署🐳 环境一致性:Docker 确保开发、测试、生产环…

【Linux】Git原理与使用

编程不仅是解决问题的艺术&#xff0c;更是对复杂性进行优雅管理的哲学。 前言 这是我自己学习Linux系统编程的第三篇笔记。后期我会继续把Linux系统编程笔记开源至博客上。 上一期笔记是关于Vim文本编辑器知识&#xff1a; 【Linux】Vim文本编辑器-CSDN博客https://blog.csdn…

A*算法实现原理以及实现步骤(C++)

算法原理&#xff1a; A*算法是一种启发式搜索算法&#xff0c;用于在图中寻找最短路径。它结合了Dijkstra算法的确保最短路径的优点和贪心最佳优先搜索的高效性。其核心在于使用一个评估函数&#xff1a; f(n) g(n) h(n) 其中&#xff1a; - g(n) 表示从起点到节点n的实际代…

Devops自动化运维---py基础篇一

python基础篇 1、基本数据类型 2、算术运算符 3、变量 变量&#xff1a;编程语言中能储存结果或能表示值的抽象概念 用途&#xff1a;用一段数据赋予一个简短、易于记忆的名字&#xff0c;方便重复使用3.1 格式转化变量 操作符号描述%s字符串%d整数%f浮点数 实例&#xff1…

平安养老险蚌埠中心支公司开展金融宣教活动

近日&#xff0c;平安养老保险股份有限公司&#xff08;以下简称“平安养老险”&#xff09;蚌埠中心支公司&#xff0c;走进某合作企业开展金融教育宣传活动。 活动现场&#xff0c;平安养老险蚌埠中心支公司工作人员通过发放宣传手册和小礼品等方式&#xff0c;向企业员工普…

Redisson简明教程—你家的锁芯该换了

1.简介 各位攻城狮们&#xff0c;你还在使用原生命令来上锁么&#xff1f;看来你还是不够懒&#xff0c;饺子都给你包好了&#xff0c;你非要吃大饼配炒韭菜&#xff0c;快点改善一下“伙食”吧&#xff0c;写代码也要来点幸福感。今天咱们就来聊聊Redisson提供的各种锁&#…

48V带极性反接保护-差共模浪涌防护方案

在工业自动化&#xff08;电动机驱动 / 工业机器人&#xff09;、交通基础设施&#xff08;充电桩 / 车载电子&#xff09;、安防系统&#xff08;监控摄像头 / 门禁&#xff09;、储能设备&#xff08;BMS / 离网控制器&#xff09;等领域&#xff0c;DC48V 电源因安全特低电压…

Python----目标检测(使用YOLO 模型进行线程安全推理和流媒体源)

一、线程安全推理 在多线程环境中运行YOLO 模型需要仔细考虑&#xff0c;以确保线程安全。Pythons threading 模块允许您同时运行多个线程&#xff0c;但在这些线程中使用YOLO 模型时&#xff0c;需要注意一些重要的安全问题。本页将指导您创建线程安全的YOLO 模型推理。 1.1、…

jvm学习第1day jvm简介,栈溢出、堆溢出

jvm学习第1day jvm简介&#xff0c;栈溢出、堆溢出 jvm简介栈线程安全栈溢出线程运行诊断堆堆溢出 方法区方法区内存溢出常量池和运行时常量池 jvm简介 jvm 是编译后的字节码文件运行的环境&#xff0c; 因此各个平台有了jvm可以运行java.class文件&#xff0c;这是Java跨平台…

用广告维持的免费 AI 图像生成工具(个人项目分享)

用广告维持的免费 AI 图像生成工具&#xff08;个人项目分享&#xff09; 免费 AI 图像生成工具网址&#xff1a;https://aiart.gcc.ac.cn/ 最近做了一个 AI 图像生成器&#xff0c;主要目标是“尽量简单”&#xff1a; 打开网页就能用不用注册、不用登录免费&#xff0c;不…

分析Web3下数据保护的创新模式

在这个信息爆炸的时代&#xff0c;我们正站在 Web3 的门槛上&#xff0c;迎接一个以去中心化、用户主权和数据隐私为核心的新时代。Web3 不仅仅是技术的迭代&#xff0c;它更是一场关于数据权利和责任的结构性变革。本文将探讨 Web3 下数据保护的创新模式&#xff0c;以期为用户…

​减少交通拥堵、提高效率、改善交通安全的智慧交通开源了。

智慧交通视觉监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒&#xff0c;省去繁琐重复的适配流程&#xff0c;实现芯片、算法、应用的全流程组合&#xff0c;从而大大减少企业级应用约95%的开发成本。用户只需在界面上…

协议融合驱动效能跃升:Modbus转Ethernet IP的挤出吹塑机应用

在现代工业自动化领域&#xff0c;Modbus作为一种串行通信协议&#xff0c;其稳定性和简单性被广泛应用于各种工控设备中。但随着技术的进步&#xff0c;对于更高速、更远传输距离的需求日益增长&#xff0c;这就需要将Modbus协议通过以太网进行传输&#xff0c;即实现Modbus T…

bug 记录 - 使用 el-dialog 的 before-close 的坑

需求说明 弹窗中内嵌一个 form 表单 原始代码 <script setup lang"ts"> import { reactive, ref } from "vue" import type { FormRules } from element-plus const ruleFormRef ref() interface RuleForm {name: stringregion: number | null } …

Next.js 中间件鉴权绕过漏洞 CVE-2025-29927

前言:CVE-2025-29927 是一个影响 Next.js 的严重漏洞&#xff0c;源于开发者信任了客户端请求中携带的 X-Middleware-Rewrite 头部字段。攻击者可以手动构造该头部&#xff0c;实现绕过中间件逻辑&#xff0c;访问本应受保护的资源或 API。 影响版本&#xff1a;Next.js < …