@akson/cortex-shopify-translations
Version:
Unified Shopify translations management client with product extraction, translation sync, and CLI tools
101 lines (88 loc) • 3.16 kB
JavaScript
import { spawn } from 'child_process';
import path from 'path';
import { fileURLToPath } from 'url';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
const args = process.argv.slice(2);
// Default to help if no arguments
if (args.length === 0 || args[0] === '--help' || args[0] === '-h') {
console.log(`
🧠 Cortex Shopify Translations CLI
Commands:
setup Initialize a new project with config templates
extract [type] Extract translations from Shopify
translate Translate using OpenAI (requires OPENAI_API_KEY)
reset Reset fixed keys to re-process all translations
split Split large translation files into manageable categories
merge Merge category files back into main translation file
publish [type] Publish translations to Shopify
Resource Types:
product Product translations
collection Collection translations
page Page translations
theme Theme translations (default)
Examples:
npx @akson/cortex-shopify-translations setup
npx @akson/cortex-shopify-translations extract
npx @akson/cortex-shopify-translations translate
npx @akson/cortex-shopify-translations reset
npx @akson/cortex-shopify-translations split
npx @akson/cortex-shopify-translations merge
npx @akson/cortex-shopify-translations extract product
npx @akson/cortex-shopify-translations publish product
Advanced Usage:
npx @akson/cortex-shopify-translations publish --split # Publish from split files
For more help on a specific command:
npx @akson/cortex-shopify-translations extract --help
npx @akson/cortex-shopify-translations publish --help
npx @akson/cortex-shopify-translations reset --help
`);
process.exit(0);
}
// Map commands to scripts
const command = args[0];
let script;
let scriptArgs = args.slice(1);
switch (command) {
case 'setup':
script = 'setup.mjs';
break;
case 'extract':
script = 'extract-translations.mjs';
break;
case 'translate':
script = 'translate-with-ai.mjs';
break;
case 'reset':
script = 'reset-translations.mjs';
break;
case 'split':
script = 'translations/scripts/split-translations.mjs';
break;
case 'merge':
script = 'translations/scripts/merge-back.mjs';
break;
case 'publish':
// Handle publish command with --split flag for merged publishing
if (scriptArgs.includes('--split') || scriptArgs.includes('--merged')) {
script = 'publish-split.mjs';
scriptArgs = scriptArgs.filter(arg => arg !== '--split' && arg !== '--merged');
} else {
script = 'publish-translations.mjs';
}
break;
default:
console.error(`Unknown command: ${command}`);
console.log('Run with --help to see available commands');
process.exit(1);
}
// Execute the script
const scriptPath = path.join(__dirname, script);
const child = spawn('node', [scriptPath, ...scriptArgs], {
stdio: 'inherit',
cwd: process.cwd()
});
child.on('exit', (code) => {
process.exit(code || 0);
});