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#
| Exemplo | Formato | Porque escolher este |
|---|---|---|
| iOS | xcode-xcstrings | Um Catálogo de Strings inclui todos os idiomas, por isso o caminho de destino é o mesmo que o caminho de origem. |
| Android | android | values/ simples como origem, com os próprios qualificadores do Android (values-pt-rBR/) |
| Flutter | flutter | Metadados 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.
| Exemplo | Pacote | Porque escolher este |
|---|---|---|
| React + Vite | @lingo.dev/react | Criação sem chaves; as declarações geradas restringem l.text() às strings extraídas |
| Next.js | @lingo.dev/react-next | Criaçã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#
| Exemplo | Formato | Porque escolher este |
|---|---|---|
| Documentação em Markdown | md, mdx | Prosa por predefinição, com campos de frontmatter e props de MDX incluídos opcionalmente |
| Markdoc | markdoc, json | Conteúdo em Next.js e strings da interface num único push — três entradas, com opções diferentes em cada uma |
| OpenAPI | yaml-openapi | Apenas resumos e descrições; paths, operation IDs e enums mantêm-se intocados |
Catálogos de frameworks#
| Exemplo | Formato | Porque escolher este |
|---|---|---|
| Rails | yaml-root-key | O idioma é a chave de raiz do YAML, por isso a própria chave de raiz é reescrita |
| Laravel | php, po | Catálogos do Laravel mais um ficheiro gettext; placeholders :name preservados em ambos |
| Módulos TypeScript | typescript | Catá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 default — export 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#
npm install -g @lingo.dev/cli
lingo login
lingo link # writes your own orgId and engineId into .lingo/config.json
lingo push --waitNenhum 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 App lê engineId 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.
