{"version":3,"file":"soluling-angular.mjs","sources":["../../../projects/angular/src/lib/translationloader.ts","../../../projects/angular/src/public-api.ts","../../../projects/angular/src/soluling-angular.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\r\nimport { MessageId, TargetMessage } from '@angular/localize';\r\n\r\n// A type that contains the translations\r\nexport type Translations = Record<MessageId, TargetMessage>;\r\n\r\n// Stores the locale id of the loaded resource\r\nlet resourceLocale: string = 'en-US';\r\n\r\n// Convert JSON resource file data to Translations\r\nfunction parseTranslations(fileData: string): Translations \r\n{\r\n  // Converts JSON file into JavaScript object and cast that to the type of the strongly typed translation\r\n  let translations: Translations = JSON.parse(fileData).translations;\r\n  return translations;\r\n}\r\n\r\n// Get a resource file URL\r\nfunction getLanguageUrl(baseUrl: string, id: string): string\r\n{\r\n  return `${baseUrl}/${id}.json`;\r\n}\r\n\r\nexport function setCookie(name: string, value: string) \r\n{\r\n  // Add language to the cookie\r\n  // language=fi\r\n  document.cookie = `${name}=${value}`;\r\n}\r\n\r\nexport function getCookie(name: string) \r\n{\r\n  //console.log('getCookie');\r\n\r\n  // cookie: language=fi; other=xxx\r\n  // return: fi\r\n  let tag = name + \"=\";\r\n  let decodedCookie = decodeURIComponent(document.cookie);\r\n  let values = decodedCookie.split(';');\r\n\r\n  for (let value of values) \r\n  {\r\n    value = value.trim();\r\n\r\n    if (value.indexOf(tag) == 0) \r\n      return value.substring(tag.length, value.length);\r\n  }\r\n\r\n  return \"\";\r\n}\r\n\r\n// Load resources from the specific URL\r\nexport function getTranslationsByUrl(\r\n  url: string, \r\n  id: string, \r\n  setLocaleId: boolean = true): Promise<Translations> \r\n{\r\n  return fetch(url)\r\n    .then(response => \r\n    {\r\n      if (!response.ok)\r\n        return null;\r\n\r\n      return response.text();\r\n    })\r\n    .then((data: string) => \r\n    {\r\n      if (data && setLocaleId)\r\n        resourceLocale = id;\r\n\r\n      return parseTranslations(data);\r\n    })\r\n    .catch(() => null);\r\n}\r\n\r\n// Load resources matching the give language id. If not found, use the fallback ids.\r\nexport function getTranslationsById(baseUrl: string, id: string, fallbacks: string[], setLocaleId: boolean): Promise<Translations> \r\n{\r\n  //console.log('getTranslationsById: ' + id);\r\n\r\n  return getTranslationsByUrl(getLanguageUrl(baseUrl, id), id, setLocaleId).then(translations => \r\n    {\r\n      // If translations were found return it\r\n      if (translations)\r\n        return translations;\r\n\r\n      // No translations were found. Try the parent language, if any.\r\n      let parts = id.split('-');\r\n\r\n      if (parts.length > 1)\r\n      {\r\n        // Try the parent id. For example de-DE -> de\r\n        let parentId = parts[0];\r\n\r\n        for (let i = 1; i < parts.length - 1; i++)\r\n          parentId = parentId + '-' + parts[i];\r\n  \r\n        return getTranslationsById(baseUrl, parentId, fallbacks, setLocaleId);\r\n      }\r\n      else\r\n      {\r\n        // No more parents. Try the first language in the fallback list, if any.\r\n        if (fallbacks.length > 0)\r\n        {\r\n          let id = fallbacks.shift();\r\n          return getTranslationsById(baseUrl, id, fallbacks, setLocaleId);\r\n        }\r\n        else\r\n        {\r\n          // No more fallback languages. Return null (e.g., no translations found)\r\n          return null;\r\n        }\r\n      }\r\n    });\r\n}\r\n\r\nexport interface TranslateOptions \r\n{\r\n  ingoreCountry?: boolean;    // Ignore the country part in the locale if. Default false\r\n  tryAllLanguages?: boolean;  // Try all languages in Accept-Language. Default true\r\n  setLocaleId?: boolean;      // Set LOCALE_ID to match the loaded resource. Default true\r\n  fallbackId?: string;        // Specifies the fallback language/locale id. Default en\r\n  locale?: string;            // Specifies the locale to be loaded. Separate multiple locales with a semicolon (;). If null or empty use the browser language. Default null\r\n  cookieName?: string;        // Specifies the cookie name that stores the language. If null cookies are ignored. Default null\r\n}\r\n\r\n// Load resources matching the browser language(s)\r\nexport function getTranslationsEx(\r\n  baseUrl: string, \r\n  options: TranslateOptions = null): Promise<Translations> \r\n{\r\n  let ingoreCountry = false;\r\n  let tryAllLanguages = true;\r\n  let setLocaleId = true;\r\n  let fallbackId = \"en\";\r\n  let locale: string = null;\r\n  let cookieName = null;\r\n\r\n  if (options)\r\n  {\r\n    if (options.ingoreCountry != null)\r\n      ingoreCountry = options.ingoreCountry;\r\n\r\n    if (options.tryAllLanguages != null)\r\n      tryAllLanguages = options.tryAllLanguages;\r\n\r\n    if (options.setLocaleId != null)\r\n      setLocaleId = options.setLocaleId;\r\n\r\n    if (options.fallbackId)\r\n      fallbackId = options.fallbackId;\r\n      \r\n    if (options.locale)\r\n      locale = options.locale;\r\n\r\n    if (options.cookieName)\r\n      cookieName = options.cookieName;\r\n  }\r\n\r\n  if (cookieName)\r\n    locale = getCookie(cookieName);\r\n\r\n  // Get a copy of the browser languages\r\n  let languages = [];\r\n\r\n  if (locale)\r\n    languages = locale.split(';');\r\n  else if (!ingoreCountry)\r\n    languages = [...navigator.languages];\r\n  else\r\n  {\r\n    for (let language of navigator.languages)\r\n    {\r\n      let parts = language.split('-');\r\n      let id = parts[0];\r\n\r\n      if (languages.indexOf(id) == -1)\r\n        languages.push(id);\r\n    }\r\n  }\r\n\r\n  //console.log(languages);\r\n\r\n  // Take the first id from the language list\r\n  let id = languages.shift();\r\n\r\n  // If only first should be tried clear the language list\r\n  if (!tryAllLanguages)\r\n    languages = [];\r\n\r\n  // If a fallback has been specified and the language list does not contain it, add the fallback to the list\r\n  if (fallbackId && (fallbackId !== id) && (languages.indexOf(fallbackId) == -1))\r\n    languages.push(fallbackId);\r\n\r\n  // Get the translations\r\n  return getTranslationsById(baseUrl, id, languages, setLocaleId);\r\n}\r\n\r\n// Load resources matching the browser language(s)\r\nexport function getTranslations(\r\n  baseUrl: string, \r\n  ingoreCountry: boolean = false, \r\n  tryAllLanguages: boolean = true, \r\n  setLocaleId: boolean = true, \r\n  fallbackId: string = 'en',\r\n  locale: string = null,\r\n  cookieName: string = null): Promise<Translations> \r\n{\r\n  let options: TranslateOptions = \r\n  {\r\n    ingoreCountry,\r\n    tryAllLanguages,\r\n    setLocaleId,\r\n    fallbackId,\r\n    locale,\r\n    cookieName\r\n  };\r\n\r\n  return getTranslationsEx(baseUrl, options);\r\n}\r\n\r\n// Service that provides you the active resource locale\r\n@Injectable()\r\nexport class LocaleService\r\n{\r\n  get localeId(): string\r\n  {\r\n    return resourceLocale;\r\n  }\r\n}","/*\n * Public API Surface of angular\n */\n\nexport * from './lib/translationloader';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}