Initial attempt at making rogue work with application overrides.
This commit is contained in:
1 parent
088f706cb4
commit
46dc520854
15 files changed
+1836
-111
No files matched your search
@@ -11,6 +11,7 @@ import (
|
||||
"git.stormux.org/storm/fenrir/internal/applicationoverrides"
|
||||
"git.stormux.org/storm/fenrir/internal/applicationoverrides/networkmanager"
|
||||
"git.stormux.org/storm/fenrir/internal/applicationoverrides/ninjam"
|
||||
"git.stormux.org/storm/fenrir/internal/applicationoverrides/rogue"
|
||||
"git.stormux.org/storm/fenrir/internal/config"
|
||||
"git.stormux.org/storm/fenrir/internal/i18n"
|
||||
"git.stormux.org/storm/fenrir/internal/interaction"
|
||||
@@ -192,6 +193,8 @@ func (a *application) select_override(id string) {
|
||||
adapter = &ninjam.Adapter{}
|
||||
case "networkmanager":
|
||||
adapter = &networkmanager.Adapter{}
|
||||
case "rogue":
|
||||
adapter = &rogue.Adapter{}
|
||||
default:
|
||||
return
|
||||
}
|
||||
@@ -315,8 +318,8 @@ func (a *application) open_applications() {
|
||||
a.voice.Say(i18n.T("Settings are busy"))
|
||||
return
|
||||
}
|
||||
items := []string{i18n.T("Default"), i18n.T("NetworkManager"), i18n.T("Ninjam")}
|
||||
ids := []string{"default", "networkmanager", "ninjam"}
|
||||
items := []string{i18n.T("Default"), i18n.T("NetworkManager"), i18n.T("Ninjam"), i18n.T("Rogue")}
|
||||
ids := []string{"default", "networkmanager", "ninjam", "rogue"}
|
||||
position := 0
|
||||
if selected := a.overrides[a.lastTerminal]; selected != nil {
|
||||
position = slices.Index(ids, selected.id)
|
||||
|
||||
@@ -35,12 +35,56 @@ func override_screen(terminal int, kind string) screen.Snapshot {
|
||||
s.Attributes[111] = screen.Attribute{Foreground: screen.ColorIndexed, Background: screen.ColorIndexed | 7}
|
||||
case "networkmanager":
|
||||
copy(s.Line(2), []rune("┌──────── NetworkManager TUI ─────────┐"))
|
||||
case "rogue":
|
||||
copy(s.Line(5), []rune("|..@...+"))
|
||||
copy(s.Line(23), []rune("Level: 1 Gold: 0 Hp: 12(12) Str: 16(16) Arm: 4 Exp: 1/0"))
|
||||
default:
|
||||
copy(s.Line(23), []rune(kind))
|
||||
}
|
||||
return s
|
||||
}
|
||||
|
||||
func TestRogueMenuSelectionNamedReadProfileAndShellExit(t *testing.T) {
|
||||
a, voice := persistence_application(t, true)
|
||||
override_read(t, a, override_screen(1, "rogue"))
|
||||
a.open_applications()
|
||||
a.ui.handle(interaction.Key{Text: "r"})
|
||||
if got := voice.messages[len(voice.messages)-1]; got != "Rogue" {
|
||||
t.Fatal(got)
|
||||
}
|
||||
a.ui.handle(interaction.Key{Name: "enter"})
|
||||
override_read(t, a, override_screen(1, "rogue"))
|
||||
if a.overrideCurrent == nil || a.overrideCurrent.id != "rogue" {
|
||||
t.Fatal("Rogue not activated")
|
||||
}
|
||||
a.handle_command(command.ReadLiveRegion1)
|
||||
if got := voice.messages[len(voice.messages)-1]; got != "Health: 12 of 12" {
|
||||
t.Fatal(got)
|
||||
}
|
||||
base := a.overrideCurrent.underlying.settings.live.Presentation.Speech.Rate
|
||||
a.handle_command(command.NextQuickValue)
|
||||
rate := a.settings.live.Presentation.Speech.Rate
|
||||
if rate == base {
|
||||
t.Fatal("application rate unchanged")
|
||||
}
|
||||
a.save_settings()
|
||||
finish_persistence(t, a, false)
|
||||
path := filepath.Join(filepath.Dir(a.options.ConfigPath), "applications", "rogue.toml")
|
||||
doc, err := config.Open_application_document(path, a.overrideCurrent.base)
|
||||
if err != nil || doc.Settings.Presentation.Speech.Rate != rate {
|
||||
t.Fatal("Rogue profile not saved", err)
|
||||
}
|
||||
override_read(t, a, override_screen(1, "[Username@host directory] $"))
|
||||
if a.overrideCurrent != nil || a.overrides[1] != nil || a.settings.live.Presentation.Speech.Rate != base {
|
||||
t.Fatal("shell did not restore default settings")
|
||||
}
|
||||
a.select_override("rogue")
|
||||
override_read(t, a, override_screen(1, "rogue"))
|
||||
if a.overrideCurrent == nil || a.settings.live.Presentation.Speech.Rate != rate {
|
||||
t.Fatal("Rogue profile not reloaded")
|
||||
}
|
||||
}
|
||||
|
||||
func TestOverrideRestoresSynthesizerAndKeepsSaveBlockedUntilCompletion(t *testing.T) {
|
||||
for _, failed := range []bool{false, true} {
|
||||
a, voice, _ := selection_application(t, true)
|
||||
@@ -136,8 +180,9 @@ func TestApplicationsMenuActivatesOnlyOnEnterAndReleasesCapture(t *testing.T) {
|
||||
for _, step := range []struct{ key, want string }{
|
||||
{"down", "NetworkManager"},
|
||||
{"down", "Ninjam"},
|
||||
{"down", "Rogue"},
|
||||
{"down", "Default"},
|
||||
{"up", "Ninjam"},
|
||||
{"up", "Rogue"},
|
||||
} {
|
||||
a.ui.handle(interaction.Key{Name: step.key})
|
||||
if got := voice.messages[len(voice.messages)-1]; got != step.want {
|
||||
@@ -172,6 +217,7 @@ func TestApplicationsMenuActivatesOnlyOnEnterAndReleasesCapture(t *testing.T) {
|
||||
t.Fatal("Cancel button changed selection")
|
||||
}
|
||||
a.open_applications()
|
||||
a.ui.handle(interaction.Key{Name: "down"}) // Rogue
|
||||
a.ui.handle(interaction.Key{Name: "down"}) // list wraps to Default
|
||||
a.ui.handle(interaction.Key{Name: "enter"})
|
||||
if a.saves_unavailable() || a.engine.Tracking_mode() != "cursor" {
|
||||
|
||||
@@ -8,6 +8,7 @@ package applicationoverrides
|
||||
import (
|
||||
"git.stormux.org/storm/fenrir/internal/command"
|
||||
"git.stormux.org/storm/fenrir/internal/config"
|
||||
"git.stormux.org/storm/fenrir/internal/i18n"
|
||||
"git.stormux.org/storm/fenrir/internal/presentation"
|
||||
"git.stormux.org/storm/fenrir/internal/screen"
|
||||
)
|
||||
@@ -16,6 +17,19 @@ type Region struct {
|
||||
Name, Text string
|
||||
}
|
||||
|
||||
// Read includes the region's name for an explicit read. Automatic updates can
|
||||
// use Text alone when repeating the name would add unnecessary speech.
|
||||
func (r Region) Read() string {
|
||||
text := r.Text
|
||||
if text == "" {
|
||||
text = i18n.T("Information unavailable")
|
||||
}
|
||||
if r.Name == "" {
|
||||
return text
|
||||
}
|
||||
return i18n.Format("{0}: {1}", r.Name, text)
|
||||
}
|
||||
|
||||
// Frame supplements the ordinary reader. OwnsPresentation replaces generic
|
||||
// automatic diffs, never raw review/copy or typing echo. Updates are independent
|
||||
// of focus: a focus change must not swallow a simultaneous chat message.
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
// Copyright (c) 2026 Storm Dragon
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
package applicationoverrides
|
||||
|
||||
import "testing"
|
||||
|
||||
func TestRegionReadIncludesNameAndHandlesMissingInformation(t *testing.T) {
|
||||
for _, trial := range []struct {
|
||||
region Region
|
||||
want string
|
||||
}{
|
||||
{Region{Name: "Health", Text: "12 of 12"}, "Health: 12 of 12"},
|
||||
{Region{Name: "Health"}, "Health: Information unavailable"},
|
||||
{Region{Text: "12 of 12"}, "12 of 12"},
|
||||
} {
|
||||
if got := trial.region.Read(); got != trial.want {
|
||||
t.Fatalf("%q, want %q", got, trial.want)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,291 @@
|
||||
// Copyright (c) 2026 Storm Dragon
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
// Package rogue interprets classic Rogue 5.4's visible terminal display.
|
||||
// Layout and glyphs follow RogueForge's io.c, command.c, and rogue.h:
|
||||
// https://github.com/rogueforge/rogue5.4/tree/d4ff90dc41053f1962efbf32c7b71b12503b9b62
|
||||
package rogue
|
||||
|
||||
import (
|
||||
"regexp"
|
||||
"slices"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"git.stormux.org/storm/fenrir/internal/applicationoverrides"
|
||||
"git.stormux.org/storm/fenrir/internal/command"
|
||||
"git.stormux.org/storm/fenrir/internal/config"
|
||||
"git.stormux.org/storm/fenrir/internal/i18n"
|
||||
"git.stormux.org/storm/fenrir/internal/presentation"
|
||||
"git.stormux.org/storm/fenrir/internal/screen"
|
||||
)
|
||||
|
||||
// Classic Rogue uses a 24 by 80 playfield even in a larger terminal.
|
||||
const mapBottom = 22
|
||||
|
||||
var statusPattern = regexp.MustCompile(`^Level:\s+(\d+)\s+Gold:\s+(\d+)\s+Hp:\s+(-?\d+)\(\s*(\d+)\)\s+Str:\s+(\d+)\(\s*(\d+)\)\s+Arm:\s+(-?\d+)\s+Exp:\s+(\d+)/(\d+)\s*(Hungry|Weak|Faint)?\s*$`)
|
||||
|
||||
type entity struct {
|
||||
x, y int
|
||||
glyph rune
|
||||
}
|
||||
|
||||
type Adapter struct {
|
||||
previous screen.Snapshot
|
||||
stats []string
|
||||
message, latest string
|
||||
entities []entity
|
||||
regions []applicationoverrides.Region
|
||||
dialog bool
|
||||
}
|
||||
|
||||
func (*Adapter) Name() string { return "Rogue" }
|
||||
func (*Adapter) Configure(settings *config.Settings) {
|
||||
settings.Reading.Mode = "cursor"
|
||||
settings.Review.LeaveReviewOnCursorChange = true
|
||||
}
|
||||
func (a *Adapter) Reset() { *a = Adapter{} }
|
||||
func (a *Adapter) Close() { a.Reset() }
|
||||
|
||||
func (a *Adapter) Command(id command.ID) (presentation.CommandResult, bool) {
|
||||
ids := []command.ID{command.ReadLiveRegion1, command.ReadLiveRegion2, command.ReadLiveRegion3, command.ReadLiveRegion4, command.ReadLiveRegion5, command.ReadLiveRegion6}
|
||||
if slot := slices.Index(ids, id); slot >= 0 {
|
||||
regions := a.regions
|
||||
if len(regions) == 0 {
|
||||
regions = region_names()
|
||||
}
|
||||
return presentation.CommandResult{Text: regions[slot].Read()}, true
|
||||
}
|
||||
if id == command.ListReadingRegions {
|
||||
var entries []string
|
||||
for slot, region := range region_names() {
|
||||
entries = append(entries, i18n.Format("Live region {0}: {1}", strconv.Itoa(slot+1), region.Name))
|
||||
}
|
||||
return presentation.CommandResult{Text: strings.Join(entries, ". ")}, true
|
||||
}
|
||||
return presentation.CommandResult{}, false
|
||||
}
|
||||
|
||||
func region_names() []applicationoverrides.Region {
|
||||
return []applicationoverrides.Region{
|
||||
{Name: i18n.T("Health")}, {Name: i18n.T("Status")},
|
||||
{Name: i18n.T("Latest message")}, {Name: i18n.T("Surroundings")},
|
||||
{Name: i18n.T("Visible monsters")}, {Name: i18n.T("Visible objects and landmarks")},
|
||||
}
|
||||
}
|
||||
|
||||
func (a *Adapter) Observe(next screen.Snapshot) applicationoverrides.Frame {
|
||||
if !next.Active || next.Rows < 24 || next.Cols < 80 || len(next.Cells) != next.Rows*next.Cols {
|
||||
a.Reset()
|
||||
return 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
|
||||
if !stable {
|
||||
a.Reset()
|
||||
}
|
||||
stats := statusPattern.FindStringSubmatch(strings.TrimSpace(next.Text(23)))
|
||||
// Options and full-screen help/inventory use a separate curses window.
|
||||
// Let ordinary reading handle their text; never interpret it as map glyphs.
|
||||
options := strings.Contains(next.Text(0), `Terse output ("terse"):`) && strings.Contains(string(next.Cells), `Inventory style ("inven"):`)
|
||||
page := strings.Contains(string(next.Cells), "--Press space to continue--")
|
||||
if options || page && (stable || stats != nil) {
|
||||
a.regions = region_names()
|
||||
a.regions[2].Text = a.latest
|
||||
a.previous, a.dialog = next, true
|
||||
return applicationoverrides.Frame{Recognized: true, Regions: slices.Clone(a.regions)}
|
||||
}
|
||||
x, y, found := player_position(next)
|
||||
if stats == nil || !found {
|
||||
a.Reset()
|
||||
return applicationoverrides.Frame{}
|
||||
}
|
||||
frame := applicationoverrides.Frame{Recognized: true, OwnsPresentation: true}
|
||||
message := strings.TrimSpace(next.Text(0))
|
||||
if strings.HasSuffix(message, "--More--") {
|
||||
message = strings.TrimSpace(strings.TrimSuffix(message, "--More--")) + ". " + i18n.T("More; press Space")
|
||||
}
|
||||
if message != "" && message != a.message {
|
||||
a.latest = message
|
||||
frame.Updates = append(frame.Updates, presentation.Message{Text: message})
|
||||
}
|
||||
// A visible clear permits the same message to be announced on a later turn.
|
||||
// Messages replaced between captures cannot be recovered from screenshots.
|
||||
a.message = message
|
||||
regions := region_names()
|
||||
regions[0].Text = i18n.Format("{0} of {1}", stats[3], stats[4])
|
||||
regions[1].Text = strings.TrimSpace(next.Text(23))
|
||||
regions[2].Text = a.latest
|
||||
regions[3].Text = surroundings(next, x, y)
|
||||
entities := visible_entities(next)
|
||||
var monsters, objects []string
|
||||
for _, item := range entities {
|
||||
text := describe(item, x, y)
|
||||
if is_monster(item.glyph) {
|
||||
monsters = append(monsters, text)
|
||||
} else {
|
||||
objects = append(objects, text)
|
||||
}
|
||||
}
|
||||
regions[4].Text, regions[5].Text = join_entities(monsters), join_entities(objects)
|
||||
if !stable || len(a.stats) == 0 {
|
||||
frame.Updates = append(frame.Updates, presentation.Message{Text: regions[0].Read()})
|
||||
if stats[10] != "" {
|
||||
frame.Updates = append(frame.Updates, presentation.Message{Text: stats[10]})
|
||||
}
|
||||
} else {
|
||||
if stats[3] != a.stats[3] || stats[4] != a.stats[4] {
|
||||
frame.Updates = append(frame.Updates, presentation.Message{Text: regions[0].Read()})
|
||||
}
|
||||
for _, field := range []struct {
|
||||
index int
|
||||
label string
|
||||
}{
|
||||
{1, i18n.T("Dungeon level")}, {5, i18n.T("Strength")},
|
||||
{7, i18n.T("Armor")}, {8, i18n.T("Experience level")},
|
||||
} {
|
||||
if stats[field.index] != a.stats[field.index] {
|
||||
frame.Updates = append(frame.Updates, presentation.Message{Text: (applicationoverrides.Region{Name: field.label, Text: stats[field.index]}).Read()})
|
||||
}
|
||||
}
|
||||
if stats[10] != a.stats[10] {
|
||||
hunger := stats[10]
|
||||
if hunger == "" {
|
||||
hunger = i18n.T("Not hungry")
|
||||
}
|
||||
frame.Updates = append(frame.Updates, presentation.Message{Text: hunger})
|
||||
}
|
||||
}
|
||||
// Compare monsters by glyph count so a moving monster does not repeatedly
|
||||
// sound like a new arrival. Objects and landmarks have fixed map positions.
|
||||
if stable && !a.dialog && len(a.stats) != 0 && stats[1] == a.stats[1] {
|
||||
counts := map[rune]int{}
|
||||
for _, item := range a.entities {
|
||||
if is_monster(item.glyph) {
|
||||
counts[item.glyph]++
|
||||
}
|
||||
}
|
||||
for _, item := range entities {
|
||||
if is_monster(item.glyph) && counts[item.glyph] > 0 {
|
||||
counts[item.glyph]--
|
||||
continue
|
||||
}
|
||||
if !is_monster(item.glyph) && slices.Contains(a.entities, item) {
|
||||
continue
|
||||
}
|
||||
frame.Updates = append(frame.Updates, presentation.Message{Text: describe(item, x, y)})
|
||||
}
|
||||
}
|
||||
a.regions, a.stats, a.entities = regions, stats, entities
|
||||
a.previous, a.dialog = next, false
|
||||
frame.Regions = slices.Clone(regions)
|
||||
return frame
|
||||
}
|
||||
|
||||
func player_position(s screen.Snapshot) (int, int, bool) {
|
||||
x, y := -1, -1
|
||||
for row := 1; row <= mapBottom; row++ {
|
||||
for col, glyph := range s.Line(row)[:80] {
|
||||
if glyph == '@' {
|
||||
if x >= 0 {
|
||||
return 0, 0, false
|
||||
}
|
||||
x, y = col, row
|
||||
}
|
||||
}
|
||||
}
|
||||
return x, y, x >= 0
|
||||
}
|
||||
|
||||
func is_monster(glyph rune) bool { return glyph >= 'A' && glyph <= 'Z' }
|
||||
|
||||
func visible_entities(s screen.Snapshot) []entity {
|
||||
var result []entity
|
||||
for y := 1; y <= mapBottom; y++ {
|
||||
for x, glyph := range s.Line(y)[:80] {
|
||||
if is_monster(glyph) || strings.ContainsRune("+^%*!?$:)],=/", glyph) {
|
||||
result = append(result, entity{x, y, glyph})
|
||||
}
|
||||
}
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
func join_entities(items []string) string {
|
||||
if len(items) == 0 {
|
||||
return i18n.T("None visible")
|
||||
}
|
||||
return strings.Join(items, "; ")
|
||||
}
|
||||
|
||||
func surroundings(s screen.Snapshot, x, y int) string {
|
||||
var items []string
|
||||
for _, delta := range [][2]int{{0, -1}, {1, -1}, {1, 0}, {1, 1}, {0, 1}, {-1, 1}, {-1, 0}, {-1, -1}} {
|
||||
col, row := x+delta[0], y+delta[1]
|
||||
if col < 0 || col >= 80 || row < 1 || row > mapBottom {
|
||||
continue
|
||||
}
|
||||
items = append(items, describe(entity{col, row, s.Line(row)[col]}, x, y))
|
||||
}
|
||||
return strings.Join(items, "; ")
|
||||
}
|
||||
|
||||
func describe(item entity, x, y int) string {
|
||||
var offsets []string
|
||||
if item.y < y {
|
||||
offsets = append(offsets, i18n.Format("north {0}", strconv.Itoa(y-item.y)))
|
||||
}
|
||||
if item.y > y {
|
||||
offsets = append(offsets, i18n.Format("south {0}", strconv.Itoa(item.y-y)))
|
||||
}
|
||||
if item.x < x {
|
||||
offsets = append(offsets, i18n.Format("west {0}", strconv.Itoa(x-item.x)))
|
||||
}
|
||||
if item.x > x {
|
||||
offsets = append(offsets, i18n.Format("east {0}", strconv.Itoa(item.x-x)))
|
||||
}
|
||||
return i18n.Format("{0}, {1}", glyph_name(item.glyph), strings.Join(offsets, ", "))
|
||||
}
|
||||
|
||||
func glyph_name(glyph rune) string {
|
||||
// These are Rogue's own English monster names, rather than Fenrir labels.
|
||||
if is_monster(glyph) {
|
||||
return []string{"aquator", "bat", "centaur", "dragon", "emu", "venus flytrap", "griffin", "hobgoblin", "ice monster", "jabberwock", "kestrel", "leprechaun", "medusa", "nymph", "orc", "phantom", "quagga", "rattlesnake", "snake", "troll", "black unicorn", "vampire", "wraith", "xeroc", "yeti", "zombie"}[glyph-'A']
|
||||
}
|
||||
switch glyph {
|
||||
case ' ', 0:
|
||||
return i18n.T("Unseen")
|
||||
case '|', '-':
|
||||
return i18n.T("Wall")
|
||||
case '.':
|
||||
return i18n.T("Floor")
|
||||
case '#':
|
||||
return i18n.T("Passage")
|
||||
case '+':
|
||||
return i18n.T("Door")
|
||||
case '^':
|
||||
return i18n.T("Trap")
|
||||
case '%':
|
||||
return i18n.T("Stairs")
|
||||
case '*':
|
||||
return i18n.T("Gold")
|
||||
case '!':
|
||||
return i18n.T("Potion")
|
||||
case '?':
|
||||
return i18n.T("Scroll")
|
||||
case '$':
|
||||
return i18n.T("Magic")
|
||||
case ':':
|
||||
return i18n.T("Food")
|
||||
case ')':
|
||||
return i18n.T("Weapon")
|
||||
case ']':
|
||||
return i18n.T("Armor")
|
||||
case ',':
|
||||
return i18n.T("Amulet")
|
||||
case '=':
|
||||
return i18n.T("Ring")
|
||||
case '/':
|
||||
return i18n.T("Wand or staff")
|
||||
}
|
||||
return string(glyph)
|
||||
}
|
||||
@@ -0,0 +1,213 @@
|
||||
// Copyright (c) 2026 Storm Dragon
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
package rogue_test
|
||||
|
||||
import (
|
||||
"slices"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"git.stormux.org/storm/fenrir/internal/applicationoverrides/rogue"
|
||||
"git.stormux.org/storm/fenrir/internal/command"
|
||||
"git.stormux.org/storm/fenrir/internal/presentation"
|
||||
"git.stormux.org/storm/fenrir/internal/reader"
|
||||
"git.stormux.org/storm/fenrir/internal/screen"
|
||||
)
|
||||
|
||||
const initialStatus = "Level: 1 Gold: 0 Hp: 12(12) Str: 16(16) Arm: 4 Exp: 1/0"
|
||||
|
||||
func game(rows, cols int, message, status string) screen.Snapshot {
|
||||
s := screen.Snapshot{Terminal: 1, Active: true, Rows: rows, Cols: cols, X: 10, Y: 5, Cells: make([]rune, rows*cols)}
|
||||
for index := range s.Cells {
|
||||
s.Cells[index] = ' '
|
||||
}
|
||||
copy(s.Line(0), []rune(message))
|
||||
copy(s.Line(4)[8:], []rune("-----"))
|
||||
copy(s.Line(5)[8:], []rune("|.@.+"))
|
||||
copy(s.Line(6)[8:], []rune("----|"))
|
||||
copy(s.Line(23), []rune(status))
|
||||
return s
|
||||
}
|
||||
|
||||
func texts(messages []presentation.Message) []string {
|
||||
var result []string
|
||||
for _, message := range messages {
|
||||
if message.Text != "" {
|
||||
result = append(result, message.Text)
|
||||
}
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
func TestNamedRegionsAndVisibleMap(t *testing.T) {
|
||||
for _, size := range [][2]int{{24, 80}, {32, 100}} {
|
||||
a := &rogue.Adapter{}
|
||||
s := game(size[0], size[1], "Welcome", initialStatus)
|
||||
s.Line(5)[14], s.Line(8)[10], s.Line(9)[10] = 'B', '%', '!'
|
||||
frame := a.Observe(s)
|
||||
if !frame.Recognized || !frame.OwnsPresentation {
|
||||
t.Fatal("game not recognized")
|
||||
}
|
||||
for _, trial := range []struct {
|
||||
id command.ID
|
||||
want string
|
||||
}{
|
||||
{command.ReadLiveRegion1, "Health: 12 of 12"},
|
||||
{command.ReadLiveRegion2, "Status: " + initialStatus},
|
||||
{command.ReadLiveRegion3, "Latest message: Welcome"},
|
||||
{command.ReadLiveRegion4, "Wall, north 1"},
|
||||
{command.ReadLiveRegion5, "Visible monsters: bat, east 4"},
|
||||
{command.ReadLiveRegion6, "Stairs, south 3"},
|
||||
} {
|
||||
got, handled := a.Command(trial.id)
|
||||
if !handled || !strings.Contains(got.Text, trial.want) {
|
||||
t.Fatalf("%s: %+v", trial.id, got)
|
||||
}
|
||||
}
|
||||
if got, _ := a.Command(command.ListReadingRegions); !strings.Contains(got.Text, "Live region 1: Health") || !strings.Contains(got.Text, "Live region 6: Visible objects and landmarks") {
|
||||
t.Fatal(got)
|
||||
}
|
||||
if _, handled := a.Command(command.ReadLiveRegion7); handled {
|
||||
t.Fatal("unassigned slot captured")
|
||||
}
|
||||
if got, _ := a.Command(command.ReadLiveRegion5); strings.Contains(got.Text, "dragon") {
|
||||
t.Fatal("invented hidden monster")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestMessagesHealthAndHungerWithoutMapChatter(t *testing.T) {
|
||||
a := &rogue.Adapter{}
|
||||
r := reader.New()
|
||||
update := func(s screen.Snapshot) []string { return texts(r.Update_application(s, a.Observe(s))) }
|
||||
update(game(24, 80, "", initialStatus))
|
||||
if got := update(game(24, 80, "", initialStatus)); len(got) != 0 {
|
||||
t.Fatal("idle chatter", got)
|
||||
}
|
||||
damaged := strings.Replace(initialStatus, "12(12)", "9(12)", 1) + " Hungry"
|
||||
got := update(game(24, 80, "The bat hits you", damaged))
|
||||
if !slices.Equal(got, []string{"The bat hits you", "Health: 9 of 12", "Hungry"}) {
|
||||
t.Fatal(got)
|
||||
}
|
||||
if got := update(game(24, 80, "The bat hits you", damaged)); len(got) != 0 {
|
||||
t.Fatal("repeated snapshot", got)
|
||||
}
|
||||
update(game(24, 80, "", damaged))
|
||||
if got := update(game(24, 80, "The bat hits you", damaged)); !slices.Equal(got, []string{"The bat hits you"}) {
|
||||
t.Fatal("repeated combat lost", got)
|
||||
}
|
||||
if got := update(game(24, 80, "The bat hits you--More--", damaged)); len(got) != 1 || !strings.Contains(got[0], "More") {
|
||||
t.Fatal("paging prompt lost", got)
|
||||
}
|
||||
if got := update(game(24, 80, "", initialStatus)); !slices.Contains(got, "Not hungry") {
|
||||
t.Fatal("hunger recovery", got)
|
||||
}
|
||||
r.Configure(false, true)
|
||||
if got := update(game(24, 80, "A new message", damaged)); len(got) != 0 {
|
||||
t.Fatal("automatic disabled", got)
|
||||
}
|
||||
if got, _ := a.Command(command.ReadLiveRegion3); got.Text != "Latest message: A new message" {
|
||||
t.Fatal("explicit read disabled", got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestNewMonstersAndLandmarks(t *testing.T) {
|
||||
a := &rogue.Adapter{}
|
||||
a.Observe(game(24, 80, "", initialStatus))
|
||||
s := game(24, 80, "", initialStatus)
|
||||
s.Line(5)[14], s.Line(8)[10] = 'B', '%'
|
||||
if got := texts(a.Observe(s).Updates); !slices.Equal(got, []string{"bat, east 4", "Stairs, south 3"}) {
|
||||
t.Fatal(got)
|
||||
}
|
||||
s = game(24, 80, "", initialStatus)
|
||||
s.Line(5)[13], s.Line(8)[10] = 'B', '%'
|
||||
if got := texts(a.Observe(s).Updates); len(got) != 0 {
|
||||
t.Fatal("moving monster chatter", got)
|
||||
}
|
||||
s = game(24, 80, "", initialStatus)
|
||||
s.Line(5)[13], s.Line(8)[10], s.Line(6)[15] = 'B', '%', 'B'
|
||||
if got := texts(a.Observe(s).Updates); !slices.Equal(got, []string{"bat, south 1, east 5"}) {
|
||||
t.Fatal("second monster", got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestStatusChangesAndNewLevelBaseline(t *testing.T) {
|
||||
a := &rogue.Adapter{}
|
||||
a.Observe(game(24, 80, "", initialStatus))
|
||||
s := game(24, 80, "", "Level: 2 Gold: 45 Hp: 9(15) Str: 15(16) Arm: 3 Exp: 2/10 Weak")
|
||||
s.Line(10)[10] = 'D'
|
||||
want := []string{"Health: 9 of 15", "Dungeon level: 2", "Strength: 15", "Armor: 3", "Experience level: 2", "Weak"}
|
||||
if got := texts(a.Observe(s).Updates); !slices.Equal(got, want) {
|
||||
t.Fatal("status or level baseline", got)
|
||||
}
|
||||
}
|
||||
|
||||
func TestDialogsAndContextBoundaries(t *testing.T) {
|
||||
a := &rogue.Adapter{}
|
||||
a.Observe(game(24, 80, "Welcome", initialStatus))
|
||||
s := game(24, 80, "", initialStatus)
|
||||
for index := range s.Cells {
|
||||
s.Cells[index] = ' '
|
||||
}
|
||||
copy(s.Line(0), []rune("a) A potion of healing"))
|
||||
copy(s.Line(23), []rune("--Press space to continue--"))
|
||||
frame := a.Observe(s)
|
||||
if !frame.Recognized || frame.OwnsPresentation {
|
||||
t.Fatal("inventory did not use ordinary reading")
|
||||
}
|
||||
if got, _ := a.Command(command.ReadLiveRegion4); got.Text != "Surroundings: Information unavailable" {
|
||||
t.Fatal("stale surroundings", got)
|
||||
}
|
||||
if got := texts(a.Observe(game(24, 80, "", initialStatus)).Updates); len(got) != 0 {
|
||||
t.Fatal("return replayed game", got)
|
||||
}
|
||||
for _, boundary := range []string{"resize", "terminal", "buffer", "inactive", "shell", "malformed"} {
|
||||
t.Run(boundary, func(t *testing.T) {
|
||||
a := &rogue.Adapter{}
|
||||
a.Observe(game(24, 80, "Old message", initialStatus))
|
||||
s := game(24, 80, "", initialStatus)
|
||||
switch boundary {
|
||||
case "resize":
|
||||
s = game(32, 100, "", initialStatus)
|
||||
case "terminal":
|
||||
s.Terminal++
|
||||
case "buffer":
|
||||
s.Generation++
|
||||
case "inactive":
|
||||
s.Active = false
|
||||
case "shell":
|
||||
for index := range s.Cells {
|
||||
s.Cells[index] = ' '
|
||||
}
|
||||
copy(s.Line(23), []rune("user@host $ "))
|
||||
case "malformed":
|
||||
s.Cells = s.Cells[:10]
|
||||
}
|
||||
frame := a.Observe(s)
|
||||
if boundary == "inactive" || boundary == "shell" || boundary == "malformed" {
|
||||
if frame.Recognized {
|
||||
t.Fatal("unrelated screen recognized")
|
||||
}
|
||||
}
|
||||
if got, _ := a.Command(command.ReadLiveRegion3); strings.Contains(got.Text, "Old message") {
|
||||
t.Fatal("stale context", got)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestRawReviewStillReadsActualMap(t *testing.T) {
|
||||
a, r := &rogue.Adapter{}, reader.New()
|
||||
s := game(24, 80, "", initialStatus)
|
||||
r.Update_application(s, a.Observe(s))
|
||||
if got := r.Command(command.CurrentLine); !strings.Contains(got.Text, "@") {
|
||||
t.Fatal(got)
|
||||
}
|
||||
r.Note_input(true, false, false)
|
||||
s = game(24, 80, "", initialStatus)
|
||||
s.Line(5)[10], s.Line(5)[11], s.X = '.', '@', 11
|
||||
if got := texts(r.Update_application(s, a.Observe(s))); len(got) != 0 {
|
||||
t.Fatal("movement spoke map", got)
|
||||
}
|
||||
}
|
||||
@@ -59,6 +59,10 @@ msgstr "Alle"
|
||||
msgid "All 10 live regions are set"
|
||||
msgstr "Alle 10 Live-Bereiche sind festgelegt"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:284
|
||||
msgid "Amulet"
|
||||
msgstr "Amulett"
|
||||
|
||||
#: internal/emoji/catalog.go:23
|
||||
msgid "Angry"
|
||||
msgstr "Wütend"
|
||||
@@ -67,11 +71,11 @@ msgstr "Wütend"
|
||||
msgid "Apple"
|
||||
msgstr "Apfel"
|
||||
|
||||
#: internal/app/application_overrides.go:325
|
||||
#: internal/app/application_overrides.go:328
|
||||
msgid "Application"
|
||||
msgstr "Anwendung"
|
||||
|
||||
#: internal/app/application_overrides.go:324
|
||||
#: internal/app/application_overrides.go:327
|
||||
msgid "Applications"
|
||||
msgstr "Anwendungen"
|
||||
|
||||
@@ -79,6 +83,11 @@ msgstr "Anwendungen"
|
||||
msgid "Argentina"
|
||||
msgstr "Argentinien"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:144
|
||||
#: internal/applicationoverrides/rogue/rogue.go:282
|
||||
msgid "Armor"
|
||||
msgstr "Rüstung"
|
||||
|
||||
#: internal/config/config.go:155
|
||||
msgid "Attribute format"
|
||||
msgstr "Attributformat"
|
||||
@@ -163,7 +172,7 @@ msgstr "Schmetterling"
|
||||
msgid "Canada"
|
||||
msgstr "Kanada"
|
||||
|
||||
#: internal/app/application_overrides.go:326
|
||||
#: internal/app/application_overrides.go:329
|
||||
#: internal/preferences/settings.go:93
|
||||
msgid "Cancel"
|
||||
msgstr "Abbrechen"
|
||||
@@ -289,13 +298,13 @@ msgstr "Cool"
|
||||
msgid "Could not check spelling: {0}"
|
||||
msgstr "Rechtschreibung konnte nicht geprüft werden: {0}"
|
||||
|
||||
#: internal/app/application_overrides.go:278
|
||||
#: internal/app/application_overrides.go:83
|
||||
#: internal/app/application_overrides.go:281
|
||||
#: internal/app/application_overrides.go:84
|
||||
msgid "Could not load application settings: {0}"
|
||||
msgstr "Anwendungseinstellungen konnten nicht geladen werden: {0}"
|
||||
|
||||
#: internal/app/application_overrides.go:329
|
||||
#: internal/app/application_overrides.go:333
|
||||
#: internal/app/application_overrides.go:332
|
||||
#: internal/app/application_overrides.go:336
|
||||
msgid "Could not open Applications: {0}"
|
||||
msgstr "Anwendungen konnten nicht geöffnet werden: {0}"
|
||||
|
||||
@@ -312,8 +321,8 @@ msgstr "Fenrir-Menü konnte nicht geöffnet werden: {0}"
|
||||
msgid "Could not open Spellcheck Menu: {0}"
|
||||
msgstr "Rechtschreibmenü konnte nicht geöffnet werden: {0}"
|
||||
|
||||
#: internal/app/application_overrides.go:161
|
||||
#: internal/app/application_overrides.go:296
|
||||
#: internal/app/application_overrides.go:162
|
||||
#: internal/app/application_overrides.go:299
|
||||
msgid "Could not restore application settings: {0}"
|
||||
msgstr "Anwendungseinstellungen konnten nicht wiederhergestellt werden: {0}"
|
||||
|
||||
@@ -342,12 +351,12 @@ msgstr "Dolch"
|
||||
msgid "Date format"
|
||||
msgstr "Datumsformat"
|
||||
|
||||
#: internal/app/application_overrides.go:318
|
||||
#: internal/app/application_overrides.go:321
|
||||
msgid "Default"
|
||||
msgstr "Standard"
|
||||
|
||||
#: internal/app/application_overrides.go:186
|
||||
#: internal/app/application_overrides.go:242
|
||||
#: internal/app/application_overrides.go:187
|
||||
#: internal/app/application_overrides.go:245
|
||||
msgid "Default settings restored"
|
||||
msgstr "Standardeinstellungen wiederhergestellt"
|
||||
|
||||
@@ -383,10 +392,18 @@ msgstr "Hund"
|
||||
msgid "Donut"
|
||||
msgstr "Donut"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:264
|
||||
msgid "Door"
|
||||
msgstr "Tür"
|
||||
|
||||
#: internal/config/config.go:120 internal/config/config.go:127
|
||||
msgid "Driver"
|
||||
msgstr "Treiber"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:143
|
||||
msgid "Dungeon level"
|
||||
msgstr "Verliesebene"
|
||||
|
||||
#: internal/config/config.go:142
|
||||
msgid "Echo on CapsLock"
|
||||
msgstr "Zeichenansage bei Feststelltaste"
|
||||
@@ -437,6 +454,10 @@ msgstr "Lesemodus verlassen"
|
||||
msgid "Exiting tutorial mode. To enter tutorial mode again press Fenrir+F1"
|
||||
msgstr "Anleitungsmodus verlassen. Zum erneuten Aufrufen Fenrir+F1 drücken"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:144
|
||||
msgid "Experience level"
|
||||
msgstr "Erfahrungsstufe"
|
||||
|
||||
#: internal/emoji/catalog.go:30
|
||||
msgid "Exploding head"
|
||||
msgstr "Explodierender Kopf"
|
||||
@@ -486,11 +507,15 @@ msgstr "Erste Zwischenablage "
|
||||
msgid "Flags"
|
||||
msgstr "Flaggen"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:260
|
||||
msgid "Floor"
|
||||
msgstr "Boden"
|
||||
|
||||
#: internal/emoji/catalog.go:105
|
||||
msgid "Folded hands"
|
||||
msgstr "Gefaltete Hände"
|
||||
|
||||
#: internal/emoji/catalog.go
|
||||
#: internal/applicationoverrides/rogue/rogue.go:278 internal/emoji/catalog.go
|
||||
msgid "Food"
|
||||
msgstr "Essen"
|
||||
|
||||
@@ -514,6 +539,10 @@ msgstr "Geist"
|
||||
msgid "Gift"
|
||||
msgstr "Geschenk"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:270
|
||||
msgid "Gold"
|
||||
msgstr "Gold"
|
||||
|
||||
#: internal/emoji/catalog.go:127
|
||||
msgid "Greece"
|
||||
msgstr "Griechenland"
|
||||
@@ -530,6 +559,10 @@ msgstr "Grinsend mit Schweißtropfen"
|
||||
msgid "Hamburger"
|
||||
msgstr "Hamburger"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:71
|
||||
msgid "Health"
|
||||
msgstr "Gesundheit"
|
||||
|
||||
#: internal/emoji/catalog.go:106
|
||||
msgid "Heart"
|
||||
msgstr "Herz"
|
||||
@@ -574,6 +607,10 @@ msgstr "Einrückung"
|
||||
msgid "India"
|
||||
msgstr "Indien"
|
||||
|
||||
#: internal/applicationoverrides/override.go:25
|
||||
msgid "Information unavailable"
|
||||
msgstr "Information nicht verfügbar"
|
||||
|
||||
#: internal/applicationoverrides/ninjam/ninjam.go:276
|
||||
msgid "Input {0}"
|
||||
msgstr "Eingang {0}"
|
||||
@@ -614,6 +651,10 @@ msgstr "Letzte Zwischenablage "
|
||||
msgid "Latest chat message"
|
||||
msgstr "Letzte Chatnachricht"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:72
|
||||
msgid "Latest message"
|
||||
msgstr "Letzte Nachricht"
|
||||
|
||||
#: internal/emoji/catalog.go:37
|
||||
msgid "Laughing"
|
||||
msgstr "Lachend"
|
||||
@@ -646,6 +687,7 @@ msgstr "Live-Bereich {0} außerhalb des Bildschirms"
|
||||
msgid "Live region {0} set"
|
||||
msgstr "Live-Bereich {0} festgelegt"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:62
|
||||
#: internal/reader/regions.go:245
|
||||
msgid "Live region {0}: {1}"
|
||||
msgstr "Live-Bereich {0}: {1}"
|
||||
@@ -662,6 +704,10 @@ msgstr "Lokaler Kanal {0}"
|
||||
msgid "Mage"
|
||||
msgstr "Magier"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:276
|
||||
msgid "Magic"
|
||||
msgstr "Magie"
|
||||
|
||||
#: internal/applicationoverrides/ninjam/ninjam.go:237
|
||||
msgid "Master"
|
||||
msgstr "Hauptausgang"
|
||||
@@ -682,6 +728,10 @@ msgstr "Signalton bei Rechtschreibfehlern"
|
||||
msgid "Moon"
|
||||
msgstr "Mond"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:105
|
||||
msgid "More; press Space"
|
||||
msgstr "Mehr; Leertaste drücken"
|
||||
|
||||
#: internal/command/descriptions.go:35
|
||||
msgid "Move Review to the end of current line and display the content"
|
||||
msgstr "Lesecursor zum Ende der aktuellen Zeile bewegen und Inhalt ausgeben"
|
||||
@@ -731,7 +781,7 @@ msgstr "Übelkeit"
|
||||
msgid "Netherlands"
|
||||
msgstr "Niederlande"
|
||||
|
||||
#: internal/app/application_overrides.go:318
|
||||
#: internal/app/application_overrides.go:321
|
||||
msgid "NetworkManager"
|
||||
msgstr "NetworkManager"
|
||||
|
||||
@@ -739,7 +789,7 @@ msgstr "NetworkManager"
|
||||
msgid "New channel"
|
||||
msgstr "Neuer Kanal"
|
||||
|
||||
#: internal/app/application_overrides.go:318
|
||||
#: internal/app/application_overrides.go:321
|
||||
msgid "Ninjam"
|
||||
msgstr "Ninjam"
|
||||
|
||||
@@ -780,10 +830,18 @@ msgstr "Kein Text in der Zwischenablage oder kein zugängliches Display"
|
||||
msgid "No word"
|
||||
msgstr "Kein Wort"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:215
|
||||
msgid "None visible"
|
||||
msgstr "Nichts sichtbar"
|
||||
|
||||
#: internal/emoji/catalog.go:135
|
||||
msgid "Norway"
|
||||
msgstr "Norwegen"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:153
|
||||
msgid "Not hungry"
|
||||
msgstr "Nicht hungrig"
|
||||
|
||||
#: internal/review/follow_cursor.go:26
|
||||
msgid "Not in Review Mode"
|
||||
msgstr "Nicht im Lesemodus"
|
||||
@@ -800,6 +858,10 @@ msgstr "OK"
|
||||
msgid "One or two marks are needed"
|
||||
msgstr "Eine oder zwei Markierungen werden benötigt"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:262
|
||||
msgid "Passage"
|
||||
msgstr "Gang"
|
||||
|
||||
#: internal/emoji/catalog.go:109
|
||||
msgid "Peace"
|
||||
msgstr "Frieden"
|
||||
@@ -840,6 +902,10 @@ msgstr "Kothaufen"
|
||||
msgid "Portugal"
|
||||
msgstr "Portugal"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:272
|
||||
msgid "Potion"
|
||||
msgstr "Trank"
|
||||
|
||||
#: internal/command/descriptions.go:52
|
||||
msgid "Present the version of Fenrir currently in use."
|
||||
msgstr "Verwendete Fenrir-Version ansagen."
|
||||
@@ -987,10 +1053,18 @@ msgstr "Wiederholte Symbole"
|
||||
msgid "Repeated symbols minimum length"
|
||||
msgstr "Mindestanzahl wiederholter Symbole"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:286
|
||||
msgid "Ring"
|
||||
msgstr "Ring"
|
||||
|
||||
#: internal/emoji/catalog.go:110
|
||||
msgid "Rock on"
|
||||
msgstr "Rock-Geste"
|
||||
|
||||
#: internal/app/application_overrides.go:321
|
||||
msgid "Rogue"
|
||||
msgstr "Rogue"
|
||||
|
||||
#: internal/emoji/catalog.go:41
|
||||
msgid "Rolling laughing"
|
||||
msgstr "Sich vor Lachen wälzend"
|
||||
@@ -1051,6 +1125,10 @@ msgstr "Skriptdatei nicht gefunden"
|
||||
msgid "Script source is not a valid file"
|
||||
msgstr "Skriptquelle ist keine gültige Datei"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:274
|
||||
msgid "Scroll"
|
||||
msgstr "Schriftrolle"
|
||||
|
||||
#: internal/interaction/grid.go:71
|
||||
msgid "Search cleared"
|
||||
msgstr "Suche gelöscht"
|
||||
@@ -1083,8 +1161,8 @@ msgstr "Live-Bereich aus einer oder zwei Markierungen festlegen"
|
||||
msgid "Set window begin and end marks"
|
||||
msgstr "Setze Fensteranfangs- und -endmarken"
|
||||
|
||||
#: internal/app/application_overrides.go:171
|
||||
#: internal/app/application_overrides.go:315 internal/app/commands.go:84
|
||||
#: internal/app/application_overrides.go:172
|
||||
#: internal/app/application_overrides.go:318 internal/app/commands.go:84
|
||||
msgid "Settings are busy"
|
||||
msgstr "Einstellungen sind beschäftigt"
|
||||
|
||||
@@ -1188,6 +1266,10 @@ msgstr "Buchstabiert das aktuelle Wort"
|
||||
msgid "Spider"
|
||||
msgstr "Spinne"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:268
|
||||
msgid "Stairs"
|
||||
msgstr "Treppe"
|
||||
|
||||
#: internal/emoji/catalog.go:113
|
||||
msgid "Star"
|
||||
msgstr "Stern"
|
||||
@@ -1196,10 +1278,18 @@ msgstr "Stern"
|
||||
msgid "Start Fenrir"
|
||||
msgstr "Fenrir starten"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:71
|
||||
msgid "Status"
|
||||
msgstr "Status"
|
||||
|
||||
#: internal/emoji/catalog.go:72
|
||||
msgid "Strawberry"
|
||||
msgstr "Erdbeere"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:143
|
||||
msgid "Strength"
|
||||
msgstr "Stärke"
|
||||
|
||||
#: internal/app/spellcheck_menu.go:45 internal/app/spellcheck_menu.go:47
|
||||
msgid "Suggestions"
|
||||
msgstr "Vorschläge"
|
||||
@@ -1212,6 +1302,10 @@ msgstr "Sonne"
|
||||
msgid "Sunflower"
|
||||
msgstr "Sonnenblume"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:72
|
||||
msgid "Surroundings"
|
||||
msgstr "Umgebung"
|
||||
|
||||
#: internal/emoji/catalog.go:142
|
||||
msgid "Sweden"
|
||||
msgstr "Schweden"
|
||||
@@ -1264,6 +1358,10 @@ msgstr "Oben"
|
||||
msgid "Tracking mode"
|
||||
msgstr "Verfolgungsmodus"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:266
|
||||
msgid "Trap"
|
||||
msgstr "Falle"
|
||||
|
||||
#: internal/emoji/catalog.go:60
|
||||
msgid "Tree"
|
||||
msgstr "Baum"
|
||||
@@ -1305,10 +1403,22 @@ msgstr "Vereinigtes Königreich"
|
||||
msgid "United States"
|
||||
msgstr "Vereinigte Staaten"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:256
|
||||
msgid "Unseen"
|
||||
msgstr "Nicht sichtbar"
|
||||
|
||||
#: internal/emoji/catalog.go:94
|
||||
msgid "Vampire"
|
||||
msgstr "Vampir"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:73
|
||||
msgid "Visible monsters"
|
||||
msgstr "Sichtbare Monster"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:73
|
||||
msgid "Visible objects and landmarks"
|
||||
msgstr "Sichtbare Gegenstände und Orientierungspunkte"
|
||||
|
||||
#: internal/app/quick_settings.go:191 internal/app/synthesizer_preview.go:60
|
||||
msgid "Voice test failed"
|
||||
msgstr "Stimmtest fehlgeschlagen"
|
||||
@@ -1330,6 +1440,14 @@ msgstr "Lautstärke und Panorama {0}"
|
||||
msgid "WTF?"
|
||||
msgstr "Was zum Teufel?"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:258
|
||||
msgid "Wall"
|
||||
msgstr "Wand"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:288
|
||||
msgid "Wand or staff"
|
||||
msgstr "Zauberstab oder Stab"
|
||||
|
||||
#: internal/app/tutorial.go:24
|
||||
msgid ""
|
||||
"Warning: full keyboard capture is unavailable. Unbound keys may reach the "
|
||||
@@ -1338,6 +1456,10 @@ msgstr ""
|
||||
"Warnung: Vollständige Tastaturerfassung nicht verfügbar. Unbelegte Tasten "
|
||||
"können die aktive Anwendung erreichen."
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:280
|
||||
msgid "Weapon"
|
||||
msgstr "Waffe"
|
||||
|
||||
#: internal/emoji/catalog.go:95
|
||||
msgid "Web"
|
||||
msgstr "Spinnennetz"
|
||||
@@ -1614,6 +1736,10 @@ msgstr "Dollar"
|
||||
msgid "dot"
|
||||
msgstr "Punkt"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:244
|
||||
msgid "east {0}"
|
||||
msgstr "Osten {0}"
|
||||
|
||||
#: internal/command/descriptions.go:69
|
||||
msgid "enables or disables automatic reading of new text as it appears"
|
||||
msgstr "Automatisches Vorlesen von neuem Text ein- oder ausschalten"
|
||||
@@ -1960,6 +2086,10 @@ msgstr "keine Textkonsole"
|
||||
msgid "none"
|
||||
msgstr "keine"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:235
|
||||
msgid "north {0}"
|
||||
msgstr "Norden {0}"
|
||||
|
||||
#: internal/applicationoverrides/ninjam/ninjam.go:263
|
||||
msgid "not receiving"
|
||||
msgstr "Empfang aus"
|
||||
@@ -2159,6 +2289,10 @@ msgstr "Lächeln"
|
||||
msgid "some"
|
||||
msgstr "einige"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:238
|
||||
msgid "south {0}"
|
||||
msgstr "Süden {0}"
|
||||
|
||||
#: config/punctuation/default.toml config/punctuation/en.toml
|
||||
#: config/punctuation/rhvoice-en.toml
|
||||
msgid "space"
|
||||
@@ -2275,6 +2409,10 @@ msgstr "unterstrichen"
|
||||
msgid "unmuted"
|
||||
msgstr "nicht stummgeschaltet"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:241
|
||||
msgid "west {0}"
|
||||
msgstr "Westen {0}"
|
||||
|
||||
#: internal/presentation/attributes.go internal/presentation/attributes.go:27
|
||||
msgid "white"
|
||||
msgstr "weiß"
|
||||
@@ -2287,7 +2425,7 @@ msgstr "Zwinkern"
|
||||
msgid "{0} added to dictionary"
|
||||
msgstr "{0} zum Wörterbuch hinzugefügt"
|
||||
|
||||
#: internal/app/application_overrides.go:207
|
||||
#: internal/app/application_overrides.go:210
|
||||
msgid "{0} application override selected"
|
||||
msgstr "Anwendungseinstellungen für {0} ausgewählt"
|
||||
|
||||
@@ -2323,6 +2461,10 @@ msgstr "{0} Raster. {1}"
|
||||
msgid "{0} is already in dictionary"
|
||||
msgstr "{0} ist bereits im Wörterbuch"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:115
|
||||
msgid "{0} of {1}"
|
||||
msgstr "{0} von {1}"
|
||||
|
||||
#: internal/applicationoverrides/ninjam/ninjam.go:313
|
||||
msgid "{0} percent left"
|
||||
msgstr "{0} Prozent links"
|
||||
@@ -2343,10 +2485,18 @@ msgstr "{0} Registerkarte"
|
||||
msgid "{0} {1}"
|
||||
msgstr "{0} {1}"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:246
|
||||
msgid "{0}, {1}"
|
||||
msgstr "{0}, {1}"
|
||||
|
||||
#: internal/interaction/grid.go:39
|
||||
msgid "{0}. row {1}, column {2}. {3} of {4}"
|
||||
msgstr "{0}. Zeile {1}, Spalte {2}. {3} von {4}"
|
||||
|
||||
#: internal/applicationoverrides/override.go:30
|
||||
msgid "{0}: {1}"
|
||||
msgstr "{0}: {1}"
|
||||
|
||||
#: internal/app/tutorial.go:25
|
||||
msgid ""
|
||||
"{command_name}, Shortcuts {command_shortcuts}, Description "
|
||||
|
||||
@@ -59,6 +59,10 @@ msgstr "Todos"
|
||||
msgid "All 10 live regions are set"
|
||||
msgstr "Las 10 regiones dinámicas están definidas"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:284
|
||||
msgid "Amulet"
|
||||
msgstr "Amuleto"
|
||||
|
||||
#: internal/emoji/catalog.go:23
|
||||
msgid "Angry"
|
||||
msgstr "Enfadado"
|
||||
@@ -67,11 +71,11 @@ msgstr "Enfadado"
|
||||
msgid "Apple"
|
||||
msgstr "Manzana"
|
||||
|
||||
#: internal/app/application_overrides.go:325
|
||||
#: internal/app/application_overrides.go:328
|
||||
msgid "Application"
|
||||
msgstr "Aplicación"
|
||||
|
||||
#: internal/app/application_overrides.go:324
|
||||
#: internal/app/application_overrides.go:327
|
||||
msgid "Applications"
|
||||
msgstr "Aplicaciones"
|
||||
|
||||
@@ -79,6 +83,11 @@ msgstr "Aplicaciones"
|
||||
msgid "Argentina"
|
||||
msgstr "Argentina"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:144
|
||||
#: internal/applicationoverrides/rogue/rogue.go:282
|
||||
msgid "Armor"
|
||||
msgstr "Armadura"
|
||||
|
||||
#: internal/config/config.go:155
|
||||
msgid "Attribute format"
|
||||
msgstr "Formato de atributos"
|
||||
@@ -163,7 +172,7 @@ msgstr "Mariposa"
|
||||
msgid "Canada"
|
||||
msgstr "Canadá"
|
||||
|
||||
#: internal/app/application_overrides.go:326
|
||||
#: internal/app/application_overrides.go:329
|
||||
#: internal/preferences/settings.go:93
|
||||
msgid "Cancel"
|
||||
msgstr "Cancelar"
|
||||
@@ -289,13 +298,13 @@ msgstr "Genial"
|
||||
msgid "Could not check spelling: {0}"
|
||||
msgstr "No se pudo revisar la ortografía: {0}"
|
||||
|
||||
#: internal/app/application_overrides.go:278
|
||||
#: internal/app/application_overrides.go:83
|
||||
#: internal/app/application_overrides.go:281
|
||||
#: internal/app/application_overrides.go:84
|
||||
msgid "Could not load application settings: {0}"
|
||||
msgstr "No se pudo cargar la configuración de la aplicación: {0}"
|
||||
|
||||
#: internal/app/application_overrides.go:329
|
||||
#: internal/app/application_overrides.go:333
|
||||
#: internal/app/application_overrides.go:332
|
||||
#: internal/app/application_overrides.go:336
|
||||
msgid "Could not open Applications: {0}"
|
||||
msgstr "No se pudo abrir Aplicaciones: {0}"
|
||||
|
||||
@@ -312,8 +321,8 @@ msgstr "No se pudo abrir el menú de Fenrir: {0}"
|
||||
msgid "Could not open Spellcheck Menu: {0}"
|
||||
msgstr "No se pudo abrir el menú de ortografía: {0}"
|
||||
|
||||
#: internal/app/application_overrides.go:161
|
||||
#: internal/app/application_overrides.go:296
|
||||
#: internal/app/application_overrides.go:162
|
||||
#: internal/app/application_overrides.go:299
|
||||
msgid "Could not restore application settings: {0}"
|
||||
msgstr "No se pudo restaurar la configuración de la aplicación: {0}"
|
||||
|
||||
@@ -342,12 +351,12 @@ msgstr "Daga"
|
||||
msgid "Date format"
|
||||
msgstr "Formato de fecha"
|
||||
|
||||
#: internal/app/application_overrides.go:318
|
||||
#: internal/app/application_overrides.go:321
|
||||
msgid "Default"
|
||||
msgstr "Predeterminado"
|
||||
|
||||
#: internal/app/application_overrides.go:186
|
||||
#: internal/app/application_overrides.go:242
|
||||
#: internal/app/application_overrides.go:187
|
||||
#: internal/app/application_overrides.go:245
|
||||
msgid "Default settings restored"
|
||||
msgstr "Configuración predeterminada restaurada"
|
||||
|
||||
@@ -383,10 +392,18 @@ msgstr "Perro"
|
||||
msgid "Donut"
|
||||
msgstr "Rosquilla"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:264
|
||||
msgid "Door"
|
||||
msgstr "Puerta"
|
||||
|
||||
#: internal/config/config.go:120 internal/config/config.go:127
|
||||
msgid "Driver"
|
||||
msgstr "Controlador"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:143
|
||||
msgid "Dungeon level"
|
||||
msgstr "Nivel de la mazmorra"
|
||||
|
||||
#: internal/config/config.go:142
|
||||
msgid "Echo on CapsLock"
|
||||
msgstr "Eco con Bloq Mayús"
|
||||
@@ -438,6 +455,10 @@ msgid "Exiting tutorial mode. To enter tutorial mode again press Fenrir+F1"
|
||||
msgstr ""
|
||||
"Saliendo del modo de aprendizaje. Para volver a entrar, pulse Fenrir+F1"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:144
|
||||
msgid "Experience level"
|
||||
msgstr "Nivel de experiencia"
|
||||
|
||||
#: internal/emoji/catalog.go:30
|
||||
msgid "Exploding head"
|
||||
msgstr "Cabeza explotando"
|
||||
@@ -487,11 +508,15 @@ msgstr "Primer portapapeles "
|
||||
msgid "Flags"
|
||||
msgstr "Banderas"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:260
|
||||
msgid "Floor"
|
||||
msgstr "Suelo"
|
||||
|
||||
#: internal/emoji/catalog.go:105
|
||||
msgid "Folded hands"
|
||||
msgstr "Manos juntas"
|
||||
|
||||
#: internal/emoji/catalog.go
|
||||
#: internal/applicationoverrides/rogue/rogue.go:278 internal/emoji/catalog.go
|
||||
msgid "Food"
|
||||
msgstr "Comida"
|
||||
|
||||
@@ -515,6 +540,10 @@ msgstr "Fantasma"
|
||||
msgid "Gift"
|
||||
msgstr "Regalo"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:270
|
||||
msgid "Gold"
|
||||
msgstr "Oro"
|
||||
|
||||
#: internal/emoji/catalog.go:127
|
||||
msgid "Greece"
|
||||
msgstr "Grecia"
|
||||
@@ -531,6 +560,10 @@ msgstr "Sonrisa con sudor"
|
||||
msgid "Hamburger"
|
||||
msgstr "Hamburguesa"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:71
|
||||
msgid "Health"
|
||||
msgstr "Salud"
|
||||
|
||||
#: internal/emoji/catalog.go:106
|
||||
msgid "Heart"
|
||||
msgstr "Corazón"
|
||||
@@ -575,6 +608,10 @@ msgstr "Sangría"
|
||||
msgid "India"
|
||||
msgstr "India"
|
||||
|
||||
#: internal/applicationoverrides/override.go:25
|
||||
msgid "Information unavailable"
|
||||
msgstr "Información no disponible"
|
||||
|
||||
#: internal/applicationoverrides/ninjam/ninjam.go:276
|
||||
msgid "Input {0}"
|
||||
msgstr "Entrada {0}"
|
||||
@@ -615,6 +652,10 @@ msgstr "Último portapapeles "
|
||||
msgid "Latest chat message"
|
||||
msgstr "Último mensaje de chat"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:72
|
||||
msgid "Latest message"
|
||||
msgstr "Último mensaje"
|
||||
|
||||
#: internal/emoji/catalog.go:37
|
||||
msgid "Laughing"
|
||||
msgstr "Riendo"
|
||||
@@ -647,6 +688,7 @@ msgstr "Región dinámica {0} fuera de la pantalla"
|
||||
msgid "Live region {0} set"
|
||||
msgstr "Región dinámica {0} definida"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:62
|
||||
#: internal/reader/regions.go:245
|
||||
msgid "Live region {0}: {1}"
|
||||
msgstr "Región dinámica {0}: {1}"
|
||||
@@ -663,6 +705,10 @@ msgstr "Canal local {0}"
|
||||
msgid "Mage"
|
||||
msgstr "Mago"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:276
|
||||
msgid "Magic"
|
||||
msgstr "Magia"
|
||||
|
||||
#: internal/applicationoverrides/ninjam/ninjam.go:237
|
||||
msgid "Master"
|
||||
msgstr "Maestro"
|
||||
@@ -683,6 +729,10 @@ msgstr "Sonido de error ortográfico"
|
||||
msgid "Moon"
|
||||
msgstr "Luna"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:105
|
||||
msgid "More; press Space"
|
||||
msgstr "Más; pulsa Espacio"
|
||||
|
||||
#: internal/command/descriptions.go:35
|
||||
msgid "Move Review to the end of current line and display the content"
|
||||
msgstr ""
|
||||
@@ -739,7 +789,7 @@ msgstr "Náuseas"
|
||||
msgid "Netherlands"
|
||||
msgstr "Países Bajos"
|
||||
|
||||
#: internal/app/application_overrides.go:318
|
||||
#: internal/app/application_overrides.go:321
|
||||
msgid "NetworkManager"
|
||||
msgstr "NetworkManager"
|
||||
|
||||
@@ -747,7 +797,7 @@ msgstr "NetworkManager"
|
||||
msgid "New channel"
|
||||
msgstr "Nuevo canal"
|
||||
|
||||
#: internal/app/application_overrides.go:318
|
||||
#: internal/app/application_overrides.go:321
|
||||
msgid "Ninjam"
|
||||
msgstr "Ninjam"
|
||||
|
||||
@@ -789,10 +839,18 @@ msgstr ""
|
||||
msgid "No word"
|
||||
msgstr "Ninguna palabra"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:215
|
||||
msgid "None visible"
|
||||
msgstr "Ninguno visible"
|
||||
|
||||
#: internal/emoji/catalog.go:135
|
||||
msgid "Norway"
|
||||
msgstr "Noruega"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:153
|
||||
msgid "Not hungry"
|
||||
msgstr "Sin hambre"
|
||||
|
||||
#: internal/review/follow_cursor.go:26
|
||||
msgid "Not in Review Mode"
|
||||
msgstr "Fuera del modo de revisión"
|
||||
@@ -809,6 +867,10 @@ msgstr "Aceptar"
|
||||
msgid "One or two marks are needed"
|
||||
msgstr "Se necesitan una o dos marcas"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:262
|
||||
msgid "Passage"
|
||||
msgstr "Pasadizo"
|
||||
|
||||
#: internal/emoji/catalog.go:109
|
||||
msgid "Peace"
|
||||
msgstr "Paz"
|
||||
@@ -849,6 +911,10 @@ msgstr "Caca"
|
||||
msgid "Portugal"
|
||||
msgstr "Portugal"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:272
|
||||
msgid "Potion"
|
||||
msgstr "Poción"
|
||||
|
||||
#: internal/command/descriptions.go:52
|
||||
msgid "Present the version of Fenrir currently in use."
|
||||
msgstr "Anunciar la versión de Fenrir en uso."
|
||||
@@ -994,10 +1060,18 @@ msgstr "Símbolos repetidos"
|
||||
msgid "Repeated symbols minimum length"
|
||||
msgstr "Cantidad mínima de símbolos repetidos"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:286
|
||||
msgid "Ring"
|
||||
msgstr "Anillo"
|
||||
|
||||
#: internal/emoji/catalog.go:110
|
||||
msgid "Rock on"
|
||||
msgstr "Gesto de rock"
|
||||
|
||||
#: internal/app/application_overrides.go:321
|
||||
msgid "Rogue"
|
||||
msgstr "Rogue"
|
||||
|
||||
#: internal/emoji/catalog.go:41
|
||||
msgid "Rolling laughing"
|
||||
msgstr "Revolcándose de risa"
|
||||
@@ -1058,6 +1132,10 @@ msgstr "Archivo de script no encontrado"
|
||||
msgid "Script source is not a valid file"
|
||||
msgstr "El origen del script no es un archivo válido"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:274
|
||||
msgid "Scroll"
|
||||
msgstr "Pergamino"
|
||||
|
||||
#: internal/interaction/grid.go:71
|
||||
msgid "Search cleared"
|
||||
msgstr "Búsqueda borrada"
|
||||
@@ -1090,8 +1168,8 @@ msgstr "Definir una región dinámica a partir de una o dos marcas"
|
||||
msgid "Set window begin and end marks"
|
||||
msgstr "Establece una marca de principio y otra para el final de la ventana"
|
||||
|
||||
#: internal/app/application_overrides.go:171
|
||||
#: internal/app/application_overrides.go:315 internal/app/commands.go:84
|
||||
#: internal/app/application_overrides.go:172
|
||||
#: internal/app/application_overrides.go:318 internal/app/commands.go:84
|
||||
msgid "Settings are busy"
|
||||
msgstr "La configuración está ocupada"
|
||||
|
||||
@@ -1195,6 +1273,10 @@ msgstr "Deletrea la palabra actual"
|
||||
msgid "Spider"
|
||||
msgstr "Araña"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:268
|
||||
msgid "Stairs"
|
||||
msgstr "Escaleras"
|
||||
|
||||
#: internal/emoji/catalog.go:113
|
||||
msgid "Star"
|
||||
msgstr "Estrella"
|
||||
@@ -1203,10 +1285,18 @@ msgstr "Estrella"
|
||||
msgid "Start Fenrir"
|
||||
msgstr "Iniciando fenrir"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:71
|
||||
msgid "Status"
|
||||
msgstr "Estado"
|
||||
|
||||
#: internal/emoji/catalog.go:72
|
||||
msgid "Strawberry"
|
||||
msgstr "Fresa"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:143
|
||||
msgid "Strength"
|
||||
msgstr "Fuerza"
|
||||
|
||||
#: internal/app/spellcheck_menu.go:45 internal/app/spellcheck_menu.go:47
|
||||
msgid "Suggestions"
|
||||
msgstr "Sugerencias"
|
||||
@@ -1219,6 +1309,10 @@ msgstr "Sol"
|
||||
msgid "Sunflower"
|
||||
msgstr "Girasol"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:72
|
||||
msgid "Surroundings"
|
||||
msgstr "Alrededores"
|
||||
|
||||
#: internal/emoji/catalog.go:142
|
||||
msgid "Sweden"
|
||||
msgstr "Suecia"
|
||||
@@ -1271,6 +1365,10 @@ msgstr "Fin"
|
||||
msgid "Tracking mode"
|
||||
msgstr "Modo de seguimiento"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:266
|
||||
msgid "Trap"
|
||||
msgstr "Trampa"
|
||||
|
||||
#: internal/emoji/catalog.go:60
|
||||
msgid "Tree"
|
||||
msgstr "Árbol"
|
||||
@@ -1311,10 +1409,22 @@ msgstr "Reino Unido"
|
||||
msgid "United States"
|
||||
msgstr "Estados Unidos"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:256
|
||||
msgid "Unseen"
|
||||
msgstr "No visible"
|
||||
|
||||
#: internal/emoji/catalog.go:94
|
||||
msgid "Vampire"
|
||||
msgstr "Vampiro"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:73
|
||||
msgid "Visible monsters"
|
||||
msgstr "Monstruos visibles"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:73
|
||||
msgid "Visible objects and landmarks"
|
||||
msgstr "Objetos y puntos de referencia visibles"
|
||||
|
||||
#: internal/app/quick_settings.go:191 internal/app/synthesizer_preview.go:60
|
||||
msgid "Voice test failed"
|
||||
msgstr "La prueba de voz falló"
|
||||
@@ -1335,6 +1445,14 @@ msgstr "Volumen y panorámica {0}"
|
||||
msgid "WTF?"
|
||||
msgstr "¿Pero qué demonios?"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:258
|
||||
msgid "Wall"
|
||||
msgstr "Pared"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:288
|
||||
msgid "Wand or staff"
|
||||
msgstr "Varita o bastón"
|
||||
|
||||
#: internal/app/tutorial.go:24
|
||||
msgid ""
|
||||
"Warning: full keyboard capture is unavailable. Unbound keys may reach the "
|
||||
@@ -1343,6 +1461,10 @@ msgstr ""
|
||||
"Advertencia: la captura completa del teclado no está disponible. Las teclas "
|
||||
"sin asignar pueden llegar a la aplicación activa."
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:280
|
||||
msgid "Weapon"
|
||||
msgstr "Arma"
|
||||
|
||||
#: internal/emoji/catalog.go:95
|
||||
msgid "Web"
|
||||
msgstr "Telaraña"
|
||||
@@ -1619,6 +1741,10 @@ msgstr "dólar"
|
||||
msgid "dot"
|
||||
msgstr "punto"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:244
|
||||
msgid "east {0}"
|
||||
msgstr "este {0}"
|
||||
|
||||
#: internal/command/descriptions.go:69
|
||||
msgid "enables or disables automatic reading of new text as it appears"
|
||||
msgstr ""
|
||||
@@ -1967,6 +2093,10 @@ msgstr "sin consola de texto"
|
||||
msgid "none"
|
||||
msgstr "ninguno"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:235
|
||||
msgid "north {0}"
|
||||
msgstr "norte {0}"
|
||||
|
||||
#: internal/applicationoverrides/ninjam/ninjam.go:263
|
||||
msgid "not receiving"
|
||||
msgstr "sin recibir"
|
||||
@@ -2165,6 +2295,10 @@ msgstr "sonrisa"
|
||||
msgid "some"
|
||||
msgstr "algunos"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:238
|
||||
msgid "south {0}"
|
||||
msgstr "sur {0}"
|
||||
|
||||
#: config/punctuation/default.toml config/punctuation/en.toml
|
||||
#: config/punctuation/rhvoice-en.toml
|
||||
msgid "space"
|
||||
@@ -2281,6 +2415,10 @@ msgstr "subrayado"
|
||||
msgid "unmuted"
|
||||
msgstr "no silenciado"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:241
|
||||
msgid "west {0}"
|
||||
msgstr "oeste {0}"
|
||||
|
||||
#: internal/presentation/attributes.go internal/presentation/attributes.go:27
|
||||
msgid "white"
|
||||
msgstr "blanco"
|
||||
@@ -2293,7 +2431,7 @@ msgstr "guiño"
|
||||
msgid "{0} added to dictionary"
|
||||
msgstr "{0} añadido al diccionario"
|
||||
|
||||
#: internal/app/application_overrides.go:207
|
||||
#: internal/app/application_overrides.go:210
|
||||
msgid "{0} application override selected"
|
||||
msgstr "Ajustes de aplicación seleccionados para {0}"
|
||||
|
||||
@@ -2329,6 +2467,10 @@ msgstr "{0} cuadrícula. {1}"
|
||||
msgid "{0} is already in dictionary"
|
||||
msgstr "{0} ya está en el diccionario"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:115
|
||||
msgid "{0} of {1}"
|
||||
msgstr "{0} de {1}"
|
||||
|
||||
#: internal/applicationoverrides/ninjam/ninjam.go:313
|
||||
msgid "{0} percent left"
|
||||
msgstr "{0} por ciento a la izquierda"
|
||||
@@ -2349,10 +2491,18 @@ msgstr "{0} pestaña"
|
||||
msgid "{0} {1}"
|
||||
msgstr "{0} {1}"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:246
|
||||
msgid "{0}, {1}"
|
||||
msgstr "{0}, {1}"
|
||||
|
||||
#: internal/interaction/grid.go:39
|
||||
msgid "{0}. row {1}, column {2}. {3} of {4}"
|
||||
msgstr "{0}. fila {1}, columna {2}. {3} de {4}"
|
||||
|
||||
#: internal/applicationoverrides/override.go:30
|
||||
msgid "{0}: {1}"
|
||||
msgstr "{0}: {1}"
|
||||
|
||||
#: internal/app/tutorial.go:25
|
||||
msgid ""
|
||||
"{command_name}, Shortcuts {command_shortcuts}, Description "
|
||||
|
||||
+162
-14
@@ -49,6 +49,10 @@ msgstr ""
|
||||
msgid "All 10 live regions are set"
|
||||
msgstr ""
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:284
|
||||
msgid "Amulet"
|
||||
msgstr ""
|
||||
|
||||
#: internal/emoji/catalog.go:23
|
||||
msgid "Angry"
|
||||
msgstr ""
|
||||
@@ -57,11 +61,11 @@ msgstr ""
|
||||
msgid "Apple"
|
||||
msgstr ""
|
||||
|
||||
#: internal/app/application_overrides.go:325
|
||||
#: internal/app/application_overrides.go:328
|
||||
msgid "Application"
|
||||
msgstr ""
|
||||
|
||||
#: internal/app/application_overrides.go:324
|
||||
#: internal/app/application_overrides.go:327
|
||||
msgid "Applications"
|
||||
msgstr ""
|
||||
|
||||
@@ -69,6 +73,10 @@ msgstr ""
|
||||
msgid "Argentina"
|
||||
msgstr ""
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:144 internal/applicationoverrides/rogue/rogue.go:282
|
||||
msgid "Armor"
|
||||
msgstr ""
|
||||
|
||||
#: internal/config/config.go:155
|
||||
msgid "Attribute format"
|
||||
msgstr ""
|
||||
@@ -153,7 +161,7 @@ msgstr ""
|
||||
msgid "Canada"
|
||||
msgstr ""
|
||||
|
||||
#: internal/app/application_overrides.go:326 internal/preferences/settings.go:93
|
||||
#: internal/app/application_overrides.go:329 internal/preferences/settings.go:93
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
@@ -277,11 +285,11 @@ msgstr ""
|
||||
msgid "Could not check spelling: {0}"
|
||||
msgstr ""
|
||||
|
||||
#: internal/app/application_overrides.go:278 internal/app/application_overrides.go:83
|
||||
#: internal/app/application_overrides.go:281 internal/app/application_overrides.go:84
|
||||
msgid "Could not load application settings: {0}"
|
||||
msgstr ""
|
||||
|
||||
#: internal/app/application_overrides.go:329 internal/app/application_overrides.go:333
|
||||
#: internal/app/application_overrides.go:332 internal/app/application_overrides.go:336
|
||||
msgid "Could not open Applications: {0}"
|
||||
msgstr ""
|
||||
|
||||
@@ -297,7 +305,7 @@ msgstr ""
|
||||
msgid "Could not open Spellcheck Menu: {0}"
|
||||
msgstr ""
|
||||
|
||||
#: internal/app/application_overrides.go:161 internal/app/application_overrides.go:296
|
||||
#: internal/app/application_overrides.go:162 internal/app/application_overrides.go:299
|
||||
msgid "Could not restore application settings: {0}"
|
||||
msgstr ""
|
||||
|
||||
@@ -325,11 +333,11 @@ msgstr ""
|
||||
msgid "Date format"
|
||||
msgstr ""
|
||||
|
||||
#: internal/app/application_overrides.go:318
|
||||
#: internal/app/application_overrides.go:321
|
||||
msgid "Default"
|
||||
msgstr ""
|
||||
|
||||
#: internal/app/application_overrides.go:186 internal/app/application_overrides.go:242
|
||||
#: internal/app/application_overrides.go:187 internal/app/application_overrides.go:245
|
||||
msgid "Default settings restored"
|
||||
msgstr ""
|
||||
|
||||
@@ -365,10 +373,18 @@ msgstr ""
|
||||
msgid "Donut"
|
||||
msgstr ""
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:264
|
||||
msgid "Door"
|
||||
msgstr ""
|
||||
|
||||
#: internal/config/config.go:120 internal/config/config.go:127
|
||||
msgid "Driver"
|
||||
msgstr ""
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:143
|
||||
msgid "Dungeon level"
|
||||
msgstr ""
|
||||
|
||||
#: internal/config/config.go:142
|
||||
msgid "Echo on CapsLock"
|
||||
msgstr ""
|
||||
@@ -409,6 +425,10 @@ msgstr ""
|
||||
msgid "Exiting tutorial mode. To enter tutorial mode again press Fenrir+F1"
|
||||
msgstr ""
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:144
|
||||
msgid "Experience level"
|
||||
msgstr ""
|
||||
|
||||
#: internal/emoji/catalog.go:30
|
||||
msgid "Exploding head"
|
||||
msgstr ""
|
||||
@@ -457,11 +477,15 @@ msgstr ""
|
||||
msgid "Flags"
|
||||
msgstr ""
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:260
|
||||
msgid "Floor"
|
||||
msgstr ""
|
||||
|
||||
#: internal/emoji/catalog.go:105
|
||||
msgid "Folded hands"
|
||||
msgstr ""
|
||||
|
||||
#: internal/emoji/catalog.go
|
||||
#: internal/applicationoverrides/rogue/rogue.go:278 internal/emoji/catalog.go
|
||||
msgid "Food"
|
||||
msgstr ""
|
||||
|
||||
@@ -485,6 +509,10 @@ msgstr ""
|
||||
msgid "Gift"
|
||||
msgstr ""
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:270
|
||||
msgid "Gold"
|
||||
msgstr ""
|
||||
|
||||
#: internal/emoji/catalog.go:127
|
||||
msgid "Greece"
|
||||
msgstr ""
|
||||
@@ -501,6 +529,10 @@ msgstr ""
|
||||
msgid "Hamburger"
|
||||
msgstr ""
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:71
|
||||
msgid "Health"
|
||||
msgstr ""
|
||||
|
||||
#: internal/emoji/catalog.go:106
|
||||
msgid "Heart"
|
||||
msgstr ""
|
||||
@@ -545,6 +577,10 @@ msgstr ""
|
||||
msgid "India"
|
||||
msgstr ""
|
||||
|
||||
#: internal/applicationoverrides/override.go:25
|
||||
msgid "Information unavailable"
|
||||
msgstr ""
|
||||
|
||||
#: internal/applicationoverrides/ninjam/ninjam.go:276
|
||||
msgid "Input {0}"
|
||||
msgstr ""
|
||||
@@ -585,6 +621,10 @@ msgstr ""
|
||||
msgid "Latest chat message"
|
||||
msgstr ""
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:72
|
||||
msgid "Latest message"
|
||||
msgstr ""
|
||||
|
||||
#: internal/emoji/catalog.go:37
|
||||
msgid "Laughing"
|
||||
msgstr ""
|
||||
@@ -617,7 +657,7 @@ msgstr ""
|
||||
msgid "Live region {0} set"
|
||||
msgstr ""
|
||||
|
||||
#: internal/reader/regions.go:245
|
||||
#: internal/applicationoverrides/rogue/rogue.go:62 internal/reader/regions.go:245
|
||||
msgid "Live region {0}: {1}"
|
||||
msgstr ""
|
||||
|
||||
@@ -633,6 +673,10 @@ msgstr ""
|
||||
msgid "Mage"
|
||||
msgstr ""
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:276
|
||||
msgid "Magic"
|
||||
msgstr ""
|
||||
|
||||
#: internal/applicationoverrides/ninjam/ninjam.go:237
|
||||
msgid "Master"
|
||||
msgstr ""
|
||||
@@ -653,6 +697,10 @@ msgstr ""
|
||||
msgid "Moon"
|
||||
msgstr ""
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:105
|
||||
msgid "More; press Space"
|
||||
msgstr ""
|
||||
|
||||
#: internal/command/descriptions.go:35
|
||||
msgid "Move Review to the end of current line and display the content"
|
||||
msgstr ""
|
||||
@@ -701,7 +749,7 @@ msgstr ""
|
||||
msgid "Netherlands"
|
||||
msgstr ""
|
||||
|
||||
#: internal/app/application_overrides.go:318
|
||||
#: internal/app/application_overrides.go:321
|
||||
msgid "NetworkManager"
|
||||
msgstr ""
|
||||
|
||||
@@ -709,7 +757,7 @@ msgstr ""
|
||||
msgid "New channel"
|
||||
msgstr ""
|
||||
|
||||
#: internal/app/application_overrides.go:318
|
||||
#: internal/app/application_overrides.go:321
|
||||
msgid "Ninjam"
|
||||
msgstr ""
|
||||
|
||||
@@ -745,10 +793,18 @@ msgstr ""
|
||||
msgid "No word"
|
||||
msgstr ""
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:215
|
||||
msgid "None visible"
|
||||
msgstr ""
|
||||
|
||||
#: internal/emoji/catalog.go:135
|
||||
msgid "Norway"
|
||||
msgstr ""
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:153
|
||||
msgid "Not hungry"
|
||||
msgstr ""
|
||||
|
||||
#: internal/review/follow_cursor.go:26
|
||||
msgid "Not in Review Mode"
|
||||
msgstr ""
|
||||
@@ -765,6 +821,10 @@ msgstr ""
|
||||
msgid "One or two marks are needed"
|
||||
msgstr ""
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:262
|
||||
msgid "Passage"
|
||||
msgstr ""
|
||||
|
||||
#: internal/emoji/catalog.go:109
|
||||
msgid "Peace"
|
||||
msgstr ""
|
||||
@@ -805,6 +865,10 @@ msgstr ""
|
||||
msgid "Portugal"
|
||||
msgstr ""
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:272
|
||||
msgid "Potion"
|
||||
msgstr ""
|
||||
|
||||
#: internal/command/descriptions.go:52
|
||||
msgid "Present the version of Fenrir currently in use."
|
||||
msgstr ""
|
||||
@@ -949,10 +1013,18 @@ msgstr ""
|
||||
msgid "Repeated symbols minimum length"
|
||||
msgstr ""
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:286
|
||||
msgid "Ring"
|
||||
msgstr ""
|
||||
|
||||
#: internal/emoji/catalog.go:110
|
||||
msgid "Rock on"
|
||||
msgstr ""
|
||||
|
||||
#: internal/app/application_overrides.go:321
|
||||
msgid "Rogue"
|
||||
msgstr ""
|
||||
|
||||
#: internal/emoji/catalog.go:41
|
||||
msgid "Rolling laughing"
|
||||
msgstr ""
|
||||
@@ -1013,6 +1085,10 @@ msgstr ""
|
||||
msgid "Script source is not a valid file"
|
||||
msgstr ""
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:274
|
||||
msgid "Scroll"
|
||||
msgstr ""
|
||||
|
||||
#: internal/interaction/grid.go:71
|
||||
msgid "Search cleared"
|
||||
msgstr ""
|
||||
@@ -1045,7 +1121,7 @@ msgstr ""
|
||||
msgid "Set window begin and end marks"
|
||||
msgstr ""
|
||||
|
||||
#: internal/app/application_overrides.go:171 internal/app/application_overrides.go:315 internal/app/commands.go:84
|
||||
#: internal/app/application_overrides.go:172 internal/app/application_overrides.go:318 internal/app/commands.go:84
|
||||
msgid "Settings are busy"
|
||||
msgstr ""
|
||||
|
||||
@@ -1149,6 +1225,10 @@ msgstr ""
|
||||
msgid "Spider"
|
||||
msgstr ""
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:268
|
||||
msgid "Stairs"
|
||||
msgstr ""
|
||||
|
||||
#: internal/emoji/catalog.go:113
|
||||
msgid "Star"
|
||||
msgstr ""
|
||||
@@ -1157,10 +1237,18 @@ msgstr ""
|
||||
msgid "Start Fenrir"
|
||||
msgstr ""
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:71
|
||||
msgid "Status"
|
||||
msgstr ""
|
||||
|
||||
#: internal/emoji/catalog.go:72
|
||||
msgid "Strawberry"
|
||||
msgstr ""
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:143
|
||||
msgid "Strength"
|
||||
msgstr ""
|
||||
|
||||
#: internal/app/spellcheck_menu.go:45 internal/app/spellcheck_menu.go:47
|
||||
msgid "Suggestions"
|
||||
msgstr ""
|
||||
@@ -1173,6 +1261,10 @@ msgstr ""
|
||||
msgid "Sunflower"
|
||||
msgstr ""
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:72
|
||||
msgid "Surroundings"
|
||||
msgstr ""
|
||||
|
||||
#: internal/emoji/catalog.go:142
|
||||
msgid "Sweden"
|
||||
msgstr ""
|
||||
@@ -1225,6 +1317,10 @@ msgstr ""
|
||||
msgid "Tracking mode"
|
||||
msgstr ""
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:266
|
||||
msgid "Trap"
|
||||
msgstr ""
|
||||
|
||||
#: internal/emoji/catalog.go:60
|
||||
msgid "Tree"
|
||||
msgstr ""
|
||||
@@ -1261,10 +1357,22 @@ msgstr ""
|
||||
msgid "United States"
|
||||
msgstr ""
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:256
|
||||
msgid "Unseen"
|
||||
msgstr ""
|
||||
|
||||
#: internal/emoji/catalog.go:94
|
||||
msgid "Vampire"
|
||||
msgstr ""
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:73
|
||||
msgid "Visible monsters"
|
||||
msgstr ""
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:73
|
||||
msgid "Visible objects and landmarks"
|
||||
msgstr ""
|
||||
|
||||
#: internal/app/quick_settings.go:191 internal/app/synthesizer_preview.go:60
|
||||
msgid "Voice test failed"
|
||||
msgstr ""
|
||||
@@ -1285,10 +1393,22 @@ msgstr ""
|
||||
msgid "WTF?"
|
||||
msgstr ""
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:258
|
||||
msgid "Wall"
|
||||
msgstr ""
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:288
|
||||
msgid "Wand or staff"
|
||||
msgstr ""
|
||||
|
||||
#: internal/app/tutorial.go:24
|
||||
msgid "Warning: full keyboard capture is unavailable. Unbound keys may reach the active application."
|
||||
msgstr ""
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:280
|
||||
msgid "Weapon"
|
||||
msgstr ""
|
||||
|
||||
#: internal/emoji/catalog.go:95
|
||||
msgid "Web"
|
||||
msgstr ""
|
||||
@@ -1545,6 +1665,10 @@ msgstr ""
|
||||
msgid "dot"
|
||||
msgstr ""
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:244
|
||||
msgid "east {0}"
|
||||
msgstr ""
|
||||
|
||||
#: internal/command/descriptions.go:69
|
||||
msgid "enables or disables automatic reading of new text as it appears"
|
||||
msgstr ""
|
||||
@@ -1877,6 +2001,10 @@ msgstr ""
|
||||
msgid "none"
|
||||
msgstr ""
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:235
|
||||
msgid "north {0}"
|
||||
msgstr ""
|
||||
|
||||
#: internal/applicationoverrides/ninjam/ninjam.go:263
|
||||
msgid "not receiving"
|
||||
msgstr ""
|
||||
@@ -2057,6 +2185,10 @@ msgstr ""
|
||||
msgid "some"
|
||||
msgstr ""
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:238
|
||||
msgid "south {0}"
|
||||
msgstr ""
|
||||
|
||||
#: config/punctuation/default.toml config/punctuation/en.toml config/punctuation/rhvoice-en.toml
|
||||
msgid "space"
|
||||
msgstr ""
|
||||
@@ -2169,6 +2301,10 @@ msgstr ""
|
||||
msgid "unmuted"
|
||||
msgstr ""
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:241
|
||||
msgid "west {0}"
|
||||
msgstr ""
|
||||
|
||||
#: internal/presentation/attributes.go internal/presentation/attributes.go:27
|
||||
msgid "white"
|
||||
msgstr ""
|
||||
@@ -2181,7 +2317,7 @@ msgstr ""
|
||||
msgid "{0} added to dictionary"
|
||||
msgstr ""
|
||||
|
||||
#: internal/app/application_overrides.go:207
|
||||
#: internal/app/application_overrides.go:210
|
||||
msgid "{0} application override selected"
|
||||
msgstr ""
|
||||
|
||||
@@ -2217,6 +2353,10 @@ msgstr ""
|
||||
msgid "{0} is already in dictionary"
|
||||
msgstr ""
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:115
|
||||
msgid "{0} of {1}"
|
||||
msgstr ""
|
||||
|
||||
#: internal/applicationoverrides/ninjam/ninjam.go:313
|
||||
msgid "{0} percent left"
|
||||
msgstr ""
|
||||
@@ -2237,10 +2377,18 @@ msgstr ""
|
||||
msgid "{0} {1}"
|
||||
msgstr ""
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:246
|
||||
msgid "{0}, {1}"
|
||||
msgstr ""
|
||||
|
||||
#: internal/interaction/grid.go:39
|
||||
msgid "{0}. row {1}, column {2}. {3} of {4}"
|
||||
msgstr ""
|
||||
|
||||
#: internal/applicationoverrides/override.go:30
|
||||
msgid "{0}: {1}"
|
||||
msgstr ""
|
||||
|
||||
#: internal/app/tutorial.go:25
|
||||
msgid "{command_name}, Shortcuts {command_shortcuts}, Description {command_description}"
|
||||
msgstr ""
|
||||
|
||||
@@ -60,6 +60,10 @@ msgstr "Wszystkie"
|
||||
msgid "All 10 live regions are set"
|
||||
msgstr "Ustawiono wszystkie 10 obszarów dynamicznych"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:284
|
||||
msgid "Amulet"
|
||||
msgstr "Amulet"
|
||||
|
||||
#: internal/emoji/catalog.go:23
|
||||
msgid "Angry"
|
||||
msgstr "Złość"
|
||||
@@ -68,11 +72,11 @@ msgstr "Złość"
|
||||
msgid "Apple"
|
||||
msgstr "Jabłko"
|
||||
|
||||
#: internal/app/application_overrides.go:325
|
||||
#: internal/app/application_overrides.go:328
|
||||
msgid "Application"
|
||||
msgstr "Aplikacja"
|
||||
|
||||
#: internal/app/application_overrides.go:324
|
||||
#: internal/app/application_overrides.go:327
|
||||
msgid "Applications"
|
||||
msgstr "Aplikacje"
|
||||
|
||||
@@ -80,6 +84,11 @@ msgstr "Aplikacje"
|
||||
msgid "Argentina"
|
||||
msgstr "Argentyna"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:144
|
||||
#: internal/applicationoverrides/rogue/rogue.go:282
|
||||
msgid "Armor"
|
||||
msgstr "Pancerz"
|
||||
|
||||
#: internal/config/config.go:155
|
||||
msgid "Attribute format"
|
||||
msgstr "Format atrybutów"
|
||||
@@ -164,7 +173,7 @@ msgstr "Motyl"
|
||||
msgid "Canada"
|
||||
msgstr "Kanada"
|
||||
|
||||
#: internal/app/application_overrides.go:326
|
||||
#: internal/app/application_overrides.go:329
|
||||
#: internal/preferences/settings.go:93
|
||||
msgid "Cancel"
|
||||
msgstr "Anuluj"
|
||||
@@ -290,13 +299,13 @@ msgstr "Wyluzowanie"
|
||||
msgid "Could not check spelling: {0}"
|
||||
msgstr "Nie można sprawdzić pisowni: {0}"
|
||||
|
||||
#: internal/app/application_overrides.go:278
|
||||
#: internal/app/application_overrides.go:83
|
||||
#: internal/app/application_overrides.go:281
|
||||
#: internal/app/application_overrides.go:84
|
||||
msgid "Could not load application settings: {0}"
|
||||
msgstr "Nie można wczytać ustawień aplikacji: {0}"
|
||||
|
||||
#: internal/app/application_overrides.go:329
|
||||
#: internal/app/application_overrides.go:333
|
||||
#: internal/app/application_overrides.go:332
|
||||
#: internal/app/application_overrides.go:336
|
||||
msgid "Could not open Applications: {0}"
|
||||
msgstr "Nie można otworzyć menu aplikacji: {0}"
|
||||
|
||||
@@ -313,8 +322,8 @@ msgstr "Nie można otworzyć menu Fenrira: {0}"
|
||||
msgid "Could not open Spellcheck Menu: {0}"
|
||||
msgstr "Nie można otworzyć menu sprawdzania pisowni: {0}"
|
||||
|
||||
#: internal/app/application_overrides.go:161
|
||||
#: internal/app/application_overrides.go:296
|
||||
#: internal/app/application_overrides.go:162
|
||||
#: internal/app/application_overrides.go:299
|
||||
msgid "Could not restore application settings: {0}"
|
||||
msgstr "Nie można przywrócić ustawień aplikacji: {0}"
|
||||
|
||||
@@ -343,12 +352,12 @@ msgstr "Sztylet"
|
||||
msgid "Date format"
|
||||
msgstr "Format daty"
|
||||
|
||||
#: internal/app/application_overrides.go:318
|
||||
#: internal/app/application_overrides.go:321
|
||||
msgid "Default"
|
||||
msgstr "Domyślne"
|
||||
|
||||
#: internal/app/application_overrides.go:186
|
||||
#: internal/app/application_overrides.go:242
|
||||
#: internal/app/application_overrides.go:187
|
||||
#: internal/app/application_overrides.go:245
|
||||
msgid "Default settings restored"
|
||||
msgstr "Przywrócono ustawienia domyślne"
|
||||
|
||||
@@ -384,10 +393,18 @@ msgstr "Pies"
|
||||
msgid "Donut"
|
||||
msgstr "Pączek"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:264
|
||||
msgid "Door"
|
||||
msgstr "Drzwi"
|
||||
|
||||
#: internal/config/config.go:120 internal/config/config.go:127
|
||||
msgid "Driver"
|
||||
msgstr "Sterownik"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:143
|
||||
msgid "Dungeon level"
|
||||
msgstr "Poziom lochu"
|
||||
|
||||
#: internal/config/config.go:142
|
||||
msgid "Echo on CapsLock"
|
||||
msgstr "Echo przy CapsLock"
|
||||
@@ -438,6 +455,10 @@ msgstr "Wyjście z trybu przeglądu"
|
||||
msgid "Exiting tutorial mode. To enter tutorial mode again press Fenrir+F1"
|
||||
msgstr "Wyjście z trybu nauki. Aby ponownie go włączyć, naciśnij Fenrir+F1"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:144
|
||||
msgid "Experience level"
|
||||
msgstr "Poziom doświadczenia"
|
||||
|
||||
#: internal/emoji/catalog.go:30
|
||||
msgid "Exploding head"
|
||||
msgstr "Eksplodująca głowa"
|
||||
@@ -487,11 +508,15 @@ msgstr "Pierwszy showek "
|
||||
msgid "Flags"
|
||||
msgstr "Flagi"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:260
|
||||
msgid "Floor"
|
||||
msgstr "Podłoga"
|
||||
|
||||
#: internal/emoji/catalog.go:105
|
||||
msgid "Folded hands"
|
||||
msgstr "Złożone dłonie"
|
||||
|
||||
#: internal/emoji/catalog.go
|
||||
#: internal/applicationoverrides/rogue/rogue.go:278 internal/emoji/catalog.go
|
||||
msgid "Food"
|
||||
msgstr "Jedzenie"
|
||||
|
||||
@@ -515,6 +540,10 @@ msgstr "Duch"
|
||||
msgid "Gift"
|
||||
msgstr "Prezent"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:270
|
||||
msgid "Gold"
|
||||
msgstr "Złoto"
|
||||
|
||||
#: internal/emoji/catalog.go:127
|
||||
msgid "Greece"
|
||||
msgstr "Grecja"
|
||||
@@ -531,6 +560,10 @@ msgstr "Uśmiech z kroplą potu"
|
||||
msgid "Hamburger"
|
||||
msgstr "Hamburger"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:71
|
||||
msgid "Health"
|
||||
msgstr "Zdrowie"
|
||||
|
||||
#: internal/emoji/catalog.go:106
|
||||
msgid "Heart"
|
||||
msgstr "Serce"
|
||||
@@ -575,6 +608,10 @@ msgstr "Wcięcia"
|
||||
msgid "India"
|
||||
msgstr "Indie"
|
||||
|
||||
#: internal/applicationoverrides/override.go:25
|
||||
msgid "Information unavailable"
|
||||
msgstr "Informacje niedostępne"
|
||||
|
||||
#: internal/applicationoverrides/ninjam/ninjam.go:276
|
||||
msgid "Input {0}"
|
||||
msgstr "Wejście {0}"
|
||||
@@ -615,6 +652,10 @@ msgstr "Ostatni showek "
|
||||
msgid "Latest chat message"
|
||||
msgstr "Ostatnia wiadomość czatu"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:72
|
||||
msgid "Latest message"
|
||||
msgstr "Ostatni komunikat"
|
||||
|
||||
#: internal/emoji/catalog.go:37
|
||||
msgid "Laughing"
|
||||
msgstr "Śmiech"
|
||||
@@ -647,6 +688,7 @@ msgstr "Obszar dynamiczny {0} poza ekranem"
|
||||
msgid "Live region {0} set"
|
||||
msgstr "Ustawiono obszar dynamiczny {0}"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:62
|
||||
#: internal/reader/regions.go:245
|
||||
msgid "Live region {0}: {1}"
|
||||
msgstr "Obszar dynamiczny {0}: {1}"
|
||||
@@ -663,6 +705,10 @@ msgstr "Kanał lokalny {0}"
|
||||
msgid "Mage"
|
||||
msgstr "Mag"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:276
|
||||
msgid "Magic"
|
||||
msgstr "Magia"
|
||||
|
||||
#: internal/applicationoverrides/ninjam/ninjam.go:237
|
||||
msgid "Master"
|
||||
msgstr "Główne wyjście"
|
||||
@@ -683,6 +729,10 @@ msgstr "Dźwięk błędu pisowni"
|
||||
msgid "Moon"
|
||||
msgstr "Księżyc"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:105
|
||||
msgid "More; press Space"
|
||||
msgstr "Więcej; naciśnij spację"
|
||||
|
||||
#: internal/command/descriptions.go:35
|
||||
msgid "Move Review to the end of current line and display the content"
|
||||
msgstr ""
|
||||
@@ -735,7 +785,7 @@ msgstr "Nudności"
|
||||
msgid "Netherlands"
|
||||
msgstr "Holandia"
|
||||
|
||||
#: internal/app/application_overrides.go:318
|
||||
#: internal/app/application_overrides.go:321
|
||||
msgid "NetworkManager"
|
||||
msgstr "NetworkManager"
|
||||
|
||||
@@ -743,7 +793,7 @@ msgstr "NetworkManager"
|
||||
msgid "New channel"
|
||||
msgstr "Nowy kanał"
|
||||
|
||||
#: internal/app/application_overrides.go:318
|
||||
#: internal/app/application_overrides.go:321
|
||||
msgid "Ninjam"
|
||||
msgstr "Ninjam"
|
||||
|
||||
@@ -784,10 +834,18 @@ msgstr "Brak tekstu w schowku lub dostępnego ekranu"
|
||||
msgid "No word"
|
||||
msgstr "Brak słowa"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:215
|
||||
msgid "None visible"
|
||||
msgstr "Brak widocznych"
|
||||
|
||||
#: internal/emoji/catalog.go:135
|
||||
msgid "Norway"
|
||||
msgstr "Norwegia"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:153
|
||||
msgid "Not hungry"
|
||||
msgstr "Brak głodu"
|
||||
|
||||
#: internal/review/follow_cursor.go:26
|
||||
msgid "Not in Review Mode"
|
||||
msgstr "Poza trybem przeglądu"
|
||||
@@ -804,6 +862,10 @@ msgstr "OK"
|
||||
msgid "One or two marks are needed"
|
||||
msgstr "Potrzebny jest jeden lub dwa znaczniki"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:262
|
||||
msgid "Passage"
|
||||
msgstr "Korytarz"
|
||||
|
||||
#: internal/emoji/catalog.go:109
|
||||
msgid "Peace"
|
||||
msgstr "Pokój"
|
||||
@@ -844,6 +906,10 @@ msgstr "Kupa"
|
||||
msgid "Portugal"
|
||||
msgstr "Portugalia"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:272
|
||||
msgid "Potion"
|
||||
msgstr "Mikstura"
|
||||
|
||||
#: internal/command/descriptions.go:52
|
||||
msgid "Present the version of Fenrir currently in use."
|
||||
msgstr "Odczytaj używaną wersję Fenrira."
|
||||
@@ -989,10 +1055,18 @@ msgstr "Powtarzane symbole"
|
||||
msgid "Repeated symbols minimum length"
|
||||
msgstr "Minimalna liczba powtarzanych symboli"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:286
|
||||
msgid "Ring"
|
||||
msgstr "Pierścień"
|
||||
|
||||
#: internal/emoji/catalog.go:110
|
||||
msgid "Rock on"
|
||||
msgstr "Gest rockowy"
|
||||
|
||||
#: internal/app/application_overrides.go:321
|
||||
msgid "Rogue"
|
||||
msgstr "Rogue"
|
||||
|
||||
#: internal/emoji/catalog.go:41
|
||||
msgid "Rolling laughing"
|
||||
msgstr "Tarzanie się ze śmiechu"
|
||||
@@ -1053,6 +1127,10 @@ msgstr "Nie znaleziono pliku skryptu"
|
||||
msgid "Script source is not a valid file"
|
||||
msgstr "Źródło skryptu nie jest prawidłowym plikiem"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:274
|
||||
msgid "Scroll"
|
||||
msgstr "Zwój"
|
||||
|
||||
#: internal/interaction/grid.go:71
|
||||
msgid "Search cleared"
|
||||
msgstr "Wyszukiwanie wyczyszczone"
|
||||
@@ -1085,8 +1163,8 @@ msgstr "Ustaw obszar dynamiczny za pomocą jednego lub dwóch znaczników"
|
||||
msgid "Set window begin and end marks"
|
||||
msgstr "Ustaw początek i koniec okna."
|
||||
|
||||
#: internal/app/application_overrides.go:171
|
||||
#: internal/app/application_overrides.go:315 internal/app/commands.go:84
|
||||
#: internal/app/application_overrides.go:172
|
||||
#: internal/app/application_overrides.go:318 internal/app/commands.go:84
|
||||
msgid "Settings are busy"
|
||||
msgstr "Ustawienia są zajęte"
|
||||
|
||||
@@ -1190,6 +1268,10 @@ msgstr "Literuje bieżące słowo"
|
||||
msgid "Spider"
|
||||
msgstr "Pająk"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:268
|
||||
msgid "Stairs"
|
||||
msgstr "Schody"
|
||||
|
||||
#: internal/emoji/catalog.go:113
|
||||
msgid "Star"
|
||||
msgstr "Gwiazda"
|
||||
@@ -1198,10 +1280,18 @@ msgstr "Gwiazda"
|
||||
msgid "Start Fenrir"
|
||||
msgstr "Uruchom Fenrir"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:71
|
||||
msgid "Status"
|
||||
msgstr "Stan"
|
||||
|
||||
#: internal/emoji/catalog.go:72
|
||||
msgid "Strawberry"
|
||||
msgstr "Truskawka"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:143
|
||||
msgid "Strength"
|
||||
msgstr "Siła"
|
||||
|
||||
#: internal/app/spellcheck_menu.go:45 internal/app/spellcheck_menu.go:47
|
||||
msgid "Suggestions"
|
||||
msgstr "Sugestie"
|
||||
@@ -1214,6 +1304,10 @@ msgstr "Słońce"
|
||||
msgid "Sunflower"
|
||||
msgstr "Słonecznik"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:72
|
||||
msgid "Surroundings"
|
||||
msgstr "Otoczenie"
|
||||
|
||||
#: internal/emoji/catalog.go:142
|
||||
msgid "Sweden"
|
||||
msgstr "Szwecja"
|
||||
@@ -1266,6 +1360,10 @@ msgstr "Góra."
|
||||
msgid "Tracking mode"
|
||||
msgstr "Tryb śledzenia"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:266
|
||||
msgid "Trap"
|
||||
msgstr "Pułapka"
|
||||
|
||||
#: internal/emoji/catalog.go:60
|
||||
msgid "Tree"
|
||||
msgstr "Drzewo"
|
||||
@@ -1307,10 +1405,22 @@ msgstr "Wielka Brytania"
|
||||
msgid "United States"
|
||||
msgstr "Stany Zjednoczone"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:256
|
||||
msgid "Unseen"
|
||||
msgstr "Niewidoczne"
|
||||
|
||||
#: internal/emoji/catalog.go:94
|
||||
msgid "Vampire"
|
||||
msgstr "Wampir"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:73
|
||||
msgid "Visible monsters"
|
||||
msgstr "Widoczne potwory"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:73
|
||||
msgid "Visible objects and landmarks"
|
||||
msgstr "Widoczne przedmioty i punkty orientacyjne"
|
||||
|
||||
#: internal/app/quick_settings.go:191 internal/app/synthesizer_preview.go:60
|
||||
msgid "Voice test failed"
|
||||
msgstr "Test głosu nie powiódł się"
|
||||
@@ -1331,6 +1441,14 @@ msgstr "Głośność i panorama {0}"
|
||||
msgid "WTF?"
|
||||
msgstr "Co do diabła?"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:258
|
||||
msgid "Wall"
|
||||
msgstr "Ściana"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:288
|
||||
msgid "Wand or staff"
|
||||
msgstr "Różdżka lub kostur"
|
||||
|
||||
#: internal/app/tutorial.go:24
|
||||
msgid ""
|
||||
"Warning: full keyboard capture is unavailable. Unbound keys may reach the "
|
||||
@@ -1339,6 +1457,10 @@ msgstr ""
|
||||
"Uwaga: pełne przechwytywanie klawiatury jest niedostępne. Nieprzypisane "
|
||||
"klawisze mogą trafić do aktywnej aplikacji."
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:280
|
||||
msgid "Weapon"
|
||||
msgstr "Broń"
|
||||
|
||||
#: internal/emoji/catalog.go:95
|
||||
msgid "Web"
|
||||
msgstr "Pajęczyna"
|
||||
@@ -1615,6 +1737,10 @@ msgstr "dolar"
|
||||
msgid "dot"
|
||||
msgstr "kropka"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:244
|
||||
msgid "east {0}"
|
||||
msgstr "wschód {0}"
|
||||
|
||||
#: internal/command/descriptions.go:69
|
||||
msgid "enables or disables automatic reading of new text as it appears"
|
||||
msgstr "Włącza lub wyłącza informowanie o dynamicznych zmianach treści."
|
||||
@@ -1960,6 +2086,10 @@ msgstr "brak konsoli tekstowej"
|
||||
msgid "none"
|
||||
msgstr "brak"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:235
|
||||
msgid "north {0}"
|
||||
msgstr "północ {0}"
|
||||
|
||||
#: internal/applicationoverrides/ninjam/ninjam.go:263
|
||||
msgid "not receiving"
|
||||
msgstr "odbiór wyłączony"
|
||||
@@ -2157,6 +2287,10 @@ msgstr "uśmiech"
|
||||
msgid "some"
|
||||
msgstr "niektóre"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:238
|
||||
msgid "south {0}"
|
||||
msgstr "południe {0}"
|
||||
|
||||
#: config/punctuation/default.toml config/punctuation/en.toml
|
||||
#: config/punctuation/rhvoice-en.toml
|
||||
msgid "space"
|
||||
@@ -2273,6 +2407,10 @@ msgstr "podkreślenie"
|
||||
msgid "unmuted"
|
||||
msgstr "niewyciszony"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:241
|
||||
msgid "west {0}"
|
||||
msgstr "zachód {0}"
|
||||
|
||||
#: internal/presentation/attributes.go internal/presentation/attributes.go:27
|
||||
msgid "white"
|
||||
msgstr "Biały"
|
||||
@@ -2285,7 +2423,7 @@ msgstr "mrugnięcie"
|
||||
msgid "{0} added to dictionary"
|
||||
msgstr "Dodano {0} do słownika"
|
||||
|
||||
#: internal/app/application_overrides.go:207
|
||||
#: internal/app/application_overrides.go:210
|
||||
msgid "{0} application override selected"
|
||||
msgstr "Wybrano ustawienia aplikacji {0}"
|
||||
|
||||
@@ -2321,6 +2459,10 @@ msgstr "{0} siatka. {1}"
|
||||
msgid "{0} is already in dictionary"
|
||||
msgstr "{0} jest już w słowniku"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:115
|
||||
msgid "{0} of {1}"
|
||||
msgstr "{0} z {1}"
|
||||
|
||||
#: internal/applicationoverrides/ninjam/ninjam.go:313
|
||||
msgid "{0} percent left"
|
||||
msgstr "{0} procent w lewo"
|
||||
@@ -2341,10 +2483,18 @@ msgstr "{0} zakładka"
|
||||
msgid "{0} {1}"
|
||||
msgstr "{0} {1}"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:246
|
||||
msgid "{0}, {1}"
|
||||
msgstr "{0}, {1}"
|
||||
|
||||
#: internal/interaction/grid.go:39
|
||||
msgid "{0}. row {1}, column {2}. {3} of {4}"
|
||||
msgstr "{0}. wiersz {1}, kolumna {2}. {3} z {4}"
|
||||
|
||||
#: internal/applicationoverrides/override.go:30
|
||||
msgid "{0}: {1}"
|
||||
msgstr "{0}: {1}"
|
||||
|
||||
#: internal/app/tutorial.go:25
|
||||
msgid ""
|
||||
"{command_name}, Shortcuts {command_shortcuts}, Description "
|
||||
|
||||
@@ -58,6 +58,10 @@ msgstr "Todos"
|
||||
msgid "All 10 live regions are set"
|
||||
msgstr "Todas as 10 regiões dinâmicas estão definidas"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:284
|
||||
msgid "Amulet"
|
||||
msgstr "Amuleto"
|
||||
|
||||
#: internal/emoji/catalog.go:23
|
||||
msgid "Angry"
|
||||
msgstr "Zangado"
|
||||
@@ -66,11 +70,11 @@ msgstr "Zangado"
|
||||
msgid "Apple"
|
||||
msgstr "Maçã"
|
||||
|
||||
#: internal/app/application_overrides.go:325
|
||||
#: internal/app/application_overrides.go:328
|
||||
msgid "Application"
|
||||
msgstr "Aplicativo"
|
||||
|
||||
#: internal/app/application_overrides.go:324
|
||||
#: internal/app/application_overrides.go:327
|
||||
msgid "Applications"
|
||||
msgstr "Aplicativos"
|
||||
|
||||
@@ -78,6 +82,11 @@ msgstr "Aplicativos"
|
||||
msgid "Argentina"
|
||||
msgstr "Argentina"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:144
|
||||
#: internal/applicationoverrides/rogue/rogue.go:282
|
||||
msgid "Armor"
|
||||
msgstr "Armadura"
|
||||
|
||||
#: internal/config/config.go:155
|
||||
msgid "Attribute format"
|
||||
msgstr "Formato dos atributos"
|
||||
@@ -162,7 +171,7 @@ msgstr "Borboleta"
|
||||
msgid "Canada"
|
||||
msgstr "Canadá"
|
||||
|
||||
#: internal/app/application_overrides.go:326
|
||||
#: internal/app/application_overrides.go:329
|
||||
#: internal/preferences/settings.go:93
|
||||
msgid "Cancel"
|
||||
msgstr "Cancelar"
|
||||
@@ -288,13 +297,13 @@ msgstr "Legal"
|
||||
msgid "Could not check spelling: {0}"
|
||||
msgstr "Não foi possível verificar a ortografia: {0}"
|
||||
|
||||
#: internal/app/application_overrides.go:278
|
||||
#: internal/app/application_overrides.go:83
|
||||
#: internal/app/application_overrides.go:281
|
||||
#: internal/app/application_overrides.go:84
|
||||
msgid "Could not load application settings: {0}"
|
||||
msgstr "Não foi possível carregar as configurações do aplicativo: {0}"
|
||||
|
||||
#: internal/app/application_overrides.go:329
|
||||
#: internal/app/application_overrides.go:333
|
||||
#: internal/app/application_overrides.go:332
|
||||
#: internal/app/application_overrides.go:336
|
||||
msgid "Could not open Applications: {0}"
|
||||
msgstr "Não foi possível abrir Aplicativos: {0}"
|
||||
|
||||
@@ -311,8 +320,8 @@ msgstr "Não foi possível abrir o menu do Fenrir: {0}"
|
||||
msgid "Could not open Spellcheck Menu: {0}"
|
||||
msgstr "Não foi possível abrir o menu de ortografia: {0}"
|
||||
|
||||
#: internal/app/application_overrides.go:161
|
||||
#: internal/app/application_overrides.go:296
|
||||
#: internal/app/application_overrides.go:162
|
||||
#: internal/app/application_overrides.go:299
|
||||
msgid "Could not restore application settings: {0}"
|
||||
msgstr "Não foi possível restaurar as configurações do aplicativo: {0}"
|
||||
|
||||
@@ -341,12 +350,12 @@ msgstr "Adaga"
|
||||
msgid "Date format"
|
||||
msgstr "Formato da data"
|
||||
|
||||
#: internal/app/application_overrides.go:318
|
||||
#: internal/app/application_overrides.go:321
|
||||
msgid "Default"
|
||||
msgstr "Padrão"
|
||||
|
||||
#: internal/app/application_overrides.go:186
|
||||
#: internal/app/application_overrides.go:242
|
||||
#: internal/app/application_overrides.go:187
|
||||
#: internal/app/application_overrides.go:245
|
||||
msgid "Default settings restored"
|
||||
msgstr "Configurações padrão restauradas"
|
||||
|
||||
@@ -382,10 +391,18 @@ msgstr "Cachorro"
|
||||
msgid "Donut"
|
||||
msgstr "Rosquinha"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:264
|
||||
msgid "Door"
|
||||
msgstr "Porta"
|
||||
|
||||
#: internal/config/config.go:120 internal/config/config.go:127
|
||||
msgid "Driver"
|
||||
msgstr "Controlador"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:143
|
||||
msgid "Dungeon level"
|
||||
msgstr "Nível da masmorra"
|
||||
|
||||
#: internal/config/config.go:142
|
||||
msgid "Echo on CapsLock"
|
||||
msgstr "Eco com CapsLock"
|
||||
@@ -437,6 +454,10 @@ msgid "Exiting tutorial mode. To enter tutorial mode again press Fenrir+F1"
|
||||
msgstr ""
|
||||
"Saindo do modo de aprendizado. Para entrar novamente, pressione Fenrir+F1"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:144
|
||||
msgid "Experience level"
|
||||
msgstr "Nível de experiência"
|
||||
|
||||
#: internal/emoji/catalog.go:30
|
||||
msgid "Exploding head"
|
||||
msgstr "Cabeça explodindo"
|
||||
@@ -487,11 +508,15 @@ msgstr "Primeira área de transferência "
|
||||
msgid "Flags"
|
||||
msgstr "Bandeiras"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:260
|
||||
msgid "Floor"
|
||||
msgstr "Chão"
|
||||
|
||||
#: internal/emoji/catalog.go:105
|
||||
msgid "Folded hands"
|
||||
msgstr "Mãos juntas"
|
||||
|
||||
#: internal/emoji/catalog.go
|
||||
#: internal/applicationoverrides/rogue/rogue.go:278 internal/emoji/catalog.go
|
||||
msgid "Food"
|
||||
msgstr "Comida"
|
||||
|
||||
@@ -515,6 +540,10 @@ msgstr "Fantasma"
|
||||
msgid "Gift"
|
||||
msgstr "Presente"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:270
|
||||
msgid "Gold"
|
||||
msgstr "Ouro"
|
||||
|
||||
#: internal/emoji/catalog.go:127
|
||||
msgid "Greece"
|
||||
msgstr "Grécia"
|
||||
@@ -531,6 +560,10 @@ msgstr "Sorriso com suor"
|
||||
msgid "Hamburger"
|
||||
msgstr "Hambúrguer"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:71
|
||||
msgid "Health"
|
||||
msgstr "Saúde"
|
||||
|
||||
#: internal/emoji/catalog.go:106
|
||||
msgid "Heart"
|
||||
msgstr "Coração"
|
||||
@@ -575,6 +608,10 @@ msgstr "Recuo"
|
||||
msgid "India"
|
||||
msgstr "Índia"
|
||||
|
||||
#: internal/applicationoverrides/override.go:25
|
||||
msgid "Information unavailable"
|
||||
msgstr "Informação indisponível"
|
||||
|
||||
#: internal/applicationoverrides/ninjam/ninjam.go:276
|
||||
msgid "Input {0}"
|
||||
msgstr "Entrada {0}"
|
||||
@@ -615,6 +652,10 @@ msgstr "Última área de transferência "
|
||||
msgid "Latest chat message"
|
||||
msgstr "Última mensagem do chat"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:72
|
||||
msgid "Latest message"
|
||||
msgstr "Última mensagem"
|
||||
|
||||
#: internal/emoji/catalog.go:37
|
||||
msgid "Laughing"
|
||||
msgstr "Rindo"
|
||||
@@ -647,6 +688,7 @@ msgstr "Região dinâmica {0} fora da tela"
|
||||
msgid "Live region {0} set"
|
||||
msgstr "Região dinâmica {0} definida"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:62
|
||||
#: internal/reader/regions.go:245
|
||||
msgid "Live region {0}: {1}"
|
||||
msgstr "Região dinâmica {0}: {1}"
|
||||
@@ -663,6 +705,10 @@ msgstr "Canal local {0}"
|
||||
msgid "Mage"
|
||||
msgstr "Mago"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:276
|
||||
msgid "Magic"
|
||||
msgstr "Magia"
|
||||
|
||||
#: internal/applicationoverrides/ninjam/ninjam.go:237
|
||||
msgid "Master"
|
||||
msgstr "Principal"
|
||||
@@ -683,6 +729,10 @@ msgstr "Som de erro ortográfico"
|
||||
msgid "Moon"
|
||||
msgstr "Lua"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:105
|
||||
msgid "More; press Space"
|
||||
msgstr "Mais; pressione Espaço"
|
||||
|
||||
#: internal/command/descriptions.go:35
|
||||
msgid "Move Review to the end of current line and display the content"
|
||||
msgstr ""
|
||||
@@ -737,7 +787,7 @@ msgstr "Enjoado"
|
||||
msgid "Netherlands"
|
||||
msgstr "Países Baixos"
|
||||
|
||||
#: internal/app/application_overrides.go:318
|
||||
#: internal/app/application_overrides.go:321
|
||||
msgid "NetworkManager"
|
||||
msgstr "NetworkManager"
|
||||
|
||||
@@ -745,7 +795,7 @@ msgstr "NetworkManager"
|
||||
msgid "New channel"
|
||||
msgstr "Novo canal"
|
||||
|
||||
#: internal/app/application_overrides.go:318
|
||||
#: internal/app/application_overrides.go:321
|
||||
msgid "Ninjam"
|
||||
msgstr "Ninjam"
|
||||
|
||||
@@ -787,10 +837,18 @@ msgstr ""
|
||||
msgid "No word"
|
||||
msgstr "Nenhuma palavra"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:215
|
||||
msgid "None visible"
|
||||
msgstr "Nenhum visível"
|
||||
|
||||
#: internal/emoji/catalog.go:135
|
||||
msgid "Norway"
|
||||
msgstr "Noruega"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:153
|
||||
msgid "Not hungry"
|
||||
msgstr "Sem fome"
|
||||
|
||||
#: internal/review/follow_cursor.go:26
|
||||
msgid "Not in Review Mode"
|
||||
msgstr "Fora do modo de revisão"
|
||||
@@ -807,6 +865,10 @@ msgstr "OK"
|
||||
msgid "One or two marks are needed"
|
||||
msgstr "São necessárias uma ou duas marcas"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:262
|
||||
msgid "Passage"
|
||||
msgstr "Passagem"
|
||||
|
||||
#: internal/emoji/catalog.go:109
|
||||
msgid "Peace"
|
||||
msgstr "Paz"
|
||||
@@ -847,6 +909,10 @@ msgstr "Cocô"
|
||||
msgid "Portugal"
|
||||
msgstr "Portugal"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:272
|
||||
msgid "Potion"
|
||||
msgstr "Poção"
|
||||
|
||||
#: internal/command/descriptions.go:52
|
||||
msgid "Present the version of Fenrir currently in use."
|
||||
msgstr "Anunciar a versão do Fenrir em uso."
|
||||
@@ -993,10 +1059,18 @@ msgstr "Símbolos repetidos"
|
||||
msgid "Repeated symbols minimum length"
|
||||
msgstr "Quantidade mínima de símbolos repetidos"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:286
|
||||
msgid "Ring"
|
||||
msgstr "Anel"
|
||||
|
||||
#: internal/emoji/catalog.go:110
|
||||
msgid "Rock on"
|
||||
msgstr "Gesto de rock"
|
||||
|
||||
#: internal/app/application_overrides.go:321
|
||||
msgid "Rogue"
|
||||
msgstr "Rogue"
|
||||
|
||||
#: internal/emoji/catalog.go:41
|
||||
msgid "Rolling laughing"
|
||||
msgstr "Rolando de rir"
|
||||
@@ -1057,6 +1131,10 @@ msgstr "Arquivo de script não encontrado"
|
||||
msgid "Script source is not a valid file"
|
||||
msgstr "A origem do script não é um arquivo válido"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:274
|
||||
msgid "Scroll"
|
||||
msgstr "Pergaminho"
|
||||
|
||||
#: internal/interaction/grid.go:71
|
||||
msgid "Search cleared"
|
||||
msgstr "Pesquisa limpa"
|
||||
@@ -1089,8 +1167,8 @@ msgstr "Definir uma região dinâmica a partir de uma ou duas marcas"
|
||||
msgid "Set window begin and end marks"
|
||||
msgstr "Definir marcas de início e fim da janela"
|
||||
|
||||
#: internal/app/application_overrides.go:171
|
||||
#: internal/app/application_overrides.go:315 internal/app/commands.go:84
|
||||
#: internal/app/application_overrides.go:172
|
||||
#: internal/app/application_overrides.go:318 internal/app/commands.go:84
|
||||
msgid "Settings are busy"
|
||||
msgstr "As configurações estão ocupadas"
|
||||
|
||||
@@ -1194,6 +1272,10 @@ msgstr "Soletra a palavra atual"
|
||||
msgid "Spider"
|
||||
msgstr "Aranha"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:268
|
||||
msgid "Stairs"
|
||||
msgstr "Escadas"
|
||||
|
||||
#: internal/emoji/catalog.go:113
|
||||
msgid "Star"
|
||||
msgstr "Estrela"
|
||||
@@ -1202,10 +1284,18 @@ msgstr "Estrela"
|
||||
msgid "Start Fenrir"
|
||||
msgstr "Iniciar o Fenrir"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:71
|
||||
msgid "Status"
|
||||
msgstr "Estado"
|
||||
|
||||
#: internal/emoji/catalog.go:72
|
||||
msgid "Strawberry"
|
||||
msgstr "Morango"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:143
|
||||
msgid "Strength"
|
||||
msgstr "Força"
|
||||
|
||||
#: internal/app/spellcheck_menu.go:45 internal/app/spellcheck_menu.go:47
|
||||
msgid "Suggestions"
|
||||
msgstr "Sugestões"
|
||||
@@ -1218,6 +1308,10 @@ msgstr "Sol"
|
||||
msgid "Sunflower"
|
||||
msgstr "Girassol"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:72
|
||||
msgid "Surroundings"
|
||||
msgstr "Arredores"
|
||||
|
||||
#: internal/emoji/catalog.go:142
|
||||
msgid "Sweden"
|
||||
msgstr "Suécia"
|
||||
@@ -1270,6 +1364,10 @@ msgstr "Topo"
|
||||
msgid "Tracking mode"
|
||||
msgstr "Modo de acompanhamento"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:266
|
||||
msgid "Trap"
|
||||
msgstr "Armadilha"
|
||||
|
||||
#: internal/emoji/catalog.go:60
|
||||
msgid "Tree"
|
||||
msgstr "Árvore"
|
||||
@@ -1311,10 +1409,22 @@ msgstr "Reino Unido"
|
||||
msgid "United States"
|
||||
msgstr "Estados Unidos"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:256
|
||||
msgid "Unseen"
|
||||
msgstr "Não visível"
|
||||
|
||||
#: internal/emoji/catalog.go:94
|
||||
msgid "Vampire"
|
||||
msgstr "Vampiro"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:73
|
||||
msgid "Visible monsters"
|
||||
msgstr "Monstros visíveis"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:73
|
||||
msgid "Visible objects and landmarks"
|
||||
msgstr "Objetos e pontos de referência visíveis"
|
||||
|
||||
#: internal/app/quick_settings.go:191 internal/app/synthesizer_preview.go:60
|
||||
msgid "Voice test failed"
|
||||
msgstr "O teste de voz falhou"
|
||||
@@ -1336,6 +1446,14 @@ msgstr "Volume e panorama {0}"
|
||||
msgid "WTF?"
|
||||
msgstr "Mas que diabos?"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:258
|
||||
msgid "Wall"
|
||||
msgstr "Parede"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:288
|
||||
msgid "Wand or staff"
|
||||
msgstr "Varinha ou cajado"
|
||||
|
||||
#: internal/app/tutorial.go:24
|
||||
msgid ""
|
||||
"Warning: full keyboard capture is unavailable. Unbound keys may reach the "
|
||||
@@ -1344,6 +1462,10 @@ msgstr ""
|
||||
"Aviso: a captura completa do teclado não está disponível. Teclas sem atalho "
|
||||
"podem chegar ao aplicativo ativo."
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:280
|
||||
msgid "Weapon"
|
||||
msgstr "Arma"
|
||||
|
||||
#: internal/emoji/catalog.go:95
|
||||
msgid "Web"
|
||||
msgstr "Teia"
|
||||
@@ -1621,6 +1743,10 @@ msgstr "cifrão"
|
||||
msgid "dot"
|
||||
msgstr "ponto"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:244
|
||||
msgid "east {0}"
|
||||
msgstr "leste {0}"
|
||||
|
||||
#: internal/command/descriptions.go:69
|
||||
msgid "enables or disables automatic reading of new text as it appears"
|
||||
msgstr "ativa ou desativa a leitura automática de novo texto como aparece"
|
||||
@@ -1971,6 +2097,10 @@ msgstr "nenhum console de texto"
|
||||
msgid "none"
|
||||
msgstr "nenhum"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:235
|
||||
msgid "north {0}"
|
||||
msgstr "norte {0}"
|
||||
|
||||
#: internal/applicationoverrides/ninjam/ninjam.go:263
|
||||
msgid "not receiving"
|
||||
msgstr "não recebendo"
|
||||
@@ -2170,6 +2300,10 @@ msgstr "sorriso"
|
||||
msgid "some"
|
||||
msgstr "alguns"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:238
|
||||
msgid "south {0}"
|
||||
msgstr "sul {0}"
|
||||
|
||||
#: config/punctuation/default.toml config/punctuation/en.toml
|
||||
#: config/punctuation/rhvoice-en.toml
|
||||
msgid "space"
|
||||
@@ -2286,6 +2420,10 @@ msgstr "sublinhado"
|
||||
msgid "unmuted"
|
||||
msgstr "não silenciado"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:241
|
||||
msgid "west {0}"
|
||||
msgstr "oeste {0}"
|
||||
|
||||
#: internal/presentation/attributes.go internal/presentation/attributes.go:27
|
||||
msgid "white"
|
||||
msgstr "branco"
|
||||
@@ -2298,7 +2436,7 @@ msgstr "piscadela"
|
||||
msgid "{0} added to dictionary"
|
||||
msgstr "{0} adicionado ao dicionário"
|
||||
|
||||
#: internal/app/application_overrides.go:207
|
||||
#: internal/app/application_overrides.go:210
|
||||
msgid "{0} application override selected"
|
||||
msgstr "Configurações do aplicativo {0} selecionadas"
|
||||
|
||||
@@ -2334,6 +2472,10 @@ msgstr "{0} grade. {1}"
|
||||
msgid "{0} is already in dictionary"
|
||||
msgstr "{0} já está no dicionário"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:115
|
||||
msgid "{0} of {1}"
|
||||
msgstr "{0} de {1}"
|
||||
|
||||
#: internal/applicationoverrides/ninjam/ninjam.go:313
|
||||
msgid "{0} percent left"
|
||||
msgstr "{0} por cento à esquerda"
|
||||
@@ -2354,10 +2496,18 @@ msgstr "{0} aba"
|
||||
msgid "{0} {1}"
|
||||
msgstr "{0} {1}"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:246
|
||||
msgid "{0}, {1}"
|
||||
msgstr "{0}, {1}"
|
||||
|
||||
#: internal/interaction/grid.go:39
|
||||
msgid "{0}. row {1}, column {2}. {3} of {4}"
|
||||
msgstr "{0}. linha {1}, coluna {2}. {3} de {4}"
|
||||
|
||||
#: internal/applicationoverrides/override.go:30
|
||||
msgid "{0}: {1}"
|
||||
msgstr "{0}: {1}"
|
||||
|
||||
#: internal/app/tutorial.go:25
|
||||
msgid ""
|
||||
"{command_name}, Shortcuts {command_shortcuts}, Description "
|
||||
|
||||
@@ -57,6 +57,10 @@ msgstr "Все"
|
||||
msgid "All 10 live regions are set"
|
||||
msgstr "Все 10 динамических областей заданы"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:284
|
||||
msgid "Amulet"
|
||||
msgstr "Амулет"
|
||||
|
||||
#: internal/emoji/catalog.go:23
|
||||
msgid "Angry"
|
||||
msgstr "Злость"
|
||||
@@ -65,11 +69,11 @@ msgstr "Злость"
|
||||
msgid "Apple"
|
||||
msgstr "Яблоко"
|
||||
|
||||
#: internal/app/application_overrides.go:325
|
||||
#: internal/app/application_overrides.go:328
|
||||
msgid "Application"
|
||||
msgstr "Приложение"
|
||||
|
||||
#: internal/app/application_overrides.go:324
|
||||
#: internal/app/application_overrides.go:327
|
||||
msgid "Applications"
|
||||
msgstr "Приложения"
|
||||
|
||||
@@ -77,6 +81,11 @@ msgstr "Приложения"
|
||||
msgid "Argentina"
|
||||
msgstr "Аргентина"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:144
|
||||
#: internal/applicationoverrides/rogue/rogue.go:282
|
||||
msgid "Armor"
|
||||
msgstr "Броня"
|
||||
|
||||
#: internal/config/config.go:155
|
||||
msgid "Attribute format"
|
||||
msgstr "Формат атрибутов"
|
||||
@@ -161,7 +170,7 @@ msgstr "Бабочка"
|
||||
msgid "Canada"
|
||||
msgstr "Канада"
|
||||
|
||||
#: internal/app/application_overrides.go:326
|
||||
#: internal/app/application_overrides.go:329
|
||||
#: internal/preferences/settings.go:93
|
||||
msgid "Cancel"
|
||||
msgstr "Отмена"
|
||||
@@ -287,13 +296,13 @@ msgstr "Круто"
|
||||
msgid "Could not check spelling: {0}"
|
||||
msgstr "Не удалось проверить правописание: {0}"
|
||||
|
||||
#: internal/app/application_overrides.go:278
|
||||
#: internal/app/application_overrides.go:83
|
||||
#: internal/app/application_overrides.go:281
|
||||
#: internal/app/application_overrides.go:84
|
||||
msgid "Could not load application settings: {0}"
|
||||
msgstr "Не удалось загрузить настройки приложения: {0}"
|
||||
|
||||
#: internal/app/application_overrides.go:329
|
||||
#: internal/app/application_overrides.go:333
|
||||
#: internal/app/application_overrides.go:332
|
||||
#: internal/app/application_overrides.go:336
|
||||
msgid "Could not open Applications: {0}"
|
||||
msgstr "Не удалось открыть меню приложений: {0}"
|
||||
|
||||
@@ -310,8 +319,8 @@ msgstr "Не удалось открыть меню Fenrir: {0}"
|
||||
msgid "Could not open Spellcheck Menu: {0}"
|
||||
msgstr "Не удалось открыть меню проверки правописания: {0}"
|
||||
|
||||
#: internal/app/application_overrides.go:161
|
||||
#: internal/app/application_overrides.go:296
|
||||
#: internal/app/application_overrides.go:162
|
||||
#: internal/app/application_overrides.go:299
|
||||
msgid "Could not restore application settings: {0}"
|
||||
msgstr "Не удалось восстановить настройки приложения: {0}"
|
||||
|
||||
@@ -340,12 +349,12 @@ msgstr "Кинжал"
|
||||
msgid "Date format"
|
||||
msgstr "Формат даты"
|
||||
|
||||
#: internal/app/application_overrides.go:318
|
||||
#: internal/app/application_overrides.go:321
|
||||
msgid "Default"
|
||||
msgstr "По умолчанию"
|
||||
|
||||
#: internal/app/application_overrides.go:186
|
||||
#: internal/app/application_overrides.go:242
|
||||
#: internal/app/application_overrides.go:187
|
||||
#: internal/app/application_overrides.go:245
|
||||
msgid "Default settings restored"
|
||||
msgstr "Настройки по умолчанию восстановлены"
|
||||
|
||||
@@ -381,10 +390,18 @@ msgstr "Собака"
|
||||
msgid "Donut"
|
||||
msgstr "Пончик"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:264
|
||||
msgid "Door"
|
||||
msgstr "Дверь"
|
||||
|
||||
#: internal/config/config.go:120 internal/config/config.go:127
|
||||
msgid "Driver"
|
||||
msgstr "Драйвер"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:143
|
||||
msgid "Dungeon level"
|
||||
msgstr "Уровень подземелья"
|
||||
|
||||
#: internal/config/config.go:142
|
||||
msgid "Echo on CapsLock"
|
||||
msgstr "Эхо при CapsLock"
|
||||
@@ -435,6 +452,10 @@ msgstr "Закрытие режима просмотра."
|
||||
msgid "Exiting tutorial mode. To enter tutorial mode again press Fenrir+F1"
|
||||
msgstr "Выход из режима обучения. Для повторного входа нажмите Fenrir+F1"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:144
|
||||
msgid "Experience level"
|
||||
msgstr "Уровень опыта"
|
||||
|
||||
#: internal/emoji/catalog.go:30
|
||||
msgid "Exploding head"
|
||||
msgstr "Взрывающаяся голова"
|
||||
@@ -483,11 +504,15 @@ msgstr "Первый буфер обмена. "
|
||||
msgid "Flags"
|
||||
msgstr "Флаги"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:260
|
||||
msgid "Floor"
|
||||
msgstr "Пол"
|
||||
|
||||
#: internal/emoji/catalog.go:105
|
||||
msgid "Folded hands"
|
||||
msgstr "Сложенные ладони"
|
||||
|
||||
#: internal/emoji/catalog.go
|
||||
#: internal/applicationoverrides/rogue/rogue.go:278 internal/emoji/catalog.go
|
||||
msgid "Food"
|
||||
msgstr "Еда"
|
||||
|
||||
@@ -511,6 +536,10 @@ msgstr "Привидение"
|
||||
msgid "Gift"
|
||||
msgstr "Подарок"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:270
|
||||
msgid "Gold"
|
||||
msgstr "Золото"
|
||||
|
||||
#: internal/emoji/catalog.go:127
|
||||
msgid "Greece"
|
||||
msgstr "Греция"
|
||||
@@ -527,6 +556,10 @@ msgstr "Улыбка с каплей пота"
|
||||
msgid "Hamburger"
|
||||
msgstr "Гамбургер"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:71
|
||||
msgid "Health"
|
||||
msgstr "Здоровье"
|
||||
|
||||
#: internal/emoji/catalog.go:106
|
||||
msgid "Heart"
|
||||
msgstr "Сердце"
|
||||
@@ -571,6 +604,10 @@ msgstr "Отступы"
|
||||
msgid "India"
|
||||
msgstr "Индия"
|
||||
|
||||
#: internal/applicationoverrides/override.go:25
|
||||
msgid "Information unavailable"
|
||||
msgstr "Информация недоступна"
|
||||
|
||||
#: internal/applicationoverrides/ninjam/ninjam.go:276
|
||||
msgid "Input {0}"
|
||||
msgstr "Вход {0}"
|
||||
@@ -611,6 +648,10 @@ msgstr "Последний буфер обмена. "
|
||||
msgid "Latest chat message"
|
||||
msgstr "Последнее сообщение чата"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:72
|
||||
msgid "Latest message"
|
||||
msgstr "Последнее сообщение"
|
||||
|
||||
#: internal/emoji/catalog.go:37
|
||||
msgid "Laughing"
|
||||
msgstr "Смех"
|
||||
@@ -643,6 +684,7 @@ msgstr "Динамическая область {0} за пределами эк
|
||||
msgid "Live region {0} set"
|
||||
msgstr "Динамическая область {0} задана"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:62
|
||||
#: internal/reader/regions.go:245
|
||||
msgid "Live region {0}: {1}"
|
||||
msgstr "Динамическая область {0}: {1}"
|
||||
@@ -659,6 +701,10 @@ msgstr "Локальный канал {0}"
|
||||
msgid "Mage"
|
||||
msgstr "Маг"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:276
|
||||
msgid "Magic"
|
||||
msgstr "Магия"
|
||||
|
||||
#: internal/applicationoverrides/ninjam/ninjam.go:237
|
||||
msgid "Master"
|
||||
msgstr "Основной выход"
|
||||
@@ -679,6 +725,10 @@ msgstr "Звук ошибки правописания"
|
||||
msgid "Moon"
|
||||
msgstr "Луна"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:105
|
||||
msgid "More; press Space"
|
||||
msgstr "Далее; нажмите пробел"
|
||||
|
||||
#: internal/command/descriptions.go:35
|
||||
msgid "Move Review to the end of current line and display the content"
|
||||
msgstr ""
|
||||
@@ -730,7 +780,7 @@ msgstr "Тошнота"
|
||||
msgid "Netherlands"
|
||||
msgstr "Нидерланды"
|
||||
|
||||
#: internal/app/application_overrides.go:318
|
||||
#: internal/app/application_overrides.go:321
|
||||
msgid "NetworkManager"
|
||||
msgstr "NetworkManager"
|
||||
|
||||
@@ -738,7 +788,7 @@ msgstr "NetworkManager"
|
||||
msgid "New channel"
|
||||
msgstr "Новый канал"
|
||||
|
||||
#: internal/app/application_overrides.go:318
|
||||
#: internal/app/application_overrides.go:321
|
||||
msgid "Ninjam"
|
||||
msgstr "Ninjam"
|
||||
|
||||
@@ -779,10 +829,18 @@ msgstr "В буфере обмена нет текста или нет дост
|
||||
msgid "No word"
|
||||
msgstr "Нет слова"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:215
|
||||
msgid "None visible"
|
||||
msgstr "Ничего не видно"
|
||||
|
||||
#: internal/emoji/catalog.go:135
|
||||
msgid "Norway"
|
||||
msgstr "Норвегия"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:153
|
||||
msgid "Not hungry"
|
||||
msgstr "Не голоден"
|
||||
|
||||
#: internal/review/follow_cursor.go:26
|
||||
msgid "Not in Review Mode"
|
||||
msgstr "Нет в режиме просмотра."
|
||||
@@ -799,6 +857,10 @@ msgstr "ОК"
|
||||
msgid "One or two marks are needed"
|
||||
msgstr "Необходимы одна или две ментки."
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:262
|
||||
msgid "Passage"
|
||||
msgstr "Проход"
|
||||
|
||||
#: internal/emoji/catalog.go:109
|
||||
msgid "Peace"
|
||||
msgstr "Мир"
|
||||
@@ -839,6 +901,10 @@ msgstr "Какашка"
|
||||
msgid "Portugal"
|
||||
msgstr "Португалия"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:272
|
||||
msgid "Potion"
|
||||
msgstr "Зелье"
|
||||
|
||||
#: internal/command/descriptions.go:52
|
||||
msgid "Present the version of Fenrir currently in use."
|
||||
msgstr "Назвать используемую версию Fenrir."
|
||||
@@ -985,10 +1051,18 @@ msgstr "Повторяющиеся символы"
|
||||
msgid "Repeated symbols minimum length"
|
||||
msgstr "Минимальное число повторяющихся символов"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:286
|
||||
msgid "Ring"
|
||||
msgstr "Кольцо"
|
||||
|
||||
#: internal/emoji/catalog.go:110
|
||||
msgid "Rock on"
|
||||
msgstr "Рокерский жест"
|
||||
|
||||
#: internal/app/application_overrides.go:321
|
||||
msgid "Rogue"
|
||||
msgstr "Rogue"
|
||||
|
||||
#: internal/emoji/catalog.go:41
|
||||
msgid "Rolling laughing"
|
||||
msgstr "Катается от смеха"
|
||||
@@ -1049,6 +1123,10 @@ msgstr "Скрипт не найден"
|
||||
msgid "Script source is not a valid file"
|
||||
msgstr "Исходник скрипта неправильный файл"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:274
|
||||
msgid "Scroll"
|
||||
msgstr "Свиток"
|
||||
|
||||
#: internal/interaction/grid.go:71
|
||||
msgid "Search cleared"
|
||||
msgstr "Поиск очищен"
|
||||
@@ -1081,8 +1159,8 @@ msgstr "Задать динамическую область по одной и
|
||||
msgid "Set window begin and end marks"
|
||||
msgstr "Установка начала и конца окна"
|
||||
|
||||
#: internal/app/application_overrides.go:171
|
||||
#: internal/app/application_overrides.go:315 internal/app/commands.go:84
|
||||
#: internal/app/application_overrides.go:172
|
||||
#: internal/app/application_overrides.go:318 internal/app/commands.go:84
|
||||
msgid "Settings are busy"
|
||||
msgstr "Настройки заняты"
|
||||
|
||||
@@ -1186,6 +1264,10 @@ msgstr "Произносит текущее слово по буквам"
|
||||
msgid "Spider"
|
||||
msgstr "Паук"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:268
|
||||
msgid "Stairs"
|
||||
msgstr "Лестница"
|
||||
|
||||
#: internal/emoji/catalog.go:113
|
||||
msgid "Star"
|
||||
msgstr "Звезда"
|
||||
@@ -1194,10 +1276,18 @@ msgstr "Звезда"
|
||||
msgid "Start Fenrir"
|
||||
msgstr "fenrir запущен"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:71
|
||||
msgid "Status"
|
||||
msgstr "Состояние"
|
||||
|
||||
#: internal/emoji/catalog.go:72
|
||||
msgid "Strawberry"
|
||||
msgstr "Клубника"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:143
|
||||
msgid "Strength"
|
||||
msgstr "Сила"
|
||||
|
||||
#: internal/app/spellcheck_menu.go:45 internal/app/spellcheck_menu.go:47
|
||||
msgid "Suggestions"
|
||||
msgstr "Предложения"
|
||||
@@ -1210,6 +1300,10 @@ msgstr "Солнце"
|
||||
msgid "Sunflower"
|
||||
msgstr "Подсолнух"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:72
|
||||
msgid "Surroundings"
|
||||
msgstr "Окружение"
|
||||
|
||||
#: internal/emoji/catalog.go:142
|
||||
msgid "Sweden"
|
||||
msgstr "Швеция"
|
||||
@@ -1262,6 +1356,10 @@ msgstr "Начало"
|
||||
msgid "Tracking mode"
|
||||
msgstr "Режим отслеживания"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:266
|
||||
msgid "Trap"
|
||||
msgstr "Ловушка"
|
||||
|
||||
#: internal/emoji/catalog.go:60
|
||||
msgid "Tree"
|
||||
msgstr "Дерево"
|
||||
@@ -1303,10 +1401,22 @@ msgstr "Великобритания"
|
||||
msgid "United States"
|
||||
msgstr "Соединённые Штаты"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:256
|
||||
msgid "Unseen"
|
||||
msgstr "Не видно"
|
||||
|
||||
#: internal/emoji/catalog.go:94
|
||||
msgid "Vampire"
|
||||
msgstr "Вампир"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:73
|
||||
msgid "Visible monsters"
|
||||
msgstr "Видимые монстры"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:73
|
||||
msgid "Visible objects and landmarks"
|
||||
msgstr "Видимые предметы и ориентиры"
|
||||
|
||||
#: internal/app/quick_settings.go:191 internal/app/synthesizer_preview.go:60
|
||||
msgid "Voice test failed"
|
||||
msgstr "Не удалось проверить голос"
|
||||
@@ -1328,6 +1438,14 @@ msgstr "Громкость и панорама {0}"
|
||||
msgid "WTF?"
|
||||
msgstr "Какого чёрта?"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:258
|
||||
msgid "Wall"
|
||||
msgstr "Стена"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:288
|
||||
msgid "Wand or staff"
|
||||
msgstr "Волшебная палочка или посох"
|
||||
|
||||
#: internal/app/tutorial.go:24
|
||||
msgid ""
|
||||
"Warning: full keyboard capture is unavailable. Unbound keys may reach the "
|
||||
@@ -1336,6 +1454,10 @@ msgstr ""
|
||||
"Предупреждение: полный захват клавиатуры недоступен. Неназначенные клавиши "
|
||||
"могут передаваться активному приложению."
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:280
|
||||
msgid "Weapon"
|
||||
msgstr "Оружие"
|
||||
|
||||
#: internal/emoji/catalog.go:95
|
||||
msgid "Web"
|
||||
msgstr "Паутина"
|
||||
@@ -1612,6 +1734,10 @@ msgstr "доллар"
|
||||
msgid "dot"
|
||||
msgstr "точка"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:244
|
||||
msgid "east {0}"
|
||||
msgstr "восток {0}"
|
||||
|
||||
#: internal/command/descriptions.go:69
|
||||
msgid "enables or disables automatic reading of new text as it appears"
|
||||
msgstr "включить или отключить чтения нового текста"
|
||||
@@ -1956,6 +2082,10 @@ msgstr "нет текстовой консоли"
|
||||
msgid "none"
|
||||
msgstr "нет"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:235
|
||||
msgid "north {0}"
|
||||
msgstr "север {0}"
|
||||
|
||||
#: internal/applicationoverrides/ninjam/ninjam.go:263
|
||||
msgid "not receiving"
|
||||
msgstr "приём выключен"
|
||||
@@ -2154,6 +2284,10 @@ msgstr "улыбка"
|
||||
msgid "some"
|
||||
msgstr "некоторые"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:238
|
||||
msgid "south {0}"
|
||||
msgstr "юг {0}"
|
||||
|
||||
#: config/punctuation/default.toml config/punctuation/en.toml
|
||||
#: config/punctuation/rhvoice-en.toml
|
||||
msgid "space"
|
||||
@@ -2270,6 +2404,10 @@ msgstr "Подчеркнутый"
|
||||
msgid "unmuted"
|
||||
msgstr "звук включён"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:241
|
||||
msgid "west {0}"
|
||||
msgstr "запад {0}"
|
||||
|
||||
#: internal/presentation/attributes.go internal/presentation/attributes.go:27
|
||||
msgid "white"
|
||||
msgstr "белый"
|
||||
@@ -2282,7 +2420,7 @@ msgstr "подмигивание"
|
||||
msgid "{0} added to dictionary"
|
||||
msgstr "{0} добавлено в словарь"
|
||||
|
||||
#: internal/app/application_overrides.go:207
|
||||
#: internal/app/application_overrides.go:210
|
||||
msgid "{0} application override selected"
|
||||
msgstr "Выбраны настройки приложения {0}"
|
||||
|
||||
@@ -2318,6 +2456,10 @@ msgstr "{0}, сетка. {1}"
|
||||
msgid "{0} is already in dictionary"
|
||||
msgstr "{0} уже находится в словаре"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:115
|
||||
msgid "{0} of {1}"
|
||||
msgstr "{0} из {1}"
|
||||
|
||||
#: internal/applicationoverrides/ninjam/ninjam.go:313
|
||||
msgid "{0} percent left"
|
||||
msgstr "{0} процентов влево"
|
||||
@@ -2338,10 +2480,18 @@ msgstr "{0}, вкладка"
|
||||
msgid "{0} {1}"
|
||||
msgstr "{0} {1}"
|
||||
|
||||
#: internal/applicationoverrides/rogue/rogue.go:246
|
||||
msgid "{0}, {1}"
|
||||
msgstr "{0}, {1}"
|
||||
|
||||
#: internal/interaction/grid.go:39
|
||||
msgid "{0}. row {1}, column {2}. {3} of {4}"
|
||||
msgstr "{0}. строка {1}, столбец {2}. {3} из {4}"
|
||||
|
||||
#: internal/applicationoverrides/override.go:30
|
||||
msgid "{0}: {1}"
|
||||
msgstr "{0}: {1}"
|
||||
|
||||
#: internal/app/tutorial.go:25
|
||||
msgid ""
|
||||
"{command_name}, Shortcuts {command_shortcuts}, Description "
|
||||
|
||||
@@ -0,0 +1,194 @@
|
||||
// Copyright (c) 2026 Storm Dragon
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
//go:build linux && cgo
|
||||
|
||||
package terminal
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"os"
|
||||
"os/exec"
|
||||
"strings"
|
||||
"syscall"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"git.stormux.org/storm/fenrir/internal/applicationoverrides"
|
||||
"git.stormux.org/storm/fenrir/internal/applicationoverrides/rogue"
|
||||
"git.stormux.org/storm/fenrir/internal/command"
|
||||
"git.stormux.org/storm/fenrir/internal/reader"
|
||||
)
|
||||
|
||||
// Opt in with FENRIR_ROGUE_TEST_BINARY=/usr/bin/rogue. Each game has a private
|
||||
// PTY and working/save directory. SEED disables scoring in classic Rogue.
|
||||
// This exercises real ncurses output, without touching the active reader.
|
||||
func TestRogueLiveOverride(t *testing.T) {
|
||||
program := os.Getenv("FENRIR_ROGUE_TEST_BINARY")
|
||||
if program == "" {
|
||||
t.Skip("set FENRIR_ROGUE_TEST_BINARY to a classic Rogue executable")
|
||||
}
|
||||
for _, rows := range []int{24, 32} {
|
||||
for _, style := range []string{"Clear", "Overwrite", "Slow"} {
|
||||
t.Run(fmt.Sprintf("%d/%s", rows, style), func(t *testing.T) {
|
||||
cols := 80
|
||||
if rows > 24 {
|
||||
cols = 100
|
||||
}
|
||||
master, slave, err := open_pty(rows, cols)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
defer syscall.Close(master)
|
||||
slaveFile := os.NewFile(uintptr(slave), "private Rogue PTY")
|
||||
defer slaveFile.Close()
|
||||
child := exec.Command(program)
|
||||
child.Dir = t.TempDir()
|
||||
child.Env = append(os.Environ(), "HOME="+child.Dir, "TERM=xterm-256color", "LANG=C", "LC_ALL=C", "SEED=1234", "ROGUEOPTS=name=FenrirFixture,noterse,inven="+style)
|
||||
child.Stdin, child.Stdout, child.Stderr = slaveFile, slaveFile, slaveFile
|
||||
child.SysProcAttr = &syscall.SysProcAttr{Setsid: true, Setctty: true, Ctty: 0}
|
||||
if err := child.Start(); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
defer func() { _ = child.Process.Kill(); _ = child.Wait() }()
|
||||
if err := syscall.SetNonblock(master, true); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
e, err := new_emulator(rows, cols)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
defer e.close()
|
||||
a, r := &rogue.Adapter{}, reader.New()
|
||||
active := false
|
||||
var frame applicationoverrides.Frame
|
||||
var output []string
|
||||
pump := func() {
|
||||
var buffer [32768]byte
|
||||
for total := 0; total < 131072; {
|
||||
n, err := syscall.Read(master, buffer[:])
|
||||
if n > 0 {
|
||||
total += n
|
||||
e.feed(buffer[:n])
|
||||
}
|
||||
if errors.Is(err, syscall.EAGAIN) || errors.Is(err, syscall.EIO) || n == 0 {
|
||||
break
|
||||
}
|
||||
if err != nil && !errors.Is(err, syscall.EINTR) {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
if active {
|
||||
s := e.snapshot(true, false)
|
||||
frame = a.Observe(s)
|
||||
for _, message := range r.Update_application(s, frame) {
|
||||
if message.Text != "" {
|
||||
output = append(output, message.Text)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
screenText := func() string { return string(e.snapshot(true, false).Cells) }
|
||||
waitFor := func(label string, predicate func() bool) {
|
||||
t.Helper()
|
||||
deadline := time.Now().Add(3 * time.Second)
|
||||
for time.Now().Before(deadline) {
|
||||
pump()
|
||||
if predicate() {
|
||||
return
|
||||
}
|
||||
time.Sleep(10 * time.Millisecond)
|
||||
}
|
||||
t.Fatalf("%s not observed; screen=%q; speech=%q", label, screenText(), output)
|
||||
}
|
||||
send := func(text string) {
|
||||
t.Helper()
|
||||
r.Note_input(true, false, false)
|
||||
if _, err := syscall.Write(master, []byte(text)); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
waitFor("initial game", func() bool { return strings.Contains(screenText(), "Hp:") && strings.Contains(screenText(), "@") })
|
||||
active = true
|
||||
pump()
|
||||
if !frame.Recognized || !frame.OwnsPresentation {
|
||||
t.Fatal("real game not recognized", screenText())
|
||||
}
|
||||
for index, id := range []command.ID{command.ReadLiveRegion1, command.ReadLiveRegion2, command.ReadLiveRegion3, command.ReadLiveRegion4, command.ReadLiveRegion5, command.ReadLiveRegion6} {
|
||||
result, handled := a.Command(id)
|
||||
if !handled || !strings.HasPrefix(result.Text, frame.Regions[index].Name+": ") {
|
||||
t.Fatal("unnamed region", result)
|
||||
}
|
||||
}
|
||||
initialHealth, _ := a.Command(command.ReadLiveRegion1)
|
||||
send("i")
|
||||
if style == "Slow" {
|
||||
waitFor("slow inventory", func() bool { return strings.Contains(e.snapshot(true, false).Text(0), "a)") })
|
||||
// Five initial items; each intervening message waits for Space.
|
||||
for _, letter := range []string{"b)", "c)", "d)", "e)"} {
|
||||
send(" ")
|
||||
waitFor("next inventory item", func() bool { return strings.Contains(e.snapshot(true, false).Text(0), letter) })
|
||||
}
|
||||
} else {
|
||||
waitFor("inventory page", func() bool { return strings.Contains(screenText(), "--Press space to continue--") })
|
||||
if !frame.Recognized || frame.OwnsPresentation {
|
||||
t.Fatal("inventory interpreted as dungeon")
|
||||
}
|
||||
send(" ")
|
||||
waitFor("return from inventory", func() bool {
|
||||
return frame.OwnsPresentation && !strings.Contains(screenText(), "--Press space to continue--")
|
||||
})
|
||||
}
|
||||
send("?")
|
||||
waitFor("help prompt", func() bool { return strings.Contains(e.snapshot(true, false).Text(0), "Character you want help for") })
|
||||
send("*")
|
||||
waitFor("help page", func() bool { return strings.Contains(screenText(), "--Press space to continue--") })
|
||||
if !frame.Recognized || frame.OwnsPresentation {
|
||||
t.Fatal("help not readable")
|
||||
}
|
||||
send(" ")
|
||||
waitFor("return from help", func() bool { return frame.OwnsPresentation })
|
||||
send("o")
|
||||
waitFor("options", func() bool { return strings.Contains(screenText(), `Terse output ("terse"):`) })
|
||||
if !frame.Recognized || frame.OwnsPresentation {
|
||||
t.Fatal("options not readable")
|
||||
}
|
||||
send("\x1b")
|
||||
waitFor("options exit prompt", func() bool { return strings.Contains(screenText(), "--Press space to continue--") })
|
||||
send(" ")
|
||||
waitFor("return from options", func() bool { return frame.OwnsPresentation })
|
||||
start := len(output)
|
||||
send("v")
|
||||
waitFor("version announcement", func() bool { return strings.Contains(strings.Join(output[start:], " "), "Version 5.4") })
|
||||
t.Log(initialHealth.Text, strings.Join(output[start:], " "))
|
||||
// Move onto an empty adjacent floor cell. Keystrokes must not be
|
||||
// echoed as letters, and the moving @ must not read out a map row.
|
||||
s := e.snapshot(true, false)
|
||||
moved := false
|
||||
for _, step := range []struct {
|
||||
dx, dy int
|
||||
key string
|
||||
}{{1, 0, "l"}, {-1, 0, "h"}, {0, 1, "j"}, {0, -1, "k"}} {
|
||||
x, y := s.X+step.dx, s.Y+step.dy
|
||||
if x < 0 || x >= 80 || y < 1 || y > 22 || s.Line(y)[x] != '.' {
|
||||
continue
|
||||
}
|
||||
start = len(output)
|
||||
send(step.key)
|
||||
waitFor("player movement", func() bool { current := e.snapshot(true, false); return current.X == x && current.Y == y })
|
||||
for _, text := range output[start:] {
|
||||
if text == step.key || strings.Contains(text, "@") {
|
||||
t.Fatal("map or key chatter", text)
|
||||
}
|
||||
}
|
||||
moved = true
|
||||
break
|
||||
}
|
||||
if !moved {
|
||||
t.Fatal("fixture has no adjacent empty floor")
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user