- Expediere
- 10 mai 2026 la 04:33 UTC
- Autor
- Kamo
- Comite
- c0a87b7
Două moduri de eșec au fost imposibil de distins în răspuns, astfel încât scenariul nu le-a putut spune în afară și a păstrat "traduce" aceleași chei pentru limba engleză pe fiecare rula de sincronizare, cu subgrupe aleatoare reușind din cauza care exact LibreTraducere cerere sa întâmplat să aterizeze în timpul unei reporniri lucrător: 1. Furnizor eroare (Timeout, 5xx, conexiune refuzată la jumătatea repornirii) 2. Furnizorul a reușit, dar a returnat sursa neschimbat (legit "nu" traducere necesară" Amândoi au ajuns să scriem sursa ca traducere. Modificări: *LibreTranslateProvider / BergamotProvider: 3 încercări cu 1s/3s backoff pentru eșecuri tranzitorii (5xx, 429, timeout, conexiune erori); 4xx (non-429) se propagă imediat, deoarece reîncercarea a Cererea malformată nu va ajuta niciodată. Pauză de cerere de apel = 30 de ani. Aruncă pe retry epuizare în loc de a returna textul sursă. * FurnizorRouter: acum distinge "fiecare furnizor de sprijin eroare" (aruncare) de la "cel puțin unul a reușit, dar a returnat sursa" (legitimă passthrough Fără suport neschimbat. Nu-ţi face griji. capturi cu excepții per cheie; le colectează într-o nouă listă de chei eșuate pe răspunsul, și omite chei eșuate din mesaje. * LotTranslateResponse: adaugă câmpul Keys eșuat. * traduce.ts: citește chei eșuate, nu scrie aceste chei înapoi, așa apitranslated[cheie] ?? existând [cheie] Fallback lasă anterior Valoarea în limba engleză în loc cur==enVal și re-queues exact acele chei pentru retry. Teste: teste de regresie adăugate pentru "toți furnizorii aruncări greșite," "la cel puțin unul a reușit cu text neschimbat returnează textul," "router cădere pe eroarea primară tranzitorie" și TranslationService partiție corectă în mesaje vs chei eșuate.