@alauda-fe/common
Version:
Alauda frontend team common codes.
89 lines • 12.4 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 => {
if (!res.ok) {
throw new Error(`HTTP ${res.status}: ${res.statusText}`);
}
return res.json();
})
.catch(err => {
console.error(`Failed to load i18n file: ${filePath}`);
console.error(err);
return {};
});
}
}
export function triggerAllI18nLoader(loaders) {
function run(userLanguage) {
return Promise.all(isBuiltInLanguage(userLanguage)
? loaders.map(loader => loader.loadI18n(userLanguage))
: loaders.flatMap(loader => [
loader.loadI18n(userLanguage),
loader.loadI18n(FALLBACK_LANGUAGE),
]));
}
let userLanguage;
try {
userLanguage = getUserLanguage();
}
catch (err) {
console.error(err);
return loadAvailableLanguages().then(() => run(getUserLanguage()));
}
return run(userLanguage);
}
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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QUFFLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNyRSxDQUFDO0lBRUQsT0FBTyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDM0IsQ0FBQztBQUVELE1BQU0sVUFBVSxpQkFBaUIsQ0FDL0IsV0FBd0IsRUFDeEIsTUFBd0IsRUFDeEIsTUFBYztJQUVkLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUMvQyxNQUFNLFdBQVcsR0FBRyxDQUNsQixpQkFBaUIsQ0FBQyxNQUFNLENBQUM7UUFDdkIsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUM7UUFDekIsQ0FBQyxDQUFDO1lBQ0UsR0FBRyxlQUFlLENBQUMsaUJBQWlCLENBQUM7WUFDckMsR0FBRyxlQUFlLENBQUMsTUFBTSxDQUFDO1NBQzNCLENBQ29CLENBQUM7SUFFNUIsV0FBVyxDQUFDLE9BQU8sQ0FBQztRQUNsQixNQUFNO1FBQ04sV0FBVztLQUNaLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FBQyxHQUFXLEVBQUUsSUFBNEI7SUFDaEUsT0FBTyxHQUFHLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxFQUFFO1FBQ2hELE9BQU8sR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDdEMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSTE4blNlcnZpY2UgfSBmcm9tICdAYWxhdWRhL3VpJztcblxuaW1wb3J0IHsgRkFMTEJBQ0tfTEFOR1VBR0UgfSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICBnZXRVc2VyTGFuZ3VhZ2UsXG4gIGlzQnVpbHRJbkxhbmd1YWdlLFxuICBsb2FkQXZhaWxhYmxlTGFuZ3VhZ2VzLFxufSBmcm9tICcuL2kxOG4tY29uZmlnJztcbmltcG9ydCB7IFRyYW5zbGF0aW9uIH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSTE4bkFzc2V0c0xvYWRPcHRpb25zIHtcbiAgbW9kdWxlcz86IHN0cmluZ1tdO1xuICBmaWxlcz86IEFycmF5PHsgbmFtZTogc3RyaW5nOyBwYXRoOiBzdHJpbmc7IHNjb3BlPzogc3RyaW5nIH0+O1xufVxuXG5leHBvcnQgY2xhc3MgSTE4bkFzc2V0c0xvYWRlciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgYXNzZXRzU3RvcmU6IHsgW2xhbmd1YWdlOiBzdHJpbmddOiBUcmFuc2xhdGlvbiB9ID0ge307XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBJMThuQXNzZXRzTG9hZE9wdGlvbnMpIHt9XG5cbiAgYXN5bmMgbG9hZEkxOG4obGFuZ3VhZ2U6IHN0cmluZykge1xuICAgIGNvbnN0IGFsbEFzc2V0czogVHJhbnNsYXRpb25bXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIC4uLih0aGlzLm9wdGlvbnMubW9kdWxlcyB8fCBbXSlcbiAgICAgICAgLnJldmVyc2UoKVxuICAgICAgICAubWFwKG1vZHVsZSA9PlxuICAgICAgICAgIHJlcGxhY2VUZW1wbGF0ZShgL2NvbnNvbGUtaTE4bi97eyBsYW5ndWFnZSB9fS8ke21vZHVsZX0uanNvbmAsIHtcbiAgICAgICAgICAgIGxhbmd1YWdlLFxuICAgICAgICAgIH0pLFxuICAgICAgICApXG4gICAgICAgIC5tYXAoZmlsZVBhdGggPT4gdGhpcy5mZXRjaEkxOG5GaWxlKGZpbGVQYXRoKSksXG4gICAgICAuLi4odGhpcy5vcHRpb25zLmZpbGVzIHx8IFtdKS5yZXZlcnNlKCkubWFwKGZpbGUgPT4ge1xuICAgICAgICBjb25zdCBmaWxlUGF0aCA9IGlzQnVpbHRJbkxhbmd1YWdlKGxhbmd1YWdlKVxuICAgICAgICAgID8gcmVwbGFjZVRlbXBsYXRlKGZpbGUucGF0aCwgeyBsYW5ndWFnZSwgbmFtZTogZmlsZS5uYW1lIH0pXG4gICAgICAgICAgOiByZXBsYWNlVGVtcGxhdGUoYC9jb25zb2xlLWkxOG4ve3sgbGFuZ3VhZ2UgfX0vJHtmaWxlLm5hbWV9Lmpzb25gLCB7XG4gICAgICAgICAgICAgIGxhbmd1YWdlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzLmZldGNoSTE4bkZpbGUoZmlsZVBhdGgpLnRoZW4oaTE4bk9iaiA9PlxuICAgICAgICAgIGZpbGUuc2NvcGUgPyB7IFtmaWxlLnNjb3BlXTogaTE4bk9iaiB9IDogaTE4bk9iaixcbiAgICAgICAgKTtcbiAgICAgIH0pLFxuICAgIF0pO1xuXG4gICAgdGhpcy5hc3NldHNTdG9yZVtsYW5ndWFnZV0gPSBPYmplY3QudmFsdWVzKGFsbEFzc2V0cykucmVkdWNlKFxuICAgICAgKGFjYywgY3VycikgPT4gT2JqZWN0LmFzc2lnbihhY2MsIGN1cnIpLFxuICAgICAge30sXG4gICAgKTtcblxuICAgIHJldHVybiB0aGlzLmFzc2V0c1N0b3JlW2xhbmd1YWdlXTtcbiAgfVxuXG4gIGdldExvYWRlZExhbmd1YWdlcygpIHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy5hc3NldHNTdG9yZSk7XG4gIH1cblxuICBsYW5ndWFnZUlzTG9hZGVkKGxhbmd1YWdlOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRMb2FkZWRMYW5ndWFnZXMoKS5pbmNsdWRlcyhsYW5ndWFnZSk7XG4gIH1cblxuICBnZXRMb2FkZWRJMThuKCkge1xuICAgIHJldHVybiB0aGlzLmFzc2V0c1N0b3JlO1xuICB9XG5cbiAgcHJpdmF0ZSBmZXRjaEkxOG5GaWxlKGZpbGVQYXRoOiBzdHJpbmcpOiBQcm9taXNlPFRyYW5zbGF0aW9uPiB7XG4gICAgcmV0dXJuIGZldGNoKGZpbGVQYXRoKVxuICAgICAgLnRoZW4ocmVzID0+IHtcbiAgICAgICAgaWYgKCFyZXMub2spIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEhUVFAgJHtyZXMuc3RhdHVzfTogJHtyZXMuc3RhdHVzVGV4dH1gKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzLmpzb24oKTtcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGxvYWQgaTE4biBmaWxlOiAke2ZpbGVQYXRofWApO1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmlnZ2VyQWxsSTE4bkxvYWRlcihsb2FkZXJzOiBJMThuQXNzZXRzTG9hZGVyW10pIHtcbiAgZnVuY3Rpb24gcnVuKHVzZXJMYW5ndWFnZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKFxuICAgICAgaXNCdWlsdEluTGFuZ3VhZ2UodXNlckxhbmd1YWdlKVxuICAgICAgICA/IGxvYWRlcnMubWFwKGxvYWRlciA9PiBsb2FkZXIubG9hZEkxOG4odXNlckxhbmd1YWdlKSlcbiAgICAgICAgOiBsb2FkZXJzLmZsYXRNYXAobG9hZGVyID0+IFtcbiAgICAgICAgICAgIGxvYWRlci5sb2FkSTE4bih1c2VyTGFuZ3VhZ2UpLFxuICAgICAgICAgICAgbG9hZGVyLmxvYWRJMThuKEZBTExCQUNLX0xBTkdVQUdFKSxcbiAgICAgICAgICBdKSxcbiAgICApO1xuICB9XG5cbiAgbGV0IHVzZXJMYW5ndWFnZTogc3RyaW5nO1xuICB0cnkge1xuICAgIHVzZXJMYW5ndWFnZSA9IGdldFVzZXJMYW5ndWFnZSgpO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgcmV0dXJuIGxvYWRBdmFpbGFibGVMYW5ndWFnZXMoKS50aGVuKCgpID0+IHJ1bihnZXRVc2VyTGFuZ3VhZ2UoKSkpO1xuICB9XG5cbiAgcmV0dXJuIHJ1bih1c2VyTGFuZ3VhZ2UpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0QXVpVHJhbnNsYXRpb24oXG4gIGkxOG5TZXJ2aWNlOiBJMThuU2VydmljZSxcbiAgbG9hZGVyOiBJMThuQXNzZXRzTG9hZGVyLFxuICBsb2NhbGU6IHN0cmluZyxcbikge1xuICBjb25zdCBhbGxUcmFuc2xhdGlvbnMgPSBsb2FkZXIuZ2V0TG9hZGVkSTE4bigpO1xuICBjb25zdCB0cmFuc2xhdGlvbiA9IChcbiAgICBpc0J1aWx0SW5MYW5ndWFnZShsb2NhbGUpXG4gICAgICA/IGFsbFRyYW5zbGF0aW9uc1tsb2NhbGVdXG4gICAgICA6IHtcbiAgICAgICAgICAuLi5hbGxUcmFuc2xhdGlvbnNbRkFMTEJBQ0tfTEFOR1VBR0VdLFxuICAgICAgICAgIC4uLmFsbFRyYW5zbGF0aW9uc1tsb2NhbGVdLFxuICAgICAgICB9XG4gICkgYXMgUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcblxuICBpMThuU2VydmljZS5zZXRJMThuKHtcbiAgICBsb2NhbGUsXG4gICAgdHJhbnNsYXRpb24sXG4gIH0pO1xufVxuXG5mdW5jdGlvbiByZXBsYWNlVGVtcGxhdGUoc3RyOiBzdHJpbmcsIGRhdGE6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC97e1xccyooXFx3KylcXHMqfX0vZywgKF8sIGtleSkgPT4ge1xuICAgIHJldHVybiBrZXkgaW4gZGF0YSA/IGRhdGFba2V5XSA6ICcnO1xuICB9KTtcbn1cbiJdfQ==