@alauda-fe/common
Version:
Alauda frontend team common codes.
76 lines • 11.1 kB
JavaScript
import { FALLBACK_LANGUAGE } from './constants';
import { getUserLanguage, isBuiltInLanguage, loadAvailableLanguages, } from './i18n-config';
export class I18nAssetsLoader {
constructor(options) {
this.options = options;
this.assetsStore = {};
}
async loadI18n(language) {
const allAssets = await Promise.all([
...(this.options.modules || [])
.reverse()
.map(module => replaceTemplate(`/console-i18n/{{ language }}/${module}.json`, {
language,
}))
.map(filePath => this.fetchI18nFile(filePath)),
...(this.options.files || []).reverse().map(file => {
const filePath = isBuiltInLanguage(language)
? replaceTemplate(file.path, { language, name: file.name })
: replaceTemplate(`/console-i18n/{{ language }}/${file.name}.json`, {
language,
});
return this.fetchI18nFile(filePath).then(i18nObj => file.scope ? { [file.scope]: i18nObj } : i18nObj);
}),
]);
this.assetsStore[language] = Object.values(allAssets).reduce((acc, curr) => Object.assign(acc, curr), {});
return this.assetsStore[language];
}
getLoadedLanguages() {
return Object.keys(this.assetsStore);
}
languageIsLoaded(language) {
return this.getLoadedLanguages().includes(language);
}
getLoadedI18n() {
return this.assetsStore;
}
fetchI18nFile(filePath) {
return fetch(filePath)
.then(res => res.json())
.catch(err => {
console.error(`Failed to load i18n file: ${filePath}`);
console.error(err);
return {};
});
}
}
export function triggerAllI18nLoader(loaders) {
return loadAvailableLanguages().then(() => {
const userLanguage = getUserLanguage();
return Promise.all(isBuiltInLanguage(userLanguage)
? loaders.map(loader => loader.loadI18n(userLanguage))
: loaders.flatMap(loader => [
loader.loadI18n(userLanguage),
loader.loadI18n(FALLBACK_LANGUAGE),
]));
});
}
export function setAuiTranslation(i18nService, loader, locale) {
const allTranslations = loader.getLoadedI18n();
const translation = (isBuiltInLanguage(locale)
? allTranslations[locale]
: {
...allTranslations[FALLBACK_LANGUAGE],
...allTranslations[locale],
});
i18nService.setI18n({
locale,
translation,
});
}
function replaceTemplate(str, data) {
return str.replace(/{{\s*(\w+)\s*}}/g, (_, key) => {
return key in data ? data[key] : '';
});
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bi1hc3NldHMtbG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb21tb24vc3JjL3RyYW5zbGF0ZS9pMThuLWFzc2V0cy1sb2FkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQ2hELE9BQU8sRUFDTCxlQUFlLEVBQ2YsaUJBQWlCLEVBQ2pCLHNCQUFzQixHQUN2QixNQUFNLGVBQWUsQ0FBQztBQVF2QixNQUFNLE9BQU8sZ0JBQWdCO0lBRzNCLFlBQTZCLE9BQThCO1FBQTlCLFlBQU8sR0FBUCxPQUFPLENBQXVCO1FBRjFDLGdCQUFXLEdBQXdDLEVBQUUsQ0FBQztJQUVULENBQUM7SUFFL0QsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFnQjtRQUM3QixNQUFNLFNBQVMsR0FBa0IsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDO1lBQ2pELEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sSUFBSSxFQUFFLENBQUM7aUJBQzVCLE9BQU8sRUFBRTtpQkFDVCxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FDWixlQUFlLENBQUMsZ0NBQWdDLE1BQU0sT0FBTyxFQUFFO2dCQUM3RCxRQUFRO2FBQ1QsQ0FBQyxDQUNIO2lCQUNBLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDaEQsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDakQsTUFBTSxRQUFRLEdBQUcsaUJBQWlCLENBQUMsUUFBUSxDQUFDO29CQUMxQyxDQUFDLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsRUFBRSxRQUFRLEVBQUUs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QUFDO1NBQzNCLENBQ29CLENBQUM7SUFFNUIsV0FBVyxDQUFDLE9BQU8sQ0FBQztRQUNsQixNQUFNO1FBQ04sV0FBVztLQUNaLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FBQyxHQUFXLEVBQUUsSUFBNEI7SUFDaEUsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFO1FBQ2hELE9BQU8sR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDdEMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tICdAYWxhdWRhL3VpJztcblxuaW1wb3J0IHsgRkFMTEJBQ0tfTEFOR1VBR0UgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICBnZXRVc2VyTGFuZ3VhZ2UsXG4gIGlzQnVpbHRJbkxhbmd1YWdlLFxuICBsb2FkQXZhaWxhYmxlTGFuZ3VhZ2VzLFxufSBmcm9tICcuL2kxOG4tY29uZmlnJztcbmltcG9ydCB7IFRyYW5zbGF0aW9uIH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSTE4bkFzc2V0c0xvYWRPcHRpb25zIHtcbiAgbW9kdWxlcz86IHN0cmluZ1tdO1xuICBmaWxlcz86IEFycmF5PHsgbmFtZTogc3RyaW5nOyBwYXRoOiBzdHJpbmc7IHNjb3BlPzogc3RyaW5nIH0+O1xufVxuXG5leHBvcnQgY2xhc3MgSTE4bkFzc2V0c0xvYWRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXNzZXRzU3RvcmU6IHsgW2xhbmd1YWdlOiBzdHJpbmddOiBUcmFuc2xhdGlvbiB9ID0ge307XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBJMThuQXNzZXRzTG9hZE9wdGlvbnMpIHt9XG5cbiAgYXN5bmMgbG9hZEkxOG4obGFuZ3VhZ2U6IHN0cmluZykge1xuICAgIGNvbnN0IGFsbEFzc2V0czogVHJhbnNsYXRpb25bXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIC4uLih0aGlzLm9wdGlvbnMubW9kdWxlcyB8fCBbXSlcbiAgICAgICAgLnJldmVyc2UoKVxuICAgICAgICAubWFwKG1vZHVsZSA9PlxuICAgICAgICAgIHJlcGxhY2VUZW1wbGF0ZShgL2NvbnNvbGUtaTE4bi97eyBsYW5ndWFnZSB9fS8ke21vZHVsZX0uanNvbmAsIHtcbiAgICAgICAgICAgIGxhbmd1YWdlLFxuICAgICAgICAgIH0pLFxuICAgICAgICApXG4gICAgICAgIC5tYXAoZmlsZVBhdGggPT4gdGhpcy5mZXRjaEkxOG5GaWxlKGZpbGVQYXRoKSksXG4gICAgICAuLi4odGhpcy5vcHRpb25zLmZpbGVzIHx8IFtdKS5yZXZlcnNlKCkubWFwKGZpbGUgPT4ge1xuICAgICAgICBjb25zdCBmaWxlUGF0aCA9IGlzQnVpbHRJbkxhbmd1YWdlKGxhbmd1YWdlKVxuICAgICAgICAgID8gcmVwbGFjZVRlbXBsYXRlKGZpbGUucGF0aCwgeyBsYW5ndWFnZSwgbmFtZTogZmlsZS5uYW1lIH0pXG4gICAgICAgICAgOiByZXBsYWNlVGVtcGxhdGUoYC9jb25zb2xlLWkxOG4ve3sgbGFuZ3VhZ2UgfX0vJHtmaWxlLm5hbWV9Lmpzb25gLCB7XG4gICAgICAgICAgICAgIGxhbmd1YWdlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmZldGNoSTE4bkZpbGUoZmlsZVBhdGgpLnRoZW4oaTE4bk9iaiA9PlxuICAgICAgICAgIGZpbGUuc2NvcGUgPyB7IFtmaWxlLnNjb3BlXTogaTE4bk9iaiB9IDogaTE4bk9iaixcbiAgICAgICAgKTtcbiAgICAgIH0pLFxuICAgIF0pO1xuXG4gICAgdGhpcy5hc3NldHNTdG9yZVtsYW5ndWFnZV0gPSBPYmplY3QudmFsdWVzKGFsbEFzc2V0cykucmVkdWNlKFxuICAgICAgKGFjYywgY3VycikgPT4gT2JqZWN0LmFzc2lnbihhY2MsIGN1cnIpLFxuICAgICAge30sXG4gICAgKTtcblxuICAgIHJldHVybiB0aGlzLmFzc2V0c1N0b3JlW2xhbmd1YWdlXTtcbiAgfVxuXG4gIGdldExvYWRlZExhbmd1YWdlcygpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5hc3NldHNTdG9yZSk7XG4gIH1cblxuICBsYW5ndWFnZUlzTG9hZGVkKGxhbmd1YWdlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2FkZWRMYW5ndWFnZXMoKS5pbmNsdWRlcyhsYW5ndWFnZSk7XG4gIH1cblxuICBnZXRMb2FkZWRJMThuKCkge1xuICAgIHJldHVybiB0aGlzLmFzc2V0c1N0b3JlO1xuICB9XG5cbiAgcHJpdmF0ZSBmZXRjaEkxOG5GaWxlKGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPFRyYW5zbGF0aW9uPiB7XG4gICAgcmV0dXJuIGZldGNoKGZpbGVQYXRoKVxuICAgICAgLnRoZW4ocmVzID0+IHJlcy5qc29uKCkpXG4gICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGxvYWQgaTE4biBmaWxlOiAke2ZpbGVQYXRofWApO1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmlnZ2VyQWxsSTE4bkxvYWRlcihsb2FkZXJzOiBJMThuQXNzZXRzTG9hZGVyW10pIHtcbiAgcmV0dXJuIGxvYWRBdmFpbGFibGVMYW5ndWFnZXMoKS50aGVuKCgpID0+IHtcbiAgICBjb25zdCB1c2VyTGFuZ3VhZ2UgPSBnZXRVc2VyTGFuZ3VhZ2UoKTtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoXG4gICAgICBpc0J1aWx0SW5MYW5ndWFnZSh1c2VyTGFuZ3VhZ2UpXG4gICAgICAgID8gbG9hZGVycy5tYXAobG9hZGVyID0+IGxvYWRlci5sb2FkSTE4bih1c2VyTGFuZ3VhZ2UpKVxuICAgICAgICA6IGxvYWRlcnMuZmxhdE1hcChsb2FkZXIgPT4gW1xuICAgICAgICAgICAgbG9hZGVyLmxvYWRJMThuKHVzZXJMYW5ndWFnZSksXG4gICAgICAgICAgICBsb2FkZXIubG9hZEkxOG4oRkFMTEJBQ0tfTEFOR1VBR0UpLFxuICAgICAgICAgIF0pLFxuICAgICk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0QXVpVHJhbnNsYXRpb24oXG4gIGkxOG5TZXJ2aWNlOiBJMThuU2VydmljZSxcbiAgbG9hZGVyOiBJMThuQXNzZXRzTG9hZGVyLFxuICBsb2NhbGU6IHN0cmluZyxcbikge1xuICBjb25zdCBhbGxUcmFuc2xhdGlvbnMgPSBsb2FkZXIuZ2V0TG9hZGVkSTE4bigpO1xuICBjb25zdCB0cmFuc2xhdGlvbiA9IChcbiAgICBpc0J1aWx0SW5MYW5ndWFnZShsb2NhbGUpXG4gICAgICA/IGFsbFRyYW5zbGF0aW9uc1tsb2NhbGVdXG4gICAgICA6IHtcbiAgICAgICAgICAuLi5hbGxUcmFuc2xhdGlvbnNbRkFMTEJBQ0tfTEFOR1VBR0VdLFxuICAgICAgICAgIC4uLmFsbFRyYW5zbGF0aW9uc1tsb2NhbGVdLFxuICAgICAgICB9XG4gICkgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblxuICBpMThuU2VydmljZS5zZXRJMThuKHtcbiAgICBsb2NhbGUsXG4gICAgdHJhbnNsYXRpb24sXG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZXBsYWNlVGVtcGxhdGUoc3RyOiBzdHJpbmcsIGRhdGE6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC97e1xccyooXFx3KylcXHMqfX0vZywgKF8sIGtleSkgPT4ge1xuICAgIHJldHVybiBrZXkgaW4gZGF0YSA/IGRhdGFba2V5XSA6ICcnO1xuICB9KTtcbn1cbiJdfQ==