> ## Documentation Index
> Fetch the complete documentation index at: https://docs.orriven.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Languages

> Offer event content in more than one language: the Languages card, the translation editor, per-string fallback, and how pages choose a language.

An event's public content — name, ticket types, add-ons, bundles, agenda, speakers, and form questions — is written once, in one language. The **Languages** card at the bottom of the event's [Public page](/en/events/event-page) section adds a second language. Translations are entered in the editor beneath it. Public content is then returned in the requested language: on the organizer's site through the [Storefront API](/en/developers/storefront), and on orriven's [hosted pages](/en/events/hosted-pages) — checkout, the order page, and the entry pass.

Two kinds of text are involved:

* **Interface copy** on hosted pages — buttons, statuses, prompts — is translated by the platform.
* **Event content** is translated here.

## Supported languages

The platform offers **English** and **简体中文**. Only languages that hosted pages can render are available, so a page never mixes Chinese content with English buttons. Adding a language to the platform is a separate change. There is no machine translation.

## Adding a language

<Steps>
  <Step title="Open the event's Public page section">
    The **Languages** card lists the available languages as checkboxes.
  </Step>

  <Step title="Select languages and choose the default">
    The **Default language** is what an untranslated string falls back to, and what a visitor sees before choosing. It is always one of the offered languages. Unticking the default moves it to the first remaining one.
  </Step>

  <Step title="Save">
    With two or more languages offered, the strings to translate appear below.
  </Step>
</Steps>

An event offering one language shows no editor — "One language" — until a second is selected.

## Translating

The **Text** card chooses which language is being **translated into**, one at a time. Below it, strings are grouped by source, in a fixed order:

| Group        | What is listed                                                                                          |
| ------------ | ------------------------------------------------------------------------------------------------------- |
| Event        | The event name.                                                                                         |
| Ticket types | Each ticket type's name and description — including types whose sale has not yet opened.                |
| Add-ons      | Name and description.                                                                                   |
| Bundles      | Name and description.                                                                                   |
| Agenda       | Each session's title, description, and the venue name as the agenda shows it.                           |
| Speakers     | Name, title, and bio.                                                                                   |
| Forms        | Each published form question's label, description, and help text, and each option of a choice question. |

Each row shows the **original** on the left — the live value in the default language, not editable here; names are changed where they live — and a box on the right for the translation. Long originals get a multi-line box. **Leave a box empty to keep the original.** The save bar appears as soon as something changes. **Reload text** refetches the originals after content elsewhere has changed.

The list is built from the page a visitor would be served: empty fields are not listed, a hidden ticket type is not listed, and content added later appears on the next reload. An event with nothing public yet shows "Nothing to translate yet".

## Per-string fallback

A string with no translation falls back to the default language **on its own** — not the whole page. A partly translated event still shows every field: translated ticket names, an untranslated add-on in the original, no missing pieces.

## What translations cannot change

A translation replaces text only. It cannot reveal a hidden ticket type, change a sold-out or closed state, alter a price, add or remove an item, or make a draft event visible. What a page offers, and to whom, is decided before translation is applied.

Some text is not translatable: **perk names** and **sponsorship tier names** (they have no identity on the public page to translate against), and **item names on an order** — those are a snapshot taken at purchase. The console follows the account language, not the event's.

## How a visitor gets a language

* **The organizer's site** requests a language on the Storefront API with `?lang=` (for example `?lang=zh-CN`) and receives the translated content. Without it, the default language.
* **Hosted pages** include a language switcher in the header. Both interface languages are always available there. A page picks its language from `?lang=` on the link, then the visitor's remembered choice, then the browser's language, else English. The choice is stored in the visitor's browser. No sign-in and no cookie. Interface copy and event content switch together.

## Rules to know

* Only **English** and **简体中文** can be offered. The default must be one of the offered languages.
* Fallback is **per string**, silent, to the default language.
* Translations **never** affect what is offered, shown, priced, or available.
* Perks, sponsorship tiers, and order line items are not translated. The console is not either.
* Language is a query parameter and a remembered choice. There are no per-language addresses.

## Related

<CardGroup cols={2}>
  <Card title="The event page" icon="globe" href="/en/events/event-page">
    The Public page section that holds the Languages card.
  </Card>

  <Card title="Storefront API" icon="store" href="/en/developers/storefront">
    Reading translated content with `?lang=`.
  </Card>

  <Card title="Hosted pages" icon="panel-top" href="/en/events/hosted-pages">
    Checkout, the order page, and the entry pass.
  </Card>

  <Card title="Registration form" icon="list-check" href="/en/ticketing/registration-form">
    The questions that appear under Forms.
  </Card>
</CardGroup>
