@@ -25,31 +25,41 @@ export default class LuisTranslate extends Command {
2525 async run ( ) {
2626 try {
2727 const { flags} = this . parse ( LuisTranslate )
28- let inputStat = await fs . stat ( flags . in )
28+ // Check if data piped in stdin
29+ let stdin = await this . readStdin ( )
2930 let outputStat = flags . out ? await fs . stat ( flags . out ) : null
3031
3132 if ( outputStat && outputStat . isFile ( ) ) {
3233 throw new CLIError ( 'Output can only be writen to a folder' )
3334 }
3435
35- let isLu = ! inputStat . isFile ( ) ? true : path . extname ( flags . in ) === '.lu'
36+ let isLu = await fileHelper . detectLuContent ( stdin , flags . in )
3637 let result : any
3738 if ( isLu ) {
38- let luFiles = await fileHelper . getLuFiles ( flags . in , flags . recurse )
39- result = await luTranslator . translateLuFile ( luFiles , flags . translatekey , flags . tgtlang , flags . srclang , flags . translate_comments , flags . translate_link_text )
39+ let luFiles = await fileHelper . getLuObjects ( stdin , flags . in , flags . recurse )
40+ result = await luTranslator . translateLuList ( luFiles , flags . translatekey , flags . tgtlang , flags . srclang , flags . translate_comments , flags . translate_link_text )
4041 } else {
41- let translation = await luisConverter . parseLuisFileToLu ( flags . in , false )
42- translation = await luTranslator . translateLuObj ( result , flags . translatekey , flags . tgtlang , flags . srclang , flags . translate_comments , flags . translate_link_text )
43- result = { }
44- Object . keys ( translation ) . forEach ( async idx => {
45- result [ flags . in ] [ idx ] = await luConverter . parseFile ( translation [ idx ] [ 0 ] , false )
46- } )
42+ let json = stdin ? stdin : await fileHelper . getContentFromFile ( flags . in )
43+ let translation = await luisConverter . parseLuisObjectToLu ( json , false )
44+ translation = await luTranslator . translateLuObj ( translation , flags . translatekey , flags . tgtlang , flags . srclang , flags . translate_comments , flags . translate_link_text )
45+ let key = stdin ? 'stdin' : path . basename ( flags . in )
46+ result = {
47+ [ key ] : { }
48+ }
49+ for ( let lng in translation ) {
50+ let translatedJSON = await luConverter . parseFile ( translation [ lng ] , false )
51+ result [ key ] [ lng ] = await translatedJSON . LUISJsonStructure
52+ }
4753 }
4854
4955 if ( flags . out ) {
50- await this . writeOutput ( result , flags . out )
56+ await this . writeOutput ( result , flags . out , isLu )
5157 } else {
52- this . log ( result )
58+ if ( isLu ) {
59+ this . log ( result )
60+ } else {
61+ this . log ( JSON . stringify ( result , null , 2 ) )
62+ }
5363 }
5464
5565 } catch ( err ) {
@@ -60,13 +70,14 @@ export default class LuisTranslate extends Command {
6070 }
6171 }
6272
63- private async writeOutput ( translatedObject : any , out : string ) {
73+ private async writeOutput ( translatedObject : any , out : string , isLu : boolean ) {
6474 let filePath = ''
6575 try {
6676 for ( let file in translatedObject ) {
6777 for ( let lng in translatedObject [ file ] ) {
6878 filePath = await fileHelper . generateNewTranslatedFilePath ( file , lng , out )
69- await fs . writeFile ( filePath , translatedObject [ path . basename ( file ) ] [ lng ] [ 0 ] , 'utf-8' )
79+ let content = isLu ? translatedObject [ file ] [ lng ] : JSON . stringify ( translatedObject [ file ] [ lng ] , null , 2 )
80+ await fs . writeFile ( filePath , content , 'utf-8' )
7081 }
7182 }
7283 } catch ( err ) {
0 commit comments