Skip to main content
Module

x/i18next/ResourceStore.js

i18next: learn once - translate everywhere
Go to Latest
File
import EventEmitter from './EventEmitter.js';import * as utils from './utils.js';
class ResourceStore extends EventEmitter { constructor(data, options = { ns: ['translation'], defaultNS: 'translation' }) { super(); this.data = data || {}; this.options = options; if (this.options.keySeparator === undefined) { this.options.keySeparator = '.'; } }
addNamespaces(ns) { if (this.options.ns.indexOf(ns) < 0) { this.options.ns.push(ns); } }
removeNamespaces(ns) { const index = this.options.ns.indexOf(ns); if (index > -1) { this.options.ns.splice(index, 1); } }
getResource(lng, ns, key, options = {}) { const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;
let path = [lng, ns]; if (key && typeof key !== 'string') path = path.concat(key); if (key && typeof key === 'string') path = path.concat(keySeparator ? key.split(keySeparator) : key);
if (lng.indexOf('.') > -1) { path = lng.split('.'); }
return utils.getPath(this.data, path); }
addResource(lng, ns, key, value, options = { silent: false }) { let keySeparator = this.options.keySeparator; if (keySeparator === undefined) keySeparator = '.';
let path = [lng, ns]; if (key) path = path.concat(keySeparator ? key.split(keySeparator) : key);
if (lng.indexOf('.') > -1) { path = lng.split('.'); value = ns; ns = path[1]; }
this.addNamespaces(ns);
utils.setPath(this.data, path, value);
if (!options.silent) this.emit('added', lng, ns, key, value); }
addResources(lng, ns, resources, options = { silent: false }) { /* eslint no-restricted-syntax: 0 */ for (const m in resources) { if ( typeof resources[m] === 'string' || Object.prototype.toString.apply(resources[m]) === '[object Array]' ) this.addResource(lng, ns, m, resources[m], { silent: true }); } if (!options.silent) this.emit('added', lng, ns, resources); }
addResourceBundle(lng, ns, resources, deep, overwrite, options = { silent: false }) { let path = [lng, ns]; if (lng.indexOf('.') > -1) { path = lng.split('.'); deep = resources; resources = ns; ns = path[1]; }
this.addNamespaces(ns);
let pack = utils.getPath(this.data, path) || {};
if (deep) { utils.deepExtend(pack, resources, overwrite); } else { pack = { ...pack, ...resources }; }
utils.setPath(this.data, path, pack);
if (!options.silent) this.emit('added', lng, ns, resources); }
removeResourceBundle(lng, ns) { if (this.hasResourceBundle(lng, ns)) { delete this.data[lng][ns]; } this.removeNamespaces(ns);
this.emit('removed', lng, ns); }
hasResourceBundle(lng, ns) { return this.getResource(lng, ns) !== undefined; }
getResourceBundle(lng, ns) { if (!ns) ns = this.options.defaultNS;
// COMPATIBILITY: remove extend in v2.1.0 if (this.options.compatibilityAPI === 'v1') return { ...{}, ...this.getResource(lng, ns) };
return this.getResource(lng, ns); }
getDataByLanguage(lng) { return this.data[lng]; }
toJSON() { return this.data; }}
export default ResourceStore;