feat(news): übersetzter Hinweis auf die englischen Notizen, optisch zurückgenommen
Wer die Oberfläche auf Japanisch stehen hat, sah einen japanischen Rahmen um englische Sätze — das kann man für eine fehlende Übersetzung halten. Ein Satz oben im Popup sagt jetzt, dass es Absicht ist, in allen neun Sprachen; klein und grau, damit er hinter dem Inhalt zurücksteht, zu dem er gehört. Bei englischer Oberfläche entfällt er. SPEC §9 und D58-Nachtrag. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
312f2bf54f
commit
257aab08dd
@@ -4185,3 +4185,20 @@ vollständig im Bild und wird an beiden Kanten getroffen (`elementFromPoint`),
|
|||||||
die Kopfzeile bleibt einreihig. 20 neue Tests in `frontend/tests/news.test.js`,
|
die Kopfzeile bleibt einreihig. 20 neue Tests in `frontend/tests/news.test.js`,
|
||||||
darunter einer, der die **ausgelieferte** `docs/CHANGELOG.md` liest — ist sie
|
darunter einer, der die **ausgelieferte** `docs/CHANGELOG.md` liest — ist sie
|
||||||
unlesbar, stünde das Popup sonst leer da, ohne dass es jemand merkt.
|
unlesbar, stünde das Popup sonst leer da, ohne dass es jemand merkt.
|
||||||
|
|
||||||
|
**Nachtrag — ein übersetzter Hinweis sagt, dass die Notizen englisch sind.**
|
||||||
|
Der Haupttext oben begründet die englischen Notizen und lässt den Betrachter
|
||||||
|
damit allein: Wer die Oberfläche auf Japanisch stehen hat, sieht einen
|
||||||
|
japanischen Rahmen um englische Sätze und kann das für einen Fehler halten —
|
||||||
|
für eine fehlende Übersetzung oder einen kaputten Sprachwechsel. Ein Satz
|
||||||
|
oben im Popup nimmt dem die Spitze: „Diese Übersicht wird leider nur auf
|
||||||
|
Englisch gepflegt", in allen neun Sprachen.
|
||||||
|
|
||||||
|
**Er tritt optisch zurück** (klein, grau, ohne Rahmen und ohne Fläche): Es ist
|
||||||
|
eine Fußnote zum Inhalt, nicht der Inhalt. Der bernsteinfarbene
|
||||||
|
Besuchsvergleich darunter bleibt damit das erste, worauf der Blick fällt.
|
||||||
|
|
||||||
|
**Bei englischer Oberfläche entfällt er** — dort wäre es eine Auskunft über
|
||||||
|
nichts. Der Schlüssel ist trotzdem in allen neun Sprachen angelegt, auch auf
|
||||||
|
Englisch: Ein Loch in der Tabelle lädt dazu ein, beim nächsten Durchsehen für
|
||||||
|
einen Fehler gehalten und „repariert" zu werden.
|
||||||
|
|||||||
+5
-1
@@ -690,7 +690,11 @@ gemerkt.
|
|||||||
Die **Notizen sind englisch**, auch wenn die Oberfläche in einer anderen Sprache
|
Die **Notizen sind englisch**, auch wenn die Oberfläche in einer anderen Sprache
|
||||||
steht: `docs/CHANGELOG.md` ist ein ausgeliefertes Artefakt mit weltweitem
|
steht: `docs/CHANGELOG.md` ist ein ausgeliefertes Artefakt mit weltweitem
|
||||||
Publikum, wie der mitgelieferte Plan und `llms.md` (§13). Übersetzt ist alles
|
Publikum, wie der mitgelieferte Plan und `llms.md` (§13). Übersetzt ist alles
|
||||||
übrige — Titel, Knöpfe und die Datumsangaben. Siehe D58.
|
übrige — Titel, Knöpfe und die Datumsangaben. Damit das nicht wie ein Fehler
|
||||||
|
aussieht, steht **oben im Popup ein übersetzter Hinweis**, dass diese Übersicht
|
||||||
|
nur auf Englisch gepflegt wird; er ist klein und grau gehalten und tritt hinter
|
||||||
|
den Inhalt zurück, zu dem er gehört. Bei englischer Oberfläche entfällt er.
|
||||||
|
Siehe D58.
|
||||||
|
|
||||||
### Sprung zwischen Diagramm und Text
|
### Sprung zwischen Diagramm und Text
|
||||||
Jeder Knoten kennt seine Zeilennummer im Notationstext; beide Richtungen sind
|
Jeder Knoten kennt seine Zeilennummer im Notationstext; beide Richtungen sind
|
||||||
|
|||||||
+16
-1
@@ -1906,6 +1906,7 @@ const I18N = {
|
|||||||
freshTooltip:"Neu in Produktion seit dem letzten Ansehen: {n}.",
|
freshTooltip:"Neu in Produktion seit dem letzten Ansehen: {n}.",
|
||||||
newsTooltip:"Neuigkeiten",
|
newsTooltip:"Neuigkeiten",
|
||||||
newsTitle:"Neuigkeiten",
|
newsTitle:"Neuigkeiten",
|
||||||
|
newsEnglish:"Diese Übersicht wird leider nur auf Englisch gepflegt.",
|
||||||
newsEmpty:"Keine Einträge.",
|
newsEmpty:"Keine Einträge.",
|
||||||
newsUnseen:"Neuigkeiten aus {n} Tagen, die du noch nicht angesehen hast.",
|
newsUnseen:"Neuigkeiten aus {n} Tagen, die du noch nicht angesehen hast.",
|
||||||
newsSince:"Seit deinem letzten Besuch: {n} neu in Produktion.",
|
newsSince:"Seit deinem letzten Besuch: {n} neu in Produktion.",
|
||||||
@@ -2005,6 +2006,7 @@ const I18N = {
|
|||||||
freshTooltip:"New in production since you last looked: {n}.",
|
freshTooltip:"New in production since you last looked: {n}.",
|
||||||
newsTooltip:"What's new",
|
newsTooltip:"What's new",
|
||||||
newsTitle:"What's new",
|
newsTitle:"What's new",
|
||||||
|
newsEnglish:"This overview is only maintained in English.",
|
||||||
newsEmpty:"Nothing recorded.",
|
newsEmpty:"Nothing recorded.",
|
||||||
newsUnseen:"News from {n} days you haven't looked at yet.",
|
newsUnseen:"News from {n} days you haven't looked at yet.",
|
||||||
newsSince:"Since your last visit: {n} new in production.",
|
newsSince:"Since your last visit: {n} new in production.",
|
||||||
@@ -2104,6 +2106,7 @@ const I18N = {
|
|||||||
freshTooltip:"Nuevo en producción desde la última vez: {n}.",
|
freshTooltip:"Nuevo en producción desde la última vez: {n}.",
|
||||||
newsTooltip:"Novedades",
|
newsTooltip:"Novedades",
|
||||||
newsTitle:"Novedades",
|
newsTitle:"Novedades",
|
||||||
|
newsEnglish:"Lamentablemente, este resumen solo se mantiene en inglés.",
|
||||||
newsEmpty:"Sin entradas.",
|
newsEmpty:"Sin entradas.",
|
||||||
newsUnseen:"Novedades de {n} días que aún no has visto.",
|
newsUnseen:"Novedades de {n} días que aún no has visto.",
|
||||||
newsSince:"Desde tu última visita: {n} nuevo en producción.",
|
newsSince:"Desde tu última visita: {n} nuevo en producción.",
|
||||||
@@ -2203,6 +2206,7 @@ const I18N = {
|
|||||||
freshTooltip:"Nouveau en production depuis votre dernière visite : {n}.",
|
freshTooltip:"Nouveau en production depuis votre dernière visite : {n}.",
|
||||||
newsTooltip:"Nouveautés",
|
newsTooltip:"Nouveautés",
|
||||||
newsTitle:"Nouveautés",
|
newsTitle:"Nouveautés",
|
||||||
|
newsEnglish:"Cet aperçu n'est malheureusement tenu à jour qu'en anglais.",
|
||||||
newsEmpty:"Aucune entrée.",
|
newsEmpty:"Aucune entrée.",
|
||||||
newsUnseen:"Nouveautés de {n} jours que vous n'avez pas encore consultées.",
|
newsUnseen:"Nouveautés de {n} jours que vous n'avez pas encore consultées.",
|
||||||
newsSince:"Depuis votre dernière visite : {n} nouveau en production.",
|
newsSince:"Depuis votre dernière visite : {n} nouveau en production.",
|
||||||
@@ -2302,6 +2306,7 @@ const I18N = {
|
|||||||
freshTooltip:"Nowe na produkcji od ostatniego razu: {n}.",
|
freshTooltip:"Nowe na produkcji od ostatniego razu: {n}.",
|
||||||
newsTooltip:"Nowości",
|
newsTooltip:"Nowości",
|
||||||
newsTitle:"Nowości",
|
newsTitle:"Nowości",
|
||||||
|
newsEnglish:"Niestety to zestawienie jest prowadzone tylko po angielsku.",
|
||||||
newsEmpty:"Brak wpisów.",
|
newsEmpty:"Brak wpisów.",
|
||||||
newsUnseen:"Nowości z {n} dni, których jeszcze nie oglądałeś.",
|
newsUnseen:"Nowości z {n} dni, których jeszcze nie oglądałeś.",
|
||||||
newsSince:"Od twojej ostatniej wizyty: {n} nowe na produkcji.",
|
newsSince:"Od twojej ostatniej wizyty: {n} nowe na produkcji.",
|
||||||
@@ -2401,6 +2406,7 @@ const I18N = {
|
|||||||
freshTooltip:"Новое в продакшене с прошлого раза: {n}.",
|
freshTooltip:"Новое в продакшене с прошлого раза: {n}.",
|
||||||
newsTooltip:"Новости",
|
newsTooltip:"Новости",
|
||||||
newsTitle:"Новости",
|
newsTitle:"Новости",
|
||||||
|
newsEnglish:"К сожалению, этот обзор ведётся только на английском языке.",
|
||||||
newsEmpty:"Записей нет.",
|
newsEmpty:"Записей нет.",
|
||||||
newsUnseen:"Новости за {n} дней, которые вы ещё не просматривали.",
|
newsUnseen:"Новости за {n} дней, которые вы ещё не просматривали.",
|
||||||
newsSince:"С вашего последнего визита: {n} новых в продакшене.",
|
newsSince:"С вашего последнего визита: {n} новых в продакшене.",
|
||||||
@@ -2500,6 +2506,7 @@ const I18N = {
|
|||||||
freshTooltip:"पिछली बार से उत्पादन में नया: {n}।",
|
freshTooltip:"पिछली बार से उत्पादन में नया: {n}।",
|
||||||
newsTooltip:"नया क्या है",
|
newsTooltip:"नया क्या है",
|
||||||
newsTitle:"नया क्या है",
|
newsTitle:"नया क्या है",
|
||||||
|
newsEnglish:"खेद है, यह विवरण केवल अंग्रेज़ी में ही रखा जाता है।",
|
||||||
newsEmpty:"कोई प्रविष्टि नहीं।",
|
newsEmpty:"कोई प्रविष्टि नहीं।",
|
||||||
newsUnseen:"{n} दिनों की खबरें, जो आपने अभी तक नहीं देखीं।",
|
newsUnseen:"{n} दिनों की खबरें, जो आपने अभी तक नहीं देखीं।",
|
||||||
newsSince:"आपकी पिछली यात्रा से: {n} उत्पादन में नए।",
|
newsSince:"आपकी पिछली यात्रा से: {n} उत्पादन में नए।",
|
||||||
@@ -2599,6 +2606,7 @@ const I18N = {
|
|||||||
freshTooltip:"自上次查看以来新上线:{n}。",
|
freshTooltip:"自上次查看以来新上线:{n}。",
|
||||||
newsTooltip:"最新动态",
|
newsTooltip:"最新动态",
|
||||||
newsTitle:"最新动态",
|
newsTitle:"最新动态",
|
||||||
|
newsEnglish:"很抱歉,此更新列表仅以英文维护。",
|
||||||
newsEmpty:"暂无记录。",
|
newsEmpty:"暂无记录。",
|
||||||
newsUnseen:"有 {n} 天的动态你还没有看过。",
|
newsUnseen:"有 {n} 天的动态你还没有看过。",
|
||||||
newsSince:"自你上次访问以来:{n} 项新上线。",
|
newsSince:"自你上次访问以来:{n} 项新上线。",
|
||||||
@@ -2698,6 +2706,7 @@ const I18N = {
|
|||||||
freshTooltip:"前回以降に本番化されたもの:{n} 件。",
|
freshTooltip:"前回以降に本番化されたもの:{n} 件。",
|
||||||
newsTooltip:"更新情報",
|
newsTooltip:"更新情報",
|
||||||
newsTitle:"更新情報",
|
newsTitle:"更新情報",
|
||||||
|
newsEnglish:"申し訳ありませんが、この一覧は英語でのみ更新されます。",
|
||||||
newsEmpty:"項目はありません。",
|
newsEmpty:"項目はありません。",
|
||||||
newsUnseen:"まだ見ていない {n} 日分の更新があります。",
|
newsUnseen:"まだ見ていない {n} 日分の更新があります。",
|
||||||
newsSince:"前回の訪問以降:{n} 件が本番化されました。",
|
newsSince:"前回の訪問以降:{n} 件が本番化されました。",
|
||||||
@@ -3333,6 +3342,12 @@ function updateFreshBtn(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
function renderNewsMenu(){
|
function renderNewsMenu(){
|
||||||
|
/* Die Notizen sind englisch (D58) — wer die Oberfläche auf Japanisch stehen
|
||||||
|
hat, soll wissen, dass das Absicht ist und kein Fehler. Nicht für
|
||||||
|
englische Oberflächen: Dort wäre es eine Auskunft über nichts. Und optisch
|
||||||
|
zurückgenommen — es ist eine Fußnote zum Inhalt, nicht der Inhalt. */
|
||||||
|
const hinweis = (lang !== 'en' && NEWS.length)
|
||||||
|
? `<div class="newsnote">${esc(t('newsEnglish'))}</div>` : '';
|
||||||
const seit = (!newsKeySet && freshDocId === activeId && freshSet.size)
|
const seit = (!newsKeySet && freshDocId === activeId && freshSet.size)
|
||||||
? `<div class="newssince"><span>${esc(t('newsSince', {n: freshSet.size}))}</span>`
|
? `<div class="newssince"><span>${esc(t('newsSince', {n: freshSet.size}))}</span>`
|
||||||
+ `<button type="button" class="newsseen" id="newsSeenBtn">${esc(t('newsSeen'))}</button></div>`
|
+ `<button type="button" class="newsseen" id="newsSeenBtn">${esc(t('newsSeen'))}</button></div>`
|
||||||
@@ -3358,7 +3373,7 @@ function renderNewsMenu(){
|
|||||||
newsMenu.innerHTML = `<div class="newshead"><span>${esc(t('newsTitle'))}</span>`
|
newsMenu.innerHTML = `<div class="newshead"><span>${esc(t('newsTitle'))}</span>`
|
||||||
+ `<button type="button" class="newsclose" id="newsCloseBtn"`
|
+ `<button type="button" class="newsclose" id="newsCloseBtn"`
|
||||||
+ ` title="${esc(t('tipClose'))}" aria-label="${esc(t('tipClose'))}">×</button></div>`
|
+ ` title="${esc(t('tipClose'))}" aria-label="${esc(t('tipClose'))}">×</button></div>`
|
||||||
+ seit + (tage || `<div class="newsempty">${esc(t('newsEmpty'))}</div>`);
|
+ hinweis + seit + (tage || `<div class="newsempty">${esc(t('newsEmpty'))}</div>`);
|
||||||
}
|
}
|
||||||
function openNewsMenu(){
|
function openNewsMenu(){
|
||||||
renderNewsMenu();
|
renderNewsMenu();
|
||||||
|
|||||||
@@ -115,6 +115,10 @@
|
|||||||
color:var(--muted);font-size:1rem;line-height:1;padding:2px 4px;border-radius:6px;
|
color:var(--muted);font-size:1rem;line-height:1;padding:2px 4px;border-radius:6px;
|
||||||
}
|
}
|
||||||
.newshead .newsclose:hover{color:var(--ink);background:rgba(36,52,71,.07)}
|
.newshead .newsclose:hover{color:var(--ink);background:rgba(36,52,71,.07)}
|
||||||
|
/* Fußnote zur Sprache der Notizen (D58-Nachtrag): klein, grau, ohne Rahmen
|
||||||
|
und ohne Fläche — sie soll gelesen werden können, aber hinter dem Inhalt
|
||||||
|
zurückstehen, zu dem sie gehört. */
|
||||||
|
.newsnote{margin-top:7px;color:var(--muted);font-size:.73rem;line-height:1.45}
|
||||||
/* „Seit deinem letzten Besuch" (D28) — die persönliche Hälfte, deshalb
|
/* „Seit deinem letzten Besuch" (D28) — die persönliche Hälfte, deshalb
|
||||||
bernstein abgesetzt und oben, vor der allgemeinen Chronik. */
|
bernstein abgesetzt und oben, vor der allgemeinen Chronik. */
|
||||||
.newssince{
|
.newssince{
|
||||||
|
|||||||
Reference in New Issue
Block a user