diff --git a/data/locales.json b/data/locales.json index 44287a1d9..1e5fde723 100644 --- a/data/locales.json +++ b/data/locales.json @@ -1,66 +1,190 @@ { - "dataLocales": [ - "af", - "sq", - "ar", - "ar-AA", - "hy", - "ast", - "bn", - "bs", - "bg-BG", - "ca", - "zh", - "zh-CN", - "zh-HK", - "zh-TW", - "yue", - "hr", - "cs", - "da", - "nl", - "en-GB", - "eo", - "et", - "fi", - "fr", - "gl", - "de", - "el", - "gu", - "hi", - "hu", - "is", - "id", - "it", - "ja", - "kn", - "ko", - "ku", - "lv", - "lij", - "lt", - "ml", - "no", - "fa", - "pl", - "pt", - "pt-BR", - "ro", - "ru", - "sc", - "sr", - "si", - "sk", - "sl", - "es", - "sv", - "tl", - "ta", - "te", - "th", - "tr", - "uk", - "vi" - ] + "dataLocales": { + "af": { + "rtl": false + }, + "ar": { + "rtl": true + }, + "ar-AA": { + "rtl": true + }, + "ast": { + "rtl": false + }, + "bg-BG": { + "rtl": false + }, + "bn": { + "rtl": false + }, + "bs": { + "rtl": false + }, + "ca": { + "rtl": false + }, + "cs": { + "rtl": false + }, + "da": { + "rtl": false + }, + "de": { + "rtl": false + }, + "el": { + "rtl": false + }, + "en-GB": { + "rtl": false + }, + "eo": { + "rtl": false + }, + "es": { + "rtl": false + }, + "et": { + "rtl": false + }, + "fa": { + "rtl": true + }, + "fi": { + "rtl": false + }, + "fr": { + "rtl": false + }, + "gl": { + "rtl": false + }, + "gu": { + "rtl": false + }, + "hi": { + "rtl": false + }, + "hr": { + "rtl": false + }, + "hu": { + "rtl": false + }, + "hy": { + "rtl": false + }, + "id": { + "rtl": false + }, + "is": { + "rtl": false + }, + "it": { + "rtl": false + }, + "ja": { + "rtl": false + }, + "kn": { + "rtl": false + }, + "ko": { + "rtl": false + }, + "ku": { + "rtl": false + }, + "lij": { + "rtl": false + }, + "lt": { + "rtl": false + }, + "lv": { + "rtl": false + }, + "ml": { + "rtl": false + }, + "nl": { + "rtl": false + }, + "no": { + "rtl": false + }, + "pl": { + "rtl": false + }, + "pt": { + "rtl": false + }, + "pt-BR": { + "rtl": false + }, + "ro": { + "rtl": false + }, + "ru": { + "rtl": false + }, + "sc": { + "rtl": false + }, + "si": { + "rtl": false + }, + "sk": { + "rtl": false + }, + "sl": { + "rtl": false + }, + "sq": { + "rtl": false + }, + "sr": { + "rtl": false + }, + "sv": { + "rtl": false + }, + "ta": { + "rtl": false + }, + "te": { + "rtl": false + }, + "th": { + "rtl": false + }, + "tl": { + "rtl": false + }, + "tr": { + "rtl": false + }, + "uk": { + "rtl": false + }, + "vi": { + "rtl": false + }, + "yue": { + "rtl": false + }, + "zh": { + "rtl": false + }, + "zh-CN": { + "rtl": false + }, + "zh-HK": { + "rtl": false + }, + "zh-TW": { + "rtl": false + } + } } \ No newline at end of file diff --git a/data/update_locales.js b/data/update_locales.js index 9dd554698..7be9af8a0 100644 --- a/data/update_locales.js +++ b/data/update_locales.js @@ -1,8 +1,9 @@ /* Downloads the latest translations from Transifex */ -var request = require('request').defaults({maxSockets: 1}), +var request = require('request').defaults({ maxSockets: 1 }), yaml = require('js-yaml'), fs = require('fs'), + stringify = require('json-stable-stringify'), _ = require('lodash'); var resources = ['core', 'presets']; @@ -26,27 +27,39 @@ var auth = JSON.parse(fs.readFileSync('./transifex.auth', 'utf8')); var sourceCore = yaml.load(fs.readFileSync('./data/core.yaml', 'utf8')), sourcePresets = yaml.load(fs.readFileSync('./data/presets.yaml', 'utf8')); + asyncMap(resources, getResource, function(err, locales) { if (err) return console.log(err); var locale = _.merge(sourceCore, sourcePresets), - codes = []; + dataLocales = {}; locales.forEach(function(l) { locale = _.merge(locale, l); }); - for (var i in locale) { - if (i === 'en' || _.isEmpty(locale[i])) continue; - codes.push(i); - var obj = {}; - obj[i] = locale[i]; - fs.writeFileSync(outdir + i + '.json', JSON.stringify(obj, null, 4)); - } - - fs.writeFileSync('data/locales.json', JSON.stringify({ dataLocales: codes }, null, 4)); + asyncMap(Object.keys(locale), + function(code, done) { + if (code === 'en' || _.isEmpty(locale[code])) { + done(); + } else { + var obj = {}; + obj[code] = locale[code]; + fs.writeFileSync(outdir + code + '.json', JSON.stringify(obj, null, 4)); + getLanguageInfo(code, function(err, info) { + dataLocales[code] = { rtl: info && info.rtl }; + done(); + }); + } + }, function(err) { + if (!err) { + fs.writeFileSync('data/locales.json', stringify({ dataLocales: dataLocales }, { space: 4 })); + } + } + ); }); + function getResource(resource, callback) { resource = project + 'resource/' + resource + '/'; getLanguages(resource, function(err, codes) { @@ -65,6 +78,7 @@ function getResource(resource, callback) { }); } + function getLanguage(resource) { return function(code, callback) { code = code.replace(/-/g, '_'); @@ -78,6 +92,18 @@ function getLanguage(resource) { }; } + +function getLanguageInfo(code, callback) { + code = code.replace(/-/g, '_'); + var url = api + 'language/' + code; + request.get(url, { auth : auth }, function(err, resp, body) { + if (err) return callback(err); + console.log(resp.statusCode + ': ' + url); + callback(null, JSON.parse(body)); + }); +} + + function getLanguages(resource, callback) { var url = resource + '?details'; request.get(url, { auth: auth }, @@ -92,6 +118,7 @@ function getLanguages(resource, callback) { }); } + function asyncMap(inputs, func, callback) { var remaining = inputs.length, results = [], diff --git a/package.json b/package.json index 6d3b7f57e..071d9625c 100644 --- a/package.json +++ b/package.json @@ -49,6 +49,7 @@ "happen": "~0.3.1", "js-yaml": "~3.7.0", "jsonschema": "~1.1.0", + "json-stable-stringify": "~1.0.1", "maki": "0.5.0", "mapillary-js": "2.1.0", "minimist": "~1.2.0",