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

# Suporte Multilíngue

> Como a internacionalização (i18n) funciona na plataforma.

## Idiomas Suportados

| Código | Idioma             |
| ------ | ------------------ |
| `pt`   | Português (padrão) |
| `en`   | Inglês             |

***

## Como Funciona

O AssessIQ usa a biblioteca **next-intl** com roteamento baseado em locale na URL:

```
https://app.assessiq.digital/pt/home   → Português
https://app.assessiq.digital/en/home   → Inglês
```

As traduções ficam em arquivos JSON na pasta `messages/`:

```
messages/
├── pt.json   ← strings em Português
└── en.json   ← strings em Inglês
```

***

## Usando Traduções em Componentes

### Em Client Components

```tsx theme={null}
"use client";
import { useTranslations } from "next-intl";

export function MeuComponente() {
  const t = useTranslations();
  return <h1>{t("home.title")}</h1>;
}
```

### Em Server Components

```tsx theme={null}
import { getTranslations } from "next-intl/server";

export default async function Page() {
  const t = await getTranslations();
  return <h1>{t("home.title")}</h1>;
}
```

***

## Estrutura das Chaves

As chaves seguem a notação de ponto por namespace:

```json theme={null}
{
  "home.kpiModelsTitle": "Testes Criados",
  "home.kpiStudentsTitle": "Alunos Cadastrados",
  "people.fullName": "Nome Completo",
  "adminNotifications.previewTitle": "Preview"
}
```

<Warning>
  **Não** use um ponto em um valor que também tem sub-chaves. Por exemplo, `"adminNotifications.preview": "Preview"` **conflita** com `"adminNotifications.preview.platform"`. Use um sufixo como `previewTitle` para valores folha.
</Warning>

***

## Alterando o Idioma

O usuário pode alternar o idioma através do seletor de idioma na navbar. A preferência é salva via cookie e persiste entre sessões.

***

## Adicionando Novas Strings

1. Adicione a chave com o valor em `messages/pt.json`
2. Adicione a tradução correspondente em `messages/en.json`
3. Use `t("namespace.chave")` no componente

<Tip>
  Ambos os arquivos devem permanecer sincronizados — mesmas chaves, mesma contagem. O processo de build lança erro se uma chave existir em apenas um dos arquivos.
</Tip>
