Translations/ directory and can be contributed via pull requests.
Translation Files
Each language has its own JSON file in the format:translation_EN.json- Englishtranslation_DE.json- Germantranslation_ZH_CN.json- Simplified Chinesetranslation_FR.json- French
Adding a New Translation
1. Create Translation File
Copy the English translation as a template:NEW with your language code (e.g., IT for Italian, PT for Portuguese).
2. Edit Translation File
The JSON file contains key-value pairs for all translatable strings. The structure looks like:languageCode- Your language code (must match filename)languageName- Native name of the languagemessages- All translatable UI stringscharacters- Single character abbreviations
3. Font Support
IronOS uses bitmap fonts. If your language requires characters not in the base font:- The translation system will automatically include required glyphs from the Wen Quan Yi font
- For languages with large character sets (CJK), compression is automatically applied
- Font maps are generated during the build process
4. Test Your Translation
Build firmware with your new translation:NEW with your language code and Pinecil with your device model.
5. Update Translation Files
After editing translations, regenerate the translation files:- Generate font maps for all languages
- Validate translation JSON files
- Create required C++ source files
6. Update Documentation
If you’ve edited translation definitions, also update the settings menu documentation:Updating Existing Translations
1. Edit the JSON File
Open the appropriatetranslation_XX.json file and update the strings you want to change.
2. Test Your Changes
Build and test the firmware:3. Validate Changes
Run the translation test:Contributing Translations
Via Pull Request (Recommended)
- Fork the IronOS repository
- Create a new branch for your translation:
- Add or update the translation JSON file
- Commit your changes:
- Push to your fork and create a pull request
- GitHub Actions will automatically build firmware with your translation
Testing Without Local Build Environment
If you don’t want to set up the build environment:- Fork the repository on GitHub
- Edit the translation file directly in GitHub’s web interface
- Create a pull request
- GitHub Actions will build the firmware for you
- Download the artifacts to test on your device
All translation contributions must be submitted via GitHub pull requests. Translations sent via issues, discussions, or email will not be accepted.
Translation Guidelines
String Length
Be mindful of display space constraints:- Most devices have small OLED displays (96x16 or 128x32 pixels)
- Shorter strings are better
- Test on actual hardware if possible
Consistency
Maintain consistent terminology:- Use the same terms for the same concepts throughout
- Check other translations for reference
- Follow conventions of your language
Technical Terms
For technical terms:- Use commonly understood terms in your language
- When in doubt, include the English term in parentheses
- Some abbreviations may be better left in English (USB, PID, PWM)
Character Encoding
JSON files must be UTF-8 encoded:- Use native characters (don’t use escape sequences like \u)
- Ensure your editor saves files as UTF-8
Translation File Structure
Messages
Themessages object contains all UI strings:
Characters
Thecharacters object contains single-character abbreviations:
Menu Items
Settings menu items have short and long descriptions:Common Issues
Missing Characters in Display
If some characters don’t display:- The font may not include the glyph
- Check if the build process reports font warnings
- The WenQuanYi font should cover most languages
Build Errors
If the build fails with translation errors:- Validate JSON syntax using a JSON validator
- Ensure all required keys are present
- Check that
languageCodematches the filename - Run
make_translation_test.pyto identify issues
String Too Long
If a string doesn’t fit on screen:- Use abbreviations where appropriate
- Shorten the translation
- Test on actual hardware to verify readability
Language-Specific Notes
CJK Languages (Chinese, Japanese, Korean)
CJK languages require special handling:- Font compression is automatically applied
- Multi-language builds work best with compression enabled
- Use simplified characters where possible to save space
RTL Languages (Arabic, Hebrew)
RTL language support is limited:- Display drivers currently assume LTR text flow
- Contributions to improve RTL support are welcome
Special Characters
For languages with special characters:- Use native Unicode characters in JSON
- Don’t use HTML entities or escape sequences
- The build system handles character encoding
Translation Testing Checklist
- All menu items are translated
- Strings fit on the display without truncation
- Terminology is consistent throughout
- Special characters display correctly
- JSON file is valid and properly formatted
- Build completes without errors
- Firmware runs on actual hardware
- All settings screens are readable
Resources
Next Steps
Building from Source
Learn how to build firmware with your translation
Contributing
Read the full contribution guide