From 6ce29b132dba495b15ba59e81f8b97e05f16b296 Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Mon, 25 May 2026 09:32:40 -0400 Subject: [PATCH 01/20] Fix error in bussproofs en.json --- ts/input/tex/bussproofs/__locales__/en.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ts/input/tex/bussproofs/__locales__/en.json b/ts/input/tex/bussproofs/__locales__/en.json index 4f38c28d7..c5ba4ceb6 100644 --- a/ts/input/tex/bussproofs/__locales__/en.json +++ b/ts/input/tex/bussproofs/__locales__/en.json @@ -4,5 +4,5 @@ "IllegalProofCommand": "Proof commands only allowed in prooftree environment.", "IllegalUseOfCommand": "Use of %1 does not match its definition.", "MissingProofCommand": "Missing %1 in %2.", - "RequiresOutputJax": "The bussproofs extension requires an output jax with a getBBox() method"; + "RequiresOutputJax": "The bussproofs extension requires an output jax with a getBBox() method" } From b0c5677fdf3aeeabdaf709b4e2fead53e0fc0b3e Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Mon, 25 May 2026 11:02:18 -0400 Subject: [PATCH 02/20] Update menu localization IDs (as per our developers' meeting) and sort them --- ts/a11y/speech/SpeechMenu.ts | 10 ++--- ts/ui/menu/Menu.ts | 44 ++++++++++---------- ts/ui/menu/__locales__/de.json | 73 ++++++++++++++-------------------- ts/ui/menu/__locales__/en.json | 71 ++++++++++++++------------------- 4 files changed, 86 insertions(+), 112 deletions(-) diff --git a/ts/a11y/speech/SpeechMenu.ts b/ts/a11y/speech/SpeechMenu.ts index 5a19f96c7..30f1fd2ae 100644 --- a/ts/a11y/speech/SpeechMenu.ts +++ b/ts/a11y/speech/SpeechMenu.ts @@ -128,7 +128,7 @@ function csSelectionBox(menu: MJContextMenu, locale: string): object { }); } const sb = new SelectionDialog( - localize('ClearspeakTitle'), + localize('.Clearspeak/Title'), '', items, SelectionOrder.ALPHABETICAL, @@ -138,7 +138,7 @@ function csSelectionBox(menu: MJContextMenu, locale: string): object { return { type: 'command', id: 'ClearspeakPreferences', - content: localize('SelectPrefs'), + content: localize('.Clearspeak/SelectPrefs'), action: () => sb.post(), }; } @@ -160,13 +160,13 @@ function basePreferences(previous: string): object[] { const items = [ { type: 'radio', - content: localize('NoPrefs'), + content: localize('.Clearspeak/NoPrefs'), id: 'clearspeak-default', variable: 'speechRules', }, { type: 'radio', - content: localize('CurrentPrefs'), + content: localize('.Clearspeak/CurrentPrefs'), id: 'clearspeak-' + previous, variable: 'speechRules', }, @@ -192,7 +192,7 @@ function smartPreferences( ): object[] { const loc = localePreferences.get(locale); const items = [ - { type: 'label', content: localize('PrefsFor', smart) }, + { type: 'label', content: localize('.Clearspeak/PrefsFor', smart) }, { type: 'rule' }, ]; return items.concat( diff --git a/ts/ui/menu/Menu.ts b/ts/ui/menu/Menu.ts index d6e4a8d89..6b784875e 100644 --- a/ts/ui/menu/Menu.ts +++ b/ts/ui/menu/Menu.ts @@ -315,17 +315,17 @@ export class Menu { // lines.push( localize( - 'InputJax', + '.About/InputJax', this.document.inputJax.map((jax) => jax.name).join(', ') ), - localize('OutputJax', this.document.outputJax.name), - localize('DocType', this.document.kind) + localize('.About/OutputJax', this.document.outputJax.name), + localize('.About/DocType', this.document.kind) ); // // Add the loaded packages and their versions // if (MathJax && MathJax.loader) { - lines.push('
' + localize('Modules')); + lines.push('
' + localize('.About/Modules')); const Package = MathJax._.components.package.Package; const versions = (MathJax as any).loader.versions; for (const name of Array.from(Package.packages.keys()).sort( @@ -406,8 +406,8 @@ export class Menu { */ protected help() { InfoDialog.post({ - title: localize('HelpTitle'), - message: localize('HelpMessage'), + title: localize('.Help/Title'), + message: localize('.Help/Message'), adaptor: this.document.adaptor, extraNodes: [ this.document.adaptor.node( @@ -424,7 +424,7 @@ export class Menu { */ protected mathMLCode() { CopyDialog.post({ - title: localize('MmlTitle'), + title: localize('.Mml/Title'), message: this.menu.mathItem ? this.toMML(this.menu.mathItem) : '', adaptor: this.document.adaptor, code: true, @@ -436,7 +436,7 @@ export class Menu { */ protected originalText() { CopyDialog.post({ - title: localize('SourceTitle'), + title: localize('.Source/Title'), message: this.menu.mathItem?.math ?? '', adaptor: this.document.adaptor, code: true, @@ -448,7 +448,7 @@ export class Menu { */ protected annotationBox() { CopyDialog.post({ - title: localize('AnnotationTitle'), + title: localize('.Annotation/Title'), message: AnnotationMenu.annotation, adaptor: this.document.adaptor, code: true, @@ -460,7 +460,7 @@ export class Menu { */ public async svgImage() { CopyDialog.post({ - title: localize('SvgTitle'), + title: localize('.Svg/Title'), message: await this.toSVG(this.menu.mathItem), adaptor: this.document.adaptor, code: true, @@ -472,7 +472,7 @@ export class Menu { */ protected speechText() { CopyDialog.post({ - title: localize('SpeechTitle'), + title: localize('.Speech/Title'), message: this.menu.mathItem?.outputData?.speech ?? '', adaptor: this.document.adaptor, code: true, @@ -484,7 +484,7 @@ export class Menu { */ protected brailleText() { CopyDialog.post({ - title: localize('BrailleTitle'), + title: localize('.Braille/Title'), message: this.menu.mathItem?.outputData?.braille ?? '', adaptor: this.document.adaptor, code: true, @@ -496,7 +496,7 @@ export class Menu { */ protected errorMessage() { CopyDialog.post({ - title: localize('ErrorTitle'), + title: localize('.Error/Title'), message: this.menu.mathItem ? this.menu.errorMsg : '', adaptor: this.document.adaptor, code: true, @@ -517,7 +517,7 @@ export class Menu { text = `
${zoom.outerHTML}
`; } InfoDialog.post({ - title: localize('ZoomTitle'), + title: localize('.Zoom/Title'), message: text, adaptor: this.document.adaptor, styles: { @@ -963,7 +963,7 @@ export class Menu { Object.assign(this.settings, settings); this.setA11y(settings); } catch (err) { - Locale.warn(COMPONENT, 'StorageError', err.message); + Locale.warn(COMPONENT, '.Warn/StorageError', err.message); } } @@ -985,7 +985,7 @@ export class Menu { } localStorage.setItem(Menu.LOCALE_STORAGE, this.settings.language); } catch (err) { - Locale.warn(COMPONENT, 'StorageError', err.message); + Locale.warn(COMPONENT, '.Warn/StorageError', err.message); } } @@ -1090,7 +1090,7 @@ export class Menu { this.loadComponent('output/' + name, () => { const startup = MathJax.startup; if (!(name in startup.constructors)) { - return fail(new Error(localize('ComponentNotLoaded', name))); + return fail(new Error(localize('.Warn/ComponentNotLoaded', name))); } startup.useOutput(name, true); startup.output = this.applyRendererOptions(startup.getOutputJax()); @@ -1397,7 +1397,7 @@ export class Menu { const scale = (parseFloat(this.settings.scale) * 100) .toFixed(1) .replace(/.0$/, ''); - const percent = prompt(localize('ScalePrompt'), scale + '%'); + const percent = prompt(localize('.Scale/Prompt'), scale + '%'); if (this.current) { const speech = (this.menu.mathItem as ExplorerMathItem).explorers.speech; speech.refocus = this.current; @@ -1409,10 +1409,10 @@ export class Menu { if (scale) { this.menu.pool.lookup('scale').setValue(String(scale)); } else { - alert(localize('ScaleNonZero')); + alert(localize('.Scale/NonZero')); } } else { - alert(localize('ScalePercent')); + alert(localize('.Scale/Percent', '120%')); } } } @@ -1573,7 +1573,7 @@ export class Menu { protected async toSVG(math: HTMLMATHITEM): Promise { const jax = this.jax.SVG; if (!jax) { - return localize('NoSvgProduced'); + return localize('.Svg/NotProduced'); } const adaptor = jax.adaptor; const cache = jax.options.fontCache; @@ -1989,7 +1989,7 @@ export class Menu { * @returns {object} The JSON for the radio button item */ public radio(id: string, variable: string, other: object = {}): object { - const content = localize(id); + const content = id.match(/^\d+%$/) ? id : localize(id); return Object.assign({ type: 'radio', id, content, variable }, other); } diff --git a/ts/ui/menu/__locales__/de.json b/ts/ui/menu/__locales__/de.json index 0badab345..506d35771 100644 --- a/ts/ui/menu/__locales__/de.json +++ b/ts/ui/menu/__locales__/de.json @@ -1,11 +1,29 @@ { - "150%": "150%", - "175%": "175%", - "200%": "200%", - "250%": "250%", - "300%": "300%", - "400%": "400%", - "500%": "500%", + ".About/DocType": "Dokumenttyp: %1", + ".About/InputJax": "Input Jax: %1", + ".About/Modules": "Geladene Module:", + ".About/OutputJax": "Output Jax: %1", + ".Annotation/Title": "MathJax-Anmerkungstext", + ".Braille/Title": "MathJax-Braille-Text", + ".Clearspeak/CurrentPrefs": "Aktuelle Einstellungen", + ".Clearspeak/NoPrefs": "Keine Einstellungen", + ".Clearspeak/PrefsFor": "Einstellungen für %1", + ".Clearspeak/SelectPrefs": "Einstellungen auswählen", + ".Clearspeak/Title": "Clearspeak-Einstellungen", + ".Error/Title": "MathJax-Fehlermeldung", + ".Help/Message": "

MathJax ist eine JavaScript-Bibliothek, die es Seitenautoren ermöglicht, mathematische Formeln in ihre Webseiten einzubinden. Als Leser müssen Sie nichts tun, um dies zu nutzen.

Browser: MathJax funktioniert mit allen modernen Browsern, einschließlich Edge, Firefox, Chrome, Safari, Opera und den meisten mobilen Browsern.

Mathematik-Menü: MathJax fügt den Formeln ein Kontextmenü hinzu. Klicken Sie mit der rechten Maustaste oder bei gedrückter STRG-Taste auf eine beliebige mathematische Formel, um das Menü aufzurufen.

Mathematik anzeigen als: Mit diesen Optionen können Sie den Quellcode der Formel (als MathML oder im Originalformat) anzeigen.

In die Zwischenablage kopieren: Diese Optionen kopieren den Quellcode der Formel als MathML oder im Originalformat in die Zwischenablage (in Browsern, die dies unterstützen).

Mathematik-Einstellungen: Hiermit können Sie Funktionen von MathJax steuern, wie z. B. die Größe der mathematischen Ausdrücke, den Mechanismus zur Darstellung von Gleichungen und den Umgang mit zu breiten Gleichungen, sowie die Sprache, die für die Menüs und Fehlermeldungen von MathJax verwendet werden soll (in Version 4 noch nicht implementiert).

Barrierefreiheit: MathJax kann mit Bildschirmleseprogrammen zusammenarbeiten, um Mathematik für Sehbehinderte zugänglich zu machen. Aktivieren Sie die Sprach- oder Braille-Generierung, um die Erstellung von Sprachausgaben und die Möglichkeit zur interaktiven Untersuchung von Ausdrücken zu ermöglichen. Sie können den Stil des Explorers über dessen Menü steuern.

Mathematik-Zoom: Wenn Sie Schwierigkeiten haben, eine Gleichung zu lesen, MathJax kann die Darstellung vergrößern, damit Sie sie besser erkennen können, oder Sie können alle mathematischen Formeln auf der Seite vergrößern. Aktivieren Sie diese Funktionen im Menü Mathematik-Einstellungen.

Einstellungen: MathJax nutzt die localStorage-Datenbank Ihres Browsers, um die über dieses Menü festgelegten Einstellungen lokal in Ihrem Browser zu speichern. Diese werden nicht dazu verwendet, Sie zu verfolgen, und werden von MathJax in keiner Weise übertragen oder aus der Ferne genutzt.

", + ".Help/Title": "MathJax-Hilfe", + ".Mml/Title": "MathJax-MathML-Ausdruck", + ".Scale/NonZero": "Der Skalierungsfaktor darf nicht Null sein", + ".Scale/Percent": "Der Skalierungsfaktor muss ein Prozentsatz sein (z. B. %1)", + ".Scale/Prompt": "Alle mathematischen Formeln (im Vergleich zum umgebenden Text) um skalieren", + ".Source/Title": "MathJax-Originalquelle", + ".Speech/Title": "MathJax-Sprechtext", + ".Svg/NotProduced": "SVG kann nicht erzeugt werden.
Versuchen Sie zunächst, zur SVG-Ausgabe zu wechseln.", + ".Svg/Title": "MathJax-SVG-Bild", + ".Warn/ComponentNotLoaded": "Komponente %1 nicht geladen", + ".Warn/StorageError": "MathJax-localStorage-Fehler: %1", + ".Zoom/Title": "MathJax-vergrößerter Ausdruck", "A11yLanguage": "Sprache", "About": "Über MathJax", "Accessibility": "\u00A0\u00A0 Barrierefreiheit:", @@ -27,6 +45,7 @@ "Code": "Code-Format:", "Collapsible": "Zusammenklappbare Mathematik", "Command": "Befehl", + "Commands": "%1 Befehle", "Control": "Steuerelement", "Copy": "In Zwischenablage kopieren", "CopyAnnotation": "Anmerkung", @@ -50,8 +69,8 @@ "Magenta": "Magenta", "Magnification": "Vergrößerung", "MathHelp": "Hilfemeldung bei Fokus", - "MathJax": "MathJax", "MathJax expression": "MathJax-Ausdruck", + "MathJax": "MathJax", "MathMLcode": "MathML-Code", "MathmlIncludes": "MathML/SVG enthält", "Mathspeak": "Mathspeak", @@ -61,13 +80,14 @@ "Option": "Option", "Options": "\u00A0 \u00A0 Optionen", "Original": "Originalform", + "OriginalMathML": "Original MathML", "Overflow": "Überlauf", "Prefix": "Präfix", - "Rot": "Rot", "Renderer": "Mathematik-Renderer", "Reset": "Auf Standardwerte zurücksetzen", "Role": "Rolle", "RoleDescription": "Mathematik beschreiben als", + "Rot": "Rot", "Rules": "Regeln:", "SVG": "SVG", "Scale": "Skalierung", @@ -109,38 +129,5 @@ "showSRE": "Semantische Attribute", "showTex": "LaTeX-Attribute", "texHints": "TeX-Hinweise", - "ueb": "UEB", - - "OriginalMathML": "Original MathML", - "Commands": "%1 Befehle", - - "InputJax": "Input Jax: %1", - "OutputJax": "Output Jax: %1", - "DocType": "Dokumenttyp: %1", - "Modules": "Geladene Module:", - - "HelpTitle": "MathJax-Hilfe", - "HelpMessage": "

MathJax ist eine JavaScript-Bibliothek, die es Seitenautoren ermöglicht, mathematische Formeln in ihre Webseiten einzubinden. Als Leser müssen Sie nichts tun, um dies zu nutzen.

Browser: MathJax funktioniert mit allen modernen Browsern, einschließlich Edge, Firefox, Chrome, Safari, Opera und den meisten mobilen Browsern.

Mathematik-Menü: MathJax fügt den Formeln ein Kontextmenü hinzu. Klicken Sie mit der rechten Maustaste oder bei gedrückter STRG-Taste auf eine beliebige mathematische Formel, um das Menü aufzurufen.

Mathematik anzeigen als: Mit diesen Optionen können Sie den Quellcode der Formel (als MathML oder im Originalformat) anzeigen.

In die Zwischenablage kopieren: Diese Optionen kopieren den Quellcode der Formel als MathML oder im Originalformat in die Zwischenablage (in Browsern, die dies unterstützen).

Mathematik-Einstellungen: Hiermit können Sie Funktionen von MathJax steuern, wie z. B. die Größe der mathematischen Ausdrücke, den Mechanismus zur Darstellung von Gleichungen und den Umgang mit zu breiten Gleichungen, sowie die Sprache, die für die Menüs und Fehlermeldungen von MathJax verwendet werden soll (in Version 4 noch nicht implementiert).

Barrierefreiheit: MathJax kann mit Bildschirmleseprogrammen zusammenarbeiten, um Mathematik für Sehbehinderte zugänglich zu machen. Aktivieren Sie die Sprach- oder Braille-Generierung, um die Erstellung von Sprachausgaben und die Möglichkeit zur interaktiven Untersuchung von Ausdrücken zu ermöglichen. Sie können den Stil des Explorers über dessen Menü steuern.

Mathematik-Zoom: Wenn Sie Schwierigkeiten haben, eine Gleichung zu lesen, MathJax kann die Darstellung vergrößern, damit Sie sie besser erkennen können, oder Sie können alle mathematischen Formeln auf der Seite vergrößern. Aktivieren Sie diese Funktionen im Menü Mathematik-Einstellungen.

Einstellungen: MathJax nutzt die localStorage-Datenbank Ihres Browsers, um die über dieses Menü festgelegten Einstellungen lokal in Ihrem Browser zu speichern. Diese werden nicht dazu verwendet, Sie zu verfolgen, und werden von MathJax in keiner Weise übertragen oder aus der Ferne genutzt.

", - - "MmlTitle": "MathJax-MathML-Ausdruck", - "SourceTitle": "MathJax-Originalquelle", - "AnnotationTitle": "MathJax-Anmerkungstext", - "SvgTitle": "MathJax-SVG-Bild", - "SpeechTitle": "MathJax-Sprechtext", - "BrailleTitle": "MathJax-Braille-Text", - "ErrorTitle": "MathJax-Fehlermeldung", - "ZoomTitle": "MathJax-vergrößerter Ausdruck", - - "StorageError": "MathJax-localStorage-Fehler: %1", - "ComponentNotLoaded": "Komponente %1 nicht geladen", - "ScalePrompt": "Alle mathematischen Formeln (im Vergleich zum umgebenden Text) um skalieren", - "ScaleNonZero": "Der Skalierungsfaktor darf nicht Null sein", - "ScalePercent": "Der Skalierungsfaktor muss ein Prozentsatz sein (z. B. 120 %)", - "NoSvgProduced": "SVG kann nicht erzeugt werden.
Versuchen Sie zunächst, zur SVG-Ausgabe zu wechseln.", - - "ClearspeakTitle": "Clearspeak-Einstellungen", - "SelectPrefs": "Einstellungen auswählen", - "NoPrefs": "Keine Einstellungen", - "CurrentPrefs": "Aktuelle Einstellungen", - "PrefsFor": "Einstellungen für %1" + "ueb": "UEB" } diff --git a/ts/ui/menu/__locales__/en.json b/ts/ui/menu/__locales__/en.json index 83b2af7ea..d51ccf18b 100644 --- a/ts/ui/menu/__locales__/en.json +++ b/ts/ui/menu/__locales__/en.json @@ -1,11 +1,29 @@ { - "150%": "150%", - "175%": "175%", - "200%": "200%", - "250%": "250%", - "300%": "300%", - "400%": "400%", - "500%": "500%", + ".About/DocType": "Document Type: %1", + ".About/InputJax": "Input Jax: %1", + ".About/Modules": "Modules Loaded:", + ".About/OutputJax": "Outut Jax: %1", + ".Annotation/Title": "MathJax Annotation Text", + ".Braille/Title": "MathJax Braille Text", + ".Clearspeak/CurrentPrefs": "Current Preferences", + ".Clearspeak/NoPrefs": "No Preferences", + ".Clearspeak/PrefsFor": "Preferences for %1", + ".Clearspeak/SelectPrefs": "Select Preferences", + ".Clearspeak/Title": "Clearspeak Preferences", + ".Error/Title": "MathJax Error Message", + ".Help/Message": "

MathJax is a JavaScript library that allows page authors to include mathematics within their web pages. As a reader, you don't need to do anything to make that happen.

Browsers: MathJax works with all modern browsers including Edge, Firefox, Chrome, Safari, Opera, and most mobile browsers.

Math Menu: MathJax adds a contextual menu to equations. Right-click or CTRL-click on any mathematics to access the menu.

Show Math As: These options allow you to view the formula's source markup (as MathML or in its original format).

Copy to Clipboard: These options copy the formula's source markup, as MathML or in its original format, to the clipboard (in browsers that support that).

Math Settings: These give you control over features of MathJax, such the size of the mathematics, the mechanism used to display equations, how to handle equations that are too wide, and the language to use for MathJax's menus and error messages (not yet implemented in v4).

Accessibility: MathJax can work with screen readers to make mathematics accessible to the visually impaired. Turn on speech or braille generation to enable creation of speech strings and the ability to investigate expressions interactively. You can control the style of the explorer in its menu.

Math Zoom: If you are having difficulty reading an equation, MathJax can enlarge it to help you see it better, or you can scale all the math on the page to make it larger. Turn these features on in the Math Settings menu.

Preferences: MathJax uses your browser's localStorage database to save the preferences set via this menu locally in your browser. These are not used to track you, and are not transferred or used remotely by MathJax in any way.

", + ".Help/Title": "MathJax Help", + ".Mml/Title": "MathJax MathML Expression", + ".Scale/NonZero": "The scale should not be zero", + ".Scale/Percent": "The scale should be a percentage (e.g., %1)", + ".Scale/Prompt": "Scale all mathematics (compared to surrounding text) by", + ".Source/Title": "MathJax Original Source", + ".Speech/Title": "MathJax Speech Text", + ".Svg/NotProduced": "SVG can't be produced.
Try switching to SVG output first.", + ".Svg/Title": "MathJax SVG Image", + ".Warn/ComponentNotLoaded": "Component %1 not loaded", + ".Warn/StorageError": "MathJax localStorage error: %1", + ".Zoom/Title": "MathJax Zoomed Expression", "A11yLanguage": "Language", "About": "About MathJax", "Accessibility": "\u00A0\u00A0 Accessibility:", @@ -27,6 +45,7 @@ "Code": "Code Format:", "Collapsible": "Collapsible Math", "Command": "Command", + "Commands": "%1 Commands", "Control": "Control", "Copy": "Copy to Clipboard", "CopyAnnotation": "Annotation", @@ -50,8 +69,8 @@ "Magenta": "Magenta", "Magnification": "Magnification", "MathHelp": "Help message on focus", - "MathJax": "MathJax", "MathJax expression": "MathJax expression", + "MathJax": "MathJax", "MathMLcode": "MathML Code", "MathmlIncludes": "MathML/SVG has", "Mathspeak": "Mathspeak", @@ -61,6 +80,7 @@ "Option": "Option", "Options": "\u00A0 \u00A0 Options", "Original": "Original Form", + "OriginalMathML": "Original MathML", "Overflow": "Overflow", "Prefix": "Prefix", "Red": "Red", @@ -109,38 +129,5 @@ "showSRE": "Semantic attributes", "showTex": "LaTeX attributes", "texHints": "TeX hints", - "ueb": "UEB", - - "OriginalMathML": "Original MathML", - "Commands": "%1 Commands", - - "InputJax": "Input Jax: %1", - "OutputJax": "Outut Jax: %1", - "DocType": "Document Type: %1", - "Modules": "Modules Loaded:", - - "HelpTitle": "MathJax Help", - "HelpMessage": "

MathJax is a JavaScript library that allows page authors to include mathematics within their web pages. As a reader, you don't need to do anything to make that happen.

Browsers: MathJax works with all modern browsers including Edge, Firefox, Chrome, Safari, Opera, and most mobile browsers.

Math Menu: MathJax adds a contextual menu to equations. Right-click or CTRL-click on any mathematics to access the menu.

Show Math As: These options allow you to view the formula's source markup (as MathML or in its original format).

Copy to Clipboard: These options copy the formula's source markup, as MathML or in its original format, to the clipboard (in browsers that support that).

Math Settings: These give you control over features of MathJax, such the size of the mathematics, the mechanism used to display equations, how to handle equations that are too wide, and the language to use for MathJax's menus and error messages (not yet implemented in v4).

Accessibility: MathJax can work with screen readers to make mathematics accessible to the visually impaired. Turn on speech or braille generation to enable creation of speech strings and the ability to investigate expressions interactively. You can control the style of the explorer in its menu.

Math Zoom: If you are having difficulty reading an equation, MathJax can enlarge it to help you see it better, or you can scale all the math on the page to make it larger. Turn these features on in the Math Settings menu.

Preferences: MathJax uses your browser's localStorage database to save the preferences set via this menu locally in your browser. These are not used to track you, and are not transferred or used remotely by MathJax in any way.

", - - "MmlTitle": "MathJax MathML Expression", - "SourceTitle": "MathJax Original Source", - "AnnotationTitle": "MathJax Annotation Text", - "SvgTitle": "MathJax SVG Image", - "SpeechTitle": "MathJax Speech Text", - "BrailleTitle": "MathJax Braille Text", - "ErrorTitle": "MathJax Error Message", - "ZoomTitle": "MathJax Zoomed Expression", - - "StorageError": "MathJax localStorage error: %1", - "ComponentNotLoaded": "Component %1 not loaded", - "ScalePrompt": "Scale all mathematics (compared to surrounding text) by", - "ScaleNonZero": "The scale should not be zero", - "ScalePercent": "The scale should be a percentage (e.g., 120%)", - "NoSvgProduced": "SVG can't be produced.
Try switching to SVG output first.", - - "ClearspeakTitle": "Clearspeak Preferences", - "SelectPrefs": "Select Preferences", - "NoPrefs": "No Preferences", - "CurrentPrefs": "Current Preferences", - "PrefsFor": "Preferences for %1" + "ueb": "UEB" } From e880b1cd5ff5d1132499ab841acb6e53342f6cd6 Mon Sep 17 00:00:00 2001 From: "Davide P. Cervone" Date: Fri, 29 May 2026 18:00:16 -0400 Subject: [PATCH 03/20] Add message for error during copying (missed in initial menu localization branch) --- ts/ui/menu/MenuUtil.ts | 3 ++- ts/ui/menu/__locales__/de.json | 1 + ts/ui/menu/__locales__/en.json | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/ts/ui/menu/MenuUtil.ts b/ts/ui/menu/MenuUtil.ts index 0eaa58c74..0e25d632b 100644 --- a/ts/ui/menu/MenuUtil.ts +++ b/ts/ui/menu/MenuUtil.ts @@ -22,6 +22,7 @@ */ import { context } from '../../util/context.js'; +import { localize } from './__locales__/Component.js'; /** * True when platform is a Mac (so we can enable CMD menu item for zoom trigger) @@ -43,7 +44,7 @@ export function copyToClipboard(text: string) { try { document.execCommand('copy'); } catch (error) { - alert(`Can't copy to clipboard: ${error.message}`); + alert(localize('.Warn/CantCopy', error.message)); } document.body.removeChild(input); } diff --git a/ts/ui/menu/__locales__/de.json b/ts/ui/menu/__locales__/de.json index 506d35771..5858d331a 100644 --- a/ts/ui/menu/__locales__/de.json +++ b/ts/ui/menu/__locales__/de.json @@ -21,6 +21,7 @@ ".Speech/Title": "MathJax-Sprechtext", ".Svg/NotProduced": "SVG kann nicht erzeugt werden.
Versuchen Sie zunächst, zur SVG-Ausgabe zu wechseln.", ".Svg/Title": "MathJax-SVG-Bild", + ".Warn/CantCopy": "Kann nicht in die Zwischenablage kopiert werden: %1", ".Warn/ComponentNotLoaded": "Komponente %1 nicht geladen", ".Warn/StorageError": "MathJax-localStorage-Fehler: %1", ".Zoom/Title": "MathJax-vergrößerter Ausdruck", diff --git a/ts/ui/menu/__locales__/en.json b/ts/ui/menu/__locales__/en.json index d51ccf18b..ad96c702b 100644 --- a/ts/ui/menu/__locales__/en.json +++ b/ts/ui/menu/__locales__/en.json @@ -21,6 +21,7 @@ ".Speech/Title": "MathJax Speech Text", ".Svg/NotProduced": "SVG can't be produced.
Try switching to SVG output first.", ".Svg/Title": "MathJax SVG Image", + ".Warn/CantCopy": "Can't copy to clipboard: %1", ".Warn/ComponentNotLoaded": "Component %1 not loaded", ".Warn/StorageError": "MathJax localStorage error: %1", ".Zoom/Title": "MathJax Zoomed Expression", From fc8cbf3a44094018a722b25667dca9c80e567f47 Mon Sep 17 00:00:00 2001 From: zorkow Date: Sat, 30 May 2026 10:49:51 +0200 Subject: [PATCH 04/20] Fix German Menu --- ts/ui/menu/__locales__/de.json | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/ts/ui/menu/__locales__/de.json b/ts/ui/menu/__locales__/de.json index 0badab345..0ece7ba51 100644 --- a/ts/ui/menu/__locales__/de.json +++ b/ts/ui/menu/__locales__/de.json @@ -10,7 +10,7 @@ "About": "Über MathJax", "Accessibility": "\u00A0\u00A0 Barrierefreiheit:", "Alt": "Alt", - "AssistiveMml": "Verstecktes MathML einbeziehen", + "AssistiveMml": "MathML versteckt einbinden", "AutoCollapse": "Automatisches Ausblenden", "AutoVoicing": "Automatische Sprachausgabe", "Background": "Hintergrund", @@ -24,25 +24,25 @@ "CHTML": "CHTML", "Clearspeak": "Clearspeak", "Click": "Klicken", - "Code": "Code-Format:", - "Collapsible": "Zusammenklappbare Mathematik", + "Code": "Codeformat:", + "Collapsible": "Ausblendbare Mathematik", "Command": "Befehl", - "Control": "Steuerelement", + "Control": "Steuerung", "Copy": "In Zwischenablage kopieren", "CopyAnnotation": "Anmerkung", "Cyan": "Cyan", "DoubleClick": "Doppelklick", - "Elide": "Elide", + "Elide": "Auslassen", "Enrich": "Semantische Anreicherung", "Error": "Fehlermeldung", "Explorer": " \u00A0 \u00A0 Explorer", "Flame": "Flame", - "Foreground": "Foreground", - "Generate": "Generate", + "Foreground": "Vordergrund", + "Generate": "Erzeugen", "Green": "Green", - "Help": "MathJax-Hilfe", + "Help": "MathJax Hilfe", "Highlight": "Highlight", - "Hover": "Hover", + "Hover": "Schweben", "InTabOrder": "In Tab-Reihenfolge einbeziehen", "Keyboard": "Tastatur", "Language": "Sprache", @@ -51,13 +51,13 @@ "Magnification": "Vergrößerung", "MathHelp": "Hilfemeldung bei Fokus", "MathJax": "MathJax", - "MathJax expression": "MathJax-Ausdruck", - "MathMLcode": "MathML-Code", + "MathJax expression": "MathJax Ausdruck", + "MathMLcode": "MathML Code", "MathmlIncludes": "MathML/SVG enthält", "Mathspeak": "Mathspeak", "Mouse": "Maus", "NoZoom": "Kein Zoom", - "None": "Keine", + "None": "Kein", "Option": "Option", "Options": "\u00A0 \u00A0 Optionen", "Original": "Originalform", From a09aab618f81ae4cbba4006b9c9ec8e2a0602da4 Mon Sep 17 00:00:00 2001 From: zorkow Date: Wed, 3 Jun 2026 20:58:56 +0200 Subject: [PATCH 05/20] Fix a number of submenu prefixes and improves German --- ts/ui/menu/MJContextMenu.ts | 24 +++---- ts/ui/menu/Menu.ts | 126 ++++++++++++++++----------------- ts/ui/menu/__locales__/de.json | 117 +++++++++++++++--------------- ts/ui/menu/__locales__/en.json | 105 +++++++++++++-------------- 4 files changed, 187 insertions(+), 185 deletions(-) diff --git a/ts/ui/menu/MJContextMenu.ts b/ts/ui/menu/MJContextMenu.ts index 066a74a3d..51cdafe80 100644 --- a/ts/ui/menu/MJContextMenu.ts +++ b/ts/ui/menu/MJContextMenu.ts @@ -166,12 +166,12 @@ export class MJContextMenu extends ContextMenu { */ protected getOriginalMenu() { const input = this.mathItem.inputJax.name; - const original = this.findID('Show', 'Original'); + const original = this.findID('.Show', '.Show/Original'); original.content = input === 'MathML' - ? localize('OriginalMathML') - : localize('Commands', input); - const clipboard = this.findID('Copy', 'Original'); + ? localize('.Show/OriginalMathML') + : localize('.Show/Commands', input); + const clipboard = this.findID('.Copy', '.Show/Original'); clipboard.content = original.content; } @@ -190,8 +190,8 @@ export class MJContextMenu extends ContextMenu { */ protected getSpeechMenu() { const speech = this.mathItem.outputData.speech; - this.findID('Show', 'SpeechText')[speech ? 'enable' : 'disable'](); - this.findID('Copy', 'SpeechText')[speech ? 'enable' : 'disable'](); + this.findID('.Show', '.Show/SpeechText')[speech ? 'enable' : 'disable'](); + this.findID('.Copy', '.Show/SpeechText')[speech ? 'enable' : 'disable'](); } /** @@ -199,8 +199,8 @@ export class MJContextMenu extends ContextMenu { */ protected getBrailleMenu() { const braille = this.mathItem.outputData.braille; - this.findID('Show', 'BrailleCode')[braille ? 'enable' : 'disable'](); - this.findID('Copy', 'BrailleCode')[braille ? 'enable' : 'disable'](); + this.findID('.Show', '.Show/BrailleCode')[braille ? 'enable' : 'disable'](); + this.findID('.Copy', '.Show/BrailleCode')[braille ? 'enable' : 'disable'](); } /** @@ -208,8 +208,8 @@ export class MJContextMenu extends ContextMenu { */ protected getSvgMenu() { const svg = this.jax.SVG; - this.findID('Show', 'SvgImage')[svg ? 'enable' : 'disable'](); - this.findID('Copy', 'SvgImage')[svg ? 'enable' : 'disable'](); + this.findID('.Show', '.Show/SvgImage')[svg ? 'enable' : 'disable'](); + this.findID('.Copy', '.Show/SvgImage')[svg ? 'enable' : 'disable'](); } /** @@ -226,8 +226,8 @@ export class MJContextMenu extends ContextMenu { '') as string; disable = !this.errorMsg; } - this.findID('Show', 'Error')[disable ? 'disable' : 'enable'](); - this.findID('Copy', 'Error')[disable ? 'disable' : 'enable'](); + this.findID('.Show', '.Show/Error')[disable ? 'disable' : 'enable'](); + this.findID('.Copy', '.Show/Error')[disable ? 'disable' : 'enable'](); } /*======================================================================*/ diff --git a/ts/ui/menu/Menu.ts b/ts/ui/menu/Menu.ts index 6b784875e..842046ce0 100644 --- a/ts/ui/menu/Menu.ts +++ b/ts/ui/menu/Menu.ts @@ -664,41 +664,41 @@ export class Menu { ), ], items: [ - this.submenu('Show', [ - this.command('MathMLcode', () => this.mathMLCode()), - this.command('Original', () => this.originalText()), + this.submenu('.Show', [ + this.command('.Show/MathMLcode', () => this.mathMLCode()), + this.command('.Show/Original', () => this.originalText()), this.rule(), - this.command('SpeechText', () => this.speechText(), { + this.command('.Show/SpeechText', () => this.speechText(), { disabled: true, }), - this.command('BrailleCode', () => this.brailleText(), { + this.command('.Show/BrailleCode', () => this.brailleText(), { disabled: true, }), - this.command('SvgImage', () => this.svgImage(), { + this.command('.Show/SvgImage', () => this.svgImage(), { disabled: true, }), - this.submenu('ShowAnnotation'), + this.submenu('.Show/Annotation'), this.rule(), - this.command('Error', () => this.errorMessage(), { + this.command('.Show/Error', () => this.errorMessage(), { disabled: true, }), ]), - this.submenu('Copy', [ - this.command('MathMLcode', () => this.copyMathML()), - this.command('Original', () => this.copyOriginal()), + this.submenu('.Copy', [ + this.command('.Show/MathMLcode', () => this.copyMathML()), + this.command('.Show/Original', () => this.copyOriginal()), this.rule(), - this.command('SpeechText', () => this.copySpeechText(), { + this.command('.Show/SpeechText', () => this.copySpeechText(), { disabled: true, }), - this.command('BrailleCode', () => this.copyBrailleText(), { + this.command('.Show/BrailleCode', () => this.copyBrailleText(), { disabled: true, }), - this.command('SvgImage', () => this.copySvgImage(), { + this.command('.Show/SvgImage', () => this.copySvgImage(), { disabled: true, }), - this.submenu('CopyAnnotation'), + this.submenu('.Copy/Annotation'), this.rule(), - this.command('Error', () => this.copyErrorMessage(), { + this.command('.Show/Error', () => this.copyErrorMessage(), { disabled: true, }), ]), @@ -708,17 +708,17 @@ export class Menu { 'Renderer', this.radioGroup('renderer', ['CHTML', 'SVG']) ), - this.submenu('WideExpressions', [ + this.submenu('.Wide/WideExpressions', [ this.radioGroup('overflow', [ - 'Overflow', - 'Scroll', - 'Linebreak', - 'Scale', - 'Truncate', - 'Elide', + '.Wide/Overflow', + '.Wide/Scroll', + '.Wide/Linebreak', + '.Wide/Scale', + '.Wide/Truncate', + '.Wide/Elide', ]), this.rule(), - this.checkbox('BreakInline', 'breakInline'), + this.checkbox('.Wide/BreakInline', 'breakInline'), ]), this.rule(), this.submenu('MathmlIncludes', [ @@ -729,23 +729,23 @@ export class Menu { ]), this.submenu('Language', this.languageSubmenu()), this.rule(), - this.submenu('ZoomTrigger', [ - this.command('ZoomNow', () => this.zoom(null, '')), + this.submenu('.Zoom/ZoomTrigger', [ + this.command('.Zoom/ZoomNow', () => this.zoom(null, '')), this.rule(), - this.radioGroup('zoom', ['Click', 'DoubleClick', 'NoZoom']), + this.radioGroup('zoom', ['.Zoom/Click', '.Zoom/DoubleClick', '.Zoom/NoZoom']), this.rule(), - this.label('TriggerRequires'), - this.checkbox(MenuUtil.isMac ? 'Option' : 'Alt', 'alt'), - this.checkbox('Command', 'cmd', { + this.label('.Zoom/TriggerRequires'), + this.checkbox(MenuUtil.isMac ? 'Option' : '.Zoom/Alt', 'alt'), + this.checkbox('.ZoomC/ommand', 'cmd', { hidden: !MenuUtil.isMac, }), - this.checkbox('Control', 'ctrl', { + this.checkbox('.Zoom/Control', 'ctrl', { hidden: MenuUtil.isMac, }), - this.checkbox('Shift', 'shift'), + this.checkbox('.Zoom/Shift', 'shift'), ]), this.submenu( - 'ZoomFactor', + '.Zoom/ZoomFactor', this.radioGroup('zscale', [ '150%', '175%', @@ -795,49 +795,49 @@ export class Menu { this.radioGroup('brailleCode', ['nemeth', 'ueb', 'euro']), ]), this.submenu('Explorer', [ - this.submenu('Highlight', [ + this.submenu('.Highlight', [ this.submenu( - 'Background', + '.Highlight/Background', this.radioGroup('backgroundColor', [ - 'Blue', - 'Red', - 'Green', - 'Yellow', - 'Cyan', - 'Magenta', - 'White', - 'Black', + '.Highlight/Blue', + '.Highlight/Red', + '.Highlight/Green', + '.Highlight/Yellow', + '.Highlight/Cyan', + '.Highlight/Magenta', + '.Highlight/White', + '.Highlight/Black', ]) ), { type: 'slider', variable: 'backgroundOpacity', content: ' ' }, this.submenu( - 'Foreground', + '.Highlight/Foreground', this.radioGroup('foregroundColor', [ - 'Black', - 'White', - 'Magenta', - 'Cyan', - 'Yellow', - 'Green', - 'Red', - 'Blue', + '.Highlight/Black', + '.Highlight/White', + '.Highlight/Magenta', + '.Highlight/Cyan', + '.Highlight/Yellow', + '.Highlight/Green', + '.Highlight/Red', + '.Highlight/Blue', ]) ), { type: 'slider', variable: 'foregroundOpacity', content: ' ' }, this.rule(), - this.radioGroup('highlight', ['None', 'Hover', 'Flame']), + this.radioGroup('highlight', ['.Highlight/None', '.Highlight/Hover', '.Highlight/Flame']), this.rule(), - this.checkbox('TreeColoring', 'treeColoring'), + this.checkbox('.Highlight/TreeColoring', 'treeColoring'), ]), - this.submenu('Magnification', [ - this.radioGroup('magnification', ['None', 'Keyboard', 'Mouse']), + this.submenu('.Magnification', [ + this.radioGroup('magnification', ['.Magnification/None', '.Magnification/Keyboard', '.Magnification/Mouse']), this.rule(), this.radioGroup('magnify', ['200%', '300%', '400%', '500%']), ]), - this.submenu('SemanticInfo', [ - this.checkbox('Type', 'infoType'), - this.checkbox('Role', 'infoRole'), - this.checkbox('Prefix', 'infoPrefix'), + this.submenu('.Semantic/Info', [ + this.checkbox('.Semantic/Type', 'infoType'), + this.checkbox('.Semantic/Role', 'infoRole'), + this.checkbox('.Semantic/Prefix', 'infoPrefix'), ]), this.rule(), this.submenu('RoleDescription', [ @@ -873,12 +873,12 @@ export class Menu { }) as MJContextMenu; const menu = this.menu; menu.settings = this.settings; - menu.findID('Settings', 'WideExpressions', 'Elide').disable(); + menu.findID('Settings', '.Wide/WideExpressions', '.Wide/Elide').disable(); menu.findID('Braille', 'ueb').hide(); menu.setJax(this.jax); this.checkLoadableItems(); const cache: [string, string][] = []; - MJContextMenu.DynamicSubmenus.set('ShowAnnotation', [ + MJContextMenu.DynamicSubmenus.set('.Show/Annotation', [ AnnotationMenu.showAnnotations( () => this.annotationBox(), this.options.annotationTypes, @@ -886,7 +886,7 @@ export class Menu { ), '', ]); - MJContextMenu.DynamicSubmenus.set('CopyAnnotation', [ + MJContextMenu.DynamicSubmenus.set('.Copy/Annotation', [ AnnotationMenu.copyAnnotations(cache), '', ]); diff --git a/ts/ui/menu/__locales__/de.json b/ts/ui/menu/__locales__/de.json index b5c52fbd8..373272e6f 100644 --- a/ts/ui/menu/__locales__/de.json +++ b/ts/ui/menu/__locales__/de.json @@ -10,110 +10,111 @@ ".Clearspeak/PrefsFor": "Einstellungen für %1", ".Clearspeak/SelectPrefs": "Einstellungen auswählen", ".Clearspeak/Title": "Clearspeak-Einstellungen", + ".Copy": "In Zwischenablage kopieren", + ".Copy/Annotation": "Anmerkung", ".Error/Title": "MathJax-Fehlermeldung", ".Help/Message": "

MathJax ist eine JavaScript-Bibliothek, die es Seitenautoren ermöglicht, mathematische Formeln in ihre Webseiten einzubinden. Als Leser müssen Sie nichts tun, um dies zu nutzen.

Browser: MathJax funktioniert mit allen modernen Browsern, einschließlich Edge, Firefox, Chrome, Safari, Opera und den meisten mobilen Browsern.

Mathematik-Menü: MathJax fügt den Formeln ein Kontextmenü hinzu. Klicken Sie mit der rechten Maustaste oder bei gedrückter STRG-Taste auf eine beliebige mathematische Formel, um das Menü aufzurufen.

Mathematik anzeigen als: Mit diesen Optionen können Sie den Quellcode der Formel (als MathML oder im Originalformat) anzeigen.

In die Zwischenablage kopieren: Diese Optionen kopieren den Quellcode der Formel als MathML oder im Originalformat in die Zwischenablage (in Browsern, die dies unterstützen).

Mathematik-Einstellungen: Hiermit können Sie Funktionen von MathJax steuern, wie z. B. die Größe der mathematischen Ausdrücke, den Mechanismus zur Darstellung von Gleichungen und den Umgang mit zu breiten Gleichungen, sowie die Sprache, die für die Menüs und Fehlermeldungen von MathJax verwendet werden soll (in Version 4 noch nicht implementiert).

Barrierefreiheit: MathJax kann mit Bildschirmleseprogrammen zusammenarbeiten, um Mathematik für Sehbehinderte zugänglich zu machen. Aktivieren Sie die Sprach- oder Braille-Generierung, um die Erstellung von Sprachausgaben und die Möglichkeit zur interaktiven Untersuchung von Ausdrücken zu ermöglichen. Sie können den Stil des Explorers über dessen Menü steuern.

Mathematik-Zoom: Wenn Sie Schwierigkeiten haben, eine Gleichung zu lesen, MathJax kann die Darstellung vergrößern, damit Sie sie besser erkennen können, oder Sie können alle mathematischen Formeln auf der Seite vergrößern. Aktivieren Sie diese Funktionen im Menü Mathematik-Einstellungen.

Einstellungen: MathJax nutzt die localStorage-Datenbank Ihres Browsers, um die über dieses Menü festgelegten Einstellungen lokal in Ihrem Browser zu speichern. Diese werden nicht dazu verwendet, Sie zu verfolgen, und werden von MathJax in keiner Weise übertragen oder aus der Ferne genutzt.

", ".Help/Title": "MathJax-Hilfe", + ".Highlight": "Highlight", + ".Highlight/Background": "Hintergrund", + ".Highlight/Black": "Schwarz", + ".Highlight/Blue": "Blau", + ".Highlight/Cyan": "Cyan", + ".Highlight/Flame": "Flame", + ".Highlight/Foreground": "Vordergrund", + ".Highlight/Green": "Green", + ".Highlight/Hover": "Schweben", + ".Highlight/Magenta": "Magenta", + ".Highlight/None": "Kein", + ".Highlight/Red": "Rot", + ".Highlight/TreeColoring": "Baumfärbung", + ".Highlight/White": "Weiß", + ".Highlight/Yellow": "Gelb", + ".Magnification": "Vergrößerung", + ".Magnification/Keyboard": "Tastatur", + ".Magnification/Mouse": "Maus", + ".Magnification/None": "Keine", ".Mml/Title": "MathJax-MathML-Ausdruck", ".Scale/NonZero": "Der Skalierungsfaktor darf nicht Null sein", ".Scale/Percent": "Der Skalierungsfaktor muss ein Prozentsatz sein (z. B. %1)", ".Scale/Prompt": "Alle mathematischen Formeln (im Vergleich zum umgebenden Text) um skalieren", + ".Semantic/Info": "Semantische Informationen", + ".Semantic/Prefix": "Präfix", + ".Semantic/Role": "Rolle", + ".Semantic/Type": "Typ", + ".Show": "Mathematik anzeigen als", + ".Show/Annotation": "Anmerkung", + ".Show/BrailleCode": "Braille-Code", + ".Show/Commands": "%1 Befehle", + ".Show/Error": "Fehlermeldung", + ".Show/MathMLcode": "MathML Code", + ".Show/Original": "Originalform", + ".Show/OriginalMathML": "Original MathML", + ".Show/SpeechText": "Sprechtext", + ".Show/SvgImage": "SVG-Bild", ".Source/Title": "MathJax-Originalquelle", ".Speech/Title": "MathJax-Sprechtext", - ".Svg/NotProduced": "SVG kann nicht erzeugt werden.
Versuchen Sie zunächst, zur SVG-Ausgabe zu wechseln.", - ".Svg/Title": "MathJax-SVG-Bild", + ".Svg/NotProduced": "SVG kann nicht erzeugt werden.
Wechseln Sie zunächst zur SVG-Ausgabe.", + ".Svg/Title": "MathJax SVG als Bild", ".Warn/CantCopy": "Kann nicht in die Zwischenablage kopiert werden: %1", ".Warn/ComponentNotLoaded": "Komponente %1 nicht geladen", ".Warn/StorageError": "MathJax-localStorage-Fehler: %1", + ".Wide/BreakInline": "Inline-Zeilenumbrüche zulassen", + ".Wide/Elide": "Auslassen", + ".Wide/Linebreak": "Zeilenumbruch", + ".Wide/Overflow": "Überlauf", + ".Wide/Scale": "Skalierung", + ".Wide/Scroll": "Scrollen", + ".Wide/Truncate": "Kürzen", + ".Wide/WideExpressions": "Breite Ausdrücke", + ".Zoom/Alt": "Alt", + ".Zoom/Click": "Klicken", + ".Zoom/Control": "Steuerung", + ".Zoom/DoubleClick": "Doppelklick", + ".Zoom/NoZoom": "Kein Zoom", + ".Zoom/Shift": "Umschalt", ".Zoom/Title": "MathJax-vergrößerter Ausdruck", + ".Zoom/TriggerRequires": "Trigger erfordert:", + ".Zoom/ZoomFactor": "Zoomfaktor", + ".Zoom/ZoomNow": "Jetzt einmal zoomen", + ".Zoom/ZoomTrigger": "Zoom-Auslöser", "A11yLanguage": "Sprache", "About": "Über MathJax", "Accessibility": "\u00A0\u00A0 Barrierefreiheit:", - "Alt": "Alt", "AssistiveMml": "MathML versteckt einbinden", "AutoCollapse": "Automatisches Ausblenden", "AutoVoicing": "Automatische Sprachausgabe", - "Background": "Hintergrund", - "Black": "Schwarz", - "Blue": "Blau", "Braille": "\u00A0 \u00A0 Braille", - "BrailleCode": "Braille-Code", "BrailleCombine": "Mit Sprachausgabe kombinieren", "BrailleSpeech": "Sprachausgabe ersetzen", - "BreakInline": "Inline-Zeilenumbrüche zulassen", "CHTML": "CHTML", "Clearspeak": "Clearspeak", - "Click": "Klicken", "Code": "Codeformat:", "Collapsible": "Ausblendbare Mathematik", "Command": "Befehl", - "Commands": "%1 Befehle", - "Control": "Steuerung", - "Copy": "In Zwischenablage kopieren", - "CopyAnnotation": "Anmerkung", - "Cyan": "Cyan", - "DoubleClick": "Doppelklick", - "Elide": "Auslassen", "Enrich": "Semantische Anreicherung", - "Error": "Fehlermeldung", "Explorer": " \u00A0 \u00A0 Explorer", - "Flame": "Flame", - "Foreground": "Vordergrund", "Generate": "Erzeugen", - "Green": "Green", "Help": "MathJax Hilfe", - "Highlight": "Highlight", - "Hover": "Schweben", "InTabOrder": "In Tab-Reihenfolge einbeziehen", - "Keyboard": "Tastatur", "Language": "Sprache", - "Linebreak": "Zeilenumbruch", - "Magenta": "Magenta", - "Magnification": "Vergrößerung", "MathHelp": "Hilfemeldung bei Fokus", - "MathJax": "MathJax", "MathJax expression": "MathJax Ausdruck", - "MathMLcode": "MathML Code", + "MathJax": "MathJax", "MathmlIncludes": "MathML/SVG enthält", "Mathspeak": "Mathspeak", - "Mouse": "Maus", - "NoZoom": "Kein Zoom", - "None": "Kein", "Option": "Option", "Options": "\u00A0 \u00A0 Optionen", - "Original": "Originalform", - "OriginalMathML": "Original MathML", - "Overflow": "Überlauf", - "Prefix": "Präfix", "Renderer": "Mathematik-Renderer", "Reset": "Auf Standardwerte zurücksetzen", - "Role": "Rolle", "RoleDescription": "Mathematik beschreiben als", - "Rot": "Rot", "Rules": "Regeln:", "SVG": "SVG", - "Scale": "Skalierung", "ScaleAllMath": "Alle mathematischen Formeln skalieren...", - "Scroll": "Scrollen", - "SemanticInfo": "Semantische Informationen", - "Settings": "Einstellungen für mathematische Formeln", - "Shift": "Umschalt", - "Show": "Mathematik anzeigen als", - "ShowAnnotation": "Anmerkung", + "Settings": "Einstellungen für Formeln", "Speech": "\u00A0 \u00A0 Sprache", - "SpeechText": "Sprechtext", "Subtitles": "Untertitel anzeigen", - "SvgImage": "SVG-Bild", "TabSelects": "Tabulator-Fokus auf", - "TreeColoring": "Baumfärbung", - "TriggerRequires": "Trigger erfordert:", - "Truncate": "Kürzen", - "Type": "Typ", - "White": "Weiß", - "WideExpressions": "Breite Ausdrücke", - "Yellow": "Gelb", - "ZoomFactor": "Zoomfaktor", - "ZoomNow": "Jetzt einmal zoomen", - "ZoomTrigger": "Zoom-Auslöser", "all": "Gesamter Ausdruck", "clearspeak-default": "Auto", "clickable math": "anklickbare Mathematik", @@ -128,7 +129,7 @@ "none": "none", "semantics": "Original als Anmerkung", "showSRE": "Semantische Attribute", - "showTex": "LaTeX-Attribute", - "texHints": "TeX-Hinweise", + "showTex": "LaTeX Attribute", + "texHints": "TeX Hinweise", "ueb": "UEB" } diff --git a/ts/ui/menu/__locales__/en.json b/ts/ui/menu/__locales__/en.json index ad96c702b..8b8e85152 100644 --- a/ts/ui/menu/__locales__/en.json +++ b/ts/ui/menu/__locales__/en.json @@ -10,13 +10,48 @@ ".Clearspeak/PrefsFor": "Preferences for %1", ".Clearspeak/SelectPrefs": "Select Preferences", ".Clearspeak/Title": "Clearspeak Preferences", + ".Copy": "Copy to Clipboard", + ".Copy/Annotation": "Annotation", ".Error/Title": "MathJax Error Message", ".Help/Message": "

MathJax is a JavaScript library that allows page authors to include mathematics within their web pages. As a reader, you don't need to do anything to make that happen.

Browsers: MathJax works with all modern browsers including Edge, Firefox, Chrome, Safari, Opera, and most mobile browsers.

Math Menu: MathJax adds a contextual menu to equations. Right-click or CTRL-click on any mathematics to access the menu.

Show Math As: These options allow you to view the formula's source markup (as MathML or in its original format).

Copy to Clipboard: These options copy the formula's source markup, as MathML or in its original format, to the clipboard (in browsers that support that).

Math Settings: These give you control over features of MathJax, such the size of the mathematics, the mechanism used to display equations, how to handle equations that are too wide, and the language to use for MathJax's menus and error messages (not yet implemented in v4).

Accessibility: MathJax can work with screen readers to make mathematics accessible to the visually impaired. Turn on speech or braille generation to enable creation of speech strings and the ability to investigate expressions interactively. You can control the style of the explorer in its menu.

Math Zoom: If you are having difficulty reading an equation, MathJax can enlarge it to help you see it better, or you can scale all the math on the page to make it larger. Turn these features on in the Math Settings menu.

Preferences: MathJax uses your browser's localStorage database to save the preferences set via this menu locally in your browser. These are not used to track you, and are not transferred or used remotely by MathJax in any way.

", ".Help/Title": "MathJax Help", + ".Highlight": "Highlight", + ".Highlight/Background": "Background", + ".Highlight/Black": "Black", + ".Highlight/Blue": "Blue", + ".Highlight/Cyan": "Cyan", + ".Highlight/Flame": "Flame", + ".Highlight/Foreground": "Foreground", + ".Highlight/Green": "Green", + ".Highlight/Hover": "Hover", + ".Highlight/Magenta": "Magenta", + ".Highlight/None": "None", + ".Highlight/Red": "Red", + ".Highlight/TreeColoring": "Tree Coloring", + ".Highlight/White": "White", + ".Highlight/Yellow": "Yellow", + ".Magnification": "Magnification", + ".Magnification/Keyboard": "Keyboard", + ".Magnification/Mouse": "Mouse", + ".Magnification/None": "None", ".Mml/Title": "MathJax MathML Expression", ".Scale/NonZero": "The scale should not be zero", ".Scale/Percent": "The scale should be a percentage (e.g., %1)", ".Scale/Prompt": "Scale all mathematics (compared to surrounding text) by", + ".Semantic/Info": "Semantic Info", + ".Semantic/Prefix": "Prefix", + ".Semantic/Role": "Role", + ".Semantic/Type": "Type", + ".Show": "Show Math As", + ".Show/Annotation": "Annotation", + ".Show/BrailleCode": "Braille Code", + ".Show/Commands": "%1 Commands", + ".Show/Error": "Error Message", + ".Show/MathMLcode": "MathML Code", + ".Show/Original": "Original Form", + ".Show/OriginalMathML": "Original MathML", + ".Show/SpeechText": "Speech Text", + ".Show/SvgImage": "SVG Image", ".Source/Title": "MathJax Original Source", ".Speech/Title": "MathJax Speech Text", ".Svg/NotProduced": "SVG can't be produced.
Try switching to SVG output first.", @@ -24,96 +59,62 @@ ".Warn/CantCopy": "Can't copy to clipboard: %1", ".Warn/ComponentNotLoaded": "Component %1 not loaded", ".Warn/StorageError": "MathJax localStorage error: %1", + ".Wide/BreakInline": "Allow In-line Breaks", + ".Wide/Elide": "Elide", + ".Wide/Linebreak": "Linebreak", + ".Wide/Overflow": "Overflow", + ".Wide/Scale": "Scale", + ".Wide/Scroll": "Scroll", + ".Wide/Truncate": "Truncate", + ".Wide/WideExpressions": "Wide Expressions", + ".Zoom/Alt": "Alt", + ".Zoom/Click": "Click", + ".Zoom/Control": "Control", + ".Zoom/DoubleClick": "Double-Click", + ".Zoom/NoZoom": "No Zoom", + ".Zoom/Shift": "Shift", ".Zoom/Title": "MathJax Zoomed Expression", + ".Zoom/TriggerRequires": "Trigger Requires:", + ".Zoom/ZoomFactor": "Zoom Factor", + ".Zoom/ZoomNow": "Zoom Once Now", + ".Zoom/ZoomTrigger": "Zoom Trigger", "A11yLanguage": "Language", "About": "About MathJax", "Accessibility": "\u00A0\u00A0 Accessibility:", - "Alt": "Alt", "AssistiveMml": "Include Hidden MathML", "AutoCollapse": "Auto Collapse", "AutoVoicing": "Auto Voicing", - "Background": "Background", - "Black": "Black", - "Blue": "Blue", "Braille": "\u00A0 \u00A0 Braille", - "BrailleCode": "Braille Code", "BrailleCombine": "Combine with Speech", "BrailleSpeech": "Replace Speech", - "BreakInline": "Allow In-line Breaks", "CHTML": "CHTML", "Clearspeak": "Clearspeak", - "Click": "Click", "Code": "Code Format:", "Collapsible": "Collapsible Math", "Command": "Command", - "Commands": "%1 Commands", - "Control": "Control", - "Copy": "Copy to Clipboard", - "CopyAnnotation": "Annotation", - "Cyan": "Cyan", - "DoubleClick": "Double-Click", - "Elide": "Elide", "Enrich": "Semantic Enrichment", - "Error": "Error Message", "Explorer": "\u00A0 \u00A0 Explorer", - "Flame": "Flame", - "Foreground": "Foreground", "Generate": "Generate", - "Green": "Green", "Help": "MathJax Help", - "Highlight": "Highlight", - "Hover": "Hover", "InTabOrder": "Include in Tab Order", - "Keyboard": "Keyboard", "Language": "Language", - "Linebreak": "Linebreak", - "Magenta": "Magenta", - "Magnification": "Magnification", "MathHelp": "Help message on focus", "MathJax expression": "MathJax expression", "MathJax": "MathJax", - "MathMLcode": "MathML Code", "MathmlIncludes": "MathML/SVG has", "Mathspeak": "Mathspeak", - "Mouse": "Mouse", - "NoZoom": "No Zoom", - "None": "None", "Option": "Option", "Options": "\u00A0 \u00A0 Options", - "Original": "Original Form", - "OriginalMathML": "Original MathML", - "Overflow": "Overflow", - "Prefix": "Prefix", - "Red": "Red", "Renderer": "Math Renderer", "Reset": "Reset to defaults", - "Role": "Role", "RoleDescription": "Describe math as", "Rules": "Rules:", "SVG": "SVG", - "Scale": "Scale", "ScaleAllMath": "Scale All Math...", - "Scroll": "Scroll", - "SemanticInfo": "Semantic Info", "Settings": "Math Settings", - "Shift": "Shift", - "Show": "Show Math As", - "ShowAnnotation": "Annotation", "Speech": "\u00A0 \u00A0 Speech", - "SpeechText": "Speech Text", "Subtitles": "Show Subtitles", - "SvgImage": "SVG Image", "TabSelects": "Tabbing Focuses on", - "TreeColoring": "Tree Coloring", - "TriggerRequires": "Trigger Requires:", - "Truncate": "Truncate", - "Type": "Type", - "White": "White", - "WideExpressions": "Wide Expressions", - "Yellow": "Yellow", - "ZoomFactor": "Zoom Factor", - "ZoomNow": "Zoom Once Now", - "ZoomTrigger": "Zoom Trigger", "all": "Whole Expression", "clearspeak-default": "Auto", "clickable math": "clickable math", From 55c61fcbc69e04f6cde014bcecae628cf14b5605 Mon Sep 17 00:00:00 2001 From: zorkow Date: Wed, 3 Jun 2026 21:20:54 +0200 Subject: [PATCH 06/20] more sub menu prefixing --- ts/ui/menu/Menu.ts | 42 ++++++++++++++++++++++------------ ts/ui/menu/__locales__/de.json | 24 +++++++++---------- ts/ui/menu/__locales__/en.json | 24 +++++++++---------- 3 files changed, 51 insertions(+), 39 deletions(-) diff --git a/ts/ui/menu/Menu.ts b/ts/ui/menu/Menu.ts index 842046ce0..d4c6b58f2 100644 --- a/ts/ui/menu/Menu.ts +++ b/ts/ui/menu/Menu.ts @@ -732,7 +732,11 @@ export class Menu { this.submenu('.Zoom/ZoomTrigger', [ this.command('.Zoom/ZoomNow', () => this.zoom(null, '')), this.rule(), - this.radioGroup('zoom', ['.Zoom/Click', '.Zoom/DoubleClick', '.Zoom/NoZoom']), + this.radioGroup('zoom', [ + '.Zoom/Click', + '.Zoom/DoubleClick', + '.Zoom/NoZoom', + ]), this.rule(), this.label('.Zoom/TriggerRequires'), this.checkbox(MenuUtil.isMac ? 'Option' : '.Zoom/Alt', 'alt'), @@ -825,12 +829,20 @@ export class Menu { ), { type: 'slider', variable: 'foregroundOpacity', content: ' ' }, this.rule(), - this.radioGroup('highlight', ['.Highlight/None', '.Highlight/Hover', '.Highlight/Flame']), + this.radioGroup('highlight', [ + '.Highlight/None', + '.Highlight/Hover', + '.Highlight/Flame', + ]), this.rule(), this.checkbox('.Highlight/TreeColoring', 'treeColoring'), ]), this.submenu('.Magnification', [ - this.radioGroup('magnification', ['.Magnification/None', '.Magnification/Keyboard', '.Magnification/Mouse']), + this.radioGroup('magnification', [ + '.Magnification/None', + '.Magnification/Keyboard', + '.Magnification/Mouse', + ]), this.rule(), this.radioGroup('magnify', ['200%', '300%', '400%', '500%']), ]), @@ -840,17 +852,17 @@ export class Menu { this.checkbox('.Semantic/Prefix', 'infoPrefix'), ]), this.rule(), - this.submenu('RoleDescription', [ + this.submenu('.RoleDescription', [ this.radioGroup('roleDescription', [ - 'MathJax expression', - 'MathJax', - 'math', - 'clickable math', - 'explorable math', - 'none', + '.RoleDescription/MathJax expression', + '.RoleDescription/MathJax', + '.RoleDescription/math', + '.RoleDescription/clickable math', + '.RoleDescription/explorable math', + '.RoleDescription/none', ]), ]), - this.checkbox('MathHelp', 'help'), + this.checkbox('.Tabbing/MathHelp', 'help'), ]), this.submenu('Options', [ this.checkbox('Enrich', 'enrich'), @@ -859,9 +871,9 @@ export class Menu { disabled: true, }), this.rule(), - this.checkbox('InTabOrder', 'inTabOrder'), - this.submenu('TabSelects', [ - this.radioGroup('tabSelects', ['all', 'last']), + this.checkbox('.Tabbing/InTabOrder', 'inTabOrder'), + this.submenu('.Tabbing/TabSelects', [ + this.radioGroup('tabSelects', ['.Tabbing/all', '.Tabbing/last']), ]), this.rule(), this.checkbox('AssistiveMml', 'assistiveMml'), @@ -1170,7 +1182,7 @@ export class Menu { * @param {boolean} tab True for including math in the tab order, false for not */ protected setTabOrder(tab: boolean) { - const menu = this.menu.findID('Options', 'TabSelects'); + const menu = this.menu.findID('Options', '.Tabbing/TabSelects'); tab ? menu.enable() : menu.disable(); this.menu.store.inTaborder(tab); } diff --git a/ts/ui/menu/__locales__/de.json b/ts/ui/menu/__locales__/de.json index 373272e6f..2b8218fc4 100644 --- a/ts/ui/menu/__locales__/de.json +++ b/ts/ui/menu/__locales__/de.json @@ -35,6 +35,13 @@ ".Magnification/Mouse": "Maus", ".Magnification/None": "Keine", ".Mml/Title": "MathJax-MathML-Ausdruck", + ".RoleDescription": "Mathematik beschreiben als", + ".RoleDescription/MathJax expression": "MathJax Ausdruck", + ".RoleDescription/MathJax": "MathJax", + ".RoleDescription/clickable math": "anklickbare Mathematik", + ".RoleDescription/explorable math": "Erkundbare Mathematik", + ".RoleDescription/math": "Mathematik", + ".RoleDescription/none": "none", ".Scale/NonZero": "Der Skalierungsfaktor darf nicht Null sein", ".Scale/Percent": "Der Skalierungsfaktor muss ein Prozentsatz sein (z. B. %1)", ".Scale/Prompt": "Alle mathematischen Formeln (im Vergleich zum umgebenden Text) um skalieren", @@ -56,6 +63,10 @@ ".Speech/Title": "MathJax-Sprechtext", ".Svg/NotProduced": "SVG kann nicht erzeugt werden.
Wechseln Sie zunächst zur SVG-Ausgabe.", ".Svg/Title": "MathJax SVG als Bild", + ".Tabbing/InTabOrder": "In Tab-Reihenfolge einbeziehen", + ".Tabbing/TabSelects": "Tabulator-Fokus auf", + ".Tabbing/all": "Gesamter Ausdruck", + ".Tabbing/last": "Zuletzt erkundeter Knoten", ".Warn/CantCopy": "Kann nicht in die Zwischenablage kopiert werden: %1", ".Warn/ComponentNotLoaded": "Komponente %1 nicht geladen", ".Warn/StorageError": "MathJax-localStorage-Fehler: %1", @@ -96,37 +107,26 @@ "Explorer": " \u00A0 \u00A0 Explorer", "Generate": "Erzeugen", "Help": "MathJax Hilfe", - "InTabOrder": "In Tab-Reihenfolge einbeziehen", "Language": "Sprache", - "MathHelp": "Hilfemeldung bei Fokus", - "MathJax expression": "MathJax Ausdruck", - "MathJax": "MathJax", + ".Tabbing/MathHelp": "Hilfemeldung bei Fokus", "MathmlIncludes": "MathML/SVG enthält", "Mathspeak": "Mathspeak", "Option": "Option", "Options": "\u00A0 \u00A0 Optionen", "Renderer": "Mathematik-Renderer", "Reset": "Auf Standardwerte zurücksetzen", - "RoleDescription": "Mathematik beschreiben als", "Rules": "Regeln:", "SVG": "SVG", "ScaleAllMath": "Alle mathematischen Formeln skalieren...", "Settings": "Einstellungen für Formeln", "Speech": "\u00A0 \u00A0 Sprache", "Subtitles": "Untertitel anzeigen", - "TabSelects": "Tabulator-Fokus auf", - "all": "Gesamter Ausdruck", "clearspeak-default": "Auto", - "clickable math": "anklickbare Mathematik", "euro": "Euro", - "explorable math": "Erkundbare Mathematik", - "last": "Zuletzt erkundeter Knoten", - "math": "Mathematik", "mathspeak-brief": "Kurz", "mathspeak-default": "Ausführlich", "mathspeak-sbrief": "Superkurz", "nemeth": "Nemeth", - "none": "none", "semantics": "Original als Anmerkung", "showSRE": "Semantische Attribute", "showTex": "LaTeX Attribute", diff --git a/ts/ui/menu/__locales__/en.json b/ts/ui/menu/__locales__/en.json index 8b8e85152..c4c406596 100644 --- a/ts/ui/menu/__locales__/en.json +++ b/ts/ui/menu/__locales__/en.json @@ -35,6 +35,13 @@ ".Magnification/Mouse": "Mouse", ".Magnification/None": "None", ".Mml/Title": "MathJax MathML Expression", + ".RoleDescription": "Describe math as", + ".RoleDescription/MathJax expression": "MathJax expression", + ".RoleDescription/MathJax": "MathJax", + ".RoleDescription/clickable math": "clickable math", + ".RoleDescription/explorable math": "explorable math", + ".RoleDescription/math": "math", + ".RoleDescription/none": "none", ".Scale/NonZero": "The scale should not be zero", ".Scale/Percent": "The scale should be a percentage (e.g., %1)", ".Scale/Prompt": "Scale all mathematics (compared to surrounding text) by", @@ -56,6 +63,10 @@ ".Speech/Title": "MathJax Speech Text", ".Svg/NotProduced": "SVG can't be produced.
Try switching to SVG output first.", ".Svg/Title": "MathJax SVG Image", + ".Tabbing/InTabOrder": "Include in Tab Order", + ".Tabbing/TabSelects": "Tabbing Focuses on", + ".Tabbing/all": "Whole Expression", + ".Tabbing/last": "Last Explored Node", ".Warn/CantCopy": "Can't copy to clipboard: %1", ".Warn/ComponentNotLoaded": "Component %1 not loaded", ".Warn/StorageError": "MathJax localStorage error: %1", @@ -96,37 +107,26 @@ "Explorer": "\u00A0 \u00A0 Explorer", "Generate": "Generate", "Help": "MathJax Help", - "InTabOrder": "Include in Tab Order", "Language": "Language", - "MathHelp": "Help message on focus", - "MathJax expression": "MathJax expression", - "MathJax": "MathJax", + ".Tabbing/MathHelp": "Help message on focus", "MathmlIncludes": "MathML/SVG has", "Mathspeak": "Mathspeak", "Option": "Option", "Options": "\u00A0 \u00A0 Options", "Renderer": "Math Renderer", "Reset": "Reset to defaults", - "RoleDescription": "Describe math as", "Rules": "Rules:", "SVG": "SVG", "ScaleAllMath": "Scale All Math...", "Settings": "Math Settings", "Speech": "\u00A0 \u00A0 Speech", "Subtitles": "Show Subtitles", - "TabSelects": "Tabbing Focuses on", - "all": "Whole Expression", "clearspeak-default": "Auto", - "clickable math": "clickable math", "euro": "Euro", - "explorable math": "explorable math", - "last": "Last Explored Node", - "math": "math", "mathspeak-brief": "Brief", "mathspeak-default": "Verbose", "mathspeak-sbrief": "Superbrief", "nemeth": "Nemeth", - "none": "none", "semantics": "Original as annotation", "showSRE": "Semantic attributes", "showTex": "LaTeX attributes", From b138e0ad45d7e67ac75bf59d815be1892a05d52c Mon Sep 17 00:00:00 2001 From: zorkow Date: Wed, 3 Jun 2026 21:29:54 +0200 Subject: [PATCH 07/20] improved German and removed not yet implemented disclaimer --- ts/ui/menu/__locales__/de.json | 2 +- ts/ui/menu/__locales__/en.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ts/ui/menu/__locales__/de.json b/ts/ui/menu/__locales__/de.json index 2b8218fc4..c9ab536c6 100644 --- a/ts/ui/menu/__locales__/de.json +++ b/ts/ui/menu/__locales__/de.json @@ -13,7 +13,7 @@ ".Copy": "In Zwischenablage kopieren", ".Copy/Annotation": "Anmerkung", ".Error/Title": "MathJax-Fehlermeldung", - ".Help/Message": "

MathJax ist eine JavaScript-Bibliothek, die es Seitenautoren ermöglicht, mathematische Formeln in ihre Webseiten einzubinden. Als Leser müssen Sie nichts tun, um dies zu nutzen.

Browser: MathJax funktioniert mit allen modernen Browsern, einschließlich Edge, Firefox, Chrome, Safari, Opera und den meisten mobilen Browsern.

Mathematik-Menü: MathJax fügt den Formeln ein Kontextmenü hinzu. Klicken Sie mit der rechten Maustaste oder bei gedrückter STRG-Taste auf eine beliebige mathematische Formel, um das Menü aufzurufen.

Mathematik anzeigen als: Mit diesen Optionen können Sie den Quellcode der Formel (als MathML oder im Originalformat) anzeigen.

In die Zwischenablage kopieren: Diese Optionen kopieren den Quellcode der Formel als MathML oder im Originalformat in die Zwischenablage (in Browsern, die dies unterstützen).

Mathematik-Einstellungen: Hiermit können Sie Funktionen von MathJax steuern, wie z. B. die Größe der mathematischen Ausdrücke, den Mechanismus zur Darstellung von Gleichungen und den Umgang mit zu breiten Gleichungen, sowie die Sprache, die für die Menüs und Fehlermeldungen von MathJax verwendet werden soll (in Version 4 noch nicht implementiert).

Barrierefreiheit: MathJax kann mit Bildschirmleseprogrammen zusammenarbeiten, um Mathematik für Sehbehinderte zugänglich zu machen. Aktivieren Sie die Sprach- oder Braille-Generierung, um die Erstellung von Sprachausgaben und die Möglichkeit zur interaktiven Untersuchung von Ausdrücken zu ermöglichen. Sie können den Stil des Explorers über dessen Menü steuern.

Mathematik-Zoom: Wenn Sie Schwierigkeiten haben, eine Gleichung zu lesen, MathJax kann die Darstellung vergrößern, damit Sie sie besser erkennen können, oder Sie können alle mathematischen Formeln auf der Seite vergrößern. Aktivieren Sie diese Funktionen im Menü Mathematik-Einstellungen.

Einstellungen: MathJax nutzt die localStorage-Datenbank Ihres Browsers, um die über dieses Menü festgelegten Einstellungen lokal in Ihrem Browser zu speichern. Diese werden nicht dazu verwendet, Sie zu verfolgen, und werden von MathJax in keiner Weise übertragen oder aus der Ferne genutzt.

", + ".Help/Message": "

MathJax ist eine JavaScript-Bibliothek, die es Seitenautoren ermöglicht, mathematische Formeln in ihre Webseiten einzubinden. Als Leser müssen Sie nichts tun, um dies zu nutzen.

Browser: MathJax funktioniert in allen modernen Browsern, einschließlich Edge, Firefox, Chrome, Safari, Opera und den meisten mobilen Browsern.

Mathematik-Menü: MathJax fügt den Formeln ein Kontextmenü hinzu. Klicken Sie mit der rechten Maustaste oder bei gedrückter STRG-Taste auf eine beliebige mathematische Formel, um das Menü aufzurufen.

Mathematik anzeigen als: Mit diesen Optionen können Sie den Quellcode der Formel (als MathML oder im Originalformat) anzeigen.

In die Zwischenablage kopieren: Diese Befehle kopieren den Quellcode der Formel als MathML oder im Originalformat in die Zwischenablage (wenn der Browser dies unterstützt).

Mathematik-Einstellungen: Hiermit können Sie Funktionen von MathJax steuern, wie z. B. die Größe der mathematischen Ausdrücke, den Mechanismus zur Darstellung von Gleichungen und den Umgang mit zu breiten Gleichungen, sowie die Sprache, die für die Menüs und Fehlermeldungen von MathJax verwendet werden soll.

Barrierefreiheit: MathJax kann mit Bildschirmleseprogrammen zusammenarbeiten, um Mathematik für Sehbehinderte zugänglich zu machen. Aktivieren Sie die Sprach- oder Braille-Generierung, um die Erstellung von Sprachausgaben und die Möglichkeit zur Interaktion mit Ausdrücken zu ermöglichen. Sie können den Stil des Explorers über dessen Menü steuern.

Mathematik-Zoom: Wenn Sie Schwierigkeiten haben, eine Gleichung zu lesen, kann MathJax die Darstellung vergrößern, damit Sie sie besser erkennen können, oder Sie können alle mathematischen Formeln auf der Seite vergrößern. Aktivieren Sie diese Funktionen im Menü Mathematik-Einstellungen.

Einstellungen: MathJax nutzt die localStorage-Datenbank Ihres Browsers, um von Ihnen gewählte Menüeinstellungen in Ihrem Browser zu speichern. Diese werden weder an MathJax übertragen noch zu Nutzerverfolgung genutzt.

", ".Help/Title": "MathJax-Hilfe", ".Highlight": "Highlight", ".Highlight/Background": "Hintergrund", diff --git a/ts/ui/menu/__locales__/en.json b/ts/ui/menu/__locales__/en.json index c4c406596..2426d8abf 100644 --- a/ts/ui/menu/__locales__/en.json +++ b/ts/ui/menu/__locales__/en.json @@ -13,7 +13,7 @@ ".Copy": "Copy to Clipboard", ".Copy/Annotation": "Annotation", ".Error/Title": "MathJax Error Message", - ".Help/Message": "

MathJax is a JavaScript library that allows page authors to include mathematics within their web pages. As a reader, you don't need to do anything to make that happen.

Browsers: MathJax works with all modern browsers including Edge, Firefox, Chrome, Safari, Opera, and most mobile browsers.

Math Menu: MathJax adds a contextual menu to equations. Right-click or CTRL-click on any mathematics to access the menu.

Show Math As: These options allow you to view the formula's source markup (as MathML or in its original format).

Copy to Clipboard: These options copy the formula's source markup, as MathML or in its original format, to the clipboard (in browsers that support that).

Math Settings: These give you control over features of MathJax, such the size of the mathematics, the mechanism used to display equations, how to handle equations that are too wide, and the language to use for MathJax's menus and error messages (not yet implemented in v4).

Accessibility: MathJax can work with screen readers to make mathematics accessible to the visually impaired. Turn on speech or braille generation to enable creation of speech strings and the ability to investigate expressions interactively. You can control the style of the explorer in its menu.

Math Zoom: If you are having difficulty reading an equation, MathJax can enlarge it to help you see it better, or you can scale all the math on the page to make it larger. Turn these features on in the Math Settings menu.

Preferences: MathJax uses your browser's localStorage database to save the preferences set via this menu locally in your browser. These are not used to track you, and are not transferred or used remotely by MathJax in any way.

", + ".Help/Message": "

MathJax is a JavaScript library that allows page authors to include mathematics within their web pages. As a reader, you don't need to do anything to make that happen.

Browsers: MathJax works with all modern browsers including Edge, Firefox, Chrome, Safari, Opera, and most mobile browsers.

Math Menu: MathJax adds a contextual menu to equations. Right-click or CTRL-click on any mathematics to access the menu.

Show Math As: These options allow you to view the formula's source markup (as MathML or in its original format).

Copy to Clipboard: These options copy the formula's source markup, as MathML or in its original format, to the clipboard (in browsers that support that).

Math Settings: These give you control over features of MathJax, such the size of the mathematics, the mechanism used to display equations, how to handle equations that are too wide, and the language to use for MathJax's menus and error messages.

Accessibility: MathJax can work with screen readers to make mathematics accessible to the visually impaired. Turn on speech or braille generation to enable creation of speech strings and the ability to investigate expressions interactively. You can control the style of the explorer in its menu.

Math Zoom: If you are having difficulty reading an equation, MathJax can enlarge it to help you see it better, or you can scale all the math on the page to make it larger. Turn these features on in the Math Settings menu.

Preferences: MathJax uses your browser's localStorage database to save the preferences set via this menu locally in your browser. These are not used to track you, and are not transferred or used remotely by MathJax in any way.

", ".Help/Title": "MathJax Help", ".Highlight": "Highlight", ".Highlight/Background": "Background", From 48ba7c05da5352f4d5dbe2bc33370ea588661b7a Mon Sep 17 00:00:00 2001 From: zorkow Date: Wed, 3 Jun 2026 22:38:53 +0200 Subject: [PATCH 08/20] change title elements to prefix .Title/ --- ts/a11y/speech/SpeechMenu.ts | 2 +- ts/ui/menu/Menu.ts | 18 ++++++++--------- ts/ui/menu/__locales__/de.json | 36 +++++++++++++++++----------------- ts/ui/menu/__locales__/en.json | 22 ++++++++++----------- 4 files changed, 39 insertions(+), 39 deletions(-) diff --git a/ts/a11y/speech/SpeechMenu.ts b/ts/a11y/speech/SpeechMenu.ts index 30f1fd2ae..7fede4468 100644 --- a/ts/a11y/speech/SpeechMenu.ts +++ b/ts/a11y/speech/SpeechMenu.ts @@ -128,7 +128,7 @@ function csSelectionBox(menu: MJContextMenu, locale: string): object { }); } const sb = new SelectionDialog( - localize('.Clearspeak/Title'), + localize('.Title/Clearspeak'), '', items, SelectionOrder.ALPHABETICAL, diff --git a/ts/ui/menu/Menu.ts b/ts/ui/menu/Menu.ts index d4c6b58f2..a77107d12 100644 --- a/ts/ui/menu/Menu.ts +++ b/ts/ui/menu/Menu.ts @@ -406,7 +406,7 @@ export class Menu { */ protected help() { InfoDialog.post({ - title: localize('.Help/Title'), + title: localize('.Title/Help'), message: localize('.Help/Message'), adaptor: this.document.adaptor, extraNodes: [ @@ -424,7 +424,7 @@ export class Menu { */ protected mathMLCode() { CopyDialog.post({ - title: localize('.Mml/Title'), + title: localize('.Title/Mml'), message: this.menu.mathItem ? this.toMML(this.menu.mathItem) : '', adaptor: this.document.adaptor, code: true, @@ -436,7 +436,7 @@ export class Menu { */ protected originalText() { CopyDialog.post({ - title: localize('.Source/Title'), + title: localize('.Title/Source'), message: this.menu.mathItem?.math ?? '', adaptor: this.document.adaptor, code: true, @@ -448,7 +448,7 @@ export class Menu { */ protected annotationBox() { CopyDialog.post({ - title: localize('.Annotation/Title'), + title: localize('.Title/Annotation'), message: AnnotationMenu.annotation, adaptor: this.document.adaptor, code: true, @@ -460,7 +460,7 @@ export class Menu { */ public async svgImage() { CopyDialog.post({ - title: localize('.Svg/Title'), + title: localize('.Title/Svg'), message: await this.toSVG(this.menu.mathItem), adaptor: this.document.adaptor, code: true, @@ -472,7 +472,7 @@ export class Menu { */ protected speechText() { CopyDialog.post({ - title: localize('.Speech/Title'), + title: localize('.Title/Speech'), message: this.menu.mathItem?.outputData?.speech ?? '', adaptor: this.document.adaptor, code: true, @@ -484,7 +484,7 @@ export class Menu { */ protected brailleText() { CopyDialog.post({ - title: localize('.Braille/Title'), + title: localize('.Title/Braille'), message: this.menu.mathItem?.outputData?.braille ?? '', adaptor: this.document.adaptor, code: true, @@ -496,7 +496,7 @@ export class Menu { */ protected errorMessage() { CopyDialog.post({ - title: localize('.Error/Title'), + title: localize('.Title/Error'), message: this.menu.mathItem ? this.menu.errorMsg : '', adaptor: this.document.adaptor, code: true, @@ -517,7 +517,7 @@ export class Menu { text = `
${zoom.outerHTML}
`; } InfoDialog.post({ - title: localize('.Zoom/Title'), + title: localize('.Title/Zoom'), message: text, adaptor: this.document.adaptor, styles: { diff --git a/ts/ui/menu/__locales__/de.json b/ts/ui/menu/__locales__/de.json index c9ab536c6..2bbde9f2e 100644 --- a/ts/ui/menu/__locales__/de.json +++ b/ts/ui/menu/__locales__/de.json @@ -3,18 +3,13 @@ ".About/InputJax": "Input Jax: %1", ".About/Modules": "Geladene Module:", ".About/OutputJax": "Output Jax: %1", - ".Annotation/Title": "MathJax-Anmerkungstext", - ".Braille/Title": "MathJax-Braille-Text", ".Clearspeak/CurrentPrefs": "Aktuelle Einstellungen", ".Clearspeak/NoPrefs": "Keine Einstellungen", ".Clearspeak/PrefsFor": "Einstellungen für %1", ".Clearspeak/SelectPrefs": "Einstellungen auswählen", - ".Clearspeak/Title": "Clearspeak-Einstellungen", ".Copy": "In Zwischenablage kopieren", ".Copy/Annotation": "Anmerkung", - ".Error/Title": "MathJax-Fehlermeldung", ".Help/Message": "

MathJax ist eine JavaScript-Bibliothek, die es Seitenautoren ermöglicht, mathematische Formeln in ihre Webseiten einzubinden. Als Leser müssen Sie nichts tun, um dies zu nutzen.

Browser: MathJax funktioniert in allen modernen Browsern, einschließlich Edge, Firefox, Chrome, Safari, Opera und den meisten mobilen Browsern.

Mathematik-Menü: MathJax fügt den Formeln ein Kontextmenü hinzu. Klicken Sie mit der rechten Maustaste oder bei gedrückter STRG-Taste auf eine beliebige mathematische Formel, um das Menü aufzurufen.

Mathematik anzeigen als: Mit diesen Optionen können Sie den Quellcode der Formel (als MathML oder im Originalformat) anzeigen.

In die Zwischenablage kopieren: Diese Befehle kopieren den Quellcode der Formel als MathML oder im Originalformat in die Zwischenablage (wenn der Browser dies unterstützt).

Mathematik-Einstellungen: Hiermit können Sie Funktionen von MathJax steuern, wie z. B. die Größe der mathematischen Ausdrücke, den Mechanismus zur Darstellung von Gleichungen und den Umgang mit zu breiten Gleichungen, sowie die Sprache, die für die Menüs und Fehlermeldungen von MathJax verwendet werden soll.

Barrierefreiheit: MathJax kann mit Bildschirmleseprogrammen zusammenarbeiten, um Mathematik für Sehbehinderte zugänglich zu machen. Aktivieren Sie die Sprach- oder Braille-Generierung, um die Erstellung von Sprachausgaben und die Möglichkeit zur Interaktion mit Ausdrücken zu ermöglichen. Sie können den Stil des Explorers über dessen Menü steuern.

Mathematik-Zoom: Wenn Sie Schwierigkeiten haben, eine Gleichung zu lesen, kann MathJax die Darstellung vergrößern, damit Sie sie besser erkennen können, oder Sie können alle mathematischen Formeln auf der Seite vergrößern. Aktivieren Sie diese Funktionen im Menü Mathematik-Einstellungen.

Einstellungen: MathJax nutzt die localStorage-Datenbank Ihres Browsers, um von Ihnen gewählte Menüeinstellungen in Ihrem Browser zu speichern. Diese werden weder an MathJax übertragen noch zu Nutzerverfolgung genutzt.

", - ".Help/Title": "MathJax-Hilfe", ".Highlight": "Highlight", ".Highlight/Background": "Hintergrund", ".Highlight/Black": "Schwarz", @@ -34,7 +29,6 @@ ".Magnification/Keyboard": "Tastatur", ".Magnification/Mouse": "Maus", ".Magnification/None": "Keine", - ".Mml/Title": "MathJax-MathML-Ausdruck", ".RoleDescription": "Mathematik beschreiben als", ".RoleDescription/MathJax expression": "MathJax Ausdruck", ".RoleDescription/MathJax": "MathJax", @@ -59,17 +53,25 @@ ".Show/OriginalMathML": "Original MathML", ".Show/SpeechText": "Sprechtext", ".Show/SvgImage": "SVG-Bild", - ".Source/Title": "MathJax-Originalquelle", - ".Speech/Title": "MathJax-Sprechtext", ".Svg/NotProduced": "SVG kann nicht erzeugt werden.
Wechseln Sie zunächst zur SVG-Ausgabe.", - ".Svg/Title": "MathJax SVG als Bild", ".Tabbing/InTabOrder": "In Tab-Reihenfolge einbeziehen", + ".Tabbing/MathHelp": "Hilfemeldung bei Fokus", ".Tabbing/TabSelects": "Tabulator-Fokus auf", ".Tabbing/all": "Gesamter Ausdruck", ".Tabbing/last": "Zuletzt erkundeter Knoten", - ".Warn/CantCopy": "Kann nicht in die Zwischenablage kopiert werden: %1", + ".Title/Annotation": "MathJax Annotationstext", + ".Title/Braille": "MathJax Brailleschrift", + ".Title/Clearspeak": "Clearspeak Einstellungen", + ".Title/Error": "MathJax Fehlermeldung", + ".Title/Help": "MathJax Hilfe", + ".Title/Mml": "MathJax MathML-Ausdruck", + ".Title/Source": "MathJax original Quelltext", + ".Title/Speech": "MathJax Sprachausgabe", + ".Title/Svg": "MathJax SVG als Bild", + ".Title/Zoom": "MathJax vergrößerter Ausdruck", + ".Warn/CantCopy": "%1 kann nicht in die Zwischenablage kopiert werden", ".Warn/ComponentNotLoaded": "Komponente %1 nicht geladen", - ".Warn/StorageError": "MathJax-localStorage-Fehler: %1", + ".Warn/StorageError": "MathJax localStorage Fehler: %1", ".Wide/BreakInline": "Inline-Zeilenumbrüche zulassen", ".Wide/Elide": "Auslassen", ".Wide/Linebreak": "Zeilenumbruch", @@ -84,11 +86,10 @@ ".Zoom/DoubleClick": "Doppelklick", ".Zoom/NoZoom": "Kein Zoom", ".Zoom/Shift": "Umschalt", - ".Zoom/Title": "MathJax-vergrößerter Ausdruck", - ".Zoom/TriggerRequires": "Trigger erfordert:", + ".Zoom/TriggerRequires": "Auslöser erfordert:", ".Zoom/ZoomFactor": "Zoomfaktor", ".Zoom/ZoomNow": "Jetzt einmal zoomen", - ".Zoom/ZoomTrigger": "Zoom-Auslöser", + ".Zoom/ZoomTrigger": "Zoomauslöser", "A11yLanguage": "Sprache", "About": "Über MathJax", "Accessibility": "\u00A0\u00A0 Barrierefreiheit:", @@ -101,23 +102,22 @@ "CHTML": "CHTML", "Clearspeak": "Clearspeak", "Code": "Codeformat:", - "Collapsible": "Ausblendbare Mathematik", + "Collapsible": "Ausblendbare Teilformeln", "Command": "Befehl", "Enrich": "Semantische Anreicherung", "Explorer": " \u00A0 \u00A0 Explorer", "Generate": "Erzeugen", "Help": "MathJax Hilfe", "Language": "Sprache", - ".Tabbing/MathHelp": "Hilfemeldung bei Fokus", "MathmlIncludes": "MathML/SVG enthält", "Mathspeak": "Mathspeak", "Option": "Option", "Options": "\u00A0 \u00A0 Optionen", - "Renderer": "Mathematik-Renderer", + "Renderer": "Formel Renderer", "Reset": "Auf Standardwerte zurücksetzen", "Rules": "Regeln:", "SVG": "SVG", - "ScaleAllMath": "Alle mathematischen Formeln skalieren...", + "ScaleAllMath": "Alle Formeln skalieren...", "Settings": "Einstellungen für Formeln", "Speech": "\u00A0 \u00A0 Sprache", "Subtitles": "Untertitel anzeigen", diff --git a/ts/ui/menu/__locales__/en.json b/ts/ui/menu/__locales__/en.json index 2426d8abf..964bb7a4c 100644 --- a/ts/ui/menu/__locales__/en.json +++ b/ts/ui/menu/__locales__/en.json @@ -3,18 +3,13 @@ ".About/InputJax": "Input Jax: %1", ".About/Modules": "Modules Loaded:", ".About/OutputJax": "Outut Jax: %1", - ".Annotation/Title": "MathJax Annotation Text", - ".Braille/Title": "MathJax Braille Text", ".Clearspeak/CurrentPrefs": "Current Preferences", ".Clearspeak/NoPrefs": "No Preferences", ".Clearspeak/PrefsFor": "Preferences for %1", ".Clearspeak/SelectPrefs": "Select Preferences", - ".Clearspeak/Title": "Clearspeak Preferences", ".Copy": "Copy to Clipboard", ".Copy/Annotation": "Annotation", - ".Error/Title": "MathJax Error Message", ".Help/Message": "

MathJax is a JavaScript library that allows page authors to include mathematics within their web pages. As a reader, you don't need to do anything to make that happen.

Browsers: MathJax works with all modern browsers including Edge, Firefox, Chrome, Safari, Opera, and most mobile browsers.

Math Menu: MathJax adds a contextual menu to equations. Right-click or CTRL-click on any mathematics to access the menu.

Show Math As: These options allow you to view the formula's source markup (as MathML or in its original format).

Copy to Clipboard: These options copy the formula's source markup, as MathML or in its original format, to the clipboard (in browsers that support that).

Math Settings: These give you control over features of MathJax, such the size of the mathematics, the mechanism used to display equations, how to handle equations that are too wide, and the language to use for MathJax's menus and error messages.

Accessibility: MathJax can work with screen readers to make mathematics accessible to the visually impaired. Turn on speech or braille generation to enable creation of speech strings and the ability to investigate expressions interactively. You can control the style of the explorer in its menu.

Math Zoom: If you are having difficulty reading an equation, MathJax can enlarge it to help you see it better, or you can scale all the math on the page to make it larger. Turn these features on in the Math Settings menu.

Preferences: MathJax uses your browser's localStorage database to save the preferences set via this menu locally in your browser. These are not used to track you, and are not transferred or used remotely by MathJax in any way.

", - ".Help/Title": "MathJax Help", ".Highlight": "Highlight", ".Highlight/Background": "Background", ".Highlight/Black": "Black", @@ -34,7 +29,6 @@ ".Magnification/Keyboard": "Keyboard", ".Magnification/Mouse": "Mouse", ".Magnification/None": "None", - ".Mml/Title": "MathJax MathML Expression", ".RoleDescription": "Describe math as", ".RoleDescription/MathJax expression": "MathJax expression", ".RoleDescription/MathJax": "MathJax", @@ -59,14 +53,22 @@ ".Show/OriginalMathML": "Original MathML", ".Show/SpeechText": "Speech Text", ".Show/SvgImage": "SVG Image", - ".Source/Title": "MathJax Original Source", - ".Speech/Title": "MathJax Speech Text", ".Svg/NotProduced": "SVG can't be produced.
Try switching to SVG output first.", - ".Svg/Title": "MathJax SVG Image", ".Tabbing/InTabOrder": "Include in Tab Order", + ".Tabbing/MathHelp": "Help message on focus", ".Tabbing/TabSelects": "Tabbing Focuses on", ".Tabbing/all": "Whole Expression", ".Tabbing/last": "Last Explored Node", + ".Title/Annotation": "MathJax Annotation Text", + ".Title/Braille": "MathJax Braille Text", + ".Title/Clearspeak": "Clearspeak Preferences", + ".Title/Error": "MathJax Error Message", + ".Title/Help": "MathJax Help", + ".Title/Mml": "MathJax MathML Expression", + ".Title/Source": "MathJax Original Source", + ".Title/Speech": "MathJax Speech Text", + ".Title/Svg": "MathJax SVG Image", + ".Title/Zoom": "MathJax Zoomed Expression", ".Warn/CantCopy": "Can't copy to clipboard: %1", ".Warn/ComponentNotLoaded": "Component %1 not loaded", ".Warn/StorageError": "MathJax localStorage error: %1", @@ -84,7 +86,6 @@ ".Zoom/DoubleClick": "Double-Click", ".Zoom/NoZoom": "No Zoom", ".Zoom/Shift": "Shift", - ".Zoom/Title": "MathJax Zoomed Expression", ".Zoom/TriggerRequires": "Trigger Requires:", ".Zoom/ZoomFactor": "Zoom Factor", ".Zoom/ZoomNow": "Zoom Once Now", @@ -108,7 +109,6 @@ "Generate": "Generate", "Help": "MathJax Help", "Language": "Language", - ".Tabbing/MathHelp": "Help message on focus", "MathmlIncludes": "MathML/SVG has", "Mathspeak": "Mathspeak", "Option": "Option", From 2da2c489c48b82d7d21c196e6cc528034533df25 Mon Sep 17 00:00:00 2001 From: zorkow Date: Wed, 3 Jun 2026 22:48:57 +0200 Subject: [PATCH 09/20] fixes German menu localisation --- ts/ui/menu/__locales__/de.json | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/ts/ui/menu/__locales__/de.json b/ts/ui/menu/__locales__/de.json index 2bbde9f2e..9f91b582e 100644 --- a/ts/ui/menu/__locales__/de.json +++ b/ts/ui/menu/__locales__/de.json @@ -1,14 +1,14 @@ { ".About/DocType": "Dokumenttyp: %1", - ".About/InputJax": "Input Jax: %1", + ".About/InputJax": "Einbabe Jax: %1", ".About/Modules": "Geladene Module:", - ".About/OutputJax": "Output Jax: %1", + ".About/OutputJax": "Ausgabe Jax: %1", ".Clearspeak/CurrentPrefs": "Aktuelle Einstellungen", ".Clearspeak/NoPrefs": "Keine Einstellungen", ".Clearspeak/PrefsFor": "Einstellungen für %1", ".Clearspeak/SelectPrefs": "Einstellungen auswählen", ".Copy": "In Zwischenablage kopieren", - ".Copy/Annotation": "Anmerkung", + ".Copy/Annotation": "Annotationen", ".Help/Message": "

MathJax ist eine JavaScript-Bibliothek, die es Seitenautoren ermöglicht, mathematische Formeln in ihre Webseiten einzubinden. Als Leser müssen Sie nichts tun, um dies zu nutzen.

Browser: MathJax funktioniert in allen modernen Browsern, einschließlich Edge, Firefox, Chrome, Safari, Opera und den meisten mobilen Browsern.

Mathematik-Menü: MathJax fügt den Formeln ein Kontextmenü hinzu. Klicken Sie mit der rechten Maustaste oder bei gedrückter STRG-Taste auf eine beliebige mathematische Formel, um das Menü aufzurufen.

Mathematik anzeigen als: Mit diesen Optionen können Sie den Quellcode der Formel (als MathML oder im Originalformat) anzeigen.

In die Zwischenablage kopieren: Diese Befehle kopieren den Quellcode der Formel als MathML oder im Originalformat in die Zwischenablage (wenn der Browser dies unterstützt).

Mathematik-Einstellungen: Hiermit können Sie Funktionen von MathJax steuern, wie z. B. die Größe der mathematischen Ausdrücke, den Mechanismus zur Darstellung von Gleichungen und den Umgang mit zu breiten Gleichungen, sowie die Sprache, die für die Menüs und Fehlermeldungen von MathJax verwendet werden soll.

Barrierefreiheit: MathJax kann mit Bildschirmleseprogrammen zusammenarbeiten, um Mathematik für Sehbehinderte zugänglich zu machen. Aktivieren Sie die Sprach- oder Braille-Generierung, um die Erstellung von Sprachausgaben und die Möglichkeit zur Interaktion mit Ausdrücken zu ermöglichen. Sie können den Stil des Explorers über dessen Menü steuern.

Mathematik-Zoom: Wenn Sie Schwierigkeiten haben, eine Gleichung zu lesen, kann MathJax die Darstellung vergrößern, damit Sie sie besser erkennen können, oder Sie können alle mathematischen Formeln auf der Seite vergrößern. Aktivieren Sie diese Funktionen im Menü Mathematik-Einstellungen.

Einstellungen: MathJax nutzt die localStorage-Datenbank Ihres Browsers, um von Ihnen gewählte Menüeinstellungen in Ihrem Browser zu speichern. Diese werden weder an MathJax übertragen noch zu Nutzerverfolgung genutzt.

", ".Highlight": "Highlight", ".Highlight/Background": "Hintergrund", @@ -38,7 +38,7 @@ ".RoleDescription/none": "none", ".Scale/NonZero": "Der Skalierungsfaktor darf nicht Null sein", ".Scale/Percent": "Der Skalierungsfaktor muss ein Prozentsatz sein (z. B. %1)", - ".Scale/Prompt": "Alle mathematischen Formeln (im Vergleich zum umgebenden Text) um skalieren", + ".Scale/Prompt": "Skalierungsfaktor für alle Formeln (im Vergleich zum umgebenden Text) setzen auf", ".Semantic/Info": "Semantische Informationen", ".Semantic/Prefix": "Präfix", ".Semantic/Role": "Rolle", @@ -50,15 +50,15 @@ ".Show/Error": "Fehlermeldung", ".Show/MathMLcode": "MathML Code", ".Show/Original": "Originalform", - ".Show/OriginalMathML": "Original MathML", - ".Show/SpeechText": "Sprechtext", - ".Show/SvgImage": "SVG-Bild", + ".Show/OriginalMathML": "original MathML", + ".Show/SpeechText": "Sprachausgabe", + ".Show/SvgImage": "SVG Code", ".Svg/NotProduced": "SVG kann nicht erzeugt werden.
Wechseln Sie zunächst zur SVG-Ausgabe.", ".Tabbing/InTabOrder": "In Tab-Reihenfolge einbeziehen", ".Tabbing/MathHelp": "Hilfemeldung bei Fokus", - ".Tabbing/TabSelects": "Tabulator-Fokus auf", - ".Tabbing/all": "Gesamter Ausdruck", - ".Tabbing/last": "Zuletzt erkundeter Knoten", + ".Tabbing/TabSelects": "Tabulatorfokus auf", + ".Tabbing/all": "gesamten Ausdruck", + ".Tabbing/last": "zuletzt erkundeten Knoten", ".Title/Annotation": "MathJax Annotationstext", ".Title/Braille": "MathJax Brailleschrift", ".Title/Clearspeak": "Clearspeak Einstellungen", From 67cfb3ba328affd9c570576283e700de217946bc Mon Sep 17 00:00:00 2001 From: zorkow Date: Mon, 8 Jun 2026 15:21:16 +0200 Subject: [PATCH 10/20] add as separate components --- components/mjs/a11y/a11y.js | 0 components/mjs/a11y/config.json | 13 +++++++++++ components/mjs/a11y/en.js | 5 ++++ ts/a11y/__locales__/Component.ts | 39 ++++++++++++++++++++++++++++++++ ts/a11y/__locales__/de.json | 8 +++++++ ts/a11y/__locales__/en.json | 8 +++++++ 6 files changed, 73 insertions(+) create mode 100644 components/mjs/a11y/a11y.js create mode 100644 components/mjs/a11y/config.json create mode 100644 components/mjs/a11y/en.js create mode 100644 ts/a11y/__locales__/Component.ts create mode 100644 ts/a11y/__locales__/de.json create mode 100644 ts/a11y/__locales__/en.json diff --git a/components/mjs/a11y/a11y.js b/components/mjs/a11y/a11y.js new file mode 100644 index 000000000..e69de29bb diff --git a/components/mjs/a11y/config.json b/components/mjs/a11y/config.json new file mode 100644 index 000000000..890206402 --- /dev/null +++ b/components/mjs/a11y/config.json @@ -0,0 +1,13 @@ +{ + "build": { + "component": "a11y", + "targets": ["a11y"], + "excludeSubdirs": true + }, + "copy": { + "to": "[bundle]/a11y", + "from": "[ts]/a11y", + "copy": ["__locales__"], + "excludes": ["__locales__/Component.ts"] + } +} diff --git a/components/mjs/a11y/en.js b/components/mjs/a11y/en.js new file mode 100644 index 000000000..f10d4523a --- /dev/null +++ b/components/mjs/a11y/en.js @@ -0,0 +1,5 @@ +import { Locale } from '#js/util/Locale.js'; +import { COMPONENT } from '#js/a11y/__locales__/Component.js'; +import data from '#ts/a11y/__locales__/en.json' with {type: 'json'}; + +Locale.registerMessages(COMPONENT, 'en', data); diff --git a/ts/a11y/__locales__/Component.ts b/ts/a11y/__locales__/Component.ts new file mode 100644 index 000000000..fe745bf11 --- /dev/null +++ b/ts/a11y/__locales__/Component.ts @@ -0,0 +1,39 @@ +/************************************************************* + * + * Copyright (c) 2026 The MathJax Consortium + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @file Locale component registration for a11y/explorer + * + * @author dpvc@mathjax.org (Davide P. Cervone) + */ + +import { Locale, namedData } from '../../util/Locale.js'; + +export const COMPONENT = 'a11y'; + +Locale.registerLocaleFiles(COMPONENT, '../ts/a11y'); + +/** + * Get a localized message for this component + * + * @param {string} id The id of the message + * @param {(string|namedData)[]} args The replacement arguments for the message, if any + * @returns {string} The localized message + */ +export function localize(id: string, ...args: (string | namedData)[]): string { + return Locale.message(COMPONENT, id, ...args); +} diff --git a/ts/a11y/__locales__/de.json b/ts/a11y/__locales__/de.json new file mode 100644 index 000000000..7d69b63dc --- /dev/null +++ b/ts/a11y/__locales__/de.json @@ -0,0 +1,8 @@ +{ + "RoleDescription/MathJax expression": "MathJax Ausdruck", + "RoleDescription/MathJax": "MathJax", + "RoleDescription/clickable math": "anklickbare Mathematik", + "RoleDescription/explorable math": "erkundbare Mathematik", + "RoleDescription/math": "Mathematik", + "RoleDescription/none": "none", +} diff --git a/ts/a11y/__locales__/en.json b/ts/a11y/__locales__/en.json new file mode 100644 index 000000000..4e6dcd0d9 --- /dev/null +++ b/ts/a11y/__locales__/en.json @@ -0,0 +1,8 @@ +{ + "RoleDescription/MathJax expression": "MathJax expression", + "RoleDescription/MathJax": "MathJax", + "RoleDescription/clickable math": "clickable math", + "RoleDescription/explorable math": "explorable math", + "RoleDescription/math": "math", + "RoleDescription/none": "none" +} From 7273097eda63f269d7bad8eb630d3154f9d20a6f Mon Sep 17 00:00:00 2001 From: zorkow Date: Mon, 8 Jun 2026 17:33:45 +0200 Subject: [PATCH 11/20] initial duplication of role descriptions --- ts/a11y/explorer.ts | 7 ++++--- ts/a11y/explorer/__locales__/de.json | 7 ++++++- ts/a11y/explorer/__locales__/en.json | 7 ++++++- ts/ui/menu/__locales__/de.json | 14 +++++++------- ts/ui/menu/__locales__/en.json | 12 ++++++------ 5 files changed, 29 insertions(+), 18 deletions(-) diff --git a/ts/a11y/explorer.ts b/ts/a11y/explorer.ts index ce0f68883..62823f69f 100644 --- a/ts/a11y/explorer.ts +++ b/ts/a11y/explorer.ts @@ -34,6 +34,7 @@ import { StyleJson } from '../util/StyleJson.js'; import { context } from '../util/context.js'; import { ExplorerPool, RegionPool } from './explorer/ExplorerPool.js'; +import { localize } from './explorer/__locales__/Component.js'; import * as Sre from './sre.js'; @@ -135,7 +136,7 @@ export function ExplorerMathItemMixin>( /** * The aria-roleDescription to use for the math */ - protected static roleDescription: string = 'math'; + protected static roleDescription: string = '.RoleDescription/math'; /** * Decription to use when set to none @@ -154,9 +155,9 @@ export function ExplorerMathItemMixin>( public get roleDescription() { const CLASS = this.constructor as typeof BaseClass; - return CLASS.roleDescription === 'none' + return CLASS.roleDescription === '.RoleDescription/none' ? CLASS.none - : CLASS.roleDescription; + : localize(CLASS.roleDescription); } public get none() { diff --git a/ts/a11y/explorer/__locales__/de.json b/ts/a11y/explorer/__locales__/de.json index df1f68841..2d6b8f84f 100644 --- a/ts/a11y/explorer/__locales__/de.json +++ b/ts/a11y/explorer/__locales__/de.json @@ -13,5 +13,10 @@ "Unknown/Title": "ein Bildschirmleseprogramm", "Win/Braille": "NVDA-Benutzer müssen diese Option auswählen, während JAWS-Benutzer die Braille-Ausgabe erhalten sollten, ohne diese Einstellung zu ändern.", "Win/Select": "Der Screenreader sollte automatisch in den Fokus- oder Formularmodus wechseln, sobald der Ausdruck den Browserfokus erhält. Ist dies nicht der Fall, können Sie den Fokusmodus in NVDA mit NVDA+Leertaste umschalten; bei JAWS sollte die Eingabetaste den Formularmodus aktivieren, während die Plus-Taste des Ziffernblocks ihn beendet. Beachten Sie außerdem, dass Sie die NVDA- oder JAWS-Taste zusammen mit den Pfeiltasten verwenden können, um den Ausdruck auch im Browse-Modus zu erkunden, und dass Sie mit NVDA+Umschalt+Pfeiltasten aus einem Ausdruck herausnavigieren können, der in NVDA den Fokus hat.", - "Win/Title": "Windows mit NVDA oder JAWS" + "Win/Title": "Windows mit NVDA oder JAWS", + ".RoleDescription/MathJax expression": "MathJax Ausdruck", + ".RoleDescription/MathJax": "MathJax", + ".RoleDescription/clickable math": "anklickbare Mathematik", + ".RoleDescription/explorable math": "Erkundbare Mathematik", + ".RoleDescription/math": "Mathematik" } diff --git a/ts/a11y/explorer/__locales__/en.json b/ts/a11y/explorer/__locales__/en.json index 39ca9e662..0294af738 100644 --- a/ts/a11y/explorer/__locales__/en.json +++ b/ts/a11y/explorer/__locales__/en.json @@ -13,5 +13,10 @@ "Unknown/Title": "a Screen Reader", "Win/Braille": "NVDA users need to select this option, while JAWS users should be able to get Braille output without changing this setting.", "Win/Select": "The screen reader should enter focus or forms mode automatically when the expression gets the browser focus, but if not, you can toggle focus mode using NVDA+space in NVDA; for JAWS, Enter should start forms mode while Numpad Plus leaves it. Also note that you can use the NVDA or JAWS key plus the arrow keys to explore the expression even in browse mode, and you can use NVDA+shift+arrow keys to navigate out of an expression that has the focus in NVDA", - "Win/Title": "Windows using NVDA or JAWS" + "Win/Title": "Windows using NVDA or JAWS", + ".RoleDescription/MathJax expression": "MathJax expression", + ".RoleDescription/MathJax": "MathJax", + ".RoleDescription/clickable math": "clickable math", + ".RoleDescription/explorable math": "explorable math", + ".RoleDescription/math": "math" } diff --git a/ts/ui/menu/__locales__/de.json b/ts/ui/menu/__locales__/de.json index 9f91b582e..60d7d6ce8 100644 --- a/ts/ui/menu/__locales__/de.json +++ b/ts/ui/menu/__locales__/de.json @@ -30,12 +30,7 @@ ".Magnification/Mouse": "Maus", ".Magnification/None": "Keine", ".RoleDescription": "Mathematik beschreiben als", - ".RoleDescription/MathJax expression": "MathJax Ausdruck", - ".RoleDescription/MathJax": "MathJax", - ".RoleDescription/clickable math": "anklickbare Mathematik", - ".RoleDescription/explorable math": "Erkundbare Mathematik", - ".RoleDescription/math": "Mathematik", - ".RoleDescription/none": "none", + ".RoleDescription/none": "ohne Beschreibung", ".Scale/NonZero": "Der Skalierungsfaktor darf nicht Null sein", ".Scale/Percent": "Der Skalierungsfaktor muss ein Prozentsatz sein (z. B. %1)", ".Scale/Prompt": "Skalierungsfaktor für alle Formeln (im Vergleich zum umgebenden Text) setzen auf", @@ -131,5 +126,10 @@ "showSRE": "Semantische Attribute", "showTex": "LaTeX Attribute", "texHints": "TeX Hinweise", - "ueb": "UEB" + "ueb": "UEB", + ".RoleDescription/MathJax expression": "MathJax Ausdruck", + ".RoleDescription/MathJax": "MathJax", + ".RoleDescription/clickable math": "anklickbare Mathematik", + ".RoleDescription/explorable math": "Erkundbare Mathematik", + ".RoleDescription/math": "Mathematik" } diff --git a/ts/ui/menu/__locales__/en.json b/ts/ui/menu/__locales__/en.json index 964bb7a4c..4adc29986 100644 --- a/ts/ui/menu/__locales__/en.json +++ b/ts/ui/menu/__locales__/en.json @@ -30,11 +30,6 @@ ".Magnification/Mouse": "Mouse", ".Magnification/None": "None", ".RoleDescription": "Describe math as", - ".RoleDescription/MathJax expression": "MathJax expression", - ".RoleDescription/MathJax": "MathJax", - ".RoleDescription/clickable math": "clickable math", - ".RoleDescription/explorable math": "explorable math", - ".RoleDescription/math": "math", ".RoleDescription/none": "none", ".Scale/NonZero": "The scale should not be zero", ".Scale/Percent": "The scale should be a percentage (e.g., %1)", @@ -131,5 +126,10 @@ "showSRE": "Semantic attributes", "showTex": "LaTeX attributes", "texHints": "TeX hints", - "ueb": "UEB" + "ueb": "UEB", + ".RoleDescription/MathJax expression": "MathJax expression", + ".RoleDescription/MathJax": "MathJax", + ".RoleDescription/clickable math": "clickable math", + ".RoleDescription/explorable math": "explorable math", + ".RoleDescription/math": "math" } From d495f1f2257070de0256a0bb31e6d6f035726555 Mon Sep 17 00:00:00 2001 From: zorkow Date: Mon, 8 Jun 2026 22:52:59 +0200 Subject: [PATCH 12/20] adds component a11y for localization of aria descriptions --- components/mjs/a11y/a11y.js | 2 + components/mjs/a11y/config.json | 8 +++- ts/a11y/__locales__/de.json | 12 +++--- ts/a11y/__locales__/en.json | 12 +++--- ts/a11y/aria.ts | 60 ++++++++++++++++++++++++++++ ts/a11y/explorer.ts | 8 ++-- ts/a11y/explorer/__locales__/de.json | 7 +--- ts/a11y/explorer/__locales__/en.json | 7 +--- ts/ui/menu/Menu.ts | 19 ++++----- ts/ui/menu/__locales__/de.json | 10 +---- ts/ui/menu/__locales__/en.json | 10 +---- 11 files changed, 101 insertions(+), 54 deletions(-) create mode 100644 ts/a11y/aria.ts diff --git a/components/mjs/a11y/a11y.js b/components/mjs/a11y/a11y.js index e69de29bb..e895962ab 100644 --- a/components/mjs/a11y/a11y.js +++ b/components/mjs/a11y/a11y.js @@ -0,0 +1,2 @@ +import './lib/a11y.js'; +import './en.js'; diff --git a/components/mjs/a11y/config.json b/components/mjs/a11y/config.json index 890206402..c5538cdac 100644 --- a/components/mjs/a11y/config.json +++ b/components/mjs/a11y/config.json @@ -1,7 +1,7 @@ { "build": { "component": "a11y", - "targets": ["a11y"], + "targets": ["a11y/aria.ts"], "excludeSubdirs": true }, "copy": { @@ -9,5 +9,11 @@ "from": "[ts]/a11y", "copy": ["__locales__"], "excludes": ["__locales__/Component.ts"] + }, + "webpack": { + "name": "a11y", + "libs": [ + "components/src/a11y/lib" + ] } } diff --git a/ts/a11y/__locales__/de.json b/ts/a11y/__locales__/de.json index 7d69b63dc..927433690 100644 --- a/ts/a11y/__locales__/de.json +++ b/ts/a11y/__locales__/de.json @@ -1,8 +1,8 @@ { - "RoleDescription/MathJax expression": "MathJax Ausdruck", - "RoleDescription/MathJax": "MathJax", - "RoleDescription/clickable math": "anklickbare Mathematik", - "RoleDescription/explorable math": "erkundbare Mathematik", - "RoleDescription/math": "Mathematik", - "RoleDescription/none": "none", + "Aria/RoleDescription/MathJax expression": "MathJax Ausdruck", + "Aria/RoleDescription/MathJax": "MathJax", + "Aria/RoleDescription/clickable math": "anklickbare Mathematik", + "Aria/RoleDescription/explorable math": "erkundbare Mathematik", + "Aria/RoleDescription/math": "Mathematik", + "Aria/RoleDescription/none": "ohne Beschreibung" } diff --git a/ts/a11y/__locales__/en.json b/ts/a11y/__locales__/en.json index 4e6dcd0d9..576d3c9dd 100644 --- a/ts/a11y/__locales__/en.json +++ b/ts/a11y/__locales__/en.json @@ -1,8 +1,8 @@ { - "RoleDescription/MathJax expression": "MathJax expression", - "RoleDescription/MathJax": "MathJax", - "RoleDescription/clickable math": "clickable math", - "RoleDescription/explorable math": "explorable math", - "RoleDescription/math": "math", - "RoleDescription/none": "none" + "Aria/RoleDescription/MathJax expression": "MathJax expression", + "Aria/RoleDescription/MathJax": "MathJax", + "Aria/RoleDescription/clickable math": "clickable math", + "Aria/RoleDescription/explorable math": "explorable math", + "Aria/RoleDescription/math": "math", + "Aria/RoleDescription/none": "none" } diff --git a/ts/a11y/aria.ts b/ts/a11y/aria.ts new file mode 100644 index 000000000..7b6f1bdbc --- /dev/null +++ b/ts/a11y/aria.ts @@ -0,0 +1,60 @@ +/************************************************************* + * + * Copyright (c) 2026 The MathJax Consortium + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @file Localizable ARIA constants. + * + * @author v.sorge@mathjax.org (Volker Sorge) + */ + +import { localize } from './__locales__/Component.js'; + +/** + * Localization keys for ARIA role descriptions used by MathJax. Values are the + * strings expected in the locale files. + */ +export const AriaRoleDescription: Record = { + EXPRESSION: 'Aria/RoleDescription/MathJax expression', + MATHJAX: 'Aria/RoleDescription/MathJax', + MATH: 'Aria/RoleDescription/math', + CLICKABLE: 'Aria/RoleDescription/clickable math', + EXPLORABLE: 'Aria/RoleDescription/explorable math', + NONE: 'Aria/RoleDescription/none', +}; + +/** + * Returns the localized string for a known ARIA role description ID. + * + * @param {string} id - The aria localization key to resolve. + * @returns {string | null} Localized string or null if id has no Aria prefix. + */ +export function localizeAria(id: string): string { + if (!hasAriaPrefix(id)) { + return null; + } + return localize(id); +} + +/** + * Checks whether the given ID starts with the `Aria/` prefix. + * + * @param {string} id - The string to test. + * @returns {boolean} True if `id` begins with `Aria/`. + */ +function hasAriaPrefix(id: string): boolean { + return id.startsWith('Aria/'); +} diff --git a/ts/a11y/explorer.ts b/ts/a11y/explorer.ts index 62823f69f..8d8a2003e 100644 --- a/ts/a11y/explorer.ts +++ b/ts/a11y/explorer.ts @@ -34,7 +34,7 @@ import { StyleJson } from '../util/StyleJson.js'; import { context } from '../util/context.js'; import { ExplorerPool, RegionPool } from './explorer/ExplorerPool.js'; -import { localize } from './explorer/__locales__/Component.js'; +import { AriaRoleDescription, localizeAria } from './aria.js'; import * as Sre from './sre.js'; @@ -136,7 +136,7 @@ export function ExplorerMathItemMixin>( /** * The aria-roleDescription to use for the math */ - protected static roleDescription: string = '.RoleDescription/math'; + protected static roleDescription: string = AriaRoleDescription.MATH; /** * Decription to use when set to none @@ -155,9 +155,9 @@ export function ExplorerMathItemMixin>( public get roleDescription() { const CLASS = this.constructor as typeof BaseClass; - return CLASS.roleDescription === '.RoleDescription/none' + return CLASS.roleDescription === AriaRoleDescription.NONE ? CLASS.none - : localize(CLASS.roleDescription); + : (localizeAria(CLASS.roleDescription) ?? CLASS.roleDescription); } public get none() { diff --git a/ts/a11y/explorer/__locales__/de.json b/ts/a11y/explorer/__locales__/de.json index 2d6b8f84f..df1f68841 100644 --- a/ts/a11y/explorer/__locales__/de.json +++ b/ts/a11y/explorer/__locales__/de.json @@ -13,10 +13,5 @@ "Unknown/Title": "ein Bildschirmleseprogramm", "Win/Braille": "NVDA-Benutzer müssen diese Option auswählen, während JAWS-Benutzer die Braille-Ausgabe erhalten sollten, ohne diese Einstellung zu ändern.", "Win/Select": "Der Screenreader sollte automatisch in den Fokus- oder Formularmodus wechseln, sobald der Ausdruck den Browserfokus erhält. Ist dies nicht der Fall, können Sie den Fokusmodus in NVDA mit NVDA+Leertaste umschalten; bei JAWS sollte die Eingabetaste den Formularmodus aktivieren, während die Plus-Taste des Ziffernblocks ihn beendet. Beachten Sie außerdem, dass Sie die NVDA- oder JAWS-Taste zusammen mit den Pfeiltasten verwenden können, um den Ausdruck auch im Browse-Modus zu erkunden, und dass Sie mit NVDA+Umschalt+Pfeiltasten aus einem Ausdruck herausnavigieren können, der in NVDA den Fokus hat.", - "Win/Title": "Windows mit NVDA oder JAWS", - ".RoleDescription/MathJax expression": "MathJax Ausdruck", - ".RoleDescription/MathJax": "MathJax", - ".RoleDescription/clickable math": "anklickbare Mathematik", - ".RoleDescription/explorable math": "Erkundbare Mathematik", - ".RoleDescription/math": "Mathematik" + "Win/Title": "Windows mit NVDA oder JAWS" } diff --git a/ts/a11y/explorer/__locales__/en.json b/ts/a11y/explorer/__locales__/en.json index 0294af738..39ca9e662 100644 --- a/ts/a11y/explorer/__locales__/en.json +++ b/ts/a11y/explorer/__locales__/en.json @@ -13,10 +13,5 @@ "Unknown/Title": "a Screen Reader", "Win/Braille": "NVDA users need to select this option, while JAWS users should be able to get Braille output without changing this setting.", "Win/Select": "The screen reader should enter focus or forms mode automatically when the expression gets the browser focus, but if not, you can toggle focus mode using NVDA+space in NVDA; for JAWS, Enter should start forms mode while Numpad Plus leaves it. Also note that you can use the NVDA or JAWS key plus the arrow keys to explore the expression even in browse mode, and you can use NVDA+shift+arrow keys to navigate out of an expression that has the focus in NVDA", - "Win/Title": "Windows using NVDA or JAWS", - ".RoleDescription/MathJax expression": "MathJax expression", - ".RoleDescription/MathJax": "MathJax", - ".RoleDescription/clickable math": "clickable math", - ".RoleDescription/explorable math": "explorable math", - ".RoleDescription/math": "math" + "Win/Title": "Windows using NVDA or JAWS" } diff --git a/ts/ui/menu/Menu.ts b/ts/ui/menu/Menu.ts index a77107d12..79bb09e93 100644 --- a/ts/ui/menu/Menu.ts +++ b/ts/ui/menu/Menu.ts @@ -50,6 +50,7 @@ import { locales } from './locales.js'; import { Parser, Rule, CssStyles, Submenu } from './mj-context-menu.js'; +import { AriaRoleDescription, localizeAria } from '../../a11y/aria.js'; import { Locale } from '../../util/Locale.js'; import { COMPONENT, localize } from './__locales__/Component.js'; export { COMPONENT }; @@ -172,7 +173,7 @@ export class Menu { brailleSpeech: false, brailleCombine: false, speechRules: 'clearspeak-default', - roleDescription: 'math', + roleDescription: AriaRoleDescription.MATH, inTabOrder: true, tabSelects: 'all', help: true, @@ -852,14 +853,14 @@ export class Menu { this.checkbox('.Semantic/Prefix', 'infoPrefix'), ]), this.rule(), - this.submenu('.RoleDescription', [ + this.submenu('RoleDescription', [ this.radioGroup('roleDescription', [ - '.RoleDescription/MathJax expression', - '.RoleDescription/MathJax', - '.RoleDescription/math', - '.RoleDescription/clickable math', - '.RoleDescription/explorable math', - '.RoleDescription/none', + AriaRoleDescription.EXPRESSION, + AriaRoleDescription.MATHJAX, + AriaRoleDescription.MATH, + AriaRoleDescription.CLICKABLE, + AriaRoleDescription.EXPLORABLE, + AriaRoleDescription.NONE, ]), ]), this.checkbox('.Tabbing/MathHelp', 'help'), @@ -2001,7 +2002,7 @@ export class Menu { * @returns {object} The JSON for the radio button item */ public radio(id: string, variable: string, other: object = {}): object { - const content = id.match(/^\d+%$/) ? id : localize(id); + const content = id.match(/^\d+%$/) ? id : (localizeAria(id) ?? localize(id)); return Object.assign({ type: 'radio', id, content, variable }, other); } diff --git a/ts/ui/menu/__locales__/de.json b/ts/ui/menu/__locales__/de.json index 60d7d6ce8..d5c267c7d 100644 --- a/ts/ui/menu/__locales__/de.json +++ b/ts/ui/menu/__locales__/de.json @@ -29,8 +29,7 @@ ".Magnification/Keyboard": "Tastatur", ".Magnification/Mouse": "Maus", ".Magnification/None": "Keine", - ".RoleDescription": "Mathematik beschreiben als", - ".RoleDescription/none": "ohne Beschreibung", + "RoleDescription": "Mathematik beschreiben als", ".Scale/NonZero": "Der Skalierungsfaktor darf nicht Null sein", ".Scale/Percent": "Der Skalierungsfaktor muss ein Prozentsatz sein (z. B. %1)", ".Scale/Prompt": "Skalierungsfaktor für alle Formeln (im Vergleich zum umgebenden Text) setzen auf", @@ -126,10 +125,5 @@ "showSRE": "Semantische Attribute", "showTex": "LaTeX Attribute", "texHints": "TeX Hinweise", - "ueb": "UEB", - ".RoleDescription/MathJax expression": "MathJax Ausdruck", - ".RoleDescription/MathJax": "MathJax", - ".RoleDescription/clickable math": "anklickbare Mathematik", - ".RoleDescription/explorable math": "Erkundbare Mathematik", - ".RoleDescription/math": "Mathematik" + "ueb": "UEB" } diff --git a/ts/ui/menu/__locales__/en.json b/ts/ui/menu/__locales__/en.json index 4adc29986..d2625de09 100644 --- a/ts/ui/menu/__locales__/en.json +++ b/ts/ui/menu/__locales__/en.json @@ -29,8 +29,7 @@ ".Magnification/Keyboard": "Keyboard", ".Magnification/Mouse": "Mouse", ".Magnification/None": "None", - ".RoleDescription": "Describe math as", - ".RoleDescription/none": "none", + "RoleDescription": "Describe math as", ".Scale/NonZero": "The scale should not be zero", ".Scale/Percent": "The scale should be a percentage (e.g., %1)", ".Scale/Prompt": "Scale all mathematics (compared to surrounding text) by", @@ -126,10 +125,5 @@ "showSRE": "Semantic attributes", "showTex": "LaTeX attributes", "texHints": "TeX hints", - "ueb": "UEB", - ".RoleDescription/MathJax expression": "MathJax expression", - ".RoleDescription/MathJax": "MathJax", - ".RoleDescription/clickable math": "clickable math", - ".RoleDescription/explorable math": "explorable math", - ".RoleDescription/math": "math" + "ueb": "UEB" } From 2a0818ade475ccee2e5fa1960ccac3590de2a4f7 Mon Sep 17 00:00:00 2001 From: zorkow Date: Mon, 8 Jun 2026 23:18:31 +0200 Subject: [PATCH 13/20] changes title order and removes leading dot syntax --- ts/a11y/speech/SpeechMenu.ts | 10 +- ts/ui/menu/MJContextMenu.ts | 24 ++--- ts/ui/menu/Menu.ts | 190 ++++++++++++++++----------------- ts/ui/menu/__locales__/de.json | 168 ++++++++++++++--------------- ts/ui/menu/__locales__/en.json | 168 ++++++++++++++--------------- 5 files changed, 280 insertions(+), 280 deletions(-) diff --git a/ts/a11y/speech/SpeechMenu.ts b/ts/a11y/speech/SpeechMenu.ts index 7fede4468..0fd3e3168 100644 --- a/ts/a11y/speech/SpeechMenu.ts +++ b/ts/a11y/speech/SpeechMenu.ts @@ -128,7 +128,7 @@ function csSelectionBox(menu: MJContextMenu, locale: string): object { }); } const sb = new SelectionDialog( - localize('.Title/Clearspeak'), + localize('Clearspeak/Title'), '', items, SelectionOrder.ALPHABETICAL, @@ -138,7 +138,7 @@ function csSelectionBox(menu: MJContextMenu, locale: string): object { return { type: 'command', id: 'ClearspeakPreferences', - content: localize('.Clearspeak/SelectPrefs'), + content: localize('Clearspeak/SelectPrefs'), action: () => sb.post(), }; } @@ -160,13 +160,13 @@ function basePreferences(previous: string): object[] { const items = [ { type: 'radio', - content: localize('.Clearspeak/NoPrefs'), + content: localize('Clearspeak/NoPrefs'), id: 'clearspeak-default', variable: 'speechRules', }, { type: 'radio', - content: localize('.Clearspeak/CurrentPrefs'), + content: localize('Clearspeak/CurrentPrefs'), id: 'clearspeak-' + previous, variable: 'speechRules', }, @@ -192,7 +192,7 @@ function smartPreferences( ): object[] { const loc = localePreferences.get(locale); const items = [ - { type: 'label', content: localize('.Clearspeak/PrefsFor', smart) }, + { type: 'label', content: localize('Clearspeak/PrefsFor', smart) }, { type: 'rule' }, ]; return items.concat( diff --git a/ts/ui/menu/MJContextMenu.ts b/ts/ui/menu/MJContextMenu.ts index 51cdafe80..ffc20b00c 100644 --- a/ts/ui/menu/MJContextMenu.ts +++ b/ts/ui/menu/MJContextMenu.ts @@ -166,12 +166,12 @@ export class MJContextMenu extends ContextMenu { */ protected getOriginalMenu() { const input = this.mathItem.inputJax.name; - const original = this.findID('.Show', '.Show/Original'); + const original = this.findID('Show', 'Show/Original'); original.content = input === 'MathML' - ? localize('.Show/OriginalMathML') - : localize('.Show/Commands', input); - const clipboard = this.findID('.Copy', '.Show/Original'); + ? localize('Show/OriginalMathML') + : localize('Show/Commands', input); + const clipboard = this.findID('Copy', 'Show/Original'); clipboard.content = original.content; } @@ -190,8 +190,8 @@ export class MJContextMenu extends ContextMenu { */ protected getSpeechMenu() { const speech = this.mathItem.outputData.speech; - this.findID('.Show', '.Show/SpeechText')[speech ? 'enable' : 'disable'](); - this.findID('.Copy', '.Show/SpeechText')[speech ? 'enable' : 'disable'](); + this.findID('Show', 'Show/SpeechText')[speech ? 'enable' : 'disable'](); + this.findID('Copy', 'Show/SpeechText')[speech ? 'enable' : 'disable'](); } /** @@ -199,8 +199,8 @@ export class MJContextMenu extends ContextMenu { */ protected getBrailleMenu() { const braille = this.mathItem.outputData.braille; - this.findID('.Show', '.Show/BrailleCode')[braille ? 'enable' : 'disable'](); - this.findID('.Copy', '.Show/BrailleCode')[braille ? 'enable' : 'disable'](); + this.findID('Show', 'Show/BrailleCode')[braille ? 'enable' : 'disable'](); + this.findID('Copy', 'Show/BrailleCode')[braille ? 'enable' : 'disable'](); } /** @@ -208,8 +208,8 @@ export class MJContextMenu extends ContextMenu { */ protected getSvgMenu() { const svg = this.jax.SVG; - this.findID('.Show', '.Show/SvgImage')[svg ? 'enable' : 'disable'](); - this.findID('.Copy', '.Show/SvgImage')[svg ? 'enable' : 'disable'](); + this.findID('Show', 'Show/SvgImage')[svg ? 'enable' : 'disable'](); + this.findID('Copy', 'Show/SvgImage')[svg ? 'enable' : 'disable'](); } /** @@ -226,8 +226,8 @@ export class MJContextMenu extends ContextMenu { '') as string; disable = !this.errorMsg; } - this.findID('.Show', '.Show/Error')[disable ? 'disable' : 'enable'](); - this.findID('.Copy', '.Show/Error')[disable ? 'disable' : 'enable'](); + this.findID('Show', 'Show/Error')[disable ? 'disable' : 'enable'](); + this.findID('Copy', 'Show/Error')[disable ? 'disable' : 'enable'](); } /*======================================================================*/ diff --git a/ts/ui/menu/Menu.ts b/ts/ui/menu/Menu.ts index 79bb09e93..8c964154c 100644 --- a/ts/ui/menu/Menu.ts +++ b/ts/ui/menu/Menu.ts @@ -316,17 +316,17 @@ export class Menu { // lines.push( localize( - '.About/InputJax', + 'About/InputJax', this.document.inputJax.map((jax) => jax.name).join(', ') ), - localize('.About/OutputJax', this.document.outputJax.name), - localize('.About/DocType', this.document.kind) + localize('About/OutputJax', this.document.outputJax.name), + localize('About/DocType', this.document.kind) ); // // Add the loaded packages and their versions // if (MathJax && MathJax.loader) { - lines.push('
' + localize('.About/Modules')); + lines.push('
' + localize('About/Modules')); const Package = MathJax._.components.package.Package; const versions = (MathJax as any).loader.versions; for (const name of Array.from(Package.packages.keys()).sort( @@ -407,8 +407,8 @@ export class Menu { */ protected help() { InfoDialog.post({ - title: localize('.Title/Help'), - message: localize('.Help/Message'), + title: localize('Help/Title'), + message: localize('Help/Message'), adaptor: this.document.adaptor, extraNodes: [ this.document.adaptor.node( @@ -425,7 +425,7 @@ export class Menu { */ protected mathMLCode() { CopyDialog.post({ - title: localize('.Title/Mml'), + title: localize('Title/Mml'), message: this.menu.mathItem ? this.toMML(this.menu.mathItem) : '', adaptor: this.document.adaptor, code: true, @@ -437,7 +437,7 @@ export class Menu { */ protected originalText() { CopyDialog.post({ - title: localize('.Title/Source'), + title: localize('Title/Source'), message: this.menu.mathItem?.math ?? '', adaptor: this.document.adaptor, code: true, @@ -449,7 +449,7 @@ export class Menu { */ protected annotationBox() { CopyDialog.post({ - title: localize('.Title/Annotation'), + title: localize('Title/Annotation'), message: AnnotationMenu.annotation, adaptor: this.document.adaptor, code: true, @@ -461,7 +461,7 @@ export class Menu { */ public async svgImage() { CopyDialog.post({ - title: localize('.Title/Svg'), + title: localize('Title/Svg'), message: await this.toSVG(this.menu.mathItem), adaptor: this.document.adaptor, code: true, @@ -473,7 +473,7 @@ export class Menu { */ protected speechText() { CopyDialog.post({ - title: localize('.Title/Speech'), + title: localize('Title/Speech'), message: this.menu.mathItem?.outputData?.speech ?? '', adaptor: this.document.adaptor, code: true, @@ -485,7 +485,7 @@ export class Menu { */ protected brailleText() { CopyDialog.post({ - title: localize('.Title/Braille'), + title: localize('Title/Braille'), message: this.menu.mathItem?.outputData?.braille ?? '', adaptor: this.document.adaptor, code: true, @@ -497,7 +497,7 @@ export class Menu { */ protected errorMessage() { CopyDialog.post({ - title: localize('.Title/Error'), + title: localize('Title/Error'), message: this.menu.mathItem ? this.menu.errorMsg : '', adaptor: this.document.adaptor, code: true, @@ -518,7 +518,7 @@ export class Menu { text = `
${zoom.outerHTML}
`; } InfoDialog.post({ - title: localize('.Title/Zoom'), + title: localize('Title/Zoom'), message: text, adaptor: this.document.adaptor, styles: { @@ -665,41 +665,41 @@ export class Menu { ), ], items: [ - this.submenu('.Show', [ - this.command('.Show/MathMLcode', () => this.mathMLCode()), - this.command('.Show/Original', () => this.originalText()), + this.submenu('Show', [ + this.command('Show/MathMLcode', () => this.mathMLCode()), + this.command('Show/Original', () => this.originalText()), this.rule(), - this.command('.Show/SpeechText', () => this.speechText(), { + this.command('Show/SpeechText', () => this.speechText(), { disabled: true, }), - this.command('.Show/BrailleCode', () => this.brailleText(), { + this.command('Show/BrailleCode', () => this.brailleText(), { disabled: true, }), - this.command('.Show/SvgImage', () => this.svgImage(), { + this.command('Show/SvgImage', () => this.svgImage(), { disabled: true, }), - this.submenu('.Show/Annotation'), + this.submenu('Show/Annotation'), this.rule(), - this.command('.Show/Error', () => this.errorMessage(), { + this.command('Show/Error', () => this.errorMessage(), { disabled: true, }), ]), - this.submenu('.Copy', [ - this.command('.Show/MathMLcode', () => this.copyMathML()), - this.command('.Show/Original', () => this.copyOriginal()), + this.submenu('Copy', [ + this.command('Show/MathMLcode', () => this.copyMathML()), + this.command('Show/Original', () => this.copyOriginal()), this.rule(), - this.command('.Show/SpeechText', () => this.copySpeechText(), { + this.command('Show/SpeechText', () => this.copySpeechText(), { disabled: true, }), - this.command('.Show/BrailleCode', () => this.copyBrailleText(), { + this.command('Show/BrailleCode', () => this.copyBrailleText(), { disabled: true, }), - this.command('.Show/SvgImage', () => this.copySvgImage(), { + this.command('Show/SvgImage', () => this.copySvgImage(), { disabled: true, }), - this.submenu('.Copy/Annotation'), + this.submenu('Copy/Annotation'), this.rule(), - this.command('.Show/Error', () => this.copyErrorMessage(), { + this.command('Show/Error', () => this.copyErrorMessage(), { disabled: true, }), ]), @@ -709,17 +709,17 @@ export class Menu { 'Renderer', this.radioGroup('renderer', ['CHTML', 'SVG']) ), - this.submenu('.Wide/WideExpressions', [ + this.submenu('Wide/WideExpressions', [ this.radioGroup('overflow', [ - '.Wide/Overflow', - '.Wide/Scroll', - '.Wide/Linebreak', - '.Wide/Scale', - '.Wide/Truncate', - '.Wide/Elide', + 'Wide/Overflow', + 'Wide/Scroll', + 'Wide/Linebreak', + 'Wide/Scale', + 'Wide/Truncate', + 'Wide/Elide', ]), this.rule(), - this.checkbox('.Wide/BreakInline', 'breakInline'), + this.checkbox('Wide/BreakInline', 'breakInline'), ]), this.rule(), this.submenu('MathmlIncludes', [ @@ -730,27 +730,27 @@ export class Menu { ]), this.submenu('Language', this.languageSubmenu()), this.rule(), - this.submenu('.Zoom/ZoomTrigger', [ - this.command('.Zoom/ZoomNow', () => this.zoom(null, '')), + this.submenu('Zoom/ZoomTrigger', [ + this.command('Zoom/ZoomNow', () => this.zoom(null, '')), this.rule(), this.radioGroup('zoom', [ - '.Zoom/Click', - '.Zoom/DoubleClick', - '.Zoom/NoZoom', + 'Zoom/Click', + 'Zoom/DoubleClick', + 'Zoom/NoZoom', ]), this.rule(), - this.label('.Zoom/TriggerRequires'), - this.checkbox(MenuUtil.isMac ? 'Option' : '.Zoom/Alt', 'alt'), - this.checkbox('.ZoomC/ommand', 'cmd', { + this.label('Zoom/TriggerRequires'), + this.checkbox(MenuUtil.isMac ? 'Option' : 'Zoom/Alt', 'alt'), + this.checkbox('Zoom/Command', 'cmd', { hidden: !MenuUtil.isMac, }), - this.checkbox('.Zoom/Control', 'ctrl', { + this.checkbox('Zoom/Control', 'ctrl', { hidden: MenuUtil.isMac, }), - this.checkbox('.Zoom/Shift', 'shift'), + this.checkbox('Zoom/Shift', 'shift'), ]), this.submenu( - '.Zoom/ZoomFactor', + 'Zoom/ZoomFactor', this.radioGroup('zscale', [ '150%', '175%', @@ -800,57 +800,57 @@ export class Menu { this.radioGroup('brailleCode', ['nemeth', 'ueb', 'euro']), ]), this.submenu('Explorer', [ - this.submenu('.Highlight', [ + this.submenu('Highlight', [ this.submenu( - '.Highlight/Background', + 'Highlight/Background', this.radioGroup('backgroundColor', [ - '.Highlight/Blue', - '.Highlight/Red', - '.Highlight/Green', - '.Highlight/Yellow', - '.Highlight/Cyan', - '.Highlight/Magenta', - '.Highlight/White', - '.Highlight/Black', + 'Highlight/Blue', + 'Highlight/Red', + 'Highlight/Green', + 'Highlight/Yellow', + 'Highlight/Cyan', + 'Highlight/Magenta', + 'Highlight/White', + 'Highlight/Black', ]) ), { type: 'slider', variable: 'backgroundOpacity', content: ' ' }, this.submenu( - '.Highlight/Foreground', + 'Highlight/Foreground', this.radioGroup('foregroundColor', [ - '.Highlight/Black', - '.Highlight/White', - '.Highlight/Magenta', - '.Highlight/Cyan', - '.Highlight/Yellow', - '.Highlight/Green', - '.Highlight/Red', - '.Highlight/Blue', + 'Highlight/Black', + 'Highlight/White', + 'Highlight/Magenta', + 'Highlight/Cyan', + 'Highlight/Yellow', + 'Highlight/Green', + 'Highlight/Red', + 'Highlight/Blue', ]) ), { type: 'slider', variable: 'foregroundOpacity', content: ' ' }, this.rule(), this.radioGroup('highlight', [ - '.Highlight/None', - '.Highlight/Hover', - '.Highlight/Flame', + 'Highlight/None', + 'Highlight/Hover', + 'Highlight/Flame', ]), this.rule(), - this.checkbox('.Highlight/TreeColoring', 'treeColoring'), + this.checkbox('Highlight/TreeColoring', 'treeColoring'), ]), - this.submenu('.Magnification', [ + this.submenu('Magnification', [ this.radioGroup('magnification', [ - '.Magnification/None', - '.Magnification/Keyboard', - '.Magnification/Mouse', + 'Magnification/None', + 'Magnification/Keyboard', + 'Magnification/Mouse', ]), this.rule(), this.radioGroup('magnify', ['200%', '300%', '400%', '500%']), ]), - this.submenu('.Semantic/Info', [ - this.checkbox('.Semantic/Type', 'infoType'), - this.checkbox('.Semantic/Role', 'infoRole'), - this.checkbox('.Semantic/Prefix', 'infoPrefix'), + this.submenu('Semantic/Info', [ + this.checkbox('Semantic/Type', 'infoType'), + this.checkbox('Semantic/Role', 'infoRole'), + this.checkbox('Semantic/Prefix', 'infoPrefix'), ]), this.rule(), this.submenu('RoleDescription', [ @@ -863,7 +863,7 @@ export class Menu { AriaRoleDescription.NONE, ]), ]), - this.checkbox('.Tabbing/MathHelp', 'help'), + this.checkbox('Tabbing/MathHelp', 'help'), ]), this.submenu('Options', [ this.checkbox('Enrich', 'enrich'), @@ -872,9 +872,9 @@ export class Menu { disabled: true, }), this.rule(), - this.checkbox('.Tabbing/InTabOrder', 'inTabOrder'), - this.submenu('.Tabbing/TabSelects', [ - this.radioGroup('tabSelects', ['.Tabbing/all', '.Tabbing/last']), + this.checkbox('Tabbing/InTabOrder', 'inTabOrder'), + this.submenu('Tabbing/TabSelects', [ + this.radioGroup('tabSelects', ['Tabbing/all', 'Tabbing/last']), ]), this.rule(), this.checkbox('AssistiveMml', 'assistiveMml'), @@ -886,12 +886,12 @@ export class Menu { }) as MJContextMenu; const menu = this.menu; menu.settings = this.settings; - menu.findID('Settings', '.Wide/WideExpressions', '.Wide/Elide').disable(); + menu.findID('Settings', 'Wide/WideExpressions', 'Wide/Elide').disable(); menu.findID('Braille', 'ueb').hide(); menu.setJax(this.jax); this.checkLoadableItems(); const cache: [string, string][] = []; - MJContextMenu.DynamicSubmenus.set('.Show/Annotation', [ + MJContextMenu.DynamicSubmenus.set('Show/Annotation', [ AnnotationMenu.showAnnotations( () => this.annotationBox(), this.options.annotationTypes, @@ -899,7 +899,7 @@ export class Menu { ), '', ]); - MJContextMenu.DynamicSubmenus.set('.Copy/Annotation', [ + MJContextMenu.DynamicSubmenus.set('Copy/Annotation', [ AnnotationMenu.copyAnnotations(cache), '', ]); @@ -976,7 +976,7 @@ export class Menu { Object.assign(this.settings, settings); this.setA11y(settings); } catch (err) { - Locale.warn(COMPONENT, '.Warn/StorageError', err.message); + Locale.warn(COMPONENT, 'Warn/StorageError', err.message); } } @@ -998,7 +998,7 @@ export class Menu { } localStorage.setItem(Menu.LOCALE_STORAGE, this.settings.language); } catch (err) { - Locale.warn(COMPONENT, '.Warn/StorageError', err.message); + Locale.warn(COMPONENT, 'Warn/StorageError', err.message); } } @@ -1103,7 +1103,7 @@ export class Menu { this.loadComponent('output/' + name, () => { const startup = MathJax.startup; if (!(name in startup.constructors)) { - return fail(new Error(localize('.Warn/ComponentNotLoaded', name))); + return fail(new Error(localize('Warn/ComponentNotLoaded', name))); } startup.useOutput(name, true); startup.output = this.applyRendererOptions(startup.getOutputJax()); @@ -1183,7 +1183,7 @@ export class Menu { * @param {boolean} tab True for including math in the tab order, false for not */ protected setTabOrder(tab: boolean) { - const menu = this.menu.findID('Options', '.Tabbing/TabSelects'); + const menu = this.menu.findID('Options', 'Tabbing/TabSelects'); tab ? menu.enable() : menu.disable(); this.menu.store.inTaborder(tab); } @@ -1410,7 +1410,7 @@ export class Menu { const scale = (parseFloat(this.settings.scale) * 100) .toFixed(1) .replace(/.0$/, ''); - const percent = prompt(localize('.Scale/Prompt'), scale + '%'); + const percent = prompt(localize('Scale/Prompt'), scale + '%'); if (this.current) { const speech = (this.menu.mathItem as ExplorerMathItem).explorers.speech; speech.refocus = this.current; @@ -1422,10 +1422,10 @@ export class Menu { if (scale) { this.menu.pool.lookup('scale').setValue(String(scale)); } else { - alert(localize('.Scale/NonZero')); + alert(localize('Scale/NonZero')); } } else { - alert(localize('.Scale/Percent', '120%')); + alert(localize('Scale/Percent', '120%')); } } } @@ -1586,7 +1586,7 @@ export class Menu { protected async toSVG(math: HTMLMATHITEM): Promise { const jax = this.jax.SVG; if (!jax) { - return localize('.Svg/NotProduced'); + return localize('Svg/NotProduced'); } const adaptor = jax.adaptor; const cache = jax.options.fontCache; diff --git a/ts/ui/menu/__locales__/de.json b/ts/ui/menu/__locales__/de.json index d5c267c7d..605b3f4e2 100644 --- a/ts/ui/menu/__locales__/de.json +++ b/ts/ui/menu/__locales__/de.json @@ -1,89 +1,89 @@ { - ".About/DocType": "Dokumenttyp: %1", - ".About/InputJax": "Einbabe Jax: %1", - ".About/Modules": "Geladene Module:", - ".About/OutputJax": "Ausgabe Jax: %1", - ".Clearspeak/CurrentPrefs": "Aktuelle Einstellungen", - ".Clearspeak/NoPrefs": "Keine Einstellungen", - ".Clearspeak/PrefsFor": "Einstellungen für %1", - ".Clearspeak/SelectPrefs": "Einstellungen auswählen", - ".Copy": "In Zwischenablage kopieren", - ".Copy/Annotation": "Annotationen", - ".Help/Message": "

MathJax ist eine JavaScript-Bibliothek, die es Seitenautoren ermöglicht, mathematische Formeln in ihre Webseiten einzubinden. Als Leser müssen Sie nichts tun, um dies zu nutzen.

Browser: MathJax funktioniert in allen modernen Browsern, einschließlich Edge, Firefox, Chrome, Safari, Opera und den meisten mobilen Browsern.

Mathematik-Menü: MathJax fügt den Formeln ein Kontextmenü hinzu. Klicken Sie mit der rechten Maustaste oder bei gedrückter STRG-Taste auf eine beliebige mathematische Formel, um das Menü aufzurufen.

Mathematik anzeigen als: Mit diesen Optionen können Sie den Quellcode der Formel (als MathML oder im Originalformat) anzeigen.

In die Zwischenablage kopieren: Diese Befehle kopieren den Quellcode der Formel als MathML oder im Originalformat in die Zwischenablage (wenn der Browser dies unterstützt).

Mathematik-Einstellungen: Hiermit können Sie Funktionen von MathJax steuern, wie z. B. die Größe der mathematischen Ausdrücke, den Mechanismus zur Darstellung von Gleichungen und den Umgang mit zu breiten Gleichungen, sowie die Sprache, die für die Menüs und Fehlermeldungen von MathJax verwendet werden soll.

Barrierefreiheit: MathJax kann mit Bildschirmleseprogrammen zusammenarbeiten, um Mathematik für Sehbehinderte zugänglich zu machen. Aktivieren Sie die Sprach- oder Braille-Generierung, um die Erstellung von Sprachausgaben und die Möglichkeit zur Interaktion mit Ausdrücken zu ermöglichen. Sie können den Stil des Explorers über dessen Menü steuern.

Mathematik-Zoom: Wenn Sie Schwierigkeiten haben, eine Gleichung zu lesen, kann MathJax die Darstellung vergrößern, damit Sie sie besser erkennen können, oder Sie können alle mathematischen Formeln auf der Seite vergrößern. Aktivieren Sie diese Funktionen im Menü Mathematik-Einstellungen.

Einstellungen: MathJax nutzt die localStorage-Datenbank Ihres Browsers, um von Ihnen gewählte Menüeinstellungen in Ihrem Browser zu speichern. Diese werden weder an MathJax übertragen noch zu Nutzerverfolgung genutzt.

", - ".Highlight": "Highlight", - ".Highlight/Background": "Hintergrund", - ".Highlight/Black": "Schwarz", - ".Highlight/Blue": "Blau", - ".Highlight/Cyan": "Cyan", - ".Highlight/Flame": "Flame", - ".Highlight/Foreground": "Vordergrund", - ".Highlight/Green": "Green", - ".Highlight/Hover": "Schweben", - ".Highlight/Magenta": "Magenta", - ".Highlight/None": "Kein", - ".Highlight/Red": "Rot", - ".Highlight/TreeColoring": "Baumfärbung", - ".Highlight/White": "Weiß", - ".Highlight/Yellow": "Gelb", - ".Magnification": "Vergrößerung", - ".Magnification/Keyboard": "Tastatur", - ".Magnification/Mouse": "Maus", - ".Magnification/None": "Keine", + "About/DocType": "Dokumenttyp: %1", + "About/InputJax": "Einbabe Jax: %1", + "About/Modules": "Geladene Module:", + "About/OutputJax": "Ausgabe Jax: %1", + "Clearspeak/CurrentPrefs": "Aktuelle Einstellungen", + "Clearspeak/NoPrefs": "Keine Einstellungen", + "Clearspeak/PrefsFor": "Einstellungen für %1", + "Clearspeak/SelectPrefs": "Einstellungen auswählen", + "Clearspeak/Title": "Clearspeak Einstellungen", + "Copy": "In Zwischenablage kopieren", + "Copy/Annotation": "Annotationen", + "Help/Message": "

MathJax ist eine JavaScript-Bibliothek, die es Seitenautoren ermöglicht, mathematische Formeln in ihre Webseiten einzubinden. Als Leser müssen Sie nichts tun, um dies zu nutzen.

Browser: MathJax funktioniert in allen modernen Browsern, einschließlich Edge, Firefox, Chrome, Safari, Opera und den meisten mobilen Browsern.

Mathematik-Menü: MathJax fügt den Formeln ein Kontextmenü hinzu. Klicken Sie mit der rechten Maustaste oder bei gedrückter STRG-Taste auf eine beliebige mathematische Formel, um das Menü aufzurufen.

Mathematik anzeigen als: Mit diesen Optionen können Sie den Quellcode der Formel (als MathML oder im Originalformat) anzeigen.

In die Zwischenablage kopieren: Diese Befehle kopieren den Quellcode der Formel als MathML oder im Originalformat in die Zwischenablage (wenn der Browser dies unterstützt).

Mathematik-Einstellungen: Hiermit können Sie Funktionen von MathJax steuern, wie z. B. die Größe der mathematischen Ausdrücke, den Mechanismus zur Darstellung von Gleichungen und den Umgang mit zu breiten Gleichungen, sowie die Sprache, die für die Menüs und Fehlermeldungen von MathJax verwendet werden soll.

Barrierefreiheit: MathJax kann mit Bildschirmleseprogrammen zusammenarbeiten, um Mathematik für Sehbehinderte zugänglich zu machen. Aktivieren Sie die Sprach- oder Braille-Generierung, um die Erstellung von Sprachausgaben und die Möglichkeit zur Interaktion mit Ausdrücken zu ermöglichen. Sie können den Stil des Explorers über dessen Menü steuern.

Mathematik-Zoom: Wenn Sie Schwierigkeiten haben, eine Gleichung zu lesen, kann MathJax die Darstellung vergrößern, damit Sie sie besser erkennen können, oder Sie können alle mathematischen Formeln auf der Seite vergrößern. Aktivieren Sie diese Funktionen im Menü Mathematik-Einstellungen.

Einstellungen: MathJax nutzt die localStorage-Datenbank Ihres Browsers, um von Ihnen gewählte Menüeinstellungen in Ihrem Browser zu speichern. Diese werden weder an MathJax übertragen noch zu Nutzerverfolgung genutzt.

", + "Help/Title": "MathJax Hilfe", + "Highlight": "Highlight", + "Highlight/Background": "Hintergrund", + "Highlight/Black": "Schwarz", + "Highlight/Blue": "Blau", + "Highlight/Cyan": "Cyan", + "Highlight/Flame": "Flame", + "Highlight/Foreground": "Vordergrund", + "Highlight/Green": "Green", + "Highlight/Hover": "Schweben", + "Highlight/Magenta": "Magenta", + "Highlight/None": "Kein", + "Highlight/Red": "Rot", + "Highlight/TreeColoring": "Baumfärbung", + "Highlight/White": "Weiß", + "Highlight/Yellow": "Gelb", + "Magnification": "Vergrößerung", + "Magnification/Keyboard": "Tastatur", + "Magnification/Mouse": "Maus", + "Magnification/None": "Keine", "RoleDescription": "Mathematik beschreiben als", - ".Scale/NonZero": "Der Skalierungsfaktor darf nicht Null sein", - ".Scale/Percent": "Der Skalierungsfaktor muss ein Prozentsatz sein (z. B. %1)", - ".Scale/Prompt": "Skalierungsfaktor für alle Formeln (im Vergleich zum umgebenden Text) setzen auf", - ".Semantic/Info": "Semantische Informationen", - ".Semantic/Prefix": "Präfix", - ".Semantic/Role": "Rolle", - ".Semantic/Type": "Typ", - ".Show": "Mathematik anzeigen als", - ".Show/Annotation": "Anmerkung", - ".Show/BrailleCode": "Braille-Code", - ".Show/Commands": "%1 Befehle", - ".Show/Error": "Fehlermeldung", - ".Show/MathMLcode": "MathML Code", - ".Show/Original": "Originalform", - ".Show/OriginalMathML": "original MathML", - ".Show/SpeechText": "Sprachausgabe", - ".Show/SvgImage": "SVG Code", - ".Svg/NotProduced": "SVG kann nicht erzeugt werden.
Wechseln Sie zunächst zur SVG-Ausgabe.", - ".Tabbing/InTabOrder": "In Tab-Reihenfolge einbeziehen", - ".Tabbing/MathHelp": "Hilfemeldung bei Fokus", - ".Tabbing/TabSelects": "Tabulatorfokus auf", - ".Tabbing/all": "gesamten Ausdruck", - ".Tabbing/last": "zuletzt erkundeten Knoten", - ".Title/Annotation": "MathJax Annotationstext", - ".Title/Braille": "MathJax Brailleschrift", - ".Title/Clearspeak": "Clearspeak Einstellungen", - ".Title/Error": "MathJax Fehlermeldung", - ".Title/Help": "MathJax Hilfe", - ".Title/Mml": "MathJax MathML-Ausdruck", - ".Title/Source": "MathJax original Quelltext", - ".Title/Speech": "MathJax Sprachausgabe", - ".Title/Svg": "MathJax SVG als Bild", - ".Title/Zoom": "MathJax vergrößerter Ausdruck", - ".Warn/CantCopy": "%1 kann nicht in die Zwischenablage kopiert werden", - ".Warn/ComponentNotLoaded": "Komponente %1 nicht geladen", - ".Warn/StorageError": "MathJax localStorage Fehler: %1", - ".Wide/BreakInline": "Inline-Zeilenumbrüche zulassen", - ".Wide/Elide": "Auslassen", - ".Wide/Linebreak": "Zeilenumbruch", - ".Wide/Overflow": "Überlauf", - ".Wide/Scale": "Skalierung", - ".Wide/Scroll": "Scrollen", - ".Wide/Truncate": "Kürzen", - ".Wide/WideExpressions": "Breite Ausdrücke", - ".Zoom/Alt": "Alt", - ".Zoom/Click": "Klicken", - ".Zoom/Control": "Steuerung", - ".Zoom/DoubleClick": "Doppelklick", - ".Zoom/NoZoom": "Kein Zoom", - ".Zoom/Shift": "Umschalt", - ".Zoom/TriggerRequires": "Auslöser erfordert:", - ".Zoom/ZoomFactor": "Zoomfaktor", - ".Zoom/ZoomNow": "Jetzt einmal zoomen", - ".Zoom/ZoomTrigger": "Zoomauslöser", + "Scale/NonZero": "Der Skalierungsfaktor darf nicht Null sein", + "Scale/Percent": "Der Skalierungsfaktor muss ein Prozentsatz sein (z. B. %1)", + "Scale/Prompt": "Skalierungsfaktor für alle Formeln (im Vergleich zum umgebenden Text) setzen auf", + "Semantic/Info": "Semantische Informationen", + "Semantic/Prefix": "Präfix", + "Semantic/Role": "Rolle", + "Semantic/Type": "Typ", + "Show": "Mathematik anzeigen als", + "Show/Annotation": "Anmerkung", + "Show/BrailleCode": "Braille-Code", + "Show/Commands": "%1 Befehle", + "Show/Error": "Fehlermeldung", + "Show/MathMLcode": "MathML Code", + "Show/Original": "Originalform", + "Show/OriginalMathML": "original MathML", + "Show/SpeechText": "Sprachausgabe", + "Show/SvgImage": "SVG Code", + "Svg/NotProduced": "SVG kann nicht erzeugt werden.
Wechseln Sie zunächst zur SVG-Ausgabe.", + "Tabbing/InTabOrder": "In Tab-Reihenfolge einbeziehen", + "Tabbing/MathHelp": "Hilfemeldung bei Fokus", + "Tabbing/TabSelects": "Tabulatorfokus auf", + "Tabbing/all": "gesamten Ausdruck", + "Tabbing/last": "zuletzt erkundeten Knoten", + "Title/Annotation": "MathJax Annotationstext", + "Title/Braille": "MathJax Brailleschrift", + "Title/Error": "MathJax Fehlermeldung", + "Title/Mml": "MathJax MathML-Ausdruck", + "Title/Source": "MathJax original Quelltext", + "Title/Speech": "MathJax Sprachausgabe", + "Title/Svg": "MathJax SVG als Bild", + "Title/Zoom": "MathJax vergrößerter Ausdruck", + "Warn/CantCopy": "%1 kann nicht in die Zwischenablage kopiert werden", + "Warn/ComponentNotLoaded": "Komponente %1 nicht geladen", + "Warn/StorageError": "MathJax localStorage Fehler: %1", + "Wide/BreakInline": "Inline-Zeilenumbrüche zulassen", + "Wide/Elide": "Auslassen", + "Wide/Linebreak": "Zeilenumbruch", + "Wide/Overflow": "Überlauf", + "Wide/Scale": "Skalierung", + "Wide/Scroll": "Scrollen", + "Wide/Truncate": "Kürzen", + "Wide/WideExpressions": "Breite Ausdrücke", + "Zoom/Alt": "Alt", + "Zoom/Click": "Klicken", + "Zoom/Control": "Steuerung", + "Zoom/DoubleClick": "Doppelklick", + "Zoom/NoZoom": "Kein Zoom", + "Zoom/Shift": "Umschalt", + "Zoom/TriggerRequires": "Auslöser erfordert:", + "Zoom/ZoomFactor": "Zoomfaktor", + "Zoom/ZoomNow": "Jetzt einmal zoomen", + "Zoom/ZoomTrigger": "Zoomauslöser", "A11yLanguage": "Sprache", "About": "Über MathJax", "Accessibility": "\u00A0\u00A0 Barrierefreiheit:", diff --git a/ts/ui/menu/__locales__/en.json b/ts/ui/menu/__locales__/en.json index d2625de09..235fe465b 100644 --- a/ts/ui/menu/__locales__/en.json +++ b/ts/ui/menu/__locales__/en.json @@ -1,89 +1,89 @@ { - ".About/DocType": "Document Type: %1", - ".About/InputJax": "Input Jax: %1", - ".About/Modules": "Modules Loaded:", - ".About/OutputJax": "Outut Jax: %1", - ".Clearspeak/CurrentPrefs": "Current Preferences", - ".Clearspeak/NoPrefs": "No Preferences", - ".Clearspeak/PrefsFor": "Preferences for %1", - ".Clearspeak/SelectPrefs": "Select Preferences", - ".Copy": "Copy to Clipboard", - ".Copy/Annotation": "Annotation", - ".Help/Message": "

MathJax is a JavaScript library that allows page authors to include mathematics within their web pages. As a reader, you don't need to do anything to make that happen.

Browsers: MathJax works with all modern browsers including Edge, Firefox, Chrome, Safari, Opera, and most mobile browsers.

Math Menu: MathJax adds a contextual menu to equations. Right-click or CTRL-click on any mathematics to access the menu.

Show Math As: These options allow you to view the formula's source markup (as MathML or in its original format).

Copy to Clipboard: These options copy the formula's source markup, as MathML or in its original format, to the clipboard (in browsers that support that).

Math Settings: These give you control over features of MathJax, such the size of the mathematics, the mechanism used to display equations, how to handle equations that are too wide, and the language to use for MathJax's menus and error messages.

Accessibility: MathJax can work with screen readers to make mathematics accessible to the visually impaired. Turn on speech or braille generation to enable creation of speech strings and the ability to investigate expressions interactively. You can control the style of the explorer in its menu.

Math Zoom: If you are having difficulty reading an equation, MathJax can enlarge it to help you see it better, or you can scale all the math on the page to make it larger. Turn these features on in the Math Settings menu.

Preferences: MathJax uses your browser's localStorage database to save the preferences set via this menu locally in your browser. These are not used to track you, and are not transferred or used remotely by MathJax in any way.

", - ".Highlight": "Highlight", - ".Highlight/Background": "Background", - ".Highlight/Black": "Black", - ".Highlight/Blue": "Blue", - ".Highlight/Cyan": "Cyan", - ".Highlight/Flame": "Flame", - ".Highlight/Foreground": "Foreground", - ".Highlight/Green": "Green", - ".Highlight/Hover": "Hover", - ".Highlight/Magenta": "Magenta", - ".Highlight/None": "None", - ".Highlight/Red": "Red", - ".Highlight/TreeColoring": "Tree Coloring", - ".Highlight/White": "White", - ".Highlight/Yellow": "Yellow", - ".Magnification": "Magnification", - ".Magnification/Keyboard": "Keyboard", - ".Magnification/Mouse": "Mouse", - ".Magnification/None": "None", + "About/DocType": "Document Type: %1", + "About/InputJax": "Input Jax: %1", + "About/Modules": "Modules Loaded:", + "About/OutputJax": "Outut Jax: %1", + "Clearspeak/CurrentPrefs": "Current Preferences", + "Clearspeak/NoPrefs": "No Preferences", + "Clearspeak/PrefsFor": "Preferences for %1", + "Clearspeak/SelectPrefs": "Select Preferences", + "Clearspeak/Title": "Clearspeak Preferences", + "Copy": "Copy to Clipboard", + "Copy/Annotation": "Annotation", + "Help/Message": "

MathJax is a JavaScript library that allows page authors to include mathematics within their web pages. As a reader, you don't need to do anything to make that happen.

Browsers: MathJax works with all modern browsers including Edge, Firefox, Chrome, Safari, Opera, and most mobile browsers.

Math Menu: MathJax adds a contextual menu to equations. Right-click or CTRL-click on any mathematics to access the menu.

Show Math As: These options allow you to view the formula's source markup (as MathML or in its original format).

Copy to Clipboard: These options copy the formula's source markup, as MathML or in its original format, to the clipboard (in browsers that support that).

Math Settings: These give you control over features of MathJax, such the size of the mathematics, the mechanism used to display equations, how to handle equations that are too wide, and the language to use for MathJax's menus and error messages.

Accessibility: MathJax can work with screen readers to make mathematics accessible to the visually impaired. Turn on speech or braille generation to enable creation of speech strings and the ability to investigate expressions interactively. You can control the style of the explorer in its menu.

Math Zoom: If you are having difficulty reading an equation, MathJax can enlarge it to help you see it better, or you can scale all the math on the page to make it larger. Turn these features on in the Math Settings menu.

Preferences: MathJax uses your browser's localStorage database to save the preferences set via this menu locally in your browser. These are not used to track you, and are not transferred or used remotely by MathJax in any way.

", + "Help/Title": "MathJax Help", + "Highlight": "Highlight", + "Highlight/Background": "Background", + "Highlight/Black": "Black", + "Highlight/Blue": "Blue", + "Highlight/Cyan": "Cyan", + "Highlight/Flame": "Flame", + "Highlight/Foreground": "Foreground", + "Highlight/Green": "Green", + "Highlight/Hover": "Hover", + "Highlight/Magenta": "Magenta", + "Highlight/None": "None", + "Highlight/Red": "Red", + "Highlight/TreeColoring": "Tree Coloring", + "Highlight/White": "White", + "Highlight/Yellow": "Yellow", + "Magnification": "Magnification", + "Magnification/Keyboard": "Keyboard", + "Magnification/Mouse": "Mouse", + "Magnification/None": "None", "RoleDescription": "Describe math as", - ".Scale/NonZero": "The scale should not be zero", - ".Scale/Percent": "The scale should be a percentage (e.g., %1)", - ".Scale/Prompt": "Scale all mathematics (compared to surrounding text) by", - ".Semantic/Info": "Semantic Info", - ".Semantic/Prefix": "Prefix", - ".Semantic/Role": "Role", - ".Semantic/Type": "Type", - ".Show": "Show Math As", - ".Show/Annotation": "Annotation", - ".Show/BrailleCode": "Braille Code", - ".Show/Commands": "%1 Commands", - ".Show/Error": "Error Message", - ".Show/MathMLcode": "MathML Code", - ".Show/Original": "Original Form", - ".Show/OriginalMathML": "Original MathML", - ".Show/SpeechText": "Speech Text", - ".Show/SvgImage": "SVG Image", - ".Svg/NotProduced": "SVG can't be produced.
Try switching to SVG output first.", - ".Tabbing/InTabOrder": "Include in Tab Order", - ".Tabbing/MathHelp": "Help message on focus", - ".Tabbing/TabSelects": "Tabbing Focuses on", - ".Tabbing/all": "Whole Expression", - ".Tabbing/last": "Last Explored Node", - ".Title/Annotation": "MathJax Annotation Text", - ".Title/Braille": "MathJax Braille Text", - ".Title/Clearspeak": "Clearspeak Preferences", - ".Title/Error": "MathJax Error Message", - ".Title/Help": "MathJax Help", - ".Title/Mml": "MathJax MathML Expression", - ".Title/Source": "MathJax Original Source", - ".Title/Speech": "MathJax Speech Text", - ".Title/Svg": "MathJax SVG Image", - ".Title/Zoom": "MathJax Zoomed Expression", - ".Warn/CantCopy": "Can't copy to clipboard: %1", - ".Warn/ComponentNotLoaded": "Component %1 not loaded", - ".Warn/StorageError": "MathJax localStorage error: %1", - ".Wide/BreakInline": "Allow In-line Breaks", - ".Wide/Elide": "Elide", - ".Wide/Linebreak": "Linebreak", - ".Wide/Overflow": "Overflow", - ".Wide/Scale": "Scale", - ".Wide/Scroll": "Scroll", - ".Wide/Truncate": "Truncate", - ".Wide/WideExpressions": "Wide Expressions", - ".Zoom/Alt": "Alt", - ".Zoom/Click": "Click", - ".Zoom/Control": "Control", - ".Zoom/DoubleClick": "Double-Click", - ".Zoom/NoZoom": "No Zoom", - ".Zoom/Shift": "Shift", - ".Zoom/TriggerRequires": "Trigger Requires:", - ".Zoom/ZoomFactor": "Zoom Factor", - ".Zoom/ZoomNow": "Zoom Once Now", - ".Zoom/ZoomTrigger": "Zoom Trigger", + "Scale/NonZero": "The scale should not be zero", + "Scale/Percent": "The scale should be a percentage (e.g., %1)", + "Scale/Prompt": "Scale all mathematics (compared to surrounding text) by", + "Semantic/Info": "Semantic Info", + "Semantic/Prefix": "Prefix", + "Semantic/Role": "Role", + "Semantic/Type": "Type", + "Show": "Show Math As", + "Show/Annotation": "Annotation", + "Show/BrailleCode": "Braille Code", + "Show/Commands": "%1 Commands", + "Show/Error": "Error Message", + "Show/MathMLcode": "MathML Code", + "Show/Original": "Original Form", + "Show/OriginalMathML": "Original MathML", + "Show/SpeechText": "Speech Text", + "Show/SvgImage": "SVG Image", + "Svg/NotProduced": "SVG can't be produced.
Try switching to SVG output first.", + "Tabbing/InTabOrder": "Include in Tab Order", + "Tabbing/MathHelp": "Help message on focus", + "Tabbing/TabSelects": "Tabbing Focuses on", + "Tabbing/all": "Whole Expression", + "Tabbing/last": "Last Explored Node", + "Title/Annotation": "MathJax Annotation Text", + "Title/Braille": "MathJax Braille Text", + "Title/Error": "MathJax Error Message", + "Title/Mml": "MathJax MathML Expression", + "Title/Source": "MathJax Original Source", + "Title/Speech": "MathJax Speech Text", + "Title/Svg": "MathJax SVG Image", + "Title/Zoom": "MathJax Zoomed Expression", + "Warn/CantCopy": "Can't copy to clipboard: %1", + "Warn/ComponentNotLoaded": "Component %1 not loaded", + "Warn/StorageError": "MathJax localStorage error: %1", + "Wide/BreakInline": "Allow In-line Breaks", + "Wide/Elide": "Elide", + "Wide/Linebreak": "Linebreak", + "Wide/Overflow": "Overflow", + "Wide/Scale": "Scale", + "Wide/Scroll": "Scroll", + "Wide/Truncate": "Truncate", + "Wide/WideExpressions": "Wide Expressions", + "Zoom/Alt": "Alt", + "Zoom/Click": "Click", + "Zoom/Control": "Control", + "Zoom/DoubleClick": "Double-Click", + "Zoom/NoZoom": "No Zoom", + "Zoom/Shift": "Shift", + "Zoom/TriggerRequires": "Trigger Requires:", + "Zoom/ZoomFactor": "Zoom Factor", + "Zoom/ZoomNow": "Zoom Once Now", + "Zoom/ZoomTrigger": "Zoom Trigger", "A11yLanguage": "Language", "About": "About MathJax", "Accessibility": "\u00A0\u00A0 Accessibility:", From 88a2c5b47f88ebbe1b4acc21b18d97de19c1fd2a Mon Sep 17 00:00:00 2001 From: zorkow Date: Mon, 8 Jun 2026 23:18:50 +0200 Subject: [PATCH 14/20] fixes missing initialized field in Locale --- ts/util/Locale.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/ts/util/Locale.ts b/ts/util/Locale.ts index 20e442a2f..8463af3b2 100644 --- a/ts/util/Locale.ts +++ b/ts/util/Locale.ts @@ -33,6 +33,7 @@ export type namedData = { [name: string | number]: string }; * The Locale class for handling localized messages */ export class Locale { + public static initialized: boolean = false; /** * The current locale */ From ec0da783a188276e980658431b06cd4c29611e54 Mon Sep 17 00:00:00 2001 From: zorkow Date: Wed, 10 Jun 2026 12:51:37 +0200 Subject: [PATCH 15/20] fix de for German --- ts/core/__locales__/de.json | 38 ++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/ts/core/__locales__/de.json b/ts/core/__locales__/de.json index 7a9a20afc..915be84b9 100644 --- a/ts/core/__locales__/de.json +++ b/ts/core/__locales__/de.json @@ -4,40 +4,40 @@ "Bit/Max": "Maximale Anzahl bereits zugewiesener Bits", "Bit/Unknown": "Unbekannter Name des Bitfelds: %1", "CantInsertCSS": "Die CSS-Regel '%1' kann nicht eingefügt werden: %2", - "CantLoad": "'%1' kann nicht geladen werden%2", + "CantLoad": "'%1'%2 kann nicht geladen werden", "Dialog/Btn/Close": "Dialogfeld schließen", "Dialog/Btn/Help": "Dialoghilfe", - "Dialog/CantCopy": "Kann nicht in die Zwischenablage kopiert werden: %1", + "Dialog/CantCopy": "Kann nicht in die Zwischenablage kopieren: %1", "Dialog/CopyToClip": "In die Zwischenablage kopieren", - "Dialog/Help/Message": "

Die Dialogfelder in MathJax lassen sich verschieben und in der Größe anpassen.

\n

Mausbenutzer können durch Ziehen an einer der Kanten das Dialogfeld vergrößern oder verkleinern, indem sie diese Seite verschieben. Durch Ziehen an einer der Ecken werden die beiden Seiten verändert, die an dieser Ecke aufeinandertreffen. Durch Ziehen an einer anderen Stelle des Dialograhmens wird das Dialogfeld verschoben, ohne seine Größe zu verändern.

\n

Für Tastaturbenutzer gibt es zwei Möglichkeiten, die Position und Größe des Dialogfelds anzupassen. Zunächst halten Sie die Taste Alt oder Option gedrückt und drücken eine der Pfeiltasten, um das Dialogfeld in die gewünschte Richtung zu verschieben. Halten Sie die Taste Win oder Command gedrückt und drücken Sie eine der Pfeiltasten, um das Dialogfeld zu vergrößern oder zu verkleinern. Mit den Pfeiltasten nach links und rechts verschieben Sie den rechten Rand des Dialogfelds, mit den Pfeiltasten nach oben und unten den unteren Rand des Dialogfelds.

\n

Da es für manche Benutzer schwierig sein kann, zwei Tasten gleichzeitig gedrückt zu halten, besteht die zweite Möglichkeit darin, die Tasten m zu drücken, um den „Verschiebungsmodus“ zu starten, und dann das Dialogfeld mit den Pfeiltasten in die gewünschte Richtung zu verschieben. Drücken Sie erneut m, um die Bewegung des Dialogfelds zu beenden. Drücken Sie ebenfalls s, um den „Größenänderungsmodus“ zu starten und zu beenden, in dem die Pfeiltasten die Größe des Dialogfelds ändern.

\n

Wenn Sie bei beiden oben beschriebenen Methoden die Umschalt--Taste zusammen mit der Pfeiltaste gedrückt halten, werden größere Änderungen an der Größe oder Position vorgenommen.

\n

Verwenden Sie die Tabulatortaste, um zwischen Text, Schaltflächen und Links innerhalb des Dialogfelds zu wechseln. Die Eingabetaste oder die Leertaste aktiviert das aktuell ausgewählte Element. Die Esc-Taste schließt das Dialogfeld, ebenso wie ein Klick außerhalb des Dialogfelds oder ein Klick auf das Symbol „\u00D7“ in der oberen rechten Ecke des Dialogfelds.

", + "Dialog/Help/Message": "

Die Dialogfelder in MathJax lassen sich verschieben und in der Größe anpassen.

\n

Mausbenutzer können durch Ziehen an einer der Kanten das Dialogfeld vergrößern oder verkleinern. Durch Ziehen an einer der Ecken werden die beiden Seiten verändert, die an dieser Ecke aufeinandertreffen. Ziehen an einer anderen Stelle des Dialograhmens verschiebt das Dialogfeld, ohne seine Größe zu verändern.

\n

Für Tastaturbenutzer gibt es zwei Möglichkeiten, die Position und Größe des Dialogfelds anzupassen. Zunächst halten Sie die Taste Alt oder Option gedrückt und drücken eine der Pfeiltasten, um das Dialogfeld in die gewünschte Richtung zu verschieben. Halten Sie die Taste Win oder Strg gedrückt und drücken Sie eine der Pfeiltasten, um das Dialogfeld zu vergrößern oder zu verkleinern. Mit den Pfeiltasten links und rechts verschieben Sie den rechten Rand des Dialogfelds, mit den Pfeiltasten aufwärts und abwärts den unteren Rand des Dialogfelds.

\n

Da es für manche Benutzer schwierig sein kann, zwei Tasten gleichzeitig gedrückt zu halten, besteht die zweite Möglichkeit darin, die Tasten m zu drücken, um den „Verschiebungsmodus“ zu starten, und dann das Dialogfeld mit den Pfeiltasten in die gewünschte Richtung zu verschieben. Drücken Sie erneut m, um die Bewegung des Dialogfelds zu beenden. Drücken Sie ebenfalls s, um den „Größenänderungsmodus“ zu starten und zu beenden, in dem die Pfeiltasten die Größe des Dialogfelds ändern.

\n

Wenn Sie bei beiden oben beschriebenen Methoden die Umschalt--Taste zusammen mit der Pfeiltaste gedrückt halten, werden größere Änderungen an der Größe oder Position vorgenommen.

\n

Verwenden Sie die Tabulatortaste, um zwischen Text, Schaltflächen und Links innerhalb des Dialogfelds zu wechseln. Die Eingabetaste oder die Leertaste aktiviert das aktuell ausgewählte Element. Die Esc-Taste ebenso wie ein Klick außerhalb des Dialogfelds oder ein Klick auf das Symbol „\u00D7“ in der oberen rechten Ecke des Dialogfelds, schließt das Dialogfeld.

", "Dialog/Help/Title": "MathJax Dialog Hilfe", - "FontData/BadAsync": "MathJax(%1): %2 muss angegeben und synchron sein\n Versuchen Sie, %3 und %4 zu importieren", - "FontData/CantLoad": "Die dynamische Datei '%1' konnte nicht geladen werden", + "FontData/BadAsync": "MathJax(%1): %2 muss spezifiziert und synchron sein\n Versuchen Sie, %3 und %4 zu importieren", + "FontData/CantLoad": "Dynamische Datei '%1' konnte nicht geladen werden", "FontData/NoData": "Für %1 wurden keine Zeichendaten geladen", - "HandlerNotDefined": "Handler '%1' ist nicht definiert (wurde es geladen?)", - "InputError": "Fehler bei der mathematischen Eingabe", - "InputJaxNotDefined": "Input Jax '%1' ist nicht definiert (wurde es geladen?)", - "MML/Arity": "Falsche Anzahl von untergeordneten Elementen für den Knoten '%1'", + "HandlerNotDefined": "Handler '%1' ist nicht definiert (wurde er geladen?)", + "InputError": "Mathematischer Syntaxfehler", + "InputJaxNotDefined": "Input Jax '%1' ist nicht definiert (wurde er geladen?)", + "MML/Arity": "Falsche Anzahl von Kinderknoten für den Knoten '%1'", "MML/BadAttr": "Unbekannte Attribute für den Knoten '%1': %2", "MML/BadNesting": "Falsche Verschachtelung von Math-Tags", "MML/BadVariant": "Ungültige mathvariant: %1", - "MML/EqualPrescripts": "Es muss eine gleiche Anzahl von Vorzeichen jedes Typs vorhanden sein", - "MML/EqualScripts": "Es muss eine gleiche Anzahl von Skripten jedes Typs vorhanden sein", - "MML/NoVariant": "Es sollten keine untergeordneten Elemente für '%1'-Knoten vorhanden sein", + "MML/EqualPrescripts": "Benötigt die gleiche Anzahl von prescript Elementen jedes Typs", + "MML/EqualScripts": "Benötigt die gleiche Anzahl von script Elementen jedes Typs", + "MML/NoVariant": "'%1'-Knoten darf keine Kinderknoten haben", "MML/OnlyOnce": "%1 darf in %2 nur einmal vorkommen", - "MML/TokenChild": "%1 darf nur ein untergeordnetes Element eines Token-Elements sein", + "MML/TokenChild": "%1 darf nur ein Kinderknoten eines Token-Elements sein", "MML/mglyphAttr": "mglyph muss entweder die Attribute src oder fontfamily sowie das Attribut index aufweisen", - "MML/mmultscriptsChild": "%1 muss ein untergeordnetes Element von mmultiscripts sein", + "MML/mmultscriptsChild": "%1 muss ein Kinderknoten eines mmultiscripts Element sein", "MML/mtableChild": "%1 kann nur ein Kind von mtable sein", "MML/mtableChildren": "Kinder von '%1' müssen mtr oder mlabeledtr sein", "MML/mtrChild": "%1 kann nur ein Kind von mtr oder mlabeledtr sein", "MML/mtrChildren": "Kinder von '%1' müssen mtd sein", "NoAsync": "Kann '%1' nicht laden: Es wurde keine %2-Methode angegeben", "NoVersionFor": "Für die Komponente '%1' liegen keine Versionsinformationen vor", - "Option/Invalid": "Ungültige Option '%1' (kein Standardwert).", - "OutputError": "Fehler bei der mathematischen Ausgabe", - "OutputJaxNotDefined": "Output Jax '%1' ist nicht definiert (wurde es geladen?)", - "RetryError": "MathJax Wiederholungsversuch -- es ist eine asynchrone Aktion erforderlich; versuche es mit einer der Promise-basierten Funktionen und warte auf deren Ergebnis.", + "Option/Invalid": "Ungültige Option '%1' (kein Default definiert).", + "OutputError": "Fehler beim Rendern der Formel", + "OutputJaxNotDefined": "Output Jax '%1' ist nicht definiert (wurde er geladen?)", + "RetryError": "MathJax Wiederholungsversuch -- es ist eine asynchrone Action erforderlich; versuche es mit einer der Promise-basierten Funktionen und warte auf deren Ergebnis.", "StateExists": "Der Zustand %1 existiert bereits", - "WrongVersion": "Die Komponente %1 verwendet Version %2 von MathJax; die verwendete Version ist %3" + "WrongVersion": "Die Komponente %1 benötigt Version %2 von MathJax; die vorhandene Version ist %3" } From d84971c47f391c1d6047ae5002631fdf320b9a7c Mon Sep 17 00:00:00 2001 From: zorkow Date: Wed, 10 Jun 2026 13:08:55 +0200 Subject: [PATCH 16/20] fix some tex errors in de --- ts/input/tex/__locales__/de.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/ts/input/tex/__locales__/de.json b/ts/input/tex/__locales__/de.json index 187334ac5..c049dc074 100644 --- a/ts/input/tex/__locales__/de.json +++ b/ts/input/tex/__locales__/de.json @@ -1,19 +1,19 @@ { "BadPreamToken": "Ungültiges Preamble Token: %1", "BadRawUnicode": "Das Argument für %1 muss eine hexadezimale Zahl mit 1 bis 6 Ziffern sein", - "ColArgNotNum": "Das erste Argument für den Spaltenbezeichner %1 muss eine Zahl sein", + "ColArgNotNum": "Das erste Argument für %1 im column Kommando muss eine Zahl sein", "ConfigNotFound": "Konfiguration '%1' nicht gefunden. Wird übersprungen.", - "ErroneousNestingEq": "Fehlerhafte Verschachtelung von Gleichungsstrukturen", + "ErroneousNestingEq": "Fehlerhafte Verschachtelung von equation Kommandos", "ExtraCloseLooking": "Überflüssige schließende Klammer bei der Suche nach %1", "ExtraCloseMissingOpen": "Überflüssige schließende Klammer oder fehlende öffnende Klammer", "ExtraMiddle": "Zusätzliches \\middle", "ExtraOpenMissingClose": "Zusätzliche öffnende Klammer oder fehlende schließende Klammer", "IllegalMacroParam": "Ungültiger Makroparameterverweis", "InvalidOption": "Ungültige Option: %1", - "InvalidValue": "Der Wert für den Schlüssel '%1' hat nicht den erwarteten Typ", + "InvalidValue": "Der Schlüsselwert '%1' hat nicht den erwarteten Typ", "MathNotTerminated": "Der Mathematikmodus wurde nicht ordnungsgemäß beendet", "MaxBufferSize": "Die interne Puffergröße von MathJax wurde überschritten; liegt ein rekursiver Makroaufruf vor?", - "MaxColumns": "Zu viele Spaltenangaben (möglicherweise sich wiederholende Spaltendefinitionen?)", + "MaxColumns": "Zu viele column Kommandos (möglicherweise sich wiederholende column Definitionen?)", "MaxMacroSub1": "Maximale Anzahl an Makrosubstitutionen in MathJax überschritten; liegt ein rekursiver Makroaufruf vor?", "MaxMacroSub2": "Maximale Anzahl an Ersetzungen in MathJax überschritten; liegt eine rekursive LaTeX-Umgebung vor?", "Misplaced": "'%1' falsch platziert", @@ -30,5 +30,5 @@ "PackageNotFound": "Paket '%1' nicht gefunden. Wird übersprungen.", "TokenNotFoundForCommand": "%1 für %2 konnte nicht gefunden werden", "UnknownTag": "Unbekannte Bezeichner Klasse", - "WrongParser": "Das Paket '%1' ist nicht auf den richtigen Parser ausgerichtet" + "WrongParser": "Das Paket '%1' benutzt einen Parser für den es nicht definiert ist" } From 642e011ab92b97fc0e8f54cbf98256955699f06b Mon Sep 17 00:00:00 2001 From: zorkow Date: Wed, 10 Jun 2026 13:26:45 +0200 Subject: [PATCH 17/20] mathml de locale --- ts/input/mathml/__locales__/de.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ts/input/mathml/__locales__/de.json b/ts/input/mathml/__locales__/de.json index 67f7edab4..7ace9c8da 100644 --- a/ts/input/mathml/__locales__/de.json +++ b/ts/input/mathml/__locales__/de.json @@ -3,6 +3,6 @@ "BadText": "Unerwarteter Textknoten '%1'", "MathNode": "MathML muss aus einem %1-Element bestehen, nicht aus %2", "MmlError": "Fehler bei der Verarbeitung von MathML", - "SaxonNotFound": "#1 nicht gefunden. Führen Sie den Befehl aus:\n %2\nund versuchen Sie es erneut.", + "SaxonNotFound": "#1 nicht gefunden. Führen Sie folgenden Befehl aus: %2\n \nund versuchen Sie es erneut.", "SingleNode": "MathML muss aus einem einzigen Element bestehen" } From 99a83e9342cb0a7c8b3a962a80ffd374d25ebc0b Mon Sep 17 00:00:00 2001 From: zorkow Date: Wed, 10 Jun 2026 13:47:10 +0200 Subject: [PATCH 18/20] worker de locale --- ts/a11y/speech/__locales__/de.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ts/a11y/speech/__locales__/de.json b/ts/a11y/speech/__locales__/de.json index ce68da969..df2d79cd8 100644 --- a/ts/a11y/speech/__locales__/de.json +++ b/ts/a11y/speech/__locales__/de.json @@ -1,7 +1,7 @@ { "ProsodyError": "Beim Prosody-Abgleich ist ein Fehler aufgetreten", "SpeechError": "Fehler bei der Sprachgenerierung:", - "Worker/Cancelled": "Aufgabe %1 abgebrochen", + "Worker/Cancelled": "Task %1 abgebrochen", "Worker/NotStarted": "Worker wurde nicht gestartet", "Worker/Started": "Worker bereits gestartet", "Worker/Terminate": "%1 durch Beendigung des WorkerHandlers abgebrochen" From abb331741f171de0c087735664f65408474665f6 Mon Sep 17 00:00:00 2001 From: zorkow Date: Wed, 10 Jun 2026 14:01:44 +0200 Subject: [PATCH 19/20] explorer locale de --- ts/a11y/explorer/__locales__/de.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/ts/a11y/explorer/__locales__/de.json b/ts/a11y/explorer/__locales__/de.json index df1f68841..5223cd92c 100644 --- a/ts/a11y/explorer/__locales__/de.json +++ b/ts/a11y/explorer/__locales__/de.json @@ -1,8 +1,8 @@ { "ForHelp": "Drücke h für Hilfe", - "Help/Keys": "
    \n\n
  • Pfeil nach unten springt eine Ebene tiefer in den Ausdruck, damit Sie den aktuellen Teilausdruck Term für Term untersuchen können.
  • \n\n
  • Pfeil nach oben springt eine Ebene höher innerhalb des Ausdrucks.
  • Pfeil nach rechts springt zum nächsten Term im aktuellen Teilausdruck.
  • \n\n
  • Pfeil nach links springt zum nächsten Term im aktuellen Teilausdruck.
  • \n\n
  • Umschalt+Pfeil springt zu einer benachbarten Zelle innerhalb einer Tabelle.
  • \n\n
  • 0-9+0-9 springt anhand des Indexes in der Tabelle zu einer Zelle, wobei 0 = 10 ist.
  • \n\n
  • Home bringt Sie an den Anfang des Ausdrucks.
  • \n\n
  • Enter oder Return klickt auf einen Link oder aktiviert einen aktiven Teilausdruck.
  • \n\n
  • Leertaste öffnet das MathJax-Kontextmenü, in dem Sie das Quellformat des Ausdrucks anzeigen oder kopieren oder die MathJax-Einstellungen ändern können.
  • \n\n
  • Esc verlässt den Ausdrucks-Explorer.
  • \n\n
  • x Zeigt eine Zusammenfassung des aktuellen Teilausdrucks an.
  • \n\n
  • z Zeigt den vollständigen Text eines ausgeblendeten Ausdrucks an.
  • \n\n
  • d Zeigt die aktuelle Tiefe innerhalb des Ausdrucks an.
  • \n\n
  • s startet oder stoppt die automatische Voicing-Anzeige mit synchronisierter Hervorhebung.
  • \n\n
  • v markiert die aktuelle Position im Ausdruck.
  • \n\n
  • p wechselt zwischen den markierten Positionen im Ausdruck hin und her.
  • \n\n
  • uLöscht alle markierten Positionen und kehrt zur Startposition zurück.
  • \n\n
  • > Wechselt zwischen den verfügbaren Sprachregelsätzen (MathSpeak, ClearSpeak).
  • \n\n
  • < Wechselt zwischen den Ausführlichkeitsstufen für den aktuellen Regelsatz.
  • \n\n
  • b schaltet um, ob Braille-Notation mit Sprachtext für taktile Braille-Geräte kombiniert wird, wie unten beschrieben.
  • \n\n
  • h zeigt diese Hilfeauflistung an.
  • \n\n
", - "Help/Text1": "

Ausdrücke mit %1 erkunden

\n\n

Die mathematischen Formeln auf dieser Seite werden von MathJax dargestellt, das sowohl den von Bildschirmleseprogrammen vorgelesenen Text als auch das visuelle Layout für sehende Nutzer generiert.

\n\n

Von MathJax gesetzte Ausdrücke können interaktiv erkundet werden und sind fokussierbar. Sie können die Tab-Taste verwenden, um zu einem gesetzten Ausdruck zu springen%2%3. Zunächst wird der Ausdruck vollständig vorgelesen, aber Sie können die folgenden Tasten verwenden, um den Ausdruck weiter zu erkunden:

", - "Help/Text2": "

Über das MathJax-Kontextmenü können Sie die Sprach- oder Braille-Ausgabe für mathematische Ausdrücke aktivieren oder deaktivieren, die Sprache für die Sprachausgabe festlegen sowie weitere Funktionen von MathJax einstellen. Insbesondere können Sie im Untermenü „Explorer“ festlegen, wie die mathematischen Ausdrücke auf der Seite gekennzeichnet werden sollen (z. B. durch die Ansage „math“, wenn der Ausdruck vorgelesen wird) und ob eine Meldung darüber angezeigt werden soll, dass der Buchstabe „h“ dieses Dialogfeld öffnet. Wenn Sie die Sprachausgabe und die Braille-Anzeige deaktivieren, werden der Ausdrucks-Explorer, dessen Hervorhebung und das Hilfe-Symbol deaktiviert.

\n\n

Die Unterstützung für taktile Braille-Geräte variiert je nach Screenreader, Browser und Betriebssystem. Wenn Sie ein Braille-Ausgabegerät verwenden, müssen Sie möglicherweise die Option „Mit Sprachausgabe kombinieren“ im Untermenü „Braille“ des Kontextmenüs auswählen, um anstelle der Sprachausgabe auf Ihrem Braille-Gerät eine Nemeth- oder Euro-Braille-Ausgabe zu erhalten. %1

\n\n

Das Kontextmenü bietet außerdem Optionen zum Anzeigen oder Kopieren einer MathML-Version des Ausdrucks oder seines ursprünglichen Quellformats, zum Erstellen einer SVG-Version des Ausdrucks sowie zum Anzeigen verschiedener weiterer Informationen.

\n\n

Wenn Sie schließlich im Untermenü der Optionen den Eintrag „Insert Hidden MathML“ auswählen, wird die Sprach- und Braille-Generierung von MathJax deaktiviert und stattdessen visuell unsichtbares MathML verwendet, das von einigen Bildschirmleseprogrammen vorgelesen werden kann, wobei diese Funktion nicht von allen Bildschirmleseprogrammen und Betriebssystemen unterstützt wird. Durch Auswahl der Sprach- oder Braille-Generierung in den entsprechenden Untermenüs wird das unsichtbare MathML wieder entfernt.

\n\n

Weitere Hilfe finden Sie in der MathJax-Dokumentation zur Barrierefreiheit.

", + "Help/Keys": "
    \n\n
  • Pfeil nach unten springt eine Ebene tiefer in den Ausdruck, damit Sie den aktuellen Teilausdruck Term für Term untersuchen können.
  • \n\n
  • Pfeil nach oben springt eine Ebene höher innerhalb des Ausdrucks.
  • Pfeil nach rechts springt zum nächsten Term im aktuellen Teilausdruck.
  • \n\n
  • Pfeil nach links springt zum nächsten Term im aktuellen Teilausdruck.
  • \n\n
  • Umschalt+Pfeil springt zu einer benachbarten Zelle innerhalb einer Tabelle.
  • \n\n
  • 0-9+0-9 springt anhand des Index in der Tabelle zu einer Zelle, wobei 0 = 10 ist.
  • \n\n
  • Home bringt Sie an den Anfang des Ausdrucks.
  • \n\n
  • Enter oder Return klickt einen Link oder aktiviert einen aktiven Teilausdruck.
  • \n\n
  • Leertaste öffnet das MathJax-Kontextmenü, in dem Sie das Quellformat des Ausdrucks anzeigen oder kopieren oder die MathJax-Einstellungen ändern können.
  • \n\n
  • Esc verlässt den Ausdrucks-Explorer.
  • \n\n
  • x Zeigt eine Zusammenfassung des aktuellen Teilausdrucks an.
  • \n\n
  • z Zeigt den vollständigen Text eines ausgeblendeten Ausdrucks an.
  • \n\n
  • d Zeigt die aktuelle Tiefe innerhalb des Ausdrucks an.
  • \n\n
  • s startet oder stoppt die automatische Sprachausgabe mit synchronisiertem Highlighting.
  • \n\n
  • v markiert die aktuelle Position im Ausdruck.
  • \n\n
  • p wechselt zwischen den markierten Positionen im Ausdruck hin und her.
  • \n\n
  • uLöscht alle markierten Positionen und kehrt zur Startposition zurück.
  • \n\n
  • > Wechselt zwischen den verfügbaren Sprachregelsätzen (MathSpeak, ClearSpeak).
  • \n\n
  • < Wechselt zwischen den Ausführlichkeitsstufen für den aktuellen Regelsatz.
  • \n\n
  • b schaltet um, ob Braille-Notation mit Sprachtext für taktile Braille-Geräte kombiniert wird, wie unten beschrieben.
  • \n\n
  • h zeigt diese Hilfeauflistung an.
  • \n\n
", + "Help/Text1": "

Ausdrücke mit %1 erkunden

\n\n

Die mathematischen Formeln auf dieser Seite werden von MathJax dargestellt, das sowohl den von Screenreadern vorgelesenen Text als auch das visuelle Layout für sehende Nutzer generiert.

\n\n

Von MathJax gesetzte Ausdrücke können interaktiv erkundet werden und sind fokussierbar. Sie können die Tab-Taste verwenden, um zu einem gesetzten Ausdruck zu springen%2%3. Zunächst wird der Ausdruck vollständig vorgelesen, aber Sie können die folgenden Tasten verwenden, um den Ausdruck weiter zu erkunden:

", + "Help/Text2": "

Über das MathJax-Kontextmenü können Sie die Sprach- oder Braille-Ausgabe für mathematische Ausdrücke aktivieren oder deaktivieren, die Sprache für die Sprachausgabe festlegen sowie weitere Funktionen von MathJax einstellen. Insbesondere können Sie im Untermenü „Explorer“ festlegen, wie die mathematischen Ausdrücke auf der Seite gekennzeichnet werden sollen (z. B. durch die Ansage „Mathematik“, wenn der Ausdruck vorgelesen wird) und ob eine Meldung darüber angezeigt werden soll, dass der Buchstabe „h“ dieses Dialogfeld öffnet. Wenn Sie die Sprachausgabe und die Braille-Anzeige deaktivieren, werden der Ausdrucks-Explorer, dessen Highlighting und das Hilfe-Symbol deaktiviert.

\n\n

Die Unterstützung für taktile Braille-Geräte variiert je nach Screenreader, Browser und Betriebssystem. Wenn Sie ein Braille-Ausgabegerät verwenden, müssen Sie möglicherweise die Option „Mit Sprachausgabe kombinieren“ im Untermenü „Braille“ des Kontextmenüs auswählen, um anstelle der Sprachausgabe auf Ihrem Braille-Gerät eine Nemeth- oder Euro-Braille-Ausgabe zu erhalten. %1

\n\n

Das Kontextmenü bietet außerdem Optionen zum Anzeigen oder Kopieren einer MathML-Version des Ausdrucks oder seines ursprünglichen Quellformats, zum Erstellen einer SVG-Version des Ausdrucks sowie zum Anzeigen verschiedener weiterer Informationen.

\n\n

Wenn Sie schließlich im Optionenmenü den Eintrag „MathML versteckt einbinden“ auswählen, wird die Sprach- und Braille-Generierung von MathJax deaktiviert und stattdessen visuell unsichtbares MathML verwendet, das von einigen Screenreadern vorgelesen werden kann, wobei diese Funktion nicht von allen Screenreadern und Betriebssystemen unterstützt wird. Durch Auswahl der Sprach- oder Braille-Generierung in den entsprechenden Untermenüs wird das unsichtbare MathML wieder entfernt.

\n\n

Weitere Hilfe finden Sie in der MathJax-Dokumentation zur Barrierefreiheit.

", "Help/Title": "Hilfe zum MathJax Expression Explorer", "Mac/Select": "oder die VoiceOver-Pfeiltasten, um einen Ausdruck auszuwählen", "Mac/Title": "macOS und iOS mit VoiceOver", @@ -10,7 +10,7 @@ "PositionMarked": "Position markiert", "Unix/Select": "Orca sollte automatisch in den Fokusmodus wechseln. Ist dies nicht der Fall, kannst du den Fokusmodus mit der Tastenkombination „Orca+a“ ein- oder ausschalten. Beachte außerdem, dass du mit „Orca+Pfeiltasten“ Ausdrücke auch im Durchsichtmodus untersuchen kannst.", "Unix/Title": "Unix mit Orca", - "Unknown/Title": "ein Bildschirmleseprogramm", + "Unknown/Title": "ein Screenreader", "Win/Braille": "NVDA-Benutzer müssen diese Option auswählen, während JAWS-Benutzer die Braille-Ausgabe erhalten sollten, ohne diese Einstellung zu ändern.", "Win/Select": "Der Screenreader sollte automatisch in den Fokus- oder Formularmodus wechseln, sobald der Ausdruck den Browserfokus erhält. Ist dies nicht der Fall, können Sie den Fokusmodus in NVDA mit NVDA+Leertaste umschalten; bei JAWS sollte die Eingabetaste den Formularmodus aktivieren, während die Plus-Taste des Ziffernblocks ihn beendet. Beachten Sie außerdem, dass Sie die NVDA- oder JAWS-Taste zusammen mit den Pfeiltasten verwenden können, um den Ausdruck auch im Browse-Modus zu erkunden, und dass Sie mit NVDA+Umschalt+Pfeiltasten aus einem Ausdruck herausnavigieren können, der in NVDA den Fokus hat.", "Win/Title": "Windows mit NVDA oder JAWS" From 57da349b24fa23ea7a49101a418d98051550d978 Mon Sep 17 00:00:00 2001 From: zorkow Date: Wed, 10 Jun 2026 14:28:55 +0200 Subject: [PATCH 20/20] tex locale de --- ts/input/tex/__locales__/de.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ts/input/tex/__locales__/de.json b/ts/input/tex/__locales__/de.json index c049dc074..63f3daa3d 100644 --- a/ts/input/tex/__locales__/de.json +++ b/ts/input/tex/__locales__/de.json @@ -1,9 +1,9 @@ { "BadPreamToken": "Ungültiges Preamble Token: %1", "BadRawUnicode": "Das Argument für %1 muss eine hexadezimale Zahl mit 1 bis 6 Ziffern sein", - "ColArgNotNum": "Das erste Argument für %1 im column Kommando muss eine Zahl sein", + "ColArgNotNum": "Das erste Argument für %1 im column Befehl muss eine Zahl sein", "ConfigNotFound": "Konfiguration '%1' nicht gefunden. Wird übersprungen.", - "ErroneousNestingEq": "Fehlerhafte Verschachtelung von equation Kommandos", + "ErroneousNestingEq": "Fehlerhafte Verschachtelung von equation Befehlen", "ExtraCloseLooking": "Überflüssige schließende Klammer bei der Suche nach %1", "ExtraCloseMissingOpen": "Überflüssige schließende Klammer oder fehlende öffnende Klammer", "ExtraMiddle": "Zusätzliches \\middle", @@ -13,7 +13,7 @@ "InvalidValue": "Der Schlüsselwert '%1' hat nicht den erwarteten Typ", "MathNotTerminated": "Der Mathematikmodus wurde nicht ordnungsgemäß beendet", "MaxBufferSize": "Die interne Puffergröße von MathJax wurde überschritten; liegt ein rekursiver Makroaufruf vor?", - "MaxColumns": "Zu viele column Kommandos (möglicherweise sich wiederholende column Definitionen?)", + "MaxColumns": "Zu viele column Befehle (möglicherweise sich wiederholende column Definitionen?)", "MaxMacroSub1": "Maximale Anzahl an Makrosubstitutionen in MathJax überschritten; liegt ein rekursiver Makroaufruf vor?", "MaxMacroSub2": "Maximale Anzahl an Ersetzungen in MathJax überschritten; liegt eine rekursive LaTeX-Umgebung vor?", "Misplaced": "'%1' falsch platziert",