2020-04-19 12:12:10 +02:00
const path = require ( 'path' ) ;
const fs = require ( 'fs' ) ;
2020-04-19 21:52:42 +02:00
const chalk = require ( 'chalk' ) ;
2020-04-19 12:12:10 +02:00
const { Util } = require ( '../util/' ) ;
2020-04-17 17:23:13 +02:00
class LocaleLoader {
2020-04-19 12:12:10 +02:00
constructor ( client ) {
this . client = client ;
this . languages = { } ;
}
2020-04-19 21:52:42 +02:00
template ( locale , index ) {
2020-05-06 01:40:46 +02:00
// console.log(String.raw`${this.languages[locale][index]}`);
2020-07-26 22:08:30 +02:00
return ( this . languages [ locale ] ? this . languages [ locale ] [ index ] : ` Locale \` ${ locale } \` does not exist. ` ) || ` Language entry \` ${ locale } : ${ index } \` does not exist. ` ;
2020-04-19 21:52:42 +02:00
}
async loadLanguages ( ) {
const _directory = path . join ( process . cwd ( ) , 'language/languages' ) ;
const directories = fs . readdirSync ( _directory ) ; //locale directories, ex. en_us, fi
2020-05-07 01:26:16 +02:00
for ( const directory of directories ) this . loadLanguage ( directory ) ;
2020-04-19 21:52:42 +02:00
}
2020-05-07 01:26:16 +02:00
loadLanguage ( language ) {
2020-04-19 12:12:10 +02:00
const directory = path . join ( process . cwd ( ) , ` language/languages/ ${ language } ` ) ;
const files = Util . readdirRecursive ( directory ) ;
2020-05-24 11:00:54 +02:00
const combined = { } ;
2020-04-19 12:12:10 +02:00
for ( let file of files ) {
file = fs . readFileSync ( file , {
encoding : 'utf8'
} ) ;
2020-04-19 21:52:42 +02:00
const result = this . loadFile ( file ) ;
2020-04-19 12:12:10 +02:00
Object . assign ( combined , result ) ;
}
this . languages [ language ] = combined ;
2020-06-02 12:09:28 +02:00
this . client . logger . info ( ` Locale ${ chalk . bold ( language ) } was ${ chalk . bold ( "loaded" ) } . ` ) ;
2020-04-19 12:12:10 +02:00
}
2020-04-19 21:52:42 +02:00
loadFile ( file ) {
2020-04-19 12:12:10 +02:00
2020-07-25 12:02:04 +02:00
if ( process . platform === 'linux' ) file = file . replace ( '\r' , '' ) ;
2020-04-19 12:12:10 +02:00
const lines = file . split ( '\n' ) ;
const parsed = { } ;
let matched = null ;
let text = '' ;
for ( const line of lines ) {
2020-05-06 01:40:46 +02:00
if ( line . startsWith ( '//' ) ) continue ;
2020-05-24 10:54:33 +02:00
const matches = line . match ( /\[([_A-Z0-9]{1,})\]/u ) ;
2020-04-19 12:12:10 +02:00
if ( matches ) {
2020-05-24 11:00:54 +02:00
if ( matched ) {
2020-04-19 12:12:10 +02:00
parsed [ matched ] = text ;
2020-05-24 11:00:54 +02:00
[ , matched ] = matches ;
2020-04-19 12:12:10 +02:00
text = '' ;
} else {
2020-05-24 11:00:54 +02:00
[ , matched ] = matches ;
2020-04-19 12:12:10 +02:00
}
2020-07-25 11:52:49 +02:00
} else if ( matched ) {
2020-05-24 11:00:54 +02:00
text += line ;
2020-07-25 14:03:08 +02:00
if ( process . platform === 'linux' && line !== '\n' && line !== '' ) text += '\n' ;
2020-04-19 12:12:10 +02:00
} else {
2020-05-24 11:00:54 +02:00
continue ;
2020-04-19 12:12:10 +02:00
}
}
2020-05-08 08:50:54 +02:00
parsed [ matched ] = text ;
2020-04-19 12:12:10 +02:00
2020-07-25 11:41:21 +02:00
if ( process . platform === 'win32' ) for ( const [ key , value ] of Object . entries ( parsed ) ) {
2020-05-24 11:00:54 +02:00
parsed [ key ] = value . replace ( /^(\r)|(\r){1,}$/gu , '' ) . replace ( /\r/gu , '\n' ) ;
2020-07-25 11:41:21 +02:00
// console.log(String.raw`${value}`);
2020-04-19 12:12:10 +02:00
}
2020-07-25 12:12:22 +02:00
//console.log(parsed);
2020-04-19 12:12:10 +02:00
return parsed ;
}
2020-04-17 17:23:13 +02:00
}
module . exports = LocaleLoader ;