2019-09-10 00:19:39 +02:00
import en from './locales/en.json' ;
export class I18n {
constructor ( appState ) {
// Available languages should be kept up to date with the available locales.
this . availableLanguages = {
default : en ,
en ,
} ;
this . language = appState . language ;
}
translate ( section , phrase ) {
let result ;
let language = this . availableLanguages . default ;
if ( typeof this . availableLanguages [ this . language ] == 'undefined' ) {
console . warn ( ` The target language ( ${ this . language } ) does not exist. Defaulting to ${ this . availableLanguages . default . name } ( ${ this . availableLanguages . default . locale } ). ` ) ;
} else if ( typeof this . availableLanguages [ this . language ] [ section ] == 'undefined' || typeof this . availableLanguages [ this . language ] [ section ] [ phrase ] == 'undefined' ) {
console . warn ( ` The translation for " ${ section } . ${ phrase } " is not set in the ${ this . language } locale. Using ${ this . availableLanguages . default . name } ( ${ this . availableLanguages . default . locale } ) instead. ` ) ;
} else {
language = this . availableLanguages [ this . language ] ;
}
if ( typeof language [ section ] !== 'undefined' && typeof language [ section ] [ phrase ] !== 'undefined' ) {
result = language [ section ] [ phrase ] ;
} else {
console . error ( ` The translation for " ${ section } . ${ phrase } " is set up in neither the target nor default locale. ` ) ;
2019-09-11 01:36:49 +02:00
result = ` ${ section } . ${ phrase } ` ;
2019-09-10 00:19:39 +02:00
}
return result ;
}
_ _ ( translation ) {
const pieces = translation . split ( '.' ) ;
const result = this . translate ( pieces [ 0 ] , pieces [ 1 ] ) ;
return result ;
}
}