mirror of
https://github.com/scratchfoundation/scratch-l10n.git
synced 2024-12-22 13:42:30 -05:00
37fb96e9ba
fixes #128 When trying to update a resource on transifex, it catches the file not found response and tries to create it instead. This required adding a function that will return the correct file type for the resource based on the repository. Note, this will fail for new repositories. Also checking in package lock changes, although they appear to be just changing. `http` to `https`
108 lines
3.6 KiB
JavaScript
Executable file
108 lines
3.6 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 transifex = require('transifex');
|
|
|
|
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];
|
|
const TX = new transifex({
|
|
project_slug: PROJECT,
|
|
credential: 'api:' + process.env.TX_TOKEN
|
|
});
|
|
|
|
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
|
|
TX.uploadSourceLanguageMethod(PROJECT, RESOURCE, {content: JSON.stringify(en)}, (err) => {
|
|
if (err && err.response.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
|
|
if (err && err.response.statusCode === 404) {
|
|
process.stdout.write(`Transifex Resource not found, creating: ${RESOURCE}\n`);
|
|
const resourceData = {
|
|
slug: RESOURCE,
|
|
name: RESOURCE,
|
|
priority: 0, // default to normal priority
|
|
i18n_type: getResourceType(PROJECT, RESOURCE),
|
|
content: JSON.stringify(en)
|
|
};
|
|
TX.resourceCreateMethod(PROJECT, resourceData, (err1) => {
|
|
if (err1) {
|
|
process.stdout.write(`Transifex Error: ${err1.message}\n`);
|
|
process.stdout.write(
|
|
`Transifex Error ${err1.response.statusCode.toString()}: ${err1.response.body}\n`);
|
|
process.exitCode = 1;
|
|
return;
|
|
}
|
|
});
|
|
}
|
|
process.exitCode = 0;
|
|
});
|