@pie-players/pie-players-shared 0.3.28 → 0.3.30
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/{src → dist}/components/PieItemPlayer.svelte +156 -88
- package/dist/i18n/translations/en/tools.json +1 -1
- package/{src → dist}/i18n/use-i18n-standalone.svelte.ts +1 -0
- package/{src → dist}/i18n/use-i18n.svelte.ts +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/loader-config.d.ts +25 -0
- package/dist/loader-config.d.ts.map +1 -1
- package/dist/loader-config.js +5 -0
- package/dist/loader-config.js.map +1 -1
- package/dist/pie/config.d.ts.map +1 -1
- package/dist/pie/config.js +12 -5
- package/dist/pie/config.js.map +1 -1
- package/dist/pie/custom-element-define.d.ts +1 -1
- package/dist/pie/custom-element-define.d.ts.map +1 -1
- package/dist/pie/custom-element-define.js +2 -2
- package/dist/pie/custom-element-define.js.map +1 -1
- package/dist/pie/iife-loader.d.ts +35 -0
- package/dist/pie/iife-loader.d.ts.map +1 -1
- package/dist/pie/iife-loader.js +138 -2
- package/dist/pie/iife-loader.js.map +1 -1
- package/dist/pie/index.d.ts +3 -1
- package/dist/pie/index.d.ts.map +1 -1
- package/dist/pie/index.js +1 -0
- package/dist/pie/index.js.map +1 -1
- package/dist/pie/overrides.d.ts +9 -0
- package/dist/pie/overrides.d.ts.map +1 -1
- package/dist/pie/overrides.js +36 -0
- package/dist/pie/overrides.js.map +1 -1
- package/dist/pie/resource-monitor.d.ts +17 -0
- package/dist/pie/resource-monitor.d.ts.map +1 -1
- package/dist/pie/resource-monitor.js +284 -81
- package/dist/pie/resource-monitor.js.map +1 -1
- package/dist/pie/updates.d.ts.map +1 -1
- package/dist/pie/updates.js +65 -2
- package/dist/pie/updates.js.map +1 -1
- package/dist/security/index.d.ts +5 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +5 -0
- package/dist/security/index.js.map +1 -0
- package/dist/security/sanitize-item-markup.d.ts +46 -0
- package/dist/security/sanitize-item-markup.d.ts.map +1 -0
- package/dist/security/sanitize-item-markup.js +174 -0
- package/dist/security/sanitize-item-markup.js.map +1 -0
- package/dist/security/sanitize-svg-icon.d.ts +15 -0
- package/dist/security/sanitize-svg-icon.d.ts.map +1 -0
- package/dist/security/sanitize-svg-icon.js +89 -0
- package/dist/security/sanitize-svg-icon.js.map +1 -0
- package/dist/security/validate-style-url.d.ts +28 -0
- package/dist/security/validate-style-url.d.ts.map +1 -0
- package/dist/security/validate-style-url.js +58 -0
- package/dist/security/validate-style-url.js.map +1 -0
- package/dist/security/wrap-overwide-images.d.ts +31 -0
- package/dist/security/wrap-overwide-images.d.ts.map +1 -0
- package/dist/security/wrap-overwide-images.js +92 -0
- package/dist/security/wrap-overwide-images.js.map +1 -0
- package/dist/server/npm-registry.d.ts +8 -0
- package/dist/server/npm-registry.d.ts.map +1 -0
- package/dist/server/npm-registry.js +60 -0
- package/dist/server/npm-registry.js.map +1 -0
- package/dist/types/index.d.ts +10 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/ui/first-focusable.d.ts +21 -0
- package/dist/ui/first-focusable.d.ts.map +1 -0
- package/dist/ui/first-focusable.js +73 -0
- package/dist/ui/first-focusable.js.map +1 -0
- package/dist/ui/focus-trap.d.ts.map +1 -1
- package/dist/ui/focus-trap.js +2 -13
- package/dist/ui/focus-trap.js.map +1 -1
- package/package.json +44 -34
- package/dist/i18n/scripts/check-coverage.d.ts +0 -16
- package/dist/i18n/scripts/check-coverage.d.ts.map +0 -1
- package/dist/i18n/scripts/check-coverage.js +0 -262
- package/dist/i18n/scripts/check-coverage.js.map +0 -1
- package/dist/i18n/scripts/scan-hardcoded.d.ts +0 -16
- package/dist/i18n/scripts/scan-hardcoded.d.ts.map +0 -1
- package/dist/i18n/scripts/scan-hardcoded.js +0 -266
- package/dist/i18n/scripts/scan-hardcoded.js.map +0 -1
- package/dist/i18n/use-i18n-standalone.svelte.d.ts +0 -87
- package/dist/i18n/use-i18n-standalone.svelte.d.ts.map +0 -1
- package/dist/i18n/use-i18n-standalone.svelte.js +0 -151
- package/dist/i18n/use-i18n-standalone.svelte.js.map +0 -1
- package/dist/i18n/use-i18n.svelte.d.ts +0 -67
- package/dist/i18n/use-i18n.svelte.d.ts.map +0 -1
- package/dist/i18n/use-i18n.svelte.js +0 -144
- package/dist/i18n/use-i18n.svelte.js.map +0 -1
- package/dist/instrumentation/providers/DataDogInstrumentationProvider.d.ts +0 -170
- package/dist/instrumentation/providers/DataDogInstrumentationProvider.d.ts.map +0 -1
- package/dist/instrumentation/providers/DataDogInstrumentationProvider.js +0 -183
- package/dist/instrumentation/providers/DataDogInstrumentationProvider.js.map +0 -1
- package/dist/theming/css-variables.d.ts +0 -7
- package/dist/theming/css-variables.d.ts.map +0 -1
- package/dist/theming/css-variables.js +0 -43
- package/dist/theming/css-variables.js.map +0 -1
- package/dist/theming/index.d.ts +0 -4
- package/dist/theming/index.d.ts.map +0 -1
- package/dist/theming/index.js +0 -3
- package/dist/theming/index.js.map +0 -1
- package/dist/theming/presets.d.ts +0 -7
- package/dist/theming/presets.d.ts.map +0 -1
- package/dist/theming/presets.js +0 -146
- package/dist/theming/presets.js.map +0 -1
- package/dist/theming/types.d.ts +0 -5
- package/dist/theming/types.d.ts.map +0 -1
- package/dist/theming/types.js +0 -2
- package/dist/theming/types.js.map +0 -1
- package/dist/types/custom-elements.d.ts +0 -158
- package/dist/types/custom-elements.d.ts.map +0 -1
- package/dist/types/custom-elements.js +0 -8
- package/dist/types/custom-elements.js.map +0 -1
- package/dist/types/search.d.ts +0 -105
- package/dist/types/search.d.ts.map +0 -1
- package/dist/types/search.js +0 -12
- package/dist/types/search.js.map +0 -1
- package/dist/types/transform.d.ts +0 -48
- package/dist/types/transform.d.ts.map +0 -1
- package/dist/types/transform.js +0 -21
- package/dist/types/transform.js.map +0 -1
- package/src/i18n/README.md +0 -223
- package/src/i18n/index.ts +0 -26
- package/src/i18n/loader.ts +0 -156
- package/src/i18n/scripts/check-coverage.ts +0 -345
- package/src/i18n/scripts/scan-hardcoded.ts +0 -342
- package/src/i18n/simple-i18n.ts +0 -236
- package/src/i18n/translations/ar/common.json +0 -36
- package/src/i18n/translations/ar/toolkit.json +0 -48
- package/src/i18n/translations/ar/tools.json +0 -103
- package/src/i18n/translations/en/common.json +0 -36
- package/src/i18n/translations/en/toolkit.json +0 -48
- package/src/i18n/translations/en/tools.json +0 -103
- package/src/i18n/translations/es/common.json +0 -36
- package/src/i18n/translations/es/toolkit.json +0 -48
- package/src/i18n/translations/es/tools.json +0 -103
- package/src/i18n/translations/zh/common.json +0 -36
- package/src/i18n/translations/zh/toolkit.json +0 -48
- package/src/i18n/translations/zh/tools.json +0 -103
- package/src/i18n/types.ts +0 -66
- /package/{src → dist}/components/PiePreviewLayout.svelte +0 -0
- /package/{src → dist}/components/PiePreviewToggle.svelte +0 -0
- /package/{src → dist}/components/PieSpinner.svelte +0 -0
- /package/{src → dist}/components/ToolSettingsButton.svelte +0 -0
- /package/{src → dist}/components/ToolSettingsPanel.svelte +0 -0
- /package/{src → dist}/components/index.ts +0 -0
package/src/i18n/simple-i18n.ts
DELETED
|
@@ -1,236 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Simple I18n Implementation
|
|
3
|
-
*
|
|
4
|
-
* Lightweight i18n without external dependencies.
|
|
5
|
-
* Used for standalone components that don't need the full service architecture.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
import type { I18nConfig, PluralTranslation, TranslationBundle } from "./types.js";
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Simple I18n class for standalone use
|
|
12
|
-
*/
|
|
13
|
-
export class SimpleI18n {
|
|
14
|
-
private locale: string = "en";
|
|
15
|
-
private fallbackLocale: string = "en";
|
|
16
|
-
private direction: "ltr" | "rtl" = "ltr";
|
|
17
|
-
private translations = new Map<string, TranslationBundle>();
|
|
18
|
-
private listeners = new Set<() => void>();
|
|
19
|
-
private loadingPromises = new Map<string, Promise<void>>();
|
|
20
|
-
private config: I18nConfig;
|
|
21
|
-
|
|
22
|
-
constructor(config: I18nConfig = {}) {
|
|
23
|
-
this.config = config;
|
|
24
|
-
this.fallbackLocale = config.fallbackLocale || "en";
|
|
25
|
-
|
|
26
|
-
// Load bundled translations
|
|
27
|
-
if (config.bundledTranslations) {
|
|
28
|
-
for (const [locale, bundle] of Object.entries(
|
|
29
|
-
config.bundledTranslations,
|
|
30
|
-
)) {
|
|
31
|
-
this.translations.set(locale, bundle);
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
/**
|
|
37
|
-
* Initialize with locale
|
|
38
|
-
*/
|
|
39
|
-
async initialize(config: I18nConfig): Promise<void> {
|
|
40
|
-
Object.assign(this.config, config);
|
|
41
|
-
|
|
42
|
-
const locale = config.locale || this.detectBrowserLocale();
|
|
43
|
-
await this.setLocale(locale);
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* Translate a key
|
|
48
|
-
*/
|
|
49
|
-
t(key: string, params?: Record<string, any>): string {
|
|
50
|
-
const translation = this.getTranslation(key);
|
|
51
|
-
return this.interpolate(translation as string, params);
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* Translate with pluralization
|
|
56
|
-
*/
|
|
57
|
-
tn(key: string, count: number, params?: Record<string, any>): string {
|
|
58
|
-
const translation = this.getTranslation(key);
|
|
59
|
-
|
|
60
|
-
if (typeof translation === "object") {
|
|
61
|
-
const pluralForm = this.selectPluralForm(count, this.locale);
|
|
62
|
-
const text = translation[pluralForm] || translation.other;
|
|
63
|
-
return this.interpolate(text, { ...params, count });
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
return this.interpolate(translation as string, { ...params, count });
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
/**
|
|
70
|
-
* Get current locale
|
|
71
|
-
*/
|
|
72
|
-
getLocale(): string {
|
|
73
|
-
return this.locale;
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
/**
|
|
77
|
-
* Change locale
|
|
78
|
-
*/
|
|
79
|
-
async setLocale(locale: string): Promise<void> {
|
|
80
|
-
// Check if already loading
|
|
81
|
-
if (this.loadingPromises.has(locale)) {
|
|
82
|
-
await this.loadingPromises.get(locale);
|
|
83
|
-
return;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
// Check if already loaded
|
|
87
|
-
if (this.translations.has(locale)) {
|
|
88
|
-
this.applyLocale(locale);
|
|
89
|
-
return;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
// Load translations
|
|
93
|
-
const loadingPromise = this.loadTranslationsForLocale(locale);
|
|
94
|
-
this.loadingPromises.set(locale, loadingPromise);
|
|
95
|
-
|
|
96
|
-
try {
|
|
97
|
-
await loadingPromise;
|
|
98
|
-
this.applyLocale(locale);
|
|
99
|
-
} finally {
|
|
100
|
-
this.loadingPromises.delete(locale);
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
/**
|
|
105
|
-
* Get current direction
|
|
106
|
-
*/
|
|
107
|
-
getDirection(): "ltr" | "rtl" {
|
|
108
|
-
return this.direction;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
/**
|
|
112
|
-
* Get available locales
|
|
113
|
-
*/
|
|
114
|
-
getAvailableLocales(): string[] {
|
|
115
|
-
return Array.from(this.translations.keys());
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
/**
|
|
119
|
-
* Check if locale is loaded
|
|
120
|
-
*/
|
|
121
|
-
isLocaleLoaded(locale: string): boolean {
|
|
122
|
-
return this.translations.has(locale);
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
/**
|
|
126
|
-
* Subscribe to changes
|
|
127
|
-
*/
|
|
128
|
-
subscribe(listener: () => void): () => void {
|
|
129
|
-
this.listeners.add(listener);
|
|
130
|
-
return () => {
|
|
131
|
-
this.listeners.delete(listener);
|
|
132
|
-
};
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
/**
|
|
136
|
-
* Check if key exists
|
|
137
|
-
*/
|
|
138
|
-
hasKey(key: string): boolean {
|
|
139
|
-
const bundle = this.translations.get(this.locale);
|
|
140
|
-
return !!bundle?.translations[key];
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
private notifyListeners(): void {
|
|
144
|
-
for (const listener of this.listeners) {
|
|
145
|
-
listener();
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
private applyLocale(locale: string): void {
|
|
150
|
-
const bundle = this.translations.get(locale);
|
|
151
|
-
if (!bundle) return;
|
|
152
|
-
|
|
153
|
-
this.locale = locale;
|
|
154
|
-
this.direction = bundle.direction;
|
|
155
|
-
|
|
156
|
-
this.applyDOMDirection();
|
|
157
|
-
this.notifyListeners();
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
private applyDOMDirection(): void {
|
|
161
|
-
if (typeof document === "undefined") return;
|
|
162
|
-
|
|
163
|
-
document.documentElement.setAttribute("dir", this.direction);
|
|
164
|
-
document.documentElement.setAttribute("lang", this.locale);
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
private async loadTranslationsForLocale(locale: string): Promise<void> {
|
|
168
|
-
if (!this.config.loadTranslations) {
|
|
169
|
-
throw new Error(`No translation loader configured for locale: ${locale}`);
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
const bundle = await this.config.loadTranslations(locale);
|
|
173
|
-
this.translations.set(locale, bundle);
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
private getTranslation(key: string): string | PluralTranslation {
|
|
177
|
-
// Try current locale
|
|
178
|
-
const currentBundle = this.translations.get(this.locale);
|
|
179
|
-
if (currentBundle?.translations[key]) {
|
|
180
|
-
return currentBundle.translations[key];
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
// Try fallback locale
|
|
184
|
-
const fallbackBundle = this.translations.get(this.fallbackLocale);
|
|
185
|
-
if (fallbackBundle?.translations[key]) {
|
|
186
|
-
return fallbackBundle.translations[key];
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
// Missing key
|
|
190
|
-
if (this.config.onMissingKey) {
|
|
191
|
-
this.config.onMissingKey(key, this.locale);
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
return key;
|
|
195
|
-
}
|
|
196
|
-
|
|
197
|
-
private interpolate(text: string, params?: Record<string, any>): string {
|
|
198
|
-
if (!params) return text;
|
|
199
|
-
|
|
200
|
-
return text.replace(/\{(\w+)\}/g, (match, key) => {
|
|
201
|
-
return params[key]?.toString() || match;
|
|
202
|
-
});
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
private selectPluralForm(
|
|
206
|
-
count: number,
|
|
207
|
-
locale: string,
|
|
208
|
-
): keyof PluralTranslation {
|
|
209
|
-
// Use Intl.PluralRules if available
|
|
210
|
-
if (typeof Intl !== "undefined" && Intl.PluralRules) {
|
|
211
|
-
try {
|
|
212
|
-
const rules = new Intl.PluralRules(locale);
|
|
213
|
-
const category = rules.select(count);
|
|
214
|
-
return category as keyof PluralTranslation;
|
|
215
|
-
} catch {
|
|
216
|
-
// Fall through to simple rules
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
// Fallback to simple rules
|
|
221
|
-
if (count === 0) return "zero";
|
|
222
|
-
if (count === 1) return "one";
|
|
223
|
-
return "other";
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
private detectBrowserLocale(): string {
|
|
227
|
-
if (typeof navigator === "undefined") return "en";
|
|
228
|
-
|
|
229
|
-
const browserLang =
|
|
230
|
-
navigator.language ||
|
|
231
|
-
(navigator.languages && navigator.languages[0]) ||
|
|
232
|
-
"en";
|
|
233
|
-
|
|
234
|
-
return browserLang.split("-")[0];
|
|
235
|
-
}
|
|
236
|
-
}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"common": {
|
|
3
|
-
"save": "حفظ",
|
|
4
|
-
"cancel": "إلغاء",
|
|
5
|
-
"close": "إغلاق",
|
|
6
|
-
"loading": "جار التحميل...",
|
|
7
|
-
"error": "خطأ",
|
|
8
|
-
"retry": "إعادة المحاولة",
|
|
9
|
-
"back": "رجوع",
|
|
10
|
-
"next": "التالي",
|
|
11
|
-
"previous": "السابق",
|
|
12
|
-
"submit": "إرسال",
|
|
13
|
-
"continue": "متابعة",
|
|
14
|
-
"finish": "إنهاء",
|
|
15
|
-
"yes": "نعم",
|
|
16
|
-
"no": "لا",
|
|
17
|
-
"ok": "موافق",
|
|
18
|
-
"settings": "الإعدادات",
|
|
19
|
-
"language": "اللغة",
|
|
20
|
-
"theme": "المظهر",
|
|
21
|
-
"settings_aria": "فتح قائمة الإعدادات",
|
|
22
|
-
"rtl_notice": "اتجاه النص من اليمين إلى اليسار نشط",
|
|
23
|
-
"question": {
|
|
24
|
-
"one": "سؤال",
|
|
25
|
-
"other": "أسئلة"
|
|
26
|
-
},
|
|
27
|
-
"item": {
|
|
28
|
-
"one": "عنصر",
|
|
29
|
-
"other": "عناصر"
|
|
30
|
-
},
|
|
31
|
-
"character": {
|
|
32
|
-
"one": "حرف",
|
|
33
|
-
"other": "حروف"
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"assessment": {
|
|
3
|
-
"title": "التقييم",
|
|
4
|
-
"questions": {
|
|
5
|
-
"one": "{count} سؤال",
|
|
6
|
-
"other": "{count} أسئلة"
|
|
7
|
-
},
|
|
8
|
-
"question_of": "السؤال {current} من {total}",
|
|
9
|
-
"student_name": "اسم الطالب",
|
|
10
|
-
"fullscreen": "ملء الشاشة",
|
|
11
|
-
"exit_fullscreen": "الخروج من ملء الشاشة",
|
|
12
|
-
"enter_fullscreen_aria": "الدخول إلى ملء الشاشة",
|
|
13
|
-
"exit_fullscreen_aria": "الخروج من ملء الشاشة"
|
|
14
|
-
},
|
|
15
|
-
"accommodation": {
|
|
16
|
-
"audio": "صوت",
|
|
17
|
-
"audio_aria": "تبديل الصوت/تحويل النص إلى كلام",
|
|
18
|
-
"contrast": "التباين",
|
|
19
|
-
"contrast_aria": "تبديل تباين الألوان"
|
|
20
|
-
},
|
|
21
|
-
"navigation": {
|
|
22
|
-
"back": "← رجوع",
|
|
23
|
-
"next": "التالي ←",
|
|
24
|
-
"previous": "السابق",
|
|
25
|
-
"submit": "إرسال",
|
|
26
|
-
"navigate_to": "الانتقال إلى السؤال {index}",
|
|
27
|
-
"section": "القسم"
|
|
28
|
-
},
|
|
29
|
-
"section": {
|
|
30
|
-
"title": "بنية التقييم",
|
|
31
|
-
"add": "+ إضافة قسم",
|
|
32
|
-
"untitled": "قسم بدون عنوان",
|
|
33
|
-
"remove": "حذف القسم",
|
|
34
|
-
"items": {
|
|
35
|
-
"one": "{count} عنصر",
|
|
36
|
-
"other": "{count} عناصر"
|
|
37
|
-
},
|
|
38
|
-
"aria_label": "القسم: {title}",
|
|
39
|
-
"drop_zone": "إسقاط العناصر هنا",
|
|
40
|
-
"unassigned": "عناصر غير مخصصة",
|
|
41
|
-
"unassigned_instruction": "اسحب هذه العناصر إلى الأقسام",
|
|
42
|
-
"unassigned_item_aria": "سؤال غير مخصص: {title}"
|
|
43
|
-
},
|
|
44
|
-
"item": {
|
|
45
|
-
"load_error": "تعذر تحميل السؤال.",
|
|
46
|
-
"untitled": "بدون عنوان"
|
|
47
|
-
}
|
|
48
|
-
}
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"tool": {
|
|
3
|
-
"calculator": "آلة حاسبة",
|
|
4
|
-
"calculator_aria": "فتح الآلة الحاسبة",
|
|
5
|
-
"graph": "رسم بياني",
|
|
6
|
-
"graph_aria": "فتح أداة الرسم البياني",
|
|
7
|
-
"periodic_table": "الجدول الدوري",
|
|
8
|
-
"periodic_table_aria": "فتح الجدول الدوري",
|
|
9
|
-
"protractor": "منقلة",
|
|
10
|
-
"protractor_aria": "فتح المنقلة",
|
|
11
|
-
"ruler": "مسطرة",
|
|
12
|
-
"ruler_aria": "فتح المسطرة",
|
|
13
|
-
"line_reader": "قارئ السطر",
|
|
14
|
-
"line_reader_aria": "فتح قارئ السطر",
|
|
15
|
-
"text_to_speech": "تحويل النص إلى كلام",
|
|
16
|
-
"text_to_speech_aria": "فتح تحويل النص إلى كلام",
|
|
17
|
-
"color_scheme": "نظام الألوان",
|
|
18
|
-
"color_scheme_aria": "فتح محدد نظام الألوان",
|
|
19
|
-
"annotation": "التعليق التوضيحي",
|
|
20
|
-
"annotation_aria": "فتح شريط أدوات التعليق التوضيحي",
|
|
21
|
-
"answer_eliminator": "محذف الإجابات"
|
|
22
|
-
},
|
|
23
|
-
"tts": {
|
|
24
|
-
"title": "تحويل النص إلى كلام",
|
|
25
|
-
"close_aria": "إغلاق تحويل النص إلى كلام",
|
|
26
|
-
"failed_init": "فشل في تهيئة TTS",
|
|
27
|
-
"initializing": "جار التهيئة...",
|
|
28
|
-
"select_text": "حدد نصًا على الصفحة لقراءته بصوت عالٍ.",
|
|
29
|
-
"selected": "{count} {character} محددة",
|
|
30
|
-
"speed": "السرعة:",
|
|
31
|
-
"rate_slow": "بطيء",
|
|
32
|
-
"rate_slower": "أبطأ",
|
|
33
|
-
"rate_normal": "عادي",
|
|
34
|
-
"rate_faster": "أسرع",
|
|
35
|
-
"rate_fast": "سريع",
|
|
36
|
-
"rate_very_fast": "سريع جدًا",
|
|
37
|
-
"play": "تشغيل",
|
|
38
|
-
"pause": "إيقاف مؤقت",
|
|
39
|
-
"resume": "استئناف",
|
|
40
|
-
"stop": "إيقاف",
|
|
41
|
-
"speaking": "يتحدث...",
|
|
42
|
-
"paused": "متوقف مؤقتًا"
|
|
43
|
-
},
|
|
44
|
-
"calculator": {
|
|
45
|
-
"title": "آلة حاسبة",
|
|
46
|
-
"aria_label": "أداة الآلة الحاسبة - استخدم Alt+مفاتيح الأسهم للتحرك، Escape للإغلاق",
|
|
47
|
-
"settings": "إعدادات الآلة الحاسبة",
|
|
48
|
-
"close": "إغلاق الآلة الحاسبة",
|
|
49
|
-
"settings_title": "إعدادات الآلة الحاسبة",
|
|
50
|
-
"type": "نوع الآلة الحاسبة",
|
|
51
|
-
"basic": "أساسي",
|
|
52
|
-
"scientific": "علمي",
|
|
53
|
-
"graphing": "رسم بياني",
|
|
54
|
-
"configuration": "التكوين",
|
|
55
|
-
"config_help": "هذه الإعدادات مفيدة للاختبار. قد تكون مخفية أو مقيدة للطلاب في الإنتاج.",
|
|
56
|
-
"restricted_mode": "الوضع المقيد (وضع الاختبار)",
|
|
57
|
-
"angle_mode": "وضع الزاوية",
|
|
58
|
-
"degrees": "درجات",
|
|
59
|
-
"radians": "راديان",
|
|
60
|
-
"qwerty": "لوحة مفاتيح QWERTY",
|
|
61
|
-
"screen_reader": "دعم قارئ الشاشة",
|
|
62
|
-
"accessible_display": "عرض يمكن الوصول إليه",
|
|
63
|
-
"settings_menu": "قائمة الإعدادات",
|
|
64
|
-
"notes": "ملاحظات",
|
|
65
|
-
"folders": "مجلدات",
|
|
66
|
-
"sliders": "أشرطة التمرير",
|
|
67
|
-
"display_mode": "وضع العرض",
|
|
68
|
-
"classic": "كلاسيكي",
|
|
69
|
-
"mathprint": "MathPrint"
|
|
70
|
-
},
|
|
71
|
-
"color_scheme": {
|
|
72
|
-
"title": "نظام الألوان",
|
|
73
|
-
"description": "حدد نظام الألوان لتحسين سهولة القراءة وتقليل إجهاد العين.",
|
|
74
|
-
"close_aria": "إغلاق محدد نظام الألوان",
|
|
75
|
-
"select_aria": "تحديد نظام الألوان",
|
|
76
|
-
"default": "افتراضي",
|
|
77
|
-
"default_desc": "ألوان PIE القياسية",
|
|
78
|
-
"black_on_white": "أسود على أبيض",
|
|
79
|
-
"black_on_white_desc": "تباين عالٍ لسهولة القراءة",
|
|
80
|
-
"white_on_black": "أبيض على أسود",
|
|
81
|
-
"white_on_black_desc": "تباين عالٍ معكوس",
|
|
82
|
-
"rose_on_green": "وردي على أخضر",
|
|
83
|
-
"rose_on_green_desc": "يقلل من الوهج",
|
|
84
|
-
"yellow_on_blue": "أصفر على أزرق",
|
|
85
|
-
"yellow_on_blue_desc": "بديل تباين عالٍ",
|
|
86
|
-
"black_on_rose": "أسود على وردي",
|
|
87
|
-
"black_on_rose_desc": "خلفية دافئة",
|
|
88
|
-
"light_gray_on_dark_gray": "رمادي فاتح على رمادي داكن",
|
|
89
|
-
"light_gray_on_dark_gray_desc": "سطوع مخفض"
|
|
90
|
-
},
|
|
91
|
-
"annotation": {
|
|
92
|
-
"yellow_aria": "تمييز أصفر",
|
|
93
|
-
"pink_aria": "تمييز وردي",
|
|
94
|
-
"blue_aria": "تمييز أزرق",
|
|
95
|
-
"green_aria": "تمييز أخضر",
|
|
96
|
-
"read_selection": "قراءة التحديد",
|
|
97
|
-
"translation": "طلب ترجمة",
|
|
98
|
-
"clear": "مسح التمييزات"
|
|
99
|
-
},
|
|
100
|
-
"ruler": {
|
|
101
|
-
"switched_to": "تم التبديل إلى {unit}"
|
|
102
|
-
}
|
|
103
|
-
}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"common": {
|
|
3
|
-
"save": "Save",
|
|
4
|
-
"cancel": "Cancel",
|
|
5
|
-
"close": "Close",
|
|
6
|
-
"loading": "Loading...",
|
|
7
|
-
"error": "Error",
|
|
8
|
-
"retry": "Retry",
|
|
9
|
-
"back": "Back",
|
|
10
|
-
"next": "Next",
|
|
11
|
-
"previous": "Previous",
|
|
12
|
-
"submit": "Submit",
|
|
13
|
-
"continue": "Continue",
|
|
14
|
-
"finish": "Finish",
|
|
15
|
-
"yes": "Yes",
|
|
16
|
-
"no": "No",
|
|
17
|
-
"ok": "OK",
|
|
18
|
-
"settings": "Settings",
|
|
19
|
-
"language": "Language",
|
|
20
|
-
"theme": "Theme",
|
|
21
|
-
"settings_aria": "Open settings menu",
|
|
22
|
-
"rtl_notice": "RTL text direction active",
|
|
23
|
-
"question": {
|
|
24
|
-
"one": "Question",
|
|
25
|
-
"other": "Questions"
|
|
26
|
-
},
|
|
27
|
-
"item": {
|
|
28
|
-
"one": "Item",
|
|
29
|
-
"other": "Items"
|
|
30
|
-
},
|
|
31
|
-
"character": {
|
|
32
|
-
"one": "character",
|
|
33
|
-
"other": "characters"
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
}
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"assessment": {
|
|
3
|
-
"title": "Assessment",
|
|
4
|
-
"questions": {
|
|
5
|
-
"one": "{count} Question",
|
|
6
|
-
"other": "{count} Questions"
|
|
7
|
-
},
|
|
8
|
-
"question_of": "Question {current} of {total}",
|
|
9
|
-
"student_name": "Student Name",
|
|
10
|
-
"fullscreen": "Fullscreen",
|
|
11
|
-
"exit_fullscreen": "Exit Fullscreen",
|
|
12
|
-
"enter_fullscreen_aria": "Enter fullscreen",
|
|
13
|
-
"exit_fullscreen_aria": "Exit fullscreen"
|
|
14
|
-
},
|
|
15
|
-
"accommodation": {
|
|
16
|
-
"audio": "Audio",
|
|
17
|
-
"audio_aria": "Toggle audio/text-to-speech",
|
|
18
|
-
"contrast": "Contrast",
|
|
19
|
-
"contrast_aria": "Toggle color contrast"
|
|
20
|
-
},
|
|
21
|
-
"navigation": {
|
|
22
|
-
"back": "← Back",
|
|
23
|
-
"next": "Next →",
|
|
24
|
-
"previous": "Previous",
|
|
25
|
-
"submit": "Submit",
|
|
26
|
-
"navigate_to": "Navigate to question {index}",
|
|
27
|
-
"section": "Section"
|
|
28
|
-
},
|
|
29
|
-
"section": {
|
|
30
|
-
"title": "Assessment Structure",
|
|
31
|
-
"add": "+ Add Section",
|
|
32
|
-
"untitled": "Untitled Section",
|
|
33
|
-
"remove": "Remove section",
|
|
34
|
-
"items": {
|
|
35
|
-
"one": "{count} item",
|
|
36
|
-
"other": "{count} items"
|
|
37
|
-
},
|
|
38
|
-
"aria_label": "Section: {title}",
|
|
39
|
-
"drop_zone": "Drop items here",
|
|
40
|
-
"unassigned": "Unassigned Items",
|
|
41
|
-
"unassigned_instruction": "Drag these items into sections",
|
|
42
|
-
"unassigned_item_aria": "Unassigned question: {title}"
|
|
43
|
-
},
|
|
44
|
-
"item": {
|
|
45
|
-
"load_error": "Question could not be loaded.",
|
|
46
|
-
"untitled": "Untitled"
|
|
47
|
-
}
|
|
48
|
-
}
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"tool": {
|
|
3
|
-
"calculator": "Calculator",
|
|
4
|
-
"calculator_aria": "Open calculator",
|
|
5
|
-
"graph": "Graph",
|
|
6
|
-
"graph_aria": "Open graphing tool",
|
|
7
|
-
"periodic_table": "Periodic Table",
|
|
8
|
-
"periodic_table_aria": "Open periodic table",
|
|
9
|
-
"protractor": "Protractor",
|
|
10
|
-
"protractor_aria": "Open protractor",
|
|
11
|
-
"ruler": "Ruler",
|
|
12
|
-
"ruler_aria": "Open ruler",
|
|
13
|
-
"line_reader": "Line Reader",
|
|
14
|
-
"line_reader_aria": "Open line reader",
|
|
15
|
-
"text_to_speech": "Text-to-Speech",
|
|
16
|
-
"text_to_speech_aria": "Open text-to-speech",
|
|
17
|
-
"color_scheme": "Color Scheme",
|
|
18
|
-
"color_scheme_aria": "Open color scheme selector",
|
|
19
|
-
"annotation": "Annotation",
|
|
20
|
-
"annotation_aria": "Open annotation toolbar",
|
|
21
|
-
"answer_eliminator": "Answer Eliminator"
|
|
22
|
-
},
|
|
23
|
-
"tts": {
|
|
24
|
-
"title": "Text-to-Speech",
|
|
25
|
-
"close_aria": "Close text-to-speech",
|
|
26
|
-
"failed_init": "Failed to initialize TTS",
|
|
27
|
-
"initializing": "Initializing...",
|
|
28
|
-
"select_text": "Select text on the page to read it aloud.",
|
|
29
|
-
"selected": "{count} {character} selected",
|
|
30
|
-
"speed": "Speed:",
|
|
31
|
-
"rate_slow": "Slow",
|
|
32
|
-
"rate_slower": "Slower",
|
|
33
|
-
"rate_normal": "Normal",
|
|
34
|
-
"rate_faster": "Faster",
|
|
35
|
-
"rate_fast": "Fast",
|
|
36
|
-
"rate_very_fast": "Very Fast",
|
|
37
|
-
"play": "Play",
|
|
38
|
-
"pause": "Pause",
|
|
39
|
-
"resume": "Resume",
|
|
40
|
-
"stop": "Stop",
|
|
41
|
-
"speaking": "Speaking...",
|
|
42
|
-
"paused": "Paused"
|
|
43
|
-
},
|
|
44
|
-
"calculator": {
|
|
45
|
-
"title": "Calculator",
|
|
46
|
-
"aria_label": "Calculator tool - Use Alt+Arrow keys to move, Escape to close",
|
|
47
|
-
"settings": "Calculator settings",
|
|
48
|
-
"close": "Close calculator",
|
|
49
|
-
"settings_title": "Calculator Settings",
|
|
50
|
-
"type": "Calculator Type",
|
|
51
|
-
"basic": "Basic",
|
|
52
|
-
"scientific": "Scientific",
|
|
53
|
-
"graphing": "Graphing",
|
|
54
|
-
"configuration": "Configuration",
|
|
55
|
-
"config_help": "These settings are useful for testing. They may be hidden or restricted for students in production.",
|
|
56
|
-
"restricted_mode": "Restricted Mode (Test Mode)",
|
|
57
|
-
"angle_mode": "Angle Mode",
|
|
58
|
-
"degrees": "Degrees",
|
|
59
|
-
"radians": "Radians",
|
|
60
|
-
"qwerty": "QWERTY Keyboard",
|
|
61
|
-
"screen_reader": "Screen Reader Support",
|
|
62
|
-
"accessible_display": "Accessible Display",
|
|
63
|
-
"settings_menu": "Settings Menu",
|
|
64
|
-
"notes": "Notes",
|
|
65
|
-
"folders": "Folders",
|
|
66
|
-
"sliders": "Sliders",
|
|
67
|
-
"display_mode": "Display Mode",
|
|
68
|
-
"classic": "Classic",
|
|
69
|
-
"mathprint": "MathPrint"
|
|
70
|
-
},
|
|
71
|
-
"color_scheme": {
|
|
72
|
-
"title": "Color Scheme",
|
|
73
|
-
"description": "Select a color scheme to improve readability and reduce eye strain.",
|
|
74
|
-
"close_aria": "Close color scheme selector",
|
|
75
|
-
"select_aria": "Select color scheme",
|
|
76
|
-
"default": "Default",
|
|
77
|
-
"default_desc": "Standard PIE colors",
|
|
78
|
-
"black_on_white": "Black on White",
|
|
79
|
-
"black_on_white_desc": "High contrast for readability",
|
|
80
|
-
"white_on_black": "White on Black",
|
|
81
|
-
"white_on_black_desc": "Inverse high contrast",
|
|
82
|
-
"rose_on_green": "Rose on Green",
|
|
83
|
-
"rose_on_green_desc": "Reduces glare",
|
|
84
|
-
"yellow_on_blue": "Yellow on Blue",
|
|
85
|
-
"yellow_on_blue_desc": "High contrast alternative",
|
|
86
|
-
"black_on_rose": "Black on Rose",
|
|
87
|
-
"black_on_rose_desc": "Warm background",
|
|
88
|
-
"light_gray_on_dark_gray": "Light Gray on Dark Gray",
|
|
89
|
-
"light_gray_on_dark_gray_desc": "Reduced brightness"
|
|
90
|
-
},
|
|
91
|
-
"annotation": {
|
|
92
|
-
"yellow_aria": "Yellow highlight",
|
|
93
|
-
"pink_aria": "Pink highlight",
|
|
94
|
-
"blue_aria": "Blue highlight",
|
|
95
|
-
"green_aria": "Green highlight",
|
|
96
|
-
"read_selection": "Read selection",
|
|
97
|
-
"translation": "Translation request",
|
|
98
|
-
"clear": "Clear highlights"
|
|
99
|
-
},
|
|
100
|
-
"ruler": {
|
|
101
|
-
"switched_to": "Switched to {unit}"
|
|
102
|
-
}
|
|
103
|
-
}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"common": {
|
|
3
|
-
"save": "Guardar",
|
|
4
|
-
"cancel": "Cancelar",
|
|
5
|
-
"close": "Cerrar",
|
|
6
|
-
"loading": "Cargando...",
|
|
7
|
-
"error": "Error",
|
|
8
|
-
"retry": "Reintentar",
|
|
9
|
-
"back": "Atrás",
|
|
10
|
-
"next": "Siguiente",
|
|
11
|
-
"previous": "Anterior",
|
|
12
|
-
"submit": "Enviar",
|
|
13
|
-
"continue": "Continuar",
|
|
14
|
-
"finish": "Finalizar",
|
|
15
|
-
"yes": "Sí",
|
|
16
|
-
"no": "No",
|
|
17
|
-
"ok": "OK",
|
|
18
|
-
"settings": "Configuración",
|
|
19
|
-
"language": "Idioma",
|
|
20
|
-
"theme": "Tema",
|
|
21
|
-
"settings_aria": "Abrir menú de configuración",
|
|
22
|
-
"rtl_notice": "Dirección de texto RTL activa",
|
|
23
|
-
"question": {
|
|
24
|
-
"one": "Pregunta",
|
|
25
|
-
"other": "Preguntas"
|
|
26
|
-
},
|
|
27
|
-
"item": {
|
|
28
|
-
"one": "Ítem",
|
|
29
|
-
"other": "Ítems"
|
|
30
|
-
},
|
|
31
|
-
"character": {
|
|
32
|
-
"one": "carácter",
|
|
33
|
-
"other": "caracteres"
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
}
|