🌍 Continuous Translation

July 21, 2025 Β· View on GitHub

Automatically translate your markdown documentation using AI - powered by GitHub Actions and GitHub Models with built-in support for Astro Starlight!

GitHub Action Documentation

✨ Features

  • πŸš€ 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

πŸ“š Resources

πŸ”§ How It Works

This action leverages GenAIScript to intelligently analyze and translate your markdown documents. Here's the magic behind the scenes:

  1. πŸ“„ Parse - Convert markdown to AST (Abstract Syntax Tree)
  2. πŸ” Analyze - Identify content that needs translation vs. existing translations
  3. πŸ€– Translate - Use AI to generate high-quality translations
  4. βœ… Validate - Ensure translation quality and inject into document
  5. πŸ’Ύ Cache - Save translations for future incremental updates
  6. πŸ“ Commit - Automatically commit changes to your repository

βš™οΈ Configuration

πŸ“ Basic Settings

ParameterDescriptionDefault
langTarget language(s) for translation (ISO codes, comma-separated)fr
sourceSource language (ISO code)en
filesFiles to translate (semicolon-separated)README.md
instructionsCustom translation instructions-
instructions_filePath to file with translation instructions-
glossary_filePath to file with glossary terms-
translations_dirFolder to store translationstranslations
filename_templateJinja template to generate the translated filepath{{dirname}}/{{basename}}.{{lang}}{{extname}}

Limits

ParameterDescriptionDefault
max_translation_tokensMaximum available tokens for translation LLM call (to avoid rate limits)8000
max_validation_tokensMaximum available tokens for validation LLM call (to avoid rate limits)2000

🌟 Astro Starlight Integration

ParameterDescriptionRequired
starlight_dirRoot folder of Astro Starlight documentationOnly for Starlight
starlight_baseBase alias for Starlight documentationOptional

πŸ”§ Diagnostics & Debugging

ParameterDescriptionDefault
debugEnable debug logging (learn more)false

πŸ€– AI Provider Configuration

ParameterDescriptionDefault
github_tokenGitHub token with models: read permission (setup guide)${{ secrets.GITHUB_TOKEN }}

OpenAI

ParameterDescriptionDefault
openai_api_keyOpenAI API key${{ secrets.OPENAI_API_KEY }}
openai_api_baseOpenAI API base URL${{ env.OPENAI_API_BASE }}

Azure OpenAI

ParameterDescriptionDefault
azure_openai_api_endpointAzure OpenAI endpoint${{ env.AZURE_OPENAI_API_ENDPOINT }}
azure_openai_api_keyAzure OpenAI API key (not needed for Microsoft Entra ID)${{ secrets.AZURE_OPENAI_API_KEY }}
azure_openai_subscription_idSubscription ID for deployment listing (Entra ID only)${{ env.AZURE_OPENAI_SUBSCRIPTION_ID }}
azure_openai_api_versionAzure OpenAI API version${{ env.AZURE_OPENAI_API_VERSION }}
azure_openai_api_credentialsAPI credentials type${{ env.AZURE_OPENAI_API_CREDENTIALS }}

Model Alias

ParameterDescriptionDefault
model_aliasA YAML-like string of alias: modelid pairs

See the Models documentation for more details.

πŸ“€ Outputs

OutputDescription
textThe generated translation text output

πŸš€ Quick Start

Simple Setup

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,es

Complete Workflow Example

Save 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