UNPKG

ilingo

Version:

This is a lightweight library for translation.

535 lines (526 loc) 11 kB
import { isObject, hasOwnProperty } from 'smob'; import { getPathValue, setPathValue } from 'pathtrace'; /* * Copyright (c) 2023. * Author Peter Placzek (tada5hi) * For the full copyright and license information, * view the LICENSE file that was distributed with this source code. */ const LOCALE_DEFAULT = 'en'; function isLineRecord(value) { if (!isObject(value)) { return false; } const ob = value; const keys = Object.keys(ob); for(let i = 0; i < keys.length; i++){ /* istanbul ignore next */ if (typeof ob[keys[i]] !== 'string' && !isLineRecord(ob[keys[i]])) { return false; } } return true; } var aa = "Afar"; var ab = "Abkhazian"; var ae = "Avestan"; var af = "Afrikaans"; var ak = "Akan"; var am = "Amharic"; var an = "Aragonese"; var ar = "Arabic"; var as = "Assamese"; var av = "Avaric"; var ay = "Aymara"; var az = "Azerbaijani"; var ba = "Bashkir"; var be = "Belarusian"; var bg = "Bulgarian"; var bh = "Bihari languages"; var bi = "Bislama"; var bm = "Bambara"; var bn = "Bengali"; var bo = "Tibetan"; var br = "Breton"; var bs = "Bosnian"; var ca = "Catalan"; var ce = "Chechen"; var ch = "Chamorro"; var co = "Corsican"; var cr = "Cree"; var cs = "Czech"; var cu = "Church Slavic"; var cv = "Chuvash"; var cy = "Welsh"; var da = "Danish"; var de = "German"; var dv = "Maldivian"; var dz = "Dzongkha"; var ee = "Ewe"; var el = "Greek"; var en = "English"; var eo = "Esperanto"; var es = "Spanish"; var et = "Estonian"; var eu = "Basque"; var fa = "Persian"; var ff = "Fulah"; var fi = "Finnish"; var fj = "Fijian"; var fo = "Faroese"; var fr = "French"; var fy = "Western Frisian"; var ga = "Irish"; var gd = "Gaelic"; var gl = "Galician"; var gn = "Guarani"; var gu = "Gujarati"; var gv = "Manx"; var ha = "Hausa"; var he = "Hebrew"; var hi = "Hindi"; var ho = "Hiri Motu"; var hr = "Croatian"; var ht = "Haitian"; var hu = "Hungarian"; var hy = "Armenian"; var hz = "Herero"; var ia = "Interlingua"; var id = "Indonesian"; var ie = "Interlingue"; var ig = "Igbo"; var ii = "Sichuan Yi"; var ik = "Inupiaq"; var io = "Ido"; var is = "Icelandic"; var it = "Italian"; var iu = "Inuktitut"; var ja = "Japanese"; var jv = "Javanese"; var ka = "Georgian"; var kg = "Kongo"; var ki = "Kikuyu"; var kj = "Kuanyama"; var kk = "Kazakh"; var kl = "Kalaallisut"; var km = "Central Khmer"; var kn = "Kannada"; var ko = "Korean"; var kr = "Kanuri"; var ks = "Kashmiri"; var ku = "Kurdish"; var kv = "Komi"; var kw = "Cornish"; var ky = "Kirghiz"; var la = "Latin"; var lb = "Luxembourgish"; var lg = "Ganda"; var li = "Limburgan"; var ln = "Lingala"; var lo = "Lao"; var lt = "Lithuanian"; var lu = "Luba-Katanga"; var lv = "Latvian"; var mg = "Malagasy"; var mh = "Marshallese"; var mi = "Maori"; var mk = "Macedonian"; var ml = "Malayalam"; var mn = "Mongolian"; var mr = "Marathi"; var ms = "Malay"; var mt = "Maltese"; var my = "Burmese"; var na = "Nauru"; var nb = "Norwegian"; var nd = "North Ndebele"; var ne = "Nepali"; var ng = "Ndonga"; var nl = "Dutch"; var nn = "Norwegian"; var no = "Norwegian"; var nr = "South Ndebele"; var nv = "Navajo"; var ny = "Chichewa"; var oc = "Occitan"; var oj = "Ojibwa"; var om = "Oromo"; var or = "Oriya"; var os = "Ossetic"; var pa = "Panjabi"; var pi = "Pali"; var pl = "Polish"; var ps = "Pushto"; var pt = "Portuguese"; var qu = "Quechua"; var rm = "Romansh"; var rn = "Rundi"; var ro = "Romanian"; var ru = "Russian"; var rw = "Kinyarwanda"; var sa = "Sanskrit"; var sc = "Sardinian"; var sd = "Sindhi"; var se = "Northern Sami"; var sg = "Sango"; var si = "Sinhala"; var sk = "Slovak"; var sl = "Slovenian"; var sm = "Samoan"; var sn = "Shona"; var so = "Somali"; var sq = "Albanian"; var sr = "Serbian"; var ss = "Swati"; var st = "Sotho, Southern"; var su = "Sundanese"; var sv = "Swedish"; var sw = "Swahili"; var ta = "Tamil"; var te = "Telugu"; var tg = "Tajik"; var th = "Thai"; var ti = "Tigrinya"; var tk = "Turkmen"; var tl = "Tagalog"; var tn = "Tswana"; var to = "Tonga"; var tr = "Turkish"; var ts = "Tsonga"; var tt = "Tatar"; var tw = "Twi"; var ty = "Tahitian"; var ug = "Uighur"; var uk = "Ukrainian"; var ur = "Urdu"; var uz = "Uzbek"; var ve = "Venda"; var vi = "Vietnamese"; var vo = "Volapük"; var wa = "Walloon"; var wo = "Wolof"; var xh = "Xhosa"; var yi = "Yiddish"; var yo = "Yoruba"; var za = "Zhuang"; var zh = "Chinese"; var zu = "Zulu"; var codes = { aa: aa, ab: ab, ae: ae, af: af, ak: ak, am: am, an: an, ar: ar, as: as, av: av, ay: ay, az: az, ba: ba, be: be, bg: bg, bh: bh, bi: bi, bm: bm, bn: bn, bo: bo, br: br, bs: bs, ca: ca, ce: ce, ch: ch, co: co, cr: cr, cs: cs, cu: cu, cv: cv, cy: cy, da: da, de: de, dv: dv, dz: dz, ee: ee, el: el, en: en, eo: eo, es: es, et: et, eu: eu, fa: fa, ff: ff, fi: fi, fj: fj, fo: fo, fr: fr, fy: fy, ga: ga, gd: gd, gl: gl, gn: gn, gu: gu, gv: gv, ha: ha, he: he, hi: hi, ho: ho, hr: hr, ht: ht, hu: hu, hy: hy, hz: hz, ia: ia, id: id, ie: ie, ig: ig, ii: ii, ik: ik, io: io, is: is, it: it, iu: iu, ja: ja, jv: jv, ka: ka, kg: kg, ki: ki, kj: kj, kk: kk, kl: kl, km: km, kn: kn, ko: ko, kr: kr, ks: ks, ku: ku, kv: kv, kw: kw, ky: ky, la: la, lb: lb, lg: lg, li: li, ln: ln, lo: lo, lt: lt, lu: lu, lv: lv, mg: mg, mh: mh, mi: mi, mk: mk, ml: ml, mn: mn, mr: mr, ms: ms, mt: mt, my: my, na: na, nb: nb, nd: nd, ne: ne, ng: ng, nl: nl, nn: nn, no: no, nr: nr, nv: nv, ny: ny, oc: oc, oj: oj, om: om, or: or, os: os, pa: pa, pi: pi, pl: pl, ps: ps, pt: pt, qu: qu, rm: rm, rn: rn, ro: ro, ru: ru, rw: rw, sa: sa, sc: sc, sd: sd, se: se, sg: sg, si: si, sk: sk, sl: sl, sm: sm, sn: sn, so: so, sq: sq, sr: sr, ss: ss, st: st, su: su, sv: sv, sw: sw, ta: ta, te: te, tg: tg, th: th, ti: ti, tk: tk, tl: tl, tn: tn, to: to, tr: tr, ts: ts, tt: tt, tw: tw, ty: ty, ug: ug, uk: uk, ur: ur, uz: uz, ve: ve, vi: vi, vo: vo, wa: wa, wo: wo, xh: xh, yi: yi, yo: yo, za: za, zh: zh, zu: zu }; function isISO639LanguageCode(input) { return hasOwnProperty(codes, input); } function isBCP47LanguageCode(input) { const hyphenIndex = input.indexOf('-'); if (hyphenIndex !== -1) { input = input.substring(0, hyphenIndex); } return isISO639LanguageCode(input); } /* * Copyright (c) 2023. * Author Peter Placzek (tada5hi) * For the full copyright and license information, * view the LICENSE file that was distributed with this source code. */ function template(str, data, regex = /\{\{(.+?)\}\}/g) { return Array.from(str.matchAll(regex)).reduce((acc, match)=>{ if (typeof data[match[1]] !== 'undefined') { return acc.replace(match[0], data[match[1]]); } return acc; }, str); } class Ilingo { // ---------------------------------------------------- merge(instance) { const ownEntries = Array.from(this.stores.values()); const foreignEntries = Array.from(instance.stores.values()); let foreignEntriesIndex = -1; for(let i = 0; i < foreignEntries.length; i++){ foreignEntriesIndex = -1; for(let j = 0; j < ownEntries.length; j++){ if (ownEntries[j] === foreignEntries[i]) { foreignEntriesIndex = j; break; } } if (foreignEntriesIndex === -1) { this.stores.add(foreignEntries[i]); } } } // ---------------------------------------------------- setLocale(key) { this.locale = key; } resetLocale() { this.locale = LOCALE_DEFAULT; } getLocale() { return this.locale; } // ---------------------------------------------------- async getLocales() { const locales = []; const entries = this.stores.values(); // eslint-disable-next-line no-constant-condition while(true){ const store = entries.next(); if (store.done) { break; } locales.push(...await store.value.getLocales()); } return Array.from(new Set(locales)); } // ---------------------------------------------------- async get(ctx) { let message; const entries = this.stores.values(); // eslint-disable-next-line no-constant-condition while(true){ const store = entries.next(); if (store.done) { break; } message = await store.value.get({ locale: ctx.locale || this.getLocale(), group: ctx.group, key: ctx.key }); if (message) { break; } } if (!message) { return undefined; } return this.format(message, ctx.data || {}); } // ---------------------------------------------------- format(input, data) { return template(input, data || {}); } // ---------------------------------------------------- constructor(input = {}){ this.locale = input.locale || LOCALE_DEFAULT; this.stores = new Set(); if (input.store) { this.stores.add(input.store); } } } class MemoryStore { async get(context) { if (!this.data[context.locale] || !this.data[context.locale][context.group]) { return undefined; } const output = getPathValue(this.data[context.locale][context.group], context.key); if (typeof output === 'string') { return output; } return undefined; } async set(context) { this.initLines(context.group, context.locale); setPathValue(this.data[context.locale][context.group], context.key, context.value); } initLines(group, locale) { if (typeof this.data[locale] === 'undefined') { this.data[locale] = {}; } if (typeof this.data[locale][group] === 'undefined') { this.data[locale][group] = {}; } } async getLocales() { return Object.keys(this.data); } constructor(options){ this.data = options.data; } } export { Ilingo, MemoryStore, isBCP47LanguageCode, isISO639LanguageCode, isLineRecord, template }; //# sourceMappingURL=index.mjs.map