@lokascript/i18n 2.7.2 → 2.9.0
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/CHANGELOG.md +51 -0
- package/README.md +1 -1
- package/dist/browser.cjs +649 -180
- package/dist/browser.cjs.map +1 -1
- package/dist/browser.d.cts +2 -2
- package/dist/browser.d.ts +2 -2
- package/dist/browser.js +649 -180
- package/dist/browser.js.map +1 -1
- package/dist/dictionaries/index.cjs +370 -174
- package/dist/dictionaries/index.cjs.map +1 -1
- package/dist/dictionaries/index.js +370 -174
- package/dist/dictionaries/index.js.map +1 -1
- package/dist/index.cjs +649 -180
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +649 -180
- package/dist/index.js.map +1 -1
- package/dist/lokascript-i18n.min.js +1 -1
- package/dist/lokascript-i18n.min.js.map +1 -1
- package/dist/lokascript-i18n.mjs +678 -175
- package/dist/lokascript-i18n.mjs.map +1 -1
- package/dist/plugins/vite.cjs +370 -174
- package/dist/plugins/vite.cjs.map +1 -1
- package/dist/plugins/vite.js +370 -174
- package/dist/plugins/vite.js.map +1 -1
- package/dist/plugins/webpack.cjs +370 -174
- package/dist/plugins/webpack.cjs.map +1 -1
- package/dist/plugins/webpack.js +370 -174
- package/dist/plugins/webpack.js.map +1 -1
- package/dist/{transformer-DM7iplCU.d.cts → transformer--W46PGaW.d.cts} +8 -0
- package/dist/{transformer-BA8YX9u1.d.ts → transformer-FU06J6kG.d.ts} +8 -0
- package/package.json +9 -10
- package/src/dictionaries/ar.ts +20 -15
- package/src/dictionaries/bn.ts +10 -5
- package/src/dictionaries/de.ts +20 -8
- package/src/dictionaries/es.ts +10 -5
- package/src/dictionaries/fr.ts +15 -6
- package/src/dictionaries/he.ts +4 -0
- package/src/dictionaries/hi.ts +3 -2
- package/src/dictionaries/id.ts +31 -16
- package/src/dictionaries/it.ts +11 -4
- package/src/dictionaries/ja.ts +23 -15
- package/src/dictionaries/ko.ts +10 -5
- package/src/dictionaries/ms.ts +4 -1
- package/src/dictionaries/pl.ts +12 -5
- package/src/dictionaries/pt.ts +10 -5
- package/src/dictionaries/qu.ts +30 -19
- package/src/dictionaries/ru.ts +5 -2
- package/src/dictionaries/sw.ts +29 -14
- package/src/dictionaries/th.ts +5 -2
- package/src/dictionaries/tl.ts +4 -1
- package/src/dictionaries/tr.ts +24 -16
- package/src/dictionaries/uk.ts +5 -2
- package/src/dictionaries/vi.ts +23 -17
- package/src/dictionaries/zh.ts +24 -9
- package/src/grammar/grammar.test.ts +152 -0
- package/src/grammar/profiles/index.ts +316 -1
- package/src/grammar/transformer.ts +64 -1
- package/src/new-languages.test.ts +9 -3
- package/src/positional-keyword-drift.test.ts +6 -19
|
@@ -907,6 +907,14 @@ declare class GrammarTransformer {
|
|
|
907
907
|
* Transform a single hyperscript statement (no compound "then" chains).
|
|
908
908
|
*/
|
|
909
909
|
private transformSingle;
|
|
910
|
+
/**
|
|
911
|
+
* `<command …> end` fragments: transform the command without its stranded
|
|
912
|
+
* terminator, then re-append the translated terminator as a standalone
|
|
913
|
+
* trailing token. Fragments that open a block of their own (`if … end`,
|
|
914
|
+
* `repeat … end`, `js … end`) bail — their terminator belongs to them and
|
|
915
|
+
* their dedicated paths handle it.
|
|
916
|
+
*/
|
|
917
|
+
private transformWithTrailingEnd;
|
|
910
918
|
/**
|
|
911
919
|
* Detect and transform an inline JS block (`[on <event>] js <raw js> end`).
|
|
912
920
|
*
|
|
@@ -907,6 +907,14 @@ declare class GrammarTransformer {
|
|
|
907
907
|
* Transform a single hyperscript statement (no compound "then" chains).
|
|
908
908
|
*/
|
|
909
909
|
private transformSingle;
|
|
910
|
+
/**
|
|
911
|
+
* `<command …> end` fragments: transform the command without its stranded
|
|
912
|
+
* terminator, then re-append the translated terminator as a standalone
|
|
913
|
+
* trailing token. Fragments that open a block of their own (`if … end`,
|
|
914
|
+
* `repeat … end`, `js … end`) bail — their terminator belongs to them and
|
|
915
|
+
* their dedicated paths handle it.
|
|
916
|
+
*/
|
|
917
|
+
private transformWithTrailingEnd;
|
|
910
918
|
/**
|
|
911
919
|
* Detect and transform an inline JS block (`[on <event>] js <raw js> end`).
|
|
912
920
|
*
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lokascript/i18n",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.9.0",
|
|
4
4
|
"description": "Grammar transformation and keyword translation for hyperscript",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.cjs",
|
|
@@ -41,8 +41,7 @@
|
|
|
41
41
|
"test:check": "VITEST_QUIET=1 bash ../../scripts/vitest-run.sh --reporter=dot",
|
|
42
42
|
"test:coverage": "bash ../../scripts/vitest-run.sh --coverage",
|
|
43
43
|
"typecheck": "tsc --noEmit",
|
|
44
|
-
"
|
|
45
|
-
"validate-dictionaries": "node scripts/validate-dictionaries.js"
|
|
44
|
+
"validate-dictionaries": "npx tsx ../testing-framework/src/vocab/cli.ts validate --check V1,V1b --warn-only"
|
|
46
45
|
},
|
|
47
46
|
"browser": "dist/lokascript-i18n.min.js",
|
|
48
47
|
"sideEffects": false,
|
|
@@ -65,11 +64,11 @@
|
|
|
65
64
|
},
|
|
66
65
|
"homepage": "https://github.com/codetalcott/hyperfixi/tree/main/packages/i18n#readme",
|
|
67
66
|
"dependencies": {
|
|
68
|
-
"@hyperfixi/core": "^2.
|
|
69
|
-
"@lokascript/semantic": "^2.
|
|
67
|
+
"@hyperfixi/core": "^2.9.0",
|
|
68
|
+
"@lokascript/semantic": "^2.9.0",
|
|
70
69
|
"esbuild": "^0.28.0",
|
|
71
|
-
"happy-dom": "^20.
|
|
72
|
-
"vite": "^
|
|
70
|
+
"happy-dom": "^20.10.6",
|
|
71
|
+
"vite": "^8.1.4"
|
|
73
72
|
},
|
|
74
73
|
"devDependencies": {
|
|
75
74
|
"@rollup/plugin-node-resolve": "^16.0.1",
|
|
@@ -77,15 +76,15 @@
|
|
|
77
76
|
"@rollup/plugin-typescript": "^12.1.2",
|
|
78
77
|
"@types/node": "^20.0.0",
|
|
79
78
|
"@vitest/coverage-v8": "^4.0.0",
|
|
80
|
-
"
|
|
81
|
-
"rollup": "^4.60.2",
|
|
79
|
+
"rollup": "^4.62.2",
|
|
82
80
|
"tsup": "^8.0.0",
|
|
83
81
|
"typescript": "^5.0.0",
|
|
84
82
|
"vitest": "^4.1.5"
|
|
85
83
|
},
|
|
86
84
|
"files": [
|
|
87
85
|
"dist",
|
|
88
|
-
"src"
|
|
86
|
+
"src",
|
|
87
|
+
"CHANGELOG.md"
|
|
89
88
|
],
|
|
90
89
|
"publishConfig": {
|
|
91
90
|
"access": "public"
|
package/src/dictionaries/ar.ts
CHANGED
|
@@ -62,7 +62,7 @@ export const ar: Dictionary = {
|
|
|
62
62
|
clear: 'نظّف', // امسح is a remove alternative in the profile
|
|
63
63
|
close: 'أغلق',
|
|
64
64
|
open: 'افتح',
|
|
65
|
-
select: '
|
|
65
|
+
select: 'ظلل', // Batch 3: اختر is the pick keyword — bare select rendered with it parses null
|
|
66
66
|
clone: 'استنسخ',
|
|
67
67
|
prepend: 'سبق',
|
|
68
68
|
socket: 'مقبس',
|
|
@@ -89,31 +89,33 @@ export const ar: Dictionary = {
|
|
|
89
89
|
|
|
90
90
|
events: {
|
|
91
91
|
click: 'نقر',
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
92
|
+
// V3c burn-down (2026-07-14): English passthrough — no native form round-trips
|
|
93
|
+
// on the parse side (probe: split forms shatter, fused forms capture verbatim).
|
|
94
|
+
dblclick: 'dblclick',
|
|
95
|
+
mousedown: 'mousedown',
|
|
96
|
+
mouseup: 'mouseup',
|
|
97
|
+
mouseenter: 'mouseenter',
|
|
98
|
+
mouseleave: 'mouseleave',
|
|
97
99
|
mouseover: 'فأرة فوق',
|
|
98
|
-
mouseout: '
|
|
99
|
-
mousemove: '
|
|
100
|
+
mouseout: 'mouseout',
|
|
101
|
+
mousemove: 'mousemove',
|
|
100
102
|
keydown: 'مفتاح أسفل',
|
|
101
103
|
keyup: 'مفتاح أعلى',
|
|
102
|
-
keypress: '
|
|
104
|
+
keypress: 'keypress',
|
|
103
105
|
focus: 'تركيز',
|
|
104
106
|
blur: 'ضبابية',
|
|
105
107
|
change: 'تغيير',
|
|
106
108
|
input: 'إدخال',
|
|
107
109
|
submit: 'إرسال',
|
|
108
|
-
reset: '
|
|
110
|
+
reset: 'reset',
|
|
109
111
|
load: 'تحميل',
|
|
110
|
-
unload: '
|
|
112
|
+
unload: 'unload',
|
|
111
113
|
resize: 'تغيير حجم',
|
|
112
114
|
scroll: 'تمرير',
|
|
113
|
-
touchstart: '
|
|
114
|
-
touchend: '
|
|
115
|
-
touchmove: '
|
|
116
|
-
touchcancel: '
|
|
115
|
+
touchstart: 'touchstart',
|
|
116
|
+
touchend: 'touchend',
|
|
117
|
+
touchmove: 'touchmove',
|
|
118
|
+
touchcancel: 'touchcancel',
|
|
117
119
|
},
|
|
118
120
|
|
|
119
121
|
logical: {
|
|
@@ -190,6 +192,9 @@ export const ar: Dictionary = {
|
|
|
190
192
|
},
|
|
191
193
|
|
|
192
194
|
expressions: {
|
|
195
|
+
characters: 'حروف',
|
|
196
|
+
inclusive: 'شامل',
|
|
197
|
+
exclusive: 'حصري',
|
|
193
198
|
first: 'أول',
|
|
194
199
|
last: 'آخر',
|
|
195
200
|
next: 'التالي',
|
package/src/dictionaries/bn.ts
CHANGED
|
@@ -47,7 +47,7 @@ export const bengaliDictionary: Dictionary = {
|
|
|
47
47
|
init: 'শুরু',
|
|
48
48
|
behavior: 'আচরণ',
|
|
49
49
|
install: 'ইনস্টল',
|
|
50
|
-
clone: '
|
|
50
|
+
clone: 'ক্লোন', // Batch 3: কপি is the copy verb — rendered clone parsed as action=copy
|
|
51
51
|
swap: 'বদল',
|
|
52
52
|
morph: 'রূপান্তর',
|
|
53
53
|
beep: 'বীপ',
|
|
@@ -96,10 +96,12 @@ export const bengaliDictionary: Dictionary = {
|
|
|
96
96
|
focus: 'ফোকাস',
|
|
97
97
|
blur: 'ঝাপসা',
|
|
98
98
|
reset: 'রিসেট',
|
|
99
|
-
keydown: '
|
|
100
|
-
keyup: '
|
|
101
|
-
|
|
102
|
-
|
|
99
|
+
keydown: 'keydown',
|
|
100
|
+
keyup: 'keyup',
|
|
101
|
+
// V3c burn-down (2026-07-14): English passthrough — no native form round-trips
|
|
102
|
+
// on the parse side (probe: split forms shatter, fused forms capture verbatim).
|
|
103
|
+
mouseover: 'mouseover',
|
|
104
|
+
mouseout: 'mouseout',
|
|
103
105
|
scroll: 'স্ক্রোল',
|
|
104
106
|
resize: 'রিসাইজ',
|
|
105
107
|
every: 'প্রতি',
|
|
@@ -166,6 +168,9 @@ export const bengaliDictionary: Dictionary = {
|
|
|
166
168
|
},
|
|
167
169
|
|
|
168
170
|
expressions: {
|
|
171
|
+
characters: 'অক্ষর',
|
|
172
|
+
inclusive: 'অন্তর্ভুক্ত',
|
|
173
|
+
exclusive: 'বাদ',
|
|
169
174
|
first: 'প্রথম',
|
|
170
175
|
last: 'শেষ',
|
|
171
176
|
next: 'পরবর্তী',
|
package/src/dictionaries/de.ts
CHANGED
|
@@ -67,7 +67,7 @@ export const de: Dictionary = {
|
|
|
67
67
|
clear: 'bereinigen', // löschen is a remove alternative in the profile
|
|
68
68
|
close: 'schließen',
|
|
69
69
|
open: 'öffnen',
|
|
70
|
-
select: '
|
|
70
|
+
select: 'markieren', // Batch 3: auswählen is the pick keyword — bare select rendered with it parses null
|
|
71
71
|
clone: 'klonen',
|
|
72
72
|
prepend: 'voranstellen',
|
|
73
73
|
focus: 'fokussieren',
|
|
@@ -95,18 +95,27 @@ export const de: Dictionary = {
|
|
|
95
95
|
events: {
|
|
96
96
|
click: 'klick',
|
|
97
97
|
dblclick: 'doppelklick',
|
|
98
|
-
mousedown:
|
|
99
|
-
|
|
98
|
+
// mousedown/mouseup: English passthrough — no native form round-trips on the
|
|
99
|
+
// parse side (V3c probe 2026-07-14: fused forms captured verbatim, split forms
|
|
100
|
+
// shattered to their first word — live broken listeners in repeat-until-event).
|
|
101
|
+
// The Batch-2 id-keyup precedent; revisit if S5b + tokenizer gain native entries.
|
|
102
|
+
mousedown: 'mousedown',
|
|
103
|
+
mouseup: 'mouseup',
|
|
100
104
|
mouseenter: 'mauseintreten',
|
|
101
105
|
mouseleave: 'mausverlassen',
|
|
102
|
-
|
|
103
|
-
|
|
106
|
+
// V3 Batch 2: fused/dead event words realigned to the de tokenizer's
|
|
107
|
+
// registered forms (S5b's `maus über`/`taste runter` are aspirational — they
|
|
108
|
+
// do not tokenize; `mausüber` etc. captured event=expression:undefined).
|
|
109
|
+
mouseover: 'maus drüber',
|
|
110
|
+
mouseout: 'maus weg',
|
|
104
111
|
mousemove: 'mausbewegen',
|
|
105
|
-
keydown: '
|
|
106
|
-
keyup: '
|
|
112
|
+
keydown: 'taste unten',
|
|
113
|
+
keyup: 'taste oben',
|
|
107
114
|
keypress: 'tastedrücken',
|
|
108
115
|
focus: 'fokus',
|
|
109
|
-
blur
|
|
116
|
+
// matches commands.blur (which shadows this at render time) and the live
|
|
117
|
+
// corpus render; `unscharf` was dead vocab that captured no event
|
|
118
|
+
blur: 'defokussieren',
|
|
110
119
|
change: 'ändern',
|
|
111
120
|
input: 'eingabe',
|
|
112
121
|
submit: 'absenden',
|
|
@@ -194,6 +203,9 @@ export const de: Dictionary = {
|
|
|
194
203
|
},
|
|
195
204
|
|
|
196
205
|
expressions: {
|
|
206
|
+
characters: 'Zeichen',
|
|
207
|
+
inclusive: 'inklusiv',
|
|
208
|
+
exclusive: 'exklusiv',
|
|
197
209
|
first: 'erste',
|
|
198
210
|
last: 'letzte',
|
|
199
211
|
next: 'nächste',
|
package/src/dictionaries/es.ts
CHANGED
|
@@ -90,17 +90,19 @@ export const es: Dictionary = {
|
|
|
90
90
|
mouseup: 'ratónarriba',
|
|
91
91
|
mouseenter: 'ratónentrar',
|
|
92
92
|
mouseleave: 'ratónsalir',
|
|
93
|
-
|
|
94
|
-
|
|
93
|
+
// V3 Batch 2: fused forms split to the S5b/tokenizer-known forms (the fused
|
|
94
|
+
// spellings captured event=expression:undefined — broken listeners)
|
|
95
|
+
mouseover: 'ratón encima',
|
|
96
|
+
mouseout: 'ratón fuera',
|
|
95
97
|
mousemove: 'ratónmover',
|
|
96
|
-
keydown: '
|
|
97
|
-
keyup: '
|
|
98
|
+
keydown: 'tecla abajo',
|
|
99
|
+
keyup: 'tecla arriba',
|
|
98
100
|
keypress: 'teclapresar',
|
|
99
101
|
focus: 'enfocar',
|
|
100
102
|
blur: 'desenfocar',
|
|
101
103
|
change: 'cambiar',
|
|
102
104
|
input: 'entrada',
|
|
103
|
-
submit: '
|
|
105
|
+
submit: 'envío', // Batch 3: enviar is the send verb — on-submit listener captured event "send"
|
|
104
106
|
reset: 'reiniciar',
|
|
105
107
|
load: 'cargar',
|
|
106
108
|
unload: 'descargar',
|
|
@@ -185,6 +187,9 @@ export const es: Dictionary = {
|
|
|
185
187
|
},
|
|
186
188
|
|
|
187
189
|
expressions: {
|
|
190
|
+
characters: 'caracteres',
|
|
191
|
+
inclusive: 'inclusivo',
|
|
192
|
+
exclusive: 'exclusivo',
|
|
188
193
|
first: 'primero',
|
|
189
194
|
last: 'último',
|
|
190
195
|
next: 'siguiente',
|
package/src/dictionaries/fr.ts
CHANGED
|
@@ -90,15 +90,21 @@ export const fr: Dictionary = {
|
|
|
90
90
|
events: {
|
|
91
91
|
click: 'clic',
|
|
92
92
|
dblclick: 'doubleclic',
|
|
93
|
-
mousedown:
|
|
94
|
-
|
|
93
|
+
// mousedown/mouseup: English passthrough — no native form round-trips on the
|
|
94
|
+
// parse side (V3c probe 2026-07-14: fused forms captured verbatim, split forms
|
|
95
|
+
// shattered to their first word — live broken listeners in repeat-until-event).
|
|
96
|
+
// The Batch-2 id-keyup precedent; revisit if S5b + tokenizer gain native entries.
|
|
97
|
+
mousedown: 'mousedown',
|
|
98
|
+
mouseup: 'mouseup',
|
|
95
99
|
mouseenter: 'sourisentrer',
|
|
96
100
|
mouseleave: 'sourissortir',
|
|
97
|
-
|
|
98
|
-
|
|
101
|
+
// V3 Batch 2: fused forms split to the S5b/tokenizer-known forms (the fused
|
|
102
|
+
// spellings captured event=expression:undefined — broken listeners)
|
|
103
|
+
mouseover: 'souris dessus',
|
|
104
|
+
mouseout: 'souris dehors',
|
|
99
105
|
mousemove: 'sourisbouger',
|
|
100
|
-
keydown: '
|
|
101
|
-
keyup: '
|
|
106
|
+
keydown: 'touche bas',
|
|
107
|
+
keyup: 'touche haut',
|
|
102
108
|
keypress: 'touchepressée',
|
|
103
109
|
focus: 'focus',
|
|
104
110
|
blur: 'flou',
|
|
@@ -189,6 +195,9 @@ export const fr: Dictionary = {
|
|
|
189
195
|
},
|
|
190
196
|
|
|
191
197
|
expressions: {
|
|
198
|
+
characters: 'caractères',
|
|
199
|
+
inclusive: 'inclusif',
|
|
200
|
+
exclusive: 'exclusif',
|
|
192
201
|
first: 'premier',
|
|
193
202
|
last: 'dernier',
|
|
194
203
|
next: 'suivant',
|
package/src/dictionaries/he.ts
CHANGED
package/src/dictionaries/hi.ts
CHANGED
|
@@ -60,13 +60,13 @@ export const hindiDictionary: Dictionary = {
|
|
|
60
60
|
behavior: 'व्यवहार',
|
|
61
61
|
focus: 'फोकस',
|
|
62
62
|
blur: 'धुंधला',
|
|
63
|
-
clone: '
|
|
63
|
+
clone: 'क्लोन', // Batch 3: कॉपी is the copy verb — rendered clone parsed as action=copy
|
|
64
64
|
prepend: 'जोड़ें_शुरू',
|
|
65
65
|
breakpoint: 'ब्रेकप्वाइंट',
|
|
66
66
|
clear: 'साफ़-करें',
|
|
67
67
|
close: 'बंद-करें',
|
|
68
68
|
open: 'खोलें',
|
|
69
|
-
select: '
|
|
69
|
+
select: 'चिह्नित-करें', // Batch 3: चुनें is the pick keyword — bare select rendered with it parses null
|
|
70
70
|
socket: 'सॉकेट',
|
|
71
71
|
},
|
|
72
72
|
|
|
@@ -218,6 +218,7 @@ export const hindiDictionary: Dictionary = {
|
|
|
218
218
|
},
|
|
219
219
|
|
|
220
220
|
expressions: {
|
|
221
|
+
characters: 'अक्षर',
|
|
221
222
|
first: 'पहला',
|
|
222
223
|
last: 'अंतिम',
|
|
223
224
|
next: 'अगला',
|
package/src/dictionaries/id.ts
CHANGED
|
@@ -64,9 +64,9 @@ export const id: Dictionary = {
|
|
|
64
64
|
install: 'pasang',
|
|
65
65
|
breakpoint: 'titik-henti',
|
|
66
66
|
clear: 'bersihkan', // hapus is the remove PRIMARY in the profile
|
|
67
|
-
close: '
|
|
67
|
+
close: 'tutupkan', // Batch 3: tutup is the hide keyword — rendered close parsed as action=hide
|
|
68
68
|
open: 'buka',
|
|
69
|
-
select: '
|
|
69
|
+
select: 'tandai', // Batch 3: pilih is the pick keyword — bare select rendered with it parses null
|
|
70
70
|
clone: 'klon',
|
|
71
71
|
prepend: 'awali',
|
|
72
72
|
},
|
|
@@ -92,17 +92,27 @@ export const id: Dictionary = {
|
|
|
92
92
|
|
|
93
93
|
events: {
|
|
94
94
|
click: 'klik',
|
|
95
|
-
dblclick: '
|
|
96
|
-
mousedown:
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
95
|
+
dblclick: 'dblclick',
|
|
96
|
+
// mousedown/mouseup: English passthrough — no native form round-trips on the
|
|
97
|
+
// parse side (V3c probe 2026-07-14: fused forms captured verbatim, split forms
|
|
98
|
+
// shattered to their first word — live broken listeners in repeat-until-event).
|
|
99
|
+
// The Batch-2 id-keyup precedent; revisit if S5b + tokenizer gain native entries.
|
|
100
|
+
mousedown: 'mousedown',
|
|
101
|
+
mouseup: 'mouseup',
|
|
102
|
+
mouseenter: 'mouseenter',
|
|
103
|
+
mouseleave: 'mouseleave',
|
|
104
|
+
// V3 Batch 2: mouse_atas/mouse_luar captured no event (the S5b forms
|
|
105
|
+
// `mouse masuk`/`mouse keluar` are aspirational — they don't tokenize
|
|
106
|
+
// either) — realigned to the tokenizer-registered natives. keydown keeps
|
|
107
|
+
// tekan_tombol (captures keydown via the registered `tekan`; S5b-aliased).
|
|
108
|
+
// keyup has NO parseable native (lepas is unregistered) → English
|
|
109
|
+
// passthrough, matching the blur/reset precedent below.
|
|
110
|
+
mouseover: 'arahkan',
|
|
111
|
+
mouseout: 'tinggalkan',
|
|
112
|
+
mousemove: 'mousemove',
|
|
103
113
|
keydown: 'tekan_tombol',
|
|
104
|
-
keyup: '
|
|
105
|
-
keypress: '
|
|
114
|
+
keyup: 'keyup',
|
|
115
|
+
keypress: 'keypress',
|
|
106
116
|
focus: 'fokus',
|
|
107
117
|
blur: 'blur',
|
|
108
118
|
change: 'ubah',
|
|
@@ -113,10 +123,12 @@ export const id: Dictionary = {
|
|
|
113
123
|
unload: 'bongkar',
|
|
114
124
|
resize: 'ubah_ukuran',
|
|
115
125
|
scroll: 'gulir',
|
|
116
|
-
touchstart: '
|
|
117
|
-
touchend: '
|
|
118
|
-
touchmove: '
|
|
119
|
-
|
|
126
|
+
touchstart: 'touchstart',
|
|
127
|
+
touchend: 'touchend',
|
|
128
|
+
touchmove: 'touchmove',
|
|
129
|
+
// V3c burn-down (2026-07-14): English passthrough — no native form round-trips
|
|
130
|
+
// on the parse side (probe: split forms shatter, fused forms capture verbatim).
|
|
131
|
+
touchcancel: 'touchcancel',
|
|
120
132
|
},
|
|
121
133
|
|
|
122
134
|
logical: {
|
|
@@ -192,6 +204,9 @@ export const id: Dictionary = {
|
|
|
192
204
|
},
|
|
193
205
|
|
|
194
206
|
expressions: {
|
|
207
|
+
characters: 'karakter',
|
|
208
|
+
inclusive: 'inklusif',
|
|
209
|
+
exclusive: 'eksklusif',
|
|
195
210
|
first: 'pertama',
|
|
196
211
|
last: 'terakhir',
|
|
197
212
|
next: 'berikutnya',
|
package/src/dictionaries/it.ts
CHANGED
|
@@ -89,8 +89,12 @@ export const it: Dictionary = {
|
|
|
89
89
|
events: {
|
|
90
90
|
click: 'clic',
|
|
91
91
|
dblclick: 'doppioclic',
|
|
92
|
-
mousedown:
|
|
93
|
-
|
|
92
|
+
// mousedown/mouseup: English passthrough — no native form round-trips on the
|
|
93
|
+
// parse side (V3c probe 2026-07-14: fused forms captured verbatim, split forms
|
|
94
|
+
// shattered to their first word — live broken listeners in repeat-until-event).
|
|
95
|
+
// The Batch-2 id-keyup precedent; revisit if S5b + tokenizer gain native entries.
|
|
96
|
+
mousedown: 'mousedown',
|
|
97
|
+
mouseup: 'mouseup',
|
|
94
98
|
mouseenter: 'mouseentra',
|
|
95
99
|
mouseleave: 'mouseesce',
|
|
96
100
|
mouseover: 'mousesopra',
|
|
@@ -100,11 +104,11 @@ export const it: Dictionary = {
|
|
|
100
104
|
keyup: 'tastosu',
|
|
101
105
|
keypress: 'tastopremi',
|
|
102
106
|
focus: 'fuoco',
|
|
103
|
-
blur: '
|
|
107
|
+
blur: 'sfuocare', // Batch 3: the noun form parsed the blur command with no patient; the verb round-trips both event and command slots
|
|
104
108
|
change: 'cambio',
|
|
105
109
|
input: 'input',
|
|
106
110
|
submit: 'invio',
|
|
107
|
-
reset: '
|
|
111
|
+
reset: 'reimpostare', // Batch 3: English passthrough captured on.event as expression — profile verb round-trips
|
|
108
112
|
load: 'carica',
|
|
109
113
|
unload: 'scarica',
|
|
110
114
|
resize: 'ridimensiona',
|
|
@@ -188,6 +192,9 @@ export const it: Dictionary = {
|
|
|
188
192
|
},
|
|
189
193
|
|
|
190
194
|
expressions: {
|
|
195
|
+
characters: 'caratteri',
|
|
196
|
+
inclusive: 'inclusivo',
|
|
197
|
+
exclusive: 'esclusivo',
|
|
191
198
|
first: 'primo',
|
|
192
199
|
last: 'ultimo',
|
|
193
200
|
next: 'prossimo',
|
package/src/dictionaries/ja.ts
CHANGED
|
@@ -63,7 +63,7 @@ export const ja: Dictionary = {
|
|
|
63
63
|
clear: 'クリア',
|
|
64
64
|
close: '閉じる',
|
|
65
65
|
open: '開く',
|
|
66
|
-
select: '
|
|
66
|
+
select: '選ぶ', // Batch 3: 選択 is the pick keyword — bare select rendered with it parses null
|
|
67
67
|
clone: '複製',
|
|
68
68
|
prepend: '先頭追加',
|
|
69
69
|
socket: 'ソケット',
|
|
@@ -90,17 +90,22 @@ export const ja: Dictionary = {
|
|
|
90
90
|
|
|
91
91
|
events: {
|
|
92
92
|
click: 'クリック',
|
|
93
|
-
dblclick: '
|
|
93
|
+
dblclick: 'dblclick',
|
|
94
94
|
mousedown: 'マウス押下',
|
|
95
95
|
mouseup: 'マウス解放',
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
96
|
+
// V3c burn-down (2026-07-14): English passthrough — no native form round-trips
|
|
97
|
+
// on the parse side (probe: split forms shatter, fused forms capture verbatim).
|
|
98
|
+
mouseenter: 'mouseenter',
|
|
99
|
+
mouseleave: 'mouseleave',
|
|
100
|
+
// V3 Batch 2: kanji compounds realigned to the S5b/tokenizer katakana
|
|
101
|
+
// loanwords (the standard JS event terms; the compounds captured
|
|
102
|
+
// event=expression:undefined — broken listeners)
|
|
103
|
+
mouseover: 'マウスオーバー',
|
|
104
|
+
mouseout: 'マウスアウト',
|
|
105
|
+
mousemove: 'mousemove',
|
|
106
|
+
keydown: 'キーダウン',
|
|
107
|
+
keyup: 'キーアップ',
|
|
108
|
+
keypress: 'キープレス',
|
|
104
109
|
focus: 'フォーカス',
|
|
105
110
|
blur: 'ぼかし',
|
|
106
111
|
change: '変更',
|
|
@@ -108,13 +113,13 @@ export const ja: Dictionary = {
|
|
|
108
113
|
submit: '送信',
|
|
109
114
|
reset: 'リセット',
|
|
110
115
|
load: '読み込み',
|
|
111
|
-
unload: '
|
|
116
|
+
unload: 'unload',
|
|
112
117
|
resize: 'サイズ変更',
|
|
113
118
|
scroll: 'スクロール',
|
|
114
|
-
touchstart: '
|
|
115
|
-
touchend: '
|
|
116
|
-
touchmove: '
|
|
117
|
-
touchcancel: '
|
|
119
|
+
touchstart: 'touchstart',
|
|
120
|
+
touchend: 'touchend',
|
|
121
|
+
touchmove: 'touchmove',
|
|
122
|
+
touchcancel: 'touchcancel',
|
|
118
123
|
},
|
|
119
124
|
|
|
120
125
|
logical: {
|
|
@@ -191,6 +196,9 @@ export const ja: Dictionary = {
|
|
|
191
196
|
},
|
|
192
197
|
|
|
193
198
|
expressions: {
|
|
199
|
+
characters: '文字',
|
|
200
|
+
inclusive: '含む',
|
|
201
|
+
exclusive: '除く',
|
|
194
202
|
first: '最初',
|
|
195
203
|
last: '最後',
|
|
196
204
|
next: '次',
|
package/src/dictionaries/ko.ts
CHANGED
|
@@ -62,7 +62,7 @@ export const ko: Dictionary = {
|
|
|
62
62
|
clear: '지우기',
|
|
63
63
|
close: '닫기',
|
|
64
64
|
open: '열기',
|
|
65
|
-
select: '
|
|
65
|
+
select: '고르기', // Batch 3: 선택 is the pick keyword — bare select rendered with it parses null
|
|
66
66
|
clone: '복제',
|
|
67
67
|
prepend: '앞에추가',
|
|
68
68
|
socket: '소켓',
|
|
@@ -105,14 +105,16 @@ export const ko: Dictionary = {
|
|
|
105
105
|
change: '변경',
|
|
106
106
|
input: '입력',
|
|
107
107
|
submit: '제출',
|
|
108
|
-
reset: '
|
|
108
|
+
reset: '재설정', // Batch 3: 리셋 captured on.event as expression (broken listener) — profile word round-trips
|
|
109
109
|
load: '로드',
|
|
110
|
-
unload: '
|
|
110
|
+
unload: 'unload',
|
|
111
111
|
resize: '리사이즈',
|
|
112
112
|
scroll: '스크롤',
|
|
113
|
-
|
|
113
|
+
// V3c burn-down (2026-07-14): English passthrough — no native form round-trips
|
|
114
|
+
// on the parse side (probe: split forms shatter, fused forms capture verbatim).
|
|
115
|
+
touchstart: 'touchstart',
|
|
114
116
|
touchend: '터치종료',
|
|
115
|
-
touchmove: '
|
|
117
|
+
touchmove: 'touchmove',
|
|
116
118
|
touchcancel: '터치취소',
|
|
117
119
|
},
|
|
118
120
|
|
|
@@ -190,6 +192,9 @@ export const ko: Dictionary = {
|
|
|
190
192
|
},
|
|
191
193
|
|
|
192
194
|
expressions: {
|
|
195
|
+
characters: '문자',
|
|
196
|
+
inclusive: '포함',
|
|
197
|
+
exclusive: '제외',
|
|
193
198
|
first: '첫번째',
|
|
194
199
|
last: '마지막',
|
|
195
200
|
next: '다음',
|
package/src/dictionaries/ms.ts
CHANGED
|
@@ -66,7 +66,7 @@ export const malayDictionary: Dictionary = {
|
|
|
66
66
|
clear: 'bersihkan', // padam is a remove alternative in the profile
|
|
67
67
|
close: 'tutup',
|
|
68
68
|
open: 'buka',
|
|
69
|
-
select: '
|
|
69
|
+
select: 'tandai', // Batch 3: pilih is the pick keyword — bare select rendered with it parses null
|
|
70
70
|
socket: 'soket', // derived from the ms profile (socket.primary); see generate-i18n-dictionaries
|
|
71
71
|
},
|
|
72
72
|
|
|
@@ -212,6 +212,9 @@ export const malayDictionary: Dictionary = {
|
|
|
212
212
|
},
|
|
213
213
|
|
|
214
214
|
expressions: {
|
|
215
|
+
characters: 'aksara',
|
|
216
|
+
inclusive: 'inklusif',
|
|
217
|
+
exclusive: 'eksklusif',
|
|
215
218
|
first: 'pertama',
|
|
216
219
|
last: 'terakhir',
|
|
217
220
|
next: 'seterusnya',
|
package/src/dictionaries/pl.ts
CHANGED
|
@@ -66,7 +66,7 @@ export const pl: Dictionary = {
|
|
|
66
66
|
clear: 'zeruj', // wyczyść is a remove alternative in the profile
|
|
67
67
|
close: 'zamknij',
|
|
68
68
|
open: 'otwórz',
|
|
69
|
-
select: '
|
|
69
|
+
select: 'zaznacz', // Batch 3: wybierz is the pick keyword — bare select rendered with it parses null
|
|
70
70
|
clone: 'sklonuj',
|
|
71
71
|
prepend: 'poprzedź',
|
|
72
72
|
focus: 'skup',
|
|
@@ -94,8 +94,12 @@ export const pl: Dictionary = {
|
|
|
94
94
|
events: {
|
|
95
95
|
click: 'kliknięcie',
|
|
96
96
|
dblclick: 'podwójnekliknięcie',
|
|
97
|
-
mousedown:
|
|
98
|
-
|
|
97
|
+
// mousedown/mouseup: English passthrough — no native form round-trips on the
|
|
98
|
+
// parse side (V3c probe 2026-07-14: fused forms captured verbatim, split forms
|
|
99
|
+
// shattered to their first word — live broken listeners in repeat-until-event).
|
|
100
|
+
// The Batch-2 id-keyup precedent; revisit if S5b + tokenizer gain native entries.
|
|
101
|
+
mousedown: 'mousedown',
|
|
102
|
+
mouseup: 'mouseup',
|
|
99
103
|
mouseenter: 'myszwejście',
|
|
100
104
|
mouseleave: 'myszwyjście',
|
|
101
105
|
mouseover: 'mysznad',
|
|
@@ -108,8 +112,8 @@ export const pl: Dictionary = {
|
|
|
108
112
|
blur: 'rozmycie',
|
|
109
113
|
change: 'zmiana',
|
|
110
114
|
input: 'wejście',
|
|
111
|
-
submit: '
|
|
112
|
-
reset: '
|
|
115
|
+
submit: 'wysłaniu', // Batch 3: wyślij is the send verb — on-submit listener captured event "send"
|
|
116
|
+
reset: 'zresetuj', // Batch 3: resetuj captured on.event as expression (broken listener) — profile word round-trips
|
|
113
117
|
load: 'załaduj',
|
|
114
118
|
unload: 'wyładuj',
|
|
115
119
|
resize: 'zmieńrozmiar',
|
|
@@ -193,6 +197,9 @@ export const pl: Dictionary = {
|
|
|
193
197
|
},
|
|
194
198
|
|
|
195
199
|
expressions: {
|
|
200
|
+
characters: 'znaki',
|
|
201
|
+
inclusive: 'włącznie',
|
|
202
|
+
exclusive: 'wyłącznie',
|
|
196
203
|
first: 'pierwszy',
|
|
197
204
|
last: 'ostatni',
|
|
198
205
|
next: 'następny',
|