Adicione funcionalidades de i18n
Astro não tem suporte integrado a internacionalização (i18n), mas você pode construir a sua própria solução. Nesta receita, você vai aprender como usar as coleções de conteúdo e roteamento dinâmico para fornecer conteúdo em diferentes línguas.
Esse exemplo utiliza cada língua como seu próprio subcaminho, e.x. 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, abaixo tem instruções para ocultar a língua padrão.
Receita
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:Diretóriosrc/
Diretóriopages/
Diretórioen/
- about.astro
- index.astro
Diretóriofr/
- 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
-
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:Diretóriosrc/
Diretóriocontent/
Diretórioblog/
Diretórioen/ Postagens de blog em inglês
- post-1.md
- post-2.md
Diretóriofr/ 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()
para criar uma string legível a partir da data da página. Isso garante que a data e a hora sejam formatadas de acordo com a língua do usuário.
Traduza strings da UI
Criar 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: uma para detectar a língua da página baseado na URL atual, e outra para obter as strings de tradução 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çãouseTranslations
irá 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 as funções onde necessário e use-as 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 os usuários alternem entre línguas
Criar 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
-
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/
:Diretóriosrc/
Diretóriopages/
- about.astro
- index.astro
Diretóriofr/
- about.astro
- index.astro
-
Adicione outra linha ao arquivo
src/i18n/ui.ts
para ativar o recurso: -
Adicione uma função ao arquivo
src/i18n/utils.ts
, para traduzir caminhos baseado na língua atual: -
Importe a função onde for necessário. Por exemplo, um componente
nav
pode ficar assim: -
A função 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
Traduzir as rotas das suas páginas para cada língua.
- Adicione mapeamento de rotas no arquivo
src/i18n/ui.ts
:
- Atualize a função
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
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.