meriadec
7 years ago
4 changed files with 80 additions and 40 deletions
@ -0,0 +1,71 @@ |
|||||
|
#!/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}`) |
||||
|
} |
Loading…
Reference in new issue