nano-i18n
Version:
Tiny experimental i18n library for JavaScript using tagged template literals.
72 lines (71 loc) • 1.88 kB
JavaScript
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;
}
}