Why Multi-Language Matters

Education is global. A language school in Germany has Turkish-speaking administrators, English-speaking teachers, and students from a dozen different countries. A corporate training center in Japan needs its platform in Japanese for local staff but English for international trainers. To serve education globally, a platform must speak the user's language — literally.

When we set out to add multi-language support to Zolinex, we didn't just want basic translation. We wanted every user to feel like the platform was built in their language.

The Technical Foundation

We use ngx-translate as our internationalization framework. Each language has its own JSON translation file containing over 3,000 key-value pairs covering every piece of text in the application — from button labels and form validation messages to email templates and PDF certificate text.

The translation files are loaded dynamically based on the user's language preference, which is stored in their profile and persisted across sessions. Language switching is instant — no page reload required.

Currently Supported Languages

  • English, German, Turkish, Spanish, French, Arabic, Russian, Chinese, Japanese

Challenges We Faced

1. Right-to-Left (RTL) Support

Arabic is a right-to-left language, which means the entire UI layout needs to be mirrored. Navigation menus move to the right, text alignment flips, and even icons that imply direction (arrows, progress bars) need to be reversed. We implemented RTL support using CSS logical properties and a global direction attribute.

2. Text Expansion

German text is typically 30-40% longer than English text. A button that says "Save" in English becomes "Speichern" in German. This affects layout, especially in compact UI elements like table headers and navigation menus. We designed our components with flexible layouts that accommodate text expansion without breaking.

3. Date, Time, and Number Formatting

Different locales have different formatting conventions. The date "3/5/2026" means March 5th in the US but May 3rd in Europe. Currency symbols, decimal separators, and number grouping all vary. We use Angular's built-in locale system to handle these differences automatically.

4. Context-Sensitive Translations

The word "course" translates differently depending on context. In some languages, the translation for "course" as an academic subject differs from "course" as a training program. We handle this by using contextual translation keys rather than generic ones.

Community Contributions

Maintaining 9 languages with 3,000+ keys each is a massive undertaking. We rely on a combination of professional translators for initial translations and community feedback for refinement. Users can report translation issues directly from the platform, and we review and update translations in weekly cycles.

Building a truly international platform isn't just about translation — it's about understanding how different cultures interact with technology and adapting accordingly.