wikidata-lang
Version:
A database of languages and their Wikidata id, Wikimedia language code, ISO 639-1, ISO 639-2, ISO 639-3, ISO 639-6 codes
40 lines (34 loc) • 1.2 kB
JavaScript
import { languages } from '../data/languages.js'
import { sortObjectByKey } from './sort_object_by_key.js'
export function buildConversionMapping ({ keyCodeName, valueCodeName }) {
const mapping = {}
const multipleValues = {}
const singleValueCode = valueCodeName === 'wd'
const singleKeyCode = keyCodeName === 'wd'
for (const langData of languages) {
const keyCodes = langData[keyCodeName]
const valueCodes = langData[valueCodeName]
if (valueCodes && keyCodes) {
// Let aside cases where several values are possible
if (singleValueCode || valueCodes.length === 1) {
const valueCode = singleValueCode ? valueCodes : valueCodes[0]
addToIndex({ index: mapping, keyCodes, value: valueCode, singleKeyCode })
} else {
addToIndex({ index: multipleValues, keyCodes, value: valueCodes, singleKeyCode })
}
}
}
return {
mapping: sortObjectByKey(mapping),
multipleValues: sortObjectByKey(multipleValues),
}
}
function addToIndex ({ index, keyCodes, value, singleKeyCode }) {
if (singleKeyCode) {
index[keyCodes] = value
} else {
for (const keyCode of keyCodes) {
index[keyCode] = value
}
}
}