UNPKG

@mediafly/translate

Version:

Translate strings extracted from apps using Google Translate

92 lines (77 loc) 2.73 kB
var fs = require('fs') var assert = require('assert') var chalk = require('chalk') var { JWT } = require('google-auth-library') 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 languages = config.languages var fileFormat = require('./format') var creds = config.googleSheetsCredentials const jwt = new JWT({ email: creds.client_email, key: creds.private_key, scopes: [ 'https://www.googleapis.com/auth/spreadsheets', 'https://www.googleapis.com/auth/drive.file', ], }) var doc = new GoogleSpreadsheet(config.googleSheetId, jwt) try { await doc.loadInfo() } catch (error) { err = new Error('Cannot load spreadsheet') console.error(chalk.red(err.message)) console.error(`Verify the service account authentication creds and that the sheet is shared with the service account email being used by mediafly-translate.`) console.log('Error response data:', error.response.data) throw err } 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.get('Override')) { return highland.set(b.get('Key'), b.get('Override'), a) } else { return highland.set(b.get('Key'), b.get(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 }