@the-inclusionist/engine 6.36.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +661 -0
- package/README.md +107 -0
- package/app/css/style.css +622 -0
- package/app/public/vendor/fonts/andika-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/andika-400.woff2 +0 -0
- package/app/public/vendor/fonts/andika-700-ext.woff2 +0 -0
- package/app/public/vendor/fonts/andika-700.woff2 +0 -0
- package/app/public/vendor/fonts/atkinson-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/atkinson-400.woff2 +0 -0
- package/app/public/vendor/fonts/atkinson-700-ext.woff2 +0 -0
- package/app/public/vendor/fonts/atkinson-700.woff2 +0 -0
- package/app/public/vendor/fonts/atkinson-mono-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/atkinson-mono-400.woff2 +0 -0
- package/app/public/vendor/fonts/comicneue-400.woff2 +0 -0
- package/app/public/vendor/fonts/comicneue-700.woff2 +0 -0
- package/app/public/vendor/fonts/greatvibes-400.woff2 +0 -0
- package/app/public/vendor/fonts/inter-400.woff2 +0 -0
- package/app/public/vendor/fonts/inter-700.woff2 +0 -0
- package/app/public/vendor/fonts/lato-400.woff2 +0 -0
- package/app/public/vendor/fonts/lato-700.woff2 +0 -0
- package/app/public/vendor/fonts/lexend-400-ext.woff2 +0 -0
- package/app/public/vendor/fonts/lexend-400.woff2 +0 -0
- package/app/public/vendor/fonts/lexend-700-ext.woff2 +0 -0
- package/app/public/vendor/fonts/lexend-700.woff2 +0 -0
- package/app/public/vendor/fonts/literata-400.woff2 +0 -0
- package/app/public/vendor/fonts/literata-700.woff2 +0 -0
- package/app/public/vendor/fonts/newsreader-400.woff2 +0 -0
- package/app/public/vendor/fonts/newsreader-700.woff2 +0 -0
- package/app/public/vendor/fonts/opensans-400.woff2 +0 -0
- package/app/public/vendor/fonts/opensans-700.woff2 +0 -0
- package/app/public/vendor/fonts/pinyon-400.woff2 +0 -0
- package/app/public/vendor/fonts/quattro-400.woff2 +0 -0
- package/app/public/vendor/fonts/quattro-700.woff2 +0 -0
- package/app/public/vendor/fonts/sourcesans-400.woff2 +0 -0
- package/app/public/vendor/fonts/sourcesans-700.woff2 +0 -0
- package/app/public/vendor/fonts/sourceserif-400.woff2 +0 -0
- package/app/public/vendor/fonts/sourceserif-700.woff2 +0 -0
- package/app/public/vendor/fonts/ufcook-700.woff2 +0 -0
- package/app/public/vendor/fonts/ufmag-400.woff2 +0 -0
- package/app/public/vendor/fonts.css +88 -0
- package/dist-pkg/boot/create-game.d.ts +159 -0
- package/dist-pkg/boot/create-game.js +266 -0
- package/dist-pkg/core/a11y-sr.d.ts +4 -0
- package/dist-pkg/core/a11y-sr.js +20 -0
- package/dist-pkg/core/actions.d.ts +100 -0
- package/dist-pkg/core/actions.js +149 -0
- package/dist-pkg/core/anel.d.ts +17 -0
- package/dist-pkg/core/anel.js +31 -0
- package/dist-pkg/core/collision.d.ts +21 -0
- package/dist-pkg/core/collision.js +62 -0
- package/dist-pkg/core/constants.d.ts +84 -0
- package/dist-pkg/core/constants.js +64 -0
- package/dist-pkg/core/contract.d.ts +227 -0
- package/dist-pkg/core/contract.js +184 -0
- package/dist-pkg/core/dom-query.d.ts +9 -0
- package/dist-pkg/core/dom-query.js +25 -0
- package/dist-pkg/core/entity.d.ts +150 -0
- package/dist-pkg/core/entity.js +38 -0
- package/dist-pkg/core/escape-html.d.ts +16 -0
- package/dist-pkg/core/escape-html.js +32 -0
- package/dist-pkg/core/i18n.d.ts +71 -0
- package/dist-pkg/core/i18n.js +236 -0
- package/dist-pkg/core/layers.d.ts +39 -0
- package/dist-pkg/core/layers.js +71 -0
- package/dist-pkg/core/letter-grid.d.ts +55 -0
- package/dist-pkg/core/letter-grid.js +116 -0
- package/dist-pkg/core/loop.d.ts +17 -0
- package/dist-pkg/core/loop.js +36 -0
- package/dist-pkg/core/password.d.ts +34 -0
- package/dist-pkg/core/password.js +205 -0
- package/dist-pkg/core/rng.d.ts +20 -0
- package/dist-pkg/core/rng.js +61 -0
- package/dist-pkg/core/rotulo-acessivel.d.ts +17 -0
- package/dist-pkg/core/rotulo-acessivel.js +41 -0
- package/dist-pkg/core/run-state.d.ts +115 -0
- package/dist-pkg/core/run-state.js +40 -0
- package/dist-pkg/core/scenes.d.ts +68 -0
- package/dist-pkg/core/scenes.js +64 -0
- package/dist-pkg/core/screens.d.ts +16 -0
- package/dist-pkg/core/screens.js +28 -0
- package/dist-pkg/core/state.d.ts +138 -0
- package/dist-pkg/core/state.js +290 -0
- package/dist-pkg/core/tiles.d.ts +12 -0
- package/dist-pkg/core/tiles.js +61 -0
- package/dist-pkg/core/world.d.ts +4 -0
- package/dist-pkg/core/world.js +58 -0
- package/dist-pkg/educational/activities-registry.d.ts +47 -0
- package/dist-pkg/educational/activities-registry.js +95 -0
- package/dist-pkg/i18n/en.d.ts +3 -0
- package/dist-pkg/i18n/en.js +560 -0
- package/dist-pkg/i18n/es.d.ts +3 -0
- package/dist-pkg/i18n/es.js +558 -0
- package/dist-pkg/i18n/pt.d.ts +3 -0
- package/dist-pkg/i18n/pt.js +618 -0
- package/dist-pkg/input/default-bindings.d.ts +24 -0
- package/dist-pkg/input/default-bindings.js +122 -0
- package/dist-pkg/input/devices.d.ts +15 -0
- package/dist-pkg/input/devices.js +31 -0
- package/dist-pkg/input/edges.d.ts +58 -0
- package/dist-pkg/input/edges.js +49 -0
- package/dist-pkg/input/gamepad.d.ts +203 -0
- package/dist-pkg/input/gamepad.js +531 -0
- package/dist-pkg/input/keyboard-runtime.d.ts +61 -0
- package/dist-pkg/input/keyboard-runtime.js +83 -0
- package/dist-pkg/input/keyboard.d.ts +45 -0
- package/dist-pkg/input/keyboard.js +80 -0
- package/dist-pkg/input/keydown.d.ts +270 -0
- package/dist-pkg/input/keydown.js +381 -0
- package/dist-pkg/input/latch.d.ts +30 -0
- package/dist-pkg/input/latch.js +63 -0
- package/dist-pkg/input/pointer-space.d.ts +40 -0
- package/dist-pkg/input/pointer-space.js +51 -0
- package/dist-pkg/input/state.d.ts +11 -0
- package/dist-pkg/input/state.js +12 -0
- package/dist-pkg/input/touch-bindings.d.ts +210 -0
- package/dist-pkg/input/touch-bindings.js +365 -0
- package/dist-pkg/input/touch.d.ts +173 -0
- package/dist-pkg/input/touch.js +314 -0
- package/dist-pkg/input/transports.d.ts +90 -0
- package/dist-pkg/input/transports.js +96 -0
- package/dist-pkg/input/vocabulary-migration.d.ts +58 -0
- package/dist-pkg/input/vocabulary-migration.js +125 -0
- package/dist-pkg/platform/audio-ambient.d.ts +27 -0
- package/dist-pkg/platform/audio-ambient.js +89 -0
- package/dist-pkg/platform/audio-earcons.d.ts +24 -0
- package/dist-pkg/platform/audio-earcons.js +62 -0
- package/dist-pkg/platform/audio-jingles.d.ts +17 -0
- package/dist-pkg/platform/audio-jingles.js +54 -0
- package/dist-pkg/platform/audio-mixer.d.ts +14 -0
- package/dist-pkg/platform/audio-mixer.js +62 -0
- package/dist-pkg/platform/audio-nav.d.ts +51 -0
- package/dist-pkg/platform/audio-nav.js +99 -0
- package/dist-pkg/platform/audio-sonar.d.ts +71 -0
- package/dist-pkg/platform/audio-sonar.js +173 -0
- package/dist-pkg/platform/audio.d.ts +32 -0
- package/dist-pkg/platform/audio.js +191 -0
- package/dist-pkg/platform/interruptible-speech.d.ts +19 -0
- package/dist-pkg/platform/interruptible-speech.js +79 -0
- package/dist-pkg/platform/speech.d.ts +2 -0
- package/dist-pkg/platform/speech.js +35 -0
- package/dist-pkg/platform/storage.d.ts +87 -0
- package/dist-pkg/platform/storage.js +148 -0
- package/dist-pkg/platform/tts.d.ts +33 -0
- package/dist-pkg/platform/tts.js +142 -0
- package/dist-pkg/render/camera.d.ts +58 -0
- package/dist-pkg/render/camera.js +105 -0
- package/dist-pkg/render/canvas.d.ts +13 -0
- package/dist-pkg/render/canvas.js +26 -0
- package/dist-pkg/render/cenario-data.d.ts +127 -0
- package/dist-pkg/render/cenario-data.js +145 -0
- package/dist-pkg/render/city-tex.d.ts +63 -0
- package/dist-pkg/render/city-tex.js +228 -0
- package/dist-pkg/render/city-tiles.d.ts +11 -0
- package/dist-pkg/render/city-tiles.js +140 -0
- package/dist-pkg/render/crt.d.ts +19 -0
- package/dist-pkg/render/crt.js +92 -0
- package/dist-pkg/render/cvd-matrices.d.ts +35 -0
- package/dist-pkg/render/cvd-matrices.js +91 -0
- package/dist-pkg/render/draw.d.ts +149 -0
- package/dist-pkg/render/draw.js +221 -0
- package/dist-pkg/render/fx.d.ts +63 -0
- package/dist-pkg/render/fx.js +123 -0
- package/dist-pkg/render/hc-role-data.d.ts +14 -0
- package/dist-pkg/render/hc-role-data.js +24 -0
- package/dist-pkg/render/high-contrast.d.ts +109 -0
- package/dist-pkg/render/high-contrast.js +254 -0
- package/dist-pkg/render/lq-filter.d.ts +37 -0
- package/dist-pkg/render/lq-filter.js +94 -0
- package/dist-pkg/render/minimap.d.ts +11 -0
- package/dist-pkg/render/minimap.js +94 -0
- package/dist-pkg/render/parallax.d.ts +85 -0
- package/dist-pkg/render/parallax.js +158 -0
- package/dist-pkg/render/player-anim.d.ts +71 -0
- package/dist-pkg/render/player-anim.js +152 -0
- package/dist-pkg/render/port.d.ts +143 -0
- package/dist-pkg/render/port.js +29 -0
- package/dist-pkg/render/recycling-tex.d.ts +48 -0
- package/dist-pkg/render/recycling-tex.js +164 -0
- package/dist-pkg/render/scene-city.d.ts +77 -0
- package/dist-pkg/render/scene-city.js +181 -0
- package/dist-pkg/render/scene-parallax.d.ts +72 -0
- package/dist-pkg/render/scene-parallax.js +426 -0
- package/dist-pkg/render/scene-sky.d.ts +126 -0
- package/dist-pkg/render/scene-sky.js +295 -0
- package/dist-pkg/render/screen-pipeline.d.ts +134 -0
- package/dist-pkg/render/screen-pipeline.js +177 -0
- package/dist-pkg/render/set-cenario.d.ts +54 -0
- package/dist-pkg/render/set-cenario.js +103 -0
- package/dist-pkg/render/sprite-fx.d.ts +3 -0
- package/dist-pkg/render/sprite-fx.js +40 -0
- package/dist-pkg/render/textures.d.ts +75 -0
- package/dist-pkg/render/textures.js +240 -0
- package/dist-pkg/render/title-scene.d.ts +46 -0
- package/dist-pkg/render/title-scene.js +75 -0
- package/dist-pkg/render/viewports.d.ts +52 -0
- package/dist-pkg/render/viewports.js +185 -0
- package/dist-pkg/render/viz-axes.d.ts +98 -0
- package/dist-pkg/render/viz-axes.js +184 -0
- package/dist-pkg/render/viz-modes.d.ts +61 -0
- package/dist-pkg/render/viz-modes.js +74 -0
- package/dist-pkg/render/viz-setters.d.ts +130 -0
- package/dist-pkg/render/viz-setters.js +244 -0
- package/dist-pkg/render/weather.d.ts +96 -0
- package/dist-pkg/render/weather.js +171 -0
- package/dist-pkg/render/wheelchair-sprites.d.ts +24 -0
- package/dist-pkg/render/wheelchair-sprites.js +63 -0
- package/dist-pkg/render/world-tex.d.ts +18 -0
- package/dist-pkg/render/world-tex.js +87 -0
- package/dist-pkg/ui/activities-menu.d.ts +258 -0
- package/dist-pkg/ui/activities-menu.js +648 -0
- package/dist-pkg/ui/caa-sets.d.ts +39 -0
- package/dist-pkg/ui/caa-sets.js +65 -0
- package/dist-pkg/ui/changed-mark.d.ts +15 -0
- package/dist-pkg/ui/changed-mark.js +96 -0
- package/dist-pkg/ui/debug-panel.d.ts +67 -0
- package/dist-pkg/ui/debug-panel.js +173 -0
- package/dist-pkg/ui/dom.d.ts +24 -0
- package/dist-pkg/ui/dom.js +47 -0
- package/dist-pkg/ui/focus-trap.d.ts +71 -0
- package/dist-pkg/ui/focus-trap.js +99 -0
- package/dist-pkg/ui/fonts.d.ts +41 -0
- package/dist-pkg/ui/fonts.js +59 -0
- package/dist-pkg/ui/hud.d.ts +137 -0
- package/dist-pkg/ui/hud.js +229 -0
- package/dist-pkg/ui/item-announcement.d.ts +19 -0
- package/dist-pkg/ui/item-announcement.js +36 -0
- package/dist-pkg/ui/layout.d.ts +6 -0
- package/dist-pkg/ui/layout.js +54 -0
- package/dist-pkg/ui/loop-crash.d.ts +19 -0
- package/dist-pkg/ui/loop-crash.js +60 -0
- package/dist-pkg/ui/map-hub.d.ts +56 -0
- package/dist-pkg/ui/map-hub.js +138 -0
- package/dist-pkg/ui/menu-nav.d.ts +141 -0
- package/dist-pkg/ui/menu-nav.js +390 -0
- package/dist-pkg/ui/pause-icons.d.ts +327 -0
- package/dist-pkg/ui/pause-icons.js +620 -0
- package/dist-pkg/ui/reach-notice.d.ts +34 -0
- package/dist-pkg/ui/reach-notice.js +71 -0
- package/dist-pkg/ui/settings-audio.d.ts +139 -0
- package/dist-pkg/ui/settings-audio.js +544 -0
- package/dist-pkg/ui/settings-caa.d.ts +45 -0
- package/dist-pkg/ui/settings-caa.js +137 -0
- package/dist-pkg/ui/settings-controls.d.ts +100 -0
- package/dist-pkg/ui/settings-controls.js +152 -0
- package/dist-pkg/ui/settings-empathy.d.ts +62 -0
- package/dist-pkg/ui/settings-empathy.js +137 -0
- package/dist-pkg/ui/settings-motion.d.ts +95 -0
- package/dist-pkg/ui/settings-motion.js +282 -0
- package/dist-pkg/ui/settings-motor.d.ts +77 -0
- package/dist-pkg/ui/settings-motor.js +215 -0
- package/dist-pkg/ui/settings-panel.d.ts +76 -0
- package/dist-pkg/ui/settings-panel.js +187 -0
- package/dist-pkg/ui/settings-typo.d.ts +74 -0
- package/dist-pkg/ui/settings-typo.js +150 -0
- package/dist-pkg/ui/settings-visual.d.ts +111 -0
- package/dist-pkg/ui/settings-visual.js +252 -0
- package/dist-pkg/ui/shell.d.ts +239 -0
- package/dist-pkg/ui/shell.js +430 -0
- package/dist-pkg/ui/title.d.ts +36 -0
- package/dist-pkg/ui/title.js +60 -0
- package/dist-pkg/ui/vlibras.d.ts +11 -0
- package/dist-pkg/ui/vlibras.js +87 -0
- package/dist-pkg/ui/webcam.d.ts +7 -0
- package/dist-pkg/ui/webcam.js +88 -0
- package/docs/CREDITS.md +64 -0
- package/docs/LICENSES.md +132 -0
- package/package.json +115 -0
|
@@ -0,0 +1,560 @@
|
|
|
1
|
+
// SPDX-License-Identifier: AGPL-3.0-or-later
|
|
2
|
+
// Locale en — SEED (só as chaves-piloto; completar UI+Matemática+Lúdico na Etapa 4). Ver docs/plano-i18n.md.
|
|
3
|
+
// Parcial de propósito: as chaves ausentes caem no fallback pt (core/i18n).
|
|
4
|
+
const en = {
|
|
5
|
+
// ===================== SCREEN-READER ANNOUNCEMENTS (`sr.*`) =====================
|
|
6
|
+
// THE FRAME TRANSLATES; THE CONTENT DOES NOT. Anything arriving through `{param}` passes through untranslated —
|
|
7
|
+
// player name, screen count, and above all CURRICULUM CONTENT (word, syllable, letter, braille cell). The literacy
|
|
8
|
+
// curriculum is language-specific: spelling, grapheme-phoneme mapping and Ferreiro's psychogenesis are not
|
|
9
|
+
// translated, they are rewritten per language (ADR-0010, pillar 3). A new key embedding curriculum is a bug.
|
|
10
|
+
'sr.pad.mapSaved': 'Mapping saved for: {id}.',
|
|
11
|
+
'sr.pad.assigned': 'Controller assigned to Player {n}. The keyboard still works.',
|
|
12
|
+
'sr.title.waitP1': 'Wait for Player 1 to choose the game.',
|
|
13
|
+
'sr.player.entered': 'Player {n} joined!',
|
|
14
|
+
// Recycling (ADR-0049 §1). The four colours are curricular content (CONAMA 275/2001 — the Brazilian street
|
|
15
|
+
// standard), so the announcement NAMES the colour instead of just saying right or wrong.
|
|
16
|
+
'sr.lixo.pegou': 'You picked up: {o}.',
|
|
17
|
+
'sr.lixo.soltou': 'You put down: {o}.',
|
|
18
|
+
'sr.lixo.acertou': 'Right! {o} goes in the {cor} bin. One point.',
|
|
19
|
+
'sr.lixo.errou': 'That is not the bin for {o}. Try another colour.',
|
|
20
|
+
'sr.lixo.solta': 'No littering here. You dropped it by the sign.',
|
|
21
|
+
'sr.lixo.barreira': 'The sign will not let the litter through.',
|
|
22
|
+
'lixo.obj.papel': 'cardboard box',
|
|
23
|
+
'lixo.obj.plastico': 'PET bottle',
|
|
24
|
+
'lixo.obj.metal': 'aluminium can',
|
|
25
|
+
'lixo.obj.vidro': 'glass jar',
|
|
26
|
+
'lixo.cor.azul': 'blue',
|
|
27
|
+
'lixo.cor.vermelha': 'red',
|
|
28
|
+
'lixo.cor.amarela': 'yellow',
|
|
29
|
+
'lixo.cor.verde': 'green',
|
|
30
|
+
'sr.print.on': 'Print mode: see the screen without menus. Press any button to go back.',
|
|
31
|
+
'sr.player.pressToJoin': 'Player {n}: press a button to join.',
|
|
32
|
+
'sr.libras.loading': 'The sign-language interpreter is still loading — try again in a moment.',
|
|
33
|
+
'sr.eyes.loadFailed': 'WebGazer did not load.',
|
|
34
|
+
'sr.eyes.calibrate': 'Play with your eyes: look around the screen and click a few spots to calibrate. Looking left and right walks; looking up jumps.',
|
|
35
|
+
'sr.eyes.needsInternet': 'WebGazer could not be loaded (it needs the internet the first time).',
|
|
36
|
+
'sr.typo.font': 'Typeface: {fam}.',
|
|
37
|
+
'sr.visual.contrast': 'High contrast: {v}.',
|
|
38
|
+
'sr.visual.lq': 'Contrast boost: {v}.',
|
|
39
|
+
'sr.gate.open': 'Gate open!',
|
|
40
|
+
'sr.key.taken': '{who}picked up the key. Touch the gate to open it.',
|
|
41
|
+
'sr.key.returned': 'The key went back to where it started.',
|
|
42
|
+
'sr.power.swapHint': '{msg} (Swap power cycles through the ones you have.)',
|
|
43
|
+
'sr.round.multi': '{n} players, one per screen. Race for the coins.',
|
|
44
|
+
'sr.round.somasub': 'Add-and-Subtract mode. Touch the shapes and solve the sums.',
|
|
45
|
+
'sr.round.silabas': 'Syllables mode. Touch the letters and build the words.',
|
|
46
|
+
'sr.round.ludico': 'New round. Collect 10 coins.',
|
|
47
|
+
'sr.screens.mobileOnly': 'On a phone the game runs on a single screen.',
|
|
48
|
+
'sr.screens.alreadyN': '{n} screens already active.',
|
|
49
|
+
'sr.screens.already1': 'One screen.',
|
|
50
|
+
'sr.screens.wontFitN': '{n} screens do not fit in this window — each screen needs at least 640 by 360. Make the window bigger or go full screen.',
|
|
51
|
+
'sr.screens.wontFitOneMore': 'One more screen does not fit in this window — each screen needs at least 640 by 360. Make the window bigger or go full screen.',
|
|
52
|
+
'sr.screens.activeN': '{n} screens active.',
|
|
53
|
+
'sr.screens.newRoundN': '{n} screens active — new round.',
|
|
54
|
+
'sr.screens.newRound1': 'One screen — new round.',
|
|
55
|
+
'sr.screens.maxPlayers': 'There are already 4 players.',
|
|
56
|
+
'sr.player.restarted': 'Player {n} started over on this screen.',
|
|
57
|
+
'sr.player.joined': 'Player {n} joined the game in progress.',
|
|
58
|
+
'sr.player.quit': 'Player {n} left the game.',
|
|
59
|
+
// HUD objective (DOM text; same decision tree as the round announcement)
|
|
60
|
+
'hud.objective.multi': '{n} players — race for the {alvo} coins',
|
|
61
|
+
'hud.objective.somasub': 'Solve 10 sums',
|
|
62
|
+
'hud.objective.silabas': 'Build 10 words',
|
|
63
|
+
'hud.objective.ludico': 'Collect 10 coins',
|
|
64
|
+
'hud.contador': '{have} of {need} {nome}',
|
|
65
|
+
'hud.nome.moedas': 'coins',
|
|
66
|
+
'hud.nome.moeda': 'coin',
|
|
67
|
+
'pause.nivel': '📚 Level {n} · {nome}',
|
|
68
|
+
'sfx.jump': '🔊 Jump',
|
|
69
|
+
'sfx.coin': '🔊 Collected',
|
|
70
|
+
'sfx.hurt': '🔊 Ouch! Hurt',
|
|
71
|
+
'sfx.win': '🔊 You win!',
|
|
72
|
+
'sfx.correct': '🔊 Correct!',
|
|
73
|
+
'sfx.wrong': '🔊 Try again',
|
|
74
|
+
'sfx.power': '🔊 Power-up!',
|
|
75
|
+
'sfx.key': '🔊 Key',
|
|
76
|
+
'sfx.gate': '🔊 Gate opened',
|
|
77
|
+
'skip.toGame': 'Skip to the game',
|
|
78
|
+
'menu.ludico': 'Free Play',
|
|
79
|
+
'menu.alfabetizacao': 'Literacy',
|
|
80
|
+
'menu.matematica': 'Math',
|
|
81
|
+
// Touch controls — the 9 slot labels, the 9 mappable actions (#touchcfg panel) and the announcements.
|
|
82
|
+
'touch.slot.up': 'D-pad ↑ (up)',
|
|
83
|
+
'touch.slot.down': 'D-pad ↓ (down)',
|
|
84
|
+
'touch.slot.left': 'D-pad ← (left)',
|
|
85
|
+
'touch.slot.right': 'D-pad → (right)',
|
|
86
|
+
'touch.slot.start': 'START (enter)',
|
|
87
|
+
'touch.slot.b0': 'Button 0 (bottom)',
|
|
88
|
+
'touch.slot.b1': 'Button 1 (right)',
|
|
89
|
+
'touch.slot.b2': 'Button 2 (left)',
|
|
90
|
+
'touch.slot.b3': 'Button 3 (top)',
|
|
91
|
+
'touch.slot.fallback': 'Button',
|
|
92
|
+
'touch.act.left': 'Walk left',
|
|
93
|
+
'touch.act.right': 'Walk right',
|
|
94
|
+
'touch.act.up': 'Climb up / ladder',
|
|
95
|
+
'touch.act.down': 'Climb down / ladder',
|
|
96
|
+
'touch.act.jump': 'Jump',
|
|
97
|
+
'touch.act.run': 'Run / interact',
|
|
98
|
+
'touch.act.especial': 'Special',
|
|
99
|
+
'touch.act.swap': 'Swap power',
|
|
100
|
+
'touch.act.pause': 'Pause (START)',
|
|
101
|
+
'touch.dir.cross': 'cross (D-pad)',
|
|
102
|
+
'touch.dir.stick': 'analogue stick',
|
|
103
|
+
'sr.touch.slotSet': '{slot}: {acao}.',
|
|
104
|
+
'sr.touch.dirSet': 'Directional: {tipo}.',
|
|
105
|
+
'sr.touch.presetChild': 'Controls sized for a child hand (6 to 12 years).',
|
|
106
|
+
'sr.touch.presetAdult': 'Controls sized for an adult hand.',
|
|
107
|
+
// Remappable actions (controls panel + Help screen) and the key-capture flow announcements.
|
|
108
|
+
'act.left': 'Left',
|
|
109
|
+
'act.right': 'Right',
|
|
110
|
+
'act.up': 'Climb up / ladder',
|
|
111
|
+
'act.down': 'Climb down / ladder',
|
|
112
|
+
'act.run': 'Run / interact',
|
|
113
|
+
'act.jump': 'Jump',
|
|
114
|
+
'act.swap': 'Swap power',
|
|
115
|
+
'act.especial': 'Special',
|
|
116
|
+
'key.space': 'Space',
|
|
117
|
+
'ctrl.change': 'Change',
|
|
118
|
+
'ctrl.changeKeyAria': 'Change the {acao} key for Player {n}',
|
|
119
|
+
'sr.ctrl.pressNewKey': 'Press the new key for {acao}, Player {n}, or Esc to cancel.',
|
|
120
|
+
'sr.ctrl.keyTaken': 'That key already belongs to Player {n}. Pick another, or Esc to cancel.',
|
|
121
|
+
'sr.ctrl.reset': 'Controls restored to their defaults.',
|
|
122
|
+
// Audio panel (#audio) — per-player outputs, sound/narration, cane, speech engines.
|
|
123
|
+
'audio.playerN': 'Player {n}',
|
|
124
|
+
'audio.sinkShared': 'Default (shared)',
|
|
125
|
+
'audio.sinkFallback': 'Output {n}',
|
|
126
|
+
'audio.sinksHint': 'Click Detect (it asks for audio permission to list the devices).',
|
|
127
|
+
'audio.sinksUnsupported': 'This browser cannot switch audio output (e.g. Safari/iOS).',
|
|
128
|
+
'audio.voiceSample': 'Hello! This is the Inclusionist narration voice. One, two, three, testing.',
|
|
129
|
+
'tts.engine.webspeech': 'Browser voice (Web Speech)',
|
|
130
|
+
'tts.engine.piper': 'Piper (neural, offline) — downloads on first use',
|
|
131
|
+
'tts.engine.kokoro': 'Kokoro-82M (neural) — downloads on first use',
|
|
132
|
+
'tts.engine.kitten': 'Kitten (neural) — downloads on first use',
|
|
133
|
+
'tts.engine.espeak': 'eSpeak NG (built in)',
|
|
134
|
+
'sr.audio.sinkChanged': 'Player {n} — audio output changed.',
|
|
135
|
+
'sr.audio.sinkDefault': 'Player {n} — default audio output.',
|
|
136
|
+
'sr.audio.soundOn': 'Sound on.',
|
|
137
|
+
'sr.audio.soundOff': 'Sound off.',
|
|
138
|
+
'sr.audio.ttsOn': 'Narration on.',
|
|
139
|
+
'sr.audio.ttsOff': 'Narration off.',
|
|
140
|
+
'sr.audio.ttsOnSpoken': 'Voice narration is on.',
|
|
141
|
+
'sr.audio.canePerBlock': 'Cane: one tap per block you step on.',
|
|
142
|
+
'sr.audio.caneHalfBlock': 'Cane: one tap every half block you step on.',
|
|
143
|
+
'sr.audio.engineSet': 'Speech engine: {motor}.',
|
|
144
|
+
'sr.audio.voicePicked': 'Voice selected.',
|
|
145
|
+
'sr.audio.testingVoice': 'Testing the selected voice.',
|
|
146
|
+
// Accessibility icon bar (pause menu and splash) + the levels it cycles through.
|
|
147
|
+
'icon.blind': 'Blind mode (audio navigation)',
|
|
148
|
+
'icon.tts': 'Voice narration (TTS)',
|
|
149
|
+
'icon.libras': 'Deaf mode (Brazilian Sign Language)',
|
|
150
|
+
'icon.tea': 'Autism mode (calm / silent)',
|
|
151
|
+
'icon.altmove': 'Toggle keys',
|
|
152
|
+
'icon.contrast': 'High contrast',
|
|
153
|
+
'icon.cvd': 'Colour-blindness correction (protan/deutan/tritan)',
|
|
154
|
+
'icon.face': 'Webcam — face',
|
|
155
|
+
'icon.eyes': 'Webcam — eyes',
|
|
156
|
+
'icon.voice': 'Voice command',
|
|
157
|
+
'icon.state': '{nome}: {v}',
|
|
158
|
+
'icon.soon': '{nome} (under construction)',
|
|
159
|
+
'state.on': 'on',
|
|
160
|
+
'state.off': 'off',
|
|
161
|
+
'calm.off': 'off',
|
|
162
|
+
'calm.quiet': 'calm',
|
|
163
|
+
'calm.silent': 'silent',
|
|
164
|
+
'cvd.off': 'off',
|
|
165
|
+
'cvd.tricro': 'trichromatic vision',
|
|
166
|
+
'cvd.protan': 'protanopia',
|
|
167
|
+
'cvd.deuter': 'deuteranopia',
|
|
168
|
+
'cvd.tritan': 'tritanopia',
|
|
169
|
+
'contrast.off': 'off',
|
|
170
|
+
'contrast.3': '3:1',
|
|
171
|
+
'contrast.45': '4.5:1',
|
|
172
|
+
'contrast.7': '7:1',
|
|
173
|
+
'lq.off': 'off',
|
|
174
|
+
'lq.linear': 'linear',
|
|
175
|
+
'lq.mixed': 'mixed',
|
|
176
|
+
'lq.quadratic': 'quadratic',
|
|
177
|
+
'sr.icon.blindOn': 'Blind mode on.',
|
|
178
|
+
'sr.icon.blindOff': 'Blind mode off.',
|
|
179
|
+
'sr.icon.librasOn': 'Deaf mode: sign language on.',
|
|
180
|
+
'sr.icon.librasOff': 'Deaf mode: sign language off.',
|
|
181
|
+
'sr.icon.tea': 'Autism mode: {v}.',
|
|
182
|
+
'sr.icon.cvd': 'Colour-blindness correction: {v}.',
|
|
183
|
+
'sr.icon.underConstruction': '{nome}: under construction — arrives with the webcam/speech subsystems and the colour-blindness filter.',
|
|
184
|
+
'sr.icon.needsPrivateOutput': 'Sound, TTS and blind mode can only be changed with an audio output that is YOURS alone (not shared). Pick your own device in hearing accessibility.',
|
|
185
|
+
'icon.tea.short': 'Autism mode',
|
|
186
|
+
'icon.cvd.short': 'Colour-blindness correction',
|
|
187
|
+
'pause.iconBarAria': 'Accessibility shortcuts',
|
|
188
|
+
// Activities menu (splash) — activity, scenario, player count and fraction notations.
|
|
189
|
+
'fnot.v': 'Stacked fraction',
|
|
190
|
+
'fnot.d': 'Slanted fraction',
|
|
191
|
+
'fnot.dec': 'Decimal',
|
|
192
|
+
'fnot.pct': 'Percentage',
|
|
193
|
+
'fnot.mix': 'Mixed number',
|
|
194
|
+
'menu.playerCountAria': 'Number of players: {n}. Click on the left for fewer, on the right for more.',
|
|
195
|
+
'sr.menu.pickScenario': 'Choose the scenery.',
|
|
196
|
+
'sr.menu.gameStarted': '{atividade}. Game started.',
|
|
197
|
+
'sr.menu.pickNumbers': '{atividade}: choose the numbers.',
|
|
198
|
+
'sr.menu.player1': '{n} player.',
|
|
199
|
+
'sr.menu.playersN': '{n} players.',
|
|
200
|
+
'sr.menu.index': '{n} of {m}',
|
|
201
|
+
'sr.menu.indexOn': 'List position on.',
|
|
202
|
+
'sr.menu.indexOff': 'List position off.',
|
|
203
|
+
'sr.a11y.barEnter': 'Accessibility bar. Use the directions to choose and confirm to switch. To go back to the game, press back or START.',
|
|
204
|
+
'sr.a11y.barExit': 'Back to the game.',
|
|
205
|
+
'pad.glyph.cross': 'cross',
|
|
206
|
+
'pad.glyph.circle': 'circle',
|
|
207
|
+
'pad.glyph.square': 'square',
|
|
208
|
+
'pad.glyph.triangle': 'triangle',
|
|
209
|
+
'menu.legendSpoken': 'Button {sim} to select, button {nao} to go back.',
|
|
210
|
+
'sr.menu.fractionsIntro': 'Adding and subtracting fractions: choose the notation and the type.',
|
|
211
|
+
'sr.menu.keepOneNotation': 'Keep at least one notation on.',
|
|
212
|
+
'sr.menu.notationOn': '{notacao} on.',
|
|
213
|
+
'sr.menu.notationOff': '{notacao} off.',
|
|
214
|
+
'sr.menu.pickOneNumber': 'Choose at least one number to practise.',
|
|
215
|
+
'sr.menu.numberOn': 'Number {n} on.',
|
|
216
|
+
'sr.menu.numberOff': 'Number {n} off.',
|
|
217
|
+
'fnot.desc.v': 'Shows fractions stacked, one number above the other.',
|
|
218
|
+
'fnot.desc.d': 'Shows fractions on one line, with a slash.',
|
|
219
|
+
'fnot.desc.dec': 'Shows numbers that always carry one decimal place.',
|
|
220
|
+
'fnot.desc.pct': 'Shows percentages.',
|
|
221
|
+
'fnot.desc.mix': 'Shows whole numbers together with reduced fractions.',
|
|
222
|
+
'menu.notationGroupAria': 'Notation',
|
|
223
|
+
// Physics (lava, spider cling), audio navigation and the attract-mode demo.
|
|
224
|
+
'sr.physics.lava': 'Careful! You touched the lava. The coins moved back to random places.',
|
|
225
|
+
'sr.physics.spiderOn': 'Spider mode! You crawl on walls and ceilings and round corners. {botao} lets go.',
|
|
226
|
+
'sr.physics.spiderOff': 'Let go of the surface.',
|
|
227
|
+
'sr.nav.noTargetNear': 'Nothing nearby.',
|
|
228
|
+
// The loop stopped because a frame threw (ADR-0054). A blind child does not see a frozen screen:
|
|
229
|
+
// without this sentence, "crashed" and "thinking" are the same silence.
|
|
230
|
+
'sr.laco.parou': 'The game stopped because of an error. Reload the page to play again.',
|
|
231
|
+
// ===== THE REACH NOTICE (issue #112, ADR-0079 section 3) =====
|
|
232
|
+
'reach.titulo': 'This game uses {pedidas} actions.',
|
|
233
|
+
'reach.curto': 'The {transporte} has {lugares} places - not enough for all of them.',
|
|
234
|
+
'reach.ligue': 'Connect {saida} and you can use them all.',
|
|
235
|
+
'reach.semSaida': 'No control on this device reaches all of them. You can still play, but some actions will have nowhere to go.',
|
|
236
|
+
'reach.continuar': 'Play anyway',
|
|
237
|
+
'reach.ou': ' or ',
|
|
238
|
+
'reach.nome.gamepad': 'gamepad',
|
|
239
|
+
'reach.nome.teclado': 'keyboard',
|
|
240
|
+
'reach.nome.toque': 'on-screen control',
|
|
241
|
+
'sr.attract.demo': 'Demo.',
|
|
242
|
+
'sr.attract.recorded': '30-second demo recorded for {cenario}.',
|
|
243
|
+
// Title submenu chrome and the scenery names.
|
|
244
|
+
'menu.back': 'Back',
|
|
245
|
+
'menu.play': 'Play',
|
|
246
|
+
'menu.alf': 'Literacy',
|
|
247
|
+
'menu.mat': 'Maths',
|
|
248
|
+
'menu.frac': 'Fractions',
|
|
249
|
+
'menu.fracTitle': 'Adding and subtracting fractions',
|
|
250
|
+
'menu.tab': 'Times tables',
|
|
251
|
+
'menu.tabHint': 'Choose the numbers to practise',
|
|
252
|
+
'menu.cen': 'Scenery',
|
|
253
|
+
'cen.cidade': 'City',
|
|
254
|
+
'cen.campo': 'Day in the Fields',
|
|
255
|
+
'cen.cemiterio': 'Daybreak in the Fields',
|
|
256
|
+
'cen.espaco': 'Night in the Fields',
|
|
257
|
+
'cen.floresta': 'Forest',
|
|
258
|
+
// Voice narration (TTS).
|
|
259
|
+
'audio.noSystemVoices': '(no system voices)',
|
|
260
|
+
'sr.tts.engineNoLanguage': 'This engine does not speak this language yet — for now, use Piper (neural) or the browser voice.',
|
|
261
|
+
'sr.tts.noNeuralForLanguage': 'There is no neural voice for this language yet — carrying on with the browser voice, which speaks it.',
|
|
262
|
+
'sr.tts.downloading': 'Downloading the neural voice (needs the internet on the first use only)…',
|
|
263
|
+
'sr.tts.progress': 'Neural voice: {pct}%.',
|
|
264
|
+
'sr.tts.ready': 'Neural voice ready, in {s} seconds.',
|
|
265
|
+
'sr.tts.loadFailed': 'The neural voice could not be loaded (it needs the internet on the first use) — carrying on with the browser voice.',
|
|
266
|
+
// Quiz — the FRAME only; the literacy curriculum itself stays in pt-BR by decision.
|
|
267
|
+
'sr.quiz.tryAgain': 'Try again.',
|
|
268
|
+
'sr.quiz.erase': 'erase',
|
|
269
|
+
'sr.quiz.ok': 'ok',
|
|
270
|
+
'sr.blind.on': 'Blind mode on: cane and audio cues active. The first power item becomes the running cane.',
|
|
271
|
+
'sr.blind.off': 'Blind mode off.',
|
|
272
|
+
'sr.motor.oneButtonOn': 'One button at a time on: only one key or button at once.',
|
|
273
|
+
'sr.motor.oneButtonOff': 'One button at a time off.',
|
|
274
|
+
'sr.motor.wheelchairOn': 'Wheelchair mode on: no jumping; ramps and lifts instead of steps and ladders; coins on the ground; flight and super-run only.',
|
|
275
|
+
'sr.motor.wheelchairOff': 'Wheelchair mode off.',
|
|
276
|
+
'sr.visual.ownerColorsOn': 'Items coloured by owner: on.',
|
|
277
|
+
'sr.visual.ownerColorsOff': 'Items coloured by owner: off — everything in its original colour.',
|
|
278
|
+
'sr.visual.cbSafeOn': 'Colour-blind safe palette on (Okabe-Ito).',
|
|
279
|
+
'sr.visual.cbSafeOff': 'Colour-blind safe palette off.',
|
|
280
|
+
'sr.visual.outlineFg': 'Foreground outline: {v}.',
|
|
281
|
+
'sr.visual.outlineBg': 'Background outline: {v}.',
|
|
282
|
+
'outline.none': 'none',
|
|
283
|
+
'outline.thin': 'thin',
|
|
284
|
+
'outline.thick': 'thick',
|
|
285
|
+
'sr.captions.on': 'Captions on.',
|
|
286
|
+
'sr.captions.off': 'Captions off.',
|
|
287
|
+
// Quiz — MATHS: the whole prompt translates, operators included (2+3 is language-independent).
|
|
288
|
+
'math.howManyDots': 'How many dots?',
|
|
289
|
+
'math.op.plus': 'plus',
|
|
290
|
+
'math.op.minus': 'minus',
|
|
291
|
+
'math.op.times': 'times',
|
|
292
|
+
'math.op.dividedBy': 'divided by',
|
|
293
|
+
'sr.math.howManyDots': 'How many dots do you see?',
|
|
294
|
+
'sr.math.howMuchIs': 'What is {a} {op} {b}?',
|
|
295
|
+
// Quiz — LITERACY: the FRAME translates; the word, the letter and the Braille cell travel through as
|
|
296
|
+
// parameters, in pt-BR, because they are the subject matter of a language discipline.
|
|
297
|
+
'sr.quiz.who': 'Player {n}: ',
|
|
298
|
+
'sr.quiz.wins': '{n} of 3 correct towards the coin',
|
|
299
|
+
'sr.quiz.buildWord': 'Letter {letra}. Build the word: {palavra}.',
|
|
300
|
+
'sr.quiz.whichSpelling': '{palavra}. Which spelling is right? The game spells out each option.',
|
|
301
|
+
'sr.quiz.writeWord': 'Write the word: {palavra}. {n} letters.',
|
|
302
|
+
'sr.quiz.brailleDictation': '{palavra}. {celas} Jump to collect.',
|
|
303
|
+
'sr.quiz.wellDone': 'Well done! {palavra}. {n} out of 3.',
|
|
304
|
+
'sr.quiz.correctSoFar': 'Correct! {n} out of 3 to win the coin.',
|
|
305
|
+
'menu.restoreDefaults': 'Restore this menu to its defaults',
|
|
306
|
+
'sr.audio.reset': 'Hearing accessibility restored to its defaults. The other menus did not change.',
|
|
307
|
+
'sr.empathy.reset': 'Empathy mode restored to its defaults: simulations off. Colour-blindness corrections and the other menus did not change.',
|
|
308
|
+
'sr.motor.reset': 'Easy Mode and latched movement restored to their defaults. Eye control and the key mapping are unchanged.',
|
|
309
|
+
'sr.typo.reset': 'Typography restored to its default: {fam}, designed for low vision.',
|
|
310
|
+
'a11y.changed': 'changed',
|
|
311
|
+
'sr.visual.reset': 'Visual accessibility restored to its defaults: contrast, enhancement, colours and outlines. Captions and the other menus did not change.',
|
|
312
|
+
'sr.motion.reset': 'Visual sensitivity restored to its defaults: animations and CRT look. Animations go back to what your system asks for.',
|
|
313
|
+
'caa.emPreparo': 'in preparation',
|
|
314
|
+
'caa.aguardandoNegociacao': 'awaiting negotiation',
|
|
315
|
+
'caa.secao.agora': 'Available now',
|
|
316
|
+
'caa.secao.agoraTag': 'works with no network',
|
|
317
|
+
'caa.secao.preparo': 'In preparation',
|
|
318
|
+
'caa.secao.preparoTag': 'licence settled; the work is ours',
|
|
319
|
+
'caa.secao.negociacao': 'Awaiting negotiation',
|
|
320
|
+
'caa.secao.negociacaoTag': 'the permission is not ours to give',
|
|
321
|
+
'sr.caa.escolha': 'Communication: {v}.',
|
|
322
|
+
'sr.caa.reset': 'Communication restored to its default: uppercase letters, where literacy usually starts.',
|
|
323
|
+
'pause.caa': '🔠 Communication',
|
|
324
|
+
'sr.caa.caixaAltaOn': 'Uppercase letters on: the whole game in capitals.',
|
|
325
|
+
'sr.caa.caixaAltaOff': 'Uppercase letters off: capitals and lowercase.',
|
|
326
|
+
'sr.quiz.bemVindo': 'Quiz. Use the arrow keys to choose and Enter to answer.',
|
|
327
|
+
'sr.nav.sonarFound': 'Sonar: {alvo} {lado}, {dist}.',
|
|
328
|
+
'sr.nav.coin': 'coin',
|
|
329
|
+
'sr.nav.target': 'target',
|
|
330
|
+
// THE BEARING, in the two frames a topology can declare (ADR-0089). They replace `left`/`right`/`ahead`,
|
|
331
|
+
// which were three words where the contract has eight - and mixed a SCREEN frame (left, right) with a BODY
|
|
332
|
+
// frame (ahead), with no way for the listener to tell which was which.
|
|
333
|
+
'sr.nav.dir.n': 'to the north', 'sr.nav.dir.ne': 'to the north-east', 'sr.nav.dir.e': 'to the east',
|
|
334
|
+
'sr.nav.dir.se': 'to the south-east', 'sr.nav.dir.s': 'to the south', 'sr.nav.dir.sw': 'to the south-west',
|
|
335
|
+
'sr.nav.dir.w': 'to the west', 'sr.nav.dir.nw': 'to the north-west',
|
|
336
|
+
'sr.nav.dir.zenith': 'above', 'sr.nav.dir.nadir': 'below',
|
|
337
|
+
'sr.nav.clock': "at {h} o'clock", 'sr.nav.clockOne': "at 1 o'clock",
|
|
338
|
+
'sr.nav.here': 'right here',
|
|
339
|
+
'sr.nav.veryClose': 'very close',
|
|
340
|
+
'sr.nav.close': 'close',
|
|
341
|
+
'sr.nav.far': 'far',
|
|
342
|
+
'sr.player.prefix': 'Player {n}: ',
|
|
343
|
+
'sr.empathy.hearingOn': 'Hearing-loss simulation on: quiet sounds are muffled and the highs are cut; speech becomes hard to follow.',
|
|
344
|
+
'sr.empathy.hearingOff': 'Hearing-loss simulation off.',
|
|
345
|
+
'sr.pad.disconnected': 'The controller for Player {n} disconnected — the keyboard still works. Press START to pair it again.',
|
|
346
|
+
'sr.quiz.levelSet': 'Level {n}: {v}.',
|
|
347
|
+
'sr.visual.roleColorSet': 'Colour of {v} changed.',
|
|
348
|
+
'sr.visual.roleColorsReset': 'Colour-blocking colours restored to their defaults.',
|
|
349
|
+
'sr.visual.defaultColors': 'Default colours restored.',
|
|
350
|
+
'sr.pad.connected': 'Controller connected: {v} layout.',
|
|
351
|
+
'sr.pad.design': 'Button design: {v}.',
|
|
352
|
+
'sr.eyes.loading': 'Play with your eyes: loading the webcam (please allow access).',
|
|
353
|
+
'sr.eyes.off': 'Play with your eyes off.',
|
|
354
|
+
'sr.boot.loaded': 'Game loaded. Collect {n} coins. Climb ladders with W/S, swim by holding jump in water.',
|
|
355
|
+
// ===================== POWER-UPS =====================
|
|
356
|
+
'sr.power.superjump': 'Super jump! Your jump always reaches its highest point.',
|
|
357
|
+
'sr.power.ultrajump': 'Ultra jump! Enormous leaps across the gap.',
|
|
358
|
+
'sr.power.turbo': 'Super run! Running makes you much faster.',
|
|
359
|
+
'sr.power.fly': 'Flight! In the air, press Jump to start flying; press Jump again to stop.',
|
|
360
|
+
'sr.power.wallcling': 'Spider climb! In the air, press {botao} near a wall or ceiling to stick; you crawl and round corners; {botao} again lets go.',
|
|
361
|
+
'sr.power.none': 'No power active.',
|
|
362
|
+
'sr.power.generic': 'Power activated!',
|
|
363
|
+
'hud.power.off': '—',
|
|
364
|
+
'hud.power.superjump': '🐇 Super jump',
|
|
365
|
+
'hud.power.ultrajump': '🦘 Ultra jump',
|
|
366
|
+
'hud.power.turbo': '👟 Super run',
|
|
367
|
+
'hud.power.fly': '🎈 Flight',
|
|
368
|
+
'hud.power.wallcling': '🕷️ Climb',
|
|
369
|
+
'hud.power.runcane': '👟 Running cane',
|
|
370
|
+
// ===================== REDUCED MOTION (WCAG 2.3.3) + CRT =====================
|
|
371
|
+
'rm.parallax': 'Background parallax',
|
|
372
|
+
'rm.decor': 'Decoration (clouds, grass)',
|
|
373
|
+
'rm.items': 'Item animation (coins)',
|
|
374
|
+
'rm.walk': 'Character in motion (walk, climb, swim, jump)',
|
|
375
|
+
'rm.breath': 'Breathing (standing still)',
|
|
376
|
+
'rm.flavor': 'Idle antics (resting animations)',
|
|
377
|
+
'rm.particles': 'Particles and sparkle',
|
|
378
|
+
'rm.crt.scan': 'Scanlines',
|
|
379
|
+
'rm.crt.vig': 'Vignette',
|
|
380
|
+
'rm.crt.round': 'Rounded corners',
|
|
381
|
+
'rm.sec.all': 'all players',
|
|
382
|
+
'sr.rm.frozen': '{alvo} frozen.',
|
|
383
|
+
'sr.rm.animated': '{alvo} animated.',
|
|
384
|
+
'sr.rm.allStopped': 'All animations stopped.',
|
|
385
|
+
'sr.rm.allResumed': 'All animations resumed.',
|
|
386
|
+
'sr.crt.on': '{efeito} on.',
|
|
387
|
+
'sr.crt.off': '{efeito} off.',
|
|
388
|
+
'sr.crt.round': '{efeito}: {nivel}.',
|
|
389
|
+
// ===================== ON / OFF =====================
|
|
390
|
+
'ui.toggle.on': '❚❚ On',
|
|
391
|
+
'ui.toggle.off': '▶ Off',
|
|
392
|
+
'ui.toggle.ariaOn': '{alvo}: on',
|
|
393
|
+
'ui.toggle.ariaOff': '{alvo}: off',
|
|
394
|
+
// ===================== THE TWO PER-PLAYER MOTOR CHOICES =====================
|
|
395
|
+
'sr.motor.easyOn': 'Easy Mode on: lower gravity, higher jump, forgiving pickup, coins on the ground, no hazards and no accidental falls (hold ↓ to climb down).',
|
|
396
|
+
'sr.motor.easyOff': 'Easy Mode off.',
|
|
397
|
+
'sr.motor.toggleMoveOn': 'Tap-to-move on: tap a direction to walk without holding; tap again to stop; hold to go faster. Jumping does not interrupt the walk.',
|
|
398
|
+
'sr.motor.toggleMoveOff': 'Tap-to-move off.',
|
|
399
|
+
'sr.motor.toggleRunOn': 'Run toggle on.',
|
|
400
|
+
'sr.motor.toggleRunOff': 'Run toggle off.',
|
|
401
|
+
'sr.physics.runLatchOn': 'Running.',
|
|
402
|
+
'sr.physics.runLatchOff': 'Walking.',
|
|
403
|
+
// ===================== HELP (pause menu) + level label =====================
|
|
404
|
+
'pause.level': '📚 Level {n} · {v}',
|
|
405
|
+
'help.controls': 'Your controls',
|
|
406
|
+
'help.controlsPlayer': 'Your controls · Player {n}',
|
|
407
|
+
'help.keyboard': 'keyboard',
|
|
408
|
+
'help.buildNotes': 'Notes on this build',
|
|
409
|
+
'help.powerups': 'Power-ups: 👟 super run · 🕷️ climb · 🎈 flight · 🐇 super jump · 🦘 ultra jump · 🔑 the key opens the 🚪 gate.',
|
|
410
|
+
'help.multiplayer': '2–4 players: screens side by side, each with its own menu and its own settings.',
|
|
411
|
+
'help.tech': 'v{v} — PixiJS (WebGL, Canvas fallback) · text/UI in the DOM (accessibility) · offline via PWA.',
|
|
412
|
+
'menu.yes': 'Yes',
|
|
413
|
+
'menu.no': 'No',
|
|
414
|
+
// ===================== THE 16 VISION MODES =====================
|
|
415
|
+
'viz.normal': 'Standard mode',
|
|
416
|
+
'viz.desc.normal': 'The game’s original art.',
|
|
417
|
+
'viz.hc-direto': 'High contrast: Direct Rendering (3:1)',
|
|
418
|
+
'viz.desc.hc-direto': 'Background recedes + outlines + colour by role; platform vs background ~3:1 (AA graphics), easy on the eye.',
|
|
419
|
+
'viz.hc-direto-45': 'High contrast: Direct Rendering (4.5:1)',
|
|
420
|
+
'viz.desc.hc-direto-45': 'More contrast (AA text): lighter platforms and a darker background.',
|
|
421
|
+
'viz.hc-direto-7': 'High contrast: Direct Rendering (7:1)',
|
|
422
|
+
'viz.desc.hc-direto-7': 'Maximum contrast (AAA text): almost black and white. Less pleasant, for whoever needs the most.',
|
|
423
|
+
'viz.sim-deuter': 'Simulate deuteranopia',
|
|
424
|
+
'viz.desc.sim-deuter': 'How someone who cannot see green sees (the most common kind).',
|
|
425
|
+
'viz.sim-protan': 'Simulate protanopia',
|
|
426
|
+
'viz.desc.sim-protan': 'How someone who cannot see red sees.',
|
|
427
|
+
'viz.sim-tritan': 'Simulate tritanopia',
|
|
428
|
+
'viz.desc.sim-tritan': 'How someone who cannot see blue sees.',
|
|
429
|
+
'viz.fix-protan': 'Protanopia correction',
|
|
430
|
+
'viz.desc.fix-protan': 'Daltonisation: strengthens the red/green distinction for protanopia.',
|
|
431
|
+
'viz.fix-deuter': 'Deuteranopia correction',
|
|
432
|
+
'viz.desc.fix-deuter': 'Daltonisation: strengthens the red/green distinction for deuteranopia.',
|
|
433
|
+
'viz.fix-tritan': 'Tritanopia correction',
|
|
434
|
+
'viz.desc.fix-tritan': 'Daltonisation: strengthens the blue/yellow distinction for tritanopia.',
|
|
435
|
+
'viz.lv-blur': 'Low vision: blur',
|
|
436
|
+
'viz.desc.lv-blur': 'Severe myopia / astigmatism. (green dot; tap twice to leave)',
|
|
437
|
+
'viz.lv-haze': 'Low vision: haze',
|
|
438
|
+
'viz.desc.lv-haze': 'Cataract — a whitish film, low contrast.',
|
|
439
|
+
'viz.lv-tunnel': 'Low vision: tunnel vision',
|
|
440
|
+
'viz.desc.lv-tunnel': 'Glaucoma — only the centre is visible.',
|
|
441
|
+
'viz.lv-macular': 'Low vision: central blind spot',
|
|
442
|
+
'viz.desc.lv-macular': 'Macular degeneration — a blur in the centre.',
|
|
443
|
+
'viz.lv-diabetic': 'Low vision: scattered patches',
|
|
444
|
+
'viz.desc.lv-diabetic': 'Diabetic retinopathy — patches scattered about.',
|
|
445
|
+
'viz.blind': 'Simulate total blindness',
|
|
446
|
+
'viz.desc.blind': 'Black screen — play as a blind person does (touch and sound feedback). (white dot; tap twice to leave)',
|
|
447
|
+
// ===================== O QUE FALTAVA (item 14, rodada final) =====================
|
|
448
|
+
// Estas 18 chaves existiam só em pt e caíam no fallback — e são as MAIS VISTAS do jogo: o menu de pausa
|
|
449
|
+
// inteiro, o título e a tela de vitória. Quem escolhesse inglês via a pausa em português.
|
|
450
|
+
'title.byline': 'by Prof. José Rocha',
|
|
451
|
+
'title.wait': 'Wait for Player 1 to choose the game',
|
|
452
|
+
'win.title': '🎉 You collected all 10 coins!',
|
|
453
|
+
'win.again': 'Play again',
|
|
454
|
+
'pause.title': 'Paused',
|
|
455
|
+
'pause.resume': '▶ Resume',
|
|
456
|
+
'pause.acessibilidade': '♿ Accessibility',
|
|
457
|
+
'pause.options': '⚙ Options',
|
|
458
|
+
'pause.pmback': '↩ Back',
|
|
459
|
+
'pause.cardAria': 'Player {n} pause menu',
|
|
460
|
+
/* --- ACTIVITY CATALOG: everything except literacy. The five literacy activities stay raw pt-BR in
|
|
461
|
+
`educational/activities-registry` — the word and the syllable ARE the subject matter (pillar 3). --- */
|
|
462
|
+
'act.ludico.nome': 'Collect 10 coins',
|
|
463
|
+
'act.mat1.nome': 'Quantity',
|
|
464
|
+
'act.mat1.d': 'Count the dots and pick the right number (1 to 9).',
|
|
465
|
+
'act.mat2.nome': 'Easy addition',
|
|
466
|
+
'act.mat2.d': 'Sums with addends from 0 to 5.',
|
|
467
|
+
'act.mat3.nome': 'Addition and Subtraction 1',
|
|
468
|
+
'act.mat3.d': 'Sums you can work out on your fingers (up to 10).',
|
|
469
|
+
'act.mat4.nome': 'Addition and Subtraction 2',
|
|
470
|
+
'act.mat4.d': 'Hold one number in your head and work the other on your fingers (up to 20).',
|
|
471
|
+
'act.mat5.nome': 'Times tables',
|
|
472
|
+
'act.mat5.d': 'Pick the numbers and practise multiplication.',
|
|
473
|
+
'act.mat6.nome': 'Division',
|
|
474
|
+
'act.mat6.d': 'Pick the numbers and practise division.',
|
|
475
|
+
'act.fr2.nome': 'Adding and subtracting halves',
|
|
476
|
+
'act.fr2.d': 'Add and subtract halves.',
|
|
477
|
+
'act.fr3.nome': 'Adding and subtracting thirds',
|
|
478
|
+
'act.fr3.d': 'Add and subtract thirds.',
|
|
479
|
+
'act.fr42.nome': 'Adding and subtracting quarters and halves',
|
|
480
|
+
'act.fr42.d': 'Add and subtract quarters and halves.',
|
|
481
|
+
'act.fr5.nome': 'Adding and subtracting fifths',
|
|
482
|
+
'act.fr5.d': 'Add and subtract fifths.',
|
|
483
|
+
'act.fr632.nome': 'Adding and subtracting sixths, thirds and halves',
|
|
484
|
+
'act.fr632.d': 'Add and subtract sixths, thirds and halves.',
|
|
485
|
+
'act.fr2a6.nome': 'Adding and subtracting fractions from halves to sixths',
|
|
486
|
+
'act.fr2a6.d': 'Add and subtract fractions from halves to sixths.',
|
|
487
|
+
'pause.tipo': '🔤 Typography',
|
|
488
|
+
'pause.addplayer': '👥 Add player',
|
|
489
|
+
'pause.audio': '🦻 Hearing accessibility',
|
|
490
|
+
'pause.motora': '♿ Motor accessibility',
|
|
491
|
+
'pause.anim': '🎞 Visual sensitivity',
|
|
492
|
+
'pause.visual': '🎨 Visual accessibility',
|
|
493
|
+
'pause.empatia': '🫂 Empathy mode',
|
|
494
|
+
'pause.ajuda': '❓ Help',
|
|
495
|
+
'pause.print': '📷 Print (see the screen)',
|
|
496
|
+
'pause.quit': '🚪 Quit the game',
|
|
497
|
+
'a11y.gameRegion': 'Game area. Move with A and D or the arrow keys; jump with L or Space; climb ladders up and down (and swim in water) with W and S or the arrow keys; run with P or Shift. Collect 10 coins.',
|
|
498
|
+
'game.instructions': 'Move the character through the cave and collect 10 coins. No time limit. Controls: A and D or the arrow keys move; L or Space jump; W and S (or up/down arrows) climb ladders and swim; P or Shift run.',
|
|
499
|
+
// ===================== ARIA-LABELS FROM index.html =====================
|
|
500
|
+
'a11y.choosePlayer': 'Choose the player',
|
|
501
|
+
'a11y.animations': 'Animations',
|
|
502
|
+
'a11y.literacy': 'Literacy',
|
|
503
|
+
'a11y.shortcuts': 'Accessibility shortcuts',
|
|
504
|
+
'a11y.hearing': 'Hearing',
|
|
505
|
+
'a11y.actionButtons': 'Action buttons',
|
|
506
|
+
'a11y.screenButtons': 'On-screen buttons (touch)',
|
|
507
|
+
'a11y.touchButtons': 'On-screen touch buttons',
|
|
508
|
+
'a11y.audioCategories': 'Audio categories',
|
|
509
|
+
'a11y.communication': 'Communication: letters and symbols',
|
|
510
|
+
'a11y.outlineFg': 'Foreground outline',
|
|
511
|
+
'a11y.outlineBg': 'Background outline',
|
|
512
|
+
'a11y.outlines': 'High-contrast outlines',
|
|
513
|
+
'a11y.touchControls': 'Touch controls',
|
|
514
|
+
'a11y.padDesign': 'Button layout',
|
|
515
|
+
'a11y.chooseScenery': 'Choose the scenery',
|
|
516
|
+
'a11y.chooseGame': 'Choose the game',
|
|
517
|
+
'a11y.chooseNumbers': 'Choose the numbers',
|
|
518
|
+
'a11y.hideDebug': 'Hide the debug tools',
|
|
519
|
+
'a11y.btnSpecial': 'Special (button 1)',
|
|
520
|
+
'a11y.fraction': 'Fraction',
|
|
521
|
+
'a11y.touchRoles': 'What each touch button does',
|
|
522
|
+
'a11y.btnRun': 'Interact / run (button 2)',
|
|
523
|
+
'a11y.eyeGaze': 'Play with your eyes',
|
|
524
|
+
'a11y.mapControls': 'Map controls (per player)',
|
|
525
|
+
'a11y.math': 'Maths',
|
|
526
|
+
'a11y.pauseMenu': 'Pause menu',
|
|
527
|
+
'a11y.simActive': 'Simulation mode on. Tap twice to go back to normal colours.',
|
|
528
|
+
'a11y.stopAll': 'Stop all animations',
|
|
529
|
+
'a11y.btnJump': 'Jump (button 0)',
|
|
530
|
+
'a11y.audioOut': 'Audio output per player',
|
|
531
|
+
'a11y.visualSim': 'Visual simulation',
|
|
532
|
+
'a11y.switchScreens': 'Switch the number of screens (players)',
|
|
533
|
+
'a11y.btnSwap': 'Switch power (button 3)',
|
|
534
|
+
'menu.playerCount': '◀ Number of players: {n} ▶',
|
|
535
|
+
// ===================== CONTROL LEGEND (row under the title) =====================
|
|
536
|
+
'legend.move': 'move',
|
|
537
|
+
'legend.pause': 'pause',
|
|
538
|
+
'legend.jump': 'jump',
|
|
539
|
+
'legend.especial': 'special',
|
|
540
|
+
'legend.run': 'run',
|
|
541
|
+
'legend.swap': 'switch',
|
|
542
|
+
// ===================== FONT CATALOGUE =====================
|
|
543
|
+
'font.group.sans': 'Sans serif',
|
|
544
|
+
'font.group.serif': 'Serif',
|
|
545
|
+
'font.group.hand': 'Handwritten',
|
|
546
|
+
'font.desc.atkinson': 'made by the Braille Institute for people with low vision (the game default)',
|
|
547
|
+
'font.desc.lexend': 'made to reduce visual stress and serve dyslexic readers (turns on the extra spacing)',
|
|
548
|
+
'font.desc.quattro': 'built to ease the eye strain of long hours on a screen',
|
|
549
|
+
'font.desc.andika': 'based on Sassoon; the fruit of research into how children read and write',
|
|
550
|
+
'font.desc.greatvibes': 'English calligraphy',
|
|
551
|
+
'font.desc.pinyon': 'English calligraphy',
|
|
552
|
+
'font.desc.ufcook': 'German blackletter',
|
|
553
|
+
'font.desc.ufmag': 'German blackletter',
|
|
554
|
+
'font.desc.comicneue': 'ball and stick (early literacy)',
|
|
555
|
+
'font.desc.learningcurve': 'English cursive',
|
|
556
|
+
'font.desc.kindergarten': 'Brazilian cursive',
|
|
557
|
+
'font.off.pending': 'licence to be confirmed — not shipped yet',
|
|
558
|
+
'font.off.negotiating': 'licence under negotiation',
|
|
559
|
+
};
|
|
560
|
+
export default en;
|