Skip to main content

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.


Metadata

Release files for docx-translator-smith 0.1.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for docx-translator-smith 0.1.2
File Size Uploaded Provenance
docx_translator_smith-0.1.2.tar.gz 26.5 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for docx-translator-smith 0.1.2
File Interpreter ABI Platform
docx_translator_smith-0.1.2-py3-none-any.whl Python 3 none any Details

Total release size: 51.4 kB

Release files / docx_translator_smith-0.1.2.tar.gz

Download URL docx_translator_smith-0.1.2.tar.gz
Size 26.5 kB
Tags Source
SHA-256 checksum
How to use checksums
af6a50b37be2ba4336dd87bf60ac10735b5cd656735f7d2a6a3db0f207c58b41
BLAKE2b-256 checksum
How to use checksums
be9b98362b82be113441fefb50a70932499620ee09c75660f8a6f4f1c7ffa48f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.2

Release files / docx_translator_smith-0.1.2-py3-none-any.whl

Download URL docx_translator_smith-0.1.2-py3-none-any.whl
Size 24.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5f1b18ae8eaaa7339c1337affbd7856852c8e19239e674098b0d9babe28e2f85
BLAKE2b-256 checksum
How to use checksums
67ea1b446cca35d7454d9b7ff4540ac2b6253283e530b2a413fe958d07b83cf6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.2

Security for docx-translator-smith 0.1.2

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page