mirror of
https://github.com/WeBankFinTech/fes.js.git
synced 2025-08-12 06:39:48 +08:00
94 lines
2.6 KiB
JavaScript
94 lines
2.6 KiB
JavaScript
import { readFileSync } from 'fs';
|
|
import { join } from 'path';
|
|
import { name } from '../package.json';
|
|
|
|
const namespace = 'plugin-locale';
|
|
|
|
export default (api) => {
|
|
const {
|
|
utils: { Mustache },
|
|
} = api;
|
|
|
|
api.describe({
|
|
key: 'locale',
|
|
config: {
|
|
schema(joi) {
|
|
return joi.object();
|
|
},
|
|
default: {},
|
|
onChange: api.ConfigChangeType.regenerateTmpFiles,
|
|
},
|
|
});
|
|
|
|
const { getLocales } = require('./utils');
|
|
|
|
api.addRuntimePluginKey(() => 'locale');
|
|
|
|
const absoluteFilePath = join(namespace, 'core.js');
|
|
|
|
const absRuntimeFilePath = join(namespace, 'runtime.js');
|
|
|
|
function getLocaleFileBasePath() {
|
|
return join(api.paths.absSrcPath, api.config.singular ? 'locale' : 'locales');
|
|
}
|
|
|
|
// 监听 locale 文件改变,重新生成文件
|
|
api.addTmpGenerateWatcherPaths(getLocaleFileBasePath);
|
|
|
|
api.onGenerateFiles(() => {
|
|
// .fes配置
|
|
const userConfig = {
|
|
locale: 'zh-CN', // default locale
|
|
fallbackLocale: 'zh-CN', // set fallback locale
|
|
legacy: false,
|
|
baseNavigator: true, // 开启浏览器语言检测
|
|
...api.config.locale,
|
|
};
|
|
|
|
const localeConfigFileBasePath = getLocaleFileBasePath();
|
|
|
|
const { files, locales } = getLocales(localeConfigFileBasePath);
|
|
|
|
const { baseNavigator, ...otherConfig } = userConfig;
|
|
|
|
api.writeTmpFile({
|
|
path: join(namespace, 'locales.js'),
|
|
content: Mustache.render(readFileSync(join(__dirname, 'runtime/locales.js.tpl'), 'utf-8'), {
|
|
REPLACE_IMPORTS: files,
|
|
REPLACE_LOCALES: locales.map((item) => ({
|
|
locale: item.locale,
|
|
importNames: item.importNames.join(', '),
|
|
})),
|
|
}),
|
|
});
|
|
|
|
api.writeTmpFile({
|
|
path: absoluteFilePath,
|
|
content: Mustache.render(readFileSync(join(__dirname, 'runtime/core.js.tpl'), 'utf-8'), {
|
|
REPLACE_DEFAULT_OPTIONS: JSON.stringify(otherConfig, null, 2),
|
|
BASE_NAVIGATOR: baseNavigator,
|
|
VUE_I18N_PATH: 'vue-i18n',
|
|
}),
|
|
});
|
|
|
|
api.copyTmpFiles({
|
|
namespace,
|
|
path: join(__dirname, 'runtime'),
|
|
ignore: ['.tpl'],
|
|
});
|
|
});
|
|
|
|
api.addPluginExports(() => [
|
|
{
|
|
specifiers: ['useI18n', 'locale'],
|
|
source: absoluteFilePath,
|
|
},
|
|
]);
|
|
|
|
api.addRuntimePlugin(() => `@@/${absRuntimeFilePath}`);
|
|
|
|
api.addConfigType(() => ({
|
|
source: name,
|
|
}));
|
|
};
|