2017-07-10 17:08:00 -04:00
/ * *
* Copyright ( c ) 2017 - present , Facebook , Inc .
*
2017-10-05 14:14:49 -04:00
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree .
2017-07-10 17:08:00 -04:00
* /
2017-12-04 22:21:02 -05:00
const translation = require ( './translation.js' ) ;
2017-07-10 17:08:00 -04:00
2017-12-04 22:21:02 -05:00
let language = 'en' ;
2017-07-10 17:08:00 -04:00
2017-07-16 23:34:26 -04:00
/* handle escaped characters that get converted into json strings */
function parseEscapeSequences ( str ) {
return str
2017-12-04 22:21:02 -05:00
. replace ( new RegExp ( '\\\\n' , 'g' ) , '\n' )
. replace ( new RegExp ( '\\\\b' , 'g' ) , '\b' )
. replace ( new RegExp ( '\\\\f' , 'g' ) , '\f' )
. replace ( new RegExp ( '\\\\r' , 'g' ) , '\r' )
. replace ( new RegExp ( '\\\\t' , 'g' ) , '\t' )
. replace ( new RegExp ( "\\\\'" , 'g' ) , "'" )
. replace ( new RegExp ( '\\\\"' , 'g' ) , '"' )
. replace ( new RegExp ( '\\\\' , 'g' ) , '\\' ) ;
2017-07-16 23:34:26 -04:00
}
2017-07-10 17:08:00 -04:00
function setLanguage ( lang ) {
language = lang ;
}
2017-12-27 18:18:58 -05:00
function doesTranslationExist ( str , lang ) {
return (
translation [ lang ] &&
translation [ lang ] [ 'pages-strings' ] &&
translation [ lang ] [ 'pages-strings' ] [ str ]
) ;
}
2017-07-10 17:08:00 -04:00
function translate ( str ) {
2017-12-19 20:58:49 -05:00
if ( ! language || language === '' ) {
2017-12-27 18:18:58 -05:00
// Check English, just in case; otherwise, just return the raw string back
if ( doesTranslationExist ( str , 'en' ) ) {
2018-07-11 00:53:08 -04:00
return parseEscapeSequences ( translation . en [ 'pages-strings' ] [ str ] ) ;
2017-12-27 18:18:58 -05:00
}
2017-12-19 20:58:49 -05:00
return str ;
}
2017-12-27 18:18:58 -05:00
if ( ! doesTranslationExist ( str , language ) ) {
2017-10-19 19:41:20 -04:00
// if a translated string doesn't exist, but english does then fallback
2017-12-27 18:18:58 -05:00
if ( doesTranslationExist ( str , 'en' ) ) {
2017-10-19 19:41:20 -04:00
console . error (
2018-07-11 06:21:31 -04:00
` Could not find a string translation in ' ${ language } ' for string ' ${ str } '. Using English version instead. `
2017-10-19 19:41:20 -04:00
) ;
2018-07-11 00:53:08 -04:00
return parseEscapeSequences ( translation . en [ 'pages-strings' ] [ str ] ) ;
2017-10-19 19:41:20 -04:00
}
2017-10-06 15:16:27 -04:00
throw new Error (
2018-07-11 06:21:31 -04:00
` Text that you've identified for translation (' ${ str } ') hasn't been added to the global list in 'en.json'. To solve this problem run 'yarn write-translations'. `
2017-10-06 15:16:27 -04:00
) ;
}
2017-12-04 22:21:02 -05:00
return parseEscapeSequences ( translation [ language ] [ 'pages-strings' ] [ str ] ) ;
2017-07-10 17:08:00 -04:00
}
module . exports = {
2018-07-11 00:53:08 -04:00
setLanguage ,
translate ,
2017-07-10 17:08:00 -04:00
} ;