index.ts 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. import type {
  2. ImportLocaleFn,
  3. LoadMessageFn,
  4. LocaleSetupOptions,
  5. SupportedLanguagesType,
  6. } from './typing';
  7. import type { App } from 'vue';
  8. import { i18n, loadI18nMessages, loadLocalesMap } from './i18n';
  9. const $t = i18n.global.t;
  10. let loadMessages: LoadMessageFn;
  11. async function loadLocaleMessages(lang: SupportedLanguagesType) {
  12. const mergeMessage = await loadMessages(lang);
  13. await loadI18nMessages(lang);
  14. i18n.global.mergeLocaleMessage(lang, mergeMessage);
  15. }
  16. async function setupI18n(app: App, options: LocaleSetupOptions = {}) {
  17. const { defaultLocale = 'zh-CN' } = options;
  18. // app可以自行扩展一些第三方库和组件库的国际化
  19. loadMessages = options.loadMessages || (async () => ({}));
  20. app.use(i18n);
  21. await loadLocaleMessages(defaultLocale);
  22. // 在控制台打印警告
  23. i18n.global.setMissingHandler((locale, key) => {
  24. if (options.missingWarn && key.includes('.')) {
  25. console.warn(
  26. `[intlify] Not found '${key}' key in '${locale}' locale messages.`,
  27. );
  28. }
  29. });
  30. }
  31. export { $t, i18n, loadLocaleMessages, loadLocalesMap, setupI18n };
  32. export type { CompileError } from '@intlify/core-base';
  33. export { useI18n } from 'vue-i18n';
  34. export type { ImportLocaleFn, LocaleSetupOptions, SupportedLanguagesType };
  35. export type { Locale } from 'vue-i18n';