You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
1.9 KiB
71 lines
1.9 KiB
#!/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}`)
|
|
}
|
|
|