1
1
import * as path from 'path' ;
2
2
3
- import { readFile , showError , showInfo , writeFile } from '../utils' ;
3
+ import { asyncForEach , readFile , showError , showInfo , writeFile } from '../utils' ;
4
4
import { Base } from '../base' ;
5
5
import { Lokalise } from '../providers/lokalise' ;
6
6
import { Provider } from '../providers/provider' ;
@@ -21,14 +21,14 @@ export default class Extract extends Base {
21
21
...Base . providersFlags ,
22
22
} ;
23
23
provider ?: Provider ;
24
- messages : { [ id : string ] : Message } = { } ;
24
+ messages : { [ locale : string ] : { [ id : string ] : Message } } = { } ;
25
25
26
26
async mergeToFile ( locale : string ) {
27
27
const {
28
28
flags : { messagesDir } ,
29
29
} = this . parse ( Extract ) ;
30
30
const fileName = path . join ( messagesDir , `${ locale } .json` ) ;
31
- const originalMessages : { [ id : string ] : Message } = this . messages ;
31
+ const originalMessages : { [ id : string ] : Message } = this . messages [ locale ] ;
32
32
try {
33
33
const oldFile = await readFile ( fileName ) ;
34
34
@@ -93,13 +93,23 @@ export default class Extract extends Base {
93
93
}
94
94
95
95
const locales = langs . split ( ',' ) ;
96
+ this . messages = locales . reduce (
97
+ ( acc , locale ) => {
98
+ acc [ locale ] = { } ;
99
+ return acc ;
100
+ } ,
101
+ { } as { [ locale : string ] : { [ id : string ] : Message } } ,
102
+ ) ;
96
103
97
104
await this . provider . getKeys ( locales ) ;
98
105
await Promise . all ( locales . map ( locale => this . mergeToFile ( locale ) ) ) ;
99
106
const newMessages = this . provider . getNewMessages ( ) ;
100
107
if ( newMessages . length > 0 ) {
101
108
showInfo ( `New translation keys: ${ newMessages . length } ` ) ;
102
- await this . provider . uploadMessages ( newMessages . map ( id => this . messages [ id ] ) ) ;
109
+ await this . provider . uploadMessages ( newMessages . map ( id => this . messages [ locales [ 0 ] ] [ id ] ) , locales ) ;
110
+ asyncForEach ( locales , locale =>
111
+ this . provider ! . uploadMessages ( newMessages . map ( id => this . messages [ locale ] [ id ] ) , locales ) ,
112
+ ) ;
103
113
}
104
114
}
105
115
}
0 commit comments