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

vue element-plus 集成多语言

main.js中

// 引入i18n

import i18n from '@/i18n/index'

使用i18

app.use(i18n)

在App.vue中


<template><el-config-provider :locale="locale" namespace="el" size="small"><router-view /></el-config-provider>
</template><script setup>import { useLanguageStore } from "@/store/modules/language";
import zhCn from "element-plus/dist/locale/zh-cn.mjs";
import en from "element-plus/dist/locale/en.mjs";
import ru from "element-plus/dist/locale/ru.mjs";const languageStore = useLanguageStore();const locale = computed(() => {switch (languageStore.language) {case "zh":return zhCn;case "en":return en;case "ru":return ru;default:return zhCn; // 默认返回中文}
});</script>

store

import { defineStore } from 'pinia'
import { ref } from 'vue'export const useLanguageStore = defineStore('language', () => {// 状态const language = ref(localStorage.getItem('lang') || 'zh')// 操作const setLanguage = (lang) => {language.value = langlocalStorage.setItem('lang', lang)}return {language,setLanguage}
})

i18配置

index.ts

import { createI18n } from 'vue-i18n'
import zhCN from './lang/zh-CN'
import en from './lang/en'
import ru from './lang/ru'
const i18n = createI18n({legacy: false, // 启用 composition API 模式locale: sessionStorage.getItem('localeLang') || 'zhCN',messages: {zhCN,en,ru,},
})export default i18n;

ru.ts

// ru.js 俄语语言文件
export default {common: {yes: 'Да',no: 'Нет',requestFailed: 'Ошибка запроса',operationSuccess: 'Операция выполнена успешно',operationFailed: 'Ошибка выполнения операции',switchLanguage: 'Переключить язык'},login: {login: 'Войти',loggingIn: 'Вход в систему...',username: 'Имя пользователя',password: 'Пароль',rememberPwd: 'Запомнить меня',forgotPwd: 'Забыли пароль?',noAccount: 'Нет аккаунта?',registerNow: 'Зарегистрироваться',agreeAgreement: 'Я прочитал и согласен с',agreement: 'Пользовательским соглашением',phone: 'Номер телефона',code: 'Код подтверждения',sendCode: 'Отправить код',resendCode: 'Отправить повторно',countdown: 'сек до повтора',loginAccount: 'Вход по аккаунту',loginPhone: 'Вход по телефону',inputUsername: 'Введите имя пользователя',inputPassword: 'Введите пароль',inputPhone: 'Введите номер телефона',inputRightPhone: 'Введите корректный номер телефона',inputCode: 'Введите код подтверждения',inputRightCode: 'Введите корректный код подтверждения',loginSuccess: 'Вход выполнен успешно',forceLoginTitle: 'Принудительный вход?',forceLoginContent: 'Этот аккаунт уже используется на другом устройстве. Выполнить принудительный вход?',codeSent: 'Код подтверждения отправлен',invalidPhoneFormat: 'Неверный формат номера телефона',agreeFirst: 'Сначала примите пользовательское соглашение',copyright: '© 2024-2025 docod.cloud Все права защищены.'},validation: {required: 'Поле {field} обязательно',phoneInvalid: 'Неверный формат номера телефона',agreementRequired: 'Необходимо принять пользовательское соглашение'}
}

zh-cn.ts和en.ts 也是一样
 

在切换的LanguageSwitcher中

<template><el-dropdown trigger="click" @command="handleLanguageChange"><el-button type="text" class="lang-switcher">{{ languageText[currentLanguage] }}<el-icon class="el-icon--right"><arrow-down /></el-icon></el-button><template #dropdown><el-dropdown-menu><el-dropdown-item command="zh" :disabled="currentLanguage === 'zh'">中文</el-dropdown-item><el-dropdown-item command="en" :disabled="currentLanguage === 'en'">English</el-dropdown-item><el-dropdown-item command="ru" :disabled="currentLanguage === 'ru'">Русский</el-dropdown-item></el-dropdown-menu></template></el-dropdown>
</template><script setup>
import { computed } from "vue";
import { useI18n } from "vue-i18n";
import { ElMessage } from "element-plus";
import { ArrowDown } from "@element-plus/icons-vue";
import { useLanguageStore } from "@/store/modules/language";const { locale } = useI18n();
const languageStore = useLanguageStore();// 语言显示文本
const languageText = {zh: "中文",en: "EN",ru: "RU",
};// 语言切换提示
const languageMessages = {zh: "语言已切换为中文",en: "Language switched to English",ru: "Язык изменен на русский",
};// 从 Pinia 获取当前语言
const currentLanguage = computed(() => languageStore.language);// 初始化设置语言
locale.value = currentLanguage.value;// 切换语言
const handleLanguageChange = (language) => {languageStore.setLanguage(language);locale.value = language;ElMessage.success(languageMessages[language]);
};
</script><style scoped>
.lang-switcher {padding: 0 12px;color: var(--el-text-color-regular);font-size: 14px;display: inline-flex;align-items: center;
}
.lang-switcher:hover {color: var(--el-color-primary);
}
</style>

效果如下

http://www.xdnf.cn/news/584443.html

相关文章:

  • SQLynx:一款跨平台的企业级数据库管理工具
  • pdf图片导出(Visio和Origin)
  • 2025口语App实测Top5!练习口语app真实口碑
  • 可视化图解算法43:数组中的逆序对
  • 鸿蒙Flutter实战:24-混合开发详解-4-初始化Flutter
  • 鸿蒙Flutter实战:25-混合开发详解-5-跳转Flutter页面
  • [Flutter]Completer和compute
  • 计量单片机 RN8302:特性、使用与应用
  • 【人工智障生成日记1】从零开始训练本地小语言模型
  • 【无标题】西门子S7-1500PLC与西门子V90 PN伺服通讯控制项目程序项目程序,共有8轴,编码器信号直接输入到变频器内。
  • 系统架构设计(十八):ATAM
  • 《棒球百科》棒球运动规则·棒球1号位
  • 【竖排繁体识别】如何将竖排繁体图片文字识别转横排繁体,转横排简体导出文本文档,基于WPF和腾讯OCR的实现方案
  • 免费轻量便携截图 录屏 OCR 翻译四合一!提升办公效率
  • 解决weman框架redis报错:Class “llluminatelRedis\RedisManager“ not found
  • 【Java高阶面经:数据库篇】18、分布式事务:如何在分库分表中实现高性能与一致性?
  • 零基础设计模式——第二部分:创建型模式 - 原型模式
  • HCIP(广域网)
  • Normalized Blind Deconvolution论文阅读
  • UART串口两种连接方式
  • 笔记本6GB本地可跑的图生视频项目(FramePack)
  • EtpBot:安卓自动化脚本开发神器
  • 了解Android studio 初学者零基础推荐(2)
  • 正则表达式篇
  • element ui 表格实现单选
  • v2.0 技术篇目录-研究生如何选择编程技术
  • iOS工厂模式
  • uniapp-商城-65-shop(1-品牌信息显示,将数据库信息同步到vuex的state)
  • 如何构建一个简单的AI Agent(极简指南)
  • 深度学习入门到实战:用PyTorch打通数学、张量与模型训练全链路​