89 lines
2.3 KiB
JavaScript
89 lines
2.3 KiB
JavaScript
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) {
|
|
|
|
// console.log(String.raw`${this.languages[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) this.loadLanguage(directory);
|
|
|
|
}
|
|
|
|
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) {
|
|
if(line.startsWith('//')) continue;
|
|
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;
|
|
}
|
|
}
|
|
}
|
|
parsed[matched] = text;
|
|
|
|
for(const [ key, value ] of Object.entries(parsed)) {
|
|
parsed[key] = value.replace(/^(\r)|(\r){1,}$/g, '');
|
|
}
|
|
|
|
return parsed;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
module.exports = LocaleLoader; |