B02-国际化语言配置

🧑‍🎓 个人主页Silence Lamb
📖 本章内容:【国际化语言配置


Silence-Vitev 1.0.0

基于VITE前端快速开发框架

在这里插入图片描述

star star star star star star


一、相关的工具类

  • 🍖常用工具类src\utils\modules\common.js
/**
 * @Description  : 常用工具类
 * @Author       : SilenceLamb
 * @Version      : V1.0.0
 */
import {useSettingsStore} from '@/store/modules/settings';

export default {
    /**
     * @Description 获取lang语言设置
     * @returns {string} 语言种类
     */
    getLanguage() {
        const siteConfig = useSettingsStore();
        if (siteConfig) {
            return siteConfig.siteLanguage;
        } else {
            return 'zh';
        }
    },
    /**
     * @Description 设置语言种类
     * @param {string} lang 语言
     */
    setLanguage(lang) {
        const siteConfig = useSettingsStore();
        siteConfig.siteLanguage = lang;
    },
    /**
     * @Description  : 设置网站标题
     * @param webTitle
     */
    setSiteTitle(webTitle: string) {
        const siteConfig = useSettingsStore();
        useTitle().value = `${webTitle}${siteConfig.siteTitle ? ' 🌳 ' + siteConfig.siteTitle : ''}`;
    },
    /**
     * @Description 获取最后一个文件夹
     * @param {string} filePath
     * @returns {string} fileName 子文件夹名
     */
    getLastFileName(filePath) {
        return filePath.substring(0, filePath.lastIndexOf('/')).split('/').pop();
    },

    /**
     * @Description 获取文件名
     * @param {string} filePath
     * @returns {string} fileName 文件名
     */
    getFileName(filePath) {
        // 将路径拆分为数组
        const parts = filePath.split('/'),
            // 获取数组中的最后一个元素
            fileName = parts[parts.length - 1];
        // 获取文件名并返回

        return fileName.replace('.ts', '');
    },
};

二、语言切换组件

  • 🛞切换语言组件src\components\LangSelect
<!--
 * @Description  : 语言切换
 * @Author       : SilenceLamb
 * @Version      : V1.0.0
-->
<template>
    <div>
        <a-dropdown @click.prevent>
            <svg-icon name="language" class="icon" />
            <template #overlay>
                <a-menu @click="handleSetLanguage">
                    <a-menu-item :disabled="language === 'zh'" key="zh">
                        {{ $t('language.Chinese') }}
                    </a-menu-item>
                    <a-menu-item :disabled="language === 'en'" key="en">
                        {{ $t('language.English') }}
                    </a-menu-item>
                </a-menu>
            </template>
        </a-dropdown>
    </div>
</template>

<script setup lang="ts">
import common from '@/utils/modules/common';
import { localeLading } from '@/language';
let { locale, messages } = useI18n();
const language = computed(() => {
    return common.getLanguage();
});

/**
 * @Description    : 切换语言操作-只加载单个语言包
 * @param           {string} lang 语言种类
 */
function handleSetLanguage({ key }) {
    common.setLanguage(key);
    const message = localeLading(key);
    messages.value[key] = message[key];
    locale.value = key;
}
</script>

三、国际化配置

3.1🌳【语言资源包】

  • 🌳中文src\language\modules\utils\zh\index.js
/*
 * @Description  : 国际化资源-中文
 * @Author       : SilenceLamb
 * @Version      : V1.0.0
 */
export default {
    /**
     * @Description    : language.js
     */
    language: {
        Chinese: '中文',
        English: '英文',
    },
}
  • 🌳英文src\language\modules\utils\en\index.js
/*
 * @Description  : 国际化资源-英文
 * @Author       : SilenceLamb
 * @Version      : V1.0.0
 */
export default {
    /**
     * @Description    : language.js
     */
    language: {
        Chinese: 'Chinese',
        English: 'English',
    },
}

3.2🌳【国际化配置】

  • 🌳加载语言资源src\language\index.js
/**
 * @Description  : 加载语言包
 * @Author       : SilenceLamb
 * @Version      : V1.0.0
 */
import { createI18n } from 'vue-i18n';
import common from '@/utils/modules/common';
import antEnLocale from 'ant-design-vue/lib/locale/es_ES';
import antZHLocale from 'ant-design-vue/es/locale/zh_CN';

/**
 *  准备要合并的语言包
 * @type {{en: *[], "zh-cn": *[]}}
 */
const assignLocale: any = {
    zh: [antZHLocale],
    en: [antEnLocale],
};
export let i18n: {
    global;
};
/**
 * @Description    : 加载在 modules 目录中动态加载语言包
 * @return          {{}} 语言源
 */
export function localeLading(locale: string) {
    const messages = {
        zh: [],
        en: [],
    };
    const modulesFiles = import.meta.glob('./modules/**/**/*.ts', {
        eager: true,
    });
    for (const filePath in modulesFiles) {
        const localeMessage: any = modulesFiles[filePath].default;
        let fileName: String;
        fileName = common.getLastFileName(filePath);
        //合并语言包
        assignLocale[fileName].push(localeMessage);
        Object.assign(messages[locale], ...assignLocale[locale]);
    }

    return messages;
}
export default {
    install(app) {
        const locale = common.getLanguage();
        i18n = new createI18n({
            locale: locale,
            legacy: false, // 让 setup 函数可以通过 t 访问
            globalInjection: true, // 让 template 可以像 vue2 那样使用 $t 来访问
            fallbackFormat: 'en',
            messages: localeLading(locale),
        });
        app.use(i18n);
    },
};
  • 🌳全局引入src\main.js
import { createApp } from 'vue'
import App from './App.vue'

import i18n from '@/language' // 我是把i18n单独放一个文件夹,这里是引用

const app = createApp(App)
app.use(i18n)

app.config.productionTip = false // 阻止 vue 在启动时生成生产提示
app.mount('#app')

四、使用国际化

4.1🍑【组件中使用】

<template>
    <div class="app-container">
        {{ t('language.Chinese') }}
        <a-button @click="getMessage">按钮</a-button>
    </div>
</template>
<script setup lang="ts">

const { t } = useI18n();
function getMessage(){
    console.log(t('language.Chinese'));
}
</script>

4.2🍑【JS文件使用】

    /**
     * @Description  : 根据系统时间获取问候语
     */
    getGreet() {
        const now = new Date();
        const hour = now.getHours();
        let greet = '';

        if (hour < 5) {
            greet = i18n.global.t('common.Late at night');
        } else if (hour < 9) {
            greet = i18n.global.t('common.Good morning') + i18n.global.t('common.welcome back');
        } else if (hour < 12) {
            greet = i18n.global.t('common.Good morning') + i18n.global.t('common.welcome back');
        } else if (hour < 14) {
            greet = i18n.global.t('common.Good noon') + i18n.global.t('common.welcome back');
        } else if (hour < 18) {
            greet = i18n.global.t('common.Good afternoon') + i18n.global.t('common.welcome back');
        } else if (hour < 24) {
            greet = i18n.global.t('common.Good evening') + i18n.global.t('common.welcome back');
        } else {
            greet = i18n.global.t('common.Hello') + i18n.global.t('common.welcome back');
        }
        return greet;
    },

4.3🍑 【菜单中使用】

在这里插入图片描述

/**
* 菜单标题
* @param title 标题
* @return {*} title |  this.$t(`router.` + title)
*/
routerTitle(title) {
   if (this.$t(`router.` + title)) {
       return this.$t(`router.` + title)
   } else {
       return title
   }
},

4.4🍑【手动切换语言】

<script setup lang="ts">
import common from '@/utils/modules/common';
import { localeLading } from '@/language';
let { locale, messages } = useI18n();
const language = computed(() => {
    return common.getLanguage();
});

/**
 * @Description    : 切换语言操作-只加载单个语言包
 * @param           {string} lang 语言种类
 */
function handleSetLanguage({ key }) {
    common.setLanguage(key);
    const message = localeLading(key);
    messages.value[key] = message[key];
    locale.value = key;
}
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Silence Lamb

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值