Pular para o conteúdo
duxt

Vários idiomas

Servir a interface em vários idiomas, e traduzir também as páginas.

Os textos do tema estão traduzidos em sete locales. Um site serve o subconjunto que quiser, traduz os textos que ele próprio configurou e — se quiser — também as páginas.

Passos

  1. Reduz a lista com duxt.locales.
    locales: ['en-GB', 'pt-PT']
    

    Não o array locales do i18n: esse combina entre camadas em vez de substituir, por isso declarar dois aí deixa os outros cinco roteados e anunciados em hreflang.
  2. Escolhe o que fica sem prefixo no nuxt.config.ts com i18n.defaultLocale. É relevante para o URL: mudá-lo mais tarde move todas as páginas nos dois sentidos ao mesmo tempo.
  3. Traduz os teus próprios textos. Para um punhado, a forma de registo custa menos do que um ficheiro de locale por idioma:
    sections: [
      {
        label: { 'en-GB': 'Guides', 'pt-PT': 'Guias' },
        to: '/guides',
        icon: 'lucide:book-open'
      }
    ]
    

    Para mais do que um punhado, regista as tuas próprias chaves i18n e escreve a chave. Não recorras a duxt.defaults.* — são as chaves internas da camada, e uma mudança de nome aí partiria o teu site em silêncio.
  4. Define a origem. hreflang não é válido em relativo, por isso precisa de i18n.baseUrl ou NUXT_PUBLIC_I18N_BASE_URL.
  5. Traduz as páginas, se quiseres. Uma pasta por idioma dentro da fonte; o locale por omissão fica onde está e não move nenhum URL:
    sources: [{ path: 'docs', locales: ['en-GB', 'pt'] }]
    
docs/
  • index.md
  • 1.getting-started
  • index.md
  • pt
  • index.md

Traduz tão poucas páginas quanto quiseres — tudo o resto recai no original, com um aviso que diz ao leitor porquê.

  1. Abre uma página em cada locale e verifica que a interface mudou de idioma, que o caminho continua a resolver e que nenhum rótulo configurado aparece como chave em bruto.

Só algumas versões, ou outro repositório

locales numa ref sobrepõe-se ao da fonte, que é a forma habitual: a versão atual está traduzida e as duas anteriores não.

{
  path: 'docs',
  locales: ['en-GB', 'pt'],
  refs: [
    { tag: 'v2.0.0' },                     // ambos os idiomas
    { tag: 'v1.0.0', locales: ['en-GB'] }  // só o original
  ]
}

A forma de objeto move um idioma completamente para outro sítio — o seu próprio repositório, com os seus próprios responsáveis e o seu próprio ritmo:

locales: ['en-GB', { locale: 'pt', repo: 'acme/docs-pt', path: 'docs' }]

É o que o React e o Vue fazem fora das suas ferramentas, com de.react.dev e a organização vuejs-translations, porque quem traduz trabalha com o seu próprio calendário e a sua própria revisão. Aqui é uma entrada de fonte em vez de um segundo site — um índice de pesquisa, um seletor de idioma.

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

O leitor recebe o idioma mais próximo que a tenha, com um aviso, e a página leva noindex mais um canonical a apontar para o idioma em que realmente está. A cadeia — locale, língua base, região irmã, fallbackLocale, original — está em Localização.

Lista de verificação

  • duxt.locales lista exatamente os locales que serves
  • /sitemap.xml contém uma entrada por página e locale, e mais nenhuma
  • As ligações hreflang são absolutas
  • Nenhum rótulo configurado aparece como chave em bruto
  • Mudar de locale mantém o leitor na mesma página
  • Uma página que não traduziste mostra o aviso de recurso, não um 404
  • duxt.sourceOptions.defaultLocale corresponde a i18n.defaultLocale
Esta página foi útil?