Skip to content

Commit 143b370

Browse files
author
Anton Savoskin
committed
feat(sync): upload new messages for all locales
1 parent 8829286 commit 143b370

File tree

4 files changed

+17
-7
lines changed

4 files changed

+17
-7
lines changed

src/commands/sync.ts

+14-4
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import * as path from 'path';
22

3-
import { readFile, showError, showInfo, writeFile } from '../utils';
3+
import { asyncForEach, readFile, showError, showInfo, writeFile } from '../utils';
44
import { Base } from '../base';
55
import { Lokalise } from '../providers/lokalise';
66
import { Provider } from '../providers/provider';
@@ -21,14 +21,14 @@ export default class Extract extends Base {
2121
...Base.providersFlags,
2222
};
2323
provider?: Provider;
24-
messages: { [id: string]: Message } = {};
24+
messages: { [locale: string]: { [id: string]: Message } } = {};
2525

2626
async mergeToFile(locale: string) {
2727
const {
2828
flags: { messagesDir },
2929
} = this.parse(Extract);
3030
const fileName = path.join(messagesDir, `${locale}.json`);
31-
const originalMessages: { [id: string]: Message } = this.messages;
31+
const originalMessages: { [id: string]: Message } = this.messages[locale];
3232
try {
3333
const oldFile = await readFile(fileName);
3434

@@ -93,13 +93,23 @@ export default class Extract extends Base {
9393
}
9494

9595
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+
);
96103

97104
await this.provider.getKeys(locales);
98105
await Promise.all(locales.map(locale => this.mergeToFile(locale)));
99106
const newMessages = this.provider.getNewMessages();
100107
if (newMessages.length > 0) {
101108
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+
);
103113
}
104114
}
105115
}

src/providers/locize.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ export class Locize implements Provider {
4343
return '';
4444
}
4545

46-
async uploadMessages(messages: Message[]) {
46+
async uploadMessages(messages: Message[], locales: string[]) {
4747
const headers = { Authorization: `Bearer ${this.apiKey}`, 'content-type': 'application/json' };
4848
const body = messages.reduce(
4949
(acc, { id, message, defaultMessage, description }) => {

src/providers/provider.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,6 @@ import { Message } from '../types';
33
export interface Provider {
44
getKeys(locales: string[]): Promise<void>;
55
getMessage(locale: string, id: string): string;
6-
uploadMessages(messages: Message[]): Promise<void>;
6+
uploadMessages(messages: Message[], locales: string[]): Promise<void>;
77
getNewMessages(): string[];
88
}

src/utils.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ export const request = <T>({ url, body, qs, headers = {}, ...rest }: Options) =>
6060
const format = (time: Date) => time.toTimeString().replace(/.*(\d{2}:\d{2}:\d{2}).*/, '$1');
6161
export const showError = (message: string) => console.error('\x1b[31m', message, '\x1b[0m');
6262
export const showInfo = (message: string) => console.info(`\x1b[34m[${format(new Date())}]\x1b[0m`, `${message}`);
63-
export const asyncForEach = async (array: any[], callback: any) => {
63+
export const asyncForEach = async <T>(array: T[], callback: (item: T, index: number, array: T[]) => Promise<void>) => {
6464
for (let index = 0; index < array.length; index += 1) {
6565
await callback(array[index], index, array);
6666
}

0 commit comments

Comments
 (0)