Automatically translate your markdown documentation using AI - powered by GitHub Actions and GitHub Models with built-in support for Astro Starlight!
- π Incremental Translation - Only translates changed content, saving time and API costs
 - π― Smart AST Parsing - Preserves markdown structure and formatting
 - π Cache Management - Intelligent caching to avoid redundant translations
 - π Astro Starlight Ready - Built-in support for documentation sites
 - π Multi-language Support - Translate to multiple languages simultaneously
 - π Quality Validation - Automatic validation of translation quality
 - β‘ GitHub Actions Native - Seamless integration with your CI/CD pipeline
 - π€ AI-Powered - Leverage GitHub Models for seamless high-quality translations
 
- π Documentation - Complete setup guide and API reference (translated by this action too - see translation dashboard)
 - βοΈ Blog Post - Deep dive into the technology
 - π Translations: English | FranΓ§ais | EspaΓ±ol | Portuguese (Brazil) | Ψ§ΩΨΉΨ±Ψ¨ΩΨ©
 
This action leverages GenAIScript to intelligently analyze and translate your markdown documents. Here's the magic behind the scenes:
- π Parse - Convert markdown to AST (Abstract Syntax Tree)
 - π Analyze - Identify content that needs translation vs. existing translations
 - π€ Translate - Use AI to generate high-quality translations
 - β Validate - Ensure translation quality and inject into document
 - πΎ Cache - Save translations for future incremental updates
 - π Commit - Automatically commit changes to your repository
 
| Parameter | Description | Default | 
|---|---|---|
lang | 
Target language(s) for translation (ISO codes, comma-separated) | fr | 
source | 
Source language (ISO code) | en | 
files | 
Files to translate (semicolon-separated) | README.md | 
instructions | 
Custom translation instructions | - | 
instructions_file | 
Path to file with translation instructions | - | 
glossary_file | 
Path to file with glossary terms | - | 
translations_dir | 
Folder to store translations | translations | 
filename_template | 
Jinja template to generate the translated filepath | {{dirname}}/{{basename}}.{{lang}}{{extname}} | 
| Parameter | Description | Default | 
|---|---|---|
max_translation_tokens | 
Maximum available tokens for translation LLM call (to avoid rate limits) | 8000 | 
max_validation_tokens | 
Maximum available tokens for validation LLM call (to avoid rate limits) | 2000 | 
| Parameter | Description | Required | 
|---|---|---|
starlight_dir | 
Root folder of Astro Starlight documentation | Only for Starlight | 
starlight_base | 
Base alias for Starlight documentation | Optional | 
| Parameter | Description | Default | 
|---|---|---|
debug | 
Enable debug logging (learn more) | false | 
| Parameter | Description | Default | 
|---|---|---|
github_token | 
GitHub token with models: read permission (setup guide) | 
${{ secrets.GITHUB_TOKEN }} | 
| Parameter | Description | Default | 
|---|---|---|
openai_api_key | 
OpenAI API key | ${{ secrets.OPENAI_API_KEY }} | 
openai_api_base | 
OpenAI API base URL | ${{ env.OPENAI_API_BASE }} | 
| Parameter | Description | Default | 
|---|---|---|
azure_openai_api_endpoint | 
Azure OpenAI endpoint | ${{ env.AZURE_OPENAI_API_ENDPOINT }} | 
azure_openai_api_key | 
Azure OpenAI API key (not needed for Microsoft Entra ID) | ${{ secrets.AZURE_OPENAI_API_KEY }} | 
azure_openai_subscription_id | 
Subscription ID for deployment listing (Entra ID only) | ${{ env.AZURE_OPENAI_SUBSCRIPTION_ID }} | 
azure_openai_api_version | 
Azure OpenAI API version | ${{ env.AZURE_OPENAI_API_VERSION }} | 
azure_openai_api_credentials | 
API credentials type | ${{ env.AZURE_OPENAI_API_CREDENTIALS }} | 
| Parameter | Description | Default | 
|---|---|---|
model_alias | 
A YAML-like string of alias: modelid pairs | 
See the Models documentation for more details.
| Output | Description | 
|---|---|
text | 
The generated translation text output | 
Add this step to your GitHub Actions workflow to translate your README to French and Spanish:
uses: pelikhan/action-continuous-translation@v0
with:
  github_token: ${{ secrets.GITHUB_TOKEN }}
  lang: fr,esSave this file in your .github/workflows/ directory as continuous-translation.yml:
name: Continuous Translation
on:
  workflow_dispatch:
  push:
    branches:
      - main
    paths:
      - "README.md"
      - "docs/src/content/docs/**"
permissions:
  contents: write
  models: read
concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true
jobs:
  continuous_translation:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/cache@v4
        with:
          path: .genaiscript/cache/**
          key: continuous-translation-${{ github.run_id }}
          restore-keys: |
            continuous-translation-
      - uses: pelikhan/action-continuous-translation@v0
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          lang: fr,es
      - uses: stefanzweifel/git-auto-commit-action@v5
        with:
          file_pattern: "**.md* translations/**"
          commit_message: "[cai] translated docs"
          commit_user_name: "genaiscript"Made with β€οΈ using GenAIScript