#!/usr/bin/env node /* eslint-disable no-console */ /* eslint-disable no-use-before-define */ require('dotenv').config() const path = require('path') const fs = require('fs') const axios = require('axios') const querystring = require('querystring') const forEach = require('lodash/forEach') const objectPath = require('object-path') const yaml = require('js-yaml') const chalk = require('chalk') const { LOKALISE_TOKEN, LOKALISE_PROJECT } = process.env const BASE = 'https://api.lokalise.co/api' const stats = { nb: 0, } main() async function main() { try { console.log(`${chalk.blue('[>]')} ${chalk.dim('Fetching translations...')}`) const url = `${BASE}/string/list` const { data } = await axios.post( url, querystring.stringify({ api_token: LOKALISE_TOKEN, id: LOKALISE_PROJECT, }), ) if (data.response.status === 'error') { throw new Error(JSON.stringify(data.response)) } const { strings } = data forEach(strings, syncLanguage) console.log( `${chalk.blue('[>]')} ${chalk.dim('Successfully imported')} ${stats.nb} ${chalk.dim( 'translations', )}`, ) } catch (err) { console.log(err) console.log(`${chalk.red('[x] Error in the process')}`) process.exit(1) } } function syncLanguage(translations, language) { const folderPath = getLanguageFolderPath(language) const filePath = path.resolve(folderPath, 'translation.yml') if (!fs.existsSync(folderPath)) { fs.mkdirSync(folderPath) } const obj = translations.reduce((acc, cur) => { objectPath.set(acc, cur.key, cur.translation) console.log(`${chalk.green('[✓]')} ${language} ${chalk.dim(cur.key)}`) ++stats.nb return acc }, {}) fs.writeFileSync(filePath, yaml.dump(obj)) } function getLanguageFolderPath(language) { return path.resolve(__dirname, `../static/i18n/${language}`) }