Modos de build

Max PrilutskiyCEO e cofundadorAtualizado em: há 7 meses · 3 min de leitura

Alpha

O Compiler da Lingo.dev está em alpha. Ele é instável, não é recomendado para uso em produção e as APIs podem mudar entre releases.

O Compiler da Lingo.dev opera em dois modos de build que determinam se novas traduções serão geradas durante o build. Entender esses modos é essencial para configurar um pipeline confiável de desenvolvimento, CI e produção.

Os dois modos#

ModoComportamentoQuando usar
"translate"Gera traduções ausentes chamando o provedor de LLM configurado. Traduções em cache são reutilizadas.Desenvolvimento e CI — quando textos novos ou alterados precisam ser traduzidos.
"cache-only"Usa apenas as traduções de .lingo/metadata.json. Falha se alguma tradução estiver ausente.Builds de produção — saída determinística, sem chamadas externas de API.

Como o modo translate funciona#

No modo translate, o Compiler verifica cada string traduzível em relação a .lingo/metadata.json. Se já existir uma tradução em cache e o texto-fonte não tiver mudado, a versão em cache será usada. Se a string for nova ou tiver sido modificada, o Compiler chama o provedor de tradução configurado para gerar uma tradução e atualiza o cache.

ts
{
  buildMode: "translate",
}

Este é o modo padrão. Ele funciona tanto com o pseudotradutor (para traduções fictícias instantâneas) quanto com provedores reais de LLM.

Como o modo cache-only funciona#

No modo cache-only, o Compiler lê as traduções exclusivamente de .lingo/metadata.json. Nenhuma chamada à LLM é feita. Se qualquer string traduzível estiver ausente no cache, o build falhará com um erro listando as strings ausentes.

.lingo/metadata.json precisa ser commitado no controle de versão. Os builds de produção no modo cache-only dependem de esse arquivo estar presente no repositório — não apenas de ter sido gerado localmente.

ts
{
  buildMode: "cache-only",
}

Este modo produz builds determinísticos — o mesmo código-fonte e cache sempre geram a mesma saída. Ele também elimina dependências de APIs externas durante builds de produção.

workflow recomendado#

1

Desenvolvimento — pseudotradutor

Ative o pseudotradutor para ter feedback instantâneo, sem chamadas de API:

ts
{
  buildMode: "translate",
  dev: {
    usePseudotranslator: true,
  },
}

As pseudotraduções aparecem como [!!! Welcome !!!], facilitando identificar strings não traduzidas e testar o layout com diferentes comprimentos de texto.

2

CI — modo translate

Execute com buildMode: "translate" e um provedor real de LLM. O job de CI gera traduções para qualquer string nova ou alterada e faz commit do .lingo/metadata.json atualizado de volta no repositório.

bash
# CI environment
LINGO_BUILD_MODE=translate npm run build
3

Produção — modo cache-only

Faça o deploy com buildMode: "cache-only" para usar apenas traduções pré-geradas. Nenhuma chave de API é necessária no ambiente de produção.

bash
# Production environment
LINGO_BUILD_MODE=cache-only npm run build

Substituição por variável de ambiente#

A variável de ambiente LINGO_BUILD_MODE substitui a opção de configuração buildMode. Assim, você pode usar o mesmo arquivo de configuração em diferentes ambientes:

bash
# Override in any environment
LINGO_BUILD_MODE=cache-only npm run build

A variável de ambiente tem precedência sobre o valor definido no arquivo de configuração.

Exemplos de CI#

yaml
# .github/workflows/translate.yml
name: Generate Translations
on:
  push:
    branches: [main]

jobs:
  translate:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - uses: actions/setup-node@v4
        with:
          node-version: 20

      - run: npm ci

      - run: npm run build
        env:
          LINGO_BUILD_MODE: translate
          LINGODOTDEV_API_KEY: ${{ secrets.LINGODOTDEV_API_KEY }}

      - uses: stefanzweifel/git-auto-commit-action@v5
        with:
          commit_message: "chore: update translations"
          file_pattern: ".lingo/metadata.json"

Sempre faça commit de .lingo/metadata.json no controle de versão. Os builds de produção no modo cache-only dependem desse arquivo. Se ele estiver ausente ou incompleto, o build falhará.

Próximos passos#