@dvhb/react-intl-messages
Version:
Library for parsing source files and extract react-intl messages
90 lines (89 loc) • 3.41 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const utils_1 = require("../utils");
const BASE_URL = 'https://api.lokalise.co/api2';
class Lokalise {
constructor(defaultLocale, projectId, token) {
this.defaultLocale = defaultLocale;
this.projectId = projectId;
this.token = token;
this.lokaliseKeys = [];
this.newMessages = [];
}
getHeaders() {
return {
'content-type': 'application/json',
'X-Api-Token': this.token,
};
}
formatMessages(messages) {
return messages.map(message => ({
key_name: message.id,
description: message ? message.description : '',
platforms: ['ios', 'android', 'web', 'other'],
translations: [{ language_iso: this.defaultLocale, translation: message ? message.defaultMessage : '' }],
}));
}
async getKeys() {
utils_1.showInfo('Start fetching messages from Lokalise');
try {
const response = await utils_1.request({
headers: this.getHeaders(),
url: `${BASE_URL}/projects/${this.projectId}/keys`,
method: 'GET',
qs: { include_translations: '1', limit: 5000 },
});
if (!response || !response.keys)
throw Error('Wrong answer from lokalise');
this.lokaliseKeys = [...response.keys];
const arrOfRequests = [];
const currentPage = 2;
const arr = [...Array(Number(response.headers['x-pagination-page-count']) - 1)];
arr.forEach((i, index) => {
arrOfRequests.push(utils_1.request({
headers: this.getHeaders(),
url: `${BASE_URL}/projects/${this.projectId}/keys`,
method: 'GET',
qs: { include_translations: '1', limit: 500, page: currentPage + index },
}));
});
const res = await Promise.all(arrOfRequests);
res.forEach(i => {
this.lokaliseKeys = [...this.lokaliseKeys, ...i.keys];
});
utils_1.showInfo('Finish fetching messages from Lokalise');
}
catch (e) {
utils_1.showError(`Error while fetching strings from lokalise\n${e}`);
}
}
getMessage(locale, id) {
const key = this.lokaliseKeys.find(key => key.key_name.web === id);
const lokaliseString = key && key.translations.find(translation => translation.language_iso === locale);
if (lokaliseString) {
return lokaliseString.translation;
}
if (locale === this.defaultLocale) {
this.newMessages.push(id);
}
return '';
}
async uploadMessages(messages) {
try {
const response = await utils_1.request({
headers: this.getHeaders(),
body: { keys: this.formatMessages(messages) },
url: `${BASE_URL}/projects/${this.projectId}/keys`,
method: 'POST',
});
utils_1.showInfo(`Response from lokalise: ${response}`);
}
catch (e) {
utils_1.showError(`Error while uploading strings to lokalise\n${e}`);
}
}
getNewMessages() {
return this.newMessages;
}
}
exports.Lokalise = Lokalise;