From 25bdf6f3c0f52c43bebbea57d0fab909fbacd829 Mon Sep 17 00:00:00 2001 From: antelle Date: Sun, 29 Jan 2017 10:53:36 +0100 Subject: [PATCH] translation download script --- .idea/jsLibraryMappings.xml | 6 +++- util/download-translations.js | 63 +++++++++++++++++++++++++++++++++++ 2 files changed, 68 insertions(+), 1 deletion(-) create mode 100644 util/download-translations.js diff --git a/.idea/jsLibraryMappings.xml b/.idea/jsLibraryMappings.xml index c8f67ffc..d23208fb 100644 --- a/.idea/jsLibraryMappings.xml +++ b/.idea/jsLibraryMappings.xml @@ -1,2 +1,6 @@ - \ No newline at end of file + + + + + \ No newline at end of file diff --git a/util/download-translations.js b/util/download-translations.js new file mode 100644 index 00000000..0b29aa90 --- /dev/null +++ b/util/download-translations.js @@ -0,0 +1,63 @@ +/* eslint-disable no-console */ + +const https = require('https'); +const crypto = require('crypto'); +const fs = require('fs'); + +const keys = require('../keys/onesky.json'); + +const PROJECT_ID = '173183'; +const API_URL = 'https://platform.api.onesky.io/1/projects/:project_id/translations/multilingual'; +const PHRASE_COUNT_THRESHOLD_PERCENT = 75; + +const ts = Math.floor(new Date() / 1000); + +const hashStr = ts + keys.secret; +const hash = crypto.createHash('md5').update(hashStr).digest('hex'); +const urlParams = { + 'api_key': keys.public, + 'timestamp': ts, + 'dev_hash': hash, + 'source_file_name': 'base.json', + 'file_format': 'I18NEXT_MULTILINGUAL_JSON' +}; +const url = API_URL.replace(':project_id', PROJECT_ID) + '?' + + Object.keys(urlParams).map(param => param + '=' + urlParams[param]).join('&'); +console.log('Sending request...'); +https.get(url, res => { + if (res.statusCode !== 200) { + console.error(`API error ${res.statusCode}`); + return; + } + console.log('Response received, reading...'); + let data = []; + res.on('data', chunk => data.push(chunk)); + res.on('end', () => { + console.log('Data received, parsing...'); + let json = Buffer.concat(data).toString('utf8'); + let languages = JSON.parse(json); + let langCount = 0; + let skipCount = 0; + let totalPhraseCount = Object.keys(languages['en-US'].translation).length; + Object.keys(languages).forEach(lang => { + let languageTranslations = languages[lang].translation; + lang = lang.substr(0, 2); + if (lang === 'en' || !languageTranslations) { + return; + } + let langPhraseCount = Object.keys(languageTranslations).length; + let percentage = Math.round(langPhraseCount / totalPhraseCount * 100); + let included = percentage >= PHRASE_COUNT_THRESHOLD_PERCENT; + let action = included ? 'OK' : 'SKIP'; + console.log(`${lang}: ${langPhraseCount} / ${totalPhraseCount} (${percentage}%) -> ${action}`); + if (included) { + langCount++; + let languageJson = JSON.stringify(languageTranslations, null, 4); + fs.writeFileSync(`app/scripts/locales/${lang}.json`, languageJson); + } else { + skipCount++; + } + }); + console.log(`Done: ${langCount} written, ${skipCount} skipped`); + }); +});