Skip to main content

DOCX translator using DeepL

Project description

docx-translator-smith

PyPI version Python versions License Status

A lightweight, developer-friendly DOCX translation tool powered by the DeepL API.
Provides both a Python library and CLI tools for batch-translating Microsoft Word (.docx) files while preserving structure.


Features

  • Translate DOCX documents using the DeepL API
  • Preserve document structure (runs, paragraphs, tables)
  • Automatic deduplication for translation memory efficiency
  • Batch translation (entire folders)
  • Benchmark mode to measure throughput and latency
  • CLI commands suitable for automation

Installation

pip install docx-translator-smith

Requires Python 3.11+.


Quick Start (CLI)

Translate an entire directory:

docx-translator     translate-dir     -s EN     -t JA     -i in_docs     -o out_docs

Benchmark translation performance:

docx-translator-bench     --src EN     --tgt JA     --input-dir in_docs     --output-dir out_docs     -v

Example Makefile for end users

If you prefer a simple make interface in your own project (not for developing this library itself), you can use a wrapper Makefile like the one below.
Adjust the VENV path to your virtual environment, save this as Makefile (or Makefile_sample.mk) in your project root, and run make help to see the available targets.

# Define variables
VENV   := /path/to/venv
BIN    = $(VENV)/bin
PYTHON = $(BIN)/python

.DEFAULT_GOAL := help

.PHONY: help ende deen ende-pro deen-pro

help: ## Show this help message
	@echo "Usage: make [target]"
	@echo ""
	@echo "Targets:"
	@printf "  \033[36m%-15s\033[0m %s\n" "help" "Show this help message"
	@grep -E '^[a-zA-Z_-]+:.*?## ' $(MAKEFILE_LIST) \
		| grep -v '^help:' \
		| sort \
		| awk 'BEGIN {FS = ":.*?## "}; {printf "  \033[36m%-15s\033[0m %s\n", $$1, $$2}'


# ----------------------------------------------
# English <-> German Using FREE endpoint
# ----------------------------------------------
ende: ## Batch translate: in_docs -> out_docs, EN → DE
	$(PYTHON) -m docx_translator.cli \
		translate-dir \
		-s EN -t DE \
		-i in_docs -o out_docs \

deen: ## Batch translate: in_docs -> out_docs, DE → EN
	$(PYTHON) -m docx_translator.cli \
		translate-dir \
		-s DE -t EN \
		-i in_docs -o out_docs \

# ----------------------------------------------
# English <-> German Using PRO endpoint
# ----------------------------------------------
ende-pro: ## Batch translate: in_docs -> out_docs, EN → DE
	$(PYTHON) -m docx_translator.cli \
		translate-dir \
		-s EN -t DE \
		-i in_docs -o out_docs \
		--pro

deen-pro: ## Batch translate: in_docs -> out_docs, DE → EN
	$(PYTHON) -m docx_translator.cli \
		translate-dir \
		-s DE -t EN \
		-i in_docs -o out_docs \
		--pro

This sample Makefile is not installed by the package; it is only provided here as a reference for end users who like a make-based workflow.

🐍 Quick Start (Python)

from docx_translator import DocxTranslator

translator = DocxTranslator()

translator.translate_file(
    input_path="example.docx",
    output_path="example.ja.docx",
    source_lang="EN",
    target_lang="JA",
)

Requirements

  • DeepL API key
  • Python 3.11 or later
  • python-docx, requests

Export your DeepL API key:

export DEEPL_API_KEY="your-key"

Note on Authentication: Since version 0.1.2, this tool uses the Authorization: DeepL-Auth-Key <key> header as recommended by the latest DeepL API specifications.


DeepL API Endpoint (Free / Pro)

DocxTranslator itself is endpoint-agnostic. DeepL Free / Pro selection is handled by the translation engine (DeepLEngine), typically via the CLI or engine configuration.

Default behavior (Free)

By default, the DeepL Free endpoint is used:

https://api-free.deepl.com/v2/translate

Using DeepL Pro (CLI)

Enable the Pro endpoint explicitly when using the CLI:

docx-translator translate-dir   -s EN -t JA   -i in_docs -o out_docs   --pro

This switches the endpoint to:

https://api.deepl.com/v2/translate

Python usage note

The Python API does not select endpoints via DocxTranslator. If needed, configure the DeepL engine explicitly and inject it:

from docx_translator import DocxTranslator, DeepLEngine

engine = DeepLEngine(pro=True)
translator = DocxTranslator(engine=engine)

Development

git clone https://github.com/yeiichi/docx-translator
cd docx-translator
make venv
make install
make test

Build & publish:

make build
make dist-check
make publish

License

MIT License © 2026 Eiichi Yamamoto
See LICENSE for full text.


Author

Eiichi Yamamoto


Project Status

This is an Alpha release — stable for CLI use, but internal APIs may evolve.


Links

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

docx_translator_smith-0.1.2.tar.gz (26.5 kB view details)

Uploaded Source

Built Distribution

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

docx_translator_smith-0.1.2-py3-none-any.whl (24.9 kB view details)

Uploaded Python 3

File details

Details for the file docx_translator_smith-0.1.2.tar.gz.

File metadata

  • Download URL: docx_translator_smith-0.1.2.tar.gz
  • Upload date:
  • Size: 26.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.2

File hashes

Hashes for docx_translator_smith-0.1.2.tar.gz
Algorithm Hash digest
SHA256 af6a50b37be2ba4336dd87bf60ac10735b5cd656735f7d2a6a3db0f207c58b41
MD5 b5f57d5334fb2652f16c4f494e78cc8b
BLAKE2b-256 be9b98362b82be113441fefb50a70932499620ee09c75660f8a6f4f1c7ffa48f

See more details on using hashes here.

File details

Details for the file docx_translator_smith-0.1.2-py3-none-any.whl.

File metadata

File hashes

Hashes for docx_translator_smith-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 5f1b18ae8eaaa7339c1337affbd7856852c8e19239e674098b0d9babe28e2f85
MD5 452a272b824b28a7ca362402e4bf2cf2
BLAKE2b-256 67ea1b446cca35d7454d9b7ff4540ac2b6253283e530b2a413fe958d07b83cf6

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