From d3bcbbeacf124bc0ecb1650d4f5c36d9120f95e4 Mon Sep 17 00:00:00 2001 From: Storm Dragon Date: Wed, 28 Oct 2026 03:47:57 -0400 Subject: [PATCH] Fixed volume and panning for ninjam override. --- docs/user.md | 6 +- .../applicationoverrides/ninjam/ninjam.go | 57 ++++++++++++--- .../ninjam/ninjam_test.go | 70 +++++++++++++++++- internal/i18n/locale/de/LC_MESSAGES/fenrir.po | 72 ++++++++++++------- internal/i18n/locale/es/LC_MESSAGES/fenrir.po | 72 ++++++++++++------- internal/i18n/locale/fenrir.pot | 72 ++++++++++++------- internal/i18n/locale/pl/LC_MESSAGES/fenrir.po | 72 ++++++++++++------- internal/i18n/locale/pt/LC_MESSAGES/fenrir.po | 72 ++++++++++++------- internal/i18n/locale/ru/LC_MESSAGES/fenrir.po | 72 ++++++++++++------- .../application_override_linux_test.go | 12 +++- internal/terminal/ninjam_live_linux_test.go | 5 +- 11 files changed, 412 insertions(+), 170 deletions(-) diff --git a/docs/user.md b/docs/user.md index c67381c2..6620e2d6 100644 --- a/docs/user.md +++ b/docs/user.md @@ -42,8 +42,10 @@ layouts may prevent recognition; Default is always available. **Ninjam** targets the `cninjam` curses client. It announces selected controls with master, metronome, or channel context; mute, transmit, and receive controls -are spoken as states. Volume and pan edits are announced without the continuously -changing peak meters and interval bar. Navigating the application's controls +are spoken as states. While adjusting a volume/pan control, Left/Right announces +only the pan percentage and direction, or center; Up/Down announces only the +volume, with minus and plus spoken explicitly. Peak meters and the interval bar +remain quiet. Navigating the application's controls after manual review resumes tracking; passive updates leave review in place. Incoming chat is announced independently of control changes. The following shortcuts temporarily replace numbered region reads: diff --git a/internal/applicationoverrides/ninjam/ninjam.go b/internal/applicationoverrides/ninjam/ninjam.go index ef7caffb..7bdc2eab 100644 --- a/internal/applicationoverrides/ninjam/ninjam.go +++ b/internal/applicationoverrides/ninjam/ninjam.go @@ -22,6 +22,7 @@ import ( type Adapter struct { previous screen.Snapshot focusID, focusText, instruction, status string + volumePan string chat []string latest string regions []applicationoverrides.Region @@ -38,6 +39,7 @@ func (a *Adapter) Reset() { a.previous = screen.Snapshot{} a.focusID, a.focusText, a.instruction, a.status = "", "", "", "" a.chat, a.regions, a.historyNavigation = nil, nil, false + a.volumePan = "" } func (a *Adapter) Close() { a.Reset(); a.latest = "" } @@ -98,7 +100,7 @@ func (a *Adapter) Observe(next screen.Snapshot) applicationoverrides.Frame { stable := a.previous.Active && a.previous.Terminal == next.Terminal && a.previous.Generation == next.Generation && a.previous.Rows == next.Rows && a.previous.Cols == next.Cols chatHeight := max(next.Rows/4, 4) chatTop := next.Rows - 2 - chatHeight - focusID, focusText := selected_control(next, chatTop) + focusID, focusText, volumePan := selected_control(next, chatTop) if next.Y == next.Rows-3 { focusID, focusText = "chat", i18n.T("Chat message") frame.Input = &screen.Region{Left: 0, Top: next.Y, Right: next.Cols - 1, Bottom: next.Y} @@ -114,7 +116,19 @@ func (a *Adapter) Observe(next screen.Snapshot) applicationoverrides.Frame { } frame.FocusChanged = stable && focusID != "" && a.focusID != "" && focusID != a.focusID if focusText != "" && (!stable || focusText != a.focusText || focusID != a.focusID) { - frame.Focus = []presentation.Message{{Text: focusText}} + spoken := focusText + if stable && focusID == a.focusID && volumePan != "" && a.volumePan != "" { + before, after := strings.Fields(a.volumePan), strings.Fields(volumePan) + var changed []string + if before[0] != after[0] { + changed = append(changed, spoken_volume(after[0])) + } + if before[1] != after[1] { + changed = append(changed, spoken_pan(after[1])) + } + spoken = strings.Join(changed, " ") + } + frame.Focus = []presentation.Message{{Text: spoken}} } if instruction != "" && (!stable || instruction != a.instruction) { frame.Updates = append(frame.Updates, presentation.Message{Text: instruction}) @@ -146,6 +160,7 @@ func (a *Adapter) Observe(next screen.Snapshot) applicationoverrides.Frame { frame.Regions = slices.Clone(a.regions) chatChanged := !slices.Equal(a.chat, chat) a.previous, a.chat = next, chat + a.volumePan = volumePan a.focusID, a.focusText, a.instruction, a.status = focusID, focusText, instruction, status a.historyNavigation = historyNavigation && !chatChanged return frame @@ -179,9 +194,9 @@ func fields(line []rune) []field { return result } -func selected_control(snapshot screen.Snapshot, chatTop int) (string, string) { +func selected_control(snapshot screen.Snapshot, chatTop int) (string, string, string) { if len(snapshot.Attributes) != len(snapshot.Cells) { - return "", "" + return "", "", "" } remote, user := false, "" for row := 1; row < snapshot.Rows; row++ { @@ -232,6 +247,7 @@ func selected_control(snapshot screen.Snapshot, chatTop int) (string, string) { context = i18n.Format("Local channel {0}", controls[0].value) } value := control.value + volumePan := "" switch control.label { case "mute": value = i18n.T("unmuted") @@ -249,8 +265,9 @@ func selected_control(snapshot screen.Snapshot, chatTop int) (string, string) { value = i18n.T("receiving") } default: - if strings.Contains(value, "dB") { - value = i18n.Format("Volume and pan {0}", value) + if parts := strings.Fields(value); len(parts) == 2 && strings.HasSuffix(parts[0], "dB") { + volumePan = value + value = i18n.Format("Volume and pan {0}", spoken_volume(parts[0])+" "+spoken_pan(parts[1])) } if len(controls) >= 5 && index == 0 { value = i18n.Format("Channel name {0}", value) @@ -271,10 +288,34 @@ func selected_control(snapshot screen.Snapshot, chatTop int) (string, string) { value = i18n.T("Quit Ninjam") } } - return fmt.Sprintf("%d:%d:%s", row, index, context), strings.TrimSpace(context + " " + value) + return fmt.Sprintf("%d:%d:%s", row, index, context), strings.TrimSpace(context + " " + value), volumePan } } - return "", "" + return "", "", "" +} + +// Keep signs and pan directions audible regardless of the punctuation profile. +func spoken_volume(value string) string { + if strings.HasPrefix(value, "-") { + return i18n.Format("minus {0}", value[1:]) + } + if strings.HasPrefix(value, "+") { + return i18n.Format("plus {0}", value[1:]) + } + return value +} + +func spoken_pan(value string) string { + if value == "center" { + return i18n.T("center") + } + if amount, ok := strings.CutSuffix(value, "%L"); ok { + return i18n.Format("{0} percent left", amount) + } + if amount, ok := strings.CutSuffix(value, "%R"); ok { + return i18n.Format("{0} percent right", amount) + } + return value } func chat_lines(snapshot screen.Snapshot, first, last int) []string { diff --git a/internal/applicationoverrides/ninjam/ninjam_test.go b/internal/applicationoverrides/ninjam/ninjam_test.go index 43becf47..319d531d 100644 --- a/internal/applicationoverrides/ninjam/ninjam_test.go +++ b/internal/applicationoverrides/ninjam/ninjam_test.go @@ -5,6 +5,7 @@ package ninjam_test import ( "slices" + "strconv" "strings" "testing" @@ -93,7 +94,7 @@ func TestFocusChatMetersAndValueReflow(t *testing.T) { t.Fatal(got) } got = update(snapshot(1, " ", "-0.5dB center", " first", " second")) - if !slices.Equal(got, []string{"Master Volume and pan -0.5dB center"}) { + if !slices.Equal(got, []string{"minus 0.5dB"}) { t.Fatal("reflow", got) } s := snapshot(1, " ", "-0.5dB center", " first", " second") @@ -234,3 +235,70 @@ func TestWrappedChatRecallAndChangedGeometry(t *testing.T) { t.Fatal("resized interval region", result) } } + +func TestVolumeAndPanAnnounceOnlyChangedComponent(t *testing.T) { + for _, selected := range []int{1, 3, 8, 12} { + t.Run(strconv.Itoa(selected), func(t *testing.T) { + a, r := &ninjam.Adapter{}, reader.New() + makeSnapshot := func(value string, chat ...string) screen.Snapshot { + s := snapshot(selected, " ", "0.0dB center", chat...) + // Repaint the selected bracket with the same style, including + // changes in width at center and across signed dB values. + for row := range s.Rows { + for col, attribute := range s.Attributes[row*s.Cols : (row+1)*s.Cols] { + if attribute.Background != screen.ColorIndexed|7 { + continue + } + line := string(s.Line(row)) + start := col + end := start + strings.Index(line[start:], "]") + line = line[:start] + value + line[end:] + for i := range s.Line(row) { + s.Line(row)[i] = ' ' + s.Attributes[row*s.Cols+i] = screen.Attribute{Foreground: screen.ColorIndexed | 7, Background: screen.ColorIndexed} + } + copy(s.Line(row), []rune(line)) + for i := start; i < start+len(value); i++ { + s.Attributes[row*s.Cols+i] = attribute + } + return s + } + } + t.Fatal("missing selected field") + return s + } + update := func(value string, chat ...string) []string { + s := makeSnapshot(value, chat...) + return texts(r.Update_application(s, a.Observe(s))) + } + update("0.0dB center", " old") + for _, trial := range []struct{ value, want string }{ + {"0.0dB 1%L", "1 percent left"}, + {"0.0dB 2%L", "2 percent left"}, + {"0.0dB center", "center"}, + {"0.0dB 1%R", "1 percent right"}, + {"-0.5dB 1%R", "minus 0.5dB"}, + {"0.0dB 1%R", "0.0dB"}, + {"+0.5dB 1%R", "plus 0.5dB"}, + {"+1.0dB 2%R", "plus 1.0dB 2 percent right"}, + } { + if got := update(trial.value, " old"); !slices.Equal(got, []string{trial.want}) { + t.Fatalf("%s: %v", trial.value, got) + } + } + if got := update("+1.0dB 2%R", " old"); len(got) != 0 { + t.Fatal("unchanged value repeated", got) + } + if got := update("+1.0dB 3%R", " old", " new"); !slices.Equal(got, []string{"3 percent right", " new"}) { + t.Fatal("chat alongside pan", got) + } + if result, _ := a.Command(command.ReadLiveRegion2); !strings.Contains(result.Text, "Volume and pan plus 1.0dB 3 percent right") { + t.Fatal("full control recall lost", result) + } + r.Command(command.CurrentLine) + if got := update("+1.0dB 4%R", " new", " review"); !slices.Equal(got, []string{" review"}) { + t.Fatal("pan disturbed detached review", got) + } + }) + } +} diff --git a/internal/i18n/locale/de/LC_MESSAGES/fenrir.po b/internal/i18n/locale/de/LC_MESSAGES/fenrir.po index 89b3afa9..a88a9500 100644 --- a/internal/i18n/locale/de/LC_MESSAGES/fenrir.po +++ b/internal/i18n/locale/de/LC_MESSAGES/fenrir.po @@ -176,7 +176,7 @@ msgstr "Katze" msgid "Chains" msgstr "Ketten" -#: internal/applicationoverrides/ninjam/ninjam.go:256 +#: internal/applicationoverrides/ninjam/ninjam.go:273 msgid "Channel name {0}" msgstr "Kanalname {0}" @@ -184,7 +184,7 @@ msgstr "Kanalname {0}" msgid "Character echo" msgstr "Zeichenansage" -#: internal/applicationoverrides/ninjam/ninjam.go:103 +#: internal/applicationoverrides/ninjam/ninjam.go:105 msgid "Chat message" msgstr "Chatnachricht" @@ -277,7 +277,7 @@ msgstr "Sarg" msgid "Column number for cursor" msgstr "Spaltennummer des Cursors" -#: internal/applicationoverrides/ninjam/ninjam.go:145 +#: internal/applicationoverrides/ninjam/ninjam.go:159 msgid "Connection, tempo and interval" msgstr "Verbindung, Tempo und Intervall" @@ -346,7 +346,7 @@ msgstr "Standard" msgid "Default settings restored" msgstr "Standardeinstellungen wiederhergestellt" -#: internal/applicationoverrides/ninjam/ninjam.go:262 +#: internal/applicationoverrides/ninjam/ninjam.go:279 msgid "Delete channel" msgstr "Kanal löschen" @@ -569,11 +569,11 @@ msgstr "Einrückung" msgid "India" msgstr "Indien" -#: internal/applicationoverrides/ninjam/ninjam.go:259 +#: internal/applicationoverrides/ninjam/ninjam.go:276 msgid "Input {0}" msgstr "Eingang {0}" -#: internal/applicationoverrides/ninjam/ninjam.go:141 +#: internal/applicationoverrides/ninjam/ninjam.go:155 msgid "Interval position {0} of {1}" msgstr "Intervallposition {0} von {1}" @@ -605,7 +605,7 @@ msgstr "Tastatur" msgid "Last clipboard " msgstr "Letzte Zwischenablage " -#: internal/applicationoverrides/ninjam/ninjam.go:145 +#: internal/applicationoverrides/ninjam/ninjam.go:159 msgid "Latest chat message" msgstr "Letzte Chatnachricht" @@ -649,7 +649,7 @@ msgstr "Live-Bereich {0}: {1}" msgid "Live regions cleared" msgstr "Live-Bereiche gelöscht" -#: internal/applicationoverrides/ninjam/ninjam.go:232 +#: internal/applicationoverrides/ninjam/ninjam.go:247 msgid "Local channel {0}" msgstr "Lokaler Kanal {0}" @@ -657,11 +657,11 @@ msgstr "Lokaler Kanal {0}" msgid "Mage" msgstr "Magier" -#: internal/applicationoverrides/ninjam/ninjam.go:222 +#: internal/applicationoverrides/ninjam/ninjam.go:237 msgid "Master" msgstr "Hauptausgang" -#: internal/applicationoverrides/ninjam/ninjam.go:224 +#: internal/applicationoverrides/ninjam/ninjam.go:239 msgid "Metronome" msgstr "Metronom" @@ -730,7 +730,7 @@ msgstr "Niederlande" msgid "NetworkManager" msgstr "NetworkManager" -#: internal/applicationoverrides/ninjam/ninjam.go:265 +#: internal/applicationoverrides/ninjam/ninjam.go:282 msgid "New channel" msgstr "Neuer Kanal" @@ -738,11 +738,11 @@ msgstr "Neuer Kanal" msgid "Ninjam" msgstr "Ninjam" -#: internal/applicationoverrides/ninjam/ninjam.go:79 +#: internal/applicationoverrides/ninjam/ninjam.go:81 msgid "Ninjam information unavailable" msgstr "Ninjam-Informationen nicht verfügbar" -#: internal/applicationoverrides/ninjam/ninjam.go:63 +#: internal/applicationoverrides/ninjam/ninjam.go:65 msgid "" "Ninjam regions: 1 latest chat message; 2 selected channel or control; 3 " "connection, tempo and interval" @@ -750,7 +750,7 @@ msgstr "" "Ninjam-Bereiche: 1 letzte Chatnachricht; 2 ausgewählter Kanal oder " "Bedienelement; 3 Verbindung, Tempo und Intervall" -#: internal/applicationoverrides/ninjam/ninjam.go:77 +#: internal/applicationoverrides/ninjam/ninjam.go:79 msgid "No chat message received" msgstr "Keine Chatnachricht empfangen" @@ -762,7 +762,7 @@ msgstr "Keine Treffer" msgid "No reading regions set" msgstr "Keine Lesebereiche festgelegt" -#: internal/applicationoverrides/ninjam/ninjam.go:268 +#: internal/applicationoverrides/ninjam/ninjam.go:285 msgid "No remote users" msgstr "Keine entfernten Benutzer" @@ -873,7 +873,7 @@ msgstr "Satzzeichenprofil" msgid "Quick menu not available" msgstr "Schnellmenü nicht verfügbar" -#: internal/applicationoverrides/ninjam/ninjam.go:271 +#: internal/applicationoverrides/ninjam/ninjam.go:288 msgid "Quit Ninjam" msgstr "Ninjam beenden" @@ -957,7 +957,7 @@ msgstr "Liest die Attribute an der aktuellen Cursorposition" msgid "Reads from the top of the screen to the cursor position" msgstr "Liest vom oberen Bildschirmrand bis zur Cursorposition" -#: internal/applicationoverrides/ninjam/ninjam.go:229 +#: internal/applicationoverrides/ninjam/ninjam.go:244 msgid "Remote {0}, channel {1}" msgstr "Entfernt {0}, Kanal {1}" @@ -969,7 +969,7 @@ msgstr "Marken entfernen" msgid "Removes marks from selected text" msgstr "Entfernt die Markierungen des ausgewählten Textes" -#: internal/applicationoverrides/ninjam/ninjam.go:111 +#: internal/applicationoverrides/ninjam/ninjam.go:113 msgid "Rename channel" msgstr "Kanal umbenennen" @@ -1061,7 +1061,7 @@ msgstr "Temporäre Anwendungseinstellungen auswählen" msgid "Select sound theme" msgstr "Klangthema auswählen" -#: internal/applicationoverrides/ninjam/ninjam.go:145 +#: internal/applicationoverrides/ninjam/ninjam.go:159 msgid "Selected channel or control" msgstr "Ausgewählter Kanal oder Bedienelement" @@ -1316,7 +1316,7 @@ msgstr "" msgid "Volume" msgstr "Lautstärke" -#: internal/applicationoverrides/ninjam/ninjam.go:253 +#: internal/applicationoverrides/ninjam/ninjam.go:270 msgid "Volume and pan {0}" msgstr "Lautstärke und Panorama {0}" @@ -1491,6 +1491,10 @@ msgstr "groß" msgid "carrot" msgstr "Zirkumflex" +#: internal/applicationoverrides/ninjam/ninjam.go:310 +msgid "center" +msgstr "Mitte" + #: internal/presentation/text.go:68 msgid "character {0}" msgstr "Zeichen {0}" @@ -1883,6 +1887,10 @@ msgstr "Lippen versiegelt" msgid "magenta" msgstr "magenta" +#: internal/applicationoverrides/ninjam/ninjam.go:300 +msgid "minus {0}" +msgstr "minus {0}" + #: internal/app/spellcheck.go:22 internal/app/spellcheck_menu.go msgid "misspelled" msgstr "Falsch geschrieben" @@ -1915,7 +1923,7 @@ msgstr "bewegt den Lesecursor zum vorherigen Zeichen" msgid "moves review to the previous line " msgstr "bewegt den Lesecursor zur vorherigen Zeile " -#: internal/applicationoverrides/ninjam/ninjam.go:239 +#: internal/applicationoverrides/ninjam/ninjam.go:255 msgid "muted" msgstr "stummgeschaltet" @@ -1946,11 +1954,11 @@ msgstr "keine Textkonsole" msgid "none" msgstr "keine" -#: internal/applicationoverrides/ninjam/ninjam.go:247 +#: internal/applicationoverrides/ninjam/ninjam.go:263 msgid "not receiving" msgstr "Empfang aus" -#: internal/applicationoverrides/ninjam/ninjam.go:242 +#: internal/applicationoverrides/ninjam/ninjam.go:258 msgid "not transmitting" msgstr "Übertragung aus" @@ -1984,6 +1992,10 @@ msgstr "Bitte zuerst Start- und Endmarke setzen" msgid "plus" msgstr "Plus" +#: internal/applicationoverrides/ninjam/ninjam.go:303 +msgid "plus {0}" +msgstr "plus {0}" + #: internal/command/descriptions.go:23 msgid "presents the current character." msgstr "Gibt das aktuelle Zeichen aus." @@ -2030,7 +2042,7 @@ msgstr "Liest vom Cursor bis zum unteren Bildschirmrand" msgid "reads the contents of the current screen" msgstr "Liest den Inhalt des aktuellen Bildschirms vor" -#: internal/applicationoverrides/ninjam/ninjam.go:249 +#: internal/applicationoverrides/ninjam/ninjam.go:265 msgid "receiving" msgstr "Empfang an" @@ -2232,7 +2244,7 @@ msgstr "Schaltet den Lernmodus um" msgid "tongue out" msgstr "Zunge heraus" -#: internal/applicationoverrides/ninjam/ninjam.go:244 +#: internal/applicationoverrides/ninjam/ninjam.go:260 msgid "transmitting" msgstr "Übertragung an" @@ -2253,7 +2265,7 @@ msgstr "deaktiviert" msgid "underline" msgstr "unterstrichen" -#: internal/applicationoverrides/ninjam/ninjam.go:237 +#: internal/applicationoverrides/ninjam/ninjam.go:253 msgid "unmuted" msgstr "nicht stummgeschaltet" @@ -2297,6 +2309,14 @@ msgstr "{0} Raster. {1}" msgid "{0} is already in dictionary" msgstr "{0} ist bereits im Wörterbuch" +#: internal/applicationoverrides/ninjam/ninjam.go:313 +msgid "{0} percent left" +msgstr "{0} Prozent links" + +#: internal/applicationoverrides/ninjam/ninjam.go:316 +msgid "{0} percent right" +msgstr "{0} Prozent rechts" + #: internal/app/spellcheck_menu.go msgid "{0} removed" msgstr "{0} entfernt" diff --git a/internal/i18n/locale/es/LC_MESSAGES/fenrir.po b/internal/i18n/locale/es/LC_MESSAGES/fenrir.po index a6d4774c..d048f596 100644 --- a/internal/i18n/locale/es/LC_MESSAGES/fenrir.po +++ b/internal/i18n/locale/es/LC_MESSAGES/fenrir.po @@ -176,7 +176,7 @@ msgstr "Gato" msgid "Chains" msgstr "Cadenas" -#: internal/applicationoverrides/ninjam/ninjam.go:256 +#: internal/applicationoverrides/ninjam/ninjam.go:273 msgid "Channel name {0}" msgstr "Nombre del canal {0}" @@ -184,7 +184,7 @@ msgstr "Nombre del canal {0}" msgid "Character echo" msgstr "Eco de caracteres" -#: internal/applicationoverrides/ninjam/ninjam.go:103 +#: internal/applicationoverrides/ninjam/ninjam.go:105 msgid "Chat message" msgstr "Mensaje de chat" @@ -277,7 +277,7 @@ msgstr "Ataúd" msgid "Column number for cursor" msgstr "Número de columna del cursor" -#: internal/applicationoverrides/ninjam/ninjam.go:145 +#: internal/applicationoverrides/ninjam/ninjam.go:159 msgid "Connection, tempo and interval" msgstr "Conexión, tempo e intervalo" @@ -346,7 +346,7 @@ msgstr "Predeterminado" msgid "Default settings restored" msgstr "Configuración predeterminada restaurada" -#: internal/applicationoverrides/ninjam/ninjam.go:262 +#: internal/applicationoverrides/ninjam/ninjam.go:279 msgid "Delete channel" msgstr "Eliminar canal" @@ -570,11 +570,11 @@ msgstr "Sangría" msgid "India" msgstr "India" -#: internal/applicationoverrides/ninjam/ninjam.go:259 +#: internal/applicationoverrides/ninjam/ninjam.go:276 msgid "Input {0}" msgstr "Entrada {0}" -#: internal/applicationoverrides/ninjam/ninjam.go:141 +#: internal/applicationoverrides/ninjam/ninjam.go:155 msgid "Interval position {0} of {1}" msgstr "Posición del intervalo {0} de {1}" @@ -606,7 +606,7 @@ msgstr "Teclado" msgid "Last clipboard " msgstr "Último portapapeles " -#: internal/applicationoverrides/ninjam/ninjam.go:145 +#: internal/applicationoverrides/ninjam/ninjam.go:159 msgid "Latest chat message" msgstr "Último mensaje de chat" @@ -650,7 +650,7 @@ msgstr "Región dinámica {0}: {1}" msgid "Live regions cleared" msgstr "Regiones dinámicas borradas" -#: internal/applicationoverrides/ninjam/ninjam.go:232 +#: internal/applicationoverrides/ninjam/ninjam.go:247 msgid "Local channel {0}" msgstr "Canal local {0}" @@ -658,11 +658,11 @@ msgstr "Canal local {0}" msgid "Mage" msgstr "Mago" -#: internal/applicationoverrides/ninjam/ninjam.go:222 +#: internal/applicationoverrides/ninjam/ninjam.go:237 msgid "Master" msgstr "Maestro" -#: internal/applicationoverrides/ninjam/ninjam.go:224 +#: internal/applicationoverrides/ninjam/ninjam.go:239 msgid "Metronome" msgstr "Metrónomo" @@ -738,7 +738,7 @@ msgstr "Países Bajos" msgid "NetworkManager" msgstr "NetworkManager" -#: internal/applicationoverrides/ninjam/ninjam.go:265 +#: internal/applicationoverrides/ninjam/ninjam.go:282 msgid "New channel" msgstr "Nuevo canal" @@ -746,11 +746,11 @@ msgstr "Nuevo canal" msgid "Ninjam" msgstr "Ninjam" -#: internal/applicationoverrides/ninjam/ninjam.go:79 +#: internal/applicationoverrides/ninjam/ninjam.go:81 msgid "Ninjam information unavailable" msgstr "Información de Ninjam no disponible" -#: internal/applicationoverrides/ninjam/ninjam.go:63 +#: internal/applicationoverrides/ninjam/ninjam.go:65 msgid "" "Ninjam regions: 1 latest chat message; 2 selected channel or control; 3 " "connection, tempo and interval" @@ -758,7 +758,7 @@ msgstr "" "Regiones de Ninjam: 1 último mensaje de chat; 2 canal o control " "seleccionado; 3 conexión, tempo e intervalo" -#: internal/applicationoverrides/ninjam/ninjam.go:77 +#: internal/applicationoverrides/ninjam/ninjam.go:79 msgid "No chat message received" msgstr "No se ha recibido ningún mensaje de chat" @@ -770,7 +770,7 @@ msgstr "Sin coincidencias" msgid "No reading regions set" msgstr "No hay regiones de lectura definidas" -#: internal/applicationoverrides/ninjam/ninjam.go:268 +#: internal/applicationoverrides/ninjam/ninjam.go:285 msgid "No remote users" msgstr "No hay usuarios remotos" @@ -880,7 +880,7 @@ msgstr "Perfil de puntuación" msgid "Quick menu not available" msgstr "Menú rápido no disponible" -#: internal/applicationoverrides/ninjam/ninjam.go:271 +#: internal/applicationoverrides/ninjam/ninjam.go:288 msgid "Quit Ninjam" msgstr "Salir de Ninjam" @@ -964,7 +964,7 @@ msgstr "Lee los atributos de la posición actual del cursor" msgid "Reads from the top of the screen to the cursor position" msgstr "Lee desde el inicio de la pantalla hasta la posición del cursor." -#: internal/applicationoverrides/ninjam/ninjam.go:229 +#: internal/applicationoverrides/ninjam/ninjam.go:244 msgid "Remote {0}, channel {1}" msgstr "Remoto {0}, canal {1}" @@ -976,7 +976,7 @@ msgstr "Marcas eliminadas" msgid "Removes marks from selected text" msgstr "Elimina las marcas del texto seleccionado" -#: internal/applicationoverrides/ninjam/ninjam.go:111 +#: internal/applicationoverrides/ninjam/ninjam.go:113 msgid "Rename channel" msgstr "Cambiar nombre del canal" @@ -1068,7 +1068,7 @@ msgstr "Seleccionar ajustes temporales para una aplicación" msgid "Select sound theme" msgstr "Seleccionar tema de sonido" -#: internal/applicationoverrides/ninjam/ninjam.go:145 +#: internal/applicationoverrides/ninjam/ninjam.go:159 msgid "Selected channel or control" msgstr "Canal o control seleccionado" @@ -1321,7 +1321,7 @@ msgstr "Prueba de voz: El veloz zorro marrón salta sobre el perro perezoso." msgid "Volume" msgstr "Volumen" -#: internal/applicationoverrides/ninjam/ninjam.go:253 +#: internal/applicationoverrides/ninjam/ninjam.go:270 msgid "Volume and pan {0}" msgstr "Volumen y panorámica {0}" @@ -1496,6 +1496,10 @@ msgstr "mayúscula" msgid "carrot" msgstr "acento circunflejo" +#: internal/applicationoverrides/ninjam/ninjam.go:310 +msgid "center" +msgstr "centro" + #: internal/presentation/text.go:68 msgid "character {0}" msgstr "carácter {0}" @@ -1890,6 +1894,10 @@ msgstr "labios sellados" msgid "magenta" msgstr "magenta" +#: internal/applicationoverrides/ninjam/ninjam.go:300 +msgid "minus {0}" +msgstr "menos {0}" + #: internal/app/spellcheck.go:22 internal/app/spellcheck_menu.go msgid "misspelled" msgstr "mal escrito" @@ -1922,7 +1930,7 @@ msgstr "mueve el cursor de revisión al carácter anterior" msgid "moves review to the previous line " msgstr "mueve el cursor de revisión a la línea anterior " -#: internal/applicationoverrides/ninjam/ninjam.go:239 +#: internal/applicationoverrides/ninjam/ninjam.go:255 msgid "muted" msgstr "silenciado" @@ -1953,11 +1961,11 @@ msgstr "sin consola de texto" msgid "none" msgstr "ninguno" -#: internal/applicationoverrides/ninjam/ninjam.go:247 +#: internal/applicationoverrides/ninjam/ninjam.go:263 msgid "not receiving" msgstr "sin recibir" -#: internal/applicationoverrides/ninjam/ninjam.go:242 +#: internal/applicationoverrides/ninjam/ninjam.go:258 msgid "not transmitting" msgstr "sin transmitir" @@ -1992,6 +2000,10 @@ msgstr "Establece una marca de principio y otra para el final de la selección." msgid "plus" msgstr "más" +#: internal/applicationoverrides/ninjam/ninjam.go:303 +msgid "plus {0}" +msgstr "más {0}" + #: internal/command/descriptions.go:23 msgid "presents the current character." msgstr "Lee el carácter actual" @@ -2038,7 +2050,7 @@ msgstr "Lee desde el cursor hasta el final de la pantalla" msgid "reads the contents of the current screen" msgstr "Lee el contenido de la pantalla actual" -#: internal/applicationoverrides/ninjam/ninjam.go:249 +#: internal/applicationoverrides/ninjam/ninjam.go:265 msgid "receiving" msgstr "recibiendo" @@ -2238,7 +2250,7 @@ msgstr "alterna el modo de aprendizaje" msgid "tongue out" msgstr "lengua fuera" -#: internal/applicationoverrides/ninjam/ninjam.go:244 +#: internal/applicationoverrides/ninjam/ninjam.go:260 msgid "transmitting" msgstr "transmitiendo" @@ -2259,7 +2271,7 @@ msgstr "no marcado" msgid "underline" msgstr "subrayado" -#: internal/applicationoverrides/ninjam/ninjam.go:237 +#: internal/applicationoverrides/ninjam/ninjam.go:253 msgid "unmuted" msgstr "no silenciado" @@ -2303,6 +2315,14 @@ msgstr "{0} cuadrícula. {1}" msgid "{0} is already in dictionary" msgstr "{0} ya está en el diccionario" +#: internal/applicationoverrides/ninjam/ninjam.go:313 +msgid "{0} percent left" +msgstr "{0} por ciento a la izquierda" + +#: internal/applicationoverrides/ninjam/ninjam.go:316 +msgid "{0} percent right" +msgstr "{0} por ciento a la derecha" + #: internal/app/spellcheck_menu.go msgid "{0} removed" msgstr "se ha eliminado {0}" diff --git a/internal/i18n/locale/fenrir.pot b/internal/i18n/locale/fenrir.pot index fe18859e..61aaf3e6 100644 --- a/internal/i18n/locale/fenrir.pot +++ b/internal/i18n/locale/fenrir.pot @@ -165,7 +165,7 @@ msgstr "" msgid "Chains" msgstr "" -#: internal/applicationoverrides/ninjam/ninjam.go:256 +#: internal/applicationoverrides/ninjam/ninjam.go:273 msgid "Channel name {0}" msgstr "" @@ -173,7 +173,7 @@ msgstr "" msgid "Character echo" msgstr "" -#: internal/applicationoverrides/ninjam/ninjam.go:103 +#: internal/applicationoverrides/ninjam/ninjam.go:105 msgid "Chat message" msgstr "" @@ -265,7 +265,7 @@ msgstr "" msgid "Column number for cursor" msgstr "" -#: internal/applicationoverrides/ninjam/ninjam.go:145 +#: internal/applicationoverrides/ninjam/ninjam.go:159 msgid "Connection, tempo and interval" msgstr "" @@ -329,7 +329,7 @@ msgstr "" msgid "Default settings restored" msgstr "" -#: internal/applicationoverrides/ninjam/ninjam.go:262 +#: internal/applicationoverrides/ninjam/ninjam.go:279 msgid "Delete channel" msgstr "" @@ -541,11 +541,11 @@ msgstr "" msgid "India" msgstr "" -#: internal/applicationoverrides/ninjam/ninjam.go:259 +#: internal/applicationoverrides/ninjam/ninjam.go:276 msgid "Input {0}" msgstr "" -#: internal/applicationoverrides/ninjam/ninjam.go:141 +#: internal/applicationoverrides/ninjam/ninjam.go:155 msgid "Interval position {0} of {1}" msgstr "" @@ -577,7 +577,7 @@ msgstr "" msgid "Last clipboard " msgstr "" -#: internal/applicationoverrides/ninjam/ninjam.go:145 +#: internal/applicationoverrides/ninjam/ninjam.go:159 msgid "Latest chat message" msgstr "" @@ -621,7 +621,7 @@ msgstr "" msgid "Live regions cleared" msgstr "" -#: internal/applicationoverrides/ninjam/ninjam.go:232 +#: internal/applicationoverrides/ninjam/ninjam.go:247 msgid "Local channel {0}" msgstr "" @@ -629,11 +629,11 @@ msgstr "" msgid "Mage" msgstr "" -#: internal/applicationoverrides/ninjam/ninjam.go:222 +#: internal/applicationoverrides/ninjam/ninjam.go:237 msgid "Master" msgstr "" -#: internal/applicationoverrides/ninjam/ninjam.go:224 +#: internal/applicationoverrides/ninjam/ninjam.go:239 msgid "Metronome" msgstr "" @@ -701,7 +701,7 @@ msgstr "" msgid "NetworkManager" msgstr "" -#: internal/applicationoverrides/ninjam/ninjam.go:265 +#: internal/applicationoverrides/ninjam/ninjam.go:282 msgid "New channel" msgstr "" @@ -709,15 +709,15 @@ msgstr "" msgid "Ninjam" msgstr "" -#: internal/applicationoverrides/ninjam/ninjam.go:79 +#: internal/applicationoverrides/ninjam/ninjam.go:81 msgid "Ninjam information unavailable" msgstr "" -#: internal/applicationoverrides/ninjam/ninjam.go:63 +#: internal/applicationoverrides/ninjam/ninjam.go:65 msgid "Ninjam regions: 1 latest chat message; 2 selected channel or control; 3 connection, tempo and interval" msgstr "" -#: internal/applicationoverrides/ninjam/ninjam.go:77 +#: internal/applicationoverrides/ninjam/ninjam.go:79 msgid "No chat message received" msgstr "" @@ -729,7 +729,7 @@ msgstr "" msgid "No reading regions set" msgstr "" -#: internal/applicationoverrides/ninjam/ninjam.go:268 +#: internal/applicationoverrides/ninjam/ninjam.go:285 msgid "No remote users" msgstr "" @@ -837,7 +837,7 @@ msgstr "" msgid "Quick menu not available" msgstr "" -#: internal/applicationoverrides/ninjam/ninjam.go:271 +#: internal/applicationoverrides/ninjam/ninjam.go:288 msgid "Quit Ninjam" msgstr "" @@ -921,7 +921,7 @@ msgstr "" msgid "Reads from the top of the screen to the cursor position" msgstr "" -#: internal/applicationoverrides/ninjam/ninjam.go:229 +#: internal/applicationoverrides/ninjam/ninjam.go:244 msgid "Remote {0}, channel {1}" msgstr "" @@ -933,7 +933,7 @@ msgstr "" msgid "Removes marks from selected text" msgstr "" -#: internal/applicationoverrides/ninjam/ninjam.go:111 +#: internal/applicationoverrides/ninjam/ninjam.go:113 msgid "Rename channel" msgstr "" @@ -1025,7 +1025,7 @@ msgstr "" msgid "Select sound theme" msgstr "" -#: internal/applicationoverrides/ninjam/ninjam.go:145 +#: internal/applicationoverrides/ninjam/ninjam.go:159 msgid "Selected channel or control" msgstr "" @@ -1273,7 +1273,7 @@ msgstr "" msgid "Volume" msgstr "" -#: internal/applicationoverrides/ninjam/ninjam.go:253 +#: internal/applicationoverrides/ninjam/ninjam.go:270 msgid "Volume and pan {0}" msgstr "" @@ -1433,6 +1433,10 @@ msgstr "" msgid "carrot" msgstr "" +#: internal/applicationoverrides/ninjam/ninjam.go:310 +msgid "center" +msgstr "" + #: internal/presentation/text.go:68 msgid "character {0}" msgstr "" @@ -1805,6 +1809,10 @@ msgstr "" msgid "magenta" msgstr "" +#: internal/applicationoverrides/ninjam/ninjam.go:300 +msgid "minus {0}" +msgstr "" + #: internal/app/spellcheck.go:22 internal/app/spellcheck_menu.go msgid "misspelled" msgstr "" @@ -1837,7 +1845,7 @@ msgstr "" msgid "moves review to the previous line " msgstr "" -#: internal/applicationoverrides/ninjam/ninjam.go:239 +#: internal/applicationoverrides/ninjam/ninjam.go:255 msgid "muted" msgstr "" @@ -1865,11 +1873,11 @@ msgstr "" msgid "none" msgstr "" -#: internal/applicationoverrides/ninjam/ninjam.go:247 +#: internal/applicationoverrides/ninjam/ninjam.go:263 msgid "not receiving" msgstr "" -#: internal/applicationoverrides/ninjam/ninjam.go:242 +#: internal/applicationoverrides/ninjam/ninjam.go:258 msgid "not transmitting" msgstr "" @@ -1901,6 +1909,10 @@ msgstr "" msgid "plus" msgstr "" +#: internal/applicationoverrides/ninjam/ninjam.go:303 +msgid "plus {0}" +msgstr "" + #: internal/command/descriptions.go:23 msgid "presents the current character." msgstr "" @@ -1937,7 +1949,7 @@ msgstr "" msgid "reads the contents of the current screen" msgstr "" -#: internal/applicationoverrides/ninjam/ninjam.go:249 +#: internal/applicationoverrides/ninjam/ninjam.go:265 msgid "receiving" msgstr "" @@ -2129,7 +2141,7 @@ msgstr "" msgid "tongue out" msgstr "" -#: internal/applicationoverrides/ninjam/ninjam.go:244 +#: internal/applicationoverrides/ninjam/ninjam.go:260 msgid "transmitting" msgstr "" @@ -2149,7 +2161,7 @@ msgstr "" msgid "underline" msgstr "" -#: internal/applicationoverrides/ninjam/ninjam.go:237 +#: internal/applicationoverrides/ninjam/ninjam.go:253 msgid "unmuted" msgstr "" @@ -2193,6 +2205,14 @@ msgstr "" msgid "{0} is already in dictionary" msgstr "" +#: internal/applicationoverrides/ninjam/ninjam.go:313 +msgid "{0} percent left" +msgstr "" + +#: internal/applicationoverrides/ninjam/ninjam.go:316 +msgid "{0} percent right" +msgstr "" + #: internal/app/spellcheck_menu.go msgid "{0} removed" msgstr "" diff --git a/internal/i18n/locale/pl/LC_MESSAGES/fenrir.po b/internal/i18n/locale/pl/LC_MESSAGES/fenrir.po index 37daed7a..a192b4a1 100644 --- a/internal/i18n/locale/pl/LC_MESSAGES/fenrir.po +++ b/internal/i18n/locale/pl/LC_MESSAGES/fenrir.po @@ -177,7 +177,7 @@ msgstr "Kot" msgid "Chains" msgstr "Łańcuchy" -#: internal/applicationoverrides/ninjam/ninjam.go:256 +#: internal/applicationoverrides/ninjam/ninjam.go:273 msgid "Channel name {0}" msgstr "Nazwa kanału {0}" @@ -185,7 +185,7 @@ msgstr "Nazwa kanału {0}" msgid "Character echo" msgstr "Echo znaków" -#: internal/applicationoverrides/ninjam/ninjam.go:103 +#: internal/applicationoverrides/ninjam/ninjam.go:105 msgid "Chat message" msgstr "Wiadomość czatu" @@ -278,7 +278,7 @@ msgstr "Trumna" msgid "Column number for cursor" msgstr "Numer kolumny kursora" -#: internal/applicationoverrides/ninjam/ninjam.go:145 +#: internal/applicationoverrides/ninjam/ninjam.go:159 msgid "Connection, tempo and interval" msgstr "Połączenie, tempo i interwał" @@ -347,7 +347,7 @@ msgstr "Domyślne" msgid "Default settings restored" msgstr "Przywrócono ustawienia domyślne" -#: internal/applicationoverrides/ninjam/ninjam.go:262 +#: internal/applicationoverrides/ninjam/ninjam.go:279 msgid "Delete channel" msgstr "Usuń kanał" @@ -570,11 +570,11 @@ msgstr "Wcięcia" msgid "India" msgstr "Indie" -#: internal/applicationoverrides/ninjam/ninjam.go:259 +#: internal/applicationoverrides/ninjam/ninjam.go:276 msgid "Input {0}" msgstr "Wejście {0}" -#: internal/applicationoverrides/ninjam/ninjam.go:141 +#: internal/applicationoverrides/ninjam/ninjam.go:155 msgid "Interval position {0} of {1}" msgstr "Pozycja interwału {0} z {1}" @@ -606,7 +606,7 @@ msgstr "Klawiatura" msgid "Last clipboard " msgstr "Ostatni showek " -#: internal/applicationoverrides/ninjam/ninjam.go:145 +#: internal/applicationoverrides/ninjam/ninjam.go:159 msgid "Latest chat message" msgstr "Ostatnia wiadomość czatu" @@ -650,7 +650,7 @@ msgstr "Obszar dynamiczny {0}: {1}" msgid "Live regions cleared" msgstr "Wyczyszczono obszary dynamiczne" -#: internal/applicationoverrides/ninjam/ninjam.go:232 +#: internal/applicationoverrides/ninjam/ninjam.go:247 msgid "Local channel {0}" msgstr "Kanał lokalny {0}" @@ -658,11 +658,11 @@ msgstr "Kanał lokalny {0}" msgid "Mage" msgstr "Mag" -#: internal/applicationoverrides/ninjam/ninjam.go:222 +#: internal/applicationoverrides/ninjam/ninjam.go:237 msgid "Master" msgstr "Główne wyjście" -#: internal/applicationoverrides/ninjam/ninjam.go:224 +#: internal/applicationoverrides/ninjam/ninjam.go:239 msgid "Metronome" msgstr "Metronom" @@ -734,7 +734,7 @@ msgstr "Holandia" msgid "NetworkManager" msgstr "NetworkManager" -#: internal/applicationoverrides/ninjam/ninjam.go:265 +#: internal/applicationoverrides/ninjam/ninjam.go:282 msgid "New channel" msgstr "Nowy kanał" @@ -742,11 +742,11 @@ msgstr "Nowy kanał" msgid "Ninjam" msgstr "Ninjam" -#: internal/applicationoverrides/ninjam/ninjam.go:79 +#: internal/applicationoverrides/ninjam/ninjam.go:81 msgid "Ninjam information unavailable" msgstr "Informacje o Ninjam są niedostępne" -#: internal/applicationoverrides/ninjam/ninjam.go:63 +#: internal/applicationoverrides/ninjam/ninjam.go:65 msgid "" "Ninjam regions: 1 latest chat message; 2 selected channel or control; 3 " "connection, tempo and interval" @@ -754,7 +754,7 @@ msgstr "" "Regiony Ninjam: 1 ostatnia wiadomość czatu; 2 wybrany kanał lub element " "sterujący; 3 połączenie, tempo i interwał" -#: internal/applicationoverrides/ninjam/ninjam.go:77 +#: internal/applicationoverrides/ninjam/ninjam.go:79 msgid "No chat message received" msgstr "Nie odebrano wiadomości czatu" @@ -766,7 +766,7 @@ msgstr "Brak dopasowań" msgid "No reading regions set" msgstr "Nie ustawiono obszarów czytania" -#: internal/applicationoverrides/ninjam/ninjam.go:268 +#: internal/applicationoverrides/ninjam/ninjam.go:285 msgid "No remote users" msgstr "Brak użytkowników zdalnych" @@ -875,7 +875,7 @@ msgstr "Profil interpunkcji" msgid "Quick menu not available" msgstr "Menu podręczne niedostępne" -#: internal/applicationoverrides/ninjam/ninjam.go:271 +#: internal/applicationoverrides/ninjam/ninjam.go:288 msgid "Quit Ninjam" msgstr "Zakończ Ninjam" @@ -959,7 +959,7 @@ msgstr "Odczytuje atrybuty bieżącej pozycji kursora" msgid "Reads from the top of the screen to the cursor position" msgstr "Czyta od góry ekranu do pozycji kursora." -#: internal/applicationoverrides/ninjam/ninjam.go:229 +#: internal/applicationoverrides/ninjam/ninjam.go:244 msgid "Remote {0}, channel {1}" msgstr "Zdalny użytkownik {0}, kanał {1}" @@ -971,7 +971,7 @@ msgstr "Usuń znaczniki" msgid "Removes marks from selected text" msgstr "Usuwa znaczniki z zaznaczonego tekstu" -#: internal/applicationoverrides/ninjam/ninjam.go:111 +#: internal/applicationoverrides/ninjam/ninjam.go:113 msgid "Rename channel" msgstr "Zmień nazwę kanału" @@ -1063,7 +1063,7 @@ msgstr "Wybierz tymczasowe ustawienia aplikacji" msgid "Select sound theme" msgstr "Wybierz motyw dźwiękowy" -#: internal/applicationoverrides/ninjam/ninjam.go:145 +#: internal/applicationoverrides/ninjam/ninjam.go:159 msgid "Selected channel or control" msgstr "Wybrany kanał lub element sterujący" @@ -1317,7 +1317,7 @@ msgstr "Test głosu: Szybki brązowy lis przeskakuje nad leniwym psem." msgid "Volume" msgstr "Głośność" -#: internal/applicationoverrides/ninjam/ninjam.go:253 +#: internal/applicationoverrides/ninjam/ninjam.go:270 msgid "Volume and pan {0}" msgstr "Głośność i panorama {0}" @@ -1492,6 +1492,10 @@ msgstr "duża" msgid "carrot" msgstr "daszek" +#: internal/applicationoverrides/ninjam/ninjam.go:310 +msgid "center" +msgstr "środek" + #: internal/presentation/text.go:68 msgid "character {0}" msgstr "znak {0}" @@ -1883,6 +1887,10 @@ msgstr "usta zamknięte" msgid "magenta" msgstr "magenta" +#: internal/applicationoverrides/ninjam/ninjam.go:300 +msgid "minus {0}" +msgstr "minus {0}" + #: internal/app/spellcheck.go:22 internal/app/spellcheck_menu.go msgid "misspelled" msgstr "Błąd pisowni" @@ -1915,7 +1923,7 @@ msgstr "przenosi kursor przeglądu do poprzedniego znaku" msgid "moves review to the previous line " msgstr "przenosi kursor przeglądu do poprzedniego wiersza " -#: internal/applicationoverrides/ninjam/ninjam.go:239 +#: internal/applicationoverrides/ninjam/ninjam.go:255 msgid "muted" msgstr "wyciszony" @@ -1946,11 +1954,11 @@ msgstr "brak konsoli tekstowej" msgid "none" msgstr "brak" -#: internal/applicationoverrides/ninjam/ninjam.go:247 +#: internal/applicationoverrides/ninjam/ninjam.go:263 msgid "not receiving" msgstr "odbiór wyłączony" -#: internal/applicationoverrides/ninjam/ninjam.go:242 +#: internal/applicationoverrides/ninjam/ninjam.go:258 msgid "not transmitting" msgstr "nadawanie wyłączone" @@ -1984,6 +1992,10 @@ msgstr "ustaw znacznik początku i końca." msgid "plus" msgstr "plus" +#: internal/applicationoverrides/ninjam/ninjam.go:303 +msgid "plus {0}" +msgstr "plus {0}" + #: internal/command/descriptions.go:23 msgid "presents the current character." msgstr "Odczytuje aktualny znak." @@ -2030,7 +2042,7 @@ msgstr "Czyta od pozycji kursora do końca ekranu." msgid "reads the contents of the current screen" msgstr "Wypowiada treść aktualnego ekranu." -#: internal/applicationoverrides/ninjam/ninjam.go:249 +#: internal/applicationoverrides/ninjam/ninjam.go:265 msgid "receiving" msgstr "odbiór włączony" @@ -2230,7 +2242,7 @@ msgstr "Przełącza tryb pomocy." msgid "tongue out" msgstr "wystawiony język" -#: internal/applicationoverrides/ninjam/ninjam.go:244 +#: internal/applicationoverrides/ninjam/ninjam.go:260 msgid "transmitting" msgstr "nadawanie włączone" @@ -2251,7 +2263,7 @@ msgstr "niezaznaczone" msgid "underline" msgstr "podkreślenie" -#: internal/applicationoverrides/ninjam/ninjam.go:237 +#: internal/applicationoverrides/ninjam/ninjam.go:253 msgid "unmuted" msgstr "niewyciszony" @@ -2295,6 +2307,14 @@ msgstr "{0} siatka. {1}" msgid "{0} is already in dictionary" msgstr "{0} jest już w słowniku" +#: internal/applicationoverrides/ninjam/ninjam.go:313 +msgid "{0} percent left" +msgstr "{0} procent w lewo" + +#: internal/applicationoverrides/ninjam/ninjam.go:316 +msgid "{0} percent right" +msgstr "{0} procent w prawo" + #: internal/app/spellcheck_menu.go msgid "{0} removed" msgstr "{0} usunięte." diff --git a/internal/i18n/locale/pt/LC_MESSAGES/fenrir.po b/internal/i18n/locale/pt/LC_MESSAGES/fenrir.po index 0964627f..5f4e01e4 100644 --- a/internal/i18n/locale/pt/LC_MESSAGES/fenrir.po +++ b/internal/i18n/locale/pt/LC_MESSAGES/fenrir.po @@ -175,7 +175,7 @@ msgstr "Gato" msgid "Chains" msgstr "Correntes" -#: internal/applicationoverrides/ninjam/ninjam.go:256 +#: internal/applicationoverrides/ninjam/ninjam.go:273 msgid "Channel name {0}" msgstr "Nome do canal {0}" @@ -183,7 +183,7 @@ msgstr "Nome do canal {0}" msgid "Character echo" msgstr "Eco de caracteres" -#: internal/applicationoverrides/ninjam/ninjam.go:103 +#: internal/applicationoverrides/ninjam/ninjam.go:105 msgid "Chat message" msgstr "Mensagem do chat" @@ -276,7 +276,7 @@ msgstr "Caixão" msgid "Column number for cursor" msgstr "Número da coluna do cursor" -#: internal/applicationoverrides/ninjam/ninjam.go:145 +#: internal/applicationoverrides/ninjam/ninjam.go:159 msgid "Connection, tempo and interval" msgstr "Conexão, andamento e intervalo" @@ -345,7 +345,7 @@ msgstr "Padrão" msgid "Default settings restored" msgstr "Configurações padrão restauradas" -#: internal/applicationoverrides/ninjam/ninjam.go:262 +#: internal/applicationoverrides/ninjam/ninjam.go:279 msgid "Delete channel" msgstr "Excluir canal" @@ -570,11 +570,11 @@ msgstr "Recuo" msgid "India" msgstr "Índia" -#: internal/applicationoverrides/ninjam/ninjam.go:259 +#: internal/applicationoverrides/ninjam/ninjam.go:276 msgid "Input {0}" msgstr "Entrada {0}" -#: internal/applicationoverrides/ninjam/ninjam.go:141 +#: internal/applicationoverrides/ninjam/ninjam.go:155 msgid "Interval position {0} of {1}" msgstr "Posição do intervalo {0} de {1}" @@ -606,7 +606,7 @@ msgstr "Teclado" msgid "Last clipboard " msgstr "Última área de transferência " -#: internal/applicationoverrides/ninjam/ninjam.go:145 +#: internal/applicationoverrides/ninjam/ninjam.go:159 msgid "Latest chat message" msgstr "Última mensagem do chat" @@ -650,7 +650,7 @@ msgstr "Região dinâmica {0}: {1}" msgid "Live regions cleared" msgstr "Regiões dinâmicas limpas" -#: internal/applicationoverrides/ninjam/ninjam.go:232 +#: internal/applicationoverrides/ninjam/ninjam.go:247 msgid "Local channel {0}" msgstr "Canal local {0}" @@ -658,11 +658,11 @@ msgstr "Canal local {0}" msgid "Mage" msgstr "Mago" -#: internal/applicationoverrides/ninjam/ninjam.go:222 +#: internal/applicationoverrides/ninjam/ninjam.go:237 msgid "Master" msgstr "Principal" -#: internal/applicationoverrides/ninjam/ninjam.go:224 +#: internal/applicationoverrides/ninjam/ninjam.go:239 msgid "Metronome" msgstr "Metrônomo" @@ -736,7 +736,7 @@ msgstr "Países Baixos" msgid "NetworkManager" msgstr "NetworkManager" -#: internal/applicationoverrides/ninjam/ninjam.go:265 +#: internal/applicationoverrides/ninjam/ninjam.go:282 msgid "New channel" msgstr "Novo canal" @@ -744,11 +744,11 @@ msgstr "Novo canal" msgid "Ninjam" msgstr "Ninjam" -#: internal/applicationoverrides/ninjam/ninjam.go:79 +#: internal/applicationoverrides/ninjam/ninjam.go:81 msgid "Ninjam information unavailable" msgstr "Informações do Ninjam indisponíveis" -#: internal/applicationoverrides/ninjam/ninjam.go:63 +#: internal/applicationoverrides/ninjam/ninjam.go:65 msgid "" "Ninjam regions: 1 latest chat message; 2 selected channel or control; 3 " "connection, tempo and interval" @@ -756,7 +756,7 @@ msgstr "" "Regiões do Ninjam: 1 última mensagem do chat; 2 canal ou controle " "selecionado; 3 conexão, andamento e intervalo" -#: internal/applicationoverrides/ninjam/ninjam.go:77 +#: internal/applicationoverrides/ninjam/ninjam.go:79 msgid "No chat message received" msgstr "Nenhuma mensagem de chat recebida" @@ -768,7 +768,7 @@ msgstr "Nenhum resultado" msgid "No reading regions set" msgstr "Nenhuma região de leitura definida" -#: internal/applicationoverrides/ninjam/ninjam.go:268 +#: internal/applicationoverrides/ninjam/ninjam.go:285 msgid "No remote users" msgstr "Nenhum usuário remoto" @@ -879,7 +879,7 @@ msgstr "Perfil de pontuação" msgid "Quick menu not available" msgstr "Menu rápido indisponível" -#: internal/applicationoverrides/ninjam/ninjam.go:271 +#: internal/applicationoverrides/ninjam/ninjam.go:288 msgid "Quit Ninjam" msgstr "Sair do Ninjam" @@ -963,7 +963,7 @@ msgstr "Lê os atributos da posição atual do cursor" msgid "Reads from the top of the screen to the cursor position" msgstr "Lê da parte superior da tela até a posição do cursor" -#: internal/applicationoverrides/ninjam/ninjam.go:229 +#: internal/applicationoverrides/ninjam/ninjam.go:244 msgid "Remote {0}, channel {1}" msgstr "Remoto {0}, canal {1}" @@ -975,7 +975,7 @@ msgstr "Remove marcas" msgid "Removes marks from selected text" msgstr "Remove as marcas do texto selecionado" -#: internal/applicationoverrides/ninjam/ninjam.go:111 +#: internal/applicationoverrides/ninjam/ninjam.go:113 msgid "Rename channel" msgstr "Renomear canal" @@ -1067,7 +1067,7 @@ msgstr "Selecionar configurações temporárias de um aplicativo" msgid "Select sound theme" msgstr "Selecionar tema de som" -#: internal/applicationoverrides/ninjam/ninjam.go:145 +#: internal/applicationoverrides/ninjam/ninjam.go:159 msgid "Selected channel or control" msgstr "Canal ou controle selecionado" @@ -1322,7 +1322,7 @@ msgstr "" msgid "Volume" msgstr "Volume" -#: internal/applicationoverrides/ninjam/ninjam.go:253 +#: internal/applicationoverrides/ninjam/ninjam.go:270 msgid "Volume and pan {0}" msgstr "Volume e panorama {0}" @@ -1497,6 +1497,10 @@ msgstr "maiúscula" msgid "carrot" msgstr "acento circunflexo" +#: internal/applicationoverrides/ninjam/ninjam.go:310 +msgid "center" +msgstr "centro" + #: internal/presentation/text.go:68 msgid "character {0}" msgstr "caractere {0}" @@ -1894,6 +1898,10 @@ msgstr "lábios selados" msgid "magenta" msgstr "magenta" +#: internal/applicationoverrides/ninjam/ninjam.go:300 +msgid "minus {0}" +msgstr "menos {0}" + #: internal/app/spellcheck.go:22 internal/app/spellcheck_menu.go msgid "misspelled" msgstr "com erros ortográficos" @@ -1926,7 +1934,7 @@ msgstr "move o cursor de revisão para o caractere anterior" msgid "moves review to the previous line " msgstr "move o cursor de revisão para a linha anterior " -#: internal/applicationoverrides/ninjam/ninjam.go:239 +#: internal/applicationoverrides/ninjam/ninjam.go:255 msgid "muted" msgstr "silenciado" @@ -1957,11 +1965,11 @@ msgstr "nenhum console de texto" msgid "none" msgstr "nenhum" -#: internal/applicationoverrides/ninjam/ninjam.go:247 +#: internal/applicationoverrides/ninjam/ninjam.go:263 msgid "not receiving" msgstr "não recebendo" -#: internal/applicationoverrides/ninjam/ninjam.go:242 +#: internal/applicationoverrides/ninjam/ninjam.go:258 msgid "not transmitting" msgstr "não transmitindo" @@ -1996,6 +2004,10 @@ msgstr "por favor, defina o início e o fim da seleção" msgid "plus" msgstr "mais" +#: internal/applicationoverrides/ninjam/ninjam.go:303 +msgid "plus {0}" +msgstr "mais {0}" + #: internal/command/descriptions.go:23 msgid "presents the current character." msgstr "apresenta o caracter atual." @@ -2042,7 +2054,7 @@ msgstr "lê a partir do cursor até a parte inferior da tela" msgid "reads the contents of the current screen" msgstr "lê o conteúdo da tela atual" -#: internal/applicationoverrides/ninjam/ninjam.go:249 +#: internal/applicationoverrides/ninjam/ninjam.go:265 msgid "receiving" msgstr "recebendo" @@ -2243,7 +2255,7 @@ msgstr "alterna o modo de aprendizado" msgid "tongue out" msgstr "língua de fora" -#: internal/applicationoverrides/ninjam/ninjam.go:244 +#: internal/applicationoverrides/ninjam/ninjam.go:260 msgid "transmitting" msgstr "transmitindo" @@ -2264,7 +2276,7 @@ msgstr "desmarcado" msgid "underline" msgstr "sublinhado" -#: internal/applicationoverrides/ninjam/ninjam.go:237 +#: internal/applicationoverrides/ninjam/ninjam.go:253 msgid "unmuted" msgstr "não silenciado" @@ -2308,6 +2320,14 @@ msgstr "{0} grade. {1}" msgid "{0} is already in dictionary" msgstr "{0} já está no dicionário" +#: internal/applicationoverrides/ninjam/ninjam.go:313 +msgid "{0} percent left" +msgstr "{0} por cento à esquerda" + +#: internal/applicationoverrides/ninjam/ninjam.go:316 +msgid "{0} percent right" +msgstr "{0} por cento à direita" + #: internal/app/spellcheck_menu.go msgid "{0} removed" msgstr "{0} removido" diff --git a/internal/i18n/locale/ru/LC_MESSAGES/fenrir.po b/internal/i18n/locale/ru/LC_MESSAGES/fenrir.po index 99f00a14..1800730b 100644 --- a/internal/i18n/locale/ru/LC_MESSAGES/fenrir.po +++ b/internal/i18n/locale/ru/LC_MESSAGES/fenrir.po @@ -174,7 +174,7 @@ msgstr "Кошка" msgid "Chains" msgstr "Цепи" -#: internal/applicationoverrides/ninjam/ninjam.go:256 +#: internal/applicationoverrides/ninjam/ninjam.go:273 msgid "Channel name {0}" msgstr "Название канала {0}" @@ -182,7 +182,7 @@ msgstr "Название канала {0}" msgid "Character echo" msgstr "Эхо символов" -#: internal/applicationoverrides/ninjam/ninjam.go:103 +#: internal/applicationoverrides/ninjam/ninjam.go:105 msgid "Chat message" msgstr "Сообщение чата" @@ -275,7 +275,7 @@ msgstr "Гроб" msgid "Column number for cursor" msgstr "Номер столбца для курсора." -#: internal/applicationoverrides/ninjam/ninjam.go:145 +#: internal/applicationoverrides/ninjam/ninjam.go:159 msgid "Connection, tempo and interval" msgstr "Соединение, темп и интервал" @@ -344,7 +344,7 @@ msgstr "По умолчанию" msgid "Default settings restored" msgstr "Настройки по умолчанию восстановлены" -#: internal/applicationoverrides/ninjam/ninjam.go:262 +#: internal/applicationoverrides/ninjam/ninjam.go:279 msgid "Delete channel" msgstr "Удалить канал" @@ -566,11 +566,11 @@ msgstr "Отступы" msgid "India" msgstr "Индия" -#: internal/applicationoverrides/ninjam/ninjam.go:259 +#: internal/applicationoverrides/ninjam/ninjam.go:276 msgid "Input {0}" msgstr "Вход {0}" -#: internal/applicationoverrides/ninjam/ninjam.go:141 +#: internal/applicationoverrides/ninjam/ninjam.go:155 msgid "Interval position {0} of {1}" msgstr "Позиция интервала {0} из {1}" @@ -602,7 +602,7 @@ msgstr "Клавиатура" msgid "Last clipboard " msgstr "Последний буфер обмена. " -#: internal/applicationoverrides/ninjam/ninjam.go:145 +#: internal/applicationoverrides/ninjam/ninjam.go:159 msgid "Latest chat message" msgstr "Последнее сообщение чата" @@ -646,7 +646,7 @@ msgstr "Динамическая область {0}: {1}" msgid "Live regions cleared" msgstr "Динамические области очищены" -#: internal/applicationoverrides/ninjam/ninjam.go:232 +#: internal/applicationoverrides/ninjam/ninjam.go:247 msgid "Local channel {0}" msgstr "Локальный канал {0}" @@ -654,11 +654,11 @@ msgstr "Локальный канал {0}" msgid "Mage" msgstr "Маг" -#: internal/applicationoverrides/ninjam/ninjam.go:222 +#: internal/applicationoverrides/ninjam/ninjam.go:237 msgid "Master" msgstr "Основной выход" -#: internal/applicationoverrides/ninjam/ninjam.go:224 +#: internal/applicationoverrides/ninjam/ninjam.go:239 msgid "Metronome" msgstr "Метроном" @@ -729,7 +729,7 @@ msgstr "Нидерланды" msgid "NetworkManager" msgstr "NetworkManager" -#: internal/applicationoverrides/ninjam/ninjam.go:265 +#: internal/applicationoverrides/ninjam/ninjam.go:282 msgid "New channel" msgstr "Новый канал" @@ -737,11 +737,11 @@ msgstr "Новый канал" msgid "Ninjam" msgstr "Ninjam" -#: internal/applicationoverrides/ninjam/ninjam.go:79 +#: internal/applicationoverrides/ninjam/ninjam.go:81 msgid "Ninjam information unavailable" msgstr "Информация Ninjam недоступна" -#: internal/applicationoverrides/ninjam/ninjam.go:63 +#: internal/applicationoverrides/ninjam/ninjam.go:65 msgid "" "Ninjam regions: 1 latest chat message; 2 selected channel or control; 3 " "connection, tempo and interval" @@ -749,7 +749,7 @@ msgstr "" "Области Ninjam: 1 последнее сообщение чата; 2 выбранный канал или элемент " "управления; 3 соединение, темп и интервал" -#: internal/applicationoverrides/ninjam/ninjam.go:77 +#: internal/applicationoverrides/ninjam/ninjam.go:79 msgid "No chat message received" msgstr "Сообщения чата не получены" @@ -761,7 +761,7 @@ msgstr "Совпадений нет" msgid "No reading regions set" msgstr "Области чтения не заданы" -#: internal/applicationoverrides/ninjam/ninjam.go:268 +#: internal/applicationoverrides/ninjam/ninjam.go:285 msgid "No remote users" msgstr "Нет удалённых пользователей" @@ -871,7 +871,7 @@ msgstr "Профиль пунктуации" msgid "Quick menu not available" msgstr "Быстрое меню недоступно." -#: internal/applicationoverrides/ninjam/ninjam.go:271 +#: internal/applicationoverrides/ninjam/ninjam.go:288 msgid "Quit Ninjam" msgstr "Выйти из Ninjam" @@ -955,7 +955,7 @@ msgstr "Читает атрибуты текущей позиции курсор msgid "Reads from the top of the screen to the cursor position" msgstr "Чтение сначала экрана до курсора." -#: internal/applicationoverrides/ninjam/ninjam.go:229 +#: internal/applicationoverrides/ninjam/ninjam.go:244 msgid "Remote {0}, channel {1}" msgstr "Удалённый пользователь {0}, канал {1}" @@ -967,7 +967,7 @@ msgstr "Удалить метки." msgid "Removes marks from selected text" msgstr "Удалить метки из выбранного текста." -#: internal/applicationoverrides/ninjam/ninjam.go:111 +#: internal/applicationoverrides/ninjam/ninjam.go:113 msgid "Rename channel" msgstr "Переименовать канал" @@ -1059,7 +1059,7 @@ msgstr "Выбрать временные настройки приложени msgid "Select sound theme" msgstr "Выбрать звуковую тему" -#: internal/applicationoverrides/ninjam/ninjam.go:145 +#: internal/applicationoverrides/ninjam/ninjam.go:159 msgid "Selected channel or control" msgstr "Выбранный канал или элемент управления" @@ -1314,7 +1314,7 @@ msgstr "" msgid "Volume" msgstr "Громкость" -#: internal/applicationoverrides/ninjam/ninjam.go:253 +#: internal/applicationoverrides/ninjam/ninjam.go:270 msgid "Volume and pan {0}" msgstr "Громкость и панорама {0}" @@ -1489,6 +1489,10 @@ msgstr "большая" msgid "carrot" msgstr "крышка" +#: internal/applicationoverrides/ninjam/ninjam.go:310 +msgid "center" +msgstr "центр" + #: internal/presentation/text.go:68 msgid "character {0}" msgstr "символ {0}" @@ -1879,6 +1883,10 @@ msgstr "рот на замке" msgid "magenta" msgstr "пурпурный" +#: internal/applicationoverrides/ninjam/ninjam.go:300 +msgid "minus {0}" +msgstr "минус {0}" + #: internal/app/spellcheck.go:22 internal/app/spellcheck_menu.go msgid "misspelled" msgstr "Орфографическая ошибка" @@ -1911,7 +1919,7 @@ msgstr "перемещает курсор обзора к предыдущему msgid "moves review to the previous line " msgstr "Переместить курсор просмотра к предыдущей строке " -#: internal/applicationoverrides/ninjam/ninjam.go:239 +#: internal/applicationoverrides/ninjam/ninjam.go:255 msgid "muted" msgstr "звук выключен" @@ -1942,11 +1950,11 @@ msgstr "нет текстовой консоли" msgid "none" msgstr "нет" -#: internal/applicationoverrides/ninjam/ninjam.go:247 +#: internal/applicationoverrides/ninjam/ninjam.go:263 msgid "not receiving" msgstr "приём выключен" -#: internal/applicationoverrides/ninjam/ninjam.go:242 +#: internal/applicationoverrides/ninjam/ninjam.go:258 msgid "not transmitting" msgstr "передача выключена" @@ -1980,6 +1988,10 @@ msgstr "Пожалуйста, установите начало и конец." msgid "plus" msgstr "плюс" +#: internal/applicationoverrides/ninjam/ninjam.go:303 +msgid "plus {0}" +msgstr "плюс {0}" + #: internal/command/descriptions.go:23 msgid "presents the current character." msgstr "Сообщать текущий символ." @@ -2026,7 +2038,7 @@ msgstr "Чтение от курсора до конца экрана." msgid "reads the contents of the current screen" msgstr "Чтение содержимого текущего экрана." -#: internal/applicationoverrides/ninjam/ninjam.go:249 +#: internal/applicationoverrides/ninjam/ninjam.go:265 msgid "receiving" msgstr "приём включён" @@ -2227,7 +2239,7 @@ msgstr "Переключение в режим обучения" msgid "tongue out" msgstr "высунутый язык" -#: internal/applicationoverrides/ninjam/ninjam.go:244 +#: internal/applicationoverrides/ninjam/ninjam.go:260 msgid "transmitting" msgstr "передача включена" @@ -2248,7 +2260,7 @@ msgstr "не отмечено" msgid "underline" msgstr "Подчеркнутый" -#: internal/applicationoverrides/ninjam/ninjam.go:237 +#: internal/applicationoverrides/ninjam/ninjam.go:253 msgid "unmuted" msgstr "звук включён" @@ -2292,6 +2304,14 @@ msgstr "{0}, сетка. {1}" msgid "{0} is already in dictionary" msgstr "{0} уже находится в словаре" +#: internal/applicationoverrides/ninjam/ninjam.go:313 +msgid "{0} percent left" +msgstr "{0} процентов влево" + +#: internal/applicationoverrides/ninjam/ninjam.go:316 +msgid "{0} percent right" +msgstr "{0} процентов вправо" + #: internal/app/spellcheck_menu.go msgid "{0} removed" msgstr "{0} удалено" diff --git a/internal/terminal/application_override_linux_test.go b/internal/terminal/application_override_linux_test.go index 6c04a1ea..7d33ea2c 100644 --- a/internal/terminal/application_override_linux_test.go +++ b/internal/terminal/application_override_linux_test.go @@ -64,9 +64,19 @@ func TestNinjamOverrideTerminalPresentation(t *testing.T) { if got := paint(1, "0.0dB center", " new"); !slices.Equal(got, []string{"Master Volume and pan 0.0dB center", " new"}) { t.Fatal(got) } - if got := paint(1, "-0.5dB center", " new"); !slices.Equal(got, []string{"Master Volume and pan -0.5dB center"}) { + if got := paint(1, "-0.5dB center", " new"); !slices.Equal(got, []string{"minus 0.5dB"}) { t.Fatal(got) } + for _, trial := range []struct{ value, want string }{ + {"-0.5dB 1%L", "1 percent left"}, + {"-0.5dB center", "center"}, + {"-0.5dB 1%R", "1 percent right"}, + {"+0.5dB 1%R", "plus 0.5dB"}, + } { + if got := paint(1, trial.value, " new"); !slices.Equal(got, []string{trial.want}) { + t.Fatal(trial.value, got) + } + } }) } } diff --git a/internal/terminal/ninjam_live_linux_test.go b/internal/terminal/ninjam_live_linux_test.go index d9fb65d6..cace92ec 100644 --- a/internal/terminal/ninjam_live_linux_test.go +++ b/internal/terminal/ninjam_live_linux_test.go @@ -12,6 +12,7 @@ import ( "os" "os/exec" "path/filepath" + "slices" "strings" "syscall" "testing" @@ -214,13 +215,13 @@ func TestNinjamLiveOverride(t *testing.T) { start = len(output) send("\x1bOA") waitFor("edited volume", 2*time.Second, func() bool { - return focus() != oldValue && strings.Contains(focus(), "Master Volume and pan") && strings.Contains(strings.Join(output[start:], "\n"), focus()) + return focus() != oldValue && strings.Contains(focus(), "Master Volume and pan") && slices.Contains(output[start:], "plus 0.5dB") }) oldValue = focus() start = len(output) send("\x1bOD") waitFor("edited pan", 2*time.Second, func() bool { - return focus() != oldValue && strings.Contains(focus(), "Master Volume and pan") && strings.Contains(strings.Join(output[start:], "\n"), focus()) + return focus() != oldValue && strings.Contains(focus(), "Master Volume and pan") && slices.Contains(output[start:], "1 percent left") }) send("\r") start = len(output)