UNPKG

nano-i18n

Version:

Tiny experimental i18n library for JavaScript using tagged template literals.

72 lines (71 loc) 1.88 kB
var __defProp = Object.defineProperty; var __markAsModule = (target) => __defProp(target, "__esModule", { value: true }); var __export = (target, all) => { __markAsModule(target); for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; __export(exports, { clear: () => clear, config: () => config, k: () => key, load: () => load, t: () => translate, v: () => value }); let db = {}; const PLACEHOLDER = "{}"; let _placeholder = PLACEHOLDER; const LOG_SILENT = 0; const LOG_WARN = 1; const LOG_ERROR = 2; let _log = LOG_SILENT; function interpolate(strings, values) { return strings.reduce(function(result, current_str, idx) { return result + current_str + (idx < values.length ? values[idx] : ""); }, ""); } function key(strings) { return strings.join(_placeholder); } function value(strings, ...placeholders) { return (values) => placeholders.length ? interpolate(strings, placeholders.map((i) => values[i])) : strings.join(""); } function translate(strings, ...values) { let isString = typeof strings === "string"; let k = isString ? strings : key(strings); let val = db[k]; if (!val) { exceptional(`No translation found for ${k}`, k); return isString ? strings : interpolate(strings, values); } return typeof val === "string" ? val : val(values); } function load(k, v) { if (typeof k === "object") { Object.keys(k).forEach((i) => { db[i] = k[i]; }); } db[k] = v; } function clear() { db = {}; } function exceptional(str, key2) { if (_log === LOG_WARN) { console.warn(str); } else if (_log === LOG_ERROR) { throw new Error(str); } else if (typeof _log === "function") { _log(str, key2); } } function config(opts) { if (opts.log !== void 0) { _log = opts.log; } if (opts.placeholder !== void 0) { _placeholder = opts.placeholder; } }