Skip to the article
Aniq-UI

KinoraLanguages

Languages

How Kinora runs in English and Arabic, how to change any text, and what to change to add a language.

For the Full Stack package

The languages that ship

English and Arabic, in both apps. Arabic lays the whole dashboard out right to left, with its own font.

AppEnglishArabic
Dashboard/en/…/ar/…
APIAccept-Language: enAccept-Language: ar

English is the default. Catalogue content (exercises, workouts, programs, dishes, groups, events, challenges, badges) is stored with its name and description in both languages, entered side by side on the Content screens.

How the language is chosen

  • The language is the first part of the address. A path without one goes to /en; the browser's language is not detected.
  • The language switcher swaps that part of the address and keeps the page.
  • The direction is set before the first paint, so an Arabic page never flashes left to right.
  • The dashboard sends the page's language to the API in Accept-Language, so its messages come back in the same language.

Change a text

Every visible word lives in messages/<namespace>/en.json and ar.json, in the dashboard's folder. Change the value, keep the key, and change it in both files.

NamespaceWhat it holds
ai-assistantThe assistant's page
authSign-in, registration and password pages
commonThe shared components' words: tables, filters, uploads, the search
dashboardEvery dashboard page and the notifications, with a folder per section (activity, workouts, nutrition, clients, content, settings and the rest)
demo-credentialsThe public demo's panel where a visitor adds their own AI key
layoutsThe navbar, the sidebar's chrome and the sample-data notice
  • A key missing from ar.json shows as a missing-message error on the Arabic side, so keep the two files in step.
  • The sidebar labels are the exception: they are written in English and Arabic in src/layouts/dashboard/sidebar/config/navigationData.ts, which also feeds the search.
  • Text inside {curly} braces is filled in by the app, such as {count} or {name}. Keep those words as they are in both languages.
  • Notifications are stored as what happened, never as a sentence, and the dashboard writes the words from its own message files. A new language for them is a translation, not an API change.

The dashboard's own Arabic labels

When you write about Kinora in Arabic, use the labels its screens show:

EnglishArabicWho sees it
Dashboardلوحة التحكمEveryone
AI Assistantالمساعد الذكيEveryone
ActivityالنشاطMembers
WorkoutsالتمارينMembers
Exercise Libraryمكتبة التمارينMembers
NutritionالتغذيةMembers
Meal Plannerمخطط الوجباتMembers
SleepالنومMembers
HealthالصحةMembers
ProgressالتقدمMembers
Progress Photosصور التقدمMembers
CommunityالمجتمعMembers
My ClientsعملائيHead Coach and Personal Trainers
GymالناديStaff
ContentالمحتوىStaff
CoachesالمدربونStaff
Coach Rolesأدوار المدربينStaff
SettingsالإعداداتEveryone
Sign Inتسجيل الدخولThe sign-in page

What the API translates

  • Error messages and the message of a successful write come back in the language of the Accept-Language header. ar-SA counts as Arabic; any language the API does not have falls back to English.
  • Its texts are JSON files in back-end/src/i18n/translations/en/ and ar/, one per area: auth, coach, common, roles, settings, users.
  • Content stored in both languages comes back as { "en": "…", "ar": "…" }, and the dashboard picks one.

Add a language to the dashboard

The two languages are written into several files, so adding a third touches each of them. Paths are inside dashboard/.

  1. Add the language code

    Add it to the locale lists in src/config/i18n.ts, src/proxy.ts, src/app/[locale]/layout.tsx and src/components/LanguageSwitcher.tsx.

  2. Translate the messages

    Add a <code>.json beside every en.json under messages/, including the folders inside messages/dashboard/.

  3. Translate the sidebar and the brand

    Add your language to each label in src/layouts/dashboard/sidebar/config/navigationData.ts, and to the texts in src/config/brand.config.ts.

  4. Set the direction

    For a right-to-left language, add it to RTL_LOCALES in src/app/layout.tsx and to src/hooks/locale/useDirection.ts.

Catalogue content is stored in English and Arabic only. A third language also needs the API's content fields and the Content forms to carry it.

Add a language to the API

  1. Add the language code

    Add it to supportedLocales in back-end/src/i18n/i18n.service.ts.

  2. Translate the messages

    Copy back-end/src/i18n/translations/en/ to a folder named after the code and translate the values. A key you leave out falls back to English.

Stuck on a step?

Find a fix before you start over.

Troubleshooting

Cookie Preferences

We use cookies to enhance your browsing experience, analyze site traffic, and personalize content. By clicking "Accept All", you consent to our use of cookies for analytics and personalized advertising.