{"version":3,"file":"doku-dev-doku-fragment-providers.mjs","sources":["../../../../projects/doku-fragment/providers/src/i18n/i18n.service.ts","../../../../projects/doku-fragment/providers/src/i18n/i18n.provider.ts","../../../../projects/doku-fragment/providers/src/doku-dev-doku-fragment-providers.ts"],"sourcesContent":["import { Injectable, inject } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class I18nService {\n  private route = inject(ActivatedRoute);\n\n  /**\n   * @default 'selected-language'\n   */\n  SELECTED_LANG_KEY = 'selected-language';\n\n  /**\n   * Get active language from query params or local storage.\n   *\n   * The value is normalized to uppercase.\n   * Defaults to \"ID\" if not exists on local storage or when the language is not supported.\n   */\n  getActiveLanguage(): string {\n    const paramLang = this.route.snapshot.queryParamMap.get('lang');\n    if (paramLang && ['EN', 'ID'].includes(paramLang)) {\n      return paramLang;\n    }\n\n    let value = localStorage.getItem(this.SELECTED_LANG_KEY) || 'ID';\n    value = value.toUpperCase();\n    if (['EN', 'ID'].includes(value)) return value;\n    return 'ID';\n  }\n\n  /**\n   * The language value will be normalized to uppercase.\n   */\n  setActiveLanguage(language: string) {\n    const normalizedLanguage = language.toUpperCase();\n    localStorage.setItem(this.SELECTED_LANG_KEY, normalizedLanguage);\n  }\n}\n","import { DOCUMENT, registerLocaleData } from '@angular/common';\nimport { HttpClient, provideHttpClient } from '@angular/common/http';\nimport * as en from '@angular/common/locales/en';\nimport * as id from '@angular/common/locales/id';\nimport {\n  APP_INITIALIZER,\n  EnvironmentProviders,\n  LOCALE_ID,\n  makeEnvironmentProviders,\n} from '@angular/core';\nimport { MessageId, TargetMessage, loadTranslations } from '@angular/localize';\nimport { map, tap } from 'rxjs';\nimport { I18nService } from './i18n.service';\n\nregisterLocaleData(en.default, 'en');\nregisterLocaleData(id.default, 'id');\n\ninterface I18nProviderOptions {\n  /**\n   * The name of the locale or language to be retrieved.\n   *\n   * @default 'selected-language'\n   */\n  key?: string;\n\n  /**\n   * Public directory where locales to be fetched.\n   *\n   * @default \"assets/locales\"\n   */\n  localeDirectoryPath?: string;\n}\n\nexport function provideI18n(options?: I18nProviderOptions): EnvironmentProviders {\n  return makeEnvironmentProviders([\n    provideHttpClient(),\n    {\n      provide: LOCALE_ID,\n      useFactory: (i18nService: I18nService, document: Document) => {\n        // Set custom key for the selected language.\n        // We set the options on this provider because it first called\n        // rather than putting it to the APP_INITIALIZERS.\n        if (options?.key) {\n          i18nService.SELECTED_LANG_KEY = options.key;\n        }\n\n        const locale = i18nService.getActiveLanguage();\n\n        // Set locale to the html lang attribute/\n        document.documentElement.lang = locale.toLowerCase();\n\n        return locale;\n      },\n      deps: [I18nService, DOCUMENT],\n    },\n    {\n      provide: APP_INITIALIZER,\n      useFactory: (http: HttpClient, localeId: string) => {\n        const localeDir = normalizeDirPath(options?.localeDirectoryPath || 'assets/locales');\n        return () =>\n          http\n            .get<Record<string, Record<string, string>>>(\n              `${localeDir}/${localeId.toLowerCase()}.json`\n            )\n            .pipe(\n              map((res) => res['translations'] as Record<MessageId, TargetMessage>),\n              tap((translations) => loadTranslations(translations))\n            );\n      },\n      deps: [HttpClient, LOCALE_ID],\n      multi: true,\n    },\n  ]);\n}\n\nfunction normalizeDirPath(path: string) {\n  let normalizedPath = path;\n\n  if (path.startsWith('/')) {\n    normalizedPath = normalizedPath.substring(1);\n  }\n\n  if (path.endsWith('/')) {\n    normalizedPath = normalizedPath.substring(0, normalizedPath.length - 1);\n  }\n\n  return normalizedPath;\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}