mirror of
https://github.com/scratchfoundation/scratch-l10n.git
synced 2024-12-23 06:02:42 -05:00
100 lines
3.2 KiB
JavaScript
Executable file
100 lines
3.2 KiB
JavaScript
Executable file
#!/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();
|