2024-08-24 by Remi Kristelijn
When building open source projects, you face a fundamental question: what language should your documentation be in? The easy answer is "English - it's the lingua franca of programming." But real communities are more complex. This is how we developed a multilingual documentation strategy that serves both international developers and local communities.
Our Next.js blog template attracted users from different backgrounds:
A single-language approach would exclude valuable community members.
Pros: Simple, widely understood by developers Cons: Excludes non-English speakers, creates barriers for local communities
Pros: Maximum accessibility Cons: Massive maintenance burden, translation quality issues, version sync problems
Pros: Addresses immediate needs Cons: Inconsistent user experience, confusing navigation, no clear strategy
We developed a system that uses different languages strategically based on content type and audience:
All developer-focused content stays in English:
Why English for technical content:
User-facing support content gets localized:
Why local languages for support:
-nl.md SystemWe created a simple, scalable naming convention:
docs/ ├── troubleshooting.md # English (default) ├── troubleshooting-nl.md # Dutch version ├── troubleshooting-de.md # German version (future) ├── troubleshooting-fr.md # French version (future) ├── DEVELOPER-DOCS.md # English only (technical) └── architecture.md # English only (technical)
# DEVELOPER-DOCS.md # architecture.md # API-reference.md
Rationale: Developers expect English, contains code examples, needs to stay synchronized with codebase.
# getting-started.md + getting-started-nl.md # troubleshooting.md + troubleshooting-nl.md # web-user-checklist.md + web-user-checklist-nl.md
Rationale: User-facing content benefits from localization, especially for non-technical users.
// Generate posts data from MDX files // Genereer posts data van MDX bestanden function generatePostsData() { // Implementation stays the same }
Rationale: Code is universal, but comments can be bilingual for clarity.
Always write the English version first:
We translate content when:
## Translation Contributors - 🇳🇱 Dutch: @rkristelijn - 🇩🇪 German: Looking for maintainer - 🇫🇷 French: Looking for maintainer
We use git to track when translations need updates:
# Check if translations are outdated git log --oneline docs/troubleshooting.md ^docs/troubleshooting-nl.md
Begin with your most common support language:
Phase 1: English + Dutch (our main user base) Phase 2: Add German (if community emerges) Phase 3: Add French (if requested)
Establish clear conventions early:
filename.md = English (default)filename-nl.md = Dutchfilename-de.md = GermanBuild tools to help maintain translations:
# Check for outdated translations ./scripts/check-translations.sh # Generate translation templates ./scripts/create-translation.sh troubleshooting.md nl
In your main README:
## 📚 Documentation - [Troubleshooting Guide](docs/troubleshooting.md) - [Getting Started](docs/getting-started.md) **Other Languages:** - 🇳🇱 [Nederlandse versies](docs/README-nl.md) - 🇩🇪 [Deutsche Versionen](docs/README-de.md)
Better to have excellent documentation in two languages than poor documentation in five.
Don't create translations you can't maintain:
Maintain glossaries for technical terms:
# Glossary / Woordenlijst - Repository = Repository (not "bewaarplaats") - Fork = Fork (not "vork" or "afsplitsing") - Pull Request = Pull Request (not "trek verzoek")
Different cultures have different communication styles:
Don't create separate tools for each language:
Let community needs drive new languages:
Use AI to help with initial translations:
Build language-aware tools:
-nl.md, -de.md, etc.)Multilingual documentation isn't about translating everything - it's about strategically removing language barriers where they matter most. When done right, it creates more inclusive communities and reduces support burden while maintaining technical excellence.
The goal isn't perfect translation - it's effective communication with your diverse community.