Skip to main content

A CLI tool for translating .po files using GPT models.

Project description

GPT-PO Translator

Python Package CI PyPI Downloads

Translate gettext (.po) files using AI models. Supports OpenAI, Azure OpenAI, Anthropic/Claude, and DeepSeek with automatic AI translation tagging and context-aware translations.

🚀 Quick Start

# Install
pip install gpt-po-translator

# Set API key
export OPENAI_API_KEY='your_api_key_here'

# Auto-detect and translate all languages
gpt-po-translator --folder ./locales --bulk

✨ Key Features

  • Multiple AI providers - OpenAI, Azure OpenAI, Anthropic/Claude, DeepSeek, Ollama
  • Context-aware translations - Automatically uses msgctxt for better accuracy with ambiguous terms
  • AI translation tracking - Auto-tags AI-generated translations with #. AI-generated comments
  • Bulk processing - Efficient batch translation for large files
  • Smart language detection - Auto-detects target languages from folder structure
  • Fuzzy entry handling - Translates and fixes fuzzy entries properly
  • Docker ready - Available as container for easy deployment

📦 Installation

PyPI (Recommended)

pip install gpt-po-translator

Docker

docker pull ghcr.io/pescheckit/python-gpt-po:latest

Manual

git clone https://github.com/pescheckit/python-gpt-po.git
cd python-gpt-po
pip install -e .

🔧 Setup

API Keys (Cloud Providers)

Choose your AI provider and set the corresponding API key:

# OpenAI
export OPENAI_API_KEY='your_key'

# Anthropic/Claude
export ANTHROPIC_API_KEY='your_key'

# DeepSeek
export DEEPSEEK_API_KEY='your_key'

# Azure OpenAI
export AZURE_OPENAI_API_KEY='your_key'
export AZURE_OPENAI_ENDPOINT='https://your-resource.openai.azure.com/'
export AZURE_OPENAI_API_VERSION='2024-02-01'

💡 Usage Examples

Basic Translation

# Auto-detect languages from PO files (recommended)
gpt-po-translator --folder ./locales --bulk -v

# Or specify languages explicitly
gpt-po-translator --folder ./locales --lang de,fr,es --bulk -v

# Single language with progress information
gpt-po-translator --folder ./locales --lang de -v

Different AI Providers

# Use Claude (Anthropic) - auto-detect languages
gpt-po-translator --provider anthropic --folder ./locales --bulk

# Use DeepSeek with specific languages
gpt-po-translator --provider deepseek --folder ./locales --lang de

# Use Azure OpenAI with auto-detection
gpt-po-translator --provider azure_openai --folder ./locales --bulk

# Use Ollama (local, see docs/usage.md for setup)
gpt-po-translator --provider ollama --folder ./locales

Docker Usage

# Basic usage with OpenAI
docker run -v $(pwd):/data \
  -e OPENAI_API_KEY="your_key" \
  ghcr.io/pescheckit/python-gpt-po:latest \
  --folder /data --bulk

# With Ollama (see docs/usage.md for full setup guide)
docker run --rm \
  -v $(pwd):/data \
  --network host \
  ghcr.io/pescheckit/python-gpt-po:latest \
  --provider ollama \
  --folder /data

# With Azure OpenAI
docker run -v $(pwd):/data \
  -e AZURE_OPENAI_API_KEY="your_key" \
  -e AZURE_OPENAI_ENDPOINT="https://your-resource.openai.azure.com/" \
  -e AZURE_OPENAI_API_VERSION="2024-02-01" \
  ghcr.io/pescheckit/python-gpt-po:latest \
  --provider azure_openai --folder /data --lang de

🎯 Context-Aware Translations

Automatically uses msgctxt for better accuracy:

msgctxt "button"
msgid "Save"
msgstr ""  → "Speichern" (button action)

msgctxt "money"
msgid "Save"
msgstr ""  → "Sparen" (save money)

The tool extracts context from your PO files and passes it to the AI for more accurate translations of ambiguous terms.

Tip: Use detailed context for best results: msgctxt "status label (not verb)" works better than just msgctxt "status".

Default Context

Provide a default context for entries without msgctxt:

# Via command-line
gpt-po-translator --folder ./locales --default-context "web application" --bulk

# Via environment variable
export GPT_TRANSLATOR_CONTEXT="mobile app for iOS"
gpt-po-translator --folder ./locales --bulk

# Via pyproject.toml
# Add to your pyproject.toml:
[tool.gpt-po-translator]
default_context = "e-commerce checkout flow"

Priority: CLI argument > Environment variable > Config file

The default context is applied to entries without explicit msgctxt, while entries with msgctxt always take precedence.

🏷️ AI Translation Tracking

All AI translations are automatically tagged for transparency and compliance:

#. AI-generated
msgid "Hello"
msgstr "Hallo"

This helps you:

  • Track which translations are AI vs human-generated
  • Comply with AI content disclosure requirements
  • Manage incremental translation workflows

Note: Django's makemessages removes these comments but preserves translations. Re-run the translator after makemessages to restore tags.

📚 Command Reference

Option Description
--folder Path to .po files
--lang Target languages (e.g., de,fr,es, fr_CA, pt_BR)
--provider AI provider: openai, azure_openai, anthropic, deepseek, ollama
--bulk Enable batch translation (recommended for large files)
--bulksize Entries per batch (default: 50)
--model Specific model to use
--list-models Show available models
--fix-fuzzy Translate fuzzy entries
--folder-language Auto-detect languages from folders
--default-context Default translation context for entries without msgctxt
--no-ai-comment Disable AI tagging
--ollama-base-url Ollama server URL (default: http://localhost:11434)
--ollama-timeout Ollama timeout in seconds (default: 120)
-v, --verbose Show progress information (use -vv for debug)
-q, --quiet Only show errors
--version Show version and exit

🛠️ Development

Build Docker Locally

git clone https://github.com/pescheckit/python-gpt-po.git
cd python-gpt-po
docker build -t python-gpt-po .

Run Tests

# Local
python -m pytest

# Docker
docker run --rm -v $(pwd):/app -w /app --entrypoint python python-gpt-po -m pytest -v

📋 Requirements

  • Python 3.9+
  • Dependencies: polib, openai, anthropic, requests, tenacity

📖 Documentation

📄 License

MIT License - See LICENSE for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

gpt_po_translator-2.0.4.tar.gz (110.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

gpt_po_translator-2.0.4-py3-none-any.whl (130.3 kB view details)

Uploaded Python 3

File details

Details for the file gpt_po_translator-2.0.4.tar.gz.

File metadata

  • Download URL: gpt_po_translator-2.0.4.tar.gz
  • Upload date:
  • Size: 110.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for gpt_po_translator-2.0.4.tar.gz
Algorithm Hash digest
SHA256 9cfd60ddec29edb73dd3b3f9e23371a948a8849d6ec7efa5d72ae1ad2b814197
MD5 6e6781aa02970c7eefcc44b0bf84954d
BLAKE2b-256 08bcec88940aa089fa70009de148c50c9ece4b1319b0b9a8e786b8eb4ba2717b

See more details on using hashes here.

File details

Details for the file gpt_po_translator-2.0.4-py3-none-any.whl.

File metadata

File hashes

Hashes for gpt_po_translator-2.0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 fc2b78aabd763d9a618dd9989c36c21d19c2474486c9e2d1fef9ab0c3a444cc8
MD5 c924e1cd26fea588a5ce75553e95c968
BLAKE2b-256 312784cd4cc07dfe504591d3c4e92293fedb7e727d16b0709f65c50528ef6fce

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page