fix: translation-coverage zählt nur übersetzbare Zeilen als fehlend
Leere Hüllen-Zeilen (in allen Sprachen leer, z.B. word-Typ-Statements ohne Satztext) wurden als fehlend gezählt, obwohl translate-missing sie mangels Quelltext nie anrührt. Dadurch zeigte die UI viele offene Übersetzungen, der Button meldete aber 'Fertig: 0 übersetzt'. total/missing basieren jetzt auf dem übersetzbaren Bestand (Text in mind. einer Sprache). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -360,10 +360,18 @@ router.get('/translation-coverage', async (req, res, next) => {
|
|||||||
// Eine Zeile zählt als "in Sprache vorhanden", wenn ALLE konfigurierten Felder gefüllt sind.
|
// Eine Zeile zählt als "in Sprache vorhanden", wenn ALLE konfigurierten Felder gefüllt sind.
|
||||||
// (für statements: pos+neg — wir nehmen einfach pos als Haupt-Indikator, neg ist optional)
|
// (für statements: pos+neg — wir nehmen einfach pos als Haupt-Indikator, neg ist optional)
|
||||||
const mainField = cfg.fields[0];
|
const mainField = cfg.fields[0];
|
||||||
|
const filled = (l) => `(${mainField}_${l} IS NOT NULL AND ${mainField}_${l} <> '')`;
|
||||||
for (const lang of LANGS) {
|
for (const lang of LANGS) {
|
||||||
const totalRow = (await query(`SELECT COUNT(*)::int AS c FROM ${table}`)).rows[0];
|
// total = nur Zeilen mit Text in mind. EINER Sprache (übersetzbarer Bestand).
|
||||||
|
// Leere Hüllen-Zeilen (in allen Sprachen leer) zählen nicht als "fehlend",
|
||||||
|
// weil sie keine Quelle zum Übersetzen haben (sonst zeigt die UI Zeilen an,
|
||||||
|
// die translate-missing niemals anrühren kann → "0 übersetzt" bei "viele offen").
|
||||||
|
const sourceCond = LANGS.map(filled).join(' OR ');
|
||||||
|
const totalRow = (await query(
|
||||||
|
`SELECT COUNT(*)::int AS c FROM ${table} WHERE ${sourceCond}`
|
||||||
|
)).rows[0];
|
||||||
const haveRow = (await query(
|
const haveRow = (await query(
|
||||||
`SELECT COUNT(*)::int AS c FROM ${table} WHERE ${mainField}_${lang} IS NOT NULL AND ${mainField}_${lang} <> ''`
|
`SELECT COUNT(*)::int AS c FROM ${table} WHERE ${filled(lang)}`
|
||||||
)).rows[0];
|
)).rows[0];
|
||||||
coverage.push({ source_table: table, language: lang, total: totalRow.c, have: haveRow.c, missing: totalRow.c - haveRow.c });
|
coverage.push({ source_table: table, language: lang, total: totalRow.c, have: haveRow.c, missing: totalRow.c - haveRow.c });
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user