UNPKG

tccc-vue-uikit

Version:

TCCC Vue3 UIKit

91 lines (79 loc) 1.86 kB
import { createI18n, useI18n } from 'vue-i18n'; import messages from '../../locales'; class TUIi18n { public messages = { en: {}, zh_cn: {}, }; public i18n: any; static instance: TUIi18n; constructor(messages: any) { this.messages = messages; } /** * 获取 TUIi18n 实例 * * @returns {TUIi18n} */ static getInstance() { if (!TUIi18n.instance) { TUIi18n.instance = new TUIi18n(messages); } return TUIi18n.instance; } /** * 注入需要国际化的词条 * * @param {Object} messages 数据对象 * @returns {messages} 全部国际化词条 */ public provideMessage(messages: any) { this.messages.en = { ...this.messages.en, ...messages.en }; this.messages.zh_cn = { ...this.messages.zh_cn, ...messages.zh_cn }; return this.messages; } /** * 使用国际化 * * @returns {useI18n} 国际化使用函数 */ public useI18n() { return useI18n(); } /** * 挂载到 vue 实例的上 * * @param {app} app vue的实例 */ static install(app: any) { const that = TUIi18n.getInstance(); const lang = navigator.language.substr(0, 2); // const lang = 'zh'; that.i18n = createI18n({ legacy: false, // 使用Composition API,这里必须设置为false globalInjection: true, global: true, locale: lang === 'zh' ? 'zh_cn' : lang, fallbackLocale: 'zh_cn', // 默认语言 messages: that.messages, }); app.use(that.i18n); } /** * 挂载到 TUICore * * @param {TUICore} TUICore TUICore实例 */ static plugin(TUICore: any) { TUICore.config.i18n = TUIi18n.getInstance(); } } /** * 国际化标识 * * @returns {locale} 国际化标识 */ export function useI18nLocale() { return TUIi18n.getInstance().i18n.global.locale; } export default TUIi18n;