{"_id":"@chenxu233/vitepress-ai-i18n","_rev":"5-43fc2d809bffb66689678699d30cbab9","name":"@chenxu233/vitepress-ai-i18n","dist-tags":{"latest":"1.1.1"},"versions":{"1.0.1":{"name":"@chenxu233/vitepress-ai-i18n","version":"1.0.1","keywords":["vitepress","i18n","translation","automation","vpi","ai","openai","deepseek","documentation","cli"],"author":{"url":"https://github.com/chenxu233","name":"chenxu233","email":"chenxu233@npmjs.com"},"license":"MIT","_id":"@chenxu233/vitepress-ai-i18n@1.0.1","maintainers":[{"name":"chenxu233","email":"1964324406@qq.com"}],"homepage":"https://github.com/chenxu233/vitepress-ai-i18n#readme","bugs":{"url":"https://github.com/chenxu233/vitepress-ai-i18n/issues"},"bin":{"vpi":"dist/index.js"},"dist":{"shasum":"2d9422d5aa1374d7994bb69121cf2fa33014aa88","tarball":"https://registry.npmjs.org/@chenxu233/vitepress-ai-i18n/-/vitepress-ai-i18n-1.0.1.tgz","fileCount":6,"integrity":"sha512-rDZsKYf6yahnTprhrXPZIqmoTYvmVq2fGxZcOXpSdpHrzuJTONdsUYX55fKzSW8U3Ll/OcGX5xcjkWGJfpC8sw==","signatures":[{"sig":"MEYCIQC4B4H7TJjMKgN0AnF4gVCngnnC8oLzqr7kCBXbax0rowIhAPv54tZjggTVWT0wxX8Sbt64+2YpX1GyzYhV89H9gpTg","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":21396},"main":"./dist/index.cjs","type":"module","_from":"file:chenxu233-vitepress-ai-i18n-1.0.1.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","scripts":{"dev":"tsup src/index.ts --format esm --watch","build":"tsup src/index.ts --format esm --clean --dts --minify","release":"npx changeset"},"_npmUser":{"name":"chenxu233","email":"1964324406@qq.com"},"_resolved":"/tmp/3a3cdd4759ef592c040ec10788830a29/chenxu233-vitepress-ai-i18n-1.0.1.tgz","_integrity":"sha512-rDZsKYf6yahnTprhrXPZIqmoTYvmVq2fGxZcOXpSdpHrzuJTONdsUYX55fKzSW8U3Ll/OcGX5xcjkWGJfpC8sw==","repository":{"url":"git+https://github.com/chenxu233/vitepress-ai-i18n.git"},"_npmVersion":"10.8.2","description":"A CLI tool to automate VitePress documentation translation using AI.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"cac":"^6.7.14","ora":"^9.0.0","chalk":"^5.6.2","dotenv":"^17.2.3","openai":"^6.15.0","fs-extra":"^11.3.3","crypto-js":"^4.2.0","fast-glob":"^3.3.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.5.1","prettier":"3.7.4","typescript":"^5.9.3","@types/node":"^25.0.3","@types/fs-extra":"^11.0.4","@types/crypto-js":"^4.2.2","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/vitepress-ai-i18n_1.0.1_1784809433840_0.7901737684874057","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@chenxu233/vitepress-ai-i18n","version":"1.0.2","keywords":["vitepress","i18n","translation","automation","vpi","ai","openai","deepseek","documentation","cli"],"author":{"url":"https://github.com/chenxu233","name":"chenxu233","email":"chenxu233@npmjs.com"},"license":"MIT","_id":"@chenxu233/vitepress-ai-i18n@1.0.2","maintainers":[{"name":"chenxu233","email":"1964324406@qq.com"}],"homepage":"https://github.com/chenxu233/vitepress-ai-i18n#readme","bugs":{"url":"https://github.com/chenxu233/vitepress-ai-i18n/issues"},"bin":{"vpi":"dist/index.js"},"dist":{"shasum":"a847581b2d4e30a66666a7afb14efe45a0581b24","tarball":"https://registry.npmjs.org/@chenxu233/vitepress-ai-i18n/-/vitepress-ai-i18n-1.0.2.tgz","fileCount":6,"integrity":"sha512-f5cf2CRgmA/QnXHyYneZE/mAkMv5s+7rtEwhfFXN4jhddtIPqb+xs8GU9670XKLPpNqPfH/+3nvUZ7lGUOcH5A==","signatures":[{"sig":"MEQCIGk4UQxbevZXCx3I+K/dfqLEIjWMmSIh6JWC8pDGMKF/AiAYFs6CIRo8DaRzcQrcmJW5UiZbCw41TFG0HkLUEFUD/g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":21407},"main":"./dist/index.cjs","type":"module","_from":"file:chenxu233-vitepress-ai-i18n-1.0.2.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","scripts":{"dev":"tsup src/index.ts --format esm --watch","build":"tsup src/index.ts --format esm --clean --dts --minify","release":"npx changeset"},"_npmUser":{"name":"chenxu233","email":"1964324406@qq.com"},"_resolved":"/tmp/8d47ec4854285932734b02bc63718f8e/chenxu233-vitepress-ai-i18n-1.0.2.tgz","_integrity":"sha512-f5cf2CRgmA/QnXHyYneZE/mAkMv5s+7rtEwhfFXN4jhddtIPqb+xs8GU9670XKLPpNqPfH/+3nvUZ7lGUOcH5A==","repository":{"url":"git+https://github.com/chenxu233/vitepress-ai-i18n.git"},"_npmVersion":"10.8.2","description":"A CLI tool to automate VitePress documentation translation using AI.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"cac":"^6.7.14","ora":"^9.0.0","chalk":"^5.6.2","dotenv":"^17.2.3","openai":"^6.15.0","fs-extra":"^11.3.3","crypto-js":"^4.2.0","fast-glob":"^3.3.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.5.1","prettier":"3.7.4","typescript":"^5.9.3","@types/node":"^25.0.3","@types/fs-extra":"^11.0.4","@types/crypto-js":"^4.2.2","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/vitepress-ai-i18n_1.0.2_1784810212054_0.8904086633403248","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@chenxu233/vitepress-ai-i18n","version":"1.0.3","keywords":["vitepress","i18n","translation","automation","vpi","ai","openai","deepseek","documentation","cli"],"author":{"url":"https://github.com/chenxu233","name":"chenxu233","email":"chenxu233@npmjs.com"},"license":"MIT","_id":"@chenxu233/vitepress-ai-i18n@1.0.3","maintainers":[{"name":"chenxu233","email":"1964324406@qq.com"}],"homepage":"https://github.com/chenxu233/vitepress-ai-i18n#readme","bugs":{"url":"https://github.com/chenxu233/vitepress-ai-i18n/issues"},"bin":{"vpi":"dist/index.js"},"dist":{"shasum":"07f93f0f14c8d14fdddb827e78a7cda38aa06283","tarball":"https://registry.npmjs.org/@chenxu233/vitepress-ai-i18n/-/vitepress-ai-i18n-1.0.3.tgz","fileCount":6,"integrity":"sha512-ib5s0qvO3Bixu9JrHaV3/db6lE2tIetvSx0M/8T80EvI5IJSoxsX7VRYH3bAZLK+KK06ne+HvL4tq+1YV39qGw==","signatures":[{"sig":"MEQCIDiOyH0khBIQdNGC3xIGKUXLNAcQaf0ssfpODqD3drDSAiBv20sEl4UtC/jSoP5Vs9HcQyVLQH7Wj+c/EgA748++zQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":21838},"main":"./dist/index.cjs","type":"module","_from":"file:chenxu233-vitepress-ai-i18n-1.0.3.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","scripts":{"dev":"tsup src/index.ts --format esm --watch","build":"tsup src/index.ts --format esm --clean --dts --minify","release":"npx changeset"},"_npmUser":{"name":"chenxu233","email":"1964324406@qq.com"},"_resolved":"/tmp/745623d66d5532c8dfc0bccefcc1af1b/chenxu233-vitepress-ai-i18n-1.0.3.tgz","_integrity":"sha512-ib5s0qvO3Bixu9JrHaV3/db6lE2tIetvSx0M/8T80EvI5IJSoxsX7VRYH3bAZLK+KK06ne+HvL4tq+1YV39qGw==","repository":{"url":"git+https://github.com/chenxu233/vitepress-ai-i18n.git"},"_npmVersion":"10.8.2","description":"A CLI tool to automate VitePress documentation translation using AI.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"cac":"^6.7.14","ora":"^9.0.0","chalk":"^5.6.2","dotenv":"^17.2.3","openai":"^6.15.0","fs-extra":"^11.3.3","crypto-js":"^4.2.0","fast-glob":"^3.3.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.5.1","prettier":"3.7.4","typescript":"^5.9.3","@types/node":"^25.0.3","@types/fs-extra":"^11.0.4","@types/crypto-js":"^4.2.2","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/vitepress-ai-i18n_1.0.3_1784814148531_0.7096235350276265","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@chenxu233/vitepress-ai-i18n","version":"1.1.0","keywords":["vitepress","i18n","translation","automation","vpi","ai","openai","deepseek","documentation","cli"],"author":{"url":"https://github.com/chenxu233","name":"chenxu233","email":"chenxu233@npmjs.com"},"license":"MIT","_id":"@chenxu233/vitepress-ai-i18n@1.1.0","maintainers":[{"name":"chenxu233","email":"1964324406@qq.com"}],"homepage":"https://github.com/chenxu233/vitepress-ai-i18n#readme","bugs":{"url":"https://github.com/chenxu233/vitepress-ai-i18n/issues"},"bin":{"vpi":"dist/index.js"},"dist":{"shasum":"db4d4085227a09dd9202993ecbbb52d874833a60","tarball":"https://registry.npmjs.org/@chenxu233/vitepress-ai-i18n/-/vitepress-ai-i18n-1.1.0.tgz","fileCount":6,"integrity":"sha512-Wmkv1yuEUxufYU6UmuvD86DJgoaOhOOLMExLCKbl6Ph4GVh+Tib/sxe+4W21A5bch0FzNfv3qQj5jv8dFV86bw==","signatures":[{"sig":"MEUCICSobj+pZVEWd8KrB5aKO6t4DMYRvznLne4Km0EQJCWlAiEAz7jyVl5nDFJ7FXJAiXG9ggH/ArcZx06PNraaHKQtwgc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":23531},"main":"./dist/index.cjs","type":"module","_from":"file:chenxu233-vitepress-ai-i18n-1.1.0.tgz","types":"./dist/index.d.ts","module":"./dist/index.js","scripts":{"dev":"tsup src/index.ts --format esm --watch","build":"tsup src/index.ts --format esm --clean --dts --minify","release":"npx changeset"},"_npmUser":{"name":"chenxu233","email":"1964324406@qq.com"},"_resolved":"/tmp/898e9d0d340e48938017741dd66c87fa/chenxu233-vitepress-ai-i18n-1.1.0.tgz","_integrity":"sha512-Wmkv1yuEUxufYU6UmuvD86DJgoaOhOOLMExLCKbl6Ph4GVh+Tib/sxe+4W21A5bch0FzNfv3qQj5jv8dFV86bw==","repository":{"url":"git+https://github.com/chenxu233/vitepress-ai-i18n.git"},"_npmVersion":"10.8.2","description":"A CLI tool to automate VitePress documentation translation using AI.","directories":{},"_nodeVersion":"20.20.2","dependencies":{"cac":"^6.7.14","ora":"^9.0.0","chalk":"^5.6.2","dotenv":"^17.2.3","openai":"^6.15.0","p-limit":"^7.3.1","fs-extra":"^11.3.3","crypto-js":"^4.2.0","fast-glob":"^3.3.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.21.0","tsup":"^8.5.1","prettier":"3.7.4","typescript":"^5.9.3","@types/node":"^25.0.3","@types/fs-extra":"^11.0.4","@types/crypto-js":"^4.2.2","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"tmp":"tmp/vitepress-ai-i18n_1.1.0_1785337277667_0.2074223672464952","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"_id":"@chenxu233/vitepress-ai-i18n@1.1.1","bin":{"vpi":"dist/index.js"},"bugs":{"url":"https://github.com/ChenXu233/vitepress-ai-i18n/issues"},"dist":{"shasum":"3197df362f0029df4a17f015d747485db5c4d6d7","tarball":"https://registry.npmjs.org/@chenxu233/vitepress-ai-i18n/-/vitepress-ai-i18n-1.1.1.tgz","fileCount":6,"integrity":"sha512-b7grK6qiTr2sTXb1HZp8AJwupgpoQ+z9tBjkTahrwdrO2dzdc+FCBgNl3d3nm6gWqpAByVcgIhasJSM73jPQCQ==","signatures":[{"sig":"MEUCIFCTBOaJ+f2hwdJwz9pq11SErEf2II1iHEjOWI/+QcTAAiEAge1kLQlkhrwR8y6SybvhyiQAk9/f6XZYTG1rKvuABvo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCBwboklKfiGJkuNY3c9ayv7NjRBNaH3ZIOQoRI8fHCCwIgdGLMU95tKLa9b8l0H5qkf5bXqtw91x6OxU5rYE4//Dk="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@chenxu233%2fvitepress-ai-i18n@1.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":26308},"main":"./dist/index.cjs","name":"@chenxu233/vitepress-ai-i18n","type":"module","types":"./dist/index.d.ts","author":{"url":"https://github.com/ChenXu233","name":"chenxu233","email":"chenxu233@npmjs.com"},"module":"./dist/index.js","gitHead":"d91ecfc82b4fbdd9fbbd33513fde041c155060e9","license":"MIT","scripts":{"dev":"tsup src/index.ts --format esm --watch","test":"tsx --test test/*.test.ts","build":"tsup src/index.ts --format esm --clean --dts --minify","release":"npx changeset","prepublishOnly":"pnpm build"},"version":"1.1.1","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:38ad7305-802d-4165-aad0-8f5f85cb460a"}},"homepage":"https://github.com/ChenXu233/vitepress-ai-i18n#readme","keywords":["vitepress","i18n","translation","automation","vpi","ai","openai","deepseek","documentation","cli"],"repository":{"url":"git+https://github.com/ChenXu233/vitepress-ai-i18n.git","type":"git"},"_npmVersion":"11.19.0","description":"A CLI tool to automate VitePress documentation translation using AI.","directories":{},"maintainers":[{"name":"chenxu233","email":"1964324406@qq.com"}],"_nodeVersion":"24.21.0","dependencies":{"cac":"^6.7.14","ora":"^9.0.0","chalk":"^5.6.2","dotenv":"^17.2.3","openai":"^6.15.0","p-limit":"^7.3.1","fs-extra":"^11.3.3","crypto-js":"^4.2.0","fast-glob":"^3.3.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.12.3","devDependencies":{"tsx":"^4.21.0","tsup":"^8.5.1","prettier":"3.7.4","typescript":"^5.9.3","@types/node":"^25.0.3","@types/fs-extra":"^11.0.4","@types/crypto-js":"^4.2.2","eslint-config-prettier":"^10.1.8"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/vitepress-ai-i18n_1.1.1_1790268684429_0.5357287817618794"}}},"time":{"created":"2026-07-23T12:23:53.626Z","modified":"2026-09-24T16:51:24.807Z","1.0.1":"2026-07-23T12:23:53.986Z","1.0.2":"2026-07-23T12:36:52.261Z","1.0.3":"2026-07-23T13:42:28.691Z","1.1.0":"2026-07-29T15:01:17.803Z","1.1.1":"2026-09-24T16:51:24.512Z"},"bugs":{"url":"https://github.com/ChenXu233/vitepress-ai-i18n/issues"},"author":{"url":"https://github.com/ChenXu233","name":"chenxu233","email":"chenxu233@npmjs.com"},"license":"MIT","homepage":"https://github.com/ChenXu233/vitepress-ai-i18n#readme","keywords":["vitepress","i18n","translation","automation","vpi","ai","openai","deepseek","documentation","cli"],"repository":{"url":"git+https://github.com/ChenXu233/vitepress-ai-i18n.git","type":"git"},"description":"A CLI tool to automate VitePress documentation translation using AI.","maintainers":[{"name":"chenxu233","email":"1964324406@qq.com"}],"readme":"<div align=\"center\">\n  <h1>vpi (VitePress AI i18n)</h1>\n  <span>English | <a href=\"./README_zh.md\">中文</a></span>\n</div>\n\n---\n\n**vpi** is a high-performance CLI tool designed to automate the internationalization (i18n) of VitePress projects using AI. It translates your Markdown documents and synchronizes your navigation/sidebar configurations with a single command.\n\n![vpi](assets/vpi.gif)\n\n## ✨ Features\n\n* **🚀 One-Click All**: Translate documents and sync VitePress menus (`nav`/`sidebar`) in one go.\n* **🧠 Intelligent Translation**: Powered by AI (OpenAI, DeepSeek, etc.) to maintain technical context and Markdown structure.\n* **⚡ Incremental Updates**: Uses a hash-based cache system to only translate new or modified files, saving you time and API tokens.\n* **📚 Glossary Support**: Lock professional terminology to ensure consistency across all languages.\n* **🌍 Multi-Target**: Support for translating into multiple languages simultaneously (e.g., `en,jp,fr`).\n* **🛠️ Tech-Friendly**: Automatically detects `.ts`, `.mts`, and `.js` configurations.\n\n---\n\n## 📦 Installation\n\n```bash\npnpm add -D vitepress-ai-i18n\n# or\nnpm install -D vitepress-ai-i18n\n\n```\n\n---\n\n## 🚀 Quick Start\n\n### 1. Initialization\n\n```bash\nnpx vpi init\n\n```\n\n### 2. Configuration Edit the .env file and enter your AI_API_KEY.\n\n- .env\n\n  ```bash\n  AI_API_KEY=your_api_key_here\n  AI_MODEL=deepseek-chat # Default gpt-4o-mini\n  AI_BASE_URL=https://api.deepseek.com/v1 # Default OPENAI\n  ```\n\n  \n\n- vpi18n.config.json\n\n  ```bash\n  {\n    \"source\": \"docs\",\n    \"target\": \"zh\", # Languages ​​to be translated into (examples: zh, fr)\n    \"glossary\": null\n  }\n  ```\n\n\n### 3. Run vpi\n\n```bash\n# Translate everything and sync menus\nnpx vpi all\n\n# Or use specific commands\nnpx vpi gen   # Docs only\nnpx vpi sync  # Menu only\n\n```\n\n---\n\n## 🛠️ VitePress Integration\n\n`vpi` generates a clean JSON file for your menus in `your-source/.vitepress/i18n/`. Simply import it into your `config.mts`:\n\n```typescript\nimport zhConfig from './i18n/zh.json'\n\nexport default defineConfig({\n  locales: {\n    root: {\n      label: 'English',\n      lang: 'en'\n    },\n    zh: {\n      label: '简体中文',\n      lang: 'zh',\n      link: '/zh/',\n      themeConfig: {\n        nav: zhConfig.nav,\n        sidebar: zhConfig.sidebar\n      }\n    },\n  },\n})\n\n```\n\n---\n\n## 📖 Configuration Reference\n\n| Option | Env / Config | Description | Default |\n| --- | --- | --- | --- |\n| `--source` | `source` | Documentation root directory | `docs` |\n| `--target` | `target` | Target languages (comma-separated) | `zh` |\n| `--model` | `AI_MODEL` | AI model to use | `gpt-4o-mini` |\n| `--glossary` | `glossary` | Path to glossary JSON file | `null` |\n\n### Custom Prompts\n\nYou can customize the AI system prompts for translation and menu sync via `vpi18n.config.json`:\n\n```json\n{\n  \"source\": \"docs\",\n  \"target\": \"zh\",\n  \"glossary\": \"./glossary.json\",\n  \"prompt\": {\n    \"translate\": \"You are a technical translator. Translate to {{lang}}. Keep Markdown structure intact.\",\n    \"sync\": \"Extract nav and sidebar from config. Translate text/label to {{target}}. Return JSON only.\"\n  }\n}\n```\n\n**Available variables:**\n\n| Variable | Used in | Description |\n|----------|---------|-------------|\n| `{{lang}}` | translate | Target language code (e.g., `zh`, `fr`) |\n| `{{glossary}}` | translate | Glossary JSON string |\n| `{{sourcePath}}` | translate | Source file path relative to docs root (e.g., `design/rfc/index.md`) |\n| `{{targetPath}}` | translate | Target file path relative to docs root (e.g., `en/design/rfc/index.md`) |\n| `{{target}}` | sync | Target language code |\n\nIf a variable is not used in your custom prompt, it will be automatically appended.\n\nLeave a field empty (`\"\"`) to use the default prompt for that operation.\n\n### Relative links\n\nTranslated files live one directory deeper than their source (`src/x.md` → `src/en/x.md`).\nLinks pointing **inside** the docs root keep working when copied verbatim, but links that\n**escape** the docs root (e.g. `../../../../CONTRIBUTING.md` pointing at a repo-level file)\nneed one extra `../` because of that extra level.\n\nYou don't need to handle this in a custom prompt. `vpi` retargets such links deterministically\nafter translation (reported as `(retargeted N cross-root link(s))`), and the default prompt\ntells the model to copy links verbatim rather than guess at the depth itself.\n\n### Glossary Example\n\n`glossary.json`:\n\n```json\n{\n  \"Hydration\": \"激活\",\n  \"VitePress\": \"VitePress\"\n}\n\n```\n\n---\n\n## 🚀 Advanced Usage\n\n`vpi` is compatible with any AI provider that supports the OpenAI-compatible API. This gives you the freedom to choose the most cost-effective or highest-performing model for your needs.\n\n### LLM\n\n**DeepSeek**\n\n```env\nAI_BASE_URL=https://api.deepseek.com\nAI_API_KEY=your_deepseek_key\nAI_MODEL=deepseek-chat\n\n```\n\n**Qwen (DashScope)**\n\n```env\nAI_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1\nAI_API_KEY=your_dashscope_key\nAI_MODEL=qwen-max\n\n```\n\n**Google Gemini**\nYou can get a free API key from [Google AI Studio](https://aistudio.google.com/).\n\n```env\nAI_BASE_URL=https://generativelanguage.googleapis.com/v1beta/openai/\nAI_API_KEY=your_gemini_key\nAI_MODEL=gemini-1.5-pro\n\n```\n\n**Groq (Blazing Fast)**\nPerfect for large-scale documentation projects.\n\n```env\nAI_BASE_URL=https://api.groq.com/openai/v1\nAI_API_KEY=your_groq_key\nAI_MODEL=llama-3.1-70b-versatile\n\n```\n\n### 3. Local LLM: 100% Free & Private (Ollama)\n\nIf you prefer to run your translations locally for maximum privacy and zero cost, use [Ollama](https://ollama.com/).\n\n1. **Install Ollama** and pull a model:\n```bash\nollama pull llama3\n\n```\n\n\n2. **Configure `.env**`:\n```env\nAI_BASE_URL=http://localhost:11434/v1\nAI_API_KEY=ollama (any string works)\nAI_MODEL=llama3\n\n```\n\n\n\n### 4. Selective Translation\n\nIf you only want to process specific languages in a multi-language project, you can override the config via CLI:\n\n```bash\n# Only translate to French, ignoring other targets in config.json\nvpi all --target fr\n\n```\n\n---\n\n## 🤝 Contributing\n\nContributions are welcome! Feel free to open an Issue or submit a Pull Request.\n\n1. Fork the Project\n2. Create your Feature Branch (`git checkout -b feature/AmazingFeature`)\n3. Commit your Changes (`git commit -m 'Add some AmazingFeature'`)\n4. Push to the Branch (`git push origin feature/AmazingFeature`)\n5. Open a Pull Request\n\n---\n\n## 📄 License\n\nDistributed under the MIT License. See `LICENSE` for more information.","readmeFilename":"README.md"}