UNPKG

@mediafly/translate

Version:

Translate strings extracted from apps using Google Translate

118 lines (93 loc) 3.16 kB
var assert = require('assert') var GoogleSpreadsheet = require('google-spreadsheet') var crypto = require('crypto') var chalk = require('chalk') var flatten = require('flat') var path = require('path') var { getLanguageName, getTranslationsDir, requireOrDefault } = require('./util') const TRANSLATIONS_DIRECTORY = getTranslationsDir() async function exportFunc() { 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 export to Google Sheets.') var sheetId = config.googleSheetId var creds = config.googleSheetsCredentials var languages = config.languages var doc = new GoogleSpreadsheet.GoogleSpreadsheet(sheetId) var readFile = require('./read-file').read var starUnicodeChar = '\u2605' languages.push('en') try { await doc.useServiceAccountAuth(creds) } catch (error) { console.error(`${chalk.red('Cannot authenticate with Google Sheets')}`) console.error(`${chalk.red(err)}`) throw error } 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`) throw error } languages.map(async language => { if (language === 'ke') { return } const englishFile = flatten(readFile('locale-en')) const languageName = getLanguageName(language) let languageSheet languageSheet = doc.sheetsByIndex.find(s => s.title === languageName) if (!languageSheet) { try { languageSheet = await doc.addSheet({ title: languageName }) } catch (error) { err = new Error(`Could not add sheet ${languageName}`) console.error(chalk.red(err.message)) throw err } } if (language === 'en') { await languageSheet.setHeaderRow(['Key', 'English']) await languageSheet.resize({rowCount: 1, columnCount: 2}) } else { await languageSheet.setHeaderRow(['New', 'Key', 'English', languageName, 'Override']) await languageSheet.resize({rowCount: 1, columnCount: 5}) } if (language !== 'en') { var foreignFile = (config.format === 'js') ? flatten(readFile(`locale-${language}`).default) : flatten(readFile(`locale-${language}`)) var foreignOverridesFile = flatten(requireOrDefault(`${TRANSLATIONS_DIRECTORY}/locale-${language}.overrides`)) } var keys = Object.keys(englishFile) var data = keys .map(key => { var row = { Key: key, English: englishFile[key] } if (language !== 'en') { var hashFromEnglishFile = crypto.createHash('md5') .update(englishFile[key]) .digest('hex') var overrideHash = foreignOverridesFile[key] row[languageName] = foreignFile[key] row.Override = '' row.New = hashFromEnglishFile !== overrideHash ? starUnicodeChar : '' } return row }) try { await languageSheet.addRows(data) } catch (error) { console.error(error) } console.log(chalk.green(`Exported ${languageName} [${language}] to Google Sheets successfully!`)) }) } module.exports = { handler: exportFunc }