UNPKG

@mediafly/translate

Version:

Translate strings extracted from apps using Google Translate

54 lines (47 loc) 1.65 kB
const _ = require('lodash') const path = require('path') const fs = require('fs') const config = require(path.join(process.cwd(), 'mediafly-translate.config')) const format = require('./format') const xmlJs = require('xml-js') const { getTranslationsDir, requireOrDefault } = require('./util') const TRANSLATIONS_DIRECTORY = getTranslationsDir() function isValid(line) { const isValid = line.match(/"(.|\u2028)*" = "(.|\u2028)*"/g) if (!isValid) { console.log(`Skipping ${line}`) } return isValid } module.exports = { read: function(filePath, defaultValue = {}) { if (config.format === 'strings') { if (!fs.existsSync(`${TRANSLATIONS_DIRECTORY}/${filePath}.strings`)) { return defaultValue } let contents = fs.readFileSync(`${TRANSLATIONS_DIRECTORY}/${filePath}.strings`, 'ucs2') let obj = {} format.separateByNewLines(contents) .filter(line => isValid(line)) .forEach(s => { obj[format.parseKey(s)] = format.parseValue(s) }) return obj } else if (config.format === 'xml') { //read the xml file and return a JavaScript object if (!fs.existsSync(`${TRANSLATIONS_DIRECTORY}/${filePath}.xml`)) { return defaultValue } let contents = fs.readFileSync(`${TRANSLATIONS_DIRECTORY}/${filePath}.xml`) const json = xmlJs.xml2js(contents, { compact: true }) let obj = {} if (_.get(json, 'resources.string')) { _.each(json.resources.string, s => _.set(obj, s._attributes.name, s._text)) } return _.mapValues(obj, value => format.removeEscapedCharsForAndroid(value)) } else { return requireOrDefault(`${TRANSLATIONS_DIRECTORY}/${filePath}`, defaultValue) } } }