UNPKG

1.64 kBJavaScriptView Raw
1const DEFAULT_LANGUAGE = 'en'
2
3/**
4 * @example
5 * var labels = {'en': 'Temperature', 'de': 'Temperatur'}
6 * var tag = CovUtils.getLanguageTag(labels, 'en-GB')
7 * // tag == 'en'
8 *
9 * @param {object} map An object that maps language tags to strings.
10 * @param {string} [preferredLanguage='en'] The preferred language as a language tag, e.g. 'de'.
11 * @return {string} The best matched language tag of the input map.
12 * If no match was found then this is an arbitrary tag of the map.
13 */
14export function getLanguageTag (map, preferredLanguage = DEFAULT_LANGUAGE) {
15 if (preferredLanguage in map) {
16 return preferredLanguage
17 }
18
19 // cut off any subtags following the language subtag and try to find a match
20 let prefTag = preferredLanguage.split('-')[0]
21 let matches = Object.keys(map).filter(tag => prefTag === tag.split('-')[0])
22 if (matches.length) {
23 return matches[0]
24 }
25
26 // no luck, return a random tag
27 return Object.keys(map)[0]
28}
29
30/**
31 * @example
32 * var labels = {'en': 'Temperature', 'de': 'Temperatur'}
33 * var label = CovUtils.getLanguageString(labels, 'en-GB')
34 * // label == 'Temperature'
35 *
36 * @param {object} map An object that maps language tags to strings.
37 * @param {string} [preferredLanguage='en'] The preferred language as a language tag, e.g. 'de'.
38 * @return {string} The string within the input map whose language tag best matched.
39 * If no match was found then this is an arbitrary string of the map.
40 */
41export function getLanguageString (map, preferredLanguage = DEFAULT_LANGUAGE) {
42 let tag = getLanguageTag(map, preferredLanguage)
43 return map[tag]
44}