const path = require('path'); const fs = require('fs'); const chalk = require('chalk'); const { Util } = require('../util/'); class LocaleLoader { constructor(client) { this.client = client; this.languages = {}; } template(locale, index) { return this.languages[locale] ? this.languages[locale][index] : `Locale ${locale} does not exist.` || `Entry ${locale}:${index} does not exist.`; } async loadLanguages() { const _directory = path.join(process.cwd(), 'language/languages'); const directories = fs.readdirSync(_directory); //locale directories, ex. en_us, fi for (const directory of directories) await this.loadLanguage(directory); } async loadLanguage(language) { this.client.logger.info(`Loading locale ${chalk.bold(language)}`); const directory = path.join(process.cwd(), `language/languages/${language}`); const files = Util.readdirRecursive(directory); let combined = {}; for(let file of files) { file = fs.readFileSync(file, { encoding: 'utf8' }); const result = this.loadFile(file); Object.assign(combined, result); } this.languages[language] = combined; } loadFile(file) { const lines = file.split('\n'); const parsed = {}; let matched = null; let text = ''; for(const line of lines) { const matches = line.match(/\[([_A-Z0-9]{1,})]/, 'gi'); if(matches) { if(matched) { parsed[matched] = text; matched = matches[1]; text = ''; } else { matched = matches[1]; } } else { if(matched) { text += line; } else { continue; } } } if(matched) { parsed[matched] = text; } return parsed; } } module.exports = LocaleLoader;