@hoardodile/i18n 0.0.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.
Files changed (50) hide show
  1. package/LICENSE +674 -0
  2. package/README.md +81 -0
  3. package/dist/catalogs/ui.d.ts +2 -0
  4. package/dist/catalogs/ui.js +449 -0
  5. package/dist/catalogs/ui.js.map +1 -0
  6. package/dist/catalogs/workbench.d.ts +291 -0
  7. package/dist/catalogs/workbench.js +250 -0
  8. package/dist/catalogs/workbench.js.map +1 -0
  9. package/dist/catalogs-BF4px4Mm.d.ts +12986 -0
  10. package/dist/catalogs.d.ts +2 -0
  11. package/dist/catalogs.js +10794 -0
  12. package/dist/catalogs.js.map +1 -0
  13. package/dist/core.d.ts +32 -0
  14. package/dist/core.js +14 -0
  15. package/dist/core.js.map +1 -0
  16. package/dist/create-i18n.d.ts +35 -0
  17. package/dist/create-i18n.js +30 -0
  18. package/dist/create-i18n.js.map +1 -0
  19. package/dist/index.d.ts +42 -0
  20. package/dist/index.js +11284 -0
  21. package/dist/index.js.map +1 -0
  22. package/dist/react.d.ts +1 -0
  23. package/dist/react.js +3 -0
  24. package/dist/react.js.map +1 -0
  25. package/dist/ui-CJPMCZT7.d.ts +548 -0
  26. package/package.json +81 -0
  27. package/src/catalogs/de.json +2155 -0
  28. package/src/catalogs/en.json +2155 -0
  29. package/src/catalogs/es.json +2155 -0
  30. package/src/catalogs/ja.json +2155 -0
  31. package/src/catalogs/ui.ts +30 -0
  32. package/src/catalogs/workbench.ts +29 -0
  33. package/src/catalogs/zh.json +2155 -0
  34. package/src/catalogs.ts +31 -0
  35. package/src/core.ts +40 -0
  36. package/src/create-i18n.ts +52 -0
  37. package/src/index.ts +66 -0
  38. package/src/language.test.ts +70 -0
  39. package/src/parity.test.ts +175 -0
  40. package/src/react.ts +25 -0
  41. package/src/ui/de.json +86 -0
  42. package/src/ui/en.json +86 -0
  43. package/src/ui/es.json +86 -0
  44. package/src/ui/ja.json +86 -0
  45. package/src/ui/zh.json +86 -0
  46. package/src/workbench/de.json +45 -0
  47. package/src/workbench/en.json +45 -0
  48. package/src/workbench/es.json +45 -0
  49. package/src/workbench/ja.json +45 -0
  50. package/src/workbench/zh.json +45 -0
package/README.md ADDED
@@ -0,0 +1,81 @@
1
+ # @hoardodile/i18n
2
+
3
+ Single source of truth for hoardodile's UI strings. Every surface — the
4
+ web SPA, the Electron shell, the offline workbench and the plugin
5
+ iframes — reads its copy from here, so strings are authored once and
6
+ never re-typed per surface.
7
+
8
+ ## Namespaces
9
+
10
+ | Namespace | Owns | Consumed by |
11
+ | --- | --- | --- |
12
+ | `translation` | App copy (pages, features, dialogs about domain objects) | web SPA, desktop shell, workbench |
13
+ | `ui` | Component chrome: control labels, aria labels, prompts (`@hoardodile/ui` components read it via `useTranslation("ui")`) | every React surface, including plugin iframes |
14
+ | `workbench` | Offline dev-tool copy (toolbar, config popover, empty states) | `@hoardodile/workbench` only |
15
+ | `plugin` | Plugin-authored strings (declared by each plugin's own bundle) | plugin iframes |
16
+
17
+ **The boundary rule that keeps namespaces clean:** a string is *chrome*
18
+ (a part of the control: cancel/save/add labels, aria, hints) and belongs
19
+ in `ui`; a string is *feature copy* (empty states, entity names, dialog
20
+ body text about domain objects) and stays in the app. A component that
21
+ exists only to feed translated strings into something else is a smell —
22
+ `scripts/guard-i18n-wrappers.mjs` rejects alias-wrapped imports of
23
+ `@hoardodile/ui` components for that reason.
24
+
25
+ ## How to add a language
26
+
27
+ 1. Add the JSON catalog (`translation` + optional `ui`/`workbench`
28
+ mirrors) for the new code in `src/catalogs/`, `src/ui/`,
29
+ `src/workbench/`.
30
+ 2. Add the code to `SUPPORTED_LANGUAGES` in `src/core.ts` (and all
31
+ `*Catalog` registries).
32
+ 3. Run the parity test — every catalog must carry the exact key set,
33
+ interpolation placeholders, plural pairs, markup tags and ellipsis
34
+ style; the strict lockstep rules are what keep a half-translated
35
+ language from shipping.
36
+
37
+ ## How to add a namespace
38
+
39
+ `<name>/<lang>.json` ×5 → registry `src/catalogs/<name>.ts`
40
+ (`Record<SupportedLanguage, typeof en>` — key drift becomes a compile
41
+ error) → tsup entry → exports subpath → `parity.test.ts` adds one
42
+ `checkCatalogLockstep(...)` call.
43
+
44
+ ## Subpath guide
45
+
46
+ | Subpath | Contents | Who imports it |
47
+ | --- | --- | --- |
48
+ | `.` | Helpers `isSupportedLanguage` / `resolveSystemLanguage` / `SUPPORTED_LANGUAGES`, the `createI18n` host factory (preloaded translation + ui resources), the typed `i18next` augmentation | hosts (web, desktop wizard, workbench) |
49
+ | `./core` | Catalog-free helpers only | sandboxed Electron preload |
50
+ | `./create-i18n` | `createI18n` factory without default resources | plugin iframes (own resources) |
51
+ | `./react` | `I18nProvider` / `setI18n` bound to one react-i18next copy | hosts, tests |
52
+ | `./catalogs` | App catalogs (`CATALOGS`, `catalogFor`) | Electron main (native dialogs), tests |
53
+ | `./catalogs/ui` | ui chrome catalogs (`UI_CATALOGS`, `uiCatalogFor`) | plugin SDK, workbench |
54
+ | `./workbench` | Dev-tool catalogs (`WORKBENCH_CATALOGS`, `workbenchCatalogFor`) | workbench only |
55
+
56
+ ## Known pitfalls
57
+
58
+ - **Instance identity.** The workspace pins two typescript toolchains
59
+ (`5.9.3` for tsup-built packages, `7.0.2` for the rest); i18next peers
60
+ on typescript, so pnpm materializes **two physical copies** of
61
+ i18next/react-i18next. Never rely on react-i18next's module-global
62
+ default across package boundaries — pass the instance explicitly
63
+ (`<I18nProvider i18n={…}>`), and expect narrow casts where the two
64
+ type identities meet.
65
+ - **Wire payloads beat the type table.** The `languageChanged` push is a
66
+ *bare language-code string* — it predates the typed protocol table and
67
+ must stay stable; `HostPushes` follows the wire. Tests mock real
68
+ payload shapes (sdk-react accepts both shapes for compatibility).
69
+ - **`translation` vs `ui` key duplication is intentional.** The same word
70
+ can exist in both namespaces (e.g. `common.cancel` and `dialog.cancel`)
71
+ when one consumer is app code and the other is component chrome — the
72
+ duplication is per-namespace ownership, not copy-paste drift.
73
+ - **Deliberate exception:** workbench `describeContext` status lines stay
74
+ English (developer diagnostics; `scripts/smoke-published.mjs` asserts
75
+ `detect ok`).
76
+
77
+ Plugin authors: use `createPluginTranslation` from `@hoardodile/sdk-react`
78
+ for the zero-config path, or assemble your own react-i18next instance —
79
+ the only hoardodile piece you need is the host language notification
80
+ (`getPluginContext().language` + the `languageChanged` push). See
81
+ `skills/hd-plugin/references/client.md`.
@@ -0,0 +1,2 @@
1
+ import '../core.js';
2
+ export { U as UI_CATALOGS, a as uiCatalogFor } from '../ui-CJPMCZT7.js';
@@ -0,0 +1,449 @@
1
+ // src/ui/de.json
2
+ var de_default = {
3
+ caption: {
4
+ back: "Zur\xFCck",
5
+ forward: "Vorw\xE4rts",
6
+ reload: "Neu laden",
7
+ minimize: "Minimieren",
8
+ maximize: "Maximieren",
9
+ restore: "Wiederherstellen",
10
+ close: "Schlie\xDFen",
11
+ devtools: "Entwicklertools"
12
+ },
13
+ closeConfirm: {
14
+ title: "hoardodile schlie\xDFen?",
15
+ description: "Die App l\xE4uft im Infobereich weiter, au\xDFer du beendest sie.",
16
+ tray: "Im Infobereich ausblenden",
17
+ quit: "App beenden",
18
+ cancel: "Abbrechen",
19
+ remember: "Meine Auswahl merken"
20
+ },
21
+ pluginDownload: {
22
+ eyebrow: "Plugin-Download",
23
+ title: "Diese Datei herunterladen?",
24
+ description: "{{pluginName}} m\xF6chte eine Datei in seinen eigenen Speicherordner herunterladen. Die Datei wird von der unten stehenden URL geladen und nur innerhalb des Plugin-Ordners gespeichert.",
25
+ urlLabel: "URL",
26
+ destLabel: "Ziel",
27
+ sizeLabel: "Gr\xF6\xDFe",
28
+ unknownSize: "unbekannt",
29
+ deny: "Ablehnen",
30
+ allow: "Erlauben",
31
+ remember: "F\xFCr diese Sitzung merken (keine weiteren R\xFCckfragen dieses Plugins)"
32
+ },
33
+ pagination: {
34
+ region: "Seitennavigation",
35
+ prev: "Zur\xFCck",
36
+ next: "Weiter",
37
+ previous: "Vorherige",
38
+ goTo: "Gehe zu",
39
+ jumpToPage: "Seite",
40
+ morePages: "Weitere Seiten"
41
+ },
42
+ aria: {
43
+ loading: "Wird geladen",
44
+ closeToast: "Benachrichtigung schlie\xDFen",
45
+ close: "Schlie\xDFen",
46
+ more: "Mehr",
47
+ toggleSidebar: "Seitenleiste umschalten",
48
+ mobileSidebarDescription: "Zeigt die mobile Seitenleiste.",
49
+ sidebar: "Seitenleiste",
50
+ breadcrumb: "Breadcrumb"
51
+ },
52
+ dialog: {
53
+ cancel: "Abbrechen"
54
+ },
55
+ confirmByTyping: {
56
+ prompt: "Tippe \u201E<name>{{name}}</name>\u201C ein, um zu best\xE4tigen"
57
+ },
58
+ colorPicker: {
59
+ clear: "Farbe entfernen",
60
+ addPreset: "Zu meinen Presets hinzuf\xFCgen",
61
+ removePresetAria: "Preset {{color}} entfernen",
62
+ customSwatch: "Benutzerdefinierte Farbe w\xE4hlen"
63
+ },
64
+ fontPicker: {
65
+ inherit: "Globale Schriftart \xFCbernehmen",
66
+ inheritedHint: "\xDCbernimmt derzeit die globale Schriftarteinstellung",
67
+ addCustom: "Schriftart per Name hinzuf\xFCgen, Eingabetaste dr\xFCcken\u2026",
68
+ selected: "Fallback-Reihenfolge \u2014 zum Sortieren ziehen",
69
+ description: "Oberfl\xE4che und Listen \u2014 Dokumente behalten ihre Lesestimme."
70
+ },
71
+ imageCrop: {
72
+ saving: "Speichern\u2026",
73
+ remove: "Entfernen",
74
+ save: "Speichern",
75
+ pickHint: "Klicken oder ablegen",
76
+ reselect: "Erneut hochladen",
77
+ previewLabel: "Vorschau",
78
+ previewAlt: "Zugeschnittene Vorschau",
79
+ showPreview: "Vorschau anzeigen",
80
+ saveFailed: "Speichern fehlgeschlagen"
81
+ },
82
+ panelToolbar: {
83
+ add: "Hinzuf\xFCgen",
84
+ unused: "Ungenutzt",
85
+ reorder: "Neu ordnen"
86
+ }
87
+ };
88
+
89
+ // src/ui/en.json
90
+ var en_default = {
91
+ caption: {
92
+ back: "Back",
93
+ forward: "Forward",
94
+ reload: "Reload",
95
+ minimize: "Minimize",
96
+ maximize: "Maximize",
97
+ restore: "Restore",
98
+ close: "Close",
99
+ devtools: "Developer tools"
100
+ },
101
+ closeConfirm: {
102
+ title: "Close hoardodile?",
103
+ description: "The app keeps running in the tray unless you quit it.",
104
+ tray: "Hide to tray",
105
+ quit: "Quit the app",
106
+ cancel: "Cancel",
107
+ remember: "Remember my choice"
108
+ },
109
+ pluginDownload: {
110
+ eyebrow: "Plugin download",
111
+ title: "Download this file?",
112
+ description: "{{pluginName}} wants to download a file into its own storage folder. The file is fetched from the URL below and stored only inside the plugin's folder.",
113
+ urlLabel: "URL",
114
+ destLabel: "Destination",
115
+ sizeLabel: "Size",
116
+ unknownSize: "unknown",
117
+ deny: "Deny",
118
+ allow: "Allow",
119
+ remember: "Remember for this session (no more prompts from this plugin)"
120
+ },
121
+ pagination: {
122
+ region: "pagination",
123
+ prev: "Prev",
124
+ next: "Next",
125
+ previous: "Previous",
126
+ goTo: "Go to",
127
+ jumpToPage: "Page",
128
+ morePages: "More pages"
129
+ },
130
+ aria: {
131
+ loading: "Loading",
132
+ closeToast: "Close toast",
133
+ close: "Close",
134
+ more: "More",
135
+ toggleSidebar: "Toggle Sidebar",
136
+ mobileSidebarDescription: "Displays the mobile sidebar.",
137
+ sidebar: "Sidebar",
138
+ breadcrumb: "breadcrumb"
139
+ },
140
+ dialog: {
141
+ cancel: "Cancel"
142
+ },
143
+ confirmByTyping: {
144
+ prompt: 'Type "<name>{{name}}</name>" to confirm'
145
+ },
146
+ colorPicker: {
147
+ clear: "Clear color",
148
+ addPreset: "Add to my presets",
149
+ removePresetAria: "Remove preset {{color}}",
150
+ customSwatch: "Pick a custom color"
151
+ },
152
+ fontPicker: {
153
+ inherit: "Inherit global font",
154
+ inheritedHint: "Currently inheriting the global font setting",
155
+ addCustom: "Add a font by name, press Enter\u2026",
156
+ selected: "Fallback order \u2014 drag to rearrange",
157
+ description: "Chrome and lists \u2014 documents keep their reading voice."
158
+ },
159
+ imageCrop: {
160
+ saving: "Saving\u2026",
161
+ remove: "Remove",
162
+ save: "Save",
163
+ pickHint: "Click or drop",
164
+ reselect: "Re-upload",
165
+ previewLabel: "Preview",
166
+ previewAlt: "Cropped preview",
167
+ showPreview: "Show preview",
168
+ saveFailed: "Save failed"
169
+ },
170
+ panelToolbar: {
171
+ add: "Add",
172
+ unused: "Unused",
173
+ reorder: "Reorder"
174
+ }
175
+ };
176
+
177
+ // src/ui/es.json
178
+ var es_default = {
179
+ caption: {
180
+ back: "Atr\xE1s",
181
+ forward: "Adelante",
182
+ reload: "Recargar",
183
+ minimize: "Minimizar",
184
+ maximize: "Maximizar",
185
+ restore: "Restaurar",
186
+ close: "Cerrar",
187
+ devtools: "Herramientas de desarrollo"
188
+ },
189
+ closeConfirm: {
190
+ title: "\xBFCerrar hoardodile?",
191
+ description: "La app sigue ejecut\xE1ndose en la bandeja a menos que la cierres.",
192
+ tray: "Ocultar en la bandeja",
193
+ quit: "Salir de la app",
194
+ cancel: "Cancelar",
195
+ remember: "Recordar mi elecci\xF3n"
196
+ },
197
+ pluginDownload: {
198
+ eyebrow: "Descarga de plugin",
199
+ title: "\xBFDescargar este archivo?",
200
+ description: "{{pluginName}} quiere descargar un archivo a su propia carpeta de almacenamiento. El archivo se obtiene desde la URL siguiente y solo se guarda dentro de la carpeta del plugin.",
201
+ urlLabel: "URL",
202
+ destLabel: "Destino",
203
+ sizeLabel: "Tama\xF1o",
204
+ unknownSize: "desconocido",
205
+ deny: "Rechazar",
206
+ allow: "Permitir",
207
+ remember: "Recordar para esta sesi\xF3n (sin m\xE1s avisos de este plugin)"
208
+ },
209
+ pagination: {
210
+ region: "Paginaci\xF3n",
211
+ prev: "Ant.",
212
+ next: "Sig.",
213
+ previous: "Anterior",
214
+ goTo: "Ir a",
215
+ jumpToPage: "P\xE1gina",
216
+ morePages: "M\xE1s p\xE1ginas"
217
+ },
218
+ aria: {
219
+ loading: "Cargando",
220
+ closeToast: "Cerrar aviso",
221
+ close: "Cerrar",
222
+ more: "M\xE1s",
223
+ toggleSidebar: "Alternar barra lateral",
224
+ mobileSidebarDescription: "Muestra la barra lateral m\xF3vil.",
225
+ sidebar: "Barra lateral",
226
+ breadcrumb: "Migaja de pan"
227
+ },
228
+ dialog: {
229
+ cancel: "Cancelar"
230
+ },
231
+ confirmByTyping: {
232
+ prompt: "Escribe \xAB<name>{{name}}</name>\xBB para confirmar"
233
+ },
234
+ colorPicker: {
235
+ clear: "Quitar color",
236
+ addPreset: "A\xF1adir a mis preajustes",
237
+ removePresetAria: "Quitar preajuste {{color}}",
238
+ customSwatch: "Elegir un color personalizado"
239
+ },
240
+ fontPicker: {
241
+ inherit: "Heredar la fuente global",
242
+ inheritedHint: "Ahora est\xE1s heredando la configuraci\xF3n de fuente global",
243
+ addCustom: "A\xF1ade una fuente por nombre y pulsa Intro\u2026",
244
+ selected: "Orden de reserva \u2014 arrastra para reordenar",
245
+ description: "Interfaz y listas; los documentos conservan su voz de lectura."
246
+ },
247
+ imageCrop: {
248
+ saving: "Guardando\u2026",
249
+ remove: "Quitar",
250
+ save: "Guardar",
251
+ pickHint: "Haz clic o suelta",
252
+ reselect: "Volver a subir",
253
+ previewLabel: "Vista previa",
254
+ previewAlt: "Vista previa recortada",
255
+ showPreview: "Mostrar vista previa",
256
+ saveFailed: "Fall\xF3 el guardado"
257
+ },
258
+ panelToolbar: {
259
+ add: "A\xF1adir",
260
+ unused: "Sin usar",
261
+ reorder: "Reordenar"
262
+ }
263
+ };
264
+
265
+ // src/ui/ja.json
266
+ var ja_default = {
267
+ caption: {
268
+ back: "\u623B\u308B",
269
+ forward: "\u9032\u3080",
270
+ reload: "\u518D\u8AAD\u307F\u8FBC\u307F",
271
+ minimize: "\u6700\u5C0F\u5316",
272
+ maximize: "\u6700\u5927\u5316",
273
+ restore: "\u5143\u306B\u623B\u3059",
274
+ close: "\u9589\u3058\u308B",
275
+ devtools: "\u958B\u767A\u8005\u30C4\u30FC\u30EB"
276
+ },
277
+ closeConfirm: {
278
+ title: "hoardodile \u3092\u9589\u3058\u307E\u3059\u304B\uFF1F",
279
+ description: "\u7D42\u4E86\u3057\u306A\u3044\u9650\u308A\u3001\u30A2\u30D7\u30EA\u306F\u30C8\u30EC\u30A4\u3067\u52D5\u4F5C\u3057\u7D9A\u3051\u307E\u3059\u3002",
280
+ tray: "\u30C8\u30EC\u30A4\u306B\u96A0\u3059",
281
+ quit: "\u30A2\u30D7\u30EA\u3092\u7D42\u4E86",
282
+ cancel: "\u30AD\u30E3\u30F3\u30BB\u30EB",
283
+ remember: "\u9078\u629E\u3092\u8A18\u61B6\u3059\u308B"
284
+ },
285
+ pluginDownload: {
286
+ eyebrow: "\u30D7\u30E9\u30B0\u30A4\u30F3\u306E\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9",
287
+ title: "\u3053\u306E\u30D5\u30A1\u30A4\u30EB\u3092\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\u3057\u307E\u3059\u304B\uFF1F",
288
+ description: "{{pluginName}} \u306F\u30D5\u30A1\u30A4\u30EB\u3092\u81EA\u8EAB\u306E\u30B9\u30C8\u30EC\u30FC\u30B8\u30D5\u30A9\u30EB\u30C0\u306B\u30C0\u30A6\u30F3\u30ED\u30FC\u30C9\u3057\u3088\u3046\u3068\u3057\u3066\u3044\u307E\u3059\u3002\u30D5\u30A1\u30A4\u30EB\u306F\u4E0B\u8A18\u306EURL\u304B\u3089\u53D6\u5F97\u3055\u308C\u3001\u30D7\u30E9\u30B0\u30A4\u30F3\u81EA\u8EAB\u306E\u30D5\u30A9\u30EB\u30C0\u5185\u306B\u306E\u307F\u4FDD\u5B58\u3055\u308C\u307E\u3059\u3002",
289
+ urlLabel: "URL",
290
+ destLabel: "\u4FDD\u5B58\u5148",
291
+ sizeLabel: "\u30B5\u30A4\u30BA",
292
+ unknownSize: "\u4E0D\u660E",
293
+ deny: "\u62D2\u5426",
294
+ allow: "\u8A31\u53EF",
295
+ remember: "\u3053\u306E\u30BB\u30C3\u30B7\u30E7\u30F3\u3067\u306F\u8A18\u61B6\u3059\u308B\uFF08\u3053\u306E\u30D7\u30E9\u30B0\u30A4\u30F3\u3078\u306E\u78BA\u8A8D\u3092\u7701\u7565\uFF09"
296
+ },
297
+ pagination: {
298
+ region: "\u30DA\u30FC\u30B8\u30CD\u30FC\u30B7\u30E7\u30F3",
299
+ prev: "\u524D\u3078",
300
+ next: "\u6B21\u3078",
301
+ previous: "\u524D\u3078",
302
+ goTo: "\u79FB\u52D5\u5148",
303
+ jumpToPage: "\u30DA\u30FC\u30B8",
304
+ morePages: "\u305D\u306E\u4ED6\u306E\u30DA\u30FC\u30B8"
305
+ },
306
+ aria: {
307
+ loading: "\u8AAD\u307F\u8FBC\u307F\u4E2D",
308
+ closeToast: "\u901A\u77E5\u3092\u9589\u3058\u308B",
309
+ close: "\u9589\u3058\u308B",
310
+ more: "\u305D\u306E\u4ED6",
311
+ toggleSidebar: "\u30B5\u30A4\u30C9\u30D0\u30FC\u3092\u5207\u308A\u66FF\u3048",
312
+ mobileSidebarDescription: "\u30E2\u30D0\u30A4\u30EB\u30B5\u30A4\u30C9\u30D0\u30FC\u3092\u8868\u793A\u3057\u307E\u3059\u3002",
313
+ sidebar: "\u30B5\u30A4\u30C9\u30D0\u30FC",
314
+ breadcrumb: "\u30D1\u30F3\u304F\u305A"
315
+ },
316
+ dialog: {
317
+ cancel: "\u30AD\u30E3\u30F3\u30BB\u30EB"
318
+ },
319
+ confirmByTyping: {
320
+ prompt: "\u78BA\u8A8D\u3059\u308B\u306B\u306F\u300C<name>{{name}}</name>\u300D\u3068\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044"
321
+ },
322
+ colorPicker: {
323
+ clear: "\u8272\u3092\u30AF\u30EA\u30A2",
324
+ addPreset: "\u30DE\u30A4\u30D7\u30EA\u30BB\u30C3\u30C8\u306B\u8FFD\u52A0",
325
+ removePresetAria: "\u30D7\u30EA\u30BB\u30C3\u30C8 {{color}} \u3092\u524A\u9664",
326
+ customSwatch: "\u30AB\u30B9\u30BF\u30E0\u8272\u3092\u9078\u629E"
327
+ },
328
+ fontPicker: {
329
+ inherit: "\u30B0\u30ED\u30FC\u30D0\u30EB\u30D5\u30A9\u30F3\u30C8\u3092\u7D99\u627F",
330
+ inheritedHint: "\u73FE\u5728\u30B0\u30ED\u30FC\u30D0\u30EB\u30D5\u30A9\u30F3\u30C8\u8A2D\u5B9A\u3092\u7D99\u627F\u3057\u3066\u3044\u307E\u3059",
331
+ addCustom: "\u30D5\u30A9\u30F3\u30C8\u540D\u3092\u5165\u529B\u3057\u3066 Enter \u3092\u62BC\u3059\u3068\u8FFD\u52A0\u2026",
332
+ selected: "\u30D5\u30A9\u30FC\u30EB\u30D0\u30C3\u30AF\u9806 \u2014 \u30C9\u30E9\u30C3\u30B0\u3067\u4E26\u3079\u66FF\u3048",
333
+ description: "\u753B\u9762\u3068\u30EA\u30B9\u30C8 \u2014 \u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u306F\u8AAD\u307F\u5473\u3092\u4FDD\u3061\u307E\u3059\u3002"
334
+ },
335
+ imageCrop: {
336
+ saving: "\u4FDD\u5B58\u4E2D\u2026",
337
+ remove: "\u524A\u9664",
338
+ save: "\u4FDD\u5B58",
339
+ pickHint: "\u30AF\u30EA\u30C3\u30AF\u307E\u305F\u306F\u30C9\u30ED\u30C3\u30D7",
340
+ reselect: "\u518D\u30A2\u30C3\u30D7\u30ED\u30FC\u30C9",
341
+ previewLabel: "\u30D7\u30EC\u30D3\u30E5\u30FC",
342
+ previewAlt: "\u5207\u308A\u629C\u304D\u30D7\u30EC\u30D3\u30E5\u30FC",
343
+ showPreview: "\u30D7\u30EC\u30D3\u30E5\u30FC\u3092\u8868\u793A",
344
+ saveFailed: "\u4FDD\u5B58\u306B\u5931\u6557\u3057\u307E\u3057\u305F"
345
+ },
346
+ panelToolbar: {
347
+ add: "\u8FFD\u52A0",
348
+ unused: "\u672A\u4F7F\u7528",
349
+ reorder: "\u4E26\u3079\u66FF\u3048"
350
+ }
351
+ };
352
+
353
+ // src/ui/zh.json
354
+ var zh_default = {
355
+ caption: {
356
+ back: "\u540E\u9000",
357
+ forward: "\u524D\u8FDB",
358
+ reload: "\u5237\u65B0",
359
+ minimize: "\u6700\u5C0F\u5316",
360
+ maximize: "\u6700\u5927\u5316",
361
+ restore: "\u8FD8\u539F",
362
+ close: "\u5173\u95ED",
363
+ devtools: "\u5F00\u53D1\u8005\u5DE5\u5177"
364
+ },
365
+ closeConfirm: {
366
+ title: "\u5173\u95ED hoardodile\uFF1F",
367
+ description: "\u9664\u975E\u9009\u62E9\u9000\u51FA\uFF0C\u5E94\u7528\u4F1A\u7EE7\u7EED\u5728\u6258\u76D8\u8FD0\u884C\u3002",
368
+ tray: "\u6700\u5C0F\u5316\u5230\u6258\u76D8",
369
+ quit: "\u9000\u51FA\u5E94\u7528",
370
+ cancel: "\u53D6\u6D88",
371
+ remember: "\u8BB0\u4F4F\u6211\u7684\u9009\u62E9"
372
+ },
373
+ pluginDownload: {
374
+ eyebrow: "\u63D2\u4EF6\u4E0B\u8F7D",
375
+ title: "\u4E0B\u8F7D\u8FD9\u4E2A\u6587\u4EF6\uFF1F",
376
+ description: "{{pluginName}} \u60F3\u4E0B\u8F7D\u4E00\u4E2A\u6587\u4EF6\u5230\u5B83\u81EA\u5DF1\u7684\u5B58\u50A8\u76EE\u5F55\u3002\u6587\u4EF6\u5C06\u4ECE\u4E0B\u9762\u7684\u94FE\u63A5\u83B7\u53D6\uFF0C\u4E14\u53EA\u4F1A\u4FDD\u5B58\u5230\u63D2\u4EF6\u81EA\u8EAB\u7684\u6587\u4EF6\u5939\u5185\u3002",
377
+ urlLabel: "\u94FE\u63A5",
378
+ destLabel: "\u76EE\u6807\u8DEF\u5F84",
379
+ sizeLabel: "\u5927\u5C0F",
380
+ unknownSize: "\u672A\u77E5",
381
+ deny: "\u62D2\u7EDD",
382
+ allow: "\u5141\u8BB8",
383
+ remember: "\u672C\u4F1A\u8BDD\u8BB0\u4F4F\uFF08\u4E0D\u518D\u5411\u6B64\u63D2\u4EF6\u8BE2\u95EE\uFF09"
384
+ },
385
+ pagination: {
386
+ region: "\u5206\u9875",
387
+ prev: "\u4E0A\u4E00\u9875",
388
+ next: "\u4E0B\u4E00\u9875",
389
+ previous: "\u4E0A\u4E00\u4E2A",
390
+ goTo: "\u8DF3\u81F3",
391
+ jumpToPage: "\u9875",
392
+ morePages: "\u66F4\u591A\u9875"
393
+ },
394
+ aria: {
395
+ loading: "\u52A0\u8F7D\u4E2D",
396
+ closeToast: "\u5173\u95ED\u901A\u77E5",
397
+ close: "\u5173\u95ED",
398
+ more: "\u66F4\u591A",
399
+ toggleSidebar: "\u5207\u6362\u4FA7\u8FB9\u680F",
400
+ mobileSidebarDescription: "\u663E\u793A\u79FB\u52A8\u7AEF\u4FA7\u8FB9\u680F\u3002",
401
+ sidebar: "\u4FA7\u8FB9\u680F",
402
+ breadcrumb: "\u9762\u5305\u5C51"
403
+ },
404
+ dialog: {
405
+ cancel: "\u53D6\u6D88"
406
+ },
407
+ confirmByTyping: {
408
+ prompt: "\u8BF7\u8F93\u5165\u201C<name>{{name}}</name>\u201D\u4EE5\u786E\u8BA4"
409
+ },
410
+ colorPicker: {
411
+ clear: "\u6E05\u9664\u989C\u8272",
412
+ addPreset: "\u6DFB\u52A0\u5230\u6211\u7684\u9884\u8BBE",
413
+ removePresetAria: "\u79FB\u9664\u9884\u8BBE {{color}}",
414
+ customSwatch: "\u9009\u53D6\u81EA\u5B9A\u4E49\u989C\u8272"
415
+ },
416
+ fontPicker: {
417
+ inherit: "\u7EE7\u627F\u4E3B\u5B57\u4F53",
418
+ inheritedHint: "\u5F53\u524D\u7EE7\u627F\u5168\u5C40\u5B57\u4F53\u8BBE\u7F6E",
419
+ addCustom: "\u6309\u540D\u79F0\u6DFB\u52A0\u5B57\u4F53\uFF0C\u56DE\u8F66\u786E\u8BA4\u2026",
420
+ selected: "\u56DE\u9000\u987A\u5E8F\u2014\u2014\u62D6\u62FD\u8C03\u6574",
421
+ description: "\u754C\u9762\u4E0E\u5217\u8868\u2014\u2014\u6587\u6863\u4FDD\u6301\u5176\u9605\u8BFB\u97F3\u8272\u3002"
422
+ },
423
+ imageCrop: {
424
+ saving: "\u4FDD\u5B58\u4E2D\u2026",
425
+ remove: "\u79FB\u9664",
426
+ save: "\u4FDD\u5B58",
427
+ pickHint: "\u70B9\u51FB\u6216\u62D6\u5165",
428
+ reselect: "\u91CD\u65B0\u4E0A\u4F20",
429
+ previewLabel: "\u9884\u89C8",
430
+ previewAlt: "\u9884\u89C8\u56FE\u7247",
431
+ showPreview: "\u663E\u793A\u9884\u89C8",
432
+ saveFailed: "\u4FDD\u5B58\u5931\u8D25"
433
+ },
434
+ panelToolbar: {
435
+ add: "\u6DFB\u52A0",
436
+ unused: "\u672A\u4F7F\u7528",
437
+ reorder: "\u6392\u5E8F"
438
+ }
439
+ };
440
+
441
+ // src/catalogs/ui.ts
442
+ var UI_CATALOGS = { en: en_default, zh: zh_default, ja: ja_default, de: de_default, es: es_default };
443
+ function uiCatalogFor(language) {
444
+ return language === void 0 ? en_default : UI_CATALOGS[language];
445
+ }
446
+
447
+ export { UI_CATALOGS, uiCatalogFor };
448
+ //# sourceMappingURL=ui.js.map
449
+ //# sourceMappingURL=ui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/ui/de.json","../../src/ui/en.json","../../src/ui/es.json","../../src/ui/ja.json","../../src/ui/zh.json","../../src/catalogs/ui.ts"],"names":[],"mappings":"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","file":"ui.js","sourcesContent":["{\n\t\"caption\": {\n\t\t\"back\": \"Zurück\",\n\t\t\"forward\": \"Vorwärts\",\n\t\t\"reload\": \"Neu laden\",\n\t\t\"minimize\": \"Minimieren\",\n\t\t\"maximize\": \"Maximieren\",\n\t\t\"restore\": \"Wiederherstellen\",\n\t\t\"close\": \"Schließen\",\n\t\t\"devtools\": \"Entwicklertools\"\n\t},\n\t\"closeConfirm\": {\n\t\t\"title\": \"hoardodile schließen?\",\n\t\t\"description\": \"Die App läuft im Infobereich weiter, außer du beendest sie.\",\n\t\t\"tray\": \"Im Infobereich ausblenden\",\n\t\t\"quit\": \"App beenden\",\n\t\t\"cancel\": \"Abbrechen\",\n\t\t\"remember\": \"Meine Auswahl merken\"\n\t},\n\t\"pluginDownload\": {\n\t\t\"eyebrow\": \"Plugin-Download\",\n\t\t\"title\": \"Diese Datei herunterladen?\",\n\t\t\"description\": \"{{pluginName}} möchte eine Datei in seinen eigenen Speicherordner herunterladen. Die Datei wird von der unten stehenden URL geladen und nur innerhalb des Plugin-Ordners gespeichert.\",\n\t\t\"urlLabel\": \"URL\",\n\t\t\"destLabel\": \"Ziel\",\n\t\t\"sizeLabel\": \"Größe\",\n\t\t\"unknownSize\": \"unbekannt\",\n\t\t\"deny\": \"Ablehnen\",\n\t\t\"allow\": \"Erlauben\",\n\t\t\"remember\": \"Für diese Sitzung merken (keine weiteren Rückfragen dieses Plugins)\"\n\t},\n\t\"pagination\": {\n\t\t\"region\": \"Seitennavigation\",\n\t\t\"prev\": \"Zurück\",\n\t\t\"next\": \"Weiter\",\n\t\t\"previous\": \"Vorherige\",\n\t\t\"goTo\": \"Gehe zu\",\n\t\t\"jumpToPage\": \"Seite\",\n\t\t\"morePages\": \"Weitere Seiten\"\n\t},\n\t\"aria\": {\n\t\t\"loading\": \"Wird geladen\",\n\t\t\"closeToast\": \"Benachrichtigung schließen\",\n\t\t\"close\": \"Schließen\",\n\t\t\"more\": \"Mehr\",\n\t\t\"toggleSidebar\": \"Seitenleiste umschalten\",\n\t\t\"mobileSidebarDescription\": \"Zeigt die mobile Seitenleiste.\",\n\t\t\"sidebar\": \"Seitenleiste\",\n\t\t\"breadcrumb\": \"Breadcrumb\"\n\t},\n\t\"dialog\": {\n\t\t\"cancel\": \"Abbrechen\"\n\t},\n\t\"confirmByTyping\": {\n\t\t\"prompt\": \"Tippe „<name>{{name}}</name>“ ein, um zu bestätigen\"\n\t},\n\t\"colorPicker\": {\n\t\t\"clear\": \"Farbe entfernen\",\n\t\t\"addPreset\": \"Zu meinen Presets hinzufügen\",\n\t\t\"removePresetAria\": \"Preset {{color}} entfernen\",\n\t\t\"customSwatch\": \"Benutzerdefinierte Farbe wählen\"\n\t},\n\t\"fontPicker\": {\n\t\t\"inherit\": \"Globale Schriftart übernehmen\",\n\t\t\"inheritedHint\": \"Übernimmt derzeit die globale Schriftarteinstellung\",\n\t\t\"addCustom\": \"Schriftart per Name hinzufügen, Eingabetaste drücken…\",\n\t\t\"selected\": \"Fallback-Reihenfolge — zum Sortieren ziehen\",\n\t\t\"description\": \"Oberfläche und Listen — Dokumente behalten ihre Lesestimme.\"\n\t},\n\t\"imageCrop\": {\n\t\t\"saving\": \"Speichern…\",\n\t\t\"remove\": \"Entfernen\",\n\t\t\"save\": \"Speichern\",\n\t\t\"pickHint\": \"Klicken oder ablegen\",\n\t\t\"reselect\": \"Erneut hochladen\",\n\t\t\"previewLabel\": \"Vorschau\",\n\t\t\"previewAlt\": \"Zugeschnittene Vorschau\",\n\t\t\"showPreview\": \"Vorschau anzeigen\",\n\t\t\"saveFailed\": \"Speichern fehlgeschlagen\"\n\t},\n\t\"panelToolbar\": {\n\t\t\"add\": \"Hinzufügen\",\n\t\t\"unused\": \"Ungenutzt\",\n\t\t\"reorder\": \"Neu ordnen\"\n\t}\n}\n","{\n\t\"caption\": {\n\t\t\"back\": \"Back\",\n\t\t\"forward\": \"Forward\",\n\t\t\"reload\": \"Reload\",\n\t\t\"minimize\": \"Minimize\",\n\t\t\"maximize\": \"Maximize\",\n\t\t\"restore\": \"Restore\",\n\t\t\"close\": \"Close\",\n\t\t\"devtools\": \"Developer tools\"\n\t},\n\t\"closeConfirm\": {\n\t\t\"title\": \"Close hoardodile?\",\n\t\t\"description\": \"The app keeps running in the tray unless you quit it.\",\n\t\t\"tray\": \"Hide to tray\",\n\t\t\"quit\": \"Quit the app\",\n\t\t\"cancel\": \"Cancel\",\n\t\t\"remember\": \"Remember my choice\"\n\t},\n\t\"pluginDownload\": {\n\t\t\"eyebrow\": \"Plugin download\",\n\t\t\"title\": \"Download this file?\",\n\t\t\"description\": \"{{pluginName}} wants to download a file into its own storage folder. The file is fetched from the URL below and stored only inside the plugin's folder.\",\n\t\t\"urlLabel\": \"URL\",\n\t\t\"destLabel\": \"Destination\",\n\t\t\"sizeLabel\": \"Size\",\n\t\t\"unknownSize\": \"unknown\",\n\t\t\"deny\": \"Deny\",\n\t\t\"allow\": \"Allow\",\n\t\t\"remember\": \"Remember for this session (no more prompts from this plugin)\"\n\t},\n\t\"pagination\": {\n\t\t\"region\": \"pagination\",\n\t\t\"prev\": \"Prev\",\n\t\t\"next\": \"Next\",\n\t\t\"previous\": \"Previous\",\n\t\t\"goTo\": \"Go to\",\n\t\t\"jumpToPage\": \"Page\",\n\t\t\"morePages\": \"More pages\"\n\t},\n\t\"aria\": {\n\t\t\"loading\": \"Loading\",\n\t\t\"closeToast\": \"Close toast\",\n\t\t\"close\": \"Close\",\n\t\t\"more\": \"More\",\n\t\t\"toggleSidebar\": \"Toggle Sidebar\",\n\t\t\"mobileSidebarDescription\": \"Displays the mobile sidebar.\",\n\t\t\"sidebar\": \"Sidebar\",\n\t\t\"breadcrumb\": \"breadcrumb\"\n\t},\n\t\"dialog\": {\n\t\t\"cancel\": \"Cancel\"\n\t},\n\t\"confirmByTyping\": {\n\t\t\"prompt\": \"Type \\\"<name>{{name}}</name>\\\" to confirm\"\n\t},\n\t\"colorPicker\": {\n\t\t\"clear\": \"Clear color\",\n\t\t\"addPreset\": \"Add to my presets\",\n\t\t\"removePresetAria\": \"Remove preset {{color}}\",\n\t\t\"customSwatch\": \"Pick a custom color\"\n\t},\n\t\"fontPicker\": {\n\t\t\"inherit\": \"Inherit global font\",\n\t\t\"inheritedHint\": \"Currently inheriting the global font setting\",\n\t\t\"addCustom\": \"Add a font by name, press Enter…\",\n\t\t\"selected\": \"Fallback order — drag to rearrange\",\n\t\t\"description\": \"Chrome and lists — documents keep their reading voice.\"\n\t},\n\t\"imageCrop\": {\n\t\t\"saving\": \"Saving…\",\n\t\t\"remove\": \"Remove\",\n\t\t\"save\": \"Save\",\n\t\t\"pickHint\": \"Click or drop\",\n\t\t\"reselect\": \"Re-upload\",\n\t\t\"previewLabel\": \"Preview\",\n\t\t\"previewAlt\": \"Cropped preview\",\n\t\t\"showPreview\": \"Show preview\",\n\t\t\"saveFailed\": \"Save failed\"\n\t},\n\t\"panelToolbar\": {\n\t\t\"add\": \"Add\",\n\t\t\"unused\": \"Unused\",\n\t\t\"reorder\": \"Reorder\"\n\t}\n}\n","{\n\t\"caption\": {\n\t\t\"back\": \"Atrás\",\n\t\t\"forward\": \"Adelante\",\n\t\t\"reload\": \"Recargar\",\n\t\t\"minimize\": \"Minimizar\",\n\t\t\"maximize\": \"Maximizar\",\n\t\t\"restore\": \"Restaurar\",\n\t\t\"close\": \"Cerrar\",\n\t\t\"devtools\": \"Herramientas de desarrollo\"\n\t},\n\t\"closeConfirm\": {\n\t\t\"title\": \"¿Cerrar hoardodile?\",\n\t\t\"description\": \"La app sigue ejecutándose en la bandeja a menos que la cierres.\",\n\t\t\"tray\": \"Ocultar en la bandeja\",\n\t\t\"quit\": \"Salir de la app\",\n\t\t\"cancel\": \"Cancelar\",\n\t\t\"remember\": \"Recordar mi elección\"\n\t},\n\t\"pluginDownload\": {\n\t\t\"eyebrow\": \"Descarga de plugin\",\n\t\t\"title\": \"¿Descargar este archivo?\",\n\t\t\"description\": \"{{pluginName}} quiere descargar un archivo a su propia carpeta de almacenamiento. El archivo se obtiene desde la URL siguiente y solo se guarda dentro de la carpeta del plugin.\",\n\t\t\"urlLabel\": \"URL\",\n\t\t\"destLabel\": \"Destino\",\n\t\t\"sizeLabel\": \"Tamaño\",\n\t\t\"unknownSize\": \"desconocido\",\n\t\t\"deny\": \"Rechazar\",\n\t\t\"allow\": \"Permitir\",\n\t\t\"remember\": \"Recordar para esta sesión (sin más avisos de este plugin)\"\n\t},\n\t\"pagination\": {\n\t\t\"region\": \"Paginación\",\n\t\t\"prev\": \"Ant.\",\n\t\t\"next\": \"Sig.\",\n\t\t\"previous\": \"Anterior\",\n\t\t\"goTo\": \"Ir a\",\n\t\t\"jumpToPage\": \"Página\",\n\t\t\"morePages\": \"Más páginas\"\n\t},\n\t\"aria\": {\n\t\t\"loading\": \"Cargando\",\n\t\t\"closeToast\": \"Cerrar aviso\",\n\t\t\"close\": \"Cerrar\",\n\t\t\"more\": \"Más\",\n\t\t\"toggleSidebar\": \"Alternar barra lateral\",\n\t\t\"mobileSidebarDescription\": \"Muestra la barra lateral móvil.\",\n\t\t\"sidebar\": \"Barra lateral\",\n\t\t\"breadcrumb\": \"Migaja de pan\"\n\t},\n\t\"dialog\": {\n\t\t\"cancel\": \"Cancelar\"\n\t},\n\t\"confirmByTyping\": {\n\t\t\"prompt\": \"Escribe «<name>{{name}}</name>» para confirmar\"\n\t},\n\t\"colorPicker\": {\n\t\t\"clear\": \"Quitar color\",\n\t\t\"addPreset\": \"Añadir a mis preajustes\",\n\t\t\"removePresetAria\": \"Quitar preajuste {{color}}\",\n\t\t\"customSwatch\": \"Elegir un color personalizado\"\n\t},\n\t\"fontPicker\": {\n\t\t\"inherit\": \"Heredar la fuente global\",\n\t\t\"inheritedHint\": \"Ahora estás heredando la configuración de fuente global\",\n\t\t\"addCustom\": \"Añade una fuente por nombre y pulsa Intro…\",\n\t\t\"selected\": \"Orden de reserva — arrastra para reordenar\",\n\t\t\"description\": \"Interfaz y listas; los documentos conservan su voz de lectura.\"\n\t},\n\t\"imageCrop\": {\n\t\t\"saving\": \"Guardando…\",\n\t\t\"remove\": \"Quitar\",\n\t\t\"save\": \"Guardar\",\n\t\t\"pickHint\": \"Haz clic o suelta\",\n\t\t\"reselect\": \"Volver a subir\",\n\t\t\"previewLabel\": \"Vista previa\",\n\t\t\"previewAlt\": \"Vista previa recortada\",\n\t\t\"showPreview\": \"Mostrar vista previa\",\n\t\t\"saveFailed\": \"Falló el guardado\"\n\t},\n\t\"panelToolbar\": {\n\t\t\"add\": \"Añadir\",\n\t\t\"unused\": \"Sin usar\",\n\t\t\"reorder\": \"Reordenar\"\n\t}\n}\n","{\n\t\"caption\": {\n\t\t\"back\": \"戻る\",\n\t\t\"forward\": \"進む\",\n\t\t\"reload\": \"再読み込み\",\n\t\t\"minimize\": \"最小化\",\n\t\t\"maximize\": \"最大化\",\n\t\t\"restore\": \"元に戻す\",\n\t\t\"close\": \"閉じる\",\n\t\t\"devtools\": \"開発者ツール\"\n\t},\n\t\"closeConfirm\": {\n\t\t\"title\": \"hoardodile を閉じますか?\",\n\t\t\"description\": \"終了しない限り、アプリはトレイで動作し続けます。\",\n\t\t\"tray\": \"トレイに隠す\",\n\t\t\"quit\": \"アプリを終了\",\n\t\t\"cancel\": \"キャンセル\",\n\t\t\"remember\": \"選択を記憶する\"\n\t},\n\t\"pluginDownload\": {\n\t\t\"eyebrow\": \"プラグインのダウンロード\",\n\t\t\"title\": \"このファイルをダウンロードしますか?\",\n\t\t\"description\": \"{{pluginName}} はファイルを自身のストレージフォルダにダウンロードしようとしています。ファイルは下記のURLから取得され、プラグイン自身のフォルダ内にのみ保存されます。\",\n\t\t\"urlLabel\": \"URL\",\n\t\t\"destLabel\": \"保存先\",\n\t\t\"sizeLabel\": \"サイズ\",\n\t\t\"unknownSize\": \"不明\",\n\t\t\"deny\": \"拒否\",\n\t\t\"allow\": \"許可\",\n\t\t\"remember\": \"このセッションでは記憶する(このプラグインへの確認を省略)\"\n\t},\n\t\"pagination\": {\n\t\t\"region\": \"ページネーション\",\n\t\t\"prev\": \"前へ\",\n\t\t\"next\": \"次へ\",\n\t\t\"previous\": \"前へ\",\n\t\t\"goTo\": \"移動先\",\n\t\t\"jumpToPage\": \"ページ\",\n\t\t\"morePages\": \"その他のページ\"\n\t},\n\t\"aria\": {\n\t\t\"loading\": \"読み込み中\",\n\t\t\"closeToast\": \"通知を閉じる\",\n\t\t\"close\": \"閉じる\",\n\t\t\"more\": \"その他\",\n\t\t\"toggleSidebar\": \"サイドバーを切り替え\",\n\t\t\"mobileSidebarDescription\": \"モバイルサイドバーを表示します。\",\n\t\t\"sidebar\": \"サイドバー\",\n\t\t\"breadcrumb\": \"パンくず\"\n\t},\n\t\"dialog\": {\n\t\t\"cancel\": \"キャンセル\"\n\t},\n\t\"confirmByTyping\": {\n\t\t\"prompt\": \"確認するには「<name>{{name}}</name>」と入力してください\"\n\t},\n\t\"colorPicker\": {\n\t\t\"clear\": \"色をクリア\",\n\t\t\"addPreset\": \"マイプリセットに追加\",\n\t\t\"removePresetAria\": \"プリセット {{color}} を削除\",\n\t\t\"customSwatch\": \"カスタム色を選択\"\n\t},\n\t\"fontPicker\": {\n\t\t\"inherit\": \"グローバルフォントを継承\",\n\t\t\"inheritedHint\": \"現在グローバルフォント設定を継承しています\",\n\t\t\"addCustom\": \"フォント名を入力して Enter を押すと追加…\",\n\t\t\"selected\": \"フォールバック順 — ドラッグで並べ替え\",\n\t\t\"description\": \"画面とリスト — ドキュメントは読み味を保ちます。\"\n\t},\n\t\"imageCrop\": {\n\t\t\"saving\": \"保存中…\",\n\t\t\"remove\": \"削除\",\n\t\t\"save\": \"保存\",\n\t\t\"pickHint\": \"クリックまたはドロップ\",\n\t\t\"reselect\": \"再アップロード\",\n\t\t\"previewLabel\": \"プレビュー\",\n\t\t\"previewAlt\": \"切り抜きプレビュー\",\n\t\t\"showPreview\": \"プレビューを表示\",\n\t\t\"saveFailed\": \"保存に失敗しました\"\n\t},\n\t\"panelToolbar\": {\n\t\t\"add\": \"追加\",\n\t\t\"unused\": \"未使用\",\n\t\t\"reorder\": \"並べ替え\"\n\t}\n}\n","{\n\t\"caption\": {\n\t\t\"back\": \"后退\",\n\t\t\"forward\": \"前进\",\n\t\t\"reload\": \"刷新\",\n\t\t\"minimize\": \"最小化\",\n\t\t\"maximize\": \"最大化\",\n\t\t\"restore\": \"还原\",\n\t\t\"close\": \"关闭\",\n\t\t\"devtools\": \"开发者工具\"\n\t},\n\t\"closeConfirm\": {\n\t\t\"title\": \"关闭 hoardodile?\",\n\t\t\"description\": \"除非选择退出,应用会继续在托盘运行。\",\n\t\t\"tray\": \"最小化到托盘\",\n\t\t\"quit\": \"退出应用\",\n\t\t\"cancel\": \"取消\",\n\t\t\"remember\": \"记住我的选择\"\n\t},\n\t\"pluginDownload\": {\n\t\t\"eyebrow\": \"插件下载\",\n\t\t\"title\": \"下载这个文件?\",\n\t\t\"description\": \"{{pluginName}} 想下载一个文件到它自己的存储目录。文件将从下面的链接获取,且只会保存到插件自身的文件夹内。\",\n\t\t\"urlLabel\": \"链接\",\n\t\t\"destLabel\": \"目标路径\",\n\t\t\"sizeLabel\": \"大小\",\n\t\t\"unknownSize\": \"未知\",\n\t\t\"deny\": \"拒绝\",\n\t\t\"allow\": \"允许\",\n\t\t\"remember\": \"本会话记住(不再向此插件询问)\"\n\t},\n\t\"pagination\": {\n\t\t\"region\": \"分页\",\n\t\t\"prev\": \"上一页\",\n\t\t\"next\": \"下一页\",\n\t\t\"previous\": \"上一个\",\n\t\t\"goTo\": \"跳至\",\n\t\t\"jumpToPage\": \"页\",\n\t\t\"morePages\": \"更多页\"\n\t},\n\t\"aria\": {\n\t\t\"loading\": \"加载中\",\n\t\t\"closeToast\": \"关闭通知\",\n\t\t\"close\": \"关闭\",\n\t\t\"more\": \"更多\",\n\t\t\"toggleSidebar\": \"切换侧边栏\",\n\t\t\"mobileSidebarDescription\": \"显示移动端侧边栏。\",\n\t\t\"sidebar\": \"侧边栏\",\n\t\t\"breadcrumb\": \"面包屑\"\n\t},\n\t\"dialog\": {\n\t\t\"cancel\": \"取消\"\n\t},\n\t\"confirmByTyping\": {\n\t\t\"prompt\": \"请输入“<name>{{name}}</name>”以确认\"\n\t},\n\t\"colorPicker\": {\n\t\t\"clear\": \"清除颜色\",\n\t\t\"addPreset\": \"添加到我的预设\",\n\t\t\"removePresetAria\": \"移除预设 {{color}}\",\n\t\t\"customSwatch\": \"选取自定义颜色\"\n\t},\n\t\"fontPicker\": {\n\t\t\"inherit\": \"继承主字体\",\n\t\t\"inheritedHint\": \"当前继承全局字体设置\",\n\t\t\"addCustom\": \"按名称添加字体,回车确认…\",\n\t\t\"selected\": \"回退顺序——拖拽调整\",\n\t\t\"description\": \"界面与列表——文档保持其阅读音色。\"\n\t},\n\t\"imageCrop\": {\n\t\t\"saving\": \"保存中…\",\n\t\t\"remove\": \"移除\",\n\t\t\"save\": \"保存\",\n\t\t\"pickHint\": \"点击或拖入\",\n\t\t\"reselect\": \"重新上传\",\n\t\t\"previewLabel\": \"预览\",\n\t\t\"previewAlt\": \"预览图片\",\n\t\t\"showPreview\": \"显示预览\",\n\t\t\"saveFailed\": \"保存失败\"\n\t},\n\t\"panelToolbar\": {\n\t\t\"add\": \"添加\",\n\t\t\"unused\": \"未使用\",\n\t\t\"reorder\": \"排序\"\n\t}\n}\n","/**\n * The `ui` catalog registry: component-chrome strings shared by every\n * React consumer — `@hoardodile/ui` components (`useTranslation(\"ui\")`),\n * the host surfaces and the plugin SDK iframes. Like the app catalogs\n * these five JSON modules must stay in lockstep; `parity.test.ts`\n * enforces it and `Record<SupportedLanguage, typeof en>` makes key drift\n * a compile error.\n *\n * Console: `catalogFor` in `./catalogs.ts` serves the app `translation`\n * namespace; `uiCatalogFor` here serves the `ui` namespace.\n */\n\nimport type { SupportedLanguage } from \"../core.ts\"\nimport de from \"../ui/de.json\"\nimport en from \"../ui/en.json\"\nimport es from \"../ui/es.json\"\nimport ja from \"../ui/ja.json\"\nimport zh from \"../ui/zh.json\"\n\nexport const UI_CATALOGS = { en, zh, ja, de, es } as const satisfies Record<\n\tSupportedLanguage,\n\ttypeof en\n>\n\n/** Resolve the ui catalog for the active language; undefined → English. */\nexport function uiCatalogFor(\n\tlanguage: SupportedLanguage | undefined,\n): typeof en {\n\treturn language === undefined ? en : UI_CATALOGS[language]\n}\n"]}