@doku-dev/doku-fragment
Version:
A new Angular UI library that moving away from Bootstrap and built from scratch.
53 lines • 8.43 kB
JavaScript
import { DOCUMENT, registerLocaleData } from '@angular/common';
import { HttpClient, provideHttpClient } from '@angular/common/http';
import * as en from '@angular/common/locales/en';
import * as id from '@angular/common/locales/id';
import { APP_INITIALIZER, LOCALE_ID, makeEnvironmentProviders, } from '@angular/core';
import { loadTranslations } from '@angular/localize';
import { map, tap } from 'rxjs';
import { I18nService } from './i18n.service';
registerLocaleData(en.default, 'en');
registerLocaleData(id.default, 'id');
export function provideI18n(options) {
return makeEnvironmentProviders([
provideHttpClient(),
{
provide: LOCALE_ID,
useFactory: (i18nService, document) => {
// Set custom key for the selected language.
// We set the options on this provider because it first called
// rather than putting it to the APP_INITIALIZERS.
if (options?.key) {
i18nService.SELECTED_LANG_KEY = options.key;
}
const locale = i18nService.getActiveLanguage();
// Set locale to the html lang attribute/
document.documentElement.lang = locale.toLowerCase();
return locale;
},
deps: [I18nService, DOCUMENT],
},
{
provide: APP_INITIALIZER,
useFactory: (http, localeId) => {
const localeDir = normalizeDirPath(options?.localeDirectoryPath || 'assets/locales');
return () => http
.get(`${localeDir}/${localeId.toLowerCase()}.json`)
.pipe(map((res) => res['translations']), tap((translations) => loadTranslations(translations)));
},
deps: [HttpClient, LOCALE_ID],
multi: true,
},
]);
}
function normalizeDirPath(path) {
let normalizedPath = path;
if (path.startsWith('/')) {
normalizedPath = normalizedPath.substring(1);
}
if (path.endsWith('/')) {
normalizedPath = normalizedPath.substring(0, normalizedPath.length - 1);
}
return normalizedPath;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaTE4bi5wcm92aWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Rva3UtZnJhZ21lbnQvcHJvdmlkZXJzL3NyYy9pMThuL2kxOG4ucHJvdmlkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxVQUFVLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUNyRSxPQUFPLEtBQUssRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2pELE9BQU8sS0FBSyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDakQsT0FBTyxFQUNMLGVBQWUsRUFFZixTQUFTLEVBQ1Qsd0JBQXdCLEdBQ3pCLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBNEIsZ0JBQWdCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUMvRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNoQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFN0Msa0JBQWtCLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNyQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBa0JyQyxNQUFNLFVBQVUsV0FBVyxDQUFDLE9BQTZCO0lBQ3ZELE9BQU8sd0JBQXdCLENBQUM7UUFDOUIsaUJBQWlCLEVBQUU7UUFDbkI7WUFDRSxPQUFPLEVBQUUsU0FBUztZQUNsQixVQUFVLEVBQUUsQ0FBQyxXQUF3QixFQUFFLFFBQWtCLEVBQUUsRUFBRTtnQkFDM0QsNENBQTRDO2dCQUM1Qyw4REFBOEQ7Z0JBQzlELGtEQUFrRDtnQkFDbEQsSUFBSSxPQUFPLEVBQUUsR0FBRyxFQUFFO29CQUNoQixXQUFXLENBQUMsaUJBQWlCLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztpQkFDN0M7Z0JBRUQsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBRS9DLHlDQUF5QztnQkFDekMsUUFBUSxDQUFDLGVBQWUsQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUVyRCxPQUFPLE1BQU0sQ0FBQztZQUNoQixDQUFDO1lBQ0QsSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLFFBQVEsQ0FBQztTQUM5QjtRQUNEO1lBQ0UsT0FBTyxFQUFFLGVBQWU7WUFDeEIsVUFBVSxFQUFFLENBQUMsSUFBZ0IsRUFBRSxRQUFnQixFQUFFLEVBQUU7Z0JBQ2pELE1BQU0sU0FBUyxHQUFHLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxtQkFBbUIsSUFBSSxnQkFBZ0IsQ0FBQyxDQUFDO2dCQUNyRixPQUFPLEdBQUcsRUFBRSxDQUNWLElBQUk7cUJBQ0QsR0FBRyxDQUNGLEdBQUcsU0FBUyxJQUFJLFFBQVEsQ0FBQyxXQUFXLEVBQUUsT0FBTyxDQUM5QztxQkFDQSxJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFxQyxDQUFDLEVBQ3JFLEdBQUcsQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FDdEQsQ0FBQztZQUNSLENBQUM7WUFDRCxJQUFJLEVBQUUsQ0FBQyxVQUFVLEVBQUUsU0FBUyxDQUFDO1lBQzdCLEtBQUssRUFBRSxJQUFJO1NBQ1o7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsU0FBUyxnQkFBZ0IsQ0FBQyxJQUFZO0lBQ3BDLElBQUksY0FBYyxHQUFHLElBQUksQ0FBQztJQUUxQixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDeEIsY0FBYyxHQUFHLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDOUM7SUFFRCxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDdEIsY0FBYyxHQUFHLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDekU7SUFFRCxPQUFPLGNBQWMsQ0FBQztBQUN4QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQsIHJlZ2lzdGVyTG9jYWxlRGF0YSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBIdHRwQ2xpZW50LCBwcm92aWRlSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCAqIGFzIGVuIGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9sb2NhbGVzL2VuJztcbmltcG9ydCAqIGFzIGlkIGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9sb2NhbGVzL2lkJztcbmltcG9ydCB7XG4gIEFQUF9JTklUSUFMSVpFUixcbiAgRW52aXJvbm1lbnRQcm92aWRlcnMsXG4gIExPQ0FMRV9JRCxcbiAgbWFrZUVudmlyb25tZW50UHJvdmlkZXJzLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1lc3NhZ2VJZCwgVGFyZ2V0TWVzc2FnZSwgbG9hZFRyYW5zbGF0aW9ucyB9IGZyb20gJ0Bhbmd1bGFyL2xvY2FsaXplJztcbmltcG9ydCB7IG1hcCwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBJMThuU2VydmljZSB9IGZyb20gJy4vaTE4bi5zZXJ2aWNlJztcblxucmVnaXN0ZXJMb2NhbGVEYXRhKGVuLmRlZmF1bHQsICdlbicpO1xucmVnaXN0ZXJMb2NhbGVEYXRhKGlkLmRlZmF1bHQsICdpZCcpO1xuXG5pbnRlcmZhY2UgSTE4blByb3ZpZGVyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgbG9jYWxlIG9yIGxhbmd1YWdlIHRvIGJlIHJldHJpZXZlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgJ3NlbGVjdGVkLWxhbmd1YWdlJ1xuICAgKi9cbiAga2V5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQdWJsaWMgZGlyZWN0b3J5IHdoZXJlIGxvY2FsZXMgdG8gYmUgZmV0Y2hlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgXCJhc3NldHMvbG9jYWxlc1wiXG4gICAqL1xuICBsb2NhbGVEaXJlY3RvcnlQYXRoPzogc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZUkxOG4ob3B0aW9ucz86IEkxOG5Qcm92aWRlck9wdGlvbnMpOiBFbnZpcm9ubWVudFByb3ZpZGVycyB7XG4gIHJldHVybiBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMoW1xuICAgIHByb3ZpZGVIdHRwQ2xpZW50KCksXG4gICAge1xuICAgICAgcHJvdmlkZTogTE9DQUxFX0lELFxuICAgICAgdXNlRmFjdG9yeTogKGkxOG5TZXJ2aWNlOiBJMThuU2VydmljZSwgZG9jdW1lbnQ6IERvY3VtZW50KSA9PiB7XG4gICAgICAgIC8vIFNldCBjdXN0b20ga2V5IGZvciB0aGUgc2VsZWN0ZWQgbGFuZ3VhZ2UuXG4gICAgICAgIC8vIFdlIHNldCB0aGUgb3B0aW9ucyBvbiB0aGlzIHByb3ZpZGVyIGJlY2F1c2UgaXQgZmlyc3QgY2FsbGVkXG4gICAgICAgIC8vIHJhdGhlciB0aGFuIHB1dHRpbmcgaXQgdG8gdGhlIEFQUF9JTklUSUFMSVpFUlMuXG4gICAgICAgIGlmIChvcHRpb25zPy5rZXkpIHtcbiAgICAgICAgICBpMThuU2VydmljZS5TRUxFQ1RFRF9MQU5HX0tFWSA9IG9wdGlvbnMua2V5O1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbG9jYWxlID0gaTE4blNlcnZpY2UuZ2V0QWN0aXZlTGFuZ3VhZ2UoKTtcblxuICAgICAgICAvLyBTZXQgbG9jYWxlIHRvIHRoZSBodG1sIGxhbmcgYXR0cmlidXRlL1xuICAgICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQubGFuZyA9IGxvY2FsZS50b0xvd2VyQ2FzZSgpO1xuXG4gICAgICAgIHJldHVybiBsb2NhbGU7XG4gICAgICB9LFxuICAgICAgZGVwczogW0kxOG5TZXJ2aWNlLCBET0NVTUVOVF0sXG4gICAgfSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBBUFBfSU5JVElBTElaRVIsXG4gICAgICB1c2VGYWN0b3J5OiAoaHR0cDogSHR0cENsaWVudCwgbG9jYWxlSWQ6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCBsb2NhbGVEaXIgPSBub3JtYWxpemVEaXJQYXRoKG9wdGlvbnM/LmxvY2FsZURpcmVjdG9yeVBhdGggfHwgJ2Fzc2V0cy9sb2NhbGVzJyk7XG4gICAgICAgIHJldHVybiAoKSA9PlxuICAgICAgICAgIGh0dHBcbiAgICAgICAgICAgIC5nZXQ8UmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgc3RyaW5nPj4+KFxuICAgICAgICAgICAgICBgJHtsb2NhbGVEaXJ9LyR7bG9jYWxlSWQudG9Mb3dlckNhc2UoKX0uanNvbmBcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICBtYXAoKHJlcykgPT4gcmVzWyd0cmFuc2xhdGlvbnMnXSBhcyBSZWNvcmQ8TWVzc2FnZUlkLCBUYXJnZXRNZXNzYWdlPiksXG4gICAgICAgICAgICAgIHRhcCgodHJhbnNsYXRpb25zKSA9PiBsb2FkVHJhbnNsYXRpb25zKHRyYW5zbGF0aW9ucykpXG4gICAgICAgICAgICApO1xuICAgICAgfSxcbiAgICAgIGRlcHM6IFtIdHRwQ2xpZW50LCBMT0NBTEVfSURdLFxuICAgICAgbXVsdGk6IHRydWUsXG4gICAgfSxcbiAgXSk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZURpclBhdGgocGF0aDogc3RyaW5nKSB7XG4gIGxldCBub3JtYWxpemVkUGF0aCA9IHBhdGg7XG5cbiAgaWYgKHBhdGguc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgbm9ybWFsaXplZFBhdGggPSBub3JtYWxpemVkUGF0aC5zdWJzdHJpbmcoMSk7XG4gIH1cblxuICBpZiAocGF0aC5lbmRzV2l0aCgnLycpKSB7XG4gICAgbm9ybWFsaXplZFBhdGggPSBub3JtYWxpemVkUGF0aC5zdWJzdHJpbmcoMCwgbm9ybWFsaXplZFBhdGgubGVuZ3RoIC0gMSk7XG4gIH1cblxuICByZXR1cm4gbm9ybWFsaXplZFBhdGg7XG59XG4iXX0=