minecraft-pcc
Version:
A simple, but powerful command compiler for Minecraft command players.
64 lines (56 loc) • 2.3 kB
JavaScript
/** @module Translate*/
const OPTIONS = require('./options.json');
const data = require('./TranslateStrings.json');
/**
* getTranslated - Get translation.
* Let the items in the list of translation string in JSON be a,
* let the items in the options be b.
* There would be 4 possible combinations depends on the number of items
* <ol>
* <li> ababab (number of a = number of b) </li>
* <li> ababa (number of a = number of b + 1) </li>
* <li> babab (number of a + 1 = number of b) </li>
* <li> Error (for other cases) </li>
* </ol>
*
* @param {string} name Key name of the string
* @param {...Object} options Insert options into intervals between TranslatedStrings.
* @return {string} translated string
*/
function getTranslated(name, ...options) {
if (name != "NoTranslation" && name != "UnknownKeyError" && Object.keys(data).indexOf(name) == -1)
throw new Error(getTranslated("UnknownKeyError", name));
if (name != "NoTranslation" && name != "UnknownKeyError" && Object.keys(data[name]).indexOf(OPTIONS.language) == -1)
throw new Error(getTranslated("NoTranslation", name));
let parts = data[name][OPTIONS.language];
let temp = [];
if (options) {
if (parts.length == options.length + 1) {
for (let i = 0; i < options.length; i++) {
temp.push(parts[i]);
temp.push(options[i]);
}
temp.push(parts[parts.length - 1]);
} else if (parts.length == options.length) {
for (let i = 0; i < options.length; i++) {
temp.push(parts[i]);
temp.push(options[i]);
}
} else if (parts.length + 1 == options.length) {
for (let i = 0; i < parts.length; i++) {
temp.push(options[i]);
temp.push(parts[i]);
}
temp.push(options[options.length - 1]);
} else {
throw new Error(data['Error'][OPTIONS.language].join(''));
}
} else {
if (parts.length == 1)
return parts[0];
else
throw new Error(data['Error'][OPTIONS.language].join(''));
}
return temp.join('');
}
exports.translate = getTranslated;