Docs
Help Center

Multi-language support

Translate your help center articles, collections, and groups into multiple languages.

Multi-language support

Ticket0's Help Center supports per-locale translations for articles, collections, and groups. Visitors see content in their chosen language, while operators manage translations from a single admin interface.

How it works

  • Every workspace has a default language (usually en).
  • You can enable additional supported languages in Settings → Help Center → Branding → Languages.
  • The default language is served at the existing root URLs (e.g. /, /a/getting-started, /c/billing).
  • Each supported non-default language is served under its own path prefix (e.g. /da/, /da/a/getting-started, /da/c/billing).
  • Selecting the default language from a /[locale]/ page redirects to the canonical root URL.

Configuring languages

  1. Go to Settings → Help Center → Branding → Languages.
  2. Pick a default language. This is the language visitors see if no translation exists for their selected locale.
  3. Enable the languages you want to support.
  4. Save branding settings.

Managing translations

  1. Open Settings → Help Center → Translations.
  2. Select a non-default language from the dropdown.
  3. The content tree shows the status of every collection, group, and article:
    • Untranslated — no translation exists.
    • Draft — a translation exists but is not public.
    • Published — visitors can see the translation.
  4. Click any status badge to open the editor, translate the fields, set the status, and save.

Article translations

Articles require a title, content, and optionally a slug. If you leave the slug blank, it is derived from the translated title.

Collection and group translations

Collections and groups require a title and optionally a description. Collections also support a custom slug.

Public behavior

  • Missing translations fall back to default-language content with a small visitor-language notice (for example, /da/a/getting-started shows “This page isn't available in Danish yet — showing English”) instead of a 404.
  • The fallback page's canonical points to the default-language URL (/a/getting-started); fallback URLs are not added to the sitemap and not listed as hreflang alternates — only URLs with a real published translation are advertised.
  • Structural labels (group titles, breadcrumb ancestors) fall back to the default language when a translation is missing, so navigation never shows blank labels.
  • Search is locale-aware and does not fall back: a locale search only returns content translated into that locale. The default language searches the base article index (english), while other locales search a language-specific index that applies that language's stemming and stopword removal (Danish, German, Spanish, Finnish, French, Italian, Dutch, Norwegian, Portuguese, Swedish, plus English translations); Polish and any language without a built-in Postgres configuration fall back to exact-token matching (no stemming), so search still works but is less forgiving.
  • hreflang alternate links, inLanguage schema.org markup, and the sitemap all include per-locale URLs automatically.

Disabling a language

If you remove a language from the supported list, its /[locale]/ pages stop being advertised and return 404. This is different from a missing translation for an enabled language, which falls back to default-language content as described above. Existing translations are preserved, so re-enabling the language restores the content immediately.

AI replies in the visitor's language

Ticket0's AI also uses your help-center translations when it replies to customers.

  • Chat widget — The widget API reads the visitor's browser language from the Accept-Language header, negotiates it against the workspace's supported languages, and forwards the best matching locale to the AI service.
  • Email auto-replies and operator drafts — The ticket's detected customer language is already forwarded to the AI service, so these paths become locale-aware automatically.

When the AI retrieves knowledge-base articles, it prefers a published translation in the visitor's locale. If a published translation exists, the AI sees the translated title and content and cites the localized URL (/da/a/...). If no translation exists for that article, the AI falls back to the default-language content and the default URL (/a/...), so coverage never regresses. Draft translations are never served to customers.

AI-assisted translation

Ticket0 can draft translations for you using your workspace's own AI provider keys (BYOK). Every AI translation is saved as a draft — nothing publishes automatically.

Translate a single article, collection, or group

  1. Open Settings → Help Center → Translations.
  2. Select the target language and click any Untranslated (or existing) status badge.
  3. Click Translate with AI at the top of the editor.
  4. Ticket0 reads the source content, calls the AI service for the target locale, and fills the title and content/description fields.
  5. Review and edit the draft, then save.

Articles with an empty source body are not auto-translated — the content field is left blank so you can decide what to write.

Translate everything at once

  1. On the Translations tab, choose a target language.
  2. Click Translate all with AI.
  3. Review the estimated item count, model, and rough cost, then confirm.
  4. A background job (ai.bulk-translate-help-center) translates every untranslated entity for that locale, saving each as a draft. Progress (12/47) is shown in the tab and survives a page refresh.
  5. You receive an email summary when the run finishes.

The estimate is a rough token count using the Flash-Lite pricing mirrored from the AI service; your actual cost depends on the model and provider you configure.

Cost, keys, and spend limits

  • AI translation uses your workspace's own API keys (BYOK). Ticket0 does not pay for the AI calls.
  • If your workspace's AI spend limit is reached, translation is blocked (single-article) or pauses mid-run (bulk). Re-running the bulk job later resumes from the remaining untranslated items.
  • Transient failures (e.g. a bad API key or provider outage causing every entity to fail) trigger BullMQ retries automatically. If only a few entities fail among many successes, the run does not retry — the failed items are logged and you can re-run manually.

Publishing

AI translations are always saved as drafts. Use the existing editor Save flow and choose Published when you are ready to make a translation public.

On this page