// Copyright 2019 Campbell Crowley. All rights reserved.
// Author: Campbell Crowley (dev@campbellcrowley.com)
/**
* @description Base locale class that stores strings for a single locale.
* @memberof Strings
* @inner
*/
class Locale {
/**
* @description Bind this.
*/
constructor() {
this.get = this.get.bind(this);
this.getRaw = this.getRaw.bind(this);
/**
* @description The bot's username.
*/
this.username = 'SpikeyBot';
/**
* @description Empty string to replace with passed data.
*/
this.fillOne = '{}';
}
/**
* @description Get string with given key and replace placeholders.
* @public
* @this {Locale}
* @param {string} key Key of string to lookup.
* @param {...string} [rep] Placeholder replacement strings.
* @returns {sstring} String with replaced placeholders, or key if unable to
* find.
*/
get(key, ...rep) {
let s = this.getRaw(key);
let i = 0;
if (Array.isArray(s)) s = s[Math.floor(Math.random() * s.length)];
if (typeof s === 'string') {
return s.replace(/\{(\d*)\}/g, (m, p) => {
let out = rep[i++];
p *= 1;
if (p >= 0 && p < rep.length) out = rep[p];
return out;
});
} else {
return key;
}
}
/**
* @description Get get the raw data from the locale file at the given key.
* @public
* @this {Locale}
* @param {string} key Key of string to lookup.
* @returns {?string|string[]} Data from locale file, or null if unable to
* find.
*/
getRaw(key) {
return this[key] || null;
}
}
module.exports = Locale;