2018-03-23 18:37:32 -07:00
|
|
|
/* eslint-env node */
|
2018-07-21 12:00:08 -07:00
|
|
|
/* global log */
|
2017-05-15 14:48:19 -07:00
|
|
|
|
2018-03-23 18:37:32 -07:00
|
|
|
exports.setup = (locale, messages) => {
|
|
|
|
if (!locale) {
|
|
|
|
throw new Error('i18n: locale parameter is required');
|
|
|
|
}
|
|
|
|
if (!messages) {
|
|
|
|
throw new Error('i18n: messages parameter is required');
|
|
|
|
}
|
2017-05-15 14:48:19 -07:00
|
|
|
|
2018-03-23 18:37:32 -07:00
|
|
|
function getMessage(key, substitutions) {
|
|
|
|
const entry = messages[key];
|
|
|
|
if (!entry) {
|
2018-07-21 12:00:08 -07:00
|
|
|
log.error(
|
2018-04-27 17:25:04 -04:00
|
|
|
`i18n: Attempted to get translation for nonexistent key '${key}'`
|
|
|
|
);
|
2018-03-23 18:37:32 -07:00
|
|
|
return '';
|
|
|
|
}
|
2017-04-03 23:32:46 -07:00
|
|
|
|
2018-03-23 18:37:32 -07:00
|
|
|
const { message } = entry;
|
2018-04-05 12:39:16 -07:00
|
|
|
if (Array.isArray(substitutions)) {
|
2018-03-23 18:37:32 -07:00
|
|
|
return substitutions.reduce(
|
|
|
|
(result, substitution) => result.replace(/\$.+?\$/, substitution),
|
|
|
|
message
|
|
|
|
);
|
|
|
|
} else if (substitutions) {
|
|
|
|
return message.replace(/\$.+?\$/, substitutions);
|
|
|
|
}
|
|
|
|
|
|
|
|
return message;
|
|
|
|
}
|
|
|
|
|
|
|
|
getMessage.getLocale = () => locale;
|
|
|
|
|
|
|
|
return getMessage;
|
|
|
|
};
|