IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> vue3+ts+vite2+element-plus国际化(需要改进) -> 正文阅读

[JavaScript知识库]vue3+ts+vite2+element-plus国际化(需要改进)

1.安装element-plus,pinia,vue-i18n,js-cookie

npm install element-plus --save-dev

npm install? pinia?--save-dev

npm install vue-i18n --save-dev

npm install js-cookie --save-dev

2.在store中创建language.ts等

?此处的enLocalzhLocal为对应的国际化ts文件,请自己定义

import Cookies from 'js-cookie';
import { createI18n } from 'vue-i18n';
import elementEnLocale from 'element-plus/lib/locale/lang/en';
import elementZhLocale from 'element-plus/lib/locale/lang/zh-cn';

import enLocale from './lang/en';
import zhLocale from './lang/zh-cn';

const langKey = 'i18nLang-key';

const messages = {
    'en': {
        ...enLocale,
        ...elementEnLocale,
    },
    'zh': {
        ...zhLocale,
        ...elementZhLocale,
    }
};

export const getCurrentLanguage = () => {
    return Cookies.get(langKey);
};


export const setCurrentLanguage = (lang: string) => {
    return Cookies.set(langKey, lang);
};

export const getLocale = () => {
    const cookieLanguage = getCurrentLanguage();
    if (cookieLanguage) {
        return cookieLanguage;
    }
    const language = navigator.language.toLowerCase();
    const locales = Object.keys(messages);    
    for (const locale of locales) {
        if (language.indexOf(locale) > -1) {
            return locale;
        }
    }
    return 'zh';
};

const i18n = createI18n({
    locale: getLocale(),
    messages: messages
});

export default i18n;

下边的ts请自行创建,自行修改引入的路径即可?

import { defineStore } from 'pinia';
import { getCurrentLanguage, setCurrentLanguage } from '@/assets/language';

const useLanguage = defineStore({
    id: 'language-pinia',
    state: () => ({
        language: <string>{}
    }),

    getters: {
        getLanguage(): string {
            this.language = getCurrentLanguage() + "";
            return this.language;
        }
    },

    actions: {
        setLanguage(str: string) {
            this.language = str;
            setCurrentLanguage(this.language);
        }
    }
});

export default useLanguage;

3.在main.ts中注册element-plus并且配置国际化

import App from './App.vue';
import { createApp } from 'vue';
import elementPlus from 'element-plus';
// 引入国际化
import i18n from './assets/language/index';

const app = createApp(App);
// 设置element-plus国际化
app.use(i18n).use(elementPlus, {i18n: i18n.global.t });

4.增加切换国际化语言功能

<template>
    <div>
        <el-dropdown @command="handleCommand">
            <template #dropdown>
                <el-dropdown-menu>
                    <el-dropdown-item :disabled="language === 'zh'" command="zh">中文</el-dropdown-item>
                    <el-dropdown-item :disabled="language === 'en'" command="en">English</el-dropdown-item>
                </el-dropdown-menu>
            </template>
        </el-dropdown>
    </div>
</template>

<script lang="ts">
import router from '@/router';
import { ref, onMounted, defineComponent, computed } from 'vue';
import { ElMessage} from 'element-plus';
import { useI18n } from 'vue-i18n';
import useLanguage from '@/store/modules/language';

export default defineComponent({
    name: "UserInfo",
    setup() {
        const handleCommand = (command: string) => {
            switch (command) {
                case "zh":
                    changeLanguage(command);
                    break;
                case "en":
                    changeLanguage(command);
                    break;
            }
        };

        const setLanguageName = (lang: string) => {
            if (lang === undefined || lang === 'undefined' || lang === '' || lang === null || lang === 'zh') {
                langName.value = '中文';
            } else {
                langName.value = 'English';
            }
        };

        const language = computed(() => {
            return useLanguage().language;
        });

        const changeLanguage = (lang: string) => {
            locale.value = lang;
            useLanguage().setLanguage(lang);            
            setLanguageName(lang);
            ElMessage.success("切换语言成功!");
        };

        onMounted(() => {
            setLanguageName(language.value);
        });

        return {
            langName, language, handleCommand
        }
    }
});
</script>

4.ts及页面使用

ts中使用需要先引入再定义,使用t('xxx.xxx')即可获取国际化信息

import { useI18n } from 'vue-i18n';

export default () => {
    const { t } = useI18n();
    let importDataBtnText = ref<string>(t('button.import'));
}

对用的国际化定义ts

vue页面使用——$t('xxx.xxx')即可

5.测试国际化是否生效

?

注意:虽然这里切换语言成功,但是element-plus的分页组件并没跟着切换语言,而是需要F5刷新页面才行。?

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-05-27 17:16:04  更:2022-05-27 17:16:13 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年5日历 -2025/5/2 22:12:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码