Home Reference Source Repository

src/i18n.js

const DEFAULT_LANGUAGE = 'en'

/**
 * @example
 * var labels = {'en': 'Temperature', 'de': 'Temperatur'}
 * var tag = CovUtils.getLanguageTag(labels, 'en-GB')
 * // tag == 'en'
 *
 * @param {object} map An object that maps language tags to strings.
 * @param {string} [preferredLanguage='en'] The preferred language as a language tag, e.g. 'de'.
 * @return {string} The best matched language tag of the input map.
 *   If no match was found then this is an arbitrary tag of the map.
 */
export function getLanguageTag (map, preferredLanguage = DEFAULT_LANGUAGE) {
  if (preferredLanguage in map) {
    return preferredLanguage
  }

  // cut off any subtags following the language subtag and try to find a match
  let prefTag = preferredLanguage.split('-')[0]
  let matches = Object.keys(map).filter(tag => prefTag === tag.split('-')[0])
  if (matches.length) {
    return matches[0]
  }

  // no luck, return a random tag
  return Object.keys(map)[0]
}

/**
 * @example
 * var labels = {'en': 'Temperature', 'de': 'Temperatur'}
 * var label = CovUtils.getLanguageString(labels, 'en-GB')
 * // label == 'Temperature'
 *
 * @param {object} map An object that maps language tags to strings.
 * @param {string} [preferredLanguage='en'] The preferred language as a language tag, e.g. 'de'.
 * @return {string} The string within the input map whose language tag best matched.
 *   If no match was found then this is an arbitrary string of the map.
 */
export function getLanguageString (map, preferredLanguage = DEFAULT_LANGUAGE) {
  let tag = getLanguageTag(map, preferredLanguage)
  return map[tag]
}