@pie-players/pie-players-shared 0.3.67 → 0.3.69
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/README.md +59 -0
- package/dist/formative/index.d.ts +16 -0
- package/dist/formative/index.js +5 -0
- package/dist/formative/mastery.d.ts +16 -0
- package/dist/formative/mastery.js +43 -0
- package/dist/formative/outcome.d.ts +19 -0
- package/dist/formative/outcome.js +90 -0
- package/dist/formative/policy.d.ts +37 -0
- package/dist/formative/policy.js +86 -0
- package/dist/formative/session.d.ts +19 -0
- package/dist/formative/session.js +113 -0
- package/dist/formative/state.d.ts +60 -0
- package/dist/formative/state.js +140 -0
- package/dist/formative/types.d.ts +164 -0
- package/dist/formative/types.js +13 -0
- package/dist/i18n/catalogs.d.ts +38 -0
- package/dist/i18n/catalogs.js +47 -0
- package/dist/i18n/index.d.ts +28 -4
- package/dist/i18n/index.js +34 -3
- package/dist/i18n/language-tags.d.ts +51 -0
- package/dist/i18n/language-tags.js +84 -0
- package/dist/i18n/messages/en-US.d.ts +601 -0
- package/dist/i18n/messages/en-US.js +617 -0
- package/dist/i18n/messages/nl-NL.d.ts +516 -0
- package/dist/i18n/messages/nl-NL.js +516 -0
- package/dist/i18n/provider.d.ts +168 -0
- package/dist/i18n/provider.js +472 -0
- package/dist/i18n/types.d.ts +177 -28
- package/dist/i18n/types.js +6 -2
- package/dist/index.d.ts +3 -1
- package/dist/index.js +2 -0
- package/dist/pie/custom-element-define.d.ts +24 -0
- package/dist/pie/custom-element-define.js +36 -6
- package/dist/pie/index.d.ts +1 -1
- package/dist/pie/index.js +1 -1
- package/dist/pie/versioned-tag.js +3 -2
- package/dist/security/sanitize-forbidden-lists.d.ts +8 -0
- package/dist/security/sanitize-forbidden-lists.js +41 -0
- package/dist/security/sanitize-item-markup.js +3 -36
- package/dist/security/sanitize-svg-icon.js +3 -25
- package/dist/security/wrap-overwide-images.d.ts +5 -10
- package/dist/security/wrap-overwide-images.js +13 -62
- package/dist/security/wrap-overwide-tables.d.ts +5 -10
- package/dist/security/wrap-overwide-tables.js +13 -62
- package/dist/security/wrap-overwide.d.ts +51 -0
- package/dist/security/wrap-overwide.js +91 -0
- package/dist/server/npm-auth-env.d.ts +13 -0
- package/dist/server/npm-auth-env.js +64 -0
- package/dist/timed-media/index.d.ts +17 -0
- package/dist/timed-media/index.js +16 -0
- package/dist/timed-media/media-element-source.d.ts +36 -0
- package/dist/timed-media/media-element-source.js +121 -0
- package/dist/timed-media/policy.d.ts +36 -0
- package/dist/timed-media/policy.js +297 -0
- package/dist/timed-media/session.d.ts +21 -0
- package/dist/timed-media/session.js +85 -0
- package/dist/timed-media/state.d.ts +66 -0
- package/dist/timed-media/state.js +357 -0
- package/dist/timed-media/types.d.ts +343 -0
- package/dist/timed-media/types.js +12 -0
- package/dist/tools/term-lookup.d.ts +189 -0
- package/dist/tools/term-lookup.js +284 -0
- package/dist/types/index.d.ts +105 -1
- package/dist/ui/attribute-coercion.d.ts +1 -0
- package/dist/ui/attribute-coercion.js +19 -0
- package/dist/ui/first-focusable.d.ts +22 -0
- package/dist/ui/first-focusable.js +47 -0
- package/dist/ui/focus-trap.js +7 -2
- package/dist/ui/pointer-drag.d.ts +30 -0
- package/dist/ui/pointer-drag.js +34 -0
- package/package.json +38 -6
- package/dist/i18n/loader.d.ts +0 -35
- package/dist/i18n/loader.js +0 -132
- package/dist/i18n/simple-i18n.d.ts +0 -68
- package/dist/i18n/simple-i18n.js +0 -198
- package/dist/i18n/translations/ar/common.json +0 -36
- package/dist/i18n/translations/ar/toolkit.json +0 -48
- package/dist/i18n/translations/ar/tools.json +0 -103
- package/dist/i18n/translations/en/common.json +0 -36
- package/dist/i18n/translations/en/toolkit.json +0 -48
- package/dist/i18n/translations/en/tools.json +0 -103
- package/dist/i18n/translations/es/common.json +0 -36
- package/dist/i18n/translations/es/toolkit.json +0 -48
- package/dist/i18n/translations/es/tools.json +0 -103
- package/dist/i18n/translations/zh/common.json +0 -36
- package/dist/i18n/translations/zh/toolkit.json +0 -48
- package/dist/i18n/translations/zh/tools.json +0 -103
|
@@ -0,0 +1,617 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* English (United States) message catalog — the source of truth.
|
|
3
|
+
*
|
|
4
|
+
* This catalog's *shape* generates `MessageKey`, so every other locale is
|
|
5
|
+
* checked against it and a mistyped key at a call site is a compile error. Add a
|
|
6
|
+
* key here first.
|
|
7
|
+
*
|
|
8
|
+
* A TypeScript module rather than JSON: `tsc` compiles it to real JS, which
|
|
9
|
+
* removes the `with { type: "json" }` import-attribute hazard that already broke
|
|
10
|
+
* every non-English locale once under Node's ESM loader, and it lets the key
|
|
11
|
+
* union be derived rather than maintained.
|
|
12
|
+
*
|
|
13
|
+
* Conventions:
|
|
14
|
+
* - `{placeholder}` slots interpolate; keep the names stable across locales.
|
|
15
|
+
* - A plural group is an object of CLDR categories; `other` is required and
|
|
16
|
+
* `Intl.PluralRules` picks the rest, so a locale may carry more forms than
|
|
17
|
+
* English has.
|
|
18
|
+
* - Keys ending `A11y` are for assistive technology only and are never rendered
|
|
19
|
+
* as visible text. They carry the operating instructions a sighted user reads
|
|
20
|
+
* from the layout.
|
|
21
|
+
* - Developer-facing diagnostics (`throw`/`console`) are deliberately absent.
|
|
22
|
+
* Only strings a learner, teacher or author can see belong here.
|
|
23
|
+
*
|
|
24
|
+
* @module @pie-players/pie-players-shared/i18n/messages/en-US
|
|
25
|
+
*/
|
|
26
|
+
const enUS = {
|
|
27
|
+
/** Verbs and nouns reused across more than one package. */
|
|
28
|
+
common: {
|
|
29
|
+
close: "Close",
|
|
30
|
+
cancel: "Cancel",
|
|
31
|
+
save: "Save",
|
|
32
|
+
reset: "Reset",
|
|
33
|
+
retry: "Retry",
|
|
34
|
+
back: "Back",
|
|
35
|
+
next: "Next",
|
|
36
|
+
previous: "Previous",
|
|
37
|
+
submit: "Submit",
|
|
38
|
+
continue: "Continue",
|
|
39
|
+
finish: "Finish",
|
|
40
|
+
yes: "Yes",
|
|
41
|
+
no: "No",
|
|
42
|
+
ok: "OK",
|
|
43
|
+
any: "Any",
|
|
44
|
+
off: "Off",
|
|
45
|
+
auto: "Auto",
|
|
46
|
+
all: "All",
|
|
47
|
+
none: "None",
|
|
48
|
+
loading: "Loading…",
|
|
49
|
+
error: "Error",
|
|
50
|
+
settings: "Settings",
|
|
51
|
+
language: "Language",
|
|
52
|
+
theme: "Theme",
|
|
53
|
+
preview: "Preview",
|
|
54
|
+
author: "Author",
|
|
55
|
+
unknown: "Unknown",
|
|
56
|
+
untitled: "Untitled",
|
|
57
|
+
apply: "Apply",
|
|
58
|
+
enabled: "Enabled",
|
|
59
|
+
disabled: "Disabled",
|
|
60
|
+
closeA11y: "Close",
|
|
61
|
+
settingsA11y: "Open settings menu",
|
|
62
|
+
},
|
|
63
|
+
/**
|
|
64
|
+
* Player chrome: the section, item and assessment players' own surfaces.
|
|
65
|
+
* Not the authored content, which carries its own language.
|
|
66
|
+
*/
|
|
67
|
+
player: {
|
|
68
|
+
passage: "Passage",
|
|
69
|
+
passages: "Passages",
|
|
70
|
+
question: "Question",
|
|
71
|
+
questionNumbered: "Question {position}",
|
|
72
|
+
questions: "Questions",
|
|
73
|
+
items: "Items",
|
|
74
|
+
section: "Section",
|
|
75
|
+
loadingSection: "Loading section content…",
|
|
76
|
+
loadingPassage: "Loading passage content…",
|
|
77
|
+
configurationError: "Configuration Error",
|
|
78
|
+
playerError: "Player Error",
|
|
79
|
+
authoringBackendError: "Authoring Backend Configuration Error",
|
|
80
|
+
itemLoadError: "Question could not be loaded.",
|
|
81
|
+
sectionTabsA11y: "Section content tabs",
|
|
82
|
+
passagesRegionA11y: "Passages",
|
|
83
|
+
itemsRegionA11y: "Items",
|
|
84
|
+
sectionToolsA11y: "Section tools",
|
|
85
|
+
scrollDownA11y: "Scroll down",
|
|
86
|
+
resizePanels: "Resize panels",
|
|
87
|
+
resizePassagesAndItemsA11y: "Resize passages and items panels",
|
|
88
|
+
resizeMediaRegion: "Resize media region",
|
|
89
|
+
resizeQuestionAndMediaA11y: "Resize question and media panels",
|
|
90
|
+
resizePassageAndMediaA11y: "Resize passage and media panels",
|
|
91
|
+
/**
|
|
92
|
+
* The assessment player's own section-to-section navigation. Its Back and
|
|
93
|
+
* Next controls take `common.back` / `common.next`.
|
|
94
|
+
*/
|
|
95
|
+
assessment: {
|
|
96
|
+
sectionPosition: "Section {position} of {total}",
|
|
97
|
+
noSections: "No sections",
|
|
98
|
+
},
|
|
99
|
+
/** Formative delivery: check-answer control and its outcome announcements. */
|
|
100
|
+
formative: {
|
|
101
|
+
checkAnswer: "Check answer",
|
|
102
|
+
tryAgain: "Try again",
|
|
103
|
+
answerRecorded: "Answer recorded.",
|
|
104
|
+
correct: "Correct.",
|
|
105
|
+
partlyCorrect: "Partly correct.",
|
|
106
|
+
notCorrect: "Not correct.",
|
|
107
|
+
notAutoScored: "Answer recorded. This question is not scored automatically.",
|
|
108
|
+
checkFailed: "This question could not be checked. Try again.",
|
|
109
|
+
/**
|
|
110
|
+
* Appended after the outcome, so the announcement reads
|
|
111
|
+
* "Not correct. 2 tries left." Kept a separate plural group rather than
|
|
112
|
+
* folded into each outcome: the tries count varies independently of
|
|
113
|
+
* correctness, and cross-multiplying them is 4 x N strings.
|
|
114
|
+
*/
|
|
115
|
+
triesLeft: {
|
|
116
|
+
one: "{count} try left.",
|
|
117
|
+
other: "{count} tries left.",
|
|
118
|
+
},
|
|
119
|
+
},
|
|
120
|
+
/**
|
|
121
|
+
* Timed media: what the learner is told as the timeline reveals questions and
|
|
122
|
+
* a gate holds playback. Announced through a polite live region and shown as
|
|
123
|
+
* visible text, because a pause the learner did not ask for has to be
|
|
124
|
+
* perceivable without hearing it (WCAG 1.1.1, 4.1.3).
|
|
125
|
+
*/
|
|
126
|
+
timedMedia: {
|
|
127
|
+
waitingForMedia: "Questions will appear as the media plays.",
|
|
128
|
+
questionAvailable: "Question {position} is now available.",
|
|
129
|
+
/** Playback really is stopped: the media source reported it can pause. */
|
|
130
|
+
playbackPaused: "Playback paused. Answer question {position} to continue.",
|
|
131
|
+
/**
|
|
132
|
+
* The same gate where the source cannot pause. Worded as a request rather
|
|
133
|
+
* than a statement, because claiming playback stopped when it did not is
|
|
134
|
+
* exactly the silent degradation this contract refuses.
|
|
135
|
+
*/
|
|
136
|
+
playbackAdvisory: "Answer question {position} before continuing with the media.",
|
|
137
|
+
playbackReleased: "Answer accepted. Continue playing the media.",
|
|
138
|
+
},
|
|
139
|
+
},
|
|
140
|
+
/** Toolbar and tool-shell chrome owned by the assessment toolkit. */
|
|
141
|
+
toolkit: {
|
|
142
|
+
toolsA11y: "Assessment tools",
|
|
143
|
+
toolbarInitError: "Unable to initialize assessment toolkit.",
|
|
144
|
+
settingsTitle: "Settings",
|
|
145
|
+
closeSettingsA11y: "Close settings",
|
|
146
|
+
dragPanelA11y: "Drag panel",
|
|
147
|
+
closePanelA11y: "Close panel",
|
|
148
|
+
resizeWindow: "Resize window",
|
|
149
|
+
minimize: "Minimize",
|
|
150
|
+
maximize: "Maximize",
|
|
151
|
+
minimizePanelA11y: "Minimize panel",
|
|
152
|
+
maximizePanelA11y: "Maximize panel",
|
|
153
|
+
/** Tool-window keyboard controls, exposed only to assistive technology. */
|
|
154
|
+
window: {
|
|
155
|
+
moveLeftA11y: "Move tool left",
|
|
156
|
+
moveRightA11y: "Move tool right",
|
|
157
|
+
moveUpA11y: "Move tool up",
|
|
158
|
+
moveDownA11y: "Move tool down",
|
|
159
|
+
shrinkA11y: "Shrink tool window",
|
|
160
|
+
growA11y: "Grow tool window",
|
|
161
|
+
centerA11y: "Center tool window",
|
|
162
|
+
closeA11y: "Close tool",
|
|
163
|
+
},
|
|
164
|
+
/**
|
|
165
|
+
* Live-region announcements shared by the draggable tools — ruler,
|
|
166
|
+
* protractor, line reader. Keyboard movement and rotation read the same in
|
|
167
|
+
* every one of them, so the strings live once here rather than per tool.
|
|
168
|
+
*/
|
|
169
|
+
announce: {
|
|
170
|
+
movedUp: "Moved up to {position}",
|
|
171
|
+
movedDown: "Moved down to {position}",
|
|
172
|
+
movedLeft: "Moved left to {position}",
|
|
173
|
+
movedRight: "Moved right to {position}",
|
|
174
|
+
rotatedTo: "Rotated to {degrees} degrees",
|
|
175
|
+
},
|
|
176
|
+
},
|
|
177
|
+
/**
|
|
178
|
+
* Per-capability strings, keyed by `toolId`.
|
|
179
|
+
*
|
|
180
|
+
* `name` and `description` back `ToolRegistration.nameKey` /
|
|
181
|
+
* `descriptionKey`, so the toolbar label and the registration contract read
|
|
182
|
+
* the same catalog entry.
|
|
183
|
+
*/
|
|
184
|
+
tools: {
|
|
185
|
+
calculator: {
|
|
186
|
+
name: "Calculator",
|
|
187
|
+
nameBasic: "Basic Calculator",
|
|
188
|
+
nameScientific: "Scientific Calculator",
|
|
189
|
+
nameGraphing: "Graphing Calculator",
|
|
190
|
+
description: "Multi-type calculator (basic, scientific, graphing)",
|
|
191
|
+
// Announced by the inline calculator's toggle. One key per variant and
|
|
192
|
+
// state rather than "{name} opened": Dutch and German put the participle
|
|
193
|
+
// last, so the sentence has to be authored whole. All three variants the
|
|
194
|
+
// provider implements are covered, not just the two the packaged toolbar
|
|
195
|
+
// registration offers — the inline element takes its type from the host.
|
|
196
|
+
openedBasic: "Basic calculator opened",
|
|
197
|
+
openedScientific: "Scientific calculator opened",
|
|
198
|
+
openedGraphing: "Graphing calculator opened",
|
|
199
|
+
closedBasic: "Basic calculator closed",
|
|
200
|
+
closedScientific: "Scientific calculator closed",
|
|
201
|
+
closedGraphing: "Graphing calculator closed",
|
|
202
|
+
toolA11y: "Calculator tool",
|
|
203
|
+
loading: "Loading calculator…",
|
|
204
|
+
providerUnavailable: "The calculator is unavailable.",
|
|
205
|
+
},
|
|
206
|
+
graph: {
|
|
207
|
+
name: "Graph",
|
|
208
|
+
description: "Graphing calculator and coordinate plane",
|
|
209
|
+
buttonA11y: "Graph, graphing calculator",
|
|
210
|
+
tooltip: "Graph",
|
|
211
|
+
toolA11y: "Graph tool — draw points and lines on a coordinate grid",
|
|
212
|
+
canvasA11y: "Graph canvas — use tools to add points and draw lines",
|
|
213
|
+
grid: "Grid:",
|
|
214
|
+
gridOpacityA11y: "Grid opacity",
|
|
215
|
+
pointA11y: "Graph point {id}",
|
|
216
|
+
modeSelector: "Selector",
|
|
217
|
+
modeSelectorHint: "Selector: click and drag points to move them or associated lines.",
|
|
218
|
+
modePoint: "Point",
|
|
219
|
+
modePointHint: "Point: click on the grid to add points.",
|
|
220
|
+
modeLine: "Line",
|
|
221
|
+
modeLineHint: "Line: click a starting point, then an ending point to draw a line.",
|
|
222
|
+
modeDelete: "Delete",
|
|
223
|
+
modeDeleteHint: "Delete: click on a point to delete it and any connected lines.",
|
|
224
|
+
},
|
|
225
|
+
periodicTable: {
|
|
226
|
+
name: "Periodic Table",
|
|
227
|
+
description: "Chemistry periodic table reference",
|
|
228
|
+
buttonA11y: "Periodic Table, chemistry reference",
|
|
229
|
+
tooltip: "Periodic Table",
|
|
230
|
+
toolA11y: "Periodic table — select an element to view its details",
|
|
231
|
+
elementsA11y: "Periodic table elements",
|
|
232
|
+
showAllA11y: "Show all elements",
|
|
233
|
+
allElements: "All Elements",
|
|
234
|
+
atomicMass: "Atomic Mass",
|
|
235
|
+
atomicNumber: "Atomic No",
|
|
236
|
+
electronConfig: "Electron Config",
|
|
237
|
+
phase: "Phase",
|
|
238
|
+
filterByA11y: "Filter by {category}",
|
|
239
|
+
/**
|
|
240
|
+
* Element cell label. Element *names* come from the periodic-table data
|
|
241
|
+
* file, not from here: they are content, and a locale that renames them
|
|
242
|
+
* needs a translated data file rather than 118 catalog keys.
|
|
243
|
+
*/
|
|
244
|
+
elementA11y: "{name}, Symbol: {symbol}, Atomic number: {number}, Atomic mass: {mass}, Category: {category}",
|
|
245
|
+
outsideFilterA11y: ", outside the current filter",
|
|
246
|
+
/** IUPAC element categories. Chemistry nomenclature, translated per locale. */
|
|
247
|
+
category: {
|
|
248
|
+
unknown: "Unknown",
|
|
249
|
+
alkaliMetal: "Alkali Metal",
|
|
250
|
+
alkalineEarthMetal: "Alkaline Earth Metal",
|
|
251
|
+
transitionMetal: "Transition Metal",
|
|
252
|
+
postTransitionMetal: "Post-transition Metal",
|
|
253
|
+
metalloid: "Metalloid",
|
|
254
|
+
diatomicNonmetal: "Diatomic Nonmetal",
|
|
255
|
+
polyatomicNonmetal: "Polyatomic Nonmetal",
|
|
256
|
+
nobleGas: "Noble Gas",
|
|
257
|
+
lanthanide: "Lanthanide",
|
|
258
|
+
actinide: "Actinide",
|
|
259
|
+
},
|
|
260
|
+
},
|
|
261
|
+
ruler: {
|
|
262
|
+
name: "Ruler",
|
|
263
|
+
description: "On-screen ruler for measurements",
|
|
264
|
+
buttonA11y: "Ruler",
|
|
265
|
+
tooltip: "Ruler",
|
|
266
|
+
toolA11y: "Draggable and rotatable ruler measurement tool",
|
|
267
|
+
unitSelectionA11y: "Ruler unit selection",
|
|
268
|
+
inches: "Inches",
|
|
269
|
+
centimeters: "Centimeters",
|
|
270
|
+
// Second form of each unit name, for interpolation into a sentence —
|
|
271
|
+
// `switchedTo`, `applicationA11y`, `imageAlt`. English needs it for
|
|
272
|
+
// sentence case; a language that capitalises nouns everywhere will have
|
|
273
|
+
// the two forms identical. Both are spelled out rather than abbreviated
|
|
274
|
+
// because every one of those three is read aloud, and a screen reader
|
|
275
|
+
// says "cm" as two letters.
|
|
276
|
+
inchesInSentence: "inches",
|
|
277
|
+
centimetersInSentence: "centimeters",
|
|
278
|
+
switchToInchesA11y: "Switch to inches",
|
|
279
|
+
switchToCentimetersA11y: "Switch to centimeters",
|
|
280
|
+
switchedTo: "Switched to {unit}",
|
|
281
|
+
applicationA11y: "Ruler tool. Use arrow keys to move, Shift+arrows to rotate, PageUp or PageDown for fine rotation, U to toggle units. Current unit: {unit}",
|
|
282
|
+
imageAlt: "Ruler showing {unit}",
|
|
283
|
+
},
|
|
284
|
+
protractor: {
|
|
285
|
+
name: "Protractor",
|
|
286
|
+
description: "On-screen protractor for angle measurements",
|
|
287
|
+
buttonA11y: "Protractor",
|
|
288
|
+
tooltip: "Protractor",
|
|
289
|
+
toolA11y: "Protractor tool. Use arrow keys to move, Shift+arrows to rotate, and PageUp or PageDown for fine rotation.",
|
|
290
|
+
roleA11y: "Draggable and rotatable protractor measurement tool",
|
|
291
|
+
imageAlt: "Protractor with 180-degree semicircular scale marked from 0 to 180 degrees in both directions, with degree markings every 10 degrees",
|
|
292
|
+
},
|
|
293
|
+
/**
|
|
294
|
+
* The two dictionaries. `toolA11y` names the floating panel; the button
|
|
295
|
+
* names follow the toolbar rule — the tooltip verbatim, plus a purpose
|
|
296
|
+
* clause only where the tooltip alone does not identify the tool.
|
|
297
|
+
*/
|
|
298
|
+
dictionary: {
|
|
299
|
+
name: "Dictionary",
|
|
300
|
+
description: "Look up word definitions",
|
|
301
|
+
buttonA11y: "Dictionary, look up word definitions",
|
|
302
|
+
tooltip: "Dictionary",
|
|
303
|
+
toolA11y: "Dictionary",
|
|
304
|
+
},
|
|
305
|
+
pictureDictionary: {
|
|
306
|
+
name: "Picture Dictionary",
|
|
307
|
+
description: "Look up pictures for words",
|
|
308
|
+
buttonA11y: "Picture Dictionary, look up pictures for words",
|
|
309
|
+
tooltip: "Picture Dictionary",
|
|
310
|
+
toolA11y: "Picture Dictionary",
|
|
311
|
+
},
|
|
312
|
+
/**
|
|
313
|
+
* The Spanish variants. Named in the interface locale like every other tool label —
|
|
314
|
+
* a Dutch-speaking proctor reading a Dutch interface still sees which language the
|
|
315
|
+
* dictionary looks words up in.
|
|
316
|
+
*/
|
|
317
|
+
dictionarySpanish: {
|
|
318
|
+
name: "Spanish Dictionary",
|
|
319
|
+
description: "Look up word definitions in Spanish",
|
|
320
|
+
buttonA11y: "Spanish Dictionary, look up word definitions in Spanish",
|
|
321
|
+
tooltip: "Spanish Dictionary",
|
|
322
|
+
toolA11y: "Spanish Dictionary",
|
|
323
|
+
},
|
|
324
|
+
pictureDictionarySpanish: {
|
|
325
|
+
name: "Spanish Picture Dictionary",
|
|
326
|
+
description: "Look up pictures for words in Spanish",
|
|
327
|
+
buttonA11y: "Spanish Picture Dictionary, look up pictures for words in Spanish",
|
|
328
|
+
tooltip: "Spanish Picture Dictionary",
|
|
329
|
+
toolA11y: "Spanish Picture Dictionary",
|
|
330
|
+
},
|
|
331
|
+
lineReader: {
|
|
332
|
+
name: "Line Reader",
|
|
333
|
+
description: "Reading guide overlay",
|
|
334
|
+
buttonA11y: "Line Reader, reading guide",
|
|
335
|
+
tooltip: "Line Reader",
|
|
336
|
+
roleA11y: "Draggable and resizable reading guide overlay",
|
|
337
|
+
close: "Close line reader",
|
|
338
|
+
resizeWindowA11y: "Drag to resize the reading window",
|
|
339
|
+
resizeFrameA11y: "Drag to resize the frame and window width",
|
|
340
|
+
windowHeightAnnounce: "Reading window height {pixels} pixels",
|
|
341
|
+
frameHeightAnnounce: "Frame height {pixels} pixels",
|
|
342
|
+
widthAnnounce: "Width {pixels} pixels",
|
|
343
|
+
applicationA11y: "Line Reader tool. A clear reading window inside an obscuring frame. Use arrow keys to move, +/- to resize the reading window, Escape to close. Reading window height: {paneHeight} pixels, Frame height: {frameHeight} pixels",
|
|
344
|
+
resizeWindowFullA11y: "Resize the reading window. Drag, or use the up and down arrow keys to change its height. Current height {paneHeight} pixels",
|
|
345
|
+
resizeFrameFullA11y: "Resize the frame. Drag, or use the up and down arrow keys to change the frame height and the left and right arrow keys to change the width. Current frame height {frameHeight} pixels, width {width} pixels",
|
|
346
|
+
},
|
|
347
|
+
answerEliminator: {
|
|
348
|
+
name: "Answer Eliminator",
|
|
349
|
+
description: "Strike through answer choices",
|
|
350
|
+
buttonA11y: "Strike Through, eliminate answer choices",
|
|
351
|
+
tooltip: "Strike Through",
|
|
352
|
+
},
|
|
353
|
+
highlighter: {
|
|
354
|
+
name: "Highlighter",
|
|
355
|
+
description: "Highlight and annotate text",
|
|
356
|
+
buttonA11y: "Highlight text",
|
|
357
|
+
tooltip: "Highlight",
|
|
358
|
+
},
|
|
359
|
+
annotationToolbar: {
|
|
360
|
+
name: "Annotation",
|
|
361
|
+
description: "Highlight and annotate text",
|
|
362
|
+
buttonA11y: "Annotate, highlight and mark up text",
|
|
363
|
+
// Not "Highlight": that is `tools.highlighter.tooltip`, and two toolbar
|
|
364
|
+
// buttons carrying the same visible label is a defect rather than a style
|
|
365
|
+
// choice. This tool does more than highlight — underline, remove, clear.
|
|
366
|
+
tooltip: "Annotate",
|
|
367
|
+
toolbarA11y: "Text annotation toolbar",
|
|
368
|
+
underline: "Underline",
|
|
369
|
+
underlineA11y: "Underline selected text",
|
|
370
|
+
readAloud: "Read Aloud",
|
|
371
|
+
readAloudA11y: "Read selected text aloud",
|
|
372
|
+
remove: "Remove",
|
|
373
|
+
removeA11y: "Remove this annotation",
|
|
374
|
+
clearAll: "Clear All",
|
|
375
|
+
clearAllA11y: "Clear all annotations from document",
|
|
376
|
+
highlightYellowA11y: "Yellow highlight",
|
|
377
|
+
highlightPinkA11y: "Pink highlight",
|
|
378
|
+
highlightBlueA11y: "Blue highlight",
|
|
379
|
+
highlightGreenA11y: "Green highlight",
|
|
380
|
+
},
|
|
381
|
+
theme: {
|
|
382
|
+
name: "Theme",
|
|
383
|
+
description: "Accessible themes and contrast",
|
|
384
|
+
buttonA11y: "Theme, change colors and contrast",
|
|
385
|
+
tooltip: "Theme",
|
|
386
|
+
selectorA11y: "Theme selector",
|
|
387
|
+
hint: "Select a theme to improve readability and reduce eye strain.",
|
|
388
|
+
selectA11y: "Select theme",
|
|
389
|
+
selectCurrentA11y: "Select theme. Current theme: {name}",
|
|
390
|
+
optionUnavailableA11y: "{name}, unavailable",
|
|
391
|
+
unavailableName: "Unavailable theme: {id}",
|
|
392
|
+
unavailableDescription: "PIE's managed base theme remains active until this theme becomes available again.",
|
|
393
|
+
unavailableStatus: "The selected theme is unavailable. PIE's managed base theme is active until it becomes available again.",
|
|
394
|
+
},
|
|
395
|
+
textToSpeech: {
|
|
396
|
+
name: "Text to Speech",
|
|
397
|
+
description: "Read content aloud",
|
|
398
|
+
toolA11y: "Text-to-speech tool",
|
|
399
|
+
title: "Text-to-Speech",
|
|
400
|
+
initializing: "Initializing…",
|
|
401
|
+
initFailed: "Failed to initialize text-to-speech.",
|
|
402
|
+
selectText: "Select text on the page to read it aloud.",
|
|
403
|
+
speed: "Speed:",
|
|
404
|
+
play: "Play",
|
|
405
|
+
pause: "Pause",
|
|
406
|
+
resume: "Resume",
|
|
407
|
+
stop: "Stop",
|
|
408
|
+
speaking: "Speaking…",
|
|
409
|
+
paused: "Paused",
|
|
410
|
+
charactersSelected: {
|
|
411
|
+
one: "{count} character selected",
|
|
412
|
+
other: "{count} characters selected",
|
|
413
|
+
},
|
|
414
|
+
rate: {
|
|
415
|
+
slow: "Slow",
|
|
416
|
+
slower: "Slower",
|
|
417
|
+
normal: "Normal",
|
|
418
|
+
faster: "Faster",
|
|
419
|
+
fast: "Fast",
|
|
420
|
+
veryFast: "Very Fast",
|
|
421
|
+
},
|
|
422
|
+
/** Inline reading controls and their live-region announcements. */
|
|
423
|
+
inline: {
|
|
424
|
+
controlsA11y: "Reading controls",
|
|
425
|
+
playbackSpeedA11y: "Playback speed",
|
|
426
|
+
rewindA11y: "Rewind",
|
|
427
|
+
fastForwardA11y: "Fast-forward",
|
|
428
|
+
stopA11y: "Stop reading",
|
|
429
|
+
initializing: "Initializing text-to-speech",
|
|
430
|
+
initFailed: "Unable to initialize text-to-speech. Try again.",
|
|
431
|
+
starting: "Starting reading",
|
|
432
|
+
started: "Reading started",
|
|
433
|
+
resumed: "Reading resumed",
|
|
434
|
+
pausedAnnouncement: "Reading paused",
|
|
435
|
+
stopped: "Reading stopped",
|
|
436
|
+
switchedSection: "Reading switched to another section",
|
|
437
|
+
startFailed: "Unable to start reading",
|
|
438
|
+
skippedForward: "Skipped forward",
|
|
439
|
+
skipForwardFailed: "Unable to skip forward",
|
|
440
|
+
skippedBackward: "Skipped backward",
|
|
441
|
+
skipBackwardFailed: "Unable to skip backward",
|
|
442
|
+
speedChangeFailed: "Unable to change playback speed",
|
|
443
|
+
speedAnnounce: "Playback speed {label}",
|
|
444
|
+
playA11y: "Play reading",
|
|
445
|
+
pauseA11y: "Pause reading",
|
|
446
|
+
resumeA11y: "Resume reading",
|
|
447
|
+
},
|
|
448
|
+
},
|
|
449
|
+
signLanguage: {
|
|
450
|
+
name: "Sign Language",
|
|
451
|
+
description: "Signed alternate for authored content",
|
|
452
|
+
/**
|
|
453
|
+
* Names of the signed language itself, keyed by its ISO 639-3 code.
|
|
454
|
+
*
|
|
455
|
+
* The name of the *adaptation*, never inferred from the item's content
|
|
456
|
+
* language. `signedEnglish` is not a distinct sign language; it rides
|
|
457
|
+
* the same card type tagged with a spoken-language code.
|
|
458
|
+
*/
|
|
459
|
+
generic: "Sign language",
|
|
460
|
+
unknown: "Sign language ({code})",
|
|
461
|
+
ase: "American Sign Language",
|
|
462
|
+
bfi: "British Sign Language",
|
|
463
|
+
fsl: "French Sign Language",
|
|
464
|
+
gss: "Greek Sign Language",
|
|
465
|
+
mfs: "Mexican Sign Language",
|
|
466
|
+
signedEnglish: "Signed English",
|
|
467
|
+
regionA11y: "{language} translation",
|
|
468
|
+
},
|
|
469
|
+
audioTranscript: {
|
|
470
|
+
name: "Audio Transcript",
|
|
471
|
+
description: "Text transcript of audio content",
|
|
472
|
+
regionA11y: "Transcript",
|
|
473
|
+
},
|
|
474
|
+
},
|
|
475
|
+
/**
|
|
476
|
+
* Developer panel chrome.
|
|
477
|
+
*
|
|
478
|
+
* These packages ship as published custom elements, so their chrome is
|
|
479
|
+
* localized like any other. The JSON payloads they dump are data, not
|
|
480
|
+
* message content, and stay as authored.
|
|
481
|
+
*/
|
|
482
|
+
debug: {
|
|
483
|
+
session: "Session",
|
|
484
|
+
sessionData: "Session Data",
|
|
485
|
+
sessionDataPersistent: "PIE Session Data (Persistent)",
|
|
486
|
+
noItemSessionYet: "No item session data yet. Interact with the item to see updates here.",
|
|
487
|
+
itemSessionsSnapshot: "Item Sessions Snapshot",
|
|
488
|
+
sectionControllerUnavailable: "Section controller not available for this section yet.",
|
|
489
|
+
filteredModel: "Filtered Model",
|
|
490
|
+
environment: "Environment",
|
|
491
|
+
events: "Events",
|
|
492
|
+
controllerEvents: "Controller Events",
|
|
493
|
+
instrumentation: "Instrumentation",
|
|
494
|
+
databaseState: "Database state",
|
|
495
|
+
sessionDb: "Session DB (Server)",
|
|
496
|
+
noRows: "No rows",
|
|
497
|
+
noRecords: "No instrumentation records yet.",
|
|
498
|
+
selectRecord: "Select a record to inspect details.",
|
|
499
|
+
selectEvent: "Select an event to inspect payload details.",
|
|
500
|
+
showRawTables: "Show raw tables",
|
|
501
|
+
showReconstructedSnapshots: "Show reconstructed snapshots",
|
|
502
|
+
showSectionRequest: "Show section request",
|
|
503
|
+
showAssessmentRequest: "Show assessment request",
|
|
504
|
+
liveUpdatesUnsupported: "Live updates are not supported in this browser",
|
|
505
|
+
liveUpdatesDisconnected: "Live updates disconnected; retrying…",
|
|
506
|
+
fieldType: "Type:",
|
|
507
|
+
fieldTarget: "Target:",
|
|
508
|
+
fieldItem: "Item:",
|
|
509
|
+
fieldCanonical: "Canonical:",
|
|
510
|
+
fieldIntent: "Intent:",
|
|
511
|
+
fieldDuplicates: "Duplicates:",
|
|
512
|
+
fieldSemanticRepeats: "Semantic Repeats:",
|
|
513
|
+
dragItemSessionPanelA11y: "Drag item session panel",
|
|
514
|
+
debuggerTabsA11y: "Debugger tabs",
|
|
515
|
+
sessionDataJsonA11y: "Session data JSON",
|
|
516
|
+
environmentJsonA11y: "Environment JSON",
|
|
517
|
+
filteredModelJsonA11y: "Filtered model JSON",
|
|
518
|
+
sectionSessionJsonA11y: "Section session snapshot JSON",
|
|
519
|
+
eventLevelFilterA11y: "Event level filter",
|
|
520
|
+
controllerEventDetailsA11y: "Controller event details",
|
|
521
|
+
instrumentationFilterA11y: "Filter instrumentation record type",
|
|
522
|
+
instrumentationDetailsA11y: "Instrumentation record details",
|
|
523
|
+
toggleSessionPanelA11y: "Toggle session panel",
|
|
524
|
+
toggleEventPanelA11y: "Toggle event broadcast panel",
|
|
525
|
+
toggleDatabasePanelA11y: "Toggle database state panel",
|
|
526
|
+
toggleInstrumentationPanelA11y: "Toggle instrumentation panel",
|
|
527
|
+
/** PNP debugger. */
|
|
528
|
+
pnp: {
|
|
529
|
+
title: "PNP Profile",
|
|
530
|
+
noAssessmentBound: "No assessment bound",
|
|
531
|
+
determinationReadOnly: "Determination (read-only)",
|
|
532
|
+
toolsEditor: "Tools Editor",
|
|
533
|
+
enforcement: "PNP enforcement",
|
|
534
|
+
allAvailableTools: "All available tools",
|
|
535
|
+
clearPlacement: "Clear placement",
|
|
536
|
+
tool: "Tool",
|
|
537
|
+
placement: "Placement",
|
|
538
|
+
provider: "Provider",
|
|
539
|
+
simulation: "PNP simulation",
|
|
540
|
+
resolvedTools: "Resolved Tools (toolkit)",
|
|
541
|
+
provenanceSummary: "Tool Policy Provenance Summary",
|
|
542
|
+
perToolDecisions: "Per-Tool Decisions",
|
|
543
|
+
profileReadOnly: "PNP Profile (read-only)",
|
|
544
|
+
},
|
|
545
|
+
/** TTS settings panel. */
|
|
546
|
+
tts: {
|
|
547
|
+
title: "TTS settings",
|
|
548
|
+
closeA11y: "Close TTS settings",
|
|
549
|
+
toolbarLayoutMode: "Toolbar layout mode",
|
|
550
|
+
reservedRow: "Reserved row",
|
|
551
|
+
expandingRow: "Expanding row",
|
|
552
|
+
floatingOverlay: "Floating overlay",
|
|
553
|
+
leftAlignedControls: "Left-aligned controls",
|
|
554
|
+
inlineSpeedButtons: "Inline speed buttons",
|
|
555
|
+
resetToDefaults: "Reset to defaults",
|
|
556
|
+
mathHighlighting: "Math highlighting",
|
|
557
|
+
checkingAvailability: "Checking availability…",
|
|
558
|
+
recheck: "Recheck",
|
|
559
|
+
voice: "Voice",
|
|
560
|
+
bestAvailableVoice: "Best available voice (auto)",
|
|
561
|
+
unnamedVoice: "Unnamed voice",
|
|
562
|
+
apiEndpoint: "API endpoint",
|
|
563
|
+
gender: "Gender",
|
|
564
|
+
any: "Any",
|
|
565
|
+
male: "Male",
|
|
566
|
+
female: "Female",
|
|
567
|
+
neutral: "Neutral",
|
|
568
|
+
engine: "Engine",
|
|
569
|
+
neural: "Neural",
|
|
570
|
+
standard: "Standard",
|
|
571
|
+
providerDefault: "Provider default",
|
|
572
|
+
format: "Format",
|
|
573
|
+
sampleRate: "Sample rate",
|
|
574
|
+
speechMarks: "Speech marks",
|
|
575
|
+
word: "Word",
|
|
576
|
+
wordAndSentence: "Word + sentence",
|
|
577
|
+
voiceType: "Voice type",
|
|
578
|
+
wavenetVoiceType: "WaveNet",
|
|
579
|
+
studioVoiceType: "Studio",
|
|
580
|
+
plainText: "Plain text",
|
|
581
|
+
sampleText: "Sample text",
|
|
582
|
+
resetSample: "Reset sample",
|
|
583
|
+
providerAvailable: "Provider available.",
|
|
584
|
+
providerUnavailable: "Provider unavailable.",
|
|
585
|
+
providerCheckFailed: "Provider availability check failed.",
|
|
586
|
+
providerNotChecked: "Provider availability has not been checked yet.",
|
|
587
|
+
webSpeechUnavailable: "Web Speech API is not available in this browser.",
|
|
588
|
+
browserNoVoices: "Browser text-to-speech is available, but no voices were returned yet.",
|
|
589
|
+
browserUnavailable: "Browser text-to-speech is not available.",
|
|
590
|
+
googleUnavailable: "Google Cloud TTS is not available from the configured API.",
|
|
591
|
+
// No keys for the preview sample text: it is spoken by the voice under
|
|
592
|
+
// test, so its language follows that voice, not the interface locale.
|
|
593
|
+
pollyUnavailable: "AWS Polly is not available from the configured API.",
|
|
594
|
+
recommendedVoices: "Recommended voices",
|
|
595
|
+
allVoices: "All available voices",
|
|
596
|
+
previewVoice: "Preview voice",
|
|
597
|
+
stopPreview: "Stop preview",
|
|
598
|
+
applying: "Applying…",
|
|
599
|
+
ssmlPreviewUnsupported: "SSML preview is not supported in the Browser backend.",
|
|
600
|
+
pollySsmlHint: "Some Polly neural voices reject certain SSML tags (for example emphasis). Use basic SSML tags if preview fails.",
|
|
601
|
+
mathHighlightParts: "Highlighting each part of a formula as it is read, falling back to the whole formula when alignment is uncertain.",
|
|
602
|
+
mathHighlightBlock: "Highlighting each formula as a single block instead of breaking it into parts.",
|
|
603
|
+
previewFailed: "Failed to play preview audio.",
|
|
604
|
+
previewNoAudio: "Preview response did not include audio content.",
|
|
605
|
+
previewEnterText: "Enter preview text before starting playback.",
|
|
606
|
+
previewUnavailable: "Cannot preview while this service is unavailable.",
|
|
607
|
+
browserSynthesisUnavailable: "Browser speech synthesis is unavailable.",
|
|
608
|
+
browserSynthesisEndedEarly: "Browser speech synthesis ended before audio started. Restart the browser and try again.",
|
|
609
|
+
browserSynthesisQueueFailed: "Browser speech synthesis failed to queue preview audio.",
|
|
610
|
+
browserPreviewFailed: "Failed to play browser voice preview.",
|
|
611
|
+
ssmlWordTrackingDisabled: "Google SSML preview preserves authored SSML, so word tracking is disabled.",
|
|
612
|
+
applyUnavailable: "Cannot apply settings while this service is unavailable.",
|
|
613
|
+
coordinatorUnavailable: "Toolkit coordinator is not available for text-to-speech updates.",
|
|
614
|
+
},
|
|
615
|
+
},
|
|
616
|
+
};
|
|
617
|
+
export default enUS;
|