Languages
20 human languages with full RTL support for Arabic and Persian.
Aura Work is built for a global audience. The i18n system uses TypeScript source catalogs that emit Weblate-compatible JSON files. Adding a new language is a single PR away.
Why i18n Matters
Aura Work is used by developers worldwide. By supporting 20 languages, we ensure that:
- Accessibility — developers can use the tool in their native language
- Inclusivity — RTL languages (Arabic, Persian) are fully supported
- Community — contributors can add translations for their language
- Global reach — the tool can be used in any country
How i18n works
The i18n system is built with TypeScript and follows a layered architecture:
- 1. Source Catalog — Translation strings are defined in
packages/i18n/src/catalog.tsas a typed TypeScript object - 2. Build Step — Running
npm run build:localesemits JSON files topackages/i18n/locales/ - 3. Runtime Loading — The app detects the system language on first launch and loads the appropriate JSON
- 4. Fallback — If a translation is missing, it falls back to English
🌐 Adding a New Language
Contributing a new language is straightforward:
- 1. Copy
packages/i18n/locales/en.jsonto a new file (e.g.,hi.jsonfor Hindi) - 2. Translate the values only — keep all keys in English
- 3. Add your locale to
SUPPORTED_LOCALESinpackages/i18n/src/catalog.ts - 4. Run
npm run build:locales -w @aura-os/i18n - 5. Test your translations in the app
- 6. Submit a PR with the changes
The project uses Weblate for community translations. You can contribute translations via Weblate or directly via PR.
📐 RTL Support
Arabic and Persian use dir="rtl" layout. The RTL support includes:
- Layout direction — entire UI flips horizontally
- Text alignment — text aligns to the right
- Navigation — sidebar and menus flip direction
- Typography — IBM Plex Sans Arabic and Tajawal fonts
- Icons — directional icons are flipped (arrows, chevrons)
- Animations — slide animations respect RTL direction
The design system includes proper Arabic typography with built-in font substitution for mixed-language content.
🔧 Translation Keys
Translation keys follow a hierarchical structure:
{
"common": {
"save": "Save",
"cancel": "Cancel",
"delete": "Delete"
},
"dashboard": {
"title": "Dashboard",
"welcome": "Welcome back, {{name}}",
"stats": {
"tasks": "Tasks",
"projects": "Projects"
}
},
"errors": {
"network": "Network error. Please check your connection.",
"auth": "Authentication failed. Please log in again."
}
}
Use dot notation to reference keys: t('dashboard.stats.tasks'). Variables are wrapped in double curly braces: {{name}}.
📝 Translation Best Practices
- Keep keys in English — only translate values
- Use placeholders — for dynamic content (e.g.,
{{count}}) - Consider context — some words have different translations based on context
- Test thoroughly — check for text overflow, alignment issues
- Use Weblate — for community translations and consistency
- Review existing translations — check
en.jsonfor the complete list
How to Contribute a New Language
Anyone can add a new language to Aura Work. The process is simple and open to everyone:
- 1. Open a discussion or issue on GitHub to let the team know you'd like to add a language
- 2. Follow the "Adding a New Language" guide above to create the translation file
- 3. Use machine translation tools as a starting point, then review manually for accuracy and cultural context
- 4. Test your language across all app pages to make sure no text is cut off
- 5. Submit the pull request and wait for the team's review
All contributions are appreciated, whether a full translation or small fixes to existing ones.