ui5-i18n-translate
Version:
A command-line interface (CLI) tool to effortlessly translate your UI5 i18n fallback files into multiple languages using the SAP Translation Hub. This package streamlines the localization process for your UI5 applications by automating the translation of
72 lines (63 loc) • 3.54 kB
text/typescript
import Helper from "./helper";
import ora from "ora";
import fs from "fs";
import path from "path";
import os from "os";
import moment from "moment";
export default class CommandDelta {
static command: string = "delta"
static description: string = "Add translations for keys missing in i18n-files"
static showHelp() {
console.log(
Helper.getDefaultHelpPrefix(),
"COMMAND NAME:\n",
"\n",
`\x1b[33m${CommandDelta.command} - ${CommandDelta.description}\x1b[0m\n`,
"\n",
"USAGE:\n",
"\n",
`\x1b[33mui5-i18n-translate ${CommandDelta.command} [...OPTIONS]\x1b[0m\n`,
"\n",
" --auth_url uaa URL of the key for the SAP Translation Hub instance\n",
" --auth_client_id uaa client id of the key for the SAP Translation Hub instance\n",
" --auth_client_secret uaa client secret of the key for the SAP Translation Hub instance\n",
" --api_url The api URL of the key for the SAP Translation Hub instance\n",
" --fallback_language The BCP 47 language used in the fallback i18n file (default: en)\n",
" --translate_to The BCP 47 language(s) for which i18n files should be maintained (e.g. de,fr,es)\n",
" --test Don't run translate or change data, only show what would happen"
)
}
static async translate(settings, translator, arrayOfI18nFolders) {
for (const folder of arrayOfI18nFolders) {
if (!Helper.hasMissingEntries(folder)) {
const spinner = ora(`[${folder.path}] Translating...`).start()
spinner.succeed(`[${folder.path}] Nothing to translate`)
continue
}
const spinner = ora(`[${folder.path}] Translating...`).start()
for (const missing_translation of folder.missing_translations) {
if (missing_translation.missing_entries.length === 0) {
continue
}
let translations = await translator.translate(missing_translation.missing_entries, [missing_translation.language], settings.sourceLanguage)
var writeStream = fs.createWriteStream(path.join(folder.path, path.sep, `i18n_${missing_translation.language}.properties`), { flags: 'a' })
writeStream.write(os.EOL + os.EOL + `# [${moment().format('YYYY-MM-DD hh:mm:ss')}] New translations added by ui5-i18n-translate`)
for (const missing_entry of missing_translation.missing_entries) {
let translation = translations
.find(translation => translation.key === missing_entry.key)
.translations.find(translation => translation.language === missing_translation.language)
.value
if (translation) {
writeStream.write(os.EOL)
if (missing_entry.classification) {
writeStream.write(missing_entry.classification + os.EOL)
}
writeStream.write(`${missing_entry.key}=${translation}`)
}
}
writeStream.end()
}
spinner.succeed(`[${folder.path}] Translation complete`)
}
}
}