@cjlapao/ui-kit-i18n-cli 0.0.0-stage → 0.2.5

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.
Files changed (3) hide show
  1. package/dist/cli.js +2463 -0
  2. package/package.json +31 -4
  3. package/README.md +0 -3
package/dist/cli.js ADDED
@@ -0,0 +1,2463 @@
1
+ #!/usr/bin/env node
2
+
3
+ // src/scaffold.ts
4
+ import * as fs from "node:fs";
5
+ import * as path from "node:path";
6
+
7
+ // ../../common/i18n/builtIn/de.ts
8
+ var DE_KIT_CATALOG = {
9
+ kit: {
10
+ accordion: {
11
+ loadingTitle: "Wird geladen",
12
+ noItemsTitle: "Keine Eintr\xE4ge"
13
+ },
14
+ combobox: {
15
+ emptyMessage: "Keine passenden Optionen. Weiter tippen, um den eingegebenen Wert zu verwenden.",
16
+ clear: "L\xF6schen",
17
+ showOptions: "Optionen anzeigen",
18
+ loading: "Wird geladen\u2026"
19
+ },
20
+ datepicker: {
21
+ today: "Heute",
22
+ clear: "L\xF6schen",
23
+ chooseMonth: "Monat ausw\xE4hlen",
24
+ chooseYear: "Jahr ausw\xE4hlen",
25
+ panelAriaLabel: "Datum ausw\xE4hlen",
26
+ panelAriaLabelRange: "Datumsbereich ausw\xE4hlen",
27
+ chooseMonthNow: "Monat ausw\xE4hlen, derzeit {month} {year}",
28
+ chooseYearNow: "Jahr ausw\xE4hlen, derzeit {year}",
29
+ accessibleNameFallback: "Datum"
30
+ },
31
+ keyValueArrayField: {
32
+ key: "Schl\xFCssel",
33
+ value: "Wert",
34
+ addEntry: "Eintrag hinzuf\xFCgen",
35
+ duplicateKey: "Doppelter Schl\xFCssel",
36
+ empty: "Noch keine Eintr\xE4ge.",
37
+ remove: "Entfernen",
38
+ removeAria: "Schl\xFCssel {key} {index} entfernen",
39
+ limitReached: "Limit von {max} erreicht"
40
+ },
41
+ gantt: {
42
+ root: "Gantt-Diagramm",
43
+ loading: "Zeitplan wird geladen\u2026",
44
+ empty: "Keine Aufgaben vorhanden",
45
+ today: "Heute",
46
+ select: "Aufgabe ausw\xE4hlen",
47
+ move: "Aufgabe verschieben",
48
+ resize: "Aufgabe skalieren",
49
+ link: "Abh\xE4ngigkeit erstellen",
50
+ progress: "Fortschritt anpassen",
51
+ duration: "Dauer",
52
+ task: "Aufgabe",
53
+ dragReorder: "Ziehen zum Umsortieren",
54
+ resizeStart: "Beginn skalieren",
55
+ resizeEnd: "Ende skalieren",
56
+ removeDependency: "Diese Abh\xE4ngigkeit entfernen (oder Entf dr\xFCcken)",
57
+ linkFromStart: "Abh\xE4ngigkeit ab Beginn von {task} erstellen",
58
+ linkFromEnd: "Abh\xE4ngigkeit ab Ende von {task} erstellen",
59
+ collapse: "{name} reduzieren",
60
+ expand: "{name} erweitern",
61
+ zoomIn: "Vergr\xF6\xDFern",
62
+ zoomOut: "Verkleinern",
63
+ resizeColumn: "Breite der Spalte {column} \xE4ndern",
64
+ zoomDay: "Tag",
65
+ zoomWeek: "Woche",
66
+ zoomMonth: "Monat",
67
+ colOwner: "Verantwortlich",
68
+ colProgress: "Fortschritt",
69
+ delete: "L\xF6schen",
70
+ barAria: "{task}: {start} bis {end}, {duration}, {pct} % abgeschlossen",
71
+ barAriaMilestone: "{task}: {start} bis {end}, Meilenstein",
72
+ zoomQuarter: "Quartal"
73
+ },
74
+ help: {
75
+ show: "Hilfe anzeigen",
76
+ close: "Hilfe schlie\xDFen",
77
+ panelTitle: "Hilfe"
78
+ },
79
+ button: {
80
+ name: "Schaltfl\xE4che"
81
+ },
82
+ inforow: {
83
+ yes: "Ja",
84
+ no: "Nein",
85
+ copy: "In Zwischenablage kopieren",
86
+ copied: "Kopiert!",
87
+ copiedLong: "In die Zwischenablage kopiert",
88
+ copyFailed: "Kopieren fehlgeschlagen",
89
+ loading: "Wird geladen"
90
+ },
91
+ inlinepanel: {
92
+ cancel: "Abbrechen",
93
+ close: "Schlie\xDFen",
94
+ confirm: "Best\xE4tigen",
95
+ delete: "L\xF6schen",
96
+ confirmValueLabel: "Name",
97
+ typeValuePrefix: "Gib den",
98
+ typeValueSuffix: "ein, um zu best\xE4tigen:",
99
+ back: "Zur\xFCck"
100
+ },
101
+ modal: {
102
+ cancel: "Abbrechen",
103
+ closeAria: "Dialog schlie\xDFen",
104
+ confirm: "Best\xE4tigen",
105
+ delete: "L\xF6schen",
106
+ apply: "Anwenden",
107
+ confirmValueLabel: "Name",
108
+ typeValuePrefix: "Gib den",
109
+ typeValueSuffix: "ein, um zu best\xE4tigen:",
110
+ back: "Zur\xFCck"
111
+ },
112
+ notificationmodal: {
113
+ action: "Schlie\xDFen"
114
+ },
115
+ pagedpanel: {
116
+ empty: "Keine Daten verf\xFCgbar.",
117
+ previousPage: "Vorherige Seite",
118
+ nextPage: "N\xE4chste Seite",
119
+ error: "Etwas ist schiefgelaufen"
120
+ },
121
+ useravatar: {
122
+ fallback: "Benutzer-Avatar"
123
+ },
124
+ input: {
125
+ trailingAction: "Feldaktion"
126
+ },
127
+ pill: {
128
+ remove: "Entfernen"
129
+ },
130
+ dropdownbutton: {
131
+ toggle: "Dropdown-Men\xFC umschalten"
132
+ },
133
+ tagpanel: {
134
+ group: "Tags",
135
+ showMore: "Zeige {count} weitere Tags",
136
+ collapse: "Tags einklappen",
137
+ empty: "Keine Tags"
138
+ },
139
+ progressspinner: {
140
+ loading: "Wird geladen"
141
+ },
142
+ searchbar: {
143
+ clearAria: "Suche l\xF6schen",
144
+ placeholder: "Suchen..."
145
+ },
146
+ sidemenu: {
147
+ openSidebar: "Seitenleiste \xF6ffnen",
148
+ searchPlaceholder: "Suchen",
149
+ searchAria: "Men\xFCelemente durchsuchen",
150
+ closeAria: "Men\xFC schlie\xDFen",
151
+ collapse: "Einklappen",
152
+ expandSidebar: "Seitenleiste ausklappen",
153
+ collapseSidebar: "Seitenleiste einklappen",
154
+ verbCollapse: "Einklappen",
155
+ verbExpand: "Auskklappen",
156
+ toggleSubmenu: "{verb} Untermen\xFC {label}"
157
+ },
158
+ splitview: {
159
+ moreOptions: "Weitere Optionen",
160
+ retry: "Erneut versuchen",
161
+ search: "Suchen...",
162
+ loading: "Wird geladen...",
163
+ pleaseWait: "Bitte warten...",
164
+ errorTitle: "Etwas ist schiefgelaufen",
165
+ errorSubtitle: "Ein unerwarteter Fehler ist aufgetreten.",
166
+ noItems: "Keine Eintr\xE4ge",
167
+ noItemsSubtitle: "Es sind keine Eintr\xE4ge vorhanden.",
168
+ expandList: "Liste ausklappen",
169
+ collapseList: "Liste einklappen",
170
+ expandDetails: "Details ausklappen",
171
+ collapseDetails: "Details einklappen",
172
+ noSelection: "Kein Eintrag ausgew\xE4hlt",
173
+ noSelectionSubtitle: "W\xE4hlen Sie in der Liste einen Eintrag aus, um seine Details zu sehen."
174
+ },
175
+ sidepanel: {
176
+ closeAria: "Panel schlie\xDFen",
177
+ resize: "Panelgr\xF6\xDFe \xE4ndern"
178
+ },
179
+ smartgrid: {
180
+ searchAria: "Elemente durchsuchen",
181
+ searchPlaceholder: "Elemente durchsuchen",
182
+ addItems: "Elemente hinzuf\xFCgen",
183
+ close: "Schlie\xDFen",
184
+ closeAria: "Elementpalette schlie\xDFen",
185
+ editLayout: "Layout bearbeiten",
186
+ done: "Fertig",
187
+ resetLayout: "Layout zur\xFCcksetzen",
188
+ undo: "R\xFCckg\xE4ngig",
189
+ redo: "Wiederholen",
190
+ undoTitle: "R\xFCckg\xE4ngig (Strg+Z)",
191
+ redoTitle: "Wiederholen (Strg+Umschalt+Z)",
192
+ dropToRemove: "Hierher ziehen zum Entfernen",
193
+ releaseToRemove: "Loslassen zum Entfernen",
194
+ sectionTitleAria: "Abschnittstitel",
195
+ untitledSection: "Unbenannter Abschnitt",
196
+ newSection: "Neuer Abschnitt",
197
+ clickToRename: "Klicken zum Umbenennen",
198
+ reorderHint: "Ziehen zum Neu ordnen, oder fokussieren und die Pfeiltasten hoch/runter verwenden",
199
+ reorderAria: "Abschnitt {title} neu ordnen",
200
+ removeSection: "Abschnitt und alle Elemente entfernen",
201
+ removeRow: "Zeile entfernen",
202
+ emptyRow: "Leere Zeile. Karte hierher ziehen.",
203
+ resizeColumnsAria: "Trenner \u2014 links/rechts Pfeiltasten verschieben eine Spalte",
204
+ resizeItemAria: "{title} breiter/schmaler \u2014 links/rechts Pfeiltasten verschieben eine Spalte",
205
+ resizeRowHint: "Ziehen zum \xC4ndern der Zeilenh\xF6he, oder fokussieren und die Pfeiltasten hoch/runter verwenden",
206
+ resizeRowAria: "Zeilenh\xF6he \xE4ndern \u2014 hoch/runter Pfeiltasten verschieben eine Zeile",
207
+ addItemToRow: "Element zur Zeile hinzuf\xFCgen",
208
+ addItemToRowAria: "Element zur Zeile {title} hinzuf\xFCgen",
209
+ addItem: "Element hinzuf\xFCgen",
210
+ addNewItem: "Neues Element",
211
+ dropForNewRow: "Oder hierher ziehen, um ein Element in einer neuen Zeile hinzuzuf\xFCgen",
212
+ dropForNewSection: "Oder ziehen Sie eine Karte hierher, um einen Abschnitt zu erstellen und sie dort abzulegen",
213
+ addNewSection: "Element hinzuf\xFCgen, um neuen Abschnitt zu erstellen",
214
+ item: "Element",
215
+ liftHint: "{title}. Mit Enter aufnehmen, dann mit den Pfeiltasten bewegen.",
216
+ undone: "R\xFCckg\xE4ngig gemacht",
217
+ redone: "Wiederholt",
218
+ layoutReset: "Layout auf die Standardwerte zur\xFCckgesetzt",
219
+ added: "{title} hinzugef\xFCgt",
220
+ spacerAdded: "Abstandshalter hinzugef\xFCgt",
221
+ removed: "{title} entfernt",
222
+ sectionRemoved: "Abschnitt {title} entfernt",
223
+ sectionMovedUp: "Abschnitt {title} nach oben verschoben",
224
+ sectionMovedDown: "Abschnitt {title} nach unten verschoben",
225
+ movedBetween: "{from} wurde {position} {to} verschoben",
226
+ movedBefore: "vor",
227
+ movedAfter: "nach",
228
+ rowHeight: "Zeilenh\xF6he {value} von {max}",
229
+ columnsResized: "{left} {leftValue} von {max} Spalten, {right} {rightValue}",
230
+ lifted: "{title} aufgenommen. Mit den Pfeiltasten bewegen, Enter platziert, Escape bricht ab.",
231
+ placed: "{title} platziert",
232
+ moveCancelled: "Verschieben abgebrochen",
233
+ edgeOfRow: "Rand der Zeile",
234
+ topRow: "Oberste Zeile",
235
+ bottomRow: "Unterste Zeile"
236
+ },
237
+ spinner: {
238
+ loading: "Wird geladen"
239
+ },
240
+ table: {
241
+ empty: "Keine Daten anzuzeigen",
242
+ tableView: "Tabellenansicht",
243
+ panelView: "Panelansicht",
244
+ switchToTableView: "Zur Tabellenansicht wechseln",
245
+ switchToPanelView: "Zur Panelansicht wechseln",
246
+ columns: "Spalten",
247
+ toggleColumnVisibility: "Sichtbarkeit von Spalten umschalten",
248
+ groupBy: "Gruppieren nach",
249
+ configureGrouping: "Gruppierung der Zeilen konfigurieren",
250
+ clear: "L\xF6schen",
251
+ none: "Keine",
252
+ hidden: "ausgeblendet",
253
+ showGroupHeader: "Gruppenkopf anzeigen",
254
+ stickyColumns: "Fixierte Spalten",
255
+ configureSticky: "Fixierte Spalten konfigurieren",
256
+ clearAll: "Alle zur\xFCcksetzen",
257
+ sortAscending: "Aufsteigend sortieren",
258
+ sortDescending: "Absteigend sortieren",
259
+ clearSort: "Sortierung aufheben",
260
+ toggleSort: "Sortierung umschalten",
261
+ expandGroup: "Gruppe {name} aufklappen",
262
+ collapseGroup: "Gruppe {name} zuklappen",
263
+ showingResults: "Zeige {from} bis {to} von {total} Ergebnissen",
264
+ perPage: "{size} pro Seite",
265
+ previous: "Zur\xFCck",
266
+ next: "Weiter",
267
+ pageOf: "Seite {page} von {pages}"
268
+ },
269
+ toast: {
270
+ closeAria: "Benachrichtigung schlie\xDFen"
271
+ },
272
+ slider: {
273
+ label: "Schieberegler",
274
+ min: "Mindestwert",
275
+ max: "Maximalwert",
276
+ minOf: "{label}: Mindestwert",
277
+ maxOf: "{label}: Maximalwert"
278
+ },
279
+ rating: {
280
+ label: "Bewertung",
281
+ value: "{count, plural, one {# Stern} other {# Sterne}}"
282
+ },
283
+ inputotp: {
284
+ label: "Einmalpasswort",
285
+ cell: "{label}, Zeichen {index} von {total}"
286
+ },
287
+ passwordinput: {
288
+ show: "Passwort anzeigen",
289
+ hide: "Passwort verbergen"
290
+ },
291
+ picker: {
292
+ placeholder: "Element ausw\xE4hlen\u2026",
293
+ empty: "Keine Elemente gefunden.",
294
+ loading: "Wird geladen\u2026",
295
+ search: "Suchen\u2026",
296
+ searchAll: "Alle Elemente durchsuchen\u2026",
297
+ searchIn: "{group}-Elemente durchsuchen\u2026",
298
+ searchOptions: "Optionen durchsuchen",
299
+ clearSearch: "Suche l\xF6schen",
300
+ emptyFiltered: "Keine Elemente entsprechen Ihrer Suche.",
301
+ selectedCount: "{count} ausgew\xE4hlt",
302
+ clear: "L\xF6schen",
303
+ options: "Optionen"
304
+ },
305
+ tagpicker: {
306
+ placeholder: "Ausw\xE4hlen\u2026",
307
+ search: "Suchen\u2026",
308
+ empty: "Keine Eintr\xE4ge gefunden.",
309
+ loading: "Wird geladen\u2026",
310
+ emptyFiltered: "Keine Eintr\xE4ge entsprechen Ihrer Suche.",
311
+ searchTags: "Tags durchsuchen",
312
+ clearSearch: "Suche l\xF6schen",
313
+ options: "Optionen",
314
+ create: "Erstellen",
315
+ newBadge: "neu",
316
+ remove: "{label} entfernen",
317
+ showMore: "{count} weitere Tags anzeigen",
318
+ showLess: "Weniger anzeigen",
319
+ toggle: "Optionen umschalten"
320
+ },
321
+ smartinput: {
322
+ showValues: "Werte anzeigen",
323
+ showTokens: "Tokens anzeigen",
324
+ insertVariable: "Variable einf\xFCgen",
325
+ editValue: "Wert bearbeiten",
326
+ empty: "Leer",
327
+ missing: "{count, plural, one {# fehlt} other {# fehlen}}",
328
+ couldNotResolve: "{count, plural, one {# Variable konnte nicht aufgel\xF6st werden} other {# Variablen konnten nicht aufgel\xF6st werden}}",
329
+ notFound: "nicht gefunden",
330
+ emptyValue: "leer",
331
+ noSuchVariable: "{token} \u2014 keine solche Variable",
332
+ noValue: "{token} \u2014 kein Wert",
333
+ resolvesTo: "{token} \u2192 {value}"
334
+ },
335
+ variablepicker: {
336
+ title: "Variable einf\xFCgen",
337
+ noMatches: "Nichts entspricht \u201E{term}\u201C.",
338
+ noGroupVariables: "Keine {label}-Variablen.",
339
+ searchPlaceholder: "Variablen durchsuchen...",
340
+ noVariables: "Keine Variablen verf\xFCgbar.",
341
+ close: "Schlie\xDFen"
342
+ },
343
+ dynamicformfield: {
344
+ helpTitle: "Was ist das?",
345
+ selectPlaceholder: "Ausw\xE4hlen\u2026",
346
+ listPlaceholder: "Ein Eintrag pro Zeile"
347
+ }
348
+ }
349
+ };
350
+
351
+ // ../../common/i18n/builtIn/en.ts
352
+ var EN_KIT_CATALOG = {
353
+ kit: {
354
+ accordion: {
355
+ loadingTitle: "Loading",
356
+ noItemsTitle: "No items"
357
+ },
358
+ combobox: {
359
+ emptyMessage: "No matching options. Keep typing to use what you entered.",
360
+ clear: "Clear",
361
+ showOptions: "Show options",
362
+ loading: "Loading\u2026"
363
+ },
364
+ datepicker: {
365
+ today: "Today",
366
+ clear: "Clear",
367
+ chooseMonth: "Choose month",
368
+ chooseYear: "Choose year",
369
+ panelAriaLabel: "Choose a date",
370
+ panelAriaLabelRange: "Choose a date range",
371
+ chooseMonthNow: "Choose month, now {month} {year}",
372
+ chooseYearNow: "Choose year, now {year}",
373
+ accessibleNameFallback: "Date"
374
+ },
375
+ keyValueArrayField: {
376
+ key: "Key",
377
+ value: "Value",
378
+ addEntry: "Add entry",
379
+ duplicateKey: "Duplicate key",
380
+ empty: "No entries yet.",
381
+ remove: "Remove",
382
+ removeAria: "Remove {key} {index}",
383
+ limitReached: "Limit of {max} reached"
384
+ },
385
+ gantt: {
386
+ root: "Gantt chart",
387
+ loading: "Loading timeline\u2026",
388
+ empty: "No tasks to display",
389
+ today: "Today",
390
+ select: "Select task",
391
+ move: "Move task",
392
+ resize: "Resize task",
393
+ link: "Create dependency",
394
+ progress: "Adjust progress",
395
+ duration: "Duration",
396
+ task: "Task",
397
+ dragReorder: "Drag to reorder",
398
+ resizeStart: "Resize start",
399
+ resizeEnd: "Resize end",
400
+ removeDependency: "Remove this dependency (or press Delete)",
401
+ linkFromStart: "Create dependency from start of {task}",
402
+ linkFromEnd: "Create dependency from end of {task}",
403
+ collapse: "Collapse {name}",
404
+ expand: "Expand {name}",
405
+ zoomIn: "Zoom in",
406
+ zoomOut: "Zoom out",
407
+ resizeColumn: "Resize {column} column",
408
+ zoomDay: "Day",
409
+ zoomWeek: "Week",
410
+ zoomMonth: "Month",
411
+ colOwner: "Owner",
412
+ colProgress: "Progress",
413
+ delete: "Delete",
414
+ barAria: "{task}: {start} to {end}, {duration}, {pct}% complete",
415
+ barAriaMilestone: "{task}: {start} to {end}, milestone",
416
+ zoomQuarter: "Quarter"
417
+ },
418
+ help: {
419
+ show: "Show help",
420
+ close: "Close help",
421
+ panelTitle: "Help"
422
+ },
423
+ button: {
424
+ name: "Button"
425
+ },
426
+ inforow: {
427
+ yes: "Yes",
428
+ no: "No",
429
+ copy: "Copy to clipboard",
430
+ copied: "Copied!",
431
+ copiedLong: "Copied to clipboard",
432
+ copyFailed: "Copy failed",
433
+ loading: "Loading"
434
+ },
435
+ inlinepanel: {
436
+ cancel: "Cancel",
437
+ close: "Close",
438
+ confirm: "Confirm",
439
+ delete: "Delete",
440
+ confirmValueLabel: "name",
441
+ typeValuePrefix: "Type the",
442
+ typeValueSuffix: "to confirm:",
443
+ back: "Go back"
444
+ },
445
+ modal: {
446
+ cancel: "Cancel",
447
+ closeAria: "Close dialog",
448
+ confirm: "Confirm",
449
+ delete: "Delete",
450
+ apply: "Apply",
451
+ confirmValueLabel: "name",
452
+ typeValuePrefix: "Type the",
453
+ typeValueSuffix: "to confirm:",
454
+ back: "Go back"
455
+ },
456
+ notificationmodal: {
457
+ action: "Close"
458
+ },
459
+ pagedpanel: {
460
+ empty: "No data available.",
461
+ previousPage: "Previous page",
462
+ nextPage: "Next page",
463
+ error: "Something went wrong"
464
+ },
465
+ useravatar: {
466
+ fallback: "User avatar"
467
+ },
468
+ input: {
469
+ trailingAction: "Input action"
470
+ },
471
+ pill: {
472
+ remove: "Remove"
473
+ },
474
+ dropdownbutton: {
475
+ toggle: "Toggle dropdown menu"
476
+ },
477
+ tagpanel: {
478
+ group: "Tags",
479
+ showMore: "Show {count} more tags",
480
+ collapse: "Collapse tags",
481
+ empty: "No tags"
482
+ },
483
+ progressspinner: {
484
+ loading: "Loading"
485
+ },
486
+ searchbar: {
487
+ clearAria: "Clear search",
488
+ placeholder: "Search..."
489
+ },
490
+ sidemenu: {
491
+ openSidebar: "Open sidebar",
492
+ searchPlaceholder: "Search menu",
493
+ searchAria: "Search menu items",
494
+ closeAria: "Close menu",
495
+ collapse: "Collapse",
496
+ expandSidebar: "Expand sidebar",
497
+ collapseSidebar: "Collapse sidebar",
498
+ verbCollapse: "Collapse",
499
+ verbExpand: "Expand",
500
+ toggleSubmenu: "{verb} {label} submenu"
501
+ },
502
+ splitview: {
503
+ moreOptions: "More options",
504
+ retry: "Retry",
505
+ search: "Search...",
506
+ loading: "Loading...",
507
+ pleaseWait: "Please wait...",
508
+ errorTitle: "Something went wrong",
509
+ errorSubtitle: "An unexpected error occurred.",
510
+ noItems: "No items",
511
+ noItemsSubtitle: "There are no items to display.",
512
+ expandList: "Expand list",
513
+ collapseList: "Collapse list",
514
+ expandDetails: "Expand details",
515
+ collapseDetails: "Collapse details",
516
+ noSelection: "No item selected",
517
+ noSelectionSubtitle: "Select an item from the list to view its details."
518
+ },
519
+ sidepanel: {
520
+ closeAria: "Close panel",
521
+ resize: "Resize panel"
522
+ },
523
+ smartgrid: {
524
+ searchAria: "Search items",
525
+ searchPlaceholder: "Search items",
526
+ addItems: "Add items",
527
+ close: "Close",
528
+ closeAria: "Close the item palette",
529
+ editLayout: "Edit layout",
530
+ done: "Done",
531
+ resetLayout: "Reset layout",
532
+ undo: "Undo",
533
+ redo: "Redo",
534
+ undoTitle: "Undo (Ctrl+Z)",
535
+ redoTitle: "Redo (Ctrl+Shift+Z)",
536
+ dropToRemove: "Drop here to remove",
537
+ releaseToRemove: "Release to remove",
538
+ sectionTitleAria: "Section title",
539
+ untitledSection: "Untitled Section",
540
+ newSection: "New Section",
541
+ clickToRename: "Click to rename",
542
+ reorderHint: "Drag to reorder, or focus and use the up and down arrows",
543
+ reorderAria: "Reorder section {title}",
544
+ removeSection: "Remove section and all items",
545
+ removeRow: "Remove row",
546
+ emptyRow: "Empty row. Drag a card here.",
547
+ resizeColumnsAria: "Resize spacer \u2014 left and right arrows move one column",
548
+ resizeItemAria: "Resize {title} \u2014 left and right arrows move one column",
549
+ resizeRowHint: "Drag to resize row height, or focus and use the up and down arrows",
550
+ resizeRowAria: "Resize row height \u2014 up and down arrows move one row",
551
+ addItemToRow: "Add item to row",
552
+ addItemToRowAria: "Add item to {title} row",
553
+ addItem: "Add Item",
554
+ addNewItem: "Add New Item",
555
+ dropForNewRow: "Or drop here to add item to new row",
556
+ dropForNewSection: "Or drop a card here to create a section and place it there",
557
+ addNewSection: "Add item to create new section",
558
+ item: "Item",
559
+ liftHint: "{title}. Press Enter to lift, then the arrow keys to move it.",
560
+ undone: "Undone",
561
+ redone: "Redone",
562
+ layoutReset: "Layout reset to its default",
563
+ added: "{title} added",
564
+ spacerAdded: "Spacer added",
565
+ removed: "{title} removed",
566
+ sectionRemoved: "Section {title} removed",
567
+ sectionMovedUp: "Section {title} moved up",
568
+ sectionMovedDown: "Section {title} moved down",
569
+ movedBetween: "{from} moved {position} {to}",
570
+ movedBefore: "before",
571
+ movedAfter: "after",
572
+ rowHeight: "Row height {value} of {max}",
573
+ columnsResized: "{left} {leftValue} of {max} columns, {right} {rightValue}",
574
+ lifted: "{title} lifted. Use the arrow keys to move it, Enter to place it, Escape to cancel.",
575
+ placed: "{title} placed",
576
+ moveCancelled: "Move cancelled",
577
+ edgeOfRow: "Edge of the row",
578
+ topRow: "Top row",
579
+ bottomRow: "Bottom row"
580
+ },
581
+ spinner: {
582
+ loading: "Loading"
583
+ },
584
+ table: {
585
+ empty: "No data to display",
586
+ tableView: "Table view",
587
+ panelView: "Panel view",
588
+ switchToTableView: "Switch to table view",
589
+ switchToPanelView: "Switch to panel view",
590
+ columns: "Columns",
591
+ toggleColumnVisibility: "Toggle column visibility",
592
+ groupBy: "Group by",
593
+ configureGrouping: "Configure row grouping",
594
+ clear: "Clear",
595
+ none: "None",
596
+ hidden: "hidden",
597
+ showGroupHeader: "Show group header",
598
+ stickyColumns: "Sticky columns",
599
+ configureSticky: "Configure sticky columns",
600
+ clearAll: "Clear all",
601
+ sortAscending: "Sort ascending",
602
+ sortDescending: "Sort descending",
603
+ clearSort: "Clear sort",
604
+ toggleSort: "Toggle sort",
605
+ expandGroup: "Expand group {name}",
606
+ collapseGroup: "Collapse group {name}",
607
+ showingResults: "Showing {from} to {to} of {total} results",
608
+ perPage: "{size} per page",
609
+ previous: "Previous",
610
+ next: "Next",
611
+ pageOf: "Page {page} of {pages}"
612
+ },
613
+ toast: {
614
+ closeAria: "Close notification"
615
+ },
616
+ slider: {
617
+ label: "Slider",
618
+ min: "Minimum",
619
+ max: "Maximum",
620
+ minOf: "{label} min",
621
+ maxOf: "{label} max"
622
+ },
623
+ rating: {
624
+ label: "Rating",
625
+ value: "{count, plural, one {# star} other {# stars}}"
626
+ },
627
+ inputotp: {
628
+ label: "One-time password",
629
+ cell: "{label}, character {index} of {total}"
630
+ },
631
+ passwordinput: {
632
+ show: "Show password",
633
+ hide: "Hide password"
634
+ },
635
+ picker: {
636
+ placeholder: "Select an item\u2026",
637
+ empty: "No items found.",
638
+ loading: "Loading\u2026",
639
+ search: "Search\u2026",
640
+ searchAll: "Search all items\u2026",
641
+ searchIn: "Search {group} items\u2026",
642
+ searchOptions: "Search options",
643
+ clearSearch: "Clear search",
644
+ emptyFiltered: "No items match your search.",
645
+ selectedCount: "{count} selected",
646
+ clear: "Clear",
647
+ options: "Options"
648
+ },
649
+ tagpicker: {
650
+ placeholder: "Select\u2026",
651
+ search: "Search\u2026",
652
+ empty: "No items found.",
653
+ loading: "Loading\u2026",
654
+ emptyFiltered: "No items match your search.",
655
+ searchTags: "Search tags",
656
+ clearSearch: "Clear search",
657
+ options: "Options",
658
+ create: "Create",
659
+ newBadge: "new",
660
+ remove: "Remove {label}",
661
+ showMore: "Show {count} more tags",
662
+ showLess: "Show less",
663
+ toggle: "Toggle options"
664
+ },
665
+ smartinput: {
666
+ showValues: "Show values",
667
+ showTokens: "Show tokens",
668
+ insertVariable: "Insert variable",
669
+ editValue: "Edit value",
670
+ empty: "Empty",
671
+ missing: "{count, plural, one {# missing} other {# missing}}",
672
+ couldNotResolve: "{count, plural, one {# variable could not be resolved} other {# variables could not be resolved}}",
673
+ notFound: "not found",
674
+ emptyValue: "empty",
675
+ noSuchVariable: "{token} \u2014 no such variable",
676
+ noValue: "{token} \u2014 no value",
677
+ resolvesTo: "{token} \u2192 {value}"
678
+ },
679
+ variablepicker: {
680
+ title: "Insert variable",
681
+ noMatches: "Nothing matches \u201C{term}\u201D.",
682
+ noGroupVariables: "No {label} variables.",
683
+ searchPlaceholder: "Search variables...",
684
+ noVariables: "No variables available.",
685
+ close: "Close"
686
+ },
687
+ dynamicformfield: {
688
+ helpTitle: "What is this?",
689
+ selectPlaceholder: "Select\u2026",
690
+ listPlaceholder: "One entry per line"
691
+ }
692
+ }
693
+ };
694
+
695
+ // ../../common/i18n/builtIn/es.ts
696
+ var ES_KIT_CATALOG = {
697
+ kit: {
698
+ accordion: {
699
+ loadingTitle: "Cargando",
700
+ noItemsTitle: "Sin elementos"
701
+ },
702
+ combobox: {
703
+ emptyMessage: "No hay opciones coincidentes. Sigue escribiendo para usar lo que ingresaste.",
704
+ clear: "Borrar",
705
+ showOptions: "Mostrar opciones",
706
+ loading: "Cargando\u2026"
707
+ },
708
+ datepicker: {
709
+ today: "Hoy",
710
+ clear: "Borrar",
711
+ chooseMonth: "Elegir mes",
712
+ chooseYear: "Elegir a\xF1o",
713
+ panelAriaLabel: "Elegir una fecha",
714
+ panelAriaLabelRange: "Elegir un rango de fechas",
715
+ chooseMonthNow: "Elegir mes, ahora {month} {year}",
716
+ chooseYearNow: "Elegir a\xF1o, ahora {year}",
717
+ accessibleNameFallback: "Fecha"
718
+ },
719
+ keyValueArrayField: {
720
+ key: "Clave",
721
+ value: "Valor",
722
+ addEntry: "A\xF1adir entrada",
723
+ duplicateKey: "Clave duplicada",
724
+ empty: "A\xFAn no hay entradas.",
725
+ remove: "Quitar",
726
+ removeAria: "Quitar {key} {index}",
727
+ limitReached: "L\xEDmite de {max} alcanzado"
728
+ },
729
+ gantt: {
730
+ root: "Gr\xE1fico de Gantt",
731
+ loading: "Cargando cronograma\u2026",
732
+ empty: "No hay tareas que mostrar",
733
+ today: "Hoy",
734
+ select: "Seleccionar tarea",
735
+ move: "Mover tarea",
736
+ resize: "Cambiar tama\xF1o de la tarea",
737
+ link: "Crear dependencia",
738
+ progress: "Ajustar progreso",
739
+ duration: "Duraci\xF3n",
740
+ task: "Tarea",
741
+ dragReorder: "Arrastrar para reordenar",
742
+ resizeStart: "Cambiar tama\xF1o del inicio",
743
+ resizeEnd: "Cambiar tama\xF1o del final",
744
+ removeDependency: "Quitar esta dependencia (o pulsar Eliminar)",
745
+ linkFromStart: "Crear dependencia desde el inicio de {task}",
746
+ linkFromEnd: "Crear dependencia desde el final de {task}",
747
+ collapse: "Contraer {name}",
748
+ expand: "Expandir {name}",
749
+ zoomIn: "Acercar zoom",
750
+ zoomOut: "Alejar zoom",
751
+ resizeColumn: "Cambiar el tama\xF1o de la columna {column}",
752
+ zoomDay: "D\xEDa",
753
+ zoomWeek: "Semana",
754
+ zoomMonth: "Mes",
755
+ colOwner: "Responsable",
756
+ colProgress: "Progreso",
757
+ delete: "Eliminar",
758
+ barAria: "{task}: del {start} al {end}, {duration}, {pct} % completado",
759
+ barAriaMilestone: "{task}: del {start} al {end}, hito",
760
+ zoomQuarter: "Trimestre"
761
+ },
762
+ help: {
763
+ show: "Mostrar ayuda",
764
+ close: "Cerrar ayuda",
765
+ panelTitle: "Ayuda"
766
+ },
767
+ button: {
768
+ name: "Bot\xF3n"
769
+ },
770
+ inforow: {
771
+ yes: "S\xED",
772
+ no: "No",
773
+ copy: "Copiar al portapapeles",
774
+ copied: "\xA1Copiado!",
775
+ copiedLong: "Copiado al portapapeles",
776
+ copyFailed: "Error al copiar",
777
+ loading: "Cargando"
778
+ },
779
+ inlinepanel: {
780
+ cancel: "Cancelar",
781
+ close: "Cerrar",
782
+ confirm: "Confirmar",
783
+ delete: "Eliminar",
784
+ confirmValueLabel: "nombre",
785
+ typeValuePrefix: "Escribe el",
786
+ typeValueSuffix: "para confirmar:",
787
+ back: "Volver"
788
+ },
789
+ modal: {
790
+ cancel: "Cancelar",
791
+ closeAria: "Cerrar di\xE1logo",
792
+ confirm: "Confirmar",
793
+ delete: "Eliminar",
794
+ apply: "Aplicar",
795
+ confirmValueLabel: "nombre",
796
+ typeValuePrefix: "Escribe el",
797
+ typeValueSuffix: "para confirmar:",
798
+ back: "Volver"
799
+ },
800
+ notificationmodal: {
801
+ action: "Cerrar"
802
+ },
803
+ pagedpanel: {
804
+ empty: "No hay datos disponibles.",
805
+ previousPage: "P\xE1gina anterior",
806
+ nextPage: "P\xE1gina siguiente",
807
+ error: "Algo sali\xF3 mal"
808
+ },
809
+ useravatar: {
810
+ fallback: "Avatar de usuario"
811
+ },
812
+ input: {
813
+ trailingAction: "Acci\xF3n de entrada"
814
+ },
815
+ pill: {
816
+ remove: "Quitar"
817
+ },
818
+ dropdownbutton: {
819
+ toggle: "Alternar men\xFA desplegable"
820
+ },
821
+ tagpanel: {
822
+ group: "Etiquetas",
823
+ showMore: "Mostrar {count} etiquetas m\xE1s",
824
+ collapse: "Contraer etiquetas",
825
+ empty: "Sin etiquetas"
826
+ },
827
+ progressspinner: {
828
+ loading: "Cargando"
829
+ },
830
+ searchbar: {
831
+ clearAria: "Borrar b\xFAsqueda",
832
+ placeholder: "Buscar..."
833
+ },
834
+ sidemenu: {
835
+ openSidebar: "Abrir barra lateral",
836
+ searchPlaceholder: "Buscar",
837
+ searchAria: "Buscar elementos del men\xFA",
838
+ closeAria: "Cerrar men\xFA",
839
+ collapse: "Contraer",
840
+ expandSidebar: "Expandir barra lateral",
841
+ collapseSidebar: "Contraer barra lateral",
842
+ verbCollapse: "Contraer",
843
+ verbExpand: "Expandir",
844
+ toggleSubmenu: "{verb} el submen\xFA {label}"
845
+ },
846
+ splitview: {
847
+ moreOptions: "M\xE1s opciones",
848
+ retry: "Reintentar",
849
+ search: "Buscar...",
850
+ loading: "Cargando...",
851
+ pleaseWait: "Espere...",
852
+ errorTitle: "Algo sali\xF3 mal",
853
+ errorSubtitle: "Ocurri\xF3 un error inesperado.",
854
+ noItems: "Sin elementos",
855
+ noItemsSubtitle: "No hay elementos para mostrar.",
856
+ expandList: "Expandir lista",
857
+ collapseList: "Contraer lista",
858
+ expandDetails: "Expandir detalles",
859
+ collapseDetails: "Contraer detalles",
860
+ noSelection: "Ning\xFAn elemento seleccionado",
861
+ noSelectionSubtitle: "Seleccione un elemento de la lista para ver sus detalles."
862
+ },
863
+ sidepanel: {
864
+ closeAria: "Cerrar panel",
865
+ resize: "Redimensionar panel"
866
+ },
867
+ smartgrid: {
868
+ searchAria: "Buscar elementos",
869
+ searchPlaceholder: "Buscar elementos",
870
+ addItems: "A\xF1adir elementos",
871
+ close: "Cerrar",
872
+ closeAria: "Cerrar la paleta de elementos",
873
+ editLayout: "Editar dise\xF1o",
874
+ done: "Listo",
875
+ resetLayout: "Restablecer dise\xF1o",
876
+ undo: "Deshacer",
877
+ redo: "Rehacer",
878
+ undoTitle: "Deshacer (Ctrl+Z)",
879
+ redoTitle: "Rehacer (Ctrl+May\xFAs+Z)",
880
+ dropToRemove: "Suelta aqu\xED para quitar",
881
+ releaseToRemove: "Suelta para quitar",
882
+ sectionTitleAria: "T\xEDtulo de secci\xF3n",
883
+ untitledSection: "Secci\xF3n sin t\xEDtulo",
884
+ newSection: "Nueva secci\xF3n",
885
+ clickToRename: "Clic para renombrar",
886
+ reorderHint: "Arrastra para reordenar, o enf\xF3cate y usa las flechas arriba/abajo",
887
+ reorderAria: "Reordenar la secci\xF3n {title}",
888
+ removeSection: "Quitar la secci\xF3n y todos los elementos",
889
+ removeRow: "Quitar fila",
890
+ emptyRow: "Fila vac\xEDa. Arrastra una tarjeta aqu\xED.",
891
+ resizeColumnsAria: "Redimensionar separador \u2014 las flechas izquierda/derecha mueven una columna",
892
+ resizeItemAria: "Redimensionar {title} \u2014 las flechas izquierda/derecha mueven una columna",
893
+ resizeRowHint: "Arrastra para cambiar la altura de la fila, o enf\xF3cate y usa las flechas arriba/abajo",
894
+ resizeRowAria: "Redimensionar altura de fila \u2014 las flechas arriba/abajo mueven una fila",
895
+ addItemToRow: "A\xF1adir elemento a la fila",
896
+ addItemToRowAria: "A\xF1adir elemento a la fila {title}",
897
+ addItem: "A\xF1adir elemento",
898
+ addNewItem: "Nuevo elemento",
899
+ dropForNewRow: "O suelta aqu\xED para a\xF1adir un elemento en una fila nueva",
900
+ dropForNewSection: "O suelta una tarjeta aqu\xED para crear una secci\xF3n y colocarla",
901
+ addNewSection: "A\xF1ade un elemento para crear una secci\xF3n nueva",
902
+ item: "Elemento",
903
+ liftHint: "{title}. Pulsa Enter para levantar y luego las flechas para moverlo.",
904
+ undone: "Deshecho",
905
+ redone: "Rehecho",
906
+ layoutReset: "Dise\xF1o restablecido al predeterminado",
907
+ added: "{title} a\xF1adido",
908
+ spacerAdded: "Separador a\xF1adido",
909
+ removed: "{title} quitado",
910
+ sectionRemoved: "Secci\xF3n {title} quitada",
911
+ sectionMovedUp: "Secci\xF3n {title} movida hacia arriba",
912
+ sectionMovedDown: "Secci\xF3n {title} movida hacia abajo",
913
+ movedBetween: "{from} movido {position} {to}",
914
+ movedBefore: "antes de",
915
+ movedAfter: "despu\xE9s de",
916
+ rowHeight: "Altura de fila {value} de {max}",
917
+ columnsResized: "{left} {leftValue} de {max} columnas, {right} {rightValue}",
918
+ lifted: "{title} levantado. Usa las flechas para moverlo, Enter para colocarlo, Escape para cancelar.",
919
+ placed: "{title} colocado",
920
+ moveCancelled: "Movimiento cancelado",
921
+ edgeOfRow: "Borde de la fila",
922
+ topRow: "Primera fila",
923
+ bottomRow: "\xDAltima fila"
924
+ },
925
+ spinner: {
926
+ loading: "Cargando"
927
+ },
928
+ table: {
929
+ empty: "No hay datos para mostrar",
930
+ tableView: "Vista de tabla",
931
+ panelView: "Vista de panel",
932
+ switchToTableView: "Cambiar a la vista de tabla",
933
+ switchToPanelView: "Cambiar a la vista de panel",
934
+ columns: "Columnas",
935
+ toggleColumnVisibility: "Mostrar u ocultar columnas",
936
+ groupBy: "Agrupar por",
937
+ configureGrouping: "Configurar la agrupaci\xF3n de filas",
938
+ clear: "Borrar",
939
+ none: "Ninguna",
940
+ hidden: "oculta",
941
+ showGroupHeader: "Mostrar encabezado de grupo",
942
+ stickyColumns: "Columnas fijas",
943
+ configureSticky: "Configurar columnas fijas",
944
+ clearAll: "Restablecer todo",
945
+ sortAscending: "Ordenar ascendente",
946
+ sortDescending: "Ordenar descendente",
947
+ clearSort: "Quitar ordenaci\xF3n",
948
+ toggleSort: "Alternar ordenaci\xF3n",
949
+ expandGroup: "Desplegar el grupo {name}",
950
+ collapseGroup: "Plegar el grupo {name}",
951
+ showingResults: "Mostrando {from} a {to} de {total} resultados",
952
+ perPage: "{size} por p\xE1gina",
953
+ previous: "Anterior",
954
+ next: "Siguiente",
955
+ pageOf: "P\xE1gina {page} de {pages}"
956
+ },
957
+ toast: {
958
+ closeAria: "Cerrar notificaci\xF3n"
959
+ },
960
+ slider: {
961
+ label: "Control deslizante",
962
+ min: "M\xEDnimo",
963
+ max: "M\xE1ximo",
964
+ minOf: "{label}: m\xEDnimo",
965
+ maxOf: "{label}: m\xE1ximo"
966
+ },
967
+ rating: {
968
+ label: "Valoraci\xF3n",
969
+ value: "{count, plural, one {# estrella} other {# estrellas}}"
970
+ },
971
+ inputotp: {
972
+ label: "Contrase\xF1a de un solo uso",
973
+ cell: "{label}, car\xE1cter {index} de {total}"
974
+ },
975
+ passwordinput: {
976
+ show: "Mostrar contrase\xF1a",
977
+ hide: "Ocultar contrase\xF1a"
978
+ },
979
+ picker: {
980
+ placeholder: "Selecciona un elemento\u2026",
981
+ empty: "No se encontraron elementos.",
982
+ loading: "Cargando\u2026",
983
+ search: "Buscar\u2026",
984
+ searchAll: "Buscar en todos los elementos\u2026",
985
+ searchIn: "Buscar en elementos {group}\u2026",
986
+ searchOptions: "Buscar opciones",
987
+ clearSearch: "Borrar b\xFAsqueda",
988
+ emptyFiltered: "Ning\xFAn elemento coincide con tu b\xFAsqueda.",
989
+ selectedCount: "{count} seleccionados",
990
+ clear: "Borrar",
991
+ options: "Opciones"
992
+ },
993
+ tagpicker: {
994
+ placeholder: "Seleccionar\u2026",
995
+ search: "Buscar\u2026",
996
+ empty: "No se encontraron elementos.",
997
+ loading: "Cargando\u2026",
998
+ emptyFiltered: "Ning\xFAn elemento coincide con la b\xFAsqueda.",
999
+ searchTags: "Buscar etiquetas",
1000
+ clearSearch: "Borrar b\xFAsqueda",
1001
+ options: "Opciones",
1002
+ create: "Crear",
1003
+ newBadge: "nuevo",
1004
+ remove: "Quitar {label}",
1005
+ showMore: "Mostrar {count} etiquetas m\xE1s",
1006
+ showLess: "Mostrar menos",
1007
+ toggle: "Alternar opciones"
1008
+ },
1009
+ smartinput: {
1010
+ showValues: "Mostrar valores",
1011
+ showTokens: "Mostrar tokens",
1012
+ insertVariable: "Insertar variable",
1013
+ editValue: "Editar valor",
1014
+ empty: "Vac\xEDo",
1015
+ missing: "{count, plural, one {# sin resolver} other {# sin resolver}}",
1016
+ couldNotResolve: "{count, plural, one {# variable no se pudo resolver} other {# variables no se pudieron resolver}}",
1017
+ notFound: "no encontrada",
1018
+ emptyValue: "vac\xEDo",
1019
+ noSuchVariable: "{token} \u2014 variable inexistente",
1020
+ noValue: "{token} \u2014 sin valor",
1021
+ resolvesTo: "{token} \u2192 {value}"
1022
+ },
1023
+ variablepicker: {
1024
+ title: "Insertar variable",
1025
+ noMatches: "Nada coincide con \u201C{term}\u201D.",
1026
+ noGroupVariables: "No hay variables {label}.",
1027
+ searchPlaceholder: "Buscar variables...",
1028
+ noVariables: "No hay variables disponibles.",
1029
+ close: "Cerrar"
1030
+ },
1031
+ dynamicformfield: {
1032
+ helpTitle: "\xBFQu\xE9 es esto?",
1033
+ selectPlaceholder: "Seleccionar\u2026",
1034
+ listPlaceholder: "Una entrada por l\xEDnea"
1035
+ }
1036
+ }
1037
+ };
1038
+
1039
+ // ../../common/i18n/builtIn/fr.ts
1040
+ var FR_KIT_CATALOG = {
1041
+ kit: {
1042
+ accordion: {
1043
+ loadingTitle: "Chargement",
1044
+ noItemsTitle: "Aucun \xE9l\xE9ment"
1045
+ },
1046
+ combobox: {
1047
+ emptyMessage: "Aucune option correspondante. Continuez \xE0 saisir pour utiliser ce que vous avez saisi.",
1048
+ clear: "Effacer",
1049
+ showOptions: "Afficher les options",
1050
+ loading: "Chargement\u2026"
1051
+ },
1052
+ datepicker: {
1053
+ today: "Aujourd\\'hui",
1054
+ clear: "Effacer",
1055
+ chooseMonth: "Choisir le mois",
1056
+ chooseYear: "Choisir l\\'ann\xE9e",
1057
+ panelAriaLabel: "Choisir une date",
1058
+ panelAriaLabelRange: "Choisir une plage de dates",
1059
+ chooseMonthNow: "Choisir le mois, actuellement {month} {year}",
1060
+ chooseYearNow: "Choisir l\u2019ann\xE9e, actuellement {year}",
1061
+ accessibleNameFallback: "Date"
1062
+ },
1063
+ keyValueArrayField: {
1064
+ key: "Cl\xE9",
1065
+ value: "Valeur",
1066
+ addEntry: "Ajouter une entr\xE9e",
1067
+ duplicateKey: "Cl\xE9 dupliqu\xE9e",
1068
+ empty: "Aucune entr\xE9e pour le moment.",
1069
+ remove: "Retirer",
1070
+ removeAria: "Retirer {key} {index}",
1071
+ limitReached: "Limite de {max} atteinte"
1072
+ },
1073
+ gantt: {
1074
+ root: "Graphique de Gantt",
1075
+ loading: "Chargement du planning\u2026",
1076
+ empty: "Aucune t\xE2che \xE0 afficher",
1077
+ today: "Aujourd\\'hui",
1078
+ select: "S\xE9lectionner la t\xE2che",
1079
+ move: "D\xE9placer la t\xE2che",
1080
+ resize: "Redimensionner la t\xE2che",
1081
+ link: "Cr\xE9er une d\xE9pendance",
1082
+ progress: "Ajuster l\\'avancement",
1083
+ duration: "Dur\xE9e",
1084
+ task: "T\xE2che",
1085
+ dragReorder: "Glisser pour r\xE9ordonner",
1086
+ resizeStart: "Redimensionner le d\xE9but",
1087
+ resizeEnd: "Redimensionner la fin",
1088
+ removeDependency: "Supprimer cette d\xE9pendance (ou appuyer sur Suppr)",
1089
+ linkFromStart: "Cr\xE9er une d\xE9pendance depuis le d\xE9but de {task}",
1090
+ linkFromEnd: "Cr\xE9er une d\xE9pendance depuis la fin de {task}",
1091
+ collapse: "R\xE9duire {name}",
1092
+ expand: "D\xE9velopper {name}",
1093
+ zoomIn: "Zoom avant",
1094
+ zoomOut: "Zoom arri\xE8re",
1095
+ resizeColumn: "Redimensionner la colonne {column}",
1096
+ zoomDay: "Jour",
1097
+ zoomWeek: "Semaine",
1098
+ zoomMonth: "Mois",
1099
+ colOwner: "Propri\xE9taire",
1100
+ colProgress: "Avancement",
1101
+ delete: "Supprimer",
1102
+ barAria: "{task} : du {start} au {end}, {duration}, {pct} % termin\xE9",
1103
+ barAriaMilestone: "{task} : du {start} au {end}, jalon",
1104
+ zoomQuarter: "Trimestre"
1105
+ },
1106
+ help: {
1107
+ show: "Afficher l\\'aide",
1108
+ close: "Fermer l\\'aide",
1109
+ panelTitle: "Aide"
1110
+ },
1111
+ button: {
1112
+ name: "Bouton"
1113
+ },
1114
+ inforow: {
1115
+ yes: "Oui",
1116
+ no: "Non",
1117
+ copy: "Copier dans le presse-papiers",
1118
+ copied: "Copi\xE9 !",
1119
+ copiedLong: "Copi\xE9 dans le presse-papiers",
1120
+ copyFailed: "\xC9chec de la copie",
1121
+ loading: "Chargement"
1122
+ },
1123
+ inlinepanel: {
1124
+ cancel: "Annuler",
1125
+ close: "Fermer",
1126
+ confirm: "Confirmer",
1127
+ delete: "Supprimer",
1128
+ confirmValueLabel: "nom",
1129
+ typeValuePrefix: "Saisissez le",
1130
+ typeValueSuffix: "pour confirmer :",
1131
+ back: "Retour"
1132
+ },
1133
+ modal: {
1134
+ cancel: "Annuler",
1135
+ closeAria: "Fermer la fen\xEAtre de dialogue",
1136
+ confirm: "Confirmer",
1137
+ delete: "Supprimer",
1138
+ apply: "Appliquer",
1139
+ confirmValueLabel: "nom",
1140
+ typeValuePrefix: "Saisissez le",
1141
+ typeValueSuffix: "pour confirmer :",
1142
+ back: "Retour"
1143
+ },
1144
+ notificationmodal: {
1145
+ action: "Fermer"
1146
+ },
1147
+ pagedpanel: {
1148
+ empty: "Aucune donn\xE9e disponible.",
1149
+ previousPage: "Page pr\xE9c\xE9dente",
1150
+ nextPage: "Page suivante",
1151
+ error: "Une erreur est survenue"
1152
+ },
1153
+ useravatar: {
1154
+ fallback: "Avatar d\\'utilisateur"
1155
+ },
1156
+ input: {
1157
+ trailingAction: "Action de champ"
1158
+ },
1159
+ pill: {
1160
+ remove: "Supprimer"
1161
+ },
1162
+ dropdownbutton: {
1163
+ toggle: "Basculer le menu d\xE9roulant"
1164
+ },
1165
+ tagpanel: {
1166
+ group: "\xC9tiquettes",
1167
+ showMore: "Afficher {count} \xE9tiquettes de plus",
1168
+ collapse: "Replier les \xE9tiquettes",
1169
+ empty: "Aucune \xE9tiquette"
1170
+ },
1171
+ progressspinner: {
1172
+ loading: "Chargement"
1173
+ },
1174
+ searchbar: {
1175
+ clearAria: "Effacer la recherche",
1176
+ placeholder: "Rechercher..."
1177
+ },
1178
+ sidemenu: {
1179
+ openSidebar: "Ouvrir la barre lat\xE9rale",
1180
+ searchPlaceholder: "Rechercher",
1181
+ searchAria: "Rechercher dans le menu",
1182
+ closeAria: "Fermer le menu",
1183
+ collapse: "R\xE9duire",
1184
+ expandSidebar: "D\xE9ployer la barre lat\xE9rale",
1185
+ collapseSidebar: "R\xE9duire la barre lat\xE9rale",
1186
+ verbCollapse: "R\xE9duire",
1187
+ verbExpand: "D\xE9ployer",
1188
+ toggleSubmenu: "{verb} le sous-menu {label}"
1189
+ },
1190
+ splitview: {
1191
+ moreOptions: "Plus d\\'options",
1192
+ retry: "R\xE9essayer",
1193
+ search: "Rechercher...",
1194
+ loading: "Chargement...",
1195
+ pleaseWait: "Veuillez patienter...",
1196
+ errorTitle: "Une erreur est survenue",
1197
+ errorSubtitle: "Une erreur inattendue s\\'est produite.",
1198
+ noItems: "Aucun \xE9l\xE9ment",
1199
+ noItemsSubtitle: "Aucun \xE9l\xE9ment \xE0 afficher.",
1200
+ expandList: "D\xE9velopper la liste",
1201
+ collapseList: "R\xE9duire la liste",
1202
+ expandDetails: "D\xE9velopper les d\xE9tails",
1203
+ collapseDetails: "R\xE9duire les d\xE9tails",
1204
+ noSelection: "Aucun \xE9l\xE9ment s\xE9lectionn\xE9",
1205
+ noSelectionSubtitle: "S\xE9lectionnez un \xE9l\xE9ment dans la liste pour voir ses d\xE9tails."
1206
+ },
1207
+ sidepanel: {
1208
+ closeAria: "Fermer le panneau",
1209
+ resize: "Redimensionner le panneau"
1210
+ },
1211
+ smartgrid: {
1212
+ searchAria: "Rechercher des \xE9l\xE9ments",
1213
+ searchPlaceholder: "Rechercher des \xE9l\xE9ments",
1214
+ addItems: "Ajouter des \xE9l\xE9ments",
1215
+ close: "Fermer",
1216
+ closeAria: "Fermer la palette d\\'\xE9l\xE9ments",
1217
+ editLayout: "Modifier la disposition",
1218
+ done: "Termin\xE9",
1219
+ resetLayout: "R\xE9initialiser la disposition",
1220
+ undo: "Annuler",
1221
+ redo: "R\xE9tablir",
1222
+ undoTitle: "Annuler (Ctrl+Z)",
1223
+ redoTitle: "R\xE9tablir (Ctrl+Maj+Z)",
1224
+ dropToRemove: "D\xE9poser ici pour retirer",
1225
+ releaseToRemove: "Rel\xE2cher pour retirer",
1226
+ sectionTitleAria: "Titre de section",
1227
+ untitledSection: "Section sans titre",
1228
+ newSection: "Nouvelle section",
1229
+ clickToRename: "Cliquer pour renommer",
1230
+ reorderHint: "Faire glisser pour r\xE9ordonner, ou cibler et utiliser les fl\xE8ches haut/bas",
1231
+ reorderAria: "R\xE9ordonner la section {title}",
1232
+ removeSection: "Retirer la section et tous ses \xE9l\xE9ments",
1233
+ removeRow: "Retirer la ligne",
1234
+ emptyRow: "Ligne vide. Glissez une carte ici.",
1235
+ resizeColumnsAria: "Redimensionner l\\'espacement \u2014 les fl\xE8ches gauche/droite d\xE9placent une colonne",
1236
+ resizeItemAria: "Redimensionner {title} \u2014 les fl\xE8ches gauche/droite d\xE9placent une colonne",
1237
+ resizeRowHint: "Faire glisser pour redimensionner la hauteur de ligne, ou cibler et utiliser les fl\xE8ches haut/bas",
1238
+ resizeRowAria: "Redimensionner la hauteur de ligne \u2014 les fl\xE8ches haut/bas d\xE9placent une ligne",
1239
+ addItemToRow: "Ajouter un \xE9l\xE9ment \xE0 la ligne",
1240
+ addItemToRowAria: "Ajouter un \xE9l\xE9ment \xE0 la ligne {title}",
1241
+ addItem: "Ajouter un \xE9l\xE9ment",
1242
+ addNewItem: "Nouvel \xE9l\xE9ment",
1243
+ dropForNewRow: "Ou d\xE9posez ici pour ajouter un \xE9l\xE9ment dans une nouvelle ligne",
1244
+ dropForNewSection: "Ou d\xE9posez une carte ici pour cr\xE9er une section et la placer",
1245
+ addNewSection: "Ajouter un \xE9l\xE9ment pour cr\xE9er une nouvelle section",
1246
+ item: "\xC9l\xE9ment",
1247
+ liftHint: "{title}. Appuyez sur Entr\xE9e pour soulever, puis sur les fl\xE8ches pour d\xE9placer.",
1248
+ undone: "Annul\xE9",
1249
+ redone: "R\xE9tabli",
1250
+ layoutReset: "Disposition r\xE9initialis\xE9e par d\xE9faut",
1251
+ added: "{title} ajout\xE9",
1252
+ spacerAdded: "Espacement ajout\xE9",
1253
+ removed: "{title} retir\xE9",
1254
+ sectionRemoved: "Section {title} retir\xE9e",
1255
+ sectionMovedUp: "Section {title} d\xE9plac\xE9e vers le haut",
1256
+ sectionMovedDown: "Section {title} d\xE9plac\xE9e vers le bas",
1257
+ movedBetween: "{from} d\xE9plac\xE9 {position} {to}",
1258
+ movedBefore: "avant",
1259
+ movedAfter: "apr\xE8s",
1260
+ rowHeight: "Hauteur de ligne {value} sur {max}",
1261
+ columnsResized: "{left} {leftValue} colonnes sur {max}, {right} {rightValue}",
1262
+ lifted: "{title} soulev\xE9. Utilisez les fl\xE8ches pour d\xE9placer, Entr\xE9e pour placer, \xC9chap pour annuler.",
1263
+ placed: "{title} plac\xE9",
1264
+ moveCancelled: "D\xE9placement annul\xE9",
1265
+ edgeOfRow: "Bord de la ligne",
1266
+ topRow: "Premi\xE8re ligne",
1267
+ bottomRow: "Derni\xE8re ligne"
1268
+ },
1269
+ spinner: {
1270
+ loading: "Chargement"
1271
+ },
1272
+ table: {
1273
+ empty: "Aucune donn\xE9e \xE0 afficher",
1274
+ tableView: "Vue tableau",
1275
+ panelView: "Vue panneau",
1276
+ switchToTableView: "Basculer vers la vue tableau",
1277
+ switchToPanelView: "Basculer vers la vue panneau",
1278
+ columns: "Colonnes",
1279
+ toggleColumnVisibility: "Afficher masquer les colonnes",
1280
+ groupBy: "Grouper par",
1281
+ configureGrouping: "Configurer le regroupement des lignes",
1282
+ clear: "Effacer",
1283
+ none: "Aucune",
1284
+ hidden: "masqu\xE9e",
1285
+ showGroupHeader: "Afficher l\\'en-t\xEAte de groupe",
1286
+ stickyColumns: "Colonnes fig\xE9es",
1287
+ configureSticky: "Configurer les colonnes fig\xE9es",
1288
+ clearAll: "Tout r\xE9initialiser",
1289
+ sortAscending: "Trier par ordre croissant",
1290
+ sortDescending: "Trier par ordre d\xE9croissant",
1291
+ clearSort: "Effacer le tri",
1292
+ toggleSort: "Basculer le tri",
1293
+ expandGroup: "D\xE9velopper le groupe {name}",
1294
+ collapseGroup: "R\xE9duire le groupe {name}",
1295
+ showingResults: "Affichage de {from} \xE0 {to} sur {total} r\xE9sultats",
1296
+ perPage: "{size} par page",
1297
+ previous: "Pr\xE9c\xE9dent",
1298
+ next: "Suivant",
1299
+ pageOf: "Page {page} sur {pages}"
1300
+ },
1301
+ toast: {
1302
+ closeAria: "Fermer la notification"
1303
+ },
1304
+ slider: {
1305
+ label: "Curseur",
1306
+ min: "Minimum",
1307
+ max: "Maximum",
1308
+ minOf: "{label} : minimum",
1309
+ maxOf: "{label} : maximum"
1310
+ },
1311
+ rating: {
1312
+ label: "Note",
1313
+ value: "{count, plural, one {# \xE9toile} other {# \xE9toiles}}"
1314
+ },
1315
+ inputotp: {
1316
+ label: "Mot de passe \xE0 usage unique",
1317
+ cell: "{label}, caract\xE8re {index} sur {total}"
1318
+ },
1319
+ passwordinput: {
1320
+ show: "Afficher le mot de passe",
1321
+ hide: "Masquer le mot de passe"
1322
+ },
1323
+ picker: {
1324
+ placeholder: "S\xE9lectionner un \xE9l\xE9ment\u2026",
1325
+ empty: "Aucun \xE9l\xE9ment trouv\xE9.",
1326
+ loading: "Chargement\u2026",
1327
+ search: "Rechercher\u2026",
1328
+ searchAll: "Rechercher tous les \xE9l\xE9ments\u2026",
1329
+ searchIn: "Rechercher les \xE9l\xE9ments {group}\u2026",
1330
+ searchOptions: "Rechercher des options",
1331
+ clearSearch: "Effacer la recherche",
1332
+ emptyFiltered: "Aucun \xE9l\xE9ment ne correspond \xE0 votre recherche.",
1333
+ selectedCount: "{count} s\xE9lectionn\xE9s",
1334
+ clear: "Effacer",
1335
+ options: "Options"
1336
+ },
1337
+ tagpicker: {
1338
+ placeholder: "S\xE9lectionner\u2026",
1339
+ search: "Rechercher\u2026",
1340
+ empty: "Aucun \xE9l\xE9ment trouv\xE9.",
1341
+ loading: "Chargement\u2026",
1342
+ emptyFiltered: "Aucun \xE9l\xE9ment ne correspond \xE0 la recherche.",
1343
+ searchTags: "Rechercher des \xE9tiquettes",
1344
+ clearSearch: "Effacer la recherche",
1345
+ options: "Options",
1346
+ create: "Cr\xE9er",
1347
+ newBadge: "nouveau",
1348
+ remove: "Retirer {label}",
1349
+ showMore: "Afficher {count} \xE9tiquettes de plus",
1350
+ showLess: "Afficher moins",
1351
+ toggle: "Basculer les options"
1352
+ },
1353
+ smartinput: {
1354
+ showValues: "Afficher les valeurs",
1355
+ showTokens: "Afficher les tokens",
1356
+ insertVariable: "Ins\xE9rer une variable",
1357
+ editValue: "Modifier la valeur",
1358
+ empty: "Vide",
1359
+ missing: "{count, plural, one {# manquante} other {# manquantes}}",
1360
+ couldNotResolve: "{count, plural, one {# variable impossible \xE0 r\xE9soudre} other {# variables impossibles \xE0 r\xE9soudre}}",
1361
+ notFound: "introuvable",
1362
+ emptyValue: "vide",
1363
+ noSuchVariable: "{token} \u2014 variable inexistante",
1364
+ noValue: "{token} \u2014 aucune valeur",
1365
+ resolvesTo: "{token} \u2192 {value}"
1366
+ },
1367
+ variablepicker: {
1368
+ title: "Ins\xE9rer une variable",
1369
+ noMatches: "Aucune correspondance pour \xAB {term} \xBB.",
1370
+ noGroupVariables: "Aucune variable {label}.",
1371
+ searchPlaceholder: "Rechercher des variables...",
1372
+ noVariables: "Aucune variable disponible.",
1373
+ close: "Fermer"
1374
+ },
1375
+ dynamicformfield: {
1376
+ helpTitle: "Qu\\'est-ce que c\\'est ?",
1377
+ selectPlaceholder: "S\xE9lectionner\u2026",
1378
+ listPlaceholder: "Une entr\xE9e par ligne"
1379
+ }
1380
+ }
1381
+ };
1382
+
1383
+ // ../../common/i18n/builtIn/pt.ts
1384
+ var PT_KIT_CATALOG = {
1385
+ kit: {
1386
+ accordion: {
1387
+ loadingTitle: "Carregando",
1388
+ noItemsTitle: "Sem itens"
1389
+ },
1390
+ combobox: {
1391
+ emptyMessage: "Nenhuma op\xE7\xE3o correspondente. Continue digitando para usar o que voc\xEA digitou.",
1392
+ clear: "Limpar",
1393
+ showOptions: "Mostrar op\xE7\xF5es",
1394
+ loading: "Carregando\u2026"
1395
+ },
1396
+ datepicker: {
1397
+ today: "Hoje",
1398
+ clear: "Limpar",
1399
+ chooseMonth: "Escolher m\xEAs",
1400
+ chooseYear: "Escolher ano",
1401
+ panelAriaLabel: "Escolher uma data",
1402
+ panelAriaLabelRange: "Escolher um intervalo de datas",
1403
+ chooseMonthNow: "Escolher m\xEAs, agora {month} {year}",
1404
+ chooseYearNow: "Escolher ano, agora {year}",
1405
+ accessibleNameFallback: "Data"
1406
+ },
1407
+ keyValueArrayField: {
1408
+ key: "Chave",
1409
+ value: "Valor",
1410
+ addEntry: "Adicionar entrada",
1411
+ duplicateKey: "Chave duplicada",
1412
+ empty: "Nenhuma entrada ainda.",
1413
+ remove: "Remover",
1414
+ removeAria: "Remover {key} {index}",
1415
+ limitReached: "Limite de {max} atingido"
1416
+ },
1417
+ gantt: {
1418
+ root: "Gr\xE1fico de Gantt",
1419
+ loading: "Carregando cronograma\u2026",
1420
+ empty: "Nenhuma tarefa para exibir",
1421
+ today: "Hoje",
1422
+ select: "Selecionar tarefa",
1423
+ move: "Mover tarefa",
1424
+ resize: "Redimensionar tarefa",
1425
+ link: "Criar depend\xEAncia",
1426
+ progress: "Ajustar progresso",
1427
+ duration: "Dura\xE7\xE3o",
1428
+ task: "Tarefa",
1429
+ dragReorder: "Arraste para reordenar",
1430
+ resizeStart: "Redimensionar in\xEDcio",
1431
+ resizeEnd: "Redimensionar fim",
1432
+ removeDependency: "Remover esta depend\xEAncia (ou pressione Delete)",
1433
+ linkFromStart: "Criar depend\xEAncia do in\xEDcio de {task}",
1434
+ linkFromEnd: "Criar depend\xEAncia do fim de {task}",
1435
+ collapse: "Recolher {name}",
1436
+ expand: "Expandir {name}",
1437
+ zoomIn: "Ampliar zoom",
1438
+ zoomOut: "Reduzir zoom",
1439
+ resizeColumn: "Redimensionar a coluna {column}",
1440
+ zoomDay: "Dia",
1441
+ zoomWeek: "Semana",
1442
+ zoomMonth: "M\xEAs",
1443
+ colOwner: "Respons\xE1vel",
1444
+ colProgress: "Progresso",
1445
+ delete: "Excluir",
1446
+ barAria: "{task}: de {start} a {end}, {duration}, {pct}% conclu\xEDda",
1447
+ barAriaMilestone: "{task}: de {start} a {end}, marco",
1448
+ zoomQuarter: "Trimestre"
1449
+ },
1450
+ help: {
1451
+ show: "Mostrar ajuda",
1452
+ close: "Fechar ajuda",
1453
+ panelTitle: "Ajuda"
1454
+ },
1455
+ button: {
1456
+ name: "Bot\xE3o"
1457
+ },
1458
+ inforow: {
1459
+ yes: "Sim",
1460
+ no: "N\xE3o",
1461
+ copy: "Copiar para a \xE1rea de transfer\xEAncia",
1462
+ copied: "Copiado!",
1463
+ copiedLong: "Copiado para a \xE1rea de transfer\xEAncia",
1464
+ copyFailed: "Falha ao copiar",
1465
+ loading: "Carregando"
1466
+ },
1467
+ inlinepanel: {
1468
+ cancel: "Cancelar",
1469
+ close: "Fechar",
1470
+ confirm: "Confirmar",
1471
+ delete: "Excluir",
1472
+ confirmValueLabel: "nome",
1473
+ typeValuePrefix: "Digite o",
1474
+ typeValueSuffix: "para confirmar:",
1475
+ back: "Voltar"
1476
+ },
1477
+ modal: {
1478
+ cancel: "Cancelar",
1479
+ closeAria: "Fechar di\xE1logo",
1480
+ confirm: "Confirmar",
1481
+ delete: "Excluir",
1482
+ apply: "Aplicar",
1483
+ confirmValueLabel: "nome",
1484
+ typeValuePrefix: "Digite o",
1485
+ typeValueSuffix: "para confirmar:",
1486
+ back: "Voltar"
1487
+ },
1488
+ notificationmodal: {
1489
+ action: "Fechar"
1490
+ },
1491
+ pagedpanel: {
1492
+ empty: "Nenhum dado dispon\xEDvel.",
1493
+ previousPage: "P\xE1gina anterior",
1494
+ nextPage: "P\xE1gina seguinte",
1495
+ error: "Algo deu errado"
1496
+ },
1497
+ useravatar: {
1498
+ fallback: "Avatar do usu\xE1rio"
1499
+ },
1500
+ input: {
1501
+ trailingAction: "A\xE7\xE3o do campo"
1502
+ },
1503
+ pill: {
1504
+ remove: "Remover"
1505
+ },
1506
+ dropdownbutton: {
1507
+ toggle: "Alternar menu suspenso"
1508
+ },
1509
+ tagpanel: {
1510
+ group: "Tags",
1511
+ showMore: "Mostrar {count} tags mais",
1512
+ collapse: "Recolher tags",
1513
+ empty: "Sem tags"
1514
+ },
1515
+ progressspinner: {
1516
+ loading: "Carregando"
1517
+ },
1518
+ searchbar: {
1519
+ clearAria: "Limpar busca",
1520
+ placeholder: "Buscar..."
1521
+ },
1522
+ sidemenu: {
1523
+ openSidebar: "Abrir barra lateral",
1524
+ searchPlaceholder: "Buscar",
1525
+ searchAria: "Buscar itens do menu",
1526
+ closeAria: "Fechar menu",
1527
+ collapse: "Recolher",
1528
+ expandSidebar: "Expandir barra lateral",
1529
+ collapseSidebar: "Recolher barra lateral",
1530
+ verbCollapse: "Recolher",
1531
+ verbExpand: "Expandir",
1532
+ toggleSubmenu: "{verb} o submenu {label}"
1533
+ },
1534
+ splitview: {
1535
+ moreOptions: "Mais op\xE7\xF5es",
1536
+ retry: "Tentar novamente",
1537
+ search: "Pesquisar...",
1538
+ loading: "Carregando...",
1539
+ pleaseWait: "Aguarde...",
1540
+ errorTitle: "Algo deu errado",
1541
+ errorSubtitle: "Ocorreu um erro inesperado.",
1542
+ noItems: "Nenhum item",
1543
+ noItemsSubtitle: "N\xE3o h\xE1 itens para exibir.",
1544
+ expandList: "Expandir lista",
1545
+ collapseList: "Recolher lista",
1546
+ expandDetails: "Expandir detalhes",
1547
+ collapseDetails: "Recolher detalhes",
1548
+ noSelection: "Nenhum item selecionado",
1549
+ noSelectionSubtitle: "Selecione um item da lista para ver os detalhes."
1550
+ },
1551
+ sidepanel: {
1552
+ closeAria: "Fechar painel",
1553
+ resize: "Redimensionar painel"
1554
+ },
1555
+ smartgrid: {
1556
+ searchAria: "Pesquisar itens",
1557
+ searchPlaceholder: "Pesquisar itens",
1558
+ addItems: "Adicionar itens",
1559
+ close: "Fechar",
1560
+ closeAria: "Fechar a paleta de itens",
1561
+ editLayout: "Editar layout",
1562
+ done: "Conclu\xEDdo",
1563
+ resetLayout: "Redefinir layout",
1564
+ undo: "Desfazer",
1565
+ redo: "Refazer",
1566
+ undoTitle: "Desfazer (Ctrl+Z)",
1567
+ redoTitle: "Refazer (Ctrl+Shift+Z)",
1568
+ dropToRemove: "Solte aqui para remover",
1569
+ releaseToRemove: "Solte para remover",
1570
+ sectionTitleAria: "T\xEDtulo da se\xE7\xE3o",
1571
+ untitledSection: "Se\xE7\xE3o sem t\xEDtulo",
1572
+ newSection: "Nova se\xE7\xE3o",
1573
+ clickToRename: "Clique para renomear",
1574
+ reorderHint: "Arraste para reordenar, ou foque e use as setas para cima/baixo",
1575
+ reorderAria: "Reordenar a se\xE7\xE3o {title}",
1576
+ removeSection: "Remover a se\xE7\xE3o e todos os itens",
1577
+ removeRow: "Remover linha",
1578
+ emptyRow: "Linha vazia. Arraste um cart\xE3o aqui.",
1579
+ resizeColumnsAria: "Redimensionar espa\xE7ador \u2014 as setas esquerda/direita movem uma coluna",
1580
+ resizeItemAria: "Redimensionar {title} \u2014 as setas esquerda/direita movem uma coluna",
1581
+ resizeRowHint: "Arraste para redimensionar a altura da linha, ou foque e use as setas para cima/baixo",
1582
+ resizeRowAria: "Redimensionar altura da linha \u2014 as setas para cima/baixo movem uma linha",
1583
+ addItemToRow: "Adicionar item \xE0 linha",
1584
+ addItemToRowAria: "Adicionar item \xE0 linha {title}",
1585
+ addItem: "Adicionar item",
1586
+ addNewItem: "Novo item",
1587
+ dropForNewRow: "Ou solte aqui para adicionar um item em uma nova linha",
1588
+ dropForNewSection: "Ou solte um cart\xE3o aqui para criar uma se\xE7\xE3o e coloc\xE1-lo",
1589
+ addNewSection: "Adicione um item para criar uma nova se\xE7\xE3o",
1590
+ item: "Item",
1591
+ liftHint: "{title}. Pressione Enter para levantar e depois as setas para mover.",
1592
+ undone: "Desfeito",
1593
+ redone: "Refeito",
1594
+ layoutReset: "Layout redefinido para o padr\xE3o",
1595
+ added: "{title} adicionado",
1596
+ spacerAdded: "Espa\xE7ador adicionado",
1597
+ removed: "{title} removido",
1598
+ sectionRemoved: "Se\xE7\xE3o {title} removida",
1599
+ sectionMovedUp: "Se\xE7\xE3o {title} movida para cima",
1600
+ sectionMovedDown: "Se\xE7\xE3o {title} movida para baixo",
1601
+ movedBetween: "{from} movido {position} {to}",
1602
+ movedBefore: "antes de",
1603
+ movedAfter: "depois de",
1604
+ rowHeight: "Altura da linha {value} de {max}",
1605
+ columnsResized: "{left} {leftValue} de {max} colunas, {right} {rightValue}",
1606
+ lifted: "{title} levantado. Use as setas para mover, Enter para posicionar, Escape para cancelar.",
1607
+ placed: "{title} posicionado",
1608
+ moveCancelled: "Movimento cancelado",
1609
+ edgeOfRow: "Borda da linha",
1610
+ topRow: "Primeira linha",
1611
+ bottomRow: "\xDAltima linha"
1612
+ },
1613
+ spinner: {
1614
+ loading: "Carregando"
1615
+ },
1616
+ table: {
1617
+ empty: "Nenhum dado para exibir",
1618
+ tableView: "Vis\xE3o de tabela",
1619
+ panelView: "Vis\xE3o de painel",
1620
+ switchToTableView: "Alternar para a vis\xE3o de tabela",
1621
+ switchToPanelView: "Alternar para a vis\xE3o de painel",
1622
+ columns: "Colunas",
1623
+ toggleColumnVisibility: "Alternar visibilidade das colunas",
1624
+ groupBy: "Agrupar por",
1625
+ configureGrouping: "Configurar agrupamento de linhas",
1626
+ clear: "Limpar",
1627
+ none: "Nenhuma",
1628
+ hidden: "oculta",
1629
+ showGroupHeader: "Mostrar cabe\xE7alho do grupo",
1630
+ stickyColumns: "Colunas fixas",
1631
+ configureSticky: "Configurar colunas fixas",
1632
+ clearAll: "Limpar tudo",
1633
+ sortAscending: "Ordenar crescente",
1634
+ sortDescending: "Ordenar decrescente",
1635
+ clearSort: "Limpar ordena\xE7\xE3o",
1636
+ toggleSort: "Alternar ordena\xE7\xE3o",
1637
+ expandGroup: "Expandir o grupo {name}",
1638
+ collapseGroup: "Recolher o grupo {name}",
1639
+ showingResults: "Mostrando {from} a {to} de {total} resultados",
1640
+ perPage: "{size} por p\xE1gina",
1641
+ previous: "Anterior",
1642
+ next: "Pr\xF3ximo",
1643
+ pageOf: "P\xE1gina {page} de {pages}"
1644
+ },
1645
+ toast: {
1646
+ closeAria: "Fechar notifica\xE7\xE3o"
1647
+ },
1648
+ slider: {
1649
+ label: "Controle deslizante",
1650
+ min: "M\xEDnimo",
1651
+ max: "M\xE1ximo",
1652
+ minOf: "{label}: m\xEDnimo",
1653
+ maxOf: "{label}: m\xE1ximo"
1654
+ },
1655
+ rating: {
1656
+ label: "Avalia\xE7\xE3o",
1657
+ value: "{count, plural, one {# estrela} other {# estrelas}}"
1658
+ },
1659
+ inputotp: {
1660
+ label: "Senha de uso \xFAnico",
1661
+ cell: "{label}, caractere {index} de {total}"
1662
+ },
1663
+ passwordinput: {
1664
+ show: "Mostrar senha",
1665
+ hide: "Ocultar senha"
1666
+ },
1667
+ picker: {
1668
+ placeholder: "Selecione um item\u2026",
1669
+ empty: "Nenhum item encontrado.",
1670
+ loading: "Carregando\u2026",
1671
+ search: "Buscar\u2026",
1672
+ searchAll: "Buscar em todos os itens\u2026",
1673
+ searchIn: "Buscar itens de {group}\u2026",
1674
+ searchOptions: "Buscar op\xE7\xF5es",
1675
+ clearSearch: "Limpar busca",
1676
+ emptyFiltered: "Nenhum item corresponde \xE0 sua busca.",
1677
+ selectedCount: "{count} selecionados",
1678
+ clear: "Limpar",
1679
+ options: "Op\xE7\xF5es"
1680
+ },
1681
+ tagpicker: {
1682
+ placeholder: "Selecionar\u2026",
1683
+ search: "Pesquisar\u2026",
1684
+ empty: "Nenhum item encontrado.",
1685
+ loading: "Carregando\u2026",
1686
+ emptyFiltered: "Nenhum item corresponde \xE0 pesquisa.",
1687
+ searchTags: "Pesquisar etiquetas",
1688
+ clearSearch: "Limpar pesquisa",
1689
+ options: "Op\xE7\xF5es",
1690
+ create: "Criar",
1691
+ newBadge: "novo",
1692
+ remove: "Remover {label}",
1693
+ showMore: "Mostrar {count} etiquetas a mais",
1694
+ showLess: "Mostrar menos",
1695
+ toggle: "Alternar op\xE7\xF5es"
1696
+ },
1697
+ smartinput: {
1698
+ showValues: "Mostrar valores",
1699
+ showTokens: "Mostrar tokens",
1700
+ insertVariable: "Inserir vari\xE1vel",
1701
+ editValue: "Editar valor",
1702
+ empty: "Vazio",
1703
+ missing: "{count, plural, one {# ausente} other {# ausentes}}",
1704
+ couldNotResolve: "{count, plural, one {# vari\xE1vel n\xE3o p\xF4de ser resolvida} other {# vari\xE1veis n\xE3o puderam ser resolvidas}}",
1705
+ notFound: "n\xE3o encontrada",
1706
+ emptyValue: "vazio",
1707
+ noSuchVariable: "{token} \u2014 vari\xE1vel inexistente",
1708
+ noValue: "{token} \u2014 sem valor",
1709
+ resolvesTo: "{token} \u2192 {value}"
1710
+ },
1711
+ variablepicker: {
1712
+ title: "Inserir vari\xE1vel",
1713
+ noMatches: "Nada corresponde a \u201C{term}\u201D.",
1714
+ noGroupVariables: "Nenhuma vari\xE1vel {label}.",
1715
+ searchPlaceholder: "Buscar vari\xE1veis...",
1716
+ noVariables: "Nenhuma vari\xE1vel dispon\xEDvel.",
1717
+ close: "Fechar"
1718
+ },
1719
+ dynamicformfield: {
1720
+ helpTitle: "O que \xE9 isto?",
1721
+ selectPlaceholder: "Selecionar\u2026",
1722
+ listPlaceholder: "Uma entrada por linha"
1723
+ }
1724
+ }
1725
+ };
1726
+
1727
+ // ../../common/i18n/builtIn/index.ts
1728
+ var BUILT_IN_CATALOGS = {
1729
+ en: EN_KIT_CATALOG,
1730
+ fr: FR_KIT_CATALOG,
1731
+ es: ES_KIT_CATALOG,
1732
+ de: DE_KIT_CATALOG,
1733
+ pt: PT_KIT_CATALOG
1734
+ };
1735
+ var CURATED_LOCALES = ["en", "fr", "es", "de", "pt"];
1736
+
1737
+ // src/scaffold.ts
1738
+ var EXAMPLE_USER_KEYS = {
1739
+ "app.title": "My app",
1740
+ greeting: "Hello, {name}!",
1741
+ itemsLeft: "{count, plural, one {# item left} other {# items left}}"
1742
+ };
1743
+ function scaffoldCommand(argv2) {
1744
+ const { values, bools, positionals } = parseArgs(argv2, {
1745
+ flags: { locale: "value", out: "value", all: "bool", force: "bool" }
1746
+ });
1747
+ if (positionals.length > 0) {
1748
+ process.stderr.write(`ui-kit-i18n: unexpected argument "${positionals[0]}"
1749
+ `);
1750
+ process.exit(2);
1751
+ }
1752
+ const outDir = values.get("out") ?? "./locales";
1753
+ const force = bools.has("force");
1754
+ const tags = [];
1755
+ if (bools.has("all")) tags.push(...CURATED_LOCALES);
1756
+ const single = values.get("locale");
1757
+ if (single) tags.push(single);
1758
+ if (tags.length === 0) {
1759
+ process.stderr.write("ui-kit-i18n: scaffold needs --locale <tag> or --all\n");
1760
+ process.exit(2);
1761
+ }
1762
+ let failed = false;
1763
+ for (const tag of tags) {
1764
+ if (!scaffoldOne(tag, outDir, force)) failed = true;
1765
+ }
1766
+ process.exit(failed ? 1 : 0);
1767
+ }
1768
+ function scaffoldOne(tag, outDir, force) {
1769
+ const curated = CURATED_LOCALES.includes(tag);
1770
+ const catalog = BUILT_IN_CATALOGS[tag] ?? EN_KIT_CATALOG;
1771
+ fs.mkdirSync(outDir, { recursive: true });
1772
+ const target = path.join(outDir, `${tag}.json`);
1773
+ const example = path.join(outDir, `${tag}.example.json`);
1774
+ if (!force && (fs.existsSync(target) || fs.existsSync(example))) {
1775
+ process.stderr.write(
1776
+ `ui-kit-i18n: refusing to overwrite ${target} \u2014 pass --force to replace
1777
+ `
1778
+ );
1779
+ return false;
1780
+ }
1781
+ const source = curated ? "authored translations" : "English (untranslated)";
1782
+ fs.writeFileSync(target, JSON.stringify(catalog, null, 2) + "\n");
1783
+ fs.writeFileSync(example, JSON.stringify(EXAMPLE_USER_KEYS, null, 2) + "\n");
1784
+ process.stdout.write(`scaffolded ${target} (${source}) + ${example}
1785
+ `);
1786
+ return true;
1787
+ }
1788
+
1789
+ // src/check.ts
1790
+ import * as fs2 from "node:fs";
1791
+ import * as path2 from "node:path";
1792
+
1793
+ // ../../common/i18n/warn.ts
1794
+ var warned = /* @__PURE__ */ new Set();
1795
+ function devWarnOnce(id, message) {
1796
+ if (warned.has(id)) return;
1797
+ warned.add(id);
1798
+ console.warn(`[ui-kit i18n] ${message}`);
1799
+ }
1800
+
1801
+ // ../../common/i18n/catalog.ts
1802
+ function flattenCatalog(catalog, warnPrefix = "catalog") {
1803
+ const out = {};
1804
+ walk(catalog, "", out, warnPrefix);
1805
+ return out;
1806
+ }
1807
+ function walk(node, prefix, out, warnPrefix) {
1808
+ if (node === null || typeof node !== "object") {
1809
+ if (typeof node === "string") {
1810
+ if (prefix !== "") out[prefix] = node;
1811
+ } else if (prefix !== "") {
1812
+ devWarnOnce(`${warnPrefix}:${prefix}`, `i18n: non-string leaf at "${prefix}" \u2014 skipped`);
1813
+ }
1814
+ return;
1815
+ }
1816
+ if (Array.isArray(node)) {
1817
+ node.forEach((item, index) => {
1818
+ if (typeof item === "string") {
1819
+ out[`${prefix}.${index}`] = item;
1820
+ } else if (prefix !== "") {
1821
+ devWarnOnce(
1822
+ `${warnPrefix}:${prefix}.${index}`,
1823
+ `i18n: non-string array entry at "${prefix}.${index}" \u2014 skipped`
1824
+ );
1825
+ }
1826
+ });
1827
+ return;
1828
+ }
1829
+ for (const [key, value] of Object.entries(node)) {
1830
+ walk(value, prefix === "" ? key : `${prefix}.${key}`, out, warnPrefix);
1831
+ }
1832
+ }
1833
+
1834
+ // ../../common/i18n/icu.ts
1835
+ var IcuParseError = class extends Error {
1836
+ constructor(key, source, position, reason) {
1837
+ super(`i18n: invalid ICU message for key "${key}" at position ${position}: ${reason}
1838
+ ${source}`);
1839
+ this.key = key;
1840
+ this.source = source;
1841
+ this.position = position;
1842
+ this.name = "IcuParseError";
1843
+ }
1844
+ key;
1845
+ source;
1846
+ position;
1847
+ };
1848
+ var NAME_RE = /^[A-Za-z_$][A-Za-z0-9_$\u00c0-\uffff]*/;
1849
+ var BRANCH_KEY_RE = /^[A-Za-z_$][A-Za-z0-9_$\u00c0-\uffff]*|^-?\d+(?:\.\d+)?/;
1850
+ var STYLE_RE = /^(plural|select|number|date|time)/;
1851
+ var DATE_STYLES = ["short", "medium", "long", "full"];
1852
+ function parseMessage(source, key) {
1853
+ return new Parser(source, key).parseMessage();
1854
+ }
1855
+ var Parser = class _Parser {
1856
+ constructor(src, key) {
1857
+ this.src = src;
1858
+ this.key = key;
1859
+ }
1860
+ src;
1861
+ key;
1862
+ pos = 0;
1863
+ err(reason, at = this.pos) {
1864
+ return new IcuParseError(this.key, this.src, at, reason);
1865
+ }
1866
+ /** Parse a message body (top-level or a branch body — see parseBranchBody). */
1867
+ parseMessage(inPluralBranch = false) {
1868
+ const nodes = [];
1869
+ let text = "";
1870
+ let pendingSpace = false;
1871
+ let hasContent = false;
1872
+ const flushText = () => {
1873
+ if (text !== "") {
1874
+ nodes.push({ type: "text", value: text });
1875
+ text = "";
1876
+ }
1877
+ };
1878
+ while (this.pos < this.src.length) {
1879
+ const ch = this.src[this.pos];
1880
+ if (ch === "\\") {
1881
+ if (this.src[this.pos + 1] === "'") {
1882
+ if (pendingSpace) {
1883
+ text += " ";
1884
+ pendingSpace = false;
1885
+ }
1886
+ text += "'";
1887
+ this.pos += 2;
1888
+ hasContent = true;
1889
+ continue;
1890
+ }
1891
+ if (pendingSpace) {
1892
+ text += " ";
1893
+ pendingSpace = false;
1894
+ }
1895
+ text += ch;
1896
+ this.pos += 1;
1897
+ hasContent = true;
1898
+ continue;
1899
+ }
1900
+ if (ch === "'") {
1901
+ if (this.src[this.pos + 1] === "'") {
1902
+ if (pendingSpace) {
1903
+ text += " ";
1904
+ pendingSpace = false;
1905
+ }
1906
+ text += "'";
1907
+ this.pos += 2;
1908
+ hasContent = true;
1909
+ continue;
1910
+ }
1911
+ if (pendingSpace) {
1912
+ text += " ";
1913
+ pendingSpace = false;
1914
+ }
1915
+ this.pos += 1;
1916
+ let inner = "";
1917
+ while (this.pos < this.src.length && this.src[this.pos] !== "'") {
1918
+ inner += this.src[this.pos++];
1919
+ }
1920
+ if (this.pos >= this.src.length) {
1921
+ throw this.err("unterminated quoted section \u2014 a ' opened without a closing '");
1922
+ }
1923
+ this.pos += 1;
1924
+ text += inner;
1925
+ hasContent = true;
1926
+ continue;
1927
+ }
1928
+ if (ch === "{") {
1929
+ if (pendingSpace) {
1930
+ text += " ";
1931
+ pendingSpace = false;
1932
+ }
1933
+ flushText();
1934
+ nodes.push(this.parseArg());
1935
+ hasContent = true;
1936
+ continue;
1937
+ }
1938
+ if (ch === "}") {
1939
+ throw this.err("unexpected '}' \u2014 a top-level message has no enclosing argument");
1940
+ }
1941
+ if (inPluralBranch && ch === "#") {
1942
+ if (pendingSpace) {
1943
+ text += " ";
1944
+ pendingSpace = false;
1945
+ }
1946
+ flushText();
1947
+ nodes.push({ type: "arg", name: "#" });
1948
+ hasContent = true;
1949
+ this.pos += 1;
1950
+ continue;
1951
+ }
1952
+ if (/\s/.test(ch)) {
1953
+ if (hasContent) pendingSpace = true;
1954
+ this.pos += 1;
1955
+ continue;
1956
+ }
1957
+ if (pendingSpace) {
1958
+ text += " ";
1959
+ pendingSpace = false;
1960
+ }
1961
+ text += ch;
1962
+ hasContent = true;
1963
+ this.pos += 1;
1964
+ }
1965
+ flushText();
1966
+ return nodes;
1967
+ }
1968
+ skipSpaces() {
1969
+ while (this.pos < this.src.length && /\s/.test(this.src[this.pos])) this.pos += 1;
1970
+ }
1971
+ parseArg() {
1972
+ const start = this.pos;
1973
+ this.pos += 1;
1974
+ this.skipSpaces();
1975
+ const nameMatch = NAME_RE.exec(this.src.slice(this.pos));
1976
+ if (!nameMatch) {
1977
+ throw this.err(
1978
+ `expected an argument name, got "${this.src[this.pos] ?? "end of message"}"`,
1979
+ start
1980
+ );
1981
+ }
1982
+ const name = nameMatch[0];
1983
+ this.pos += name.length;
1984
+ this.skipSpaces();
1985
+ if (this.src[this.pos] === "}") {
1986
+ this.pos += 1;
1987
+ return { type: "arg", name };
1988
+ }
1989
+ if (this.src[this.pos] !== ",") {
1990
+ throw this.err(`expected ',' or '}' after the argument name "${name}"`, this.pos);
1991
+ }
1992
+ this.pos += 1;
1993
+ this.skipSpaces();
1994
+ const styleMatch = STYLE_RE.exec(this.src.slice(this.pos));
1995
+ if (!styleMatch) {
1996
+ throw this.err(
1997
+ `expected a style (plural, select, number, date, time), got "${this.src.slice(this.pos, this.pos + 12)}"`,
1998
+ this.pos
1999
+ );
2000
+ }
2001
+ const style = styleMatch[0];
2002
+ this.pos += style.length;
2003
+ this.skipSpaces();
2004
+ if (style === "plural" || style === "select") {
2005
+ if (this.src[this.pos] === ",") this.pos += 1;
2006
+ this.skipSpaces();
2007
+ let offset = 0;
2008
+ if (style === "plural") {
2009
+ const offsetMatch = /^offset\s*[:=]/.exec(this.src.slice(this.pos));
2010
+ if (offsetMatch) {
2011
+ const afterColon = this.pos + offsetMatch[0].length;
2012
+ const numMatch = /^-?\d+/.exec(this.src.slice(afterColon));
2013
+ if (!numMatch) throw this.err("offset expects an integer", afterColon);
2014
+ offset = Number(numMatch[0]);
2015
+ this.pos = afterColon + numMatch[0].length;
2016
+ this.skipSpaces();
2017
+ if (this.src[this.pos] === ",") {
2018
+ this.pos += 1;
2019
+ this.skipSpaces();
2020
+ }
2021
+ }
2022
+ }
2023
+ const branches = this.parseBranches(start, style);
2024
+ if (!branches.has("other")) {
2025
+ throw this.err(`${style} message must have an "other" branch`, start);
2026
+ }
2027
+ if (style === "plural") return { type: "plural", name, offset, branches };
2028
+ return { type: "select", name, branches };
2029
+ }
2030
+ const options = {};
2031
+ if (this.src[this.pos] === ",") {
2032
+ this.pos += 1;
2033
+ for (; ; ) {
2034
+ this.skipSpaces();
2035
+ if (this.src[this.pos] === "}") {
2036
+ this.pos += 1;
2037
+ break;
2038
+ }
2039
+ if (this.pos >= this.src.length) throw this.err("unterminated parameter list", start);
2040
+ const commaAt = this.src.indexOf(",", this.pos);
2041
+ const braceAt = this.src.indexOf("}", this.pos);
2042
+ let tokenEnd;
2043
+ if (commaAt === -1 && braceAt === -1) throw this.err("unterminated parameter list", start);
2044
+ tokenEnd = commaAt === -1 ? braceAt : braceAt === -1 ? commaAt : Math.min(commaAt, braceAt);
2045
+ const rawToken = this.src.slice(this.pos, tokenEnd).trim();
2046
+ this.pos = tokenEnd;
2047
+ if (rawToken === "") throw this.err("empty parameter", this.pos);
2048
+ const sep = rawToken.indexOf("=");
2049
+ if (sep !== -1) {
2050
+ const optKey = rawToken.slice(0, sep).trim();
2051
+ const value = rawToken.slice(sep + 1).trim();
2052
+ if (optKey === "" || value === "") {
2053
+ throw this.err(`invalid parameter "${rawToken}" (expected key=value)`, this.pos);
2054
+ }
2055
+ options[optKey] = value;
2056
+ } else if (style === "date" || style === "time") {
2057
+ if (DATE_STYLES.includes(rawToken)) {
2058
+ options[style === "date" ? "dateStyle" : "timeStyle"] = rawToken;
2059
+ } else {
2060
+ options.skeleton = rawToken;
2061
+ }
2062
+ } else {
2063
+ throw this.err(`expected a "key=value" parameter, got "${rawToken}"`, this.pos);
2064
+ }
2065
+ if (this.src[this.pos] === ",") {
2066
+ this.pos += 1;
2067
+ continue;
2068
+ }
2069
+ if (this.src[this.pos] !== "}") {
2070
+ throw this.err(`expected ',' or '}' after the parameter "${rawToken}"`, this.pos);
2071
+ }
2072
+ this.pos += 1;
2073
+ break;
2074
+ }
2075
+ } else if (this.src[this.pos] !== "}") {
2076
+ throw this.err(`expected '}' after the style "${style}"`, this.pos);
2077
+ } else {
2078
+ this.pos += 1;
2079
+ }
2080
+ return { type: "arg", name, style, options };
2081
+ }
2082
+ /**
2083
+ * Parse `key {…} key {…} …` up to the matching '}'. The body is sliced
2084
+ * (depth-counting over quotes/braces) and parsed standalone so a top-level
2085
+ * '}' inside it cannot escape the branch.
2086
+ */
2087
+ parseBranches(start, style) {
2088
+ const branches = /* @__PURE__ */ new Map();
2089
+ for (; ; ) {
2090
+ this.skipSpaces();
2091
+ if (this.pos >= this.src.length) throw this.err("unterminated branch (missing '}')", start);
2092
+ if (this.src[this.pos] === "}") {
2093
+ this.pos += 1;
2094
+ break;
2095
+ }
2096
+ if (this.src[this.pos] === "=") {
2097
+ throw this.err(
2098
+ 'exact-number branches ("=1") are not supported \u2014 use a plural category',
2099
+ this.pos
2100
+ );
2101
+ }
2102
+ const keyMatch = BRANCH_KEY_RE.exec(this.src.slice(this.pos));
2103
+ if (!keyMatch) {
2104
+ throw this.err(`expected a branch key, got "${this.src[this.pos] ?? ""}"`, this.pos);
2105
+ }
2106
+ const branchKey = keyMatch[0];
2107
+ if (style === "plural" && /^-?\d/.test(branchKey)) {
2108
+ throw this.err(
2109
+ `exact-number branches ("${branchKey}") are not supported \u2014 use a plural category`,
2110
+ this.pos
2111
+ );
2112
+ }
2113
+ if (branches.has(branchKey)) {
2114
+ throw this.err(`duplicate branch "${branchKey}"`, this.pos);
2115
+ }
2116
+ this.pos += branchKey.length;
2117
+ this.skipSpaces();
2118
+ if (this.src[this.pos] !== "{") {
2119
+ throw this.err(`expected '{' after the branch key "${branchKey}"`, this.pos);
2120
+ }
2121
+ this.pos += 1;
2122
+ const bodyStart = this.pos;
2123
+ let depth = 1;
2124
+ let quoted = false;
2125
+ while (this.pos < this.src.length) {
2126
+ const ch = this.src[this.pos];
2127
+ if (ch === "\\") {
2128
+ this.pos += this.src[this.pos + 1] === "'" ? 2 : 1;
2129
+ continue;
2130
+ }
2131
+ if (ch === "'") {
2132
+ if (this.src[this.pos + 1] === "'") {
2133
+ this.pos += 2;
2134
+ continue;
2135
+ }
2136
+ quoted = !quoted;
2137
+ this.pos += 1;
2138
+ continue;
2139
+ }
2140
+ if (!quoted) {
2141
+ if (ch === "{") depth += 1;
2142
+ else if (ch === "}") {
2143
+ depth -= 1;
2144
+ if (depth === 0) break;
2145
+ }
2146
+ }
2147
+ this.pos += 1;
2148
+ }
2149
+ if (this.pos >= this.src.length) {
2150
+ throw this.err(`unterminated branch "${branchKey}" (missing '}')`, start);
2151
+ }
2152
+ const bodyEnd = this.pos;
2153
+ this.pos += 1;
2154
+ branches.set(branchKey, new _Parser(this.src.slice(bodyStart, bodyEnd), this.key).parseMessage(style === "plural"));
2155
+ }
2156
+ return branches;
2157
+ }
2158
+ };
2159
+
2160
+ // src/check.ts
2161
+ var KNOWN_KIT_KEYS = new Set(Object.keys(flattenCatalog(EN_KIT_CATALOG)));
2162
+ var DATE_NAME_RE = /^kit\.date\.(months|monthsShort|weekdays|weekdaysShort)\.(\d+)$/;
2163
+ function isDateNameKey(key) {
2164
+ const match = DATE_NAME_RE.exec(key);
2165
+ if (!match) return false;
2166
+ const count = match[1].startsWith("weekday") ? 7 : 12;
2167
+ return Number(match[2]) < count;
2168
+ }
2169
+ var TAG_RE = /^[a-zA-Z]{2,8}(-[a-zA-Z0-9]{1,8})*$/;
2170
+ function isBcp47Tag(tag) {
2171
+ if (!TAG_RE.test(tag)) return false;
2172
+ try {
2173
+ new Intl.Locale(tag);
2174
+ return true;
2175
+ } catch {
2176
+ return false;
2177
+ }
2178
+ }
2179
+ function checkCommand(argv2) {
2180
+ const { values, bools, positionals } = parseArgs(argv2, {
2181
+ flags: { json: "bool" }
2182
+ });
2183
+ if (values.size > 0) {
2184
+ process.stderr.write(
2185
+ `ui-kit-i18n: check takes only a directory and --json
2186
+ `
2187
+ );
2188
+ process.exit(2);
2189
+ }
2190
+ const dir = positionals[0] ?? "./locales";
2191
+ if (positionals.length > 1) {
2192
+ process.stderr.write(
2193
+ `ui-kit-i18n: check takes at most one directory ("${positionals[1]}")
2194
+ `
2195
+ );
2196
+ process.exit(2);
2197
+ }
2198
+ let entries;
2199
+ try {
2200
+ entries = fs2.readdirSync(dir);
2201
+ } catch {
2202
+ failAll(bools.has("json"), [
2203
+ { severity: "error", file: dir, message: `directory not found: ${dir}` }
2204
+ ]);
2205
+ }
2206
+ const files = entries.filter((name) => name.endsWith(".json") && !name.endsWith(".example.json")).sort();
2207
+ if (files.length === 0) {
2208
+ failAll(bools.has("json"), [
2209
+ {
2210
+ severity: "error",
2211
+ file: dir,
2212
+ message: `no locale files found in ${dir} (*.json, excluding *.example.json)`
2213
+ }
2214
+ ]);
2215
+ }
2216
+ const diagnostics = [];
2217
+ const perFile = /* @__PURE__ */ new Map();
2218
+ for (const name of files) {
2219
+ const tag = name.slice(0, -".json".length);
2220
+ const file = path2.join(dir, name);
2221
+ if (!isBcp47Tag(tag)) {
2222
+ diagnostics.push({
2223
+ severity: "error",
2224
+ file,
2225
+ message: `file name is not a valid BCP-47 tag: "${name}"`
2226
+ });
2227
+ continue;
2228
+ }
2229
+ let raw;
2230
+ try {
2231
+ raw = JSON.parse(fs2.readFileSync(file, "utf8"));
2232
+ } catch (err) {
2233
+ diagnostics.push({
2234
+ severity: "error",
2235
+ file,
2236
+ message: `invalid JSON: ${err.message}`
2237
+ });
2238
+ continue;
2239
+ }
2240
+ if (raw === null || typeof raw !== "object" || Array.isArray(raw)) {
2241
+ diagnostics.push({
2242
+ severity: "error",
2243
+ file,
2244
+ message: "locale file must be a JSON object of message catalogs"
2245
+ });
2246
+ continue;
2247
+ }
2248
+ const flat = flattenCatalog(raw, `check:${name}`);
2249
+ perFile.set(file, flat);
2250
+ for (const [key, message] of Object.entries(flat)) {
2251
+ if (isDateNameKey(key)) continue;
2252
+ try {
2253
+ const nodes = parseMessage(message, key);
2254
+ reportPluralNodes(nodes, file, key, diagnostics);
2255
+ } catch (err) {
2256
+ if (err instanceof IcuParseError) {
2257
+ diagnostics.push({
2258
+ severity: "error",
2259
+ file,
2260
+ key,
2261
+ message: `ICU parse error: ${err.message}`
2262
+ });
2263
+ } else {
2264
+ throw err;
2265
+ }
2266
+ }
2267
+ if (key.startsWith("kit.") && !KNOWN_KIT_KEYS.has(key) && !isDateNameKey(key)) {
2268
+ diagnostics.push({
2269
+ severity: "warn",
2270
+ file,
2271
+ key,
2272
+ message: `unknown kit key "${key}" (not a known kit override target)`
2273
+ });
2274
+ }
2275
+ }
2276
+ }
2277
+ const userKeysByFile = /* @__PURE__ */ new Map();
2278
+ const allUserKeys = /* @__PURE__ */ new Set();
2279
+ for (const [file, flat] of perFile) {
2280
+ const userKeys = new Set(
2281
+ Object.keys(flat).filter((key) => !key.startsWith("kit."))
2282
+ );
2283
+ userKeysByFile.set(file, userKeys);
2284
+ for (const key of userKeys) allUserKeys.add(key);
2285
+ }
2286
+ for (const key of allUserKeys) {
2287
+ for (const [file, keys] of userKeysByFile) {
2288
+ if (!keys.has(key)) {
2289
+ diagnostics.push({
2290
+ severity: "error",
2291
+ file,
2292
+ key,
2293
+ message: `key "${key}" is missing from this locale file (present in another)`
2294
+ });
2295
+ }
2296
+ }
2297
+ }
2298
+ diagnostics.sort(
2299
+ (a, b) => a.file === b.file ? a.severity === b.severity ? (a.key ?? "").localeCompare(b.key ?? "") : a.severity === "error" ? -1 : 1 : a.file.localeCompare(b.file)
2300
+ );
2301
+ if (bools.has("json")) {
2302
+ process.stdout.write(
2303
+ JSON.stringify(
2304
+ {
2305
+ errors: diagnostics.filter((d) => d.severity === "error"),
2306
+ warnings: diagnostics.filter((d) => d.severity === "warn")
2307
+ },
2308
+ null,
2309
+ 2
2310
+ ) + "\n"
2311
+ );
2312
+ } else {
2313
+ for (const d of diagnostics) {
2314
+ const where = d.key ? `${d.file} [${d.key}]` : d.file;
2315
+ process.stdout.write(`${d.severity === "error" ? "ERROR" : "WARN"} ${where}: ${d.message}
2316
+ `);
2317
+ }
2318
+ if (diagnostics.length === 0) {
2319
+ process.stdout.write(`ok: ${files.length} locale file(s), no problems
2320
+ `);
2321
+ }
2322
+ }
2323
+ process.exit(diagnostics.some((d) => d.severity === "error") ? 1 : 0);
2324
+ }
2325
+ function reportPluralNodes(nodes, file, key, diagnostics) {
2326
+ for (const node of nodes) {
2327
+ if (node.type === "plural" || node.type === "select") {
2328
+ if (node.type === "plural" && !node.branches.has("other")) {
2329
+ diagnostics.push({
2330
+ severity: "error",
2331
+ file,
2332
+ key,
2333
+ message: `plural message for "${node.name}" has no "other" category`
2334
+ });
2335
+ }
2336
+ for (const branch of node.branches.values()) {
2337
+ reportPluralNodes(branch, file, key, diagnostics);
2338
+ }
2339
+ }
2340
+ }
2341
+ }
2342
+ function failAll(json, errors) {
2343
+ if (json) {
2344
+ process.stdout.write(
2345
+ JSON.stringify({ errors, warnings: [] }, null, 2) + "\n"
2346
+ );
2347
+ } else {
2348
+ for (const e of errors) {
2349
+ process.stdout.write(`ERROR ${e.file}: ${e.message}
2350
+ `);
2351
+ }
2352
+ }
2353
+ process.exit(1);
2354
+ }
2355
+
2356
+ // src/locales.ts
2357
+ var DATE_NAME_KEYS = [
2358
+ "kit.date.months",
2359
+ "kit.date.monthsShort",
2360
+ "kit.date.weekdays",
2361
+ "kit.date.weekdaysShort"
2362
+ ];
2363
+ function dateNameSource(tag) {
2364
+ const flat = flattenCatalog(
2365
+ BUILT_IN_CATALOGS[tag] ?? {}
2366
+ );
2367
+ return DATE_NAME_KEYS.some((key) => key in flat) ? "catalog" : "Intl";
2368
+ }
2369
+ function localesCommand() {
2370
+ const header = `${"locale".padEnd(10)}${"curated".padEnd(10)}date names`;
2371
+ const rows = Object.keys(BUILT_IN_CATALOGS).sort().map((tag) => {
2372
+ const curated = CURATED_LOCALES.includes(tag);
2373
+ return `${tag.padEnd(10)}${(curated ? "yes" : "no").padEnd(10)}${dateNameSource(tag)}`;
2374
+ });
2375
+ process.stdout.write([header, ...rows].join("\n") + "\n");
2376
+ }
2377
+
2378
+ // src/cli.ts
2379
+ var USAGE = `ui-kit-i18n \u2014 author and check ui-kit i18n locale files
2380
+
2381
+ Usage:
2382
+ ui-kit-i18n scaffold [--locale <tag>] [--all] [--out <dir>] [--force]
2383
+ Write <dir>/<tag>.json with the kit.* keys (translated for the five
2384
+ curated locales, English otherwise) plus <dir>/<tag>.example.json
2385
+ with a few example user keys. Refuses to overwrite without --force.
2386
+
2387
+ ui-kit-i18n check [dir] [--json]
2388
+ Check locale files in <dir> (default ./locales): key parity across
2389
+ locales, ICU parse errors, plural messages without an "other"
2390
+ category, BCP-47 file names, unknown kit.* override targets.
2391
+ *.example.json files are ignored. Exits 1 on any error.
2392
+
2393
+ ui-kit-i18n locales
2394
+ Table of the locales the kit ships curated strings for.
2395
+
2396
+ ui-kit-i18n help
2397
+ `;
2398
+ function usage(error) {
2399
+ if (error) {
2400
+ process.stderr.write(`ui-kit-i18n: ${error}
2401
+
2402
+ `);
2403
+ process.stderr.write(USAGE);
2404
+ } else {
2405
+ process.stdout.write(USAGE);
2406
+ }
2407
+ process.exit(error ? 2 : 0);
2408
+ }
2409
+ function parseArgs(argv2, spec) {
2410
+ const values = /* @__PURE__ */ new Map();
2411
+ const bools = /* @__PURE__ */ new Set();
2412
+ const positionals = [];
2413
+ for (let i = 0; i < argv2.length; i++) {
2414
+ const arg = argv2[i];
2415
+ if (arg.startsWith("--")) {
2416
+ const eq = arg.indexOf("=");
2417
+ const name = eq === -1 ? arg.slice(2) : arg.slice(2, eq);
2418
+ const want = spec.flags[name];
2419
+ if (want === void 0) {
2420
+ usage(`unknown option "--${name}"`);
2421
+ }
2422
+ if (eq !== -1) {
2423
+ if (want !== "value") usage(`"--${name}" takes no value`);
2424
+ values.set(name, arg.slice(eq + 1));
2425
+ } else if (want === "bool") {
2426
+ bools.add(name);
2427
+ } else {
2428
+ const next = argv2[++i];
2429
+ if (next === void 0) usage(`"--${name}" needs a value`);
2430
+ values.set(name, next);
2431
+ }
2432
+ } else if (arg.startsWith("-") && arg.length > 1) {
2433
+ usage(`unknown option "${arg}"`);
2434
+ } else {
2435
+ positionals.push(arg);
2436
+ }
2437
+ }
2438
+ return { values, bools, positionals };
2439
+ }
2440
+ var argv = process.argv.slice(2);
2441
+ var command = argv[0];
2442
+ switch (command) {
2443
+ case "scaffold":
2444
+ scaffoldCommand(argv.slice(1));
2445
+ break;
2446
+ case "check":
2447
+ checkCommand(argv.slice(1));
2448
+ break;
2449
+ case "locales":
2450
+ localesCommand();
2451
+ break;
2452
+ case "help":
2453
+ case "--help":
2454
+ case "-h":
2455
+ case void 0:
2456
+ usage();
2457
+ break;
2458
+ default:
2459
+ usage(`unknown command "${command}"`);
2460
+ }
2461
+ export {
2462
+ parseArgs
2463
+ };