From acfca90836595cec44f2d420c279fd7beb191b56 Mon Sep 17 00:00:00 2001 From: Christian Date: Thu, 15 Oct 2026 15:17:15 -0400 Subject: [PATCH] The English switch did nothing, so English could not be turned off MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Build 125. Reported from the desk: every language on the listener page can be switched off except English. Exactly right, and it was not subtle. renderFeatured() unshifted the SOURCE language into the list on every render, whatever the operator had chosen: if (list.indexOf(app.cfg.sourceLanguage) === -1) list.unshift(app.cfg.sourceLanguage); So English was not merely on, it was always FIRST — the leading button on the page — on a desk whose saved list was ["spa_Latn","por_Latn","por_PT","spa_ES"] with English deliberately off and allowAll false. The operator had turned it off, the config recorded that it was off, and the page put it back anyway. The reasoning behind it was sound: people do want the English captions for accessibility rather than translation. But that is a choice for the desk, not for this function, and the switch to make it is already there in Settings next to every other language. English is in the catalogue (languages.js:19) and the operator window reads that same file, so turning it back on is one click. A control that silently refuses is worse than no control. The operator's list is now the list. Co-Authored-By: Claude Opus 5 --- app/package.json | 4 ++-- app/server/public/listen.js | 17 ++++++++++++++--- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/app/package.json b/app/package.json index 1355148..0c4e598 100644 --- a/app/package.json +++ b/app/package.json @@ -2,7 +2,7 @@ "name": "church-translate-engine", "productName": "Church Translate", "version": "3.23.2", - "buildNumber": 124, + "buildNumber": 125, "private": true, "description": "Live sermon translation — self-contained: captures audio, transcribes, translates, and serves the congregation page itself", "main": "main.js", @@ -106,7 +106,7 @@ ] }, "asar": false, - "buildVersion": "124", + "buildVersion": "125", "win": { "target": [ { diff --git a/app/server/public/listen.js b/app/server/public/listen.js index f99de3f..48c6007 100644 --- a/app/server/public/listen.js +++ b/app/server/public/listen.js @@ -163,10 +163,21 @@ function renderFeatured() { var wrap = $('featured'); wrap.textContent = ''; + /* + * THE OPERATOR'S LIST IS THE LIST. This used to unshift the source + * language in unconditionally, on the reasoning that plenty of people want + * the English captions for accessibility rather than translation — which + * is true, and still available, but it is not this code's call to make. + * The operator has a switch for every language including English, and for + * the source language alone that switch did nothing: English was put back + * on every render, so a desk that had deliberately turned it off still + * offered it as the first button on the page. A control that silently + * refuses is worse than no control. + * + * Wanting English captions is now one click in Settings, in the same list + * as every other language, and it stays where it is put. + */ var list = (app.cfg.featured || []).slice(); - /* The source language belongs in the list too — plenty of people want the - English captions for accessibility, not translation. */ - if (list.indexOf(app.cfg.sourceLanguage) === -1) list.unshift(app.cfg.sourceLanguage); list.forEach(function (code) { var b = langButton(code); if (b) wrap.appendChild(b);