aboutsummaryrefslogtreecommitdiff
path: root/src/plugins/i18n.plugin.ts
blob: 8e0b2d3373bb890f019310dd8f5e5420318cb467 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import type { Plugin } from 'vue';
import { createI18n } from 'vue-i18n';
import baseMessages from '@intlify/unplugin-vue-i18n/messages';
import _ from 'lodash';
import { parse as parseYaml } from 'yaml';

const i18nFiles = import.meta.glob('../tools/*/locales/**.yml', { as: 'raw' });

const messagesByTools = await Promise.all(_.map(i18nFiles, async (fileDescriptor, path) => {
  const [, locale] = path.match(/\.\/tools\/.*?\/locales\/(.*)\.ya?ml$/i) ?? [];
  const content = parseYaml(await fileDescriptor());

  return { [locale]: content };
}));

const messages = _.merge(
  baseMessages,
  _.merge({}, ...messagesByTools),
);

const i18n = createI18n({
  legacy: false,
  locale: 'en',
  messages,
});

export const i18nPlugin: Plugin = {
  install: (app) => {
    app.use(i18n);
  },
};