Supported languages
Better Comply ships the user interface and completion certificates in eleven languages. Training and controlled-document content can also be generated or translated into these languages with AI.
The eleven locales
| Language | Code |
|---|---|
| Spanish | es |
| English | en |
| Portuguese | pt |
| German | de |
| Polish | pl |
| Turkish | tr |
| Bulgarian | bg |
| Romanian | ro |
| Hungarian | hu |
| Russian | ru |
| Italian | it |
The authoritative list is the SUPPORTED_LANGUAGES constant in @betterknow/shared. All eleven locales are first-class: every user-facing string in the web application is translated, accents and diacritics are correct (no accent-stripped Spanish or Portuguese), and there are no English-only fallbacks in the UI. A CI lint check enforces catalog parity across all eleven locales.
Organization content languages
Your organization separately declares the languages your controlled documents and training materials are kept in, for example German plus English and Polish. This is your own configuration and is unrelated to the eleven interface locales above. An administrator declares it under Organization > Languages:
- Master language - the canonical language your controlled documents and training materials are authored in. It is always part of the active set and is marked with a star.
- Content languages - the languages you want translations to exist in. Add or remove them with the chips; pick a new master by selecting the star on another language.
This set drives every content-language picker in the product: the language choice when authoring or translating a training, the per-course allow-list, and the target language when translating a controlled document. Languages outside the configured set are not offered, so authors only ever pick languages your organization actually maintains.
There are only two language concepts in Better Comply, and they are independent of each other:
- The interface language (the globe selector in the top bar), which every user picks for themselves from the eleven locales Better Comply ships. It changes the menus and buttons, not your documents.
- The organization content languages above, which decide what languages your documents and trainings exist in.
Neither one limits the other. The languages the product is translated into do not restrict which content languages you choose, and your content languages do not change anyone's interface. They do meet in one helpful place. Because both use the same language codes, Better Comply uses your interface language to pick which content language to show you by default when you open a document or training, and falls back to an available version with a banner when there is no version in your language.
When a document originates from a source file (for example a German work instruction), that file's language is the master language. The source language is not a third, separate setting; it is simply the master you declare here. If you have not configured any content languages yet, nothing is blocked while you set them up.
Selecting a language
In the web application. Open the language selector in the top bar (the globe icon or your current language flag) and choose from the list. The selection is saved to your browser and restored the next time you log in.
For training content. The training viewer also includes a language selector. Each language in the list shows whether this training has an approved version, with a check next to the ones that do, so you can see which are available before choosing. If an approved version exists in the selected language, the viewer loads it. If it does not, the viewer falls back to the assigned available version and shows a banner with the displayed language.
For certificates. The language on a completion certificate matches the training version the learner completed, not just the learner's browser language. This ensures the certificate matches the actual content used for completion.
Localized outputs
| Output | Localized? | How |
|---|---|---|
| Web application UI | Yes, all 11 locales | Language selector in the top bar |
| Training content | Yes, all 11 locales when translated versions exist | The learner can choose a language in the viewer; unavailable languages fall back to the assigned version |
| Completion certificate (PDF) | Yes, all 11 locales | Follows the completed training version's configured language |
| Supervisor weekly digest email | Yes, Spanish / English / Portuguese / German | Server-rendered from a four-locale copy map; each supervisor receives the digest in the language their BetterKnow deployment is configured for |
| AI-generated training content | Yes, all 11 locales | The author selects the target language when creating or translating a training version |
| AI-translated controlled documents | Yes, all 11 locales | The author selects the target language in the content-document editor, reviews the translated Markdown, then saves an audited version |
| System email notifications | English | Planned for future releases |
Language and certificates
Completion certificates embed the learner's name, training name, and completion date, all rendered in the certificate's configured locale. The certificate also uses the correct character sets for each locale:
- Latin-extended characters (Spanish, Portuguese, German, Polish, Romanian, Hungarian, Italian, Turkish) - full diacritic support.
- Cyrillic characters (Russian, Bulgarian) - embedded font covers the full Cyrillic block.
Names containing characters outside the supported ranges are processed as-is where possible; unsupported glyphs are silently dropped rather than causing the certificate generation to fail.
Language and the supervisor digest
The weekly supervisor digest email is sent by the server-side scan job. The digest body is rendered in one of four languages (Spanish, English, Portuguese, or German) using a server-side copy map. It is independent of the web application's i18n catalog. Every learner name and training name interpolated into the digest is escaped to prevent HTML injection.
Supervisors whose accounts use an emailless identity (no corporate email address) are skipped and recorded in the delivery ledger as skipped_no_email.
Adding or changing a training's language
Administrators set the language when creating or editing a training version through the Training Materials authoring flow. The language affects:
- The language the AI uses to generate content and quiz questions.
- The version the learner can select in the training viewer.
- The language printed on completion certificates.
Changing or translating the language creates a new training version and goes through the standard review and approval workflow.
Trainings built from a controlled document stay linked to that document's language. When a training takes its body from a controlled document and you translate the training, Better Comply looks for the controlled document's own approved translation in the target language and links the new training version to it. The learner reads the official translated document, and the completion evidence cites that document variant. If the controlled document has no approved translation in that language yet, Better Comply AI-translates the body instead and warns you, so you know to publish the document translation first for full traceability. The authoring flow also shows the training's existing language coverage so you can see which languages already exist before starting another.
Translating controlled documents
Content-type controlled documents can be translated from the edit page. Select a target language (from your organization's configured content languages), run Translate with AI, review the Markdown result, and save it with a documented change reason. The save creates an audited translated version variant linked to the source version.
Translations and revisions are two separate things, and the document detail page keeps them on separate tabs:
- The Versions tab is the revision history (v1.0, v1.1, v1.2), the change-controlled record an auditor reads. It lists only real revisions, never the language variants.
- The Languages tab shows the language coverage of the current effective revision as chips: the master language, each translated language, and any language still missing. A translation made from a revision that has since been superseded is flagged as an outdated revision (in amber) so a reader is never shown a translation of out-of-date guidance, even if that translation's own status is still "effective". Re-translate it to the current revision to clear the flag.
When someone reads the controlled document, the viewer tries to show the selected document language. If that translated variant is not available, Better Comply shows the available source version and displays a fallback banner. If the variant they land on is a translation of a superseded revision, a banner warns them that a newer revision exists.