Getting Started with Crowdin
Create a Crowdin account
Visit Lichess on Crowdin and create a free account.
Select your language
Choose the language you want to translate into. If your language isn’t listed, request it in the Crowdin project.
Translate Lichess
Join over 140 languages on Crowdin
Translation Files
Lichess translations are organized in XML files located in/translation/source/:
File Structure
Source Files
Thesource/ directory contains the original English strings. These are what you translate on Crowdin.
Destination Files
Thedest/ directory contains completed translations. These are automatically generated by Crowdin and should not be edited manually.
Crowdin Configuration
Lichess uses the following Crowdin settings:crowdin.yml
What This Means
- source: English XML files from
/translation/source/ - translation: Output pattern for translated files
- translate_attributes: XML attributes are not translated (only content)
- update_option: Translations update even if source hasn’t changed
Translation Workflow
How Translations Get to Production
CI validation
GitHub Actions validate the XML files:
xmllintchecks XML syntaxtrans-lintchecks translation qualityi18n-key-checkverifies all keys are present
Commit Messages
When translations are synced from Crowdin, commits follow this pattern:Translation Validation
All translations go through automated validation:XML Lint
Validates XML structure against the DTD:- Proper XML formatting
- Valid tags and structure
- No syntax errors
Translation Lint
Custom linting for translation quality:- Placeholder consistency (
%s,%1$s, etc.) - Special character usage
- HTML tag integrity
i18n Key Check
Verifies that TypeScript i18n files are up-to-date:Translation Best Practices
Context Matters
Always consider the context when translating:Preserve Placeholders
Always keep placeholders in translations:HTML Tags
Keep HTML tags intact:Consistency
Be consistent with terminology:- Use the same translation for repeated terms
- Follow established conventions in your language
- Check existing translations before adding new ones
Length Considerations
Some UI elements have limited space:Try to keep translations reasonably close to the original length, especially for buttons and short labels.
Contributing Translation Changes Locally
If you need to modify source translation files:1. Edit Source Files
Modify files in/translation/source/:
2. Regenerate i18n Files
3. Validate Changes
Run validation locally:4. Commit Changes
Translation Coverage
Language Requirements
For a language to be available on Lichess:- Core strings must be fully translated (site.xml, arena.xml, etc.)
- Translations must be approved by language moderators
- Language must be requested via Crowdin or GitHub issue
Getting Help
Crowdin Support
- Discussion threads: Use Crowdin’s discussion feature to ask about specific strings
- Language moderators: Reach out to moderators for your language
- Crowdin forums: Get help from the Crowdin community
Lichess Community
- Discord: Ask in #programming on Discord
- GitHub Issues: Report translation bugs on GitHub
- Forum: Discuss on Lichess Feedback Forum
Recognition
Translators are recognized on:- lichess.org/thanks - Thanks page listing all contributors
- Crowdin project page - Shows top translators
- About pages - Language-specific acknowledgments
Next Steps
Start Translating
Join Lichess translators on Crowdin
Contributing Overview
Explore other ways to contribute

