mongaku/mongaku

View on GitHub
src/lib/i18n.js

Summary

Maintainability
A
0 mins
Test Coverage
// @flow

const fs = require("fs");
const path = require("path");

const options = require("./options");
const config = require("./config");

const translationsMap = {};

for (const locale in options.locales) {
    if (locale === options.defaultLocale) {
        continue;
    }

    const file = path.resolve(config.TRANSLATIONS_DIR, locale, "messages.json");
    try {
        const {messages} = JSON.parse(fs.readFileSync(file, "utf8"));
        translationsMap[locale] = messages;
    } catch (e) {
        console.error(`Error loading translation locale: ${locale}.`);
    }
}

module.exports = (lang: string) => {
    const translations = translationsMap[lang] || {};

    return {
        lang,
        defaultLocale: options.defaultLocale,
        translations,

        gettext(message: string) {
            const translation = translations[message];

            return translation && translation[1] ? translation[1] : message;
        },

        format(msg: string, fields: {}) {
            return msg.replace(/%\((.*?)\)s/g, (all, name) => fields[name]);
        },
    };
};