Multi-lingual Support
The Web App shows its own interface (buttons, labels, sign-in screens, status messages and errors) in each employee's language. This page explains what's translated for you, how each employee's language is decided, which languages are available, and what you still need to set up yourself.
Interface language and answer language are separateThis page covers the Web App's interface. The language the assistant answers in is decided separately, from the conversation itself. See How Leena AI Chooses the Response Language.
What's translated automatically
Everything the Web App says that isn't part of the conversation:
- The side panel, top bar, composer and footer labels
- The login and verification-code screens
- The notification panel
- Error, permission and connection messages
- The Settings and profile menus, and feedback prompts
- Voice call statuses and controls
- Form validation messages
Answers, knowledge article content and ticket data aren't interface text. Neither is anything you write yourself, such as side panel titles. See What isn't translated.
How each employee's language is decided
The language comes from one employee field: user.language. It's filled in like any other profile field, such as user.department or user.location, usually by Employee sync from your HR system.
Please note: if user.language is empty, the employee sees English. There's no language picker in the Web App, so employees can't change it themselves.
Accepted values
The field is forgiving. Codes and language names both work, and so does a name written in its own script.
Value in user.language | Shown in |
|---|---|
fr | French |
French or french | French |
Français | French |
हिन्दी | Hindi |
pt-BR | Portuguese |
zh-Hant-TW | Chinese (Traditional) |
- A regional code falls back to its base language when there's no regional version, so
pt-BRuses Portuguese anden-GBuses English. - Capital letters and underscores don't matter:
ZH_HANTworks. - The older codes
zhandtlstill work. They map tozh-Hans(Chinese, Simplified) andfil(Filipino).
Please note: a value that matches no language code or name can't be resolved, and the employee sees English. If a whole group of employees unexpectedly sees English, check the value being synced into user.language first.
Available languages
The Web App's interface is available in 100 languages, in two groups:
| Group | Count | What it means |
|---|---|---|
| Supported | 50 | Fully tested in every release and available to every assistant. |
| Community | 50 | Machine translated and only spot-checked. Off unless enabled for your assistant: contact your Leena AI team if you need one. |
All translations are machine generated using a shared glossary, so product terms stay consistent. You can correct any string yourself. See Change the wording.
Supported languages
↔ marks languages shown right to left.
| Code | Language | Code | Language | Code | Language |
|---|---|---|---|---|---|
ar | Arabic ↔ | he | Hebrew ↔ | pt | Portuguese |
bn | Bangla | hi | Hindi | pa | Punjabi |
bg | Bulgarian | hu | Hungarian | ro | Romanian |
zh-Hans | Chinese (Simplified) | id | Indonesian | ru | Russian |
zh-Hant | Chinese (Traditional) | ga | Irish | si | Sinhala |
hr | Croatian | it | Italian | sk | Slovak |
cs | Czech | ja | Japanese | sl | Slovenian |
da | Danish | kn | Kannada | es | Spanish |
nl | Dutch | ko | Korean | sv | Swedish |
en | English | lv | Latvian | ta | Tamil |
et | Estonian | lt | Lithuanian | te | Telugu |
fil | Filipino | ms | Malay | th | Thai |
fi | Finnish | ml | Malayalam | tr | Turkish |
fr | French | mr | Marathi | uk | Ukrainian |
de | German | ne | Nepali | ur | Urdu ↔ |
el | Greek | fa | Persian ↔ | vi | Vietnamese |
gu | Gujarati | pl | Polish |
Community languages (50)
| Code | Language | Code | Language | Code | Language |
|---|---|---|---|---|---|
af | Afrikaans | ka | Georgian | nn | Norwegian Nynorsk |
ak | Akan | ha | Hausa | or | Odia |
sq | Albanian | hi-Latn | Hindi (Latin) | ps | Pashto ↔ |
am | Amharic | is | Icelandic | qu | Quechua |
hy | Armenian | ig | Igbo | gd | Scottish Gaelic |
as | Assamese | jv | Javanese | sr | Serbian |
az | Azerbaijani | kk | Kazakh | sr-Latn | Serbian (Latin) |
eu | Basque | kk-Arab | Kazakh (Arabic) ↔ | sd | Sindhi ↔ |
be | Belarusian | km | Khmer | so | Somali |
bs | Bosnian | kok | Konkani | sw | Swahili |
my | Burmese | ky | Kyrgyz | tk | Turkmen |
yue | Cantonese | lo | Lao | hsb | Upper Sorbian |
yue-Hans | Cantonese (Simplified) | dsb | Lower Sorbian | uz | Uzbek |
ca | Catalan | mk | Macedonian | cy | Welsh |
chr | Cherokee | mn | Mongolian | yo | Yoruba |
cv | Chuvash | pcm | Nigerian Pidgin | zu | Zulu |
gl | Galician | no | Norwegian |
Right-to-left languages
Arabic, Hebrew, Persian, Urdu, Pashto, Sindhi and Kazakh (Arabic script) are shown right to left. The whole layout flips automatically, including the side panel and the composer. You don't need to set anything.
Change the wording
You can replace any interface text with your own wording, per language, for example to use your organisation's name for the helpdesk, or to adjust the sign-in instructions.
-
In the Admin Console, go to Leena channels → Language.
-
Under Translation language, choose the language to edit. Only the languages set up for this assistant are listed.
-
Find the text under Edit translations, either by searching or by opening a group:
Group What's in it Sign In Journey Login and verification-code screens Virtual Assistant General Actions Side panel, composer, chats and general labels Virtual Assistant Settings and Permissions Settings and permission prompts Virtual Assistant Feedback Journey Feedback and rating prompts Notifications The notification panel Error Messages Errors shown to employees Validation Message Form field checks -
Click the pencil icon next to a string, enter your wording and click Save changes. The reset icon restores the original.

Admin Console → Leena channels → Language
For each string, the Web App uses your wording if you've changed it, then its own translation for that language, and finally English. Your changes apply to this assistant only, so different assistants can use different wording in the same language. For more on this page, see Language.
Keep placeholders exactly as they are
Some strings contain placeholders in braces, such as Hi {name}! or {field_name}, which are filled in when the text is shown. Keep every placeholder exactly as it appears in the original. Translating {name} into {nom} breaks it, and the Web App falls back to English for that string.
- Correct:
Bonjour {name} ! - Incorrect:
Bonjour {nom} !
What isn't translated
Anything you write is shown exactly as typed, to every employee who can see it, whatever their language:
- Side panel folders, webviews and their titles
- External link titles
- Quick reply titles
- Onboarding slide titles in the Product Tour
- Links that point to a page in a particular language
This is by design: these are your words, and translating them automatically would often get them wrong. It does mean a French-speaking employee sees a French interface around an English side panel, unless you set the side panel up for French yourself.
Recommended: configuring the side menu for multiple languages
Create one copy of each side panel item per language, and show each copy only to employees with that language, using an audience built on user.language. Each employee then sees exactly one copy, in their own language.
Step 1: Create an audience for each language
Create one audience per language you support, filtered on user.language.
| Audience name | Condition |
|---|---|
Language – French | user.language is French |
Language – Spanish | user.language is Spanish |
Language – Arabic | user.language is Arabic |
Match the values your HR system actually sends. This is the step that most often goes wrong. The Web App understands fr, French and Français alike when it picks the interface language, but audiences don't: they match the stored value exactly. If your HR system sends a mix, include every variant in the condition, or standardise the values in the sync before building audiences on them.
Step 2: Create one copy of each item per language
In Admin Console → Leena channels → Settings → 2. Sidebar actions, create one copy of each item per language, with the title in that language and the matching audience.
| Title | Audience |
|---|---|
| Raise a Ticket | Language – English |
| Créer un ticket | Language – French |
| Crear un ticket | Language – Spanish |
Keep the icon and link the same across copies, unless the page itself is available in several languages. If it accepts a language setting, set it in each copy.
Step 3: Make English the catch-all
Employees with an empty user.language, or a language you haven't covered, still need to see something. Show the English copy to everyone outside your other language audiences, so nobody ends up with a missing item.
Step 4: Keep the copies next to each other
Employees only see the items they're eligible for, and the rest are hidden. Placing all copies of the same item together keeps the order the same for everyone, whatever their language.
Things to watch
- Five items per folder. Each folder holds up to five items, and only five rows fit at the top level before items move into More. Copies for each language add up quickly, so trim the side panel before translating it.
- Title length. Translations are often longer than English. Check that your longest titles still read well in the panel.
- Upkeep. Every new language means a new copy of every item. Keep the side panel to what earns its place.
- Quick replies work the same way. They take an audience too, so use the same pattern.
On the classic designTranslation works the same way. If you use an older version of the Web App, you may see
persistentMenuentries on the Language page. They apply only to that older interface and have no effect on the side panel.
Troubleshooting
An employee sees English even though their language is set.
Check the exact value in user.language on their profile. Values that aren't a recognisable code or language name fall back to English. If it's a Community language, check with your Leena AI team that it's enabled for your assistant.
My changed wording isn't showing.
Changes are matched to the exact original text: Thinking and thinking are different strings. Check the capitalisation and punctuation match.
A string shows in English with a visible {placeholder}.
A placeholder was changed in your wording. Edit the string again and keep the placeholder exactly as in the original.
The side panel is in English for a French-speaking employee.
Side panel items aren't translated automatically. Set up a copy per language, as described above.
The voice call isn't in the employee's language.
Voice language depends on your voice setup. See Voice Call.
Updated 8 days ago
