UNPKG

@alauda-fe/common

Version:

Alauda frontend team common codes.

76 lines 11.1 kB
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==