Ir para o conteúdo

Guias

Studio

Os teus catálogos JSON são a base de dados e o git é o histórico. O Studio é uma janela para eles, e é por isso que não pode desalinhar-se do teu código: não é dono de nada.

O que levas

Uma página com todas as mensagens do teu projeto, nos idiomas que marcares, e o estado de cada uma: pronta, em falta, escrita por uma máquina e ninguém a leu, ou parte o teu site. Corriges uma na própria linha onde vive, e a validação corre enquanto escreves.

Da página correm dois comandos. Procurar texto novo lê o teu código e acrescenta o que os teus catálogos não têm. Traduzir o que falta chama o teu fornecedor, por isso mostra-te quantas mensagens e de que idiomas antes de gastar nada, e o que volta fica em rascunho até o teres lido.

Arranca-o

 pnpm add -D @verbaly/studio
npx verbaly-studio

Imprime o endereço que está a servir, o projeto que leu e o que há lá dentro. O endereço leva uma chave cunhada de novo sempre que arranca, por isso mais nada na tua máquina lhe consegue falar adivinhando a porta.

O comando

FlagO que faz
--root <path>Aponta para outro projeto em vez da pasta onde estás
--port <n>Arranca noutro sítio que não 4747; uma porta ocupada sobe para a seguinte livre
--jsonImprime o estado inteiro e sai, sem servidor. É o painel sem o painel: o mesmo objeto que o ecrã vai ler, por isso podes passá-lo por um pipe, compará-lo e metê-lo num script

Nunca mexe no teu texto de origem

O teu texto de origem vive no teu código e a key vem dele, por isso escrever por cima aqui seria desfeito da próxima vez que extraíres. Gravar no teu idioma de origem é recusado, e uma key que o teu catálogo de origem não tem também, porque aceitá-la inventaria uma mensagem que nenhuma linha do teu código pede.

Uma tradução que gravas passa as mesmas duas verificações que o verbaly check faz no teu build, por isso um {name} perdido, uma etiqueta perdida ou um plural sem o caso geral é recusado com o motivo. Gravar também é aceitar: uma tradução escrita por uma pessoa deixa de contar como rascunho de máquina no mesmo gesto.

Os endereços

Todos chamam a mesma função que o CLI chama, por isso não há uma segunda implementação para manter a par. Todos respondem JSON, erros incluídos.

EndereçoO que te dá
GET /api/stateO projeto inteiro numa só resposta: as tuas definições, cada catálogo, onde cada mensagem é usada, a cobertura, o que o gate do build diz, os rascunhos de máquina, a triagem e tudo o que não conseguiu ler
GET /api/healthO mesmo diagnóstico que o verbaly doctor imprime
PUT /api/message/:locale/:keyEscreve uma tradução e deixa de a contar como rascunho
POST /api/approveAceita rascunhos de máquina: uma lista de keys, ou o idioma inteiro de uma vez
POST /api/extractLê o teu código e acrescenta o que os teus catálogos não têm. Responde dentro do próprio pedido, porque é local e não custa nada
GET /api/translateO orçamento: quantas mensagens e de que idiomas, sem chamar o teu fornecedor. Olhar para o custo não pode começar o gasto, e por isso é a sua própria morada
POST /api/translateArranca a tiragem e devolve-te um trabalho. Um de cada vez, porque duas tiragens sobre os mesmos catálogos são uma corrida pelos mesmos ficheiros
GET /api/job/:idComo vai essa tiragem, para perguntar uma vez por segundo
GET /api/jobA tiragem em curso, ou nada. Uma página recarregada perdeu o id, e um trabalho ao qual não podes voltar a perguntar é um stream com passos a mais

O estado vem numa peça de propósito. O maior projeto que conhecemos são 1587 mensagens em três idiomas, e na tua própria máquina isso responde em menos de um terço de segundo.

Nada do que lê o consegue derrubar

Um catálogo que não consegue ler, um ficheiro de rascunhos que não consegue ler, um ficheiro de código que não compila, ou uma pasta sem catálogos lá dentro são avisados pelo nome, ao lado do resto do estado, e tudo o resto carrega na mesma. Isto não é cortesia: o Studio é o que abres para corrigir esses ficheiros, por isso recusar-se a abrir seria exatamente o que o torna inútil.

Que traduções automáticas ler primeiro

Acrescentar um idioma escreve centenas de rascunhos de uma vez, e lê-los um a um é um muro. Os muros são como uma salvaguarda se transforma em algo que as pessoas contornam, por isso o Studio ordena em vez de fazer fila. O gate do build já apanhou a estrutura, por isso o que sobra é o sentido, que nada consegue medir. Estes sinais não pontuam uma tradução, apontam as poucas que merecem os teus olhos.

SinalO que significa
divergentUm idioma que já revistes escreveu este mesmo texto de origem de duas formas diferentes, por isso a própria origem é ambígua
collisionA mesma dúvida vista no resultado, quando nenhum idioma revisto a consegue resolver
echoContinua palavra por palavra igual à origem, enquanto todos os idiomas com opinião a traduziram
digitsUm número que a origem tem voltou alterado, ignorando a vírgula ou o ponto que cada idioma escreve de forma diferente
urlUm link mudou
codeO que está dentro de um span de código mudou

Cada sinal foi medido contra este site antes de sair, e dois mudaram por causa do que a medição disse. Sobre 1479 mensagens reais, o digits lia a vírgula a seguir a um número como parte dele, e assinalava um número que a tradução acrescentava onde a origem não tinha nenhum, que é o que acontece quando "survives a refresh" passa a "sobrevive ao F5". Era absolutamente tudo o que assinalava, e era tudo texto correto. As duas coisas saíram. O resultado são 18 mensagens em 1479 assinaladas por idioma.

Escreve ficheiros, por isso defende-se

Qualquer página aberta no teu browser consegue falar com um servidor a correr na tua máquina, por isso há três defesas ligadas que não se desligam: só escuta na tua própria máquina e nunca na rede; recusa um pedido que diz vir de outro sítio, que é o que impede um site de apontar o próprio nome à tua máquina; e a chave que cunha ao arrancar é comparada de uma forma que não se consegue adivinhar carácter a carácter. Os pedidos têm limite, e o caminho completo do teu projeto é retirado de cada erro antes de o browser o ver.

para navegarEnterpara abrir
Copiado para a área de transferência