Adicione funcionalidades de i18n
Nesta receita, você aprenderá como usar coleções de conteúdo e roteamento dinâmico para construir suas própria solução de internacionalização (i18n) e servir seu conteúdo em diferentes línguas.
Na v4.0, Astro adicionou suporte embutido para roteamento i18n que permite qeu você configure línguas padrão e suportadas, e inclui funcões auxiliares valiosas para ajudá-lo em distribuir para uma audiência internacional. Se você quiser usar isto, veja nosso guia de internacionalização (EN) para aprender sobre essas funcionalidades.
Esse exemplo serve cada língua em seu próprio subcaminho, como example.com/en/blog
para inglês e example.com/fr/blog
para francês.
Se você prefere que a língua padrão não seja visível na URL ao contrário de outras línguas, aqui estão instruções para ocultar a língua padrão.
Receita
Seção intitulada ReceitaConfigure páginas para cada língua
Seção intitulada Configure páginas para cada língua-
Crie um diretório para cada língua que você quer oferecer suporte. Por exemplo,
en/
efr/
se você estiver oferecendo suporte para inglês e francês:Directorysrc/
Directorypages/
Directoryen/
- about.astro
- index.astro
Directoryfr/
- about.astro
- index.astro
- index.astro
-
Configure
src/pages/index.astro
para redirecionar para a língua padrão.Esta abordagem utiliza meta refresh e funcionará independentemente de como você fizer deploy do seu site. No entanto, alguns hosts estáticos também permitem que você configure redirecionamentos pelo servidor com um arquivo de configuração personalizado. Verifique a documentação da sua plataforma de deploy para mais detalhes.
Se você está utilizando um adaptador SSR, você pode usar
Astro.redirect
para redirecionar para a linguagem padrão no servidor.
Use coleções para conteúdo traduzido
Seção intitulada Use coleções para conteúdo traduzido-
Crie um diretório em
src/content/
para cada tipo de conteúdo que você quer incluir e adicione subdiretórios para cada língua suportada. Por exemplo, para oferecer suporte a postagens de blog em inglês e francês:Directorysrc/
Directorycontent/
Directoryblog/
Directoryen/ Postagens de blog em inglês
- post-1.md
- post-2.md
Directoryfr/ Postagens de blog em francês
- post-1.md
- post-2.md
-
Crie um arquivo
src/content/config.ts
e exporte uma coleção para cada tipo de conteúdo.Leia mais sobre Coleções de Conteúdo. -
Use rotas dinâmicas para buscar e renderizar conteúdo baseado em parâmetros
lang
eslug
.Em modo de renderização estático, use
getStaticPaths
para mapear cada entrada de conteúdo para uma página:Em modo SSR, busque a entrada solicitada diretamente:
Leia mais sobre roteamento dinâmico.O exemplo acima utiliza o método de formatação de data
toLocaleString()
embutido para criar uma string legível por humanos a partir da data do frontmatter. Isso garante que a data e a hora sejam formatadas de acordo com a língua do usuário.
Traduza strings da UI
Seção intitulada Traduza strings da UICriar dicionários de termos para traduzir as labels dos elementos de UI em todo o seu site. Isso permite que seus visitantes experimentem seu site completamente na língua deles.
-
Crie um arquivo
src/i18n/ui.ts
para armazenar suas strings de tradução: -
Crie duas funções auxiliares: uma para detectar a língua da página baseado na URL atual, e outra para obter as strings traduzidas para diferentes partes da UI em
src/i18n/utils.ts
:No passo 1, a string
nav.twitter
não foi traduzida para o francês. Você pode não querer traduzir todos os termos, como nomes próprios ou termos comuns da indústria. A função auxiliaruseTranslations
retornará o valor da língua padrão se uma chave não for traduzida. Neste exemplo, os usuários franceses também verão “Twitter” na barra de navegação. -
Importe os auxiliadores onde necessário e use-os para escolher a string de UI que corresponde a língua atual. Por exemplo, um componente de navegação pode ser assim:
-
Cada página deve ter um atributo
lang
no elemento<html>
que corresponda a língua da página. Neste exemplo, um layout reutilizável extrai a língua da rota atual:Assim, você pode usar este layout base para garantir que as páginas usem o atributo
lang
correto automaticamente.
Permitir que usuários alternem línguas
Seção intitulada Permitir que usuários alternem línguasCrie links para as diferentes línguas que você oferece suporte para que os usuários possam escolher a língua que eles querem ler seu site.
-
Crie um componente para mostrar um link para cada língua:
-
Adicione
<SeletorLinguas />
ao seu site para que ele seja mostrado em todas as páginas. O exemplo abaixo adiciona ele ao rodapé do site em um layout base:
Ocultar a língua padrão na URL
Seção intitulada Ocultar a língua padrão na URL-
Crie um diretório para cada língua, exceto a língua padrão. Por exemplo, armazene suas páginas da língua padrão diretamente em
pages/
, e suas páginas traduzidas emfr/
:Directorysrc/
Directorypages/
- about.astro
- index.astro
Directoryfr/
- about.astro
- index.astro
-
Adicione outra linha ao arquivo
src/i18n/ui.ts
para ativar o recurso: -
Adicione uma função auxiliar ao arquivo
src/i18n/utils.ts
, para traduzir caminhos baseado na língua atual: -
Importe o auxiliador onde for necessário. Por exemplo, um componente
nav
pode ficar assim: -
A função auxiliar também pode ser usada para traduzir caminhos para uma língua específica. Por exemplo, quando os usuários alternam entre línguas:
Traduzir rotas
Seção intitulada Traduzir rotasTraduza as rotas das suas páginas para cada língua.
-
Adicione mapeamento de rotas no arquivo
src/i18n/ui.ts
: -
Atualize a função auxiliar
usarCaminhoTraduzido
no arquivosrc/i18n/utils.ts
para adicionar a lógica de tradução de roteamento. -
Crie uma função auxiliar para obter a rota, se ela existir baseada na URL atual, em
src/i18n/utils.ts
: -
A função auxiliar pode ser usada para obter uma rota traduzida. Por exemplo, quando nenhuma rota traduzida é definida, o usuário será redirecionado para sua página inicial:
Recursos
Seção intitulada RecursosBibliotecas da comunidade
Seção intitulada Bibliotecas da comunidade- astro-i18next — Uma integração Astro para i18next incluindo alguns componentes utilitários.
- astro-i18n — Uma biblioteca de internacionalização focada em TypeScript para Astro.
- astro-i18n-aut — Uma integração Astro para i18n que suporta
defaultLocale
sem geração de páginas. A integração é agnóstica a adaptadores e frameworks de UI. - paraglide — Uma biblioteca i18n com completa segurança de tipagem projetada especificamente para padrões de hidratação parcial como ilhas Astro.