UNPKG

@mediafly/translate

Version:

Translate strings extracted from apps using Google Translate

90 lines (73 loc) 2.54 kB
var fs = require('fs') var assert = require('assert') var crypto = require('crypto') var chalk = require('chalk') var GoogleSpreadsheet = require('google-spreadsheet') var path = require('path') var highland = require('highland') var flatten = require('flat') var { getLanguageName, getTranslationsDir } = require('./util') const TRANSLATIONS_DIRECTORY = getTranslationsDir() async function importFunc() { var readFile = require('./read-file').read var config = require(path.join(process.cwd(), 'mediafly-translate.config')) assert(config.googleSheetId !== '[YOUR GOOGLE SHEET ID]', 'Configure googleSheetId in mediafly-translate.config.json to import from Google Sheets.') var format = config.format || 'json' var creds = config.googleSheetsCredentials var sheetId = config.googleSheetId var languages = config.languages var doc = new GoogleSpreadsheet.GoogleSpreadsheet(sheetId) var fileFormat = require('./format') try { await doc.useServiceAccountAuth(creds) } catch (error) { console.error(`${chalk.red('Cannot authenticate with Google Sheets')}`) console.error(`${chalk.red(err)}`) } try { await doc.getInfo() } catch (error) { console.error(`${chalk.red('Cannot access sheet')}`) console.error(`Verify that it is accessible to the service account being used by mediafly-translate`) } languages.map(language => { if (language === 'ke') { return } var languageName = getLanguageName(language) var foreignFile = (config.format === 'js') ? flatten(readFile(`locale-${language}`).default) : flatten(readFile(`locale-${language}`)) let languageSheet = doc.sheetsByIndex.find(s => s.title === languageName) if (!languageSheet) { err = new Error(`${languageName} sheet not found`) console.error(chalk.red(err.message)) throw(err) } var rowsStream = highland(languageSheet.getRows()) var writeFileOptions if (format === 'strings') { writeFileOptions = { encoding: 'ucs2' } } rowsStream .fork() .map((arr) => { return arr.reduce((a, b) => { if (b.Override) { return highland.set(b.Key, b.Override, a) } else { return highland.set(b.Key, b[languageName], a) } }, {}) }) .map(obj => Object.assign(foreignFile, obj)) .map(fileFormat.transform) .doto(() => { console.log(chalk.green(`Imported ${languageName} from Google Sheets successfully!`)) }) .pipe(fs.createWriteStream(`${TRANSLATIONS_DIRECTORY}/locale-${language}.${format}`), writeFileOptions) }) } module.exports = { handler: importFunc }