-
Notifications
You must be signed in to change notification settings - Fork 0
Translations
Last updated: 12/22/2025
Primary Language: English (en_US)
Translation Status: Not yet started - This is a new initiative!
NaviDuck is currently English-only. This page documents our plans and framework for adding multi-language support once the community grows.
- Reach non-English speaking users
- Make CLI tools more accessible worldwide
- Support educational use in non-English classrooms
- Encourage international contributions
No machine translations → Human translations only
↓
Community-driven → Native speakers preferred
↓
Context matters → CLI terms need careful translation
↓
Consistency first → Unified terminology across languages
-
User Interface Text
- Command prompts and messages
- Menu items and options
- Help text and explanations
- Error messages and warnings
-
Documentation (Secondary Priority)
- README and setup guides
- Tutorials and examples
- Configuration explanations
- FAQ entries
-
Code Comments (Lowest Priority)
- Only public API docstrings
- Key algorithm explanations
- Configuration examples
- Search engine names (Google, DuckDuckGo, etc.)
- Technical terms with no good equivalent
- Code syntax and commands
- URLs and file paths
- Programming language keywords
naviduck/
├── i18n/ # Translation directory
│ ├── en_US/ # Source language (English)
│ │ ├── ui.json # User interface strings
│ │ ├── errors.json # Error messages
│ │ ├── help.json # Help text
│ │ └── docs/ # Documentation
│ ├── es_ES/ # Spanish (Spain)
│ ├── fr_FR/ # French (France)
│ ├── de_DE/ # German
│ ├── ja_JP/ # Japanese
│ └── zh_CN/ # Chinese (Simplified)
├── locales.py # Translation loader
└── ... # Main application files
{
"search_prompt": "Search the web for: ",
"searching": "Searching {engine} for: {query}",
"results_found": "Found {count} results",
"error_network": "Network error. Check connection and try again."
}# Planned implementation
def get_translation(key, count=None, **kwargs):
if count is not None:
# Handle plural forms based on language rules
pass- Spanish (es_ES) - Large global user base
- French (fr_FR) - Strong FOSS community
- German (de_DE) - Technical user base
- Japanese (ja_JP) - Active CLI tool users
- Chinese Simplified (zh_CN)
- Portuguese (pt_BR)
- Russian (ru_RU)
- Arabic (ar_SA) - Right-to-left support needed
- Italian (it_IT)
- Korean (ko_KR)
- Hindi (hi_IN)
- Other languages as contributors emerge
- Native or fluent speaker of target language
- Technical understanding of CLI tools and web concepts
- Basic Git knowledge for contributing
- Attention to detail for consistency
1. Express interest → GitHub discussion
↓
2. Language assigned → Coordinator assigned
↓
3. Translation work → Using translation platform
↓
4. Peer review → Native speaker review
↓
5. Integration → Code merge and testing
↓
6. Maintenance → Updates with new strings
- Accuracy: Faithful to original meaning
- Clarity: Easy to understand in target language
- Consistency: Same term always translated same way
- Cultural Fit: Appropriate for technical audience
- Length: Similar to English (CLI space constraints)
# Current: Hardcoded strings
print(f"{Colors.INFO}Searching for: {query}{Colors.RESET}")
# Future: Translation-ready
from .locales import _
print(_("searching", engine=engine_name, query=query))class TranslationManager:
def __init__(self, language="en_US"):
self.language = language
self.strings = self.load_strings(language)
def get(self, key, **kwargs):
# Look up and format string
pass
def set_language(self, language):
# Dynamically switch languages
pass# Command to switch language
naviduck --language es_ES
# or
settings → Language → Español- Line Length: Translations must fit in terminal width
- Character Sets: Support extended character sets
- Alignment: Maintain UI alignment with variable text lengths
- Color Codes: Preserve ANSI color code positioning
- Keep English terms when no good translation exists
- Provide glossary of standardized translations
- Consistent casing across all translations
- Handle acronyms appropriately (URL, HTTP, CLI, etc.)
- Special handling for Arabic, Hebrew, etc.
- Terminal may need RTL support
- Text alignment reversal
- Bidirectional text mixing
- Weblate - Web-based translation platform
- POEditor - Freemium option for open source
- Crowdin - Commercial with open source options
- Simple JSON - Manual editing for small projects
- Free for open source
- Git integration
- Translation memory
- Quality checks
- Collaboration features
- Easy for volunteers
- Unit Tests: Verify all keys have translations
- Length Tests: Ensure strings fit UI constraints
- Character Tests: Verify encoding support
- Integration Tests: Full UI in target language
Translator → Self-review
↓
Native speaker → Technical review
↓
UI expert → Layout/spacing review
↓
Maintainer → Final approval
↓
Community → Feedback period
- New strings added with each release
- Translators notified of changes
- Regular updates to keep current
- Deprecated strings removed
-
Responsibilities:
- Organize translation efforts for specific language
- Maintain translation quality
- Review contributions
- Update with new strings
-
Requirements:
- Native speaker fluency
- Technical background
- Regular availability
- Good communication skills
-
Responsibilities:
- Translate assigned strings
- Maintain consistency
- Participate in reviews
-
Requirements:
- Language proficiency
- Attention to detail
- Basic technical knowledge
-
Responsibilities:
- Quality checking
- Cultural appropriateness
- Technical accuracy
-
Requirements:
- Native speaker + technical expertise
- Experience with CLI tools
- Identify all UI strings in current codebase
- Create string extraction script
- Design translation file format
- Set up GitHub structure for translations
- Document translation guidelines
- Join discussions about translation approach
- Review the codebase for hardcoded strings
- Suggest terminology for your language
- Connect with others interested in same language
- Study similar projects with good i18n implementations
- Context loss: Strings isolated from usage context
- Pluralization: Different rules in different languages
- Gender: Some languages have gendered nouns/verbs
- Formality: Formal/informal address choices
- Technical terms: Lack of established translations
- Context comments in translation files
- Pluralization framework per language rules
- Gender-neutral where possible
- Formal style for technical documentation
- Glossary of standardized technical terms
- Audit all UI strings in codebase
- Design translation system architecture
- Create initial English string database
- Set up basic infrastructure
- Implement translation system
- Complete Spanish translation (pilot)
- Test with real users
- Refine process based on feedback
- Add 3-4 more major languages
- Implement runtime language switching
- Create contributor documentation
- Set up translation platform
- Support all Tier 1 languages
- Documentation translation
- Advanced features (RTL, locale-specific formats)
- Self-sustaining community process
- 5+ languages with 95%+ coverage
- 10+ active translation contributors
- < 1 week turnaround for new strings
- 0% machine-translated content
- Native speakers report good experience
- No UI breakage from translation length
- Consistent terminology across application
- Positive feedback from international users
- Credits file with all contributors
- Language-specific thank you in application
- GitHub contributors list
- Release notes acknowledgments
- Profile badges for active contributors
- Language pioneers: First translators for each language
- Maintainers: Long-term language coordinators
- Quality champions: Exceptional review work
- Community builders: Organized translation teams
- Join GitHub discussion about translations
- Comment on translation-related issues
- Connect with others for your language
- Start a language team discussion
- Fork the repository
- Study the codebase
- Identify UI strings that need translation
- Practice with small sections
- Create a glossary of technical terms
- Discuss tricky translations as a group
- Establish style guidelines for your language
- Assign initial roles within the team
There are no translations yet because:
- The project is new (Version 3.0 just released)
- We need to build the infrastructure first
- We want to do it right, not just quickly
- We need community interest and participation
We will add translation support when:
- ✅ Core features are stable
- ✅ Community shows interest
- ✅ We have volunteer translators
- ✅ We can maintain quality
Good translations take time and care. We won't rush this. Better no translation than a bad translation that confuses users.
Watch for these milestones:
- String extraction complete - All UI strings identified
- Translation system implemented - Technical infrastructure ready
- First language pilot - Spanish translation begins
- Contributor guide published - How to translate
- Translation platform set up - Tools for collaboration
Interested in translating?
Start by joining discussions and helping design the system. The first translators will help shape how this works for everyone.
"To have another language is to possess a second soul." - Charlemagne
Help give NaviDuck more souls!