i18n - Tutorial
Esse tutorial o guiará pelo sistema Docusaurus i18n.
Nós iremos adicionar traduções de francês a um recém-inicializado site em Inglês Docusaurus.
Inicialize um novo site com npx @docusaurus/init@latest init website classic (como esse).
Configure seu site#
Modifique o docusaurus.config.js para adicionar o suporte do i18n para a língua francesa.
Configuração do site#
Use a configuração i18n do site para declarar as localidades i18n:
module.exports = { i18n: { defaultLocale: 'en', locales: ['en', 'fr'], },};Configuração do tema#
Adicione um item da barra de navegação do tipo localeDropdown para que os usuários possam selecionar a localidade que quiserem:
module.exports = { themeConfig: { navbar: { items: [ { type: 'localeDropdown', position: 'left', }, ], }, },};Iniciar seu site#
Inicie seu site localizado no modo de desenvolvimento, usando a localidade de sua escolha:
- npm
- Yarn
npm run start -- --locale fryarn run start -- --locale frSeu site está acessível em http://localhost:3000/fr/.
Não fornecemos nenhuma tradução e o site é na sua maioria não traduzido.
tip
O Docusaurus fornece traduções padrão para nomes genéricos de temas, tais como "Próximo" e "Anterior" para a paginação.
Por favor, ajude-nos a completar as traduções padrão.
caution
Cada local é uma single-page-application autônoma distinta: não é possível iniciar os sites Docusaurus em todos os locais ao mesmo tempo.
Traduzir o seu site#
As traduções francesas serão adicionadas no website/i18n/fr.
Docusaurus é modular e cada plugin de conteúdo tem sua própria subpasta.
note
Depois de copiar os arquivos, reinicie seu site com npm run start - --locale fr.
O hot-reload funcionará melhor ao editar arquivos existentes.
Use as APIs de tradução#
Abra a página inicial e use as APIs de tradução:
import React from 'react';import Layout from '@theme/Layout';import Link from '@docusaurus/Link';
import Translate, {translate} from '@docusaurus/Translate';
export default function Home() { return ( <Layout> <h1> <Translate>Welcome to my website</Translate> </h1> <main> <Translate id="homepage.visitMyBlog" description="The homepage message to ask the user to visit my blog" values={{blog: <Link to="https://docusaurus.io/blog">blog</Link>}}> {'You can also visit my {blog}'} </Translate>
<input type="text" placeholder={ translate({ message: 'Hello', description: 'The homepage input placeholder', }) } /> </main> </Layout> );}caution
Docusaurus fornece um tempo de execução de tradução muito baixo e leve propositalmente e só oferece suporte a interpolação de marcadores de posição, usando um subconjunto do Formato de mensagem ICU.
A maioria dos sites de documentação são geralmente estáticos e não precisam de recursos i18n avançados (plurais, gêneros, etc.). Use uma biblioteca como react-intl para casos de uso mais avançados.
Traduzir arquivos JSON#
Os arquivos de tradução JSON são usados para tudo o que não está contido em um documento Markdown:
- Código React/JSX
- Layout da barra de navegação e rótulos de rodapé
- Rótulos de categoria da barra lateral do Documentos
- ...
Execute o comando write-translations:
- npm
- Yarn
npm run write-translations -- --locale fryarn run write-translations -- --locale frEle irá extrair e inicializar os arquivos de tradução JSON que você precisa traduzir.
As traduções da página inicial são extraídas estaticamente do código fonte do React:
{ "Welcome to my website": { "message": "Welcome to my website", "description": "The homepage welcome message" }, "Hello": { "message": "Hello", "description": "The homepage input placeholder" }}Plugins e temas também escreverão seus próprios arquivos de tradução JSON, tais como:
{ "title": { "message": "My Site", "description": "The title in the navbar" }, "item.label.Docs": { "message": "Docs", "description": "Navbar item with label Docs" }, "item.label.Blog": { "message": "Blog", "description": "Navbar item with label Blog" }, "item.label.GitHub": { "message": "GitHub", "description": "Navbar item with label GitHub" }}Traduza o atributomensagem nos arquivos JSON de i18n/fr, e o layout do seu site e a página inicial agora devem ser traduzidos.
Traduzir arquivos Markdown#
Os plug-ins de conteúdo oficial do Docusaurus usam extensivamente arquivos Markdown/MDX e permitem que você os traduza.
Traduzir os documentos#
Copie seus arquivos Markdown de documentos para i18n/fr/docusaurus-plugin-content-docs/current e traduza-os:
mkdir -p i18n/fr/docusaurus-plugin-content-docs/currentcp -r docs/** i18n/fr/docusaurus-plugin-content-docs/currentinfo
current é necessário para o recurso de versionamento de documentos: cada versão de documentos tem sua própria subpasta.
Traduzir o blog#
Copie os arquivos Markdown do seu blog para i18n/fr/docusaurus-plugin-content-blog e traduza-os:
mkdir -p i18n/fr/docusaurus-plugin-content-blogcp -r blog/** i18n/fr/docusaurus-plugin-content-blogTraduzir as páginas#
Copie os arquivos Markdown de suas páginas para i18n/fr/docusaurus-plugin-content-pages e traduza:
mkdir -p i18n/fr/docusaurus-plugin-content-pagescp -r src/pages/**.md i18n/fr/docusaurus-plugin-content-pagescp -r src/pages/**.mdx i18n/fr/docusaurus-plugin-content-pagescaution
Nós apenas copiamos os arquivos .md e .mdx, pois os componentes React das páginas já foram traduzidos por meio de arquivos de tradução JSON.
Use ids de cabeçalho explícitos#
Por padrão, um título do Markdown ### Hello World terá um id gerado hello-world.
Outros documentos podem se referenciar a ele com [link](#hello-world).
O título traduzido se torna ### Bonjour le Monde, com id bonjour-le-monde.
Os ids gerados nem sempre são adequados para sites localizados, pois exigem que você localize todos os links âncora:
- [link](#hello-world).+ [link](#bonjour-le-monde)tip
Para sites localizados, é recomendado usar ids de cabeçalho explícitos.
Deploy do seu site#
Você pode escolher em fazer deploy do seu site em um domínio único ou usar múltiplos (sub)domínios.
Implementação de um domínio#
Execute o seguinte comando:
- npm
- Yarn
npm run buildyarn run buildO Docusaurus irá construir uma aplicação única por localidade:
website/build: por padrão, língua inglesawebsite/build/fr: para o idioma francês
Agora você pode fazer deploy e build na solução de hospedagem estática de sua escolha.
note
O site Docusaurus v2 usa essa estratégia:
tip
Provedores de hospedagem estáticos geralmente redireciona /unknown/urls para /404.html por convenção, mostrando sempre uma página em inglês 404.
Localize suas páginas 404 configurando seu host para redirecionar /fr/* para /fr/404.html.
Isso nem sempre é possível e depende do seu host: as páginas do GitHub não podem fazer isso, [Netlify](https://docs.netlify.com/routing/redirects/redirect-options/#custom-404-page- manipulação) pode.
Deploy multi-domínio#
Você também pode criar seu site para uma única localidade:
- npm
- Yarn
npm run build -- --locale fryarn run build -- --locale frO Docusaurus não adicionará o prefixo URL /fr/.
No seu provedor de hospedagem estática:
- crie uma implantação por localidade
- configure o comando de compilação apropriado, usando a opção
--locale - configure o (sub)domínio de sua escolha para cada implantação
caution
Essa estratégia não é possível com as páginas do Github, pois só é possível ter uma única implantação.
Híbrido#
É possível ter alguns locais usando subcaminhos e outros usando subdomínios.
Também é possível implantar cada local como um subdomínio separado, montar os subdomínios em um único domínio unificado no nível de CDN:
- Fazer deploy do seu site como
fr.docusaurus.io - Configure um CDN para servi-lo a partir de
docusaurus.io/fr