#!/usr/bin/env node /** * @fileoverview * Script to upload a source en.json file to a particular transifex project resource. * Expects that the project and resource have already been defined in Transifex, and that * the person running the script has the the TX_TOKEN environment variable set to an api * token that has developer access. */ const fs = require('fs'); const path = require('path'); const {txPush, txCreateResource} = require('../lib/transifex.js'); const args = process.argv.slice(2); const usage = ` Push English source strings to Transifex. Usage: node tx-push-src.js tx-project tx-resource english-json-file tx-project: the project slug on transifex tx-resource: the resource slug on transifex english-json-file: path to the en.json source NOTE: TX_TOKEN environment variable needs to be set with a Transifex API token. See the Localization page on the GUI wiki for information about setting up Transifex. `; // Exit if missing arguments or TX_TOKEN if (args.length < 3 || !process.env.TX_TOKEN) { process.stdout.write(usage); process.exit(1); } // Globals const PROJECT = args[0]; const RESOURCE = args[1]; let en = fs.readFileSync(path.resolve(args[2])); en = JSON.parse(en); // get the correct resource file type based on transifex project/repo and resource const getResourceType = (project, resource) => { if (project === 'scratch-website') { // all the resources are KEYVALUEJSON return 'KEYVALUEJSON'; } if (project === 'scratch-legacy') { // all the resources are po files return 'PO'; } if (project === 'scratch-editor') { if (resource === 'blocks') { return 'KEYVALUEJSON'; } // everything else is CHROME I18N JSON return 'CHROME'; } if (project === 'scratch-videos') { // all the resources are srt files return 'SRT'; } if (project === 'scratch-android') { // all the resources are android xml files return 'ANDROID'; } if (project === 'scratch-resources') { // all the resources are Chrome format json files return 'CHROME'; } process.stdout.write(`Error - Unknown resource type for:\n`); process.stdout.write(` Project: ${project}, resource: ${resource}\n`); process.exit(1); }; // update Transifex with English source const pushSource = async function () { try { await txPush(PROJECT, RESOURCE, en); } catch (err) { if (err.statusCode !== 404) { process.stdout.write(`Transifex Error: ${err.message}\n`); process.stdout.write( `Transifex Error ${err.response.statusCode.toString()}: ${err.response.body}\n`); process.exitCode = 1; return; } // file not found - create it, but also give message process.stdout.write(`Transifex Resource not found, creating: ${RESOURCE}\n`); const resourceData = { slug: RESOURCE, name: RESOURCE, priority: 0, // default to normal priority i18nType: getResourceType(PROJECT, RESOURCE), content: en }; await txCreateResource(PROJECT, resourceData); process.exitCode = 0; } }; pushSource();