Feature: include (all) sign languages in the 'LanguageElement' special rendering

This commit is contained in:
Pieter Vander Vennet 2025-08-23 17:46:07 +02:00
parent 2a3e164669
commit fe31af4b15
7 changed files with 2251 additions and 8 deletions

View file

@ -18,7 +18,7 @@ interface value<T> {
}
interface LanguageSpecResult {
directionalityLabel: value<string | "right-to-left" | "left-to-right">
directionalityLabel?: value<string | "right-to-left" | "left-to-right">
lang: value<string>
code: value<string>
label: value<string>
@ -77,6 +77,29 @@ async function fetchRegularLanguages() {
return result.results.bindings
}
async function fetchSignLanguages() {
const query = `
SELECT ?lang ?label ?code
WHERE
{
?lang wdt:P31 wd:Q34228.
OPTIONAL {
?lang wdt:P1813 ?code.
}
?lang rdfs:label ?label.
SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}`
const url = Wikidata.wds.sparqlQuery(query)
// request the generated URL with your favorite HTTP request library
const result = await Utils.downloadJson<{ results: { bindings: any[] } }>(url, {
"User-Agent": "MapComplete script",
})
return <LanguageSpecResult[]>result.results.bindings
}
/**
* Fetches the object as is. Sets a 'code' binding as predifined value
* @param id
@ -169,7 +192,20 @@ async function getOfficialLanguagesPerCountryCached(
return officialLanguages
}
async function generateSignLanguageOverview(){
const signLanguages = await fetchSignLanguages()
const signPerId = WikidataUtils.extractLanguageData(signLanguages, WikidataUtils.languageRemapping)
const asRecord : Record<string, Record<string, string>> = {}
for (const lng of signPerId.keys()) {
asRecord[lng.toLowerCase()] = Utils.MapToObj(signPerId.get(lng).translations)
}
return asRecord
}
async function main(wipeCache = false) {
const signLanguages = await generateSignLanguageOverview()
const cacheFile = "./src/assets/generated/languages-wd.json"
if (wipeCache || !existsSync(cacheFile)) {
console.log("Refreshing cache")
@ -181,7 +217,8 @@ async function main(wipeCache = false) {
const data = JSON.parse(readFileSync(cacheFile, { encoding: "utf8" }))
const perId = WikidataUtils.extractLanguageData(data, WikidataUtils.languageRemapping)
const nativeList = getNativeList(perId)
writeFileSync("./src/assets/language_native.json", JSON.stringify(nativeList, null, " "))
writeFileSync("./src/assets/language_native.json", JSON.stringify({ ...nativeList, ...signLanguages }, null, " "))
const languagesPerCountry = Utils.TransposeMap(
await getOfficialLanguagesPerCountryCached(wipeCache)
)