@keymanapp/langtags
Version:
Keyman bundling of language tags from langtags.json
71 lines (69 loc) • 2.19 kB
JavaScript
/*
* Keyman is copyright (C) SIL Global. MIT License.
*
* Wraps langtags.json as a Javascript object
*/
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:{},n=(new Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="56337f9b-01c8-56b9-b0fd-02dad625a3ef")}catch(e){}}();
import langtags from './imports/langtags.js';
;
;
;
;
;
/**
* A map of all language tags, lower cased
*/
const langtagsByTag = new Map();
/* metadata variables */
let conformance = undefined;
let globalvar = undefined;
let phonvar = undefined;
let version = undefined;
const metadata = {
conformance: () => ({ regions: [...conformance.regions], scripts: [...conformance.scripts] }),
globalvar: () => ({ variants: [...globalvar.variants] }),
phonvar: () => ({ variants: [...phonvar.variants] }),
version: () => ({ api: version.api, date: version.date })
};
/**
* Build a dictionary of language tags from langtags.json. This takes under 10ms
* on a reasonable laptop.
*/
function preinit() {
for (const tag of langtags) {
if (tag.tag == '_conformance') {
conformance = tag;
}
else if (tag.tag == '_globalvar') {
globalvar = tag;
}
else if (tag.tag == '_phonvar') {
phonvar = tag;
}
else if (tag.tag == '_version') {
version = tag;
}
else if (tag.full && tag.tag) {
langtagsByTag.set(tag.tag.toLowerCase(), tag);
langtagsByTag.set(tag.full.toLowerCase(), tag);
if (tag.tags) {
for (const t of tag.tags) {
langtagsByTag.set(t.toLowerCase(), tag);
}
}
}
}
}
/**
* Find a LangTag from a given tag; matches on tag, tags, full properties,
* with a case-insensitive search.
* @param tag
* @returns LangTag or undefined if not found
*/
function getLangtagByTag(tag) {
return langtagsByTag.get(tag?.toLowerCase());
}
preinit();
export { langtags, getLangtagByTag, metadata };
//# sourceMappingURL=main.js.map
//# debugId=56337f9b-01c8-56b9-b0fd-02dad625a3ef