/* * @Author: wei.li * @Date: 2021-11-17 16:02:30 * @LastEditors: wei.li * @LastEditTime: 2024-07-30 09:34:05 * @Description: file content */ // 多组件库的国际化和本地项目国际化兼容 import type { App, WritableComputedRef } from 'vue'; import { createI18n } from 'vue-i18n'; import { storageLocal } from '@utogether/utils'; import { merge } from 'xe-utils'; import { VxeUI } from 'vxe-table'; import { responsiveStorageNameSpace } from '../../config'; import zh from './zh'; import en from './en'; import { kMENUEN, kMENUZH } from '../../contant'; const files = import.meta.glob('./module/*.ts', { eager: true }); // console.log('zh-----', zh); const modules = {}; for (const path in files) { modules[path.replace(/(\.\/module\/|\.ts)/g, '')] = files[path]['default']; } const moduleList = Object.keys(modules) .filter(mod => modules[mod]) .map(mod => modules[mod]); const messages = { zh: { ...storageLocal.getItem(kMENUZH), message: merge(zh, ...moduleList.map(v => v.zh.message)) }, en: { ...storageLocal.getItem(kMENUEN), message: Object.assign(en, ...moduleList.map(v => v.en.message)) } }; let i18n = null; export function useI18n(app: App, lang = { messages: {} }) { console.log('message=====', messages); i18n = createI18n({ legacy: false, locale: storageLocal.getItem(`${responsiveStorageNameSpace()}locale`)?.locale ?? 'zh', fallbackLocale: 'en', globalInjection: true, messages: merge(messages, lang.messages) }); VxeUI.setLanguage('zh-CN'); app.use(i18n); } export const geti18n = () => { return i18n; }; /** * 国际化转换工具函数 * @param message message * @param isI18n 如果true,获取对应的消息,否则返回本身 * @returns message */ export function transformI18n(message: any = '', isI18n: boolean | unknown = true) { if (!message) { return ''; } // 处理存储动态路由的title,格式 {zh:"",en:""} if (typeof message === 'object') { const locale: string | WritableComputedRef | any = i18n.global.locale; return message[locale.value]; } if (isI18n) { //@ts-ignore return i18n.global.t.call(i18n.global, message); } else { return message; } }