---
title: "Add a language"
description: "Configure frontend locales and content localization, then review the data migration and links."
requested_language: cs
language: en
translation_notice: "This page isn't translated yet"
url: https://docs.systhema.app/cs/guides/recipes/adding-a-language
version: unreleased (main)
docs_index: https://docs.systhema.app/cs/llms.txt
---
> This page isn't translated yet. Showing English.


## Goal

Add Hungarian to an English site. Frontend routing, Payload content localization and Admin translations are independent choices.

## 1. Back up existing content

For a populated site, read [Localizing an existing site](https://docs.systhema.app/cs/payload/localization/migrating-existing-site.md) before changing the locale contract. Rehearse on a database copy. Adding localization can change tables and the shape of stored field values.

## 2. Configure the canonical locale contract

Use the setup connector to write the locale contract and supporting files:

```bash
systhema setup locales --locales en,hu --default-locale en
```

Review the diff and every migration instruction the connector prints. Do not regard generated route files as a completed content translation.

The corresponding config shape is:

```ts title="systhema.config.ts"
import { defineSysthemaLocales } from '@systhemaui/core'

// Merge this value into your existing config.locales.
export const locales = defineSysthemaLocales({
  supported: ['en', 'hu'],
  default: 'en',
  routing: { localePrefix: 'always' },
})
```

The Payload starter forwards `systhemaConfig.locales` through its plugin options. Keep one canonical contract rather than defining two different locale lists.

## 3. Choose content-field policy

Review [Field policy](https://docs.systhema.app/cs/payload/localization/field-policy.md). The default policy is `legacy`; `all` localizes more fields and requires a reviewed back-fill for existing content. Do not change policy to fix one untranslated field without checking its database effect.

Per-locale publishing is enabled by default with content locales. Review each locale's draft and published state. See [Per-locale publishing](https://docs.systhema.app/cs/payload/localization/per-locale-publishing.md).

## 4. Translate and review navigation

Translate page bodies, Header, Footer and SEO values that the chosen policy localizes. Use internal page references for CMS links. In code-owned routes, use the generated routing helpers so the logo and every internal link keep the locale.

Admin interface language is a separate setting. Enabling a content locale does not translate custom collection labels or field descriptions. Use [Admin translations](https://docs.systhema.app/cs/payload/localization/admin-translations.md) when those need translation.

## 5. Regenerate and verify

```bash
pnpm sync
pnpm exec tsc --noEmit
systhema doctor
```

Follow the database migration plan before deploying. Inspect both locale URLs, canonical metadata and sitemap entries while signed out.

## Check your work

- Both locales resolve through the configured frontend routing.
- Editors can distinguish draft and published content per locale.
- Existing English content survived the migration.
- Logo, navigation and actions retain the current locale.
- Missing translations behave as intended.

See [Multilingual sites](https://docs.systhema.app/cs/guides/multilingual.md) for the three switches and [launch checks](going-live-checklist.md).
