@mediafly/translate
Version:
Translate strings extracted from apps using Google Translate
118 lines (93 loc) • 3.16 kB
JavaScript
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
}