# Conteúdo multilíngue

Idiomas do site, endereços por idioma, campos traduzidos e textos da interface.

Um site Nimbly pode rodar em quantos idiomas quiser. Os idiomas funcionam em três níveis: as configurações do site, os endereços e os dados.

## 1. Idiomas do site

Liste os idiomas nas configurações do site, `/nb-admin/settings`, ou em `ext/data/.config/site`:

```json
{
  "languages": ["en", "nl"]
}
```

Os códigos têm duas letras. O primeiro idioma é o padrão de reserva. Árabe, persa e hebraico ficam automaticamente da direita para a esquerda; a direção do texto pode ser definida por idioma nas configurações.

## 2. Endereços

Cada idioma ganha seu próprio prefixo, como pastas em `ext/uri/`:

```text
ext/uri/en/index.tpl            /en/
ext/uri/en/about/index.tpl      /en/about
ext/uri/nl/index.tpl            /nl/
ext/uri/nl/over-ons/index.tpl   /nl/over-ons
```

A raiz manda os visitantes para o idioma deles com `[#redirect [#detect-language#]#]` em `ext/uri/index.tpl`. O idioma vem do endereço, depois de `?lang=`, do domínio e do navegador, nessa ordem.

Os idiomas podem ter estrutura e endereços diferentes. Onde as páginas são iguais, compartilhe o conteúdo por meio de um template:

```html
[#page-about#]
```

tanto em `en/about/main.tpl` quanto em `nl/over-ons/main.tpl`. Para ligar uma página às suas equivalentes, acrescente um `i18n-url.json` ao lado do `index.tpl` dela; o `[#language-switch#]` então leva à página certa em cada idioma. Veja [Roteamento](/pt/docs/concepts/routing/).

## 3. Dados traduzidos

Marque os campos que mudam por idioma com `"i18n": true`, e liste os idiomas no recurso:

```json
{
  "languages": ["en", "nl"],
  "fields": {
    "title": {"name": "Title", "type": "text", "required": true, "i18n": true},
    "title_slug": {"name": "URL slug", "type": "slug", "source": "title"},
    "year": {"name": "Year", "type": "text"},
    "description": {"name": "Description", "type": "html", "buttons": "bold,italic", "i18n": true}
  }
}
```

Um registro guarda todos os idiomas: `"title": {"en": "Harbour Atlas", "nl": "Havenatlas"}`. Os campos sem `i18n` são compartilhados, como o ano. Um slug derivado de um título traduzido é traduzido junto.

Os templates não precisam mudar: `[#get project.title#]` e `[#get-html project.description#]` exibem o idioma atual. Use `lang=nl` para pedir um idioma específico. No admin, cada campo traduzido tem um seletor de idioma, e os editores podem traduzir um campo com IA a partir dali quando há uma chave da OpenAI configurada.

## Textos da interface

Os textos que fazem parte da interface, como botões e rótulos, usam `[#text#]`:

```html
<button>[#text Read_more#]</button>
[#text str="Search projects"#]
```

As traduções ficam em `ext/data/.i18n/text.<language>.po`:

```po
msgid "Read_more"
msgstr "Lees meer"
```

Rode `./nimbly build` depois de alterar os arquivos.

## Orientando a tradução com IA

Um campo pode levar instruções para a tradução com IA, compartilhadas ou por idioma:

```json
"description": {
  "type": "html",
  "i18n": true,
  "ai_prompts": {
    "_all": ["The input and output are HTML. Keep every tag, link and image.", "The tone is clear and professional."],
    "nl": ["You translate to Dutch."]
  }
}
```

Em campos HTML, peça explicitamente que o markup seja mantido.
