Os textos do próprio tema — rótulos de navegação, pesquisa, o aviso de versão, o
404 — são entregues traduzidos em `en-GB`, `en-US`, `de-DE`, `es-ES`, `fr-FR`,
`pt-PT` e `pt-BR`. Um site escolhe quais serve com `locales`, e
`i18n.defaultLocale` decide qual é servido sem prefixo de URL.

`locales` é lido em tempo de compilação: os locales decidem rotas e `hreflang`,
não apenas o que um componente desenha, por isso alterar a lista exige nova
compilação.

::callout{type="warning" title="Restringir a lista precisa desta chave, não da do i18n"}
O array `locales` do i18n combina entre camadas em vez de substituir, por isso
declarar `['de-DE']` aí não acrescenta nem remove nada: os outros seis
continuam roteados, indexados e anunciados em `hreflang`. `duxt.locales` é a
chave que a reduz de facto.
::

## Cada texto configurado assume três formas

Tudo o que escreves na configuração — um rótulo, um título, uma descrição — pode
ser um literal, uma chave i18n, ou um registo com um texto por locale:

```ts
label: 'Repository'                                       // literal
label: 'app.nav.repository'                               // chave própria
label: { 'en-GB': 'Repository', 'pt-PT': 'Repositório' }  // por locale
```

Qual delas é decide-se conforme o texto seja uma chave registada. Um site
monolingue nunca encontra as outras duas formas, e um site com um punhado de
textos em cinco idiomas não precisa de ficheiros de locale nenhuns — a forma de
registo resolve pela língua base, por isso `pt-PT` cobre `pt-BR` e `en-GB` cobre
`en-US`.

## Não mexas nas chaves da camada

`duxt.defaults.*` traduz os valores por omissão que a própria camada entrega.
Essas chaves são internas: renomear uma não é uma alteração incompatível da
camada, e o i18n responde a uma chave em falta imprimindo a chave — quem
dependesse de uma saberia por um leitor, não por uma compilação. Usa um literal,
uma chave tua, ou a forma de registo.

## Caminhos e ligações

Só os caminhos são localizados. `useDuxtPath()` dá o caminho onde está a
**documentação**, sem o segmento de locale; `useDuxtLink()` volta a escrevê-lo
como ligação, acrescentando o segmento de novo. Um URL absoluto, uma ligação de
correio ou uma âncora isolada passam intactos. Tudo o que calcule um caminho de
documentação deve passar por este par em vez de ler a rota diretamente.

## Páginas traduzidas

A interface e as páginas são duas decisões separadas. Um site que nada diga
serve uma mesma árvore em todos os locales — a interface muda de idioma, o
Markdown não — e essa é a forma certa para a maior parte da documentação.

`locales` numa fonte acrescenta a segunda metade:

```ts [app/app.config.ts]
sources: [{ path: 'docs', locales: ['en-GB', 'pt'] }]
```

O locale por omissão é a própria árvore em `path`, sem pasta própria, por isso
acrescentar esta chave nunca move uma página já publicada. Qualquer outro idioma
é uma pasta lá dentro — `docs/pt/` — ou fica noutro sítio por completo; ver
[Vários idiomas](/guides/several-languages).

::callout{type="tip" title="O locale não faz parte do caminho de conteúdo"}
`/pt-PT/guides/deploying` e `/guides/deploying` são o mesmo caminho de conteúdo
em duas coleções. O segmento pertence ao roteamento do i18n, nunca a uma coleção
— é por isso que mudar de idioma mantém o leitor na mesma página, e por isso uma
tradução em falta é resolvida com mais uma consulta em vez de um
redirecionamento.
::

## Quando uma página não tem tradução

O leitor recebe o idioma mais próximo que a tenha, com um aviso a dizê-lo, e a
página fica fora do índice sob `noindex`, com um `canonical` a apontar para o
idioma que realmente a transporta. A cadeia é a mesma que a camada já aplica aos
textos:

1. o próprio locale — `pt-PT` lê `pt-PT`
2. a sua língua base — `pt-PT` lê uma árvore `pt`, o que permite a uma pasta
   `pt/` servir tanto `pt-PT` como `pt-BR`
3. uma irmã da mesma língua — `pt-BR` lê `pt-PT` antes de sair do português
4. `fallbackLocale` do vue-i18n, o mesmo valor por onde um texto em falta
   resolve
5. o original por traduzir

Um 404 fica deliberadamente de fora: uma lacuna numa tradução pertence a quem
escreve, e respondê-la escondendo a página castiga o leitor por isso.

## Direção da escrita

O locale ativo também fornece a direção do documento. Os componentes usam
início e fim lógicos, pelo que navegação, painéis, setas e elementos da página
se refletem quando um consumidor acrescenta um locale RTL. O material técnico
não é refletido às cegas: código, comandos, caminhos, nomes de API e outra
sintaxe LTR mantêm a direção em que são legíveis.

O duxt não inclui atualmente nenhum locale RTL. Direction-aware significa que
um site pode acrescentar um sem fazer fork do tema, não que um dos sete locales
incluídos seja RTL.