/** * Example: Using readme-translator in build scripts * * These examples show how to integrate the translator into your build pipeline. */ import { translateReadme, TranslationJobResult, SUPPORTED_LANGUAGES } from "./index.js"; // Example 1: Simple usage - translate to a few common languages async function translateToCommonLanguages(): Promise { const result = await translateReadme({ source: "./README.md", languages: ["es", "fr", "de", "ja", "zh"], verbose: true, }); console.log(`Translated to ${result.successful} languages`); } // Example 2: Full i18n setup with custom output directory async function fullI18nSetup(): Promise { const result = await translateReadme({ source: "./README.md", languages: ["es", "fr", "de", "it", "pt", "ja", "ko", "zh", "ru", "ar"], outputDir: "./docs/i18n", pattern: "README.{lang}.md", preserveCode: true, model: "sonnet", maxBudgetUsd: 5.0, // Cap spending at $5 verbose: true, }); // Handle results programmatically for (const r of result.results) { if (!r.success) { console.error(`Failed to translate to ${r.language}: ${r.error}`); } } } // Example 3: Build script integration with error handling // Note: If Claude Code is authenticated, no API key needed locally. // CI/CD environments will need ANTHROPIC_API_KEY set. async function buildScriptIntegration(): Promise { try { const result = await translateReadme({ source: process.env.README_PATH || "./README.md", languages: (process.env.TRANSLATE_LANGS || "es,fr,de").split(","), outputDir: process.env.I18N_OUTPUT || "./i18n", verbose: process.env.CI !== "true", // Quiet in CI }); // Return exit code for build scripts return result.failed > 0 ? 1 : 0; } catch (error) { console.error("Translation failed:", error); return 1; } } // Example 4: Batch translation of multiple READMEs async function batchTranslation(): Promise { const readmes = [ "./README.md", "./packages/core/README.md", "./packages/cli/README.md", ]; const languages = ["es", "fr", "de"]; for (const readme of readmes) { console.log(`\nProcessing: ${readme}`); await translateReadme({ source: readme, languages, verbose: true, }); } } // Example 5: Custom output pattern for docs sites async function docsiteSetup(): Promise { // For docusaurus/vitepress style: docs/README.es.md await translateReadme({ source: "./README.md", languages: ["es", "fr", "de", "ja", "zh"], outputDir: "./docs", pattern: "README.{lang}.md", verbose: true, }); } // Example 6: Conditional translation in CI/CD async function cicdTranslation(): Promise { // Only translate on main branch releases const isRelease = process.env.GITHUB_REF === "refs/heads/main"; const isManualTrigger = process.env.GITHUB_EVENT_NAME === "workflow_dispatch"; if (!isRelease && !isManualTrigger) { console.log("Skipping translation - not a release build"); return; } const result = await translateReadme({ source: "./README.md", languages: ["es", "fr", "de", "ja", "ko", "zh", "pt-br"], outputDir: "./dist/i18n", maxBudgetUsd: 10.0, verbose: true, }); // Write summary for GitHub Actions if (process.env.GITHUB_STEP_SUMMARY) { const summary = ` ## Translation Summary - ✅ Successful: ${result.successful} - ❌ Failed: ${result.failed} - 💰 Cost: $${result.totalCostUsd.toFixed(4)} `; // In real usage, write to GITHUB_STEP_SUMMARY console.log(summary); } } // Run an example const example = process.argv[2]; switch (example) { case "simple": translateToCommonLanguages(); break; case "full": fullI18nSetup(); break; case "batch": batchTranslation(); break; case "docs": docsiteSetup(); break; case "ci": cicdTranslation(); break; default: console.log("Available examples: simple, full, batch, docs, ci"); console.log("\nSupported languages:", SUPPORTED_LANGUAGES.join(", ")); }