commands_translate.js

'use strict';

/**
 * @fileoverview Translate command - automated translation via external APIs.
 * Supports MyMemory (free) and DeepL (API key required).
 * @module commands/translate
 */

const { translateFile } = require('../core');

function parseTranslatePair(translatePair) {
  return (translatePair || '').split(':');
}

function validateTranslatePair(source, target, exitCodes) {
  if (!source || !target) {
    console.error('Invalid --translate format. Use: --translate fr:en');
    return { exitCode: exitCodes.ERROR };
  }
  return null;
}

function getTranslateOptions(ctx) {
  const { i18nDir, provider, useDeepL, translateEmail, verbose, dryRun, log } = ctx;
  return { i18nDir, provider, useDeepL, email: translateEmail, verbose, dryRun, log };
}

module.exports = {
  name: 'translate',
  category: 'translation',
  description: 'Translate a language file to another language',

  options: [
    { flag: '--translate <src:tgt>', description: 'Source and target languages (e.g., fr:en)' },
    { flag: '--deepl', description: 'Use DeepL API instead of MyMemory' },
    { flag: '--email <email>', description: 'Email for MyMemory rate limits' },
  ],

  examples: ['i18nkit --translate fr:en', 'i18nkit --translate fr:en --deepl'],

  async run(ctx) {
    const { translatePair, exitCodes } = ctx;
    const [source, target] = parseTranslatePair(translatePair);
    const error = validateTranslatePair(source, target, exitCodes);
    if (error) {
      return error;
    }
    await translateFile(source, target, getTranslateOptions(ctx));
    return { exitCode: exitCodes.SUCCESS };
  },
};