Projetos de exemplo

Mike ShulgaEngenheiroUpdated há 2 meses · 4 min read

Cada exemplo abaixo é um repositório real com .lingo/config.json registado e traduções já preparadas, para que possa consultar a configuração ao lado do resultado que gerou. A maioria são aplicações que pode executar; alguns existem apenas para mostrar um formato de ficheiro isoladamente. Clone ou crie um fork de um deles, execute lingo link para associar o seu próprio motor e faça push.

Escolha primeiro a abordagem#

Há duas formas de localizar com a CLI, e é isso que determina quais os exemplos relevantes para si.

Traduza os ficheiros que já tem. A sua framework guarda as traduções no seu próprio formato — Rails YAML, Android XML, Laravel PHP, ARB, Markdown — e a CLI traduz esses ficheiros no local. Nada no seu código muda. É o caso de nove dos onze exemplos abaixo.

Escreva sem chaves. Envolve as strings em l.text(...) onde aparecem, o lingo extract gera por si um catálogo indexado por hash, e deixa de haver chaves de tradução para dar nome ou manter. Isto implica uma etapa de build e um pacote de runtime, e é isso que mostram os dois exemplos de aplicações web.

Aplicações móveis#

ExemploFormatoPorque escolher este
iOSxcode-xcstringsUm Catálogo de Strings inclui todos os idiomas, por isso o caminho de destino é o mesmo que o caminho de origem.
Androidandroidvalues/ simples como origem, com os próprios qualificadores do Android (values-pt-rBR/)
FlutterflutterMetadados de @ e placeholders ICU preservados, @@locale reescrito em cada ficheiro

Aplicações web#

Os dois exemplos sem chaves. Ambos envolvem as strings com l.text(...) e geram o respetivo catálogo com lingo extract, por isso a coluna do meio indica o pacote de runtime em vez de um formato de ficheiro.

ExemploPacotePorque escolher este
React + Vite@lingo.dev/reactCriação sem chaves; as declarações geradas restringem l.text() às strings extraídas
Next.js@lingo.dev/react-nextCriação sem chaves, mais routing por idioma, hreflang e um seletor — Pages Router

hreflang em produção

LingoHead constrói os URLs hreflang a partir de uma prop baseUrl que, por omissão, é vazia, por isso as tags são relativas out of the box. Os motores de busca esperam URLs absolutos — passa a origem do teu site (<LingoHead baseUrl="https://example.com" />) antes de confiares nelas.

Conteúdo e especificações#

ExemploFormatoPorque escolher este
Documentação em Markdownmd, mdxProsa por predefinição, com campos de frontmatter e props de MDX incluídos opcionalmente
Markdocmarkdoc, jsonConteúdo em Next.js e strings da interface num único push — três entradas, com opções diferentes em cada uma
OpenAPIyaml-openapiApenas resumos e descrições; paths, operation IDs e enums mantêm-se intocados

Catálogos de frameworks#

ExemploFormatoPorque escolher este
Railsyaml-root-keyO idioma é a chave de raiz do YAML, por isso a própria chave de raiz é reescrita
Laravelphp, poCatálogos do Laravel mais um ficheiro gettext; placeholders :name preservados em ambos
Módulos TypeScripttypescriptCatálogos como módulos TypeScript em vez de JSON. Apenas o formato — nenhuma aplicação os utiliza

Os catálogos TypeScript precisam de um default export

O formato typescript lê uma exportação defaultexport default { … }, com ou sem as const. Uma exportação com nome não produz conteúdo traduzível, e a execução termina depois de copiar o código-fonte tal como está. Por isso, se um push indicar ficheiros localizados mas praticamente zero tokens de saída, verifica primeiro a forma da exportação.

Como usar um destes exemplos#

bash
npm install -g @lingo.dev/cli
lingo login
lingo link          # writes your own orgId and engineId into .lingo/config.json
lingo push --wait

Nenhum dos exemplos regista no repositório orgId nem engineId — assim evita-se que um fork faça push através do motor de outra pessoa. lingo link preenche ambos localmente.

Se preferir a GitHub App ao CLI

A GitHub AppengineId a partir do .lingo/config.json comitado no teu repositório — a organização é resolvida a partir da própria instalação da App, mas o motor tem de estar no ficheiro. Depois de fazeres fork, executa lingo link e faz commit da configuração atualizada antes de instalares a App.

Nem todos os formatos têm exemplo#

Estes onze cobrem os frameworks sobre os quais as pessoas mais perguntam, mas a CLI traduz dezoito formatos. xliff, srt, Xcode .strings e .stringsdict, yaml genérico e JSON/JSONC autónomo funcionam todos sem ser preciso haver aqui um repositório — vê Formats para a lista completa e a configuração de que cada um precisa.

Próximos passos#