Back to Docs Hub

Languages

20 human languages with full RTL support for Arabic and Persian.

20
Languages
2
RTL Languages

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. 1. Source Catalog — Translation strings are defined in packages/i18n/src/catalog.ts as a typed TypeScript object
  2. 2. Build Step — Running npm run build:locales emits JSON files to packages/i18n/locales/
  3. 3. Runtime Loading — The app detects the system language on first launch and loads the appropriate JSON
  4. 4. Fallback — If a translation is missing, it falls back to English

🌐 Adding a New Language

Contributing a new language is straightforward:

  1. 1. Copy packages/i18n/locales/en.json to a new file (e.g., hi.json for Hindi)
  2. 2. Translate the values only — keep all keys in English
  3. 3. Add your locale to SUPPORTED_LOCALES in packages/i18n/src/catalog.ts
  4. 4. Run npm run build:locales -w @aura-os/i18n
  5. 5. Test your translations in the app
  6. 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.json for 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. 1. Open a discussion or issue on GitHub to let the team know you'd like to add a language
  2. 2. Follow the "Adding a New Language" guide above to create the translation file
  3. 3. Use machine translation tools as a starting point, then review manually for accuracy and cultural context
  4. 4. Test your language across all app pages to make sure no text is cut off
  5. 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.