Localização
A camada traz sete locales, e cada texto configurado assume três formas.
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.
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:
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 — o enquadramento 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:
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.
/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:
- o próprio locale —
pt-PTlêpt-PT - a sua língua base —
pt-PTlê uma árvorept, o que permite a uma pastapt/servir tantopt-PTcomopt-BR - uma irmã da mesma língua —
pt-BRlêpt-PTantes de sair do português fallbackLocaledo vue-i18n, o mesmo valor por onde um texto em falta resolve- 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.