Skip to content

Commit 9009ad1

Browse files
committed
address i18n gaps in players
1 parent 640d6c8 commit 9009ad1

12 files changed

Lines changed: 54 additions & 13 deletions

File tree

packages/qti2-assessment-player/src/components/ItemRenderer.svelte

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,12 +101,12 @@
101101
d="M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z"
102102
/>
103103
</svg>
104-
<span>Error loading item: {playerData.error}</span>
104+
<span>{i18n?.t('item.loadError', 'Error loading item: {error}', { error: playerData.error })}</span>
105105
</div>
106106
{:else if !playerData.player}
107107
<div class="flex items-center justify-center p-8">
108108
<span class="loading loading-spinner loading-lg"></span>
109-
<span class="ml-4">Loading item...</span>
109+
<span class="ml-4">{i18n?.t('item.loading', 'Loading item...')}</span>
110110
</div>
111111
{:else}
112112
<div class="item-container">

packages/qti2-assessment-player/src/components/RubricDisplay.svelte

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,17 @@
11
<script lang="ts">
22
import { typesetAction } from '@pie-qti/qti2-default-components/shared';
3+
import type { I18nProvider } from '@pie-qti/qti2-i18n';
34
import type { RubricBlock } from '../integration/api-contract.js';
45
56
interface Props {
67
blocks: RubricBlock[];
78
collapsed?: boolean;
9+
i18n?: I18nProvider;
810
/** Math typesetting function (KaTeX, MathJax, etc.) */
911
typeset?: (root: HTMLElement) => void | Promise<void>;
1012
}
1113
12-
const { blocks, collapsed = false, typeset }: Props = $props();
14+
const { blocks, collapsed = false, i18n, typeset }: Props = $props();
1315
1416
let isCollapsed = $state(false);
1517
@@ -38,11 +40,11 @@
3840
{#each passages as passage}
3941
<div class="passage">
4042
<div class="passage-header">
41-
<h4 class="font-semibold text-base">Reading Passage</h4>
43+
<h4 class="font-semibold text-base">{i18n?.t('assessment.readingPassage', 'Reading Passage')}</h4>
4244
<button
4345
class="btn btn-ghost btn-sm"
4446
onclick={() => toggleCollapse?.()}
45-
aria-label={isCollapsed ? 'Expand passage' : 'Collapse passage'}
47+
aria-label={isCollapsed ? i18n?.t('assessment.expandPassage', 'Expand passage') : i18n?.t('assessment.collapsePassage', 'Collapse passage')}
4648
>
4749
{#if isCollapsed}
4850
<svg

packages/qti2-assessment-player/src/components/SectionMenu.svelte

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
<script lang="ts">
2+
import type { I18nProvider } from '@pie-qti/qti2-i18n';
3+
24
interface Section {
35
id: string;
46
title?: string;
@@ -8,11 +10,12 @@
810
interface Props {
911
sections: Section[];
1012
currentSectionIndex?: number;
13+
i18n?: I18nProvider;
1114
onSectionSelect?: (sectionIndex: number) => void;
1215
disabled?: boolean;
1316
}
1417
15-
const { sections, currentSectionIndex, onSectionSelect, disabled = false }: Props = $props();
18+
const { sections, currentSectionIndex, i18n, onSectionSelect, disabled = false }: Props = $props();
1619
1720
let isOpen = $state(false);
1821
@@ -46,7 +49,7 @@
4649
d="M4 6h16M4 12h16M4 18h16"
4750
/>
4851
</svg>
49-
Sections
52+
{i18n?.t('assessment.sections.title', 'Sections')}
5053
</button>
5154

5255
{#if isOpen}
@@ -93,14 +96,14 @@
9396
</div>
9497
<div class="section-info">
9598
<div class="section-title">
96-
{section.title || `Section ${section.index + 1}`}
99+
{section.title || i18n?.t('assessment.sectionDefault', 'Section {number}', { number: section.index + 1 })}
97100
</div>
98101
</div>
99102
</button>
100103
{/each}
101104
</div>
102105
</div>
103-
<button class="section-backdrop" onclick={() => toggleMenu?.()} aria-label="Close menu"></button>
106+
<button class="section-backdrop" onclick={() => toggleMenu?.()} aria-label={i18n?.t('assessment.closeMenu', 'Close menu')}></button>
104107
</div>
105108
{/if}
106109
</div>

packages/qti2-assessment-player/src/components/SplitPaneResizer.svelte

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
<script lang="ts">
22
import { onMount } from 'svelte';
3+
import type { I18nProvider } from '@pie-qti/qti2-i18n';
34
import RubricDisplay from './RubricDisplay.svelte';
45
56
interface Props {
@@ -9,6 +10,7 @@
910
children: any;
1011
/** Math typesetting function */
1112
typeset?: (root: HTMLElement) => void | Promise<void>;
13+
i18n?: I18nProvider;
1214
/** Storage key for persisting split position */
1315
storageKey?: string;
1416
/** Minimum left pane percentage */
@@ -25,6 +27,7 @@
2527
leftContent,
2628
children,
2729
typeset,
30+
i18n,
2831
storageKey = 'qti22-split-pane.splitLeftPct',
2932
minLeftPct = 25,
3033
maxLeftPct = 75,
@@ -167,7 +170,7 @@
167170
class="splitter"
168171
role="separator"
169172
aria-orientation="vertical"
170-
aria-label="Resize passage and question panels"
173+
aria-label={i18n?.t('accessibility.resizer', 'Resize passage and question panels')}
171174
aria-valuemin={minLeftPct}
172175
aria-valuemax={maxLeftPct}
173176
aria-valuenow={Math.round(splitLeftPct)}

packages/qti2-assessment-player/src/components/TestFeedback.svelte

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
* Displays assessment-level feedback based on outcome conditions.
66
* Shows feedback when QTI outcome conditions are met.
77
*/
8+
import type { I18nProvider } from '@pie-qti/qti2-i18n';
89
910
interface FeedbackItem {
1011
identifier: string;
@@ -21,13 +22,15 @@
2122
dismissable?: boolean;
2223
/** CSS class for custom styling */
2324
class?: string;
25+
i18n?: I18nProvider;
2426
}
2527
2628
let {
2729
feedback = [],
2830
onDismiss,
2931
dismissable = false,
30-
class: className = ''
32+
class: className = '',
33+
i18n
3134
}: Props = $props();
3235
3336
// Track dismissed items
@@ -55,7 +58,7 @@
5558
<button
5659
class="feedback-dismiss"
5760
onclick={() => handleDismiss(item.identifier)}
58-
aria-label="Dismiss feedback"
61+
aria-label={i18n?.t('feedback.closeFeedback', 'Dismiss feedback')}
5962
>
6063
×
6164
</button>

packages/qti2-i18n/src/locales/en-US.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -372,6 +372,7 @@ export default {
372372

373373
inline: {
374374
placeholder: '...',
375+
selectPlaceholder: 'Select...',
375376
},
376377
},
377378

@@ -406,7 +407,11 @@ export default {
406407
question: 'Question {current} of {total}',
407408
questionAnnouncement: 'Question {current} of {total}',
408409
section: 'Section {current} of {total}',
410+
sectionDefault: 'Section {number}',
409411
closeMenu: 'Close menu',
412+
readingPassage: 'Reading Passage',
413+
expandPassage: 'Expand passage',
414+
collapsePassage: 'Collapse passage',
410415

411416
attempts: {
412417
remaining: '{count} attempts remaining',

packages/qti2-i18n/src/locales/es-ES.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,7 @@ export default {
320320

321321
inline: {
322322
placeholder: '...',
323+
selectPlaceholder: 'Seleccionar...',
323324
},
324325
},
325326

@@ -354,6 +355,10 @@ export default {
354355
question: 'Pregunta {current} de {total}',
355356
questionAnnouncement: 'Pregunta {current} de {total}',
356357
section: 'Sección {current} de {total}',
358+
sectionDefault: 'Sección {number}',
359+
readingPassage: 'Pasaje de Lectura',
360+
expandPassage: 'Expandir pasaje',
361+
collapsePassage: 'Contraer pasaje',
357362
closeMenu: 'Cerrar menú',
358363

359364
attempts: {

packages/qti2-i18n/src/locales/fr-FR.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -319,6 +319,7 @@ export default {
319319

320320
inline: {
321321
placeholder: '...',
322+
selectPlaceholder: 'Sélectionner...',
322323
},
323324
},
324325

@@ -353,6 +354,10 @@ export default {
353354
question: 'Question {current} sur {total}',
354355
questionAnnouncement: 'Question {current} sur {total}',
355356
section: 'Section {current} sur {total}',
357+
sectionDefault: 'Section {number}',
358+
readingPassage: 'Passage de Lecture',
359+
expandPassage: 'Développer le passage',
360+
collapsePassage: 'Réduire le passage',
356361
closeMenu: 'Fermer le menu',
357362

358363
attempts: {

packages/qti2-i18n/src/locales/nl-NL.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -319,6 +319,7 @@ export default {
319319

320320
inline: {
321321
placeholder: '...',
322+
selectPlaceholder: 'Selecteren...',
322323
},
323324
},
324325

@@ -353,6 +354,10 @@ export default {
353354
question: 'Vraag {current} van {total}',
354355
questionAnnouncement: 'Vraag {current} van {total}',
355356
section: 'Sectie {current} van {total}',
357+
sectionDefault: 'Sectie {number}',
358+
readingPassage: 'Leestekst',
359+
expandPassage: 'Tekst uitvouwen',
360+
collapsePassage: 'Tekst samenvouwen',
356361
closeMenu: 'Menu sluiten',
357362

358363
attempts: {

packages/qti2-i18n/src/locales/ro-RO.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -319,6 +319,7 @@ export default {
319319

320320
inline: {
321321
placeholder: '...',
322+
selectPlaceholder: 'Selectare...',
322323
},
323324
},
324325

@@ -353,6 +354,10 @@ export default {
353354
question: 'Întrebarea {current} din {total}',
354355
questionAnnouncement: 'Întrebarea {current} din {total}',
355356
section: 'Secțiunea {current} din {total}',
357+
sectionDefault: 'Secțiunea {number}',
358+
readingPassage: 'Pasaj de Lectură',
359+
expandPassage: 'Extinde pasajul',
360+
collapsePassage: 'Restrânge pasajul',
356361
closeMenu: 'Închide meniul',
357362

358363
attempts: {

0 commit comments

Comments
 (0)