mapcomplete/Utils/WikidataUtils.ts

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

55 lines
1.9 KiB
TypeScript
Raw Normal View History

2022-07-11 09:14:26 +02:00
export default class WikidataUtils {
/**
* Mapping from wikidata-codes to weblate-codes. The wikidata-code is the key, mapcomplete/weblate is the value
*/
public static readonly languageRemapping = {
nb: "nb_NO",
"zh-hant": "zh_Hant",
"zh-hans": "zh_Hans",
"pt-br": "pt_BR",
}
/**
* Extract languages and their language in every language from the data source.
* The returned mapping will be {languageCode --> {languageCode0 --> language as written in languageCode0 } }
* @param data
* @param remapLanguages
*/
public static extractLanguageData(
2022-11-02 13:47:34 +01:00
data: {
lang: { value: string }
code: { value: string }
label: { value: string }
directionalityLabel?: { value?: string }
}[],
2022-07-11 09:14:26 +02:00
remapLanguages: Record<string, string>
2022-11-02 13:47:34 +01:00
): Map<string, { translations: Map<string, string>; directionality?: string[] }> {
2022-07-11 09:14:26 +02:00
console.log("Got " + data.length + " entries")
2022-11-02 13:47:34 +01:00
const perId = new Map<
string,
{ translations: Map<string, string>; directionality?: string[] }
>()
2022-07-11 09:14:26 +02:00
for (const element of data) {
let id = element.code.value
id = remapLanguages[id] ?? id
let labelLang = element.label["xml:lang"]
labelLang = remapLanguages[labelLang] ?? labelLang
const value = element.label.value
if (!perId.has(id)) {
2022-11-02 13:47:34 +01:00
perId.set(id, { translations: new Map<string, string>(), directionality: [] })
}
const entry = perId.get(id)
entry.translations.set(labelLang, value)
const dir = element.directionalityLabel?.value
if (dir) {
2022-11-02 13:47:34 +01:00
if (entry.directionality.indexOf(dir) < 0) {
entry.directionality.push(dir)
}
2022-07-11 09:14:26 +02:00
}
}
console.log("Got " + perId.size + " languages")
return perId
}
}