@cldmv/slothlet-i18n 3.12.2 → 3.13.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.
@@ -43,6 +43,8 @@
43
43
  "HINT_COLLISION_DEFAULT_EXPORT_ERROR": "Ein benannter Export kollidiert mit einer Eigenschaft, die bereits im Standard-Exportobjekt dieses Pfades existiert. Ändern Sie den Kollisionsmodus auf 'merge', 'replace', 'warn' oder 'skip' oder benennen Sie die kollidierende Eigenschaft um.",
44
44
  "INVALID_ARGUMENT": "Ungültiges Argument '{argument}': Erwartet wurde {expected}, erhalten wurde {received}.",
45
45
  "HINT_INVALID_ARGUMENT": "Der Pfad muss ein Dot-Notation-String sein (z.B. 'math.add').",
46
+ "API_LEAVES_UNKNOWN_MODULE": "Kein Modul für '{key}' gefunden. Übergeben Sie eine von api.add() zurückgegebene moduleID, einen Mount-Endpunkt oder einen zugehörigen API-Pfad, oder '.' für die Basis-Ladung.",
47
+ "HINT_API_LEAVES_UNKNOWN_MODULE": "leaves() löst seinen Schlüssel gegen die Ownership-Einträge auf: eine moduleID, den Mount-Pfad eines Moduls oder einen Pfad, den dieses Modul besitzt. Aktuelle Mounts über api.slothlet.owner.get() auflisten.",
46
48
  "RUNTIME_NO_ACTIVE_CONTEXT": "Kein aktiver Kontext gefunden. Diese Operation erfordert den Aufruf innerhalb einer Slothlet-API-Funktion.",
47
49
  "HINT_RUNTIME_NO_ACTIVE_CONTEXT": "metadata.self() muss innerhalb einer Slothlet-API-Funktion aufgerufen werden.",
48
50
  "INVALID_CONFIG_MUTATIONS_DISABLED": "Operation '{operation}' kann nicht ausgeführt werden - Mutationen sind deaktiviert. Setzen Sie allowMutation: true, um API-Modifikationsoperationen (add/remove/reload) zu aktivieren.",
@@ -57,6 +59,10 @@
57
59
  "HINT_MODULE_LOAD_FAILED": "Prüfen Sie die Moduldatei auf Fehler. Stellen Sie sicher, dass sie gültige JavaScript-Syntax und Exports besitzt.",
58
60
  "MODULE_NOT_FOUND": "Modul nicht gefunden: {modulePath}. {hint}",
59
61
  "HINT_MODULE_NOT_FOUND": "Stellen Sie sicher, dass das Modul existiert und der Pfad korrekt ist. Prüfen Sie auf Tippfehler in der Import-Anweisung.",
62
+ "MODULE_RESERVED_FILENAME": "Die Moduldatei '{file}' in '{dir}' trägt den Namen eines framework-reservierten Schlüssels und kann nicht geladen werden.",
63
+ "HINT_MODULE_RESERVED_FILENAME": "Reservierte Namen (INTERNAL_KEYS wie _materialize, _impl) sind die eigenen Wrapper-Handles des Frameworks; eine gleichnamige Moduldatei würde sie bei der Child-Adoption überschreiben. Benennen Sie die Datei um.",
64
+ "MODULE_RESERVED_EXPORT": "Der Modul-Export '{name}' trägt den Namen eines framework-reservierten Schlüssels und kann nicht geladen werden.",
65
+ "HINT_MODULE_RESERVED_EXPORT": "Reservierte Namen (_materialize, __impl, ...) sind die eigenen Wrapper-Handles des Frameworks — ein solcher Export könnte nur verdeckt und unerreichbar sein. Benennen Sie den Export um.",
60
66
  "MODULE_IMPORT_FAILED": "Fehler beim Importieren des Moduls '{modulePath}': {error}. Überprüfen Sie, ob die Datei existiert und eine gültige Syntax hat.",
61
67
  "HINT_MODULE_IMPORT_FAILED": "Stellen Sie sicher, dass die Moduldatei existiert und importiert werden kann. Prüfen Sie auf Syntaxfehler oder fehlende Abhängigkeiten.",
62
68
  "CONTEXT_ALREADY_EXISTS": "Kontext für Instanz '{instanceID}' existiert bereits. Initialisierung kann nicht zweimal erfolgen.",
@@ -121,8 +127,6 @@
121
127
  "HINT_V3_CONFIG_DEPRECATED": "Dieser Konfigurationsparameter wurde zur Klarheit umbenannt. Aktualisieren Sie Ihren Code auf den neuen Optionsnamen, um Vorwärtskompatibilität mit v4 sicherzustellen.",
122
128
  "CONFIG_SCAN_HIDDEN_FOLDERS_DEPRECATED": "Konfigurationsoption '{option}' ist veraltet und wird in v4 entfernt. Versteckte Ordner (Namen, die mit '.' oder '__' beginnen) werden standardmäßig aus der API ausgeschlossen.",
123
129
  "HINT_CONFIG_SCAN_HIDDEN_FOLDERS_DEPRECATED": "Diese Option ist eine vorübergehende Kompatibilitätslösung. Verschieben Sie Nicht-API-Inhalte aus dem API-Verzeichnis, damit versteckte Ordner nicht mehr gescannt werden müssen.",
124
- "V2_CONFIG_UNSUPPORTED": "Konfigurationsoption '{option}' aus v2 wird in v3 nicht unterstützt. {hint} Verwenden Sie stattdessen '{replacement}'.",
125
- "HINT_V2_CONFIG_UNSUPPORTED": "Diese Konfigurationsoption aus v2 wird in v3 nicht unterstützt. Aktualisieren Sie Ihre Konfiguration auf das v3-Äquivalent für bessere Kontrolle und Klarheit.",
126
130
  "DEBUG_MODE_ROOT_CONTRIBUTOR": "[{mode}] Root-Contributor erkannt: {functionName}",
127
131
  "DEBUG_MODE_ROOT_CONTRIBUTOR_APPLIED": "[{mode}] Root-Contributor-Muster angewendet - Funktions-API mit {properties} zusätzlichen Eigenschaften",
128
132
  "DEBUG_MODE_PROCESSING_DIRECTORY": "[{mode}] Verarbeite Verzeichnis: {categoryName} (Tiefe {currentDepth})",
@@ -300,8 +304,12 @@
300
304
  "HINT_INVALID_HOOK_SUBSET": "Subsets steuern die Reihenfolge der Ausführung. Benutzen Sie 'before' für Pre-Processing, 'primary' (Standard) für Haupt-Hooks oder 'after' für Post-Processing.",
301
305
  "INVALID_TYPE_PATTERN": "Ungültiges Typ-Muster \"{typePattern}\". {expected}",
302
306
  "HINT_INVALID_TYPE_PATTERN": "Hook-Muster verwenden die Form 'pattern:type', wie z.B. 'math.*:before' oder '**:error'. Die ältere Form 'type:pattern' funktioniert weiterhin, ist aber veraltet.",
303
- "HOOK_BEFORE_RETURNED_PROMISE": "Der 'before' Hook '{id}' für Pfad '{path}' hat ein Promise zurückgegeben. 'before' Hooks müssen synchron sein.",
304
- "HINT_HOOK_BEFORE_RETURNED_PROMISE": "Before-Hooks werden synchron vor dem API-Aufruf ausgeführt. Entfernen Sie async/await oder die Verwendung von Promises aus diesem Hook oder ändern Sie ihn zu einem 'after' Hook, falls asynchrone Verarbeitung nötig ist.",
307
+ "HOOK_BEFORE_RETURNED_PROMISE": "Der 'before' Hook '{id}' für Pfad '{path}' hat in einer synchronen Pipeline ein Promise zurückgegeben.",
308
+ "HINT_HOOK_BEFORE_RETURNED_PROMISE": "Ein 'before'-Handler wurde nicht als asynchron erkannt. Verwenden Sie eine native async-Funktion oder registrieren Sie ihn mit { async: true }, damit der Aufruf in die asynchrone Pipeline befördert wird.",
309
+ "HOOK_AFTER_RETURNED_PROMISE": "Der 'after' Hook '{id}' für Pfad '{path}' hat in einer synchronen Pipeline ein Promise zurückgegeben.",
310
+ "HINT_HOOK_AFTER_RETURNED_PROMISE": "Ein 'after'-Handler wurde nicht als asynchron erkannt. Verwenden Sie eine native async-Funktion oder registrieren Sie ihn mit { async: true }, damit der Aufruf in die asynchrone Pipeline befördert wird.",
311
+ "HOOK_PROMOTED_RESULT_NOT_AWAITED": "Pfad '{path}' hat ein Promise zurückgegeben, weil ein asynchroner Hook angehängt ist — verwenden Sie await für das Ergebnis.",
312
+ "HINT_HOOK_PROMOTED_RESULT_NOT_AWAITED": "Ein synchrones Ziel wird zur asynchronen Verarbeitung befördert, solange ein asynchroner before/after-Hook angehängt ist. Verwenden Sie await, oder entfernen Sie den asynchronen Hook, um synchrone Rückgaben wiederherzustellen.",
305
313
  "HOOK_BRACE_EXPANSION_MAX_DEPTH": "Die Klammererweiterung (Brace Expansion) im Hook-Muster überschreitet die maximale Verschachtelungstiefe von {maxDepth}.",
306
314
  "HINT_HOOK_BRACE_EXPANSION_MAX_DEPTH": "Vereinfachen Sie das Hook-Pfad-Muster, um die Klammerverschachtelung zu reduzieren. Die maximal erlaubte Tiefe beträgt {maxDepth} Ebenen.",
307
315
  "SCOPE_DISABLED": "Die Kontext-Isolation pro Anfrage ist deaktiviert. Setzen Sie 'scope: {}' in Ihrer Slothlet-Konfiguration, um sie zu aktivieren.",
@@ -385,6 +393,8 @@
385
393
  "UNSUPPORTED_CONTEXT_MANAGER": "Nicht unterstützter Context-Manager: '{manager}'. Nur AsyncContextManager und LiveContextManager werden unterstützt.",
386
394
  "HINT_UNSUPPORTED_CONTEXT_MANAGER": "Benutzen Sie AsyncContextManager für asynchrone/ALS-basierten Kontext oder LiveContextManager für synchronen Live-Binding-Kontext.",
387
395
  "INVALID_CONFIG_VERSION_DISPATCHER": "config.versionDispatcher muss ein String (Metadatenschlüssel) oder eine Funktion sein; erhalten: {received}",
396
+ "INVALID_CONFIG_IMPORT": "Ungültige 'import'-Option: Funktion erwartet, {received} erhalten.",
397
+ "HINT_INVALID_CONFIG_IMPORT": "Der injizierbare Leaf-Importer ersetzt den nativen dynamischen Import des Loaders. Übergeben Sie eine Funktion wie (url) => import(url) — typischerweise an Ihren Test-Runner gebunden, damit die Leaf-Abdeckung zugeordnet wird.",
388
398
  "INVALID_CONFIG_VERSION_TAG": "versionConfig.version muss ein nicht leerer String sein; erhalten: {received}",
389
399
  "VERSION_NOT_FOUND": "Version '{version}' ist unter dem Pfad '{apiPath}' nicht registriert.",
390
400
  "HINT_VERSION_NOT_FOUND": "Rufen Sie api.slothlet.versioning.list('{apiPath}') auf, um zu sehen, welche Versions-Tags derzeit unter diesem Pfad registriert sind.",
@@ -467,7 +477,13 @@
467
477
  "CONTEXT_KEY_OWNED": "Kontextschlüssel '{key}' ist bereits vergeben und kann von einem verschachtelten Scope nicht erneut beansprucht werden.",
468
478
  "SCOPE_INVALID_PROTECT": "'protect' muss ein Array von String-Schlüsseln sein. Erhalten: {received}.",
469
479
  "SCOPE_INVALID_OWNERS": "'owners' muss ein einfaches Objekt sein, das Schlüssel auf Eigentümernamen abbildet. Erhalten: {received}.",
470
- "PERMISSION_SEALED": "Die Berechtigungssteuerung ist versiegelt; die Richtlinie kann nicht mehr geändert werden."
480
+ "PERMISSION_SEALED": "Die Berechtigungssteuerung ist versiegelt; die Richtlinie kann nicht mehr geändert werden.",
481
+ "WARNING_COVERAGE_IMPORTER_UNSET": "Ein Coverage-Lauf ist aktiv, aber kein injizierbarer Leaf-Importer ist konfiguriert — die Leaf-Ladungen dieses externalisierten slothlet werden Ihrem Coverage-Bericht nicht zugeordnet.",
482
+ "HINT_WARNING_COVERAGE_IMPORTER_UNSET": "Übergeben Sie die Option 'import' aus Ihrem Test-Setup — eine Funktion wie (url) => import(url) — damit Leaf-Ladungen über den Modulgraphen Ihres Runners laufen. Siehe docs/TESTING.md.",
483
+ "HOOK_VERSION_UNRESOLVED": "Das Hook-Muster '{pattern}' konnte keiner registrierten Version zugeordnet werden.",
484
+ "HINT_HOOK_VERSION_UNRESOLVED": "Der Versions-Dispatch benötigt einen versionierten Mount, der den Pfad des Musters abdeckt (api.add(path, source, options, { version })). Ein Dispatcher muss ein registriertes Tag, ein Array davon oder nichts (für die Standardversion) zurückgeben — oder entfernen Sie die Option versioned/versionDispatcher, um das Muster wörtlich zu registrieren.",
485
+ "HOOK_VERSION_UNKNOWN_TAG": "Der Versions-Dispatch für das Hook-Muster '{pattern}' hat '{version}' gewählt, das keine registrierte Version ist.",
486
+ "HINT_HOOK_VERSION_UNKNOWN_TAG": "Der Dispatcher muss aus den in allVersions übergebenen registrierten Tags wählen. Registrieren Sie zuerst den Mount (api.add mit einer Version) oder korrigieren Sie den Rückgabewert des Dispatchers."
471
487
  },
472
488
  "metadata": {
473
489
  "code": "de-de",
@@ -43,6 +43,8 @@
43
43
  "HINT_COLLISION_DEFAULT_EXPORT_ERROR": "A named export conflicts with a property already present on the default export object at this path. Change the collision mode to 'merge', 'replace', 'warn', or 'skip', or rename the conflicting property.",
44
44
  "INVALID_ARGUMENT": "Invalid argument '{argument}': expected {expected}, received {received}.",
45
45
  "HINT_INVALID_ARGUMENT": "Path must be a dot-notation string (e.g., 'math.add').",
46
+ "API_LEAVES_UNKNOWN_MODULE": "No module found for '{key}'. Pass a moduleID returned by api.add(), a mount endpoint or owned api path, or '.' for the base load.",
47
+ "HINT_API_LEAVES_UNKNOWN_MODULE": "leaves() resolves its key against the ownership records: a moduleID, the path a module was mounted at, or any path that module owns. List current mounts via api.slothlet.owner.get().",
46
48
  "RUNTIME_NO_ACTIVE_CONTEXT": "No active context found. This operation requires being called from within a slothlet API function.",
47
49
  "HINT_RUNTIME_NO_ACTIVE_CONTEXT": "metadata.self() must be called from within a slothlet API function.",
48
50
  "INVALID_CONFIG_MUTATIONS_DISABLED": "Cannot perform '{operation}' - mutation is disabled. Set allowMutation: true to enable API modification operations (add/remove/reload).",
@@ -57,6 +59,10 @@
57
59
  "HINT_MODULE_LOAD_FAILED": "Check the module file for errors. Ensure it has valid JavaScript syntax and exports.",
58
60
  "MODULE_NOT_FOUND": "Module not found: {modulePath}. {hint}",
59
61
  "HINT_MODULE_NOT_FOUND": "Ensure the module exists and the path is correct. Check for typos in the import statement.",
62
+ "MODULE_RESERVED_FILENAME": "Module file '{file}' in '{dir}' is named for a framework-reserved key and cannot be loaded.",
63
+ "HINT_MODULE_RESERVED_FILENAME": "Reserved names (INTERNAL_KEYS such as _materialize, _impl) are the framework's own wrapper handles; a module file by that name would overwrite them during child adoption. Rename the file.",
64
+ "MODULE_RESERVED_EXPORT": "Module export '{name}' is named for a framework-reserved key and cannot be loaded.",
65
+ "HINT_MODULE_RESERVED_EXPORT": "Reserved names (_materialize, __impl, ...) are the framework's own wrapper handles — such an export could only ever be shadowed and unreachable. Rename the export.",
60
66
  "MODULE_IMPORT_FAILED": "Failed to import module '{modulePath}': {error}. Check that the file exists and has valid syntax.",
61
67
  "HINT_MODULE_IMPORT_FAILED": "Ensure the module file exists and can be imported. Check for syntax errors or missing dependencies.",
62
68
  "CONTEXT_ALREADY_EXISTS": "Context for instance '{instanceID}' already exists. Cannot initialize twice.",
@@ -119,8 +125,6 @@
119
125
  "HINT_V3_CONFIG_DEPRECATED": "This configuration option has been renamed for clarity. Update your code to use the new option name to ensure forward compatibility with v4.",
120
126
  "CONFIG_SCAN_HIDDEN_FOLDERS_DEPRECATED": "Configuration option '{option}' is deprecated and will be removed in v4. Hidden folders (names starting with '.' or '__') are excluded from the API by default.",
121
127
  "HINT_CONFIG_SCAN_HIDDEN_FOLDERS_DEPRECATED": "This option is a temporary backwards-compatibility escape hatch. Move non-API content out of the API directory so hidden folders no longer need to be scanned.",
122
- "V2_CONFIG_UNSUPPORTED": "Configuration option '{option}' from v2 is not supported in v3. {hint} Use '{replacement}' instead.",
123
- "HINT_V2_CONFIG_UNSUPPORTED": "This configuration option from v2 is not supported in v3. Update your configuration to use the v3 equivalent for better control and clarity.",
124
128
  "WARN_SUPPRESS_FIX_ACTIVE": "Rule fix '{rule}' is suppressed via 'suppressFixes'. See {url} for details. This is a temporary override and will be removed in v4. The corrected '{rule}' behaviour will be enforced permanently.",
125
129
  "HINT_WARN_SUPPRESS_FIX_ACTIVE": "Remove '{rule}' from 'suppressFixes' and update your API directory structure to accommodate the corrected behaviour before upgrading to v4.",
126
130
  "DEBUG_MODE_ROOT_CONTRIBUTOR": "[{mode}] Root contributor detected: {functionName}",
@@ -300,8 +304,12 @@
300
304
  "HINT_INVALID_HOOK_SUBSET": "Subsets control execution order. Use 'before' for pre-processing, 'primary' (default) for main hooks, or 'after' for post-processing.",
301
305
  "INVALID_TYPE_PATTERN": "Invalid type pattern \"{typePattern}\". {expected}",
302
306
  "HINT_INVALID_TYPE_PATTERN": "Hook patterns use the form 'pattern:type', such as 'math.*:before' or '**:error'. The legacy 'type:pattern' form still works but is deprecated.",
303
- "HOOK_BEFORE_RETURNED_PROMISE": "Before hook '{id}' for path '{path}' returned a Promise. Before hooks must be synchronous.",
304
- "HINT_HOOK_BEFORE_RETURNED_PROMISE": "Before hooks execute synchronously before the API call. Remove async/await or Promise usage from this hook, or change it to an 'after' hook if async processing is needed.",
307
+ "HOOK_BEFORE_RETURNED_PROMISE": "Before hook '{id}' for path '{path}' returned a Promise in a synchronous pipeline.",
308
+ "HINT_HOOK_BEFORE_RETURNED_PROMISE": "A 'before' handler was not detected as asynchronous. Use a native async function, or register it with { async: true }, so the call promotes to the asynchronous pipeline.",
309
+ "HOOK_AFTER_RETURNED_PROMISE": "After hook '{id}' for path '{path}' returned a Promise in a synchronous pipeline.",
310
+ "HINT_HOOK_AFTER_RETURNED_PROMISE": "An 'after' handler was not detected as asynchronous. Use a native async function, or register it with { async: true }, so the call promotes to the asynchronous pipeline.",
311
+ "HOOK_PROMOTED_RESULT_NOT_AWAITED": "Path '{path}' returned a Promise because an asynchronous hook is attached — await the result.",
312
+ "HINT_HOOK_PROMOTED_RESULT_NOT_AWAITED": "A synchronous target promotes to asynchronous dispatch while an async before/after hook is attached. Await the call, or remove the async hook to restore synchronous returns.",
305
313
  "HOOK_BRACE_EXPANSION_MAX_DEPTH": "Brace expansion in hook pattern exceeds the maximum nesting depth of {maxDepth}.",
306
314
  "HINT_HOOK_BRACE_EXPANSION_MAX_DEPTH": "Simplify the hook path pattern to reduce brace nesting. Maximum allowed depth is {maxDepth} levels.",
307
315
  "SCOPE_DISABLED": "Per-request context isolation is disabled. Set 'scope: {}' in your slothlet configuration to enable it.",
@@ -385,6 +393,8 @@
385
393
  "UNSUPPORTED_CONTEXT_MANAGER": "Unsupported context manager: '{manager}'. Only AsyncContextManager and LiveContextManager are supported.",
386
394
  "HINT_UNSUPPORTED_CONTEXT_MANAGER": "Use AsyncContextManager for async/ALS-based context isolation or LiveContextManager for synchronous live-binding context.",
387
395
  "INVALID_CONFIG_VERSION_DISPATCHER": "config.versionDispatcher must be a string (metadata key) or a function, received {received}",
396
+ "INVALID_CONFIG_IMPORT": "Invalid 'import' option: expected a function, received {received}.",
397
+ "HINT_INVALID_CONFIG_IMPORT": "The injectable leaf importer replaces the loader's native dynamic import. Pass a function like (url) => import(url) — typically one bound to your test runner so leaf coverage attributes.",
388
398
  "INVALID_CONFIG_VERSION_TAG": "versionConfig.version must be a non-empty string, received {received}",
389
399
  "VERSION_NOT_FOUND": "Version '{version}' is not registered at path '{apiPath}'",
390
400
  "HINT_VERSION_NOT_FOUND": "Call api.slothlet.versioning.list('{apiPath}') to see which version tags are currently registered at that path.",
@@ -467,7 +477,13 @@
467
477
  "CONTEXT_KEY_OWNED": "Context key '{key}' is already owned and cannot be re-claimed by a nested scope.",
468
478
  "SCOPE_INVALID_PROTECT": "'protect' must be an array of string keys. Received: {received}.",
469
479
  "SCOPE_INVALID_OWNERS": "'owners' must be a plain object mapping keys to owner names. Received: {received}.",
470
- "PERMISSION_SEALED": "The permission control surface is sealed; policy can no longer be modified."
480
+ "PERMISSION_SEALED": "The permission control surface is sealed; policy can no longer be modified.",
481
+ "WARNING_COVERAGE_IMPORTER_UNSET": "A coverage run is active but no injectable leaf importer is configured — this externalised slothlet's leaf loads will not attribute to your coverage report.",
482
+ "HINT_WARNING_COVERAGE_IMPORTER_UNSET": "Pass the 'import' option from your test setup — a function like (url) => import(url) — so leaf loads ride your runner's module graph. See docs/TESTING.md.",
483
+ "HOOK_VERSION_UNRESOLVED": "Hook pattern '{pattern}' could not be resolved to a registered version.",
484
+ "HINT_HOOK_VERSION_UNRESOLVED": "Version dispatch needs a versioned mount covering the pattern's path (api.add(path, source, options, { version })). A dispatcher must return a registered tag, an array of them, or nothing to take the default version — or drop the versioned/versionDispatcher option to register the pattern literally.",
485
+ "HOOK_VERSION_UNKNOWN_TAG": "Version dispatch for hook pattern '{pattern}' selected '{version}', which is not a registered version.",
486
+ "HINT_HOOK_VERSION_UNKNOWN_TAG": "The dispatcher must select from the registered tags it was handed in allVersions. Register the mount first (api.add with a version), or fix the dispatcher's return value."
471
487
  },
472
488
  "metadata": {
473
489
  "code": "en-gb",
@@ -43,6 +43,8 @@
43
43
  "HINT_COLLISION_DEFAULT_EXPORT_ERROR": "Una exportación nombrada entra en conflicto con una propiedad ya presente en el objeto de exportación por defecto en esta ruta. Cambia el modo de colisión a 'merge', 'replace', 'warn' o 'skip', o renombra la propiedad en conflicto.",
44
44
  "INVALID_ARGUMENT": "Argumento inválido '{argument}': se esperaba {expected}, se recibió {received}.",
45
45
  "HINT_INVALID_ARGUMENT": "La ruta debe ser una cadena con notación de puntos (ej., 'math.add').",
46
+ "API_LEAVES_UNKNOWN_MODULE": "No se encontró ningún módulo para '{key}'. Pasa una moduleID devuelta por api.add(), un punto de montaje o una ruta de API poseída, o '.' para la carga base.",
47
+ "HINT_API_LEAVES_UNKNOWN_MODULE": "leaves() resuelve su clave contra los registros de propiedad: una moduleID, la ruta de montaje de un módulo o cualquier ruta que ese módulo posea. Lista los montajes actuales con api.slothlet.owner.get().",
46
48
  "RUNTIME_NO_ACTIVE_CONTEXT": "No se encontró un contexto activo. Esta operación requiere ser llamada desde una función de la API de slothlet.",
47
49
  "HINT_RUNTIME_NO_ACTIVE_CONTEXT": "metadata.self() debe ser llamado desde dentro de una función de la API de slothlet.",
48
50
  "INVALID_CONFIG_MUTATIONS_DISABLED": "No se puede realizar '{operation}': la mutación está deshabilitada. Establece allowMutation: true para habilitar las operaciones de modificación de la API (add/remove/reload).",
@@ -57,6 +59,10 @@
57
59
  "HINT_MODULE_LOAD_FAILED": "Comprueba el fichero del módulo en busca de errores. Asegúrate de que tiene una sintaxis de JavaScript válida y exportaciones.",
58
60
  "MODULE_NOT_FOUND": "Módulo no encontrado: {modulePath}. {hint}",
59
61
  "HINT_MODULE_NOT_FOUND": "Asegúrate de que el módulo existe y la ruta es correcta. Comprueba si hay errores tipográficos en la sentencia de importación.",
62
+ "MODULE_RESERVED_FILENAME": "El archivo de módulo '{file}' en '{dir}' lleva el nombre de una clave reservada del framework y no puede cargarse.",
63
+ "HINT_MODULE_RESERVED_FILENAME": "Los nombres reservados (INTERNAL_KEYS como _materialize, _impl) son los manejadores internos del framework; un archivo de módulo con ese nombre los sobrescribiría durante la adopción de hijos. Renombra el archivo.",
64
+ "MODULE_RESERVED_EXPORT": "La exportación de módulo '{name}' lleva el nombre de una clave reservada del framework y no puede cargarse.",
65
+ "HINT_MODULE_RESERVED_EXPORT": "Los nombres reservados (_materialize, __impl, ...) son los manejadores internos del framework — tal exportación solo podría quedar oculta e inaccesible. Renombra la exportación.",
60
66
  "MODULE_IMPORT_FAILED": "Error al importar el módulo '{modulePath}': {error}. Comprueba que el fichero existe y tiene una sintaxis válida.",
61
67
  "HINT_MODULE_IMPORT_FAILED": "Asegúrate de que el fichero del módulo existe y puede ser importado. Comprueba si hay errores de sintaxis o dependencias faltantes.",
62
68
  "CONTEXT_ALREADY_EXISTS": "El contexto para la instancia '{instanceID}' ya existe. No se puede inicializar dos veces.",
@@ -121,8 +127,6 @@
121
127
  "HINT_V3_CONFIG_DEPRECATED": "Esta opción de configuración ha sido renombrada para mayor claridad. Actualiza tu código para usar el nuevo nombre de opción y garantizar la compatibilidad futura con v4.",
122
128
  "CONFIG_SCAN_HIDDEN_FOLDERS_DEPRECATED": "La opción de configuración '{option}' está obsoleta y se eliminará en v4. Las carpetas ocultas (nombres que empiezan por '.' o '__') se excluyen de la API de forma predeterminada.",
123
129
  "HINT_CONFIG_SCAN_HIDDEN_FOLDERS_DEPRECATED": "Esta opción es una solución temporal de compatibilidad. Mueve el contenido que no sea de la API fuera del directorio de la API para que no haga falta escanear carpetas ocultas.",
124
- "V2_CONFIG_UNSUPPORTED": "La opción de configuración '{option}' de v2 no está soportada en v3. {hint} Usa '{replacement}' en su lugar.",
125
- "HINT_V2_CONFIG_UNSUPPORTED": "Esta opción de configuración de v2 no está soportada en v3. Actualiza tu configuración para usar el equivalente de v3 para un mejor control y claridad.",
126
130
  "DEBUG_MODE_ROOT_CONTRIBUTOR": "[{mode}] Contribuidor raíz detectado: {functionName}",
127
131
  "DEBUG_MODE_ROOT_CONTRIBUTOR_APPLIED": "[{mode}] Patrón de contribuidor raíz aplicado: API de función con {properties} propiedades adicionales",
128
132
  "DEBUG_MODE_PROCESSING_DIRECTORY": "[{mode}] Procesando directorio: {categoryName} (profundidad {currentDepth})",
@@ -300,8 +304,12 @@
300
304
  "HINT_INVALID_HOOK_SUBSET": "Los subconjuntos controlan el orden de ejecución. Usa 'before' para preprocesamiento, 'primary' (por defecto) para ganchos principales, o 'after' para postprocesamiento.",
301
305
  "INVALID_TYPE_PATTERN": "Patrón de tipo inválido \"{typePattern}\". {expected}",
302
306
  "HINT_INVALID_TYPE_PATTERN": "Los patrones de hook usan la forma 'pattern:type', como 'math.*:before' o '**:error'. La forma heredada 'type:pattern' sigue funcionando pero está obsoleta.",
303
- "HOOK_BEFORE_RETURNED_PROMISE": "El gancho 'before' '{id}' para la ruta '{path}' devolvió una Promesa. Los ganchos 'before' deben ser síncronos.",
304
- "HINT_HOOK_BEFORE_RETURNED_PROMISE": "Los ganchos 'before' se ejecutan síncronamente antes de la llamada a la API. Elimina el uso de async/await o Promesas de este gancho, o cámbialo a un gancho 'after' si necesitas procesamiento asíncrono.",
307
+ "HOOK_BEFORE_RETURNED_PROMISE": "El gancho 'before' '{id}' para la ruta '{path}' devolvió una Promesa en una canalización síncrona.",
308
+ "HINT_HOOK_BEFORE_RETURNED_PROMISE": "Un manejador 'before' no fue detectado como asíncrono. Usa una función async nativa, o regístralo con { async: true }, para que la llamada se promueva a la canalización asíncrona.",
309
+ "HOOK_AFTER_RETURNED_PROMISE": "El gancho 'after' '{id}' para la ruta '{path}' devolvió una Promesa en una canalización síncrona.",
310
+ "HINT_HOOK_AFTER_RETURNED_PROMISE": "Un manejador 'after' no fue detectado como asíncrono. Usa una función async nativa, o regístralo con { async: true }, para que la llamada se promueva a la canalización asíncrona.",
311
+ "HOOK_PROMOTED_RESULT_NOT_AWAITED": "La ruta '{path}' devolvió una Promesa porque hay un gancho asíncrono adjunto — usa await sobre el resultado.",
312
+ "HINT_HOOK_PROMOTED_RESULT_NOT_AWAITED": "Un objetivo síncrono se promueve al despacho asíncrono mientras haya un gancho before/after asíncrono adjunto. Usa await en la llamada, o elimina el gancho asíncrono para restaurar los retornos síncronos.",
305
313
  "HOOK_BRACE_EXPANSION_MAX_DEPTH": "La expansión de llaves en el patrón del gancho excede la profundidad máxima de anidamiento de {maxDepth}.",
306
314
  "HINT_HOOK_BRACE_EXPANSION_MAX_DEPTH": "Simplifica el patrón de ruta del gancho para reducir el anidamiento de llaves. La profundidad máxima permitida es de {maxDepth} niveles.",
307
315
  "SCOPE_DISABLED": "El aislamiento de contexto por solicitud está deshabilitado. Establece 'scope: {}' en tu configuración de slothlet para habilitarlo.",
@@ -385,6 +393,8 @@
385
393
  "UNSUPPORTED_CONTEXT_MANAGER": "Gestor de contexto no soportado: '{manager}'. Solo se soportan AsyncContextManager y LiveContextManager.",
386
394
  "HINT_UNSUPPORTED_CONTEXT_MANAGER": "Usa AsyncContextManager para aislamiento de contexto basado en async/ALS o LiveContextManager para contexto de enlace en vivo síncrono.",
387
395
  "INVALID_CONFIG_VERSION_DISPATCHER": "config.versionDispatcher debe ser una cadena (clave de metadatos) o una función; recibido: {received}",
396
+ "INVALID_CONFIG_IMPORT": "Opción 'import' no válida: se esperaba una función, se recibió {received}.",
397
+ "HINT_INVALID_CONFIG_IMPORT": "El importador de hojas inyectable reemplaza el import dinámico nativo del cargador. Pasa una función como (url) => import(url) — normalmente vinculada a tu ejecutor de pruebas para que la cobertura de las hojas se atribuya.",
388
398
  "INVALID_CONFIG_VERSION_TAG": "versionConfig.version debe ser una cadena no vacía; recibido: {received}",
389
399
  "VERSION_NOT_FOUND": "La versión '{version}' no está registrada en la ruta '{apiPath}'.",
390
400
  "HINT_VERSION_NOT_FOUND": "Llama a api.slothlet.versioning.list('{apiPath}') para ver qué etiquetas de versión están actualmente registradas en esa ruta.",
@@ -467,7 +477,13 @@
467
477
  "CONTEXT_KEY_OWNED": "La clave de contexto '{key}' ya tiene propietario y un ámbito anidado no puede reclamarla.",
468
478
  "SCOPE_INVALID_PROTECT": "'protect' debe ser un array de claves de tipo cadena. Recibido: {received}.",
469
479
  "SCOPE_INVALID_OWNERS": "'owners' debe ser un objeto simple que asigne claves a nombres de propietario. Recibido: {received}.",
470
- "PERMISSION_SEALED": "La superficie de control de permisos está sellada; la política ya no se puede modificar."
480
+ "PERMISSION_SEALED": "La superficie de control de permisos está sellada; la política ya no se puede modificar.",
481
+ "WARNING_COVERAGE_IMPORTER_UNSET": "Hay una ejecución de cobertura activa pero no se ha configurado ningún importador de hojas inyectable — las cargas de hojas de este slothlet externalizado no se atribuirán a tu informe de cobertura.",
482
+ "HINT_WARNING_COVERAGE_IMPORTER_UNSET": "Pasa la opción 'import' desde tu configuración de pruebas — una función como (url) => import(url) — para que las cargas de hojas pasen por el grafo de módulos de tu ejecutor. Consulta docs/TESTING.md.",
483
+ "HOOK_VERSION_UNRESOLVED": "El patrón de gancho '{pattern}' no pudo resolverse a una versión registrada.",
484
+ "HINT_HOOK_VERSION_UNRESOLVED": "El despacho por versión necesita un montaje versionado que cubra la ruta del patrón (api.add(path, source, options, { version })). Un despachador debe devolver una etiqueta registrada, un array de ellas, o nada para tomar la versión por defecto — o quita la opción versioned/versionDispatcher para registrar el patrón literalmente.",
485
+ "HOOK_VERSION_UNKNOWN_TAG": "El despacho por versión para el patrón de gancho '{pattern}' seleccionó '{version}', que no es una versión registrada.",
486
+ "HINT_HOOK_VERSION_UNKNOWN_TAG": "El despachador debe elegir entre las etiquetas registradas recibidas en allVersions. Registra primero el montaje (api.add con una versión) o corrige el valor devuelto por el despachador."
471
487
  },
472
488
  "metadata": {
473
489
  "code": "es-es",
@@ -43,6 +43,8 @@
43
43
  "HINT_COLLISION_DEFAULT_EXPORT_ERROR": "Una exportación nombrada entra en conflicto con una propiedad ya presente en el objeto de exportación por defecto en esta ruta. Cambie el modo de colisión a 'merge', 'replace', 'warn' o 'skip', o renonmbre la propiedad en conflicto.",
44
44
  "INVALID_ARGUMENT": "Argumento inválido '{argument}': se esperaba {expected}, se recibió {received}.",
45
45
  "HINT_INVALID_ARGUMENT": "La ruta debe ser una cadena con notación de puntos (ej., 'math.add').",
46
+ "API_LEAVES_UNKNOWN_MODULE": "No se encontró ningún módulo para '{key}'. Pasa una moduleID devuelta por api.add(), un punto de montaje o una ruta de API poseída, o '.' para la carga base.",
47
+ "HINT_API_LEAVES_UNKNOWN_MODULE": "leaves() resuelve su clave contra los registros de propiedad: una moduleID, la ruta de montaje de un módulo o cualquier ruta que ese módulo posea. Lista los montajes actuales con api.slothlet.owner.get().",
46
48
  "RUNTIME_NO_ACTIVE_CONTEXT": "No se encontró un contexto activo. Esta operación requiere ser llamada desde una función de la API de slothlet.",
47
49
  "HINT_RUNTIME_NO_ACTIVE_CONTEXT": "metadata.self() debe ser llamado desde dentro de una función de la API de slothlet.",
48
50
  "INVALID_CONFIG_MUTATIONS_DISABLED": "No se puede realizar '{operation}': la mutación está deshabilitada. Establezca allowMutation: true para habilitar las operaciones de modificación de la API (add/remove/reload).",
@@ -57,6 +59,10 @@
57
59
  "HINT_MODULE_LOAD_FAILED": "Compruebe el archivo del módulo en busca de errores. Asegúrese de que tiene una sintaxis de JavaScript válida y exportaciones.",
58
60
  "MODULE_NOT_FOUND": "Módulo no encontrado: {modulePath}. {hint}",
59
61
  "HINT_MODULE_NOT_FOUND": "Asegúrese de que el módulo existe y la ruta es correcta. Compruebe si hay errores tipográficos en la sentencia de importación.",
62
+ "MODULE_RESERVED_FILENAME": "El archivo de módulo '{file}' en '{dir}' lleva el nombre de una clave reservada del framework y no puede cargarse.",
63
+ "HINT_MODULE_RESERVED_FILENAME": "Los nombres reservados (INTERNAL_KEYS como _materialize, _impl) son los manejadores internos del framework; un archivo de módulo con ese nombre los sobrescribiría durante la adopción de hijos. Renombra el archivo.",
64
+ "MODULE_RESERVED_EXPORT": "La exportación de módulo '{name}' lleva el nombre de una clave reservada del framework y no puede cargarse.",
65
+ "HINT_MODULE_RESERVED_EXPORT": "Los nombres reservados (_materialize, __impl, ...) son los manejadores internos del framework — tal exportación solo podría quedar oculta e inaccesible. Renombra la exportación.",
60
66
  "MODULE_IMPORT_FAILED": "Error al importar el módulo '{modulePath}': {error}. Compruebe que el archivo existe y tiene una sintaxis válida.",
61
67
  "HINT_MODULE_IMPORT_FAILED": "Asegúrese de que el archivo del módulo existe y puede ser importado. Compruebe si hay errores de sintaxis o dependencias faltantes.",
62
68
  "CONTEXT_ALREADY_EXISTS": "El contexto para la instancia '{instanceID}' ya existe. No se puede inicializar dos veces.",
@@ -121,8 +127,6 @@
121
127
  "HINT_V3_CONFIG_DEPRECATED": "Esta opción de configuración fue renombrada para mayor claridad. Actualice su código para usar el nuevo nombre de opción y garantizar compatibilidad futura con v4.",
122
128
  "CONFIG_SCAN_HIDDEN_FOLDERS_DEPRECATED": "La opción de configuración '{option}' está obsoleta y se eliminará en v4. Las carpetas ocultas (nombres que comienzan con '.' o '__') quedan excluidas de la API de manera predeterminada.",
123
129
  "HINT_CONFIG_SCAN_HIDDEN_FOLDERS_DEPRECATED": "Esta opción es una medida temporal de compatibilidad. Mueva el contenido ajeno a la API fuera del directorio de la API para que ya no sea necesario escanear carpetas ocultas.",
124
- "V2_CONFIG_UNSUPPORTED": "La opción de configuración '{option}' de v2 no está soportada en v3. {hint} Use '{replacement}' en su lugar.",
125
- "HINT_V2_CONFIG_UNSUPPORTED": "Esta opción de configuración de v2 no está soportada en v3. Actualice su configuración para usar el equivalente de v3 para un mejor control y claridad.",
126
130
  "DEBUG_MODE_ROOT_CONTRIBUTOR": "[{mode}] Contribuidor raíz detectado: {functionName}",
127
131
  "DEBUG_MODE_ROOT_CONTRIBUTOR_APPLIED": "[{mode}] Patrón de contribuidor raíz aplicado: API de función con {properties} propiedades adicionales",
128
132
  "DEBUG_MODE_PROCESSING_DIRECTORY": "[{mode}] Procesando directorio: {categoryName} (profundidad {currentDepth})",
@@ -300,8 +304,12 @@
300
304
  "HINT_INVALID_HOOK_SUBSET": "Los subconjuntos controlan el orden de ejecución. Use 'before' para preprocesamiento, 'primary' (por defecto) para ganchos principales, o 'after' para postprocesamiento.",
301
305
  "INVALID_TYPE_PATTERN": "Patrón de tipo inválido \"{typePattern}\". {expected}",
302
306
  "HINT_INVALID_TYPE_PATTERN": "Los patrones de hook usan la forma 'pattern:type', como 'math.*:before' o '**:error'. La forma anterior 'type:pattern' todavía funciona pero está en desuso.",
303
- "HOOK_BEFORE_RETURNED_PROMISE": "El gancho 'before' '{id}' para la ruta '{path}' devolvió una Promesa. Los ganchos 'before' deben ser sínconos.",
304
- "HINT_HOOK_BEFORE_RETURNED_PROMISE": "Los ganchos 'before' se ejecutan sínconamente antes de la llamada a la API. Elimine el uso de async/await o Promesas de este gancho, o cámbielo a un gancho 'after' si necesita procesamiento asíncrono.",
307
+ "HOOK_BEFORE_RETURNED_PROMISE": "El gancho 'before' '{id}' para la ruta '{path}' devolvió una Promesa en una canalización síncrona.",
308
+ "HINT_HOOK_BEFORE_RETURNED_PROMISE": "Un manejador 'before' no fue detectado como asíncrono. Usa una función async nativa, o regístralo con { async: true }, para que la llamada se promueva a la canalización asíncrona.",
309
+ "HOOK_AFTER_RETURNED_PROMISE": "El gancho 'after' '{id}' para la ruta '{path}' devolvió una Promesa en una canalización síncrona.",
310
+ "HINT_HOOK_AFTER_RETURNED_PROMISE": "Un manejador 'after' no fue detectado como asíncrono. Usa una función async nativa, o regístralo con { async: true }, para que la llamada se promueva a la canalización asíncrona.",
311
+ "HOOK_PROMOTED_RESULT_NOT_AWAITED": "La ruta '{path}' devolvió una Promesa porque hay un gancho asíncrono adjunto — usa await sobre el resultado.",
312
+ "HINT_HOOK_PROMOTED_RESULT_NOT_AWAITED": "Un objetivo síncrono se promueve al despacho asíncrono mientras haya un gancho before/after asíncrono adjunto. Usa await en la llamada, o elimina el gancho asíncrono para restaurar los retornos síncronos.",
305
313
  "HOOK_BRACE_EXPANSION_MAX_DEPTH": "La expansión de llaves en el patrón del gancho excede la profundidad máxima de anidamiento de {maxDepth}.",
306
314
  "HINT_HOOK_BRACE_EXPANSION_MAX_DEPTH": "Simplifique el patrón de ruta del gancho para reducir el anidamiento de llaves. La profundidad máxima permitida es de {maxDepth} niveles.",
307
315
  "SCOPE_DISABLED": "El aislamiento de contexto por solicitud está deshabilitado. Establezca 'scope: {}' en su configuración de slothlet para habilitarlo.",
@@ -385,6 +393,8 @@
385
393
  "UNSUPPORTED_CONTEXT_MANAGER": "Gestor de contexto no soportado: '{manager}'. Solo se soportan AsyncContextManager y LiveContextManager.",
386
394
  "HINT_UNSUPPORTED_CONTEXT_MANAGER": "Use AsyncContextManager para aislamiento de contexto basado en async/ALS o LiveContextManager para contexto de enlace en vivo síncrono.",
387
395
  "INVALID_CONFIG_VERSION_DISPATCHER": "config.versionDispatcher debe ser una cadena (clave de metadatos) o una función; recibido: {received}",
396
+ "INVALID_CONFIG_IMPORT": "Opción 'import' no válida: se esperaba una función, se recibió {received}.",
397
+ "HINT_INVALID_CONFIG_IMPORT": "El importador de hojas inyectable reemplaza el import dinámico nativo del cargador. Pasa una función como (url) => import(url) — normalmente vinculada a tu ejecutor de pruebas para que la cobertura de las hojas se atribuya.",
388
398
  "INVALID_CONFIG_VERSION_TAG": "versionConfig.version debe ser una cadena no vacía; recibido: {received}",
389
399
  "VERSION_NOT_FOUND": "La versión '{version}' no está registrada en la ruta '{apiPath}'.",
390
400
  "HINT_VERSION_NOT_FOUND": "Llame a api.slothlet.versioning.list('{apiPath}') para ver qué etiquetas de versión están actualmente registradas en esa ruta.",
@@ -467,7 +477,13 @@
467
477
  "CONTEXT_KEY_OWNED": "La clave de contexto '{key}' ya pertenece a un propietario y un ámbito anidado no puede reclamarla.",
468
478
  "SCOPE_INVALID_PROTECT": "'protect' tiene que ser un arreglo de claves de tipo cadena. Recibido: {received}.",
469
479
  "SCOPE_INVALID_OWNERS": "'owners' tiene que ser un objeto simple que asigne claves a nombres de propietario. Recibido: {received}.",
470
- "PERMISSION_SEALED": "La superficie de control de permisos está sellada; ya no es posible modificar la política."
480
+ "PERMISSION_SEALED": "La superficie de control de permisos está sellada; ya no es posible modificar la política.",
481
+ "WARNING_COVERAGE_IMPORTER_UNSET": "Hay una ejecución de cobertura activa pero no se ha configurado ningún importador de hojas inyectable — las cargas de hojas de este slothlet externalizado no se atribuirán a tu informe de cobertura.",
482
+ "HINT_WARNING_COVERAGE_IMPORTER_UNSET": "Pasa la opción 'import' desde tu configuración de pruebas — una función como (url) => import(url) — para que las cargas de hojas pasen por el grafo de módulos de tu ejecutor. Consulta docs/TESTING.md.",
483
+ "HOOK_VERSION_UNRESOLVED": "El patrón de gancho '{pattern}' no pudo resolverse a una versión registrada.",
484
+ "HINT_HOOK_VERSION_UNRESOLVED": "El despacho por versión necesita un montaje versionado que cubra la ruta del patrón (api.add(path, source, options, { version })). Un despachador debe devolver una etiqueta registrada, un array de ellas, o nada para tomar la versión por defecto — o quita la opción versioned/versionDispatcher para registrar el patrón literalmente.",
485
+ "HOOK_VERSION_UNKNOWN_TAG": "El despacho por versión para el patrón de gancho '{pattern}' seleccionó '{version}', que no es una versión registrada.",
486
+ "HINT_HOOK_VERSION_UNKNOWN_TAG": "El despachador debe elegir entre las etiquetas registradas recibidas en allVersions. Registra primero el montaje (api.add con una versión) o corrige el valor devuelto por el despachador."
471
487
  },
472
488
  "metadata": {
473
489
  "code": "es-mx",
@@ -43,6 +43,8 @@
43
43
  "HINT_COLLISION_DEFAULT_EXPORT_ERROR": "Un export nommé entre en conflit avec une propriété déjà présente sur l'objet d'exportation par défaut à ce chemin. Changez le mode de collision pour 'merge', 'replace', 'warn' ou 'skip', ou renommez la propriété en conflit.",
44
44
  "INVALID_ARGUMENT": "Argument invalide '{argument}' : attendu {expected}, reçu {received}.",
45
45
  "HINT_INVALID_ARGUMENT": "Le chemin doit être une chaîne en notation pointée (ex: 'math.add').",
46
+ "API_LEAVES_UNKNOWN_MODULE": "Aucun module trouvé pour '{key}'. Passez une moduleID renvoyée par api.add(), un point de montage ou un chemin d'API possédé, ou '.' pour le chargement de base.",
47
+ "HINT_API_LEAVES_UNKNOWN_MODULE": "leaves() résout sa clé contre les enregistrements de propriété : une moduleID, le chemin de montage d'un module, ou tout chemin que ce module possède. Listez les montages actuels via api.slothlet.owner.get().",
46
48
  "RUNTIME_NO_ACTIVE_CONTEXT": "Aucun contexte actif trouvé. Cette opération doit être appelée depuis une fonction de l'API Slothlet.",
47
49
  "HINT_RUNTIME_NO_ACTIVE_CONTEXT": "metadata.self() doit être appelé depuis une fonction de l'API Slothlet.",
48
50
  "INVALID_CONFIG_MUTATIONS_DISABLED": "Impossible de d'effectuer '{operation}' - les mutations sont désactivées. Réglez allowMutation: true pour activer les opérations de modification de l'API (add/remove/reload).",
@@ -57,6 +59,10 @@
57
59
  "HINT_MODULE_LOAD_FAILED": "Vérifiez les erreurs dans le fichier du module. Assurez-vous qu'il possède une syntaxe JavaScript valide et des exports.",
58
60
  "MODULE_NOT_FOUND": "Module non trouvé : {modulePath}. {hint}",
59
61
  "HINT_MODULE_NOT_FOUND": "Assurez-vous que le module existe et que le chemin est correct. Vérifiez les fautes de frappe dans l'instruction d'importation.",
62
+ "MODULE_RESERVED_FILENAME": "Le fichier de module '{file}' dans '{dir}' porte le nom d'une clé réservée du framework et ne peut pas être chargé.",
63
+ "HINT_MODULE_RESERVED_FILENAME": "Les noms réservés (INTERNAL_KEYS comme _materialize, _impl) sont les poignées internes du framework ; un fichier de module portant ce nom les écraserait lors de l'adoption des enfants. Renommez le fichier.",
64
+ "MODULE_RESERVED_EXPORT": "L'export de module '{name}' porte le nom d'une clé réservée du framework et ne peut pas être chargé.",
65
+ "HINT_MODULE_RESERVED_EXPORT": "Les noms réservés (_materialize, __impl, ...) sont les poignées internes du framework — un tel export ne pourrait qu'être masqué et inaccessible. Renommez l'export.",
60
66
  "MODULE_IMPORT_FAILED": "Échec de l'importation du module '{modulePath}' : {error}. Vérifiez que le fichier existe et possède une syntaxe valide.",
61
67
  "HINT_MODULE_IMPORT_FAILED": "Assurez-vous que le fichier du module existe et peut être importé. Vérifiez les erreurs de syntaxe ou les dépendances manquantes.",
62
68
  "CONTEXT_ALREADY_EXISTS": "Le contexte pour l'instance '{instanceID}' existe déjà. Impossible d'initialiser deux fois.",
@@ -121,8 +127,6 @@
121
127
  "HINT_V3_CONFIG_DEPRECATED": "Cette option de configuration a été renommée pour plus de clarté. Mettez à jour votre code pour utiliser le nouveau nom d'option afin d'assurer la compatibilité avec v4.",
122
128
  "CONFIG_SCAN_HIDDEN_FOLDERS_DEPRECATED": "L'option de configuration '{option}' est obsolète et sera supprimée dans la v4. Les dossiers cachés (noms commençant par '.' ou '__') sont exclus de l'API par défaut.",
123
129
  "HINT_CONFIG_SCAN_HIDDEN_FOLDERS_DEPRECATED": "Cette option est une solution de compatibilité temporaire. Déplacez le contenu non lié à l'API hors du répertoire de l'API afin de ne plus avoir à analyser les dossiers cachés.",
124
- "V2_CONFIG_UNSUPPORTED": "L'option de configuration '{option}' de la v2 n'est pas supportée dans la v3. {hint} Utilisez '{replacement}' à la place.",
125
- "HINT_V2_CONFIG_UNSUPPORTED": "Cette option de configuration de la v2 n'est pas supportée dans la v3. Mettez à jour votre configuration pour utiliser l'équivalent v3 pour un meilleur contrôle et plus de clarté.",
126
130
  "DEBUG_MODE_ROOT_CONTRIBUTOR": "[{mode}] Contributeur racine détecté : {functionName}",
127
131
  "DEBUG_MODE_ROOT_CONTRIBUTOR_APPLIED": "[{mode}] Modèle de contributeur racine appliqué - API de fonction avec {properties} propriétés supplémentaires",
128
132
  "DEBUG_MODE_PROCESSING_DIRECTORY": "[{mode}] Traitement du répertoire : {categoryName} (profondeur {currentDepth})",
@@ -300,8 +304,12 @@
300
304
  "HINT_INVALID_HOOK_SUBSET": "Les sous-ensembles contrôlent l'ordre d'exécution. Utilisez 'before' pour le pré-traitement, 'primary' (par défaut) pour les hooks principaux ou 'after' pour le post-traitement.",
301
305
  "INVALID_TYPE_PATTERN": "Modèle de type invalide \"{typePattern}\". {expected}",
302
306
  "HINT_INVALID_TYPE_PATTERN": "Les motifs de hook utilisent la forme 'pattern:type', comme 'math.*:before' ou '**:error'. L'ancienne forme 'type:pattern' fonctionne toujours mais est dépréciée.",
303
- "HOOK_BEFORE_RETURNED_PROMISE": "Le hook 'before' '{id}' pour le chemin '{path}' a renvoyé une Promesse. Les hooks 'before' doivent être synchrones.",
304
- "HINT_HOOK_BEFORE_RETURNED_PROMISE": "Les hooks 'before' s'exécutent de manière synchrone avant l'appel de l'API. Supprimez l'utilisation de async/await ou de Promise de ce hook, ou changez-le en un hook 'after' si un traitement asynchrone est nécessaire.",
307
+ "HOOK_BEFORE_RETURNED_PROMISE": "Le hook 'before' '{id}' pour le chemin '{path}' a renvoyé une Promesse dans un pipeline synchrone.",
308
+ "HINT_HOOK_BEFORE_RETURNED_PROMISE": "Un gestionnaire 'before' n'a pas été détecté comme asynchrone. Utilisez une fonction async native, ou enregistrez-le avec { async: true }, pour que l'appel soit promu vers le pipeline asynchrone.",
309
+ "HOOK_AFTER_RETURNED_PROMISE": "Le hook 'after' '{id}' pour le chemin '{path}' a renvoyé une Promesse dans un pipeline synchrone.",
310
+ "HINT_HOOK_AFTER_RETURNED_PROMISE": "Un gestionnaire 'after' n'a pas été détecté comme asynchrone. Utilisez une fonction async native, ou enregistrez-le avec { async: true }, pour que l'appel soit promu vers le pipeline asynchrone.",
311
+ "HOOK_PROMOTED_RESULT_NOT_AWAITED": "Le chemin '{path}' a renvoyé une Promesse parce qu'un hook asynchrone est attaché — utilisez await sur le résultat.",
312
+ "HINT_HOOK_PROMOTED_RESULT_NOT_AWAITED": "Une cible synchrone est promue vers la répartition asynchrone tant qu'un hook before/after asynchrone est attaché. Utilisez await sur l'appel, ou retirez le hook asynchrone pour rétablir les retours synchrones.",
305
313
  "HOOK_BRACE_EXPANSION_MAX_DEPTH": "L'expansion des accolades dans le modèle de hook dépasse la profondeur d'imbrication maximale de {maxDepth}.",
306
314
  "HINT_HOOK_BRACE_EXPANSION_MAX_DEPTH": "Simplifiez le modèle de chemin de hook pour réduire l'imbrication des accolades. La profondeur maximale autorisée est de {maxDepth} niveaux.",
307
315
  "SCOPE_DISABLED": "L'isolation du contexte par requête est désactivée. Réglez 'scope: {}' dans votre configuration Slothlet pour l'activer.",
@@ -385,6 +393,8 @@
385
393
  "UNSUPPORTED_CONTEXT_MANAGER": "Gestionnaire de contexte non supporté : '{manager}'. Seuls AsyncContextManager et LiveContextManager sont supportés.",
386
394
  "HINT_UNSUPPORTED_CONTEXT_MANAGER": "Utilisez AsyncContextManager pour l'isolation de contexte basée sur l'async/ALS ou LiveContextManager pour un contexte de live-binding synchrone.",
387
395
  "INVALID_CONFIG_VERSION_DISPATCHER": "config.versionDispatcher doit être une chaîne (clé de métadonnées) ou une fonction ; reçu : {received}",
396
+ "INVALID_CONFIG_IMPORT": "Option 'import' invalide : fonction attendue, {received} reçu.",
397
+ "HINT_INVALID_CONFIG_IMPORT": "L'importateur de feuilles injectable remplace l'import dynamique natif du chargeur. Passez une fonction comme (url) => import(url) — généralement liée à votre exécuteur de tests pour que la couverture des feuilles soit attribuée.",
388
398
  "INVALID_CONFIG_VERSION_TAG": "versionConfig.version doit être une chaîne non vide ; reçu : {received}",
389
399
  "VERSION_NOT_FOUND": "La version '{version}' n'est pas enregistrée au chemin '{apiPath}'.",
390
400
  "HINT_VERSION_NOT_FOUND": "Appelez api.slothlet.versioning.list('{apiPath}') pour voir quels tags de version sont actuellement enregistrés à ce chemin.",
@@ -467,7 +477,13 @@
467
477
  "CONTEXT_KEY_OWNED": "La clé de contexte '{key}' a déjà un propriétaire et ne peut pas être réclamée par une portée imbriquée.",
468
478
  "SCOPE_INVALID_PROTECT": "'protect' doit être un tableau de clés de type chaîne. Reçu : {received}.",
469
479
  "SCOPE_INVALID_OWNERS": "'owners' doit être un objet simple associant des clés à des noms de propriétaire. Reçu : {received}.",
470
- "PERMISSION_SEALED": "La surface de contrôle des permissions est scellée ; la politique ne peut plus être modifiée."
480
+ "PERMISSION_SEALED": "La surface de contrôle des permissions est scellée ; la politique ne peut plus être modifiée.",
481
+ "WARNING_COVERAGE_IMPORTER_UNSET": "Une exécution de couverture est active mais aucun importateur de feuilles injectable n'est configuré — les chargements de feuilles de ce slothlet externalisé ne seront pas attribués à votre rapport de couverture.",
482
+ "HINT_WARNING_COVERAGE_IMPORTER_UNSET": "Passez l'option 'import' depuis votre configuration de test — une fonction comme (url) => import(url) — pour que les chargements de feuilles passent par le graphe de modules de votre exécuteur. Voir docs/TESTING.md.",
483
+ "HOOK_VERSION_UNRESOLVED": "Le motif de hook '{pattern}' n'a pas pu être résolu vers une version enregistrée.",
484
+ "HINT_HOOK_VERSION_UNRESOLVED": "La répartition par version nécessite un montage versionné couvrant le chemin du motif (api.add(path, source, options, { version })). Un dispatcher doit renvoyer un tag enregistré, un tableau de tags, ou rien pour prendre la version par défaut — ou retirez l'option versioned/versionDispatcher pour enregistrer le motif littéralement.",
485
+ "HOOK_VERSION_UNKNOWN_TAG": "La répartition par version pour le motif de hook '{pattern}' a sélectionné '{version}', qui n'est pas une version enregistrée.",
486
+ "HINT_HOOK_VERSION_UNKNOWN_TAG": "Le dispatcher doit choisir parmi les tags enregistrés fournis dans allVersions. Enregistrez d'abord le montage (api.add avec une version) ou corrigez la valeur de retour du dispatcher."
471
487
  },
472
488
  "metadata": {
473
489
  "code": "fr-fr",
@@ -43,6 +43,8 @@
43
43
  "HINT_COLLISION_DEFAULT_EXPORT_ERROR": "एक नामित निर्यात इस पथ पर डिफ़ॉल्ट निर्यात ऑब्जेक्ट पर पहले से मौजूद गुण के साथ संघर्ष करता है। टकराव मोड को 'merge', 'replace', 'warn', या 'skip' में बदलें, या संघर्षरत गुण का नाम बदलें।",
44
44
  "INVALID_ARGUMENT": "अमान्य तर्क '{argument}': {expected} अपेक्षित था, {received} प्राप्त हुआ।",
45
45
  "HINT_INVALID_ARGUMENT": "पथ एक डॉट-नोटेशन स्ट्रिंग होना चाहिए (उदा. 'math.add')।",
46
+ "API_LEAVES_UNKNOWN_MODULE": "'{key}' के लिए कोई मॉड्यूल नहीं मिला। api.add() से लौटाई गई moduleID, माउंट एंडपॉइंट या स्वामित्व वाला API पथ, या बेस लोड के लिए '.' पास करें।",
47
+ "HINT_API_LEAVES_UNKNOWN_MODULE": "leaves() अपनी कुंजी को स्वामित्व रिकॉर्ड के विरुद्ध हल करता है: moduleID, मॉड्यूल का माउंट पथ, या उस मॉड्यूल के स्वामित्व वाला कोई भी पथ। वर्तमान माउंट api.slothlet.owner.get() से सूचीबद्ध करें।",
46
48
  "RUNTIME_NO_ACTIVE_CONTEXT": "कोई सक्रिय संदर्भ नहीं मिला। इस ऑपरेशन को slothlet API फ़ंक्शन के भीतर से कॉल करने की आवश्यकता है।",
47
49
  "HINT_RUNTIME_NO_ACTIVE_CONTEXT": "metadata.self() को slothlet API फ़ंक्शन के भीतर से कॉल किया जाना चाहिए।",
48
50
  "INVALID_CONFIG_MUTATIONS_DISABLED": "'{operation}' नहीं किया जा सकता - म्यूटेशन अक्षम है। API संशोधन संचालन (add/remove/reload) को सक्षम करने के लिए allowMutation: true सेट करें।",
@@ -57,6 +59,10 @@
57
59
  "HINT_MODULE_LOAD_FAILED": "त्रुटियों के लिए मॉड्यूल फ़ाइल की जांच करें। सुनिश्चित करें कि इसमें मान्य जावास्क्रिप्ट सिंटैक्स और निर्यात हैं।",
58
60
  "MODULE_NOT_FOUND": "मॉड्यूल नहीं मिला: {modulePath}। {hint}",
59
61
  "HINT_MODULE_NOT_FOUND": "सुनिश्चित करें कि मॉड्यूल मौजूद है और पथ सही है। आयात विवरण में टाइपो की जांच करें।",
62
+ "MODULE_RESERVED_FILENAME": "'{dir}' में मॉड्यूल फ़ाइल '{file}' फ्रेमवर्क-आरक्षित कुंजी के नाम पर है और लोड नहीं की जा सकती।",
63
+ "HINT_MODULE_RESERVED_FILENAME": "आरक्षित नाम (INTERNAL_KEYS जैसे _materialize, _impl) फ्रेमवर्क के अपने रैपर हैंडल हैं; उसी नाम की मॉड्यूल फ़ाइल चाइल्ड अपनाने के दौरान उन्हें अधिलेखित कर देगी। फ़ाइल का नाम बदलें।",
64
+ "MODULE_RESERVED_EXPORT": "मॉड्यूल एक्सपोर्ट '{name}' फ्रेमवर्क-आरक्षित कुंजी के नाम पर है और लोड नहीं किया जा सकता।",
65
+ "HINT_MODULE_RESERVED_EXPORT": "आरक्षित नाम (_materialize, __impl, ...) फ्रेमवर्क के अपने रैपर हैंडल हैं — ऐसा एक्सपोर्ट केवल छिपा और अप्राप्य रह सकता है। एक्सपोर्ट का नाम बदलें।",
60
66
  "MODULE_IMPORT_FAILED": "मॉड्यूल '{modulePath}' आयात करने में विफल: {error}। जांचें कि फ़ाइल मौजूद है और इसमें मान्य सिंटैक्स है।",
61
67
  "HINT_MODULE_IMPORT_FAILED": "सुनिश्चित करें कि मॉड्यूल फ़ाइल मौजूद है और आयात की जा सकती है। सिंटैक्स त्रुटियों या अनुपलब्ध निर्भरताओं की जांच करें।",
62
68
  "CONTEXT_ALREADY_EXISTS": "इंस्टेंस '{instanceID}' के लिए संदर्भ पहले से मौजूद है। दो बार प्रारंभ नहीं किया जा सकता।",
@@ -121,8 +127,6 @@
121
127
  "HINT_V3_CONFIG_DEPRECATED": "इस कॉन्फ़िगरेशन विकल्प का नाम स्पष्टता के लिए बदल दिया गया है। v4 के साथ अग्र-संगतता सुनिश्चित करने हेतु नए विकल्प नाम का उपयोग करने के लिए अपना कोड अपडेट करें।",
122
128
  "CONFIG_SCAN_HIDDEN_FOLDERS_DEPRECATED": "कॉन्फ़िगरेशन विकल्प '{option}' पुराना पड़ गया है और v4 में हटा दिया जाएगा। छिपे हुए फ़ोल्डर ('.' या '__' से शुरू होने वाले नाम) डिफ़ॉल्ट रूप से API से बाहर रखे जाते हैं।",
123
129
  "HINT_CONFIG_SCAN_HIDDEN_FOLDERS_DEPRECATED": "यह विकल्प एक अस्थायी पश्च-संगतता उपाय है। API निर्देशिका से गैर-API सामग्री को बाहर ले जाएँ ताकि छिपे हुए फ़ोल्डरों को स्कैन करने की आवश्यकता न रहे।",
124
- "V2_CONFIG_UNSUPPORTED": "v2 का कॉन्फ़िगरेशन विकल्प '{option}' v3 में समर्थित नहीं है। {hint} इसके बजाय '{replacement}' का उपयोग करें।",
125
- "HINT_V2_CONFIG_UNSUPPORTED": "v2 का यह कॉन्फ़िगरेशन विकल्प v3 में समर्थित नहीं है। बेहतर नियंत्रण और स्पष्टता के लिए v3 समकक्ष का उपयोग करने के लिए अपना कॉन्फ़िगरेशन अपडेट करें।",
126
130
  "DEBUG_MODE_ROOT_CONTRIBUTOR": "[{mode}] रूट योगदानकर्ता मिला: {functionName}",
127
131
  "DEBUG_MODE_ROOT_CONTRIBUTOR_APPLIED": "[{mode}] रूट योगदानकर्ता पैटर्न लागू - {properties} अतिरिक्त गुणों के साथ फ़ंक्शन API",
128
132
  "DEBUG_MODE_PROCESSING_DIRECTORY": "[{mode}] निर्देशिका को संसाधित करना: {categoryName} (गहराई {currentDepth})",
@@ -300,8 +304,12 @@
300
304
  "HINT_INVALID_HOOK_SUBSET": "सबसेट निष्पादन क्रम को नियंत्रित करते हैं। प्री-प्रोसेसिंग के लिए 'before', मुख्य हुक के लिए 'primary' (डिफ़ॉल्ट), या पोस्ट-प्रोसेसिंग के लिए 'after' का उपयोग करें।",
301
305
  "INVALID_TYPE_PATTERN": "अमान्य प्रकार पैटर्न \"{typePattern}\"। {expected}",
302
306
  "HINT_INVALID_TYPE_PATTERN": "हुक पैटर्न 'pattern:type' रूप का उपयोग करते हैं, जैसे 'math.*:before' या '**:error'। पुराना 'type:pattern' रूप अभी भी काम करता है लेकिन यह अप्रचलित है।",
303
- "HOOK_BEFORE_RETURNED_PROMISE": "पथ '{path}' के लिए 'before' हुक '{id}' ने एक प्रॉमिस लौटाया। 'before' हुक सिंक्रोनस होने चाहिए।",
304
- "HINT_HOOK_BEFORE_RETURNED_PROMISE": "Before हुक API कॉल से पहले सिंक्रोनस रूप से निष्पादित होते हैं। इस हुक से async/await या प्रॉमिस उपयोग को हटा दें, या यदि एसिंक्रोनस प्रोसेसिंग की आवश्यकता है तो इसे 'after' हुक में बदलें।",
307
+ "HOOK_BEFORE_RETURNED_PROMISE": "पथ '{path}' के before हुक '{id}' ने एक सिंक्रोनस पाइपलाइन में Promise लौटाया।",
308
+ "HINT_HOOK_BEFORE_RETURNED_PROMISE": "'before' हैंडलर असिंक्रोनस के रूप में पहचाना नहीं गया। नेटिव async फ़ंक्शन का उपयोग करें, या इसे { async: true } के साथ पंजीकृत करें, ताकि कॉल असिंक्रोनस पाइपलाइन में प्रमोट हो जाए।",
309
+ "HOOK_AFTER_RETURNED_PROMISE": "पथ '{path}' के after हुक '{id}' ने एक सिंक्रोनस पाइपलाइन में Promise लौटाया।",
310
+ "HINT_HOOK_AFTER_RETURNED_PROMISE": "'after' हैंडलर असिंक्रोनस के रूप में पहचाना नहीं गया। नेटिव async फ़ंक्शन का उपयोग करें, या इसे { async: true } के साथ पंजीकृत करें, ताकि कॉल असिंक्रोनस पाइपलाइन में प्रमोट हो जाए।",
311
+ "HOOK_PROMOTED_RESULT_NOT_AWAITED": "पथ '{path}' ने Promise लौटाया क्योंकि एक असिंक्रोनस हुक जुड़ा है — परिणाम पर await का उपयोग करें।",
312
+ "HINT_HOOK_PROMOTED_RESULT_NOT_AWAITED": "जब तक कोई असिंक्रोनस before/after हुक जुड़ा है, सिंक्रोनस लक्ष्य असिंक्रोनस डिस्पैच में प्रमोट होता है। कॉल पर await करें, या सिंक्रोनस रिटर्न बहाल करने के लिए असिंक्रोनस हुक हटा दें।",
305
313
  "HOOK_BRACE_EXPANSION_MAX_DEPTH": "हुक पैटर्न में ब्रेस विस्तार {maxDepth} की अधिकतम नेस्टिंग गहराई से अधिक है।",
306
314
  "HINT_HOOK_BRACE_EXPANSION_MAX_DEPTH": "ब्रेस नेस्टिंग को कम करने के लिए हुक पथ पैटर्न को सरल बनाएं। अधिकतम अनुमत गहराई {maxDepth} स्तर है।",
307
315
  "SCOPE_DISABLED": "प्रति-अनुरोध संदर्भ अलगाव (context isolation) अक्षम है। इसे सक्षम करने के लिए अपने slothlet कॉन्फ़िगरेशन में 'scope: {}' सेट करें।",
@@ -385,6 +393,8 @@
385
393
  "UNSUPPORTED_CONTEXT_MANAGER": "असमर्थित संदर्भ प्रबंधक: '{manager}'। केवल AsyncContextManager और LiveContextManager समर्थित हैं।",
386
394
  "HINT_UNSUPPORTED_CONTEXT_MANAGER": "एसिंक/ALS-आधारित संदर्भ अलगाव के लिए AsyncContextManager या सिंक्रोनस लाइव-बाइंडिंग संदर्भ के लिए LiveContextManager का उपयोग करें।",
387
395
  "INVALID_CONFIG_VERSION_DISPATCHER": "config.versionDispatcher एक स्ट्रिंग (मेटाडेटा कुंजी) या फ़ंक्शन होना चाहिए; प्राप्त: {received}",
396
+ "INVALID_CONFIG_IMPORT": "अमान्य 'import' विकल्प: फ़ंक्शन अपेक्षित था, {received} प्राप्त हुआ।",
397
+ "HINT_INVALID_CONFIG_IMPORT": "इंजेक्ट करने योग्य लीफ़ इम्पोर्टर लोडर के नेटिव डायनामिक import की जगह लेता है। (url) => import(url) जैसा फ़ंक्शन पास करें — आमतौर पर आपके टेस्ट रनर से बंधा हुआ, ताकि लीफ़ कवरेज सही से दर्ज हो।",
388
398
  "INVALID_CONFIG_VERSION_TAG": "versionConfig.version एक गैर-रिक्त स्ट्रिंग होनी चाहिए; प्राप्त: {received}",
389
399
  "VERSION_NOT_FOUND": "संस्करण '{version}' पथ '{apiPath}' पर पंजीकृत नहीं है।",
390
400
  "HINT_VERSION_NOT_FOUND": "api.slothlet.versioning.list('{apiPath}') को कॉल करें यह देखने के लिए कि उस पथ पर कौन से संस्करण टैग वर्तमान में पंजीकृत हैं।",
@@ -467,7 +477,13 @@
467
477
  "CONTEXT_KEY_OWNED": "संदर्भ कुंजी '{key}' पहले से स्वामित्व में है और नेस्टेड स्कोप द्वारा पुनः दावा नहीं की जा सकती।",
468
478
  "SCOPE_INVALID_PROTECT": "'protect' स्ट्रिंग कुंजियों की एक सरणी होनी चाहिए। प्राप्त: {received}।",
469
479
  "SCOPE_INVALID_OWNERS": "'owners' एक सादा ऑब्जेक्ट होना चाहिए जो कुंजियों को स्वामी नामों से मैप करता है। प्राप्त: {received}।",
470
- "PERMISSION_SEALED": "अनुमति नियंत्रण सतह सील है; नीति अब संशोधित नहीं की जा सकती।"
480
+ "PERMISSION_SEALED": "अनुमति नियंत्रण सतह सील है; नीति अब संशोधित नहीं की जा सकती।",
481
+ "WARNING_COVERAGE_IMPORTER_UNSET": "कवरेज रन सक्रिय है लेकिन कोई इंजेक्ट करने योग्य लीफ़ इम्पोर्टर सेट नहीं है — इस बाहरी slothlet की लीफ़ लोडिंग आपकी कवरेज रिपोर्ट में दर्ज नहीं होगी।",
482
+ "HINT_WARNING_COVERAGE_IMPORTER_UNSET": "अपने टेस्ट सेटअप से 'import' विकल्प — (url) => import(url) जैसा फ़ंक्शन — पास करें, ताकि लीफ़ लोडिंग आपके रनर के मॉड्यूल ग्राफ़ से गुज़रे। docs/TESTING.md देखें।",
483
+ "HOOK_VERSION_UNRESOLVED": "हुक पैटर्न '{pattern}' किसी पंजीकृत संस्करण से हल नहीं हो सका।",
484
+ "HINT_HOOK_VERSION_UNRESOLVED": "संस्करण डिस्पैच के लिए पैटर्न के पथ को कवर करने वाला संस्करणित माउंट चाहिए (api.add(path, source, options, { version }))। डिस्पैचर को पंजीकृत टैग, उनका array, या डिफ़ॉल्ट संस्करण के लिए कुछ नहीं लौटाना चाहिए — या पैटर्न को यथावत पंजीकृत करने के लिए versioned/versionDispatcher विकल्प हटा दें।",
485
+ "HOOK_VERSION_UNKNOWN_TAG": "हुक पैटर्न '{pattern}' के संस्करण डिस्पैच ने '{version}' चुना, जो पंजीकृत संस्करण नहीं है।",
486
+ "HINT_HOOK_VERSION_UNKNOWN_TAG": "डिस्पैचर को allVersions में दिए गए पंजीकृत टैग में से चुनना चाहिए। पहले माउंट पंजीकृत करें (संस्करण के साथ api.add), या डिस्पैचर का रिटर्न मान ठीक करें।"
471
487
  },
472
488
  "metadata": {
473
489
  "code": "hi-in",
@@ -43,6 +43,8 @@
43
43
  "HINT_COLLISION_DEFAULT_EXPORT_ERROR": "名前付きエクスポートが、このパスのデフォルトエクスポートオブジェクトに既に存在するプロパティと衝突しています。衝突モードを 'merge', 'replace', 'warn', または 'skip' に変更するか、衝突しているプロパティの名前を変更してください。",
44
44
  "INVALID_ARGUMENT": "無効な引数 '{argument}' です: {expected} が必要ですが、{received} を受信しました。",
45
45
  "HINT_INVALID_ARGUMENT": "パスはドット記法の文字列である必要があります (例: 'math.add')。",
46
+ "API_LEAVES_UNKNOWN_MODULE": "'{key}' に対応するモジュールが見つかりません。api.add() が返した moduleID、マウントエンドポイントや所有 API パス、またはベースロードを示す '.' を渡してください。",
47
+ "HINT_API_LEAVES_UNKNOWN_MODULE": "leaves() はキーを所有権レコードに対して解決します: moduleID、モジュールのマウントパス、またはそのモジュールが所有する任意のパスです。現在のマウントは api.slothlet.owner.get() で一覧できます。",
46
48
  "RUNTIME_NO_ACTIVE_CONTEXT": "アクティブなコンテキストが見つかりません。この操作は、slothlet API 関数内から呼び出す必要があります。",
47
49
  "HINT_RUNTIME_NO_ACTIVE_CONTEXT": "metadata.self() は Slothlet API 関数内から呼び出す必要があります。",
48
50
  "INVALID_CONFIG_MUTATIONS_DISABLED": "'{operation}' を実行できません - 変更が無効になっています。API の変更操作 (add/remove/reload) を有効にするには、allowMutation: true を設定してください。",
@@ -57,6 +59,10 @@
57
59
  "HINT_MODULE_LOAD_FAILED": "モジュールファイルの内部エラーを確認してください。有効な JavaScript 構文とエクスポートがあることを確認してください。",
58
60
  "MODULE_NOT_FOUND": "モジュールが見つかりません: {modulePath}。 {hint}",
59
61
  "HINT_MODULE_NOT_FOUND": "モジュールが存在し、パスが正しいことを確認してください。インポート文のタイポを確認してください。",
62
+ "MODULE_RESERVED_FILENAME": "'{dir}' のモジュールファイル '{file}' はフレームワーク予約キーの名前を持つため読み込めません。",
63
+ "HINT_MODULE_RESERVED_FILENAME": "予約名 (INTERNAL_KEYS の _materialize、_impl など) はフレームワーク自身のラッパーハンドルです。同名のモジュールファイルは子の取り込み時にそれらを上書きしてしまいます。ファイル名を変更してください。",
64
+ "MODULE_RESERVED_EXPORT": "モジュールのエクスポート '{name}' はフレームワーク予約キーの名前を持つため読み込めません。",
65
+ "HINT_MODULE_RESERVED_EXPORT": "予約名 (_materialize、__impl など) はフレームワーク自身のラッパーハンドルです — そのようなエクスポートは隠されて到達不能になるだけです。エクスポート名を変更してください。",
60
66
  "MODULE_IMPORT_FAILED": "モジュール '{modulePath}' のインポートに失敗しました: {error}。ファイルが存在し、構文が正しいか確認してください。",
61
67
  "HINT_MODULE_IMPORT_FAILED": "モジュールファイルが存在し、インポート可能であることを確認してください。構文エラーや依存関係の不足がないかを確認してください。",
62
68
  "CONTEXT_ALREADY_EXISTS": "インスタンス '{instanceID}' のコンテキストは既に存在します。2回初期化することはできません。",
@@ -121,8 +127,6 @@
121
127
  "HINT_V3_CONFIG_DEPRECATED": "この設定オプションは明確さのために名前が変更されました。v4 との前方互換性を確保するために、新しいオプション名を使用するようにコードを更新してください。",
122
128
  "CONFIG_SCAN_HIDDEN_FOLDERS_DEPRECATED": "設定オプション '{option}' は非推奨となり、v4 で削除されます。隠しフォルダー('.' または '__' で始まる名前)は既定で API から除外されます。",
123
129
  "HINT_CONFIG_SCAN_HIDDEN_FOLDERS_DEPRECATED": "このオプションは一時的な後方互換性のための回避策です。隠しフォルダーをスキャンする必要がなくなるよう、API 以外のコンテンツを API ディレクトリの外に移動してください。",
124
- "V2_CONFIG_UNSUPPORTED": "v2 の構成オプション '{option}' は v3 ではサポートされていません。 {hint} 代わりに '{replacement}' を使用してください。",
125
- "HINT_V2_CONFIG_UNSUPPORTED": "v2 のこの構成オプションは v3 ではサポートされていません。制御を向上させ明確にするために、 v3 の同等のオプションを使用するように構成を更新してください。",
126
130
  "DEBUG_MODE_ROOT_CONTRIBUTOR": "[{mode}] ルートコントリビュータを検出中: {functionName}",
127
131
  "DEBUG_MODE_ROOT_CONTRIBUTOR_APPLIED": "[{mode}] ルートコントリビュータパターンを適用しました - {properties} 個の追加プロパティを持つ関数 API",
128
132
  "DEBUG_MODE_PROCESSING_DIRECTORY": "[{mode}] ディレクトリを処理中: {categoryName} (深さ {currentDepth})",
@@ -300,8 +304,12 @@
300
304
  "HINT_INVALID_HOOK_SUBSET": "サブセットは実行順序を制御します。前処理には 'before'、メインフックには 'primary' (デフォルト)、後処理には 'after' を使用してください。",
301
305
  "INVALID_TYPE_PATTERN": "無効な型パターン \"{typePattern}\" です。 {expected}",
302
306
  "HINT_INVALID_TYPE_PATTERN": "フックパターンは 'pattern:type' の形式を使用します(例: 'math.*:before' や '**:error')。従来の 'type:pattern' 形式も引き続き機能しますが非推奨です。",
303
- "HOOK_BEFORE_RETURNED_PROMISE": "パス '{path}' の before フック '{id}' が Promise を返しました。 before フックは同期処理である必要があります。",
304
- "HINT_HOOK_BEFORE_RETURNED_PROMISE": "before フックは API 呼び出しの前に同期的に実行されます。このフックから async/await や Promise の使用を削除するか、非同期処理が必要な場合は 'after' フックに変更してください。",
307
+ "HOOK_BEFORE_RETURNED_PROMISE": "パス '{path}' の before フック '{id}' が同期パイプラインで Promise を返しました。",
308
+ "HINT_HOOK_BEFORE_RETURNED_PROMISE": "before ハンドラーが非同期として検出されませんでした。ネイティブの async 関数を使用するか、{ async: true } を指定して登録すると、呼び出しが非同期パイプラインに昇格します。",
309
+ "HOOK_AFTER_RETURNED_PROMISE": "パス '{path}' の after フック '{id}' が同期パイプラインで Promise を返しました。",
310
+ "HINT_HOOK_AFTER_RETURNED_PROMISE": "after ハンドラーが非同期として検出されませんでした。ネイティブの async 関数を使用するか、{ async: true } を指定して登録すると、呼び出しが非同期パイプラインに昇格します。",
311
+ "HOOK_PROMOTED_RESULT_NOT_AWAITED": "パス '{path}' は非同期フックが接続されているため Promise を返しました — 結果を await してください。",
312
+ "HINT_HOOK_PROMOTED_RESULT_NOT_AWAITED": "非同期の before/after フックが接続されている間、同期ターゲットは非同期ディスパッチに昇格します。呼び出しを await するか、非同期フックを削除して同期の戻り値を復元してください。",
305
313
  "HOOK_BRACE_EXPANSION_MAX_DEPTH": "フックパターンの波括弧展開が最大入れ子深さ {maxDepth} を超えました。",
306
314
  "HINT_HOOK_BRACE_EXPANSION_MAX_DEPTH": "フックのパスパターンを簡略化して、波括弧の入れ子を減らしてください。許容される最大深さは {maxDepth} レベルです。",
307
315
  "SCOPE_DISABLED": "リクエストごとのコンテキスト分離が無効になっています。有効にするには Slothlet 構成で 'scope: {}' を設定してください。",
@@ -385,6 +393,8 @@
385
393
  "UNSUPPORTED_CONTEXT_MANAGER": "サポートされていないコンテキストマネージャー: '{manager}' です。 AsyncContextManager と LiveContextManager のみがサポートされています。",
386
394
  "HINT_UNSUPPORTED_CONTEXT_MANAGER": "async/ALS ベースのコンテキスト分離には AsyncContextManager を、同期的な live-binding コンテキストには LiveContextManager を使用してください。",
387
395
  "INVALID_CONFIG_VERSION_DISPATCHER": "config.versionDispatcher は文字列(メタデータキー)または関数である必要があります。受信値: {received}",
396
+ "INVALID_CONFIG_IMPORT": "'import' オプションが不正です: 関数が必要ですが {received} を受け取りました。",
397
+ "HINT_INVALID_CONFIG_IMPORT": "注入可能なリーフインポーターはローダーのネイティブ動的 import を置き換えます。(url) => import(url) のような関数を渡してください — 通常はテストランナーに結び付け、リーフのカバレッジが計上されるようにします。",
388
398
  "INVALID_CONFIG_VERSION_TAG": "versionConfig.version は空でない文字列である必要があります。受信値: {received}",
389
399
  "VERSION_NOT_FOUND": "バージョン '{version}' はパス '{apiPath}' に登録されていません。",
390
400
  "HINT_VERSION_NOT_FOUND": "api.slothlet.versioning.list('{apiPath}') を呼び出して、そのパスに現在登録されているバージョンタグを確認してください。",
@@ -467,7 +477,13 @@
467
477
  "CONTEXT_KEY_OWNED": "コンテキストキー '{key}' は既に所有されており、ネストされたスコープで再取得できません。",
468
478
  "SCOPE_INVALID_PROTECT": "'protect' は文字列キーの配列である必要があります。受け取った値: {received}。",
469
479
  "SCOPE_INVALID_OWNERS": "'owners' はキーを所有者名にマッピングするプレーンオブジェクトである必要があります。受け取った値: {received}。",
470
- "PERMISSION_SEALED": "権限制御サーフェスは封印されており、ポリシーを変更できません。"
480
+ "PERMISSION_SEALED": "権限制御サーフェスは封印されており、ポリシーを変更できません。",
481
+ "WARNING_COVERAGE_IMPORTER_UNSET": "カバレッジ実行が有効ですが、注入可能なリーフインポーターが設定されていません — この外部化された slothlet のリーフ読み込みはカバレッジレポートに計上されません。",
482
+ "HINT_WARNING_COVERAGE_IMPORTER_UNSET": "テストセットアップから 'import' オプション — (url) => import(url) のような関数 — を渡し、リーフ読み込みがランナーのモジュールグラフを通るようにしてください。docs/TESTING.md を参照。",
483
+ "HOOK_VERSION_UNRESOLVED": "フックパターン '{pattern}' を登録済みバージョンに解決できませんでした。",
484
+ "HINT_HOOK_VERSION_UNRESOLVED": "バージョンディスパッチには、パターンのパスをカバーするバージョン付きマウントが必要です (api.add(path, source, options, { version }))。ディスパッチャーは登録済みタグ、その配列、または既定バージョンを使う場合は何も返さない必要があります — あるいは versioned/versionDispatcher オプションを外してパターンをそのまま登録してください。",
485
+ "HOOK_VERSION_UNKNOWN_TAG": "フックパターン '{pattern}' のバージョンディスパッチが、登録されていないバージョン '{version}' を選択しました。",
486
+ "HINT_HOOK_VERSION_UNKNOWN_TAG": "ディスパッチャーは allVersions で渡された登録済みタグから選択する必要があります。先にマウントを登録するか (バージョン付き api.add)、ディスパッチャーの戻り値を修正してください。"
471
487
  },
472
488
  "metadata": {
473
489
  "code": "ja-jp",
@@ -43,6 +43,8 @@
43
43
  "HINT_COLLISION_DEFAULT_EXPORT_ERROR": "명명된 내보내기가 해당 경로의 기본 내보내기 객체에 이미 존재하는 속성과 충돌합니다. 충돌 모드를 'merge', 'replace', 'warn' 또는 'skip'으로 변경하거나 충돌하는 속성의 이름을 바꾸십시오.",
44
44
  "INVALID_ARGUMENT": "유효하지 않은 인수 '{argument}': {expected}이(가) 필요하지만 {received}을(를) 받았습니다.",
45
45
  "HINT_INVALID_ARGUMENT": "경로는 'math.add'와 같은 점 표기법 문자열이어야 합니다.",
46
+ "API_LEAVES_UNKNOWN_MODULE": "'{key}'에 해당하는 모듈을 찾을 수 없습니다. api.add()가 반환한 moduleID, 마운트 엔드포인트나 소유된 API 경로, 또는 기본 로드를 뜻하는 '.'을 전달하세요.",
47
+ "HINT_API_LEAVES_UNKNOWN_MODULE": "leaves()는 키를 소유권 레코드에 대해 해석합니다: moduleID, 모듈이 마운트된 경로, 또는 해당 모듈이 소유한 임의의 경로입니다. 현재 마운트는 api.slothlet.owner.get()으로 확인할 수 있습니다.",
46
48
  "RUNTIME_NO_ACTIVE_CONTEXT": "활성 컨텍스트를 찾을 수 없습니다. 이 작업은 slothlet API 함수 내에서 호출되어야 합니다.",
47
49
  "HINT_RUNTIME_NO_ACTIVE_CONTEXT": "metadata.self()는 Slothlet API 함수 내에서 호출되어야 합니다.",
48
50
  "INVALID_CONFIG_MUTATIONS_DISABLED": "'{operation}'을 수행할 수 없습니다 - 변경이 비활성화되었습니다. API 수정 작업(추가/제거/재로드)을 활성화하려면 allowMutation: true를 설정하십시오.",
@@ -57,6 +59,10 @@
57
59
  "HINT_MODULE_LOAD_FAILED": "모듈 파일의 오류를 확인하십시오. 유효한 JavaScript 구문과 내보내기를 가지고 있는지 확인하십시오.",
58
60
  "MODULE_NOT_FOUND": "모듈을 찾을 수 없음: {modulePath}. {hint}",
59
61
  "HINT_MODULE_NOT_FOUND": "모듈이 존재하고 경로가 올바른지 확인하십시오. import문의 오타를 확인하십시오.",
62
+ "MODULE_RESERVED_FILENAME": "'{dir}'의 모듈 파일 '{file}'은(는) 프레임워크 예약 키의 이름이므로 로드할 수 없습니다.",
63
+ "HINT_MODULE_RESERVED_FILENAME": "예약 이름 (INTERNAL_KEYS의 _materialize, _impl 등)은 프레임워크 자체의 래퍼 핸들입니다. 같은 이름의 모듈 파일은 자식 채택 시 이를 덮어씁니다. 파일 이름을 변경하세요.",
64
+ "MODULE_RESERVED_EXPORT": "모듈 내보내기 '{name}'은(는) 프레임워크 예약 키의 이름이므로 로드할 수 없습니다.",
65
+ "HINT_MODULE_RESERVED_EXPORT": "예약 이름 (_materialize, __impl 등)은 프레임워크 자체의 래퍼 핸들입니다 — 이런 내보내기는 가려져 도달할 수 없을 뿐입니다. 내보내기 이름을 변경하세요.",
60
66
  "MODULE_IMPORT_FAILED": "모듈 '{modulePath}' 가져오기 실패: {error}. 파일이 존재하고 유효한 구문인지 확인하십시오.",
61
67
  "HINT_MODULE_IMPORT_FAILED": "모듈 파일이 존재하고 가져올 수 있는지 확인하십시오. 구문 오류나 누락된 종속성을 확인하십시오.",
62
68
  "CONTEXT_ALREADY_EXISTS": "인스턴스 '{instanceID}'의 컨텍스트가 이미 존재합니다. 두 번 초기화할 수 없습니다.",
@@ -121,8 +127,6 @@
121
127
  "HINT_V3_CONFIG_DEPRECATED": "이 구성 옵션은 명확성을 위해 이름이 변경되었습니다. v4와의 호환성을 보장하려면 새 옵션 이름을 사용하도록 코드를 업데이트하세요.",
122
128
  "CONFIG_SCAN_HIDDEN_FOLDERS_DEPRECATED": "구성 옵션 '{option}'은(는) 더 이상 사용되지 않으며 v4에서 제거됩니다. 숨김 폴더('.' 또는 '__'로 시작하는 이름)는 기본적으로 API에서 제외됩니다.",
123
129
  "HINT_CONFIG_SCAN_HIDDEN_FOLDERS_DEPRECATED": "이 옵션은 임시 하위 호환성 수단입니다. 숨김 폴더를 스캔할 필요가 없도록 API와 무관한 콘텐츠를 API 디렉터리 밖으로 옮기세요.",
124
- "V2_CONFIG_UNSUPPORTED": "v2의 설정 옵션 '{option}'은(는) v3에서 지원되지 않습니다. {hint} 대신 '{replacement}'을(를) 사용하십시오.",
125
- "HINT_V2_CONFIG_UNSUPPORTED": "v2의 이 설정 옵션은 v3에서 지원되지 않습니다. 더 나은 제어와 명확성을 위해 v3에 해당하는 옵션을 사용하도록 설정을 업데이트하십시오.",
126
130
  "DEBUG_MODE_ROOT_CONTRIBUTOR": "[{mode}] 루트 컨트리뷰터 감지됨: {functionName}",
127
131
  "DEBUG_MODE_ROOT_CONTRIBUTOR_APPLIED": "[{mode}] 루트 컨트리뷰터 패턴 적용됨 - {properties}개의 추가 속성을 가진 함수 API",
128
132
  "DEBUG_MODE_PROCESSING_DIRECTORY": "[{mode}] 디렉토리 처리 중: {categoryName} (깊이 {currentDepth})",
@@ -300,8 +304,12 @@
300
304
  "HINT_INVALID_HOOK_SUBSET": "서브셋은 실행 순서를 제어합니다. 전처리는 'before', 주요 후크는 'primary'(기본값), 후처리는 'after'를 사용하십시오.",
301
305
  "INVALID_TYPE_PATTERN": "유효하지 않은 유형 패턴 \"{typePattern}\". {expected}",
302
306
  "HINT_INVALID_TYPE_PATTERN": "후크 패턴은 'pattern:type' 형식을 사용합니다(예: 'math.*:before' 또는 '**:error'). 기존 'type:pattern' 형식도 여전히 작동하지만 더 이상 사용되지 않습니다.",
303
- "HOOK_BEFORE_RETURNED_PROMISE": "경로 '{path}'에 대한 before 후크 '{id}'이(가) Promise를 반환했습니다. before 후크는 동기식이어야 합니다.",
304
- "HINT_HOOK_BEFORE_RETURNED_PROMISE": "before 후크는 API 호출 전 동기적으로 실행됩니다. 이 후크에서 async/await 또는 Promise 사용을 제거하거나, 비동기 처리가 필요하면 'after' 후크로 변경하십시오.",
307
+ "HOOK_BEFORE_RETURNED_PROMISE": "경로 '{path}'의 before 훅 '{id}'이(가) 동기 파이프라인에서 Promise를 반환했습니다.",
308
+ "HINT_HOOK_BEFORE_RETURNED_PROMISE": "before 핸들러가 비동기로 감지되지 않았습니다. 네이티브 async 함수를 사용하거나 { async: true }로 등록하면 호출이 비동기 파이프라인으로 승격됩니다.",
309
+ "HOOK_AFTER_RETURNED_PROMISE": "경로 '{path}'의 after 훅 '{id}'이(가) 동기 파이프라인에서 Promise를 반환했습니다.",
310
+ "HINT_HOOK_AFTER_RETURNED_PROMISE": "after 핸들러가 비동기로 감지되지 않았습니다. 네이티브 async 함수를 사용하거나 { async: true }로 등록하면 호출이 비동기 파이프라인으로 승격됩니다.",
311
+ "HOOK_PROMOTED_RESULT_NOT_AWAITED": "경로 '{path}'은(는) 비동기 훅이 연결되어 있어 Promise를 반환했습니다 — 결과를 await 하세요.",
312
+ "HINT_HOOK_PROMOTED_RESULT_NOT_AWAITED": "비동기 before/after 훅이 연결되어 있는 동안 동기 대상은 비동기 디스패치로 승격됩니다. 호출을 await 하거나 비동기 훅을 제거하여 동기 반환을 복원하세요.",
305
313
  "HOOK_BRACE_EXPANSION_MAX_DEPTH": "후크 패턴의 중괄호 확장이 최대 중첩 깊이 {maxDepth}를 초과했습니다.",
306
314
  "HINT_HOOK_BRACE_EXPANSION_MAX_DEPTH": "중괄호 중첩을 줄이도록 후크 경로 패턴을 단순화하십시오. 최대 허용 깊이는 {maxDepth}단계입니다.",
307
315
  "SCOPE_DISABLED": "요청별 컨텍스트 격리가 비활성화되었습니다. 이를 활성화하려면 slothlet 설정에 'scope: {}'를 설정하십시오.",
@@ -385,6 +393,8 @@
385
393
  "UNSUPPORTED_CONTEXT_MANAGER": "지원되지 않는 컨텍스트 관리자: '{manager}'. AsyncContextManager와 LiveContextManager만 지원됩니다.",
386
394
  "HINT_UNSUPPORTED_CONTEXT_MANAGER": "비동기/ALS 기반 컨텍스트 격리는 AsyncContextManager를, 동기식 라이브 데이터 바인딩 컨텍스트에는 LiveContextManager를 사용하십시오.",
387
395
  "INVALID_CONFIG_VERSION_DISPATCHER": "config.versionDispatcher는 문자열(메타데이터 키) 또는 함수여야 합니다. 수신됨: {received}",
396
+ "INVALID_CONFIG_IMPORT": "'import' 옵션이 잘못되었습니다: 함수가 필요하지만 {received}을(를) 받았습니다.",
397
+ "HINT_INVALID_CONFIG_IMPORT": "주입 가능한 리프 임포터는 로더의 네이티브 동적 import를 대체합니다. (url) => import(url) 같은 함수를 전달하세요 — 보통 테스트 러너에 바인딩하여 리프 커버리지가 귀속되도록 합니다.",
388
398
  "INVALID_CONFIG_VERSION_TAG": "versionConfig.version은 비어 있지 않은 문자열이어야 합니다. 수신됨: {received}",
389
399
  "VERSION_NOT_FOUND": "버전 '{version}'은(는) 경로 '{apiPath}'에 등록되지 않았습니다.",
390
400
  "HINT_VERSION_NOT_FOUND": "api.slothlet.versioning.list('{apiPath}')를 호출하여 해당 경로에 현재 등록된 버전 태그를 확인하세요.",
@@ -467,7 +477,13 @@
467
477
  "CONTEXT_KEY_OWNED": "컨텍스트 키 '{key}'는 이미 소유되어 있어 중첩 스코프에서 다시 요청할 수 없습니다.",
468
478
  "SCOPE_INVALID_PROTECT": "'protect'는 문자열 키의 배열이어야 합니다. 받은 값: {received}.",
469
479
  "SCOPE_INVALID_OWNERS": "'owners'는 키를 소유자 이름에 매핑하는 일반 객체여야 합니다. 받은 값: {received}.",
470
- "PERMISSION_SEALED": "권한 제어 표면이 봉인되어 있어 정책을 더 이상 수정할 수 없습니다."
480
+ "PERMISSION_SEALED": "권한 제어 표면이 봉인되어 있어 정책을 더 이상 수정할 수 없습니다.",
481
+ "WARNING_COVERAGE_IMPORTER_UNSET": "커버리지 실행이 활성화되어 있지만 주입 가능한 리프 임포터가 설정되지 않았습니다 — 외부화된 이 slothlet의 리프 로드는 커버리지 보고서에 귀속되지 않습니다.",
482
+ "HINT_WARNING_COVERAGE_IMPORTER_UNSET": "테스트 설정에서 'import' 옵션 — (url) => import(url) 같은 함수 — 을 전달하여 리프 로드가 러너의 모듈 그래프를 타도록 하세요. docs/TESTING.md 참조.",
483
+ "HOOK_VERSION_UNRESOLVED": "훅 패턴 '{pattern}'을(를) 등록된 버전으로 해석할 수 없습니다.",
484
+ "HINT_HOOK_VERSION_UNRESOLVED": "버전 디스패치에는 패턴 경로를 포함하는 버전 마운트가 필요합니다 (api.add(path, source, options, { version })). 디스패처는 등록된 태그, 태그 배열, 또는 기본 버전을 사용하려면 아무것도 반환하지 않아야 합니다 — 아니면 versioned/versionDispatcher 옵션을 제거하고 패턴을 그대로 등록하세요.",
485
+ "HOOK_VERSION_UNKNOWN_TAG": "훅 패턴 '{pattern}'의 버전 디스패치가 등록되지 않은 버전 '{version}'을(를) 선택했습니다.",
486
+ "HINT_HOOK_VERSION_UNKNOWN_TAG": "디스패처는 allVersions로 전달된 등록된 태그 중에서 선택해야 합니다. 먼저 마운트를 등록하거나 (버전이 있는 api.add), 디스패처의 반환값을 수정하세요."
471
487
  },
472
488
  "metadata": {
473
489
  "code": "ko-kr",
@@ -43,6 +43,8 @@
43
43
  "HINT_COLLISION_DEFAULT_EXPORT_ERROR": "Uma exportação nomeada conflita com uma propriedade já presente no objeto de exportação padrão neste caminho. Altere o modo de colisão para 'merge', 'replace', 'warn' ou 'skip', ou renomeie a propriedade em conflito.",
44
44
  "INVALID_ARGUMENT": "Argumento inválido '{argument}': esperado {expected}, recebido {received}.",
45
45
  "HINT_INVALID_ARGUMENT": "O caminho deve ser uma string em notação por pontos (ex: 'math.add').",
46
+ "API_LEAVES_UNKNOWN_MODULE": "Nenhum módulo encontrado para '{key}'. Passe uma moduleID retornada por api.add(), um ponto de montagem ou um caminho de API possuído, ou '.' para a carga base.",
47
+ "HINT_API_LEAVES_UNKNOWN_MODULE": "leaves() resolve sua chave contra os registros de propriedade: uma moduleID, o caminho de montagem de um módulo ou qualquer caminho que esse módulo possua. Liste as montagens atuais com api.slothlet.owner.get().",
46
48
  "RUNTIME_NO_ACTIVE_CONTEXT": "Nenhum contexto ativo encontrado. Esta operação requer ser chamada de dentro de uma função da API slothlet.",
47
49
  "HINT_RUNTIME_NO_ACTIVE_CONTEXT": "metadata.self() deve ser chamado de dentro de uma função da API slothlet.",
48
50
  "INVALID_CONFIG_MUTATIONS_DISABLED": "Não é possível realizar '{operation}' - mutação está desativada. Defina allowMutation: true para habilitar operações de modificação da API (add/remove/reload).",
@@ -57,6 +59,10 @@
57
59
  "HINT_MODULE_LOAD_FAILED": "Verifique o arquivo do módulo em busca de erros. Certifique-se de que possui sintaxe JavaScript válida e exportações.",
58
60
  "MODULE_NOT_FOUND": "Módulo não encontrado: {modulePath}. {hint}",
59
61
  "HINT_MODULE_NOT_FOUND": "Certifique-se de que o módulo existe e o caminho está correto. Verifique se há erros de digitação na instrução de importação.",
62
+ "MODULE_RESERVED_FILENAME": "O arquivo de módulo '{file}' em '{dir}' tem o nome de uma chave reservada do framework e não pode ser carregado.",
63
+ "HINT_MODULE_RESERVED_FILENAME": "Nomes reservados (INTERNAL_KEYS como _materialize, _impl) são os manipuladores internos do framework; um arquivo de módulo com esse nome os sobrescreveria durante a adoção de filhos. Renomeie o arquivo.",
64
+ "MODULE_RESERVED_EXPORT": "A exportação de módulo '{name}' tem o nome de uma chave reservada do framework e não pode ser carregada.",
65
+ "HINT_MODULE_RESERVED_EXPORT": "Nomes reservados (_materialize, __impl, ...) são os manipuladores internos do framework — tal exportação só poderia ficar oculta e inacessível. Renomeie a exportação.",
60
66
  "MODULE_IMPORT_FAILED": "Falha ao importar o módulo '{modulePath}': {error}. Verifique se o arquivo existe e possui sintaxe válida.",
61
67
  "HINT_MODULE_IMPORT_FAILED": "Certifique-se de que o arquivo do módulo existe e pode ser importado. Verifique se há erros de sintaxe ou dependências ausentes.",
62
68
  "CONTEXT_ALREADY_EXISTS": "O contexto para a instância '{instanceID}' já existe. Não é possível inicializar duas vezes.",
@@ -121,8 +127,6 @@
121
127
  "HINT_V3_CONFIG_DEPRECATED": "Esta opção de configuração foi renomeada para maior clareza. Atualize seu código para usar o novo nome da opção e garantir compatibilidade com o v4.",
122
128
  "CONFIG_SCAN_HIDDEN_FOLDERS_DEPRECATED": "A opção de configuração '{option}' está obsoleta e será removida no v4. Pastas ocultas (nomes que começam com '.' ou '__') são excluídas da API por padrão.",
123
129
  "HINT_CONFIG_SCAN_HIDDEN_FOLDERS_DEPRECATED": "Esta opção é uma medida temporária de compatibilidade. Mova o conteúdo que não faz parte da API para fora do diretório da API para que não seja mais necessário escanear pastas ocultas.",
124
- "V2_CONFIG_UNSUPPORTED": "A opção de configuração '{option}' da v2 não é suportada na v3. {hint} Use '{replacement}' em seu lugar.",
125
- "HINT_V2_CONFIG_UNSUPPORTED": "Esta opção de configuração da v2 não é suportada na v3. Atualize sua configuração para usar o equivalente da v3 para melhor controle e clareza.",
126
130
  "DEBUG_MODE_ROOT_CONTRIBUTOR": "[{mode}] Contribuidor raiz detectado: {functionName}",
127
131
  "DEBUG_MODE_ROOT_CONTRIBUTOR_APPLIED": "[{mode}] Padrão de contribuidor raiz aplicado - API de função com {properties} propriedades adicionais",
128
132
  "DEBUG_MODE_PROCESSING_DIRECTORY": "[{mode}] Processando diretório: {categoryName} (profundidade {currentDepth})",
@@ -300,8 +304,12 @@
300
304
  "HINT_INVALID_HOOK_SUBSET": "Subconjuntos controlam a ordem de execução. Use 'before' para pré-processamento, 'primary' (padrão) para os ganchos principais ou 'after' para pós-processamento.",
301
305
  "INVALID_TYPE_PATTERN": "Padrão de tipo inválido \"{typePattern}\". {expected}",
302
306
  "HINT_INVALID_TYPE_PATTERN": "Os padrões de hook usam a forma 'pattern:type', como 'math.*:before' ou '**:error'. A forma legada 'type:pattern' ainda funciona, mas está obsoleta.",
303
- "HOOK_BEFORE_RETURNED_PROMISE": "O gancho 'before' '{id}' para o caminho '{path}' retornou uma Promise. Ganchos 'before' devem ser síncronos.",
304
- "HINT_HOOK_BEFORE_RETURNED_PROMISE": "Ganchos 'before' são executados de forma síncrona antes da chamada da API. Remova o uso de async/await ou Promise deste gancho, ou altere-o para um gancho 'after' se o processamento assíncrono for necessário.",
307
+ "HOOK_BEFORE_RETURNED_PROMISE": "O hook 'before' '{id}' para o caminho '{path}' retornou uma Promise em um pipeline síncrono.",
308
+ "HINT_HOOK_BEFORE_RETURNED_PROMISE": "Um manipulador 'before' não foi detectado como assíncrono. Use uma função async nativa, ou registre-o com { async: true }, para que a chamada seja promovida ao pipeline assíncrono.",
309
+ "HOOK_AFTER_RETURNED_PROMISE": "O hook 'after' '{id}' para o caminho '{path}' retornou uma Promise em um pipeline síncrono.",
310
+ "HINT_HOOK_AFTER_RETURNED_PROMISE": "Um manipulador 'after' não foi detectado como assíncrono. Use uma função async nativa, ou registre-o com { async: true }, para que a chamada seja promovida ao pipeline assíncrono.",
311
+ "HOOK_PROMOTED_RESULT_NOT_AWAITED": "O caminho '{path}' retornou uma Promise porque um hook assíncrono está anexado — use await no resultado.",
312
+ "HINT_HOOK_PROMOTED_RESULT_NOT_AWAITED": "Um alvo síncrono é promovido ao despacho assíncrono enquanto um hook before/after assíncrono estiver anexado. Use await na chamada, ou remova o hook assíncrono para restaurar retornos síncronos.",
305
313
  "HOOK_BRACE_EXPANSION_MAX_DEPTH": "A expansão de chaves no padrão de gancho excede a profundidade máxima de aninhamento de {maxDepth}.",
306
314
  "HINT_HOOK_BRACE_EXPANSION_MAX_DEPTH": "Simplifique o padrão de caminho do gancho para reduzir o aninhamento de chaves. A profundidade máxima permitida é de {maxDepth} níveis.",
307
315
  "SCOPE_DISABLED": "O isolamento de contexto por solicitação está desativado. Defina 'scope: {}' em sua configuração do slothlet para habilitá-lo.",
@@ -385,6 +393,8 @@
385
393
  "UNSUPPORTED_CONTEXT_MANAGER": "Gerenciador de contexto não suportado: '{manager}'. Apenas AsyncContextManager e LiveContextManager são suportados.",
386
394
  "HINT_UNSUPPORTED_CONTEXT_MANAGER": "Use AsyncContextManager para isolamento de contexto baseado em async/ALS ou LiveContextManager para contexto síncrono de live-binding.",
387
395
  "INVALID_CONFIG_VERSION_DISPATCHER": "config.versionDispatcher deve ser uma string (chave de metadados) ou uma função; recebido: {received}",
396
+ "INVALID_CONFIG_IMPORT": "Opção 'import' inválida: esperava-se uma função, recebeu-se {received}.",
397
+ "HINT_INVALID_CONFIG_IMPORT": "O importador de folhas injetável substitui o import dinâmico nativo do carregador. Passe uma função como (url) => import(url) — normalmente vinculada ao seu executor de testes para que a cobertura das folhas seja atribuída.",
388
398
  "INVALID_CONFIG_VERSION_TAG": "versionConfig.version deve ser uma string não vazia; recebido: {received}",
389
399
  "VERSION_NOT_FOUND": "A versão '{version}' não está registrada no caminho '{apiPath}'.",
390
400
  "HINT_VERSION_NOT_FOUND": "Chame api.slothlet.versioning.list('{apiPath}') para ver quais tags de versão estão atualmente registradas nesse caminho.",
@@ -467,7 +477,13 @@
467
477
  "CONTEXT_KEY_OWNED": "A chave de contexto '{key}' já tem proprietário e não pode ser reivindicada por um escopo aninhado.",
468
478
  "SCOPE_INVALID_PROTECT": "'protect' deve ser um array de chaves do tipo string. Recebido: {received}.",
469
479
  "SCOPE_INVALID_OWNERS": "'owners' deve ser um objeto simples que mapeia chaves para nomes de proprietário. Recebido: {received}.",
470
- "PERMISSION_SEALED": "A superfície de controle de permissões está selada; a política não pode mais ser modificada."
480
+ "PERMISSION_SEALED": "A superfície de controle de permissões está selada; a política não pode mais ser modificada.",
481
+ "WARNING_COVERAGE_IMPORTER_UNSET": "Uma execução de cobertura está ativa, mas nenhum importador de folhas injetável está configurado — os carregamentos de folhas deste slothlet externalizado não serão atribuídos ao seu relatório de cobertura.",
482
+ "HINT_WARNING_COVERAGE_IMPORTER_UNSET": "Passe a opção 'import' do seu setup de testes — uma função como (url) => import(url) — para que os carregamentos de folhas passem pelo grafo de módulos do seu executor. Veja docs/TESTING.md.",
483
+ "HOOK_VERSION_UNRESOLVED": "O padrão de hook '{pattern}' não pôde ser resolvido para uma versão registrada.",
484
+ "HINT_HOOK_VERSION_UNRESOLVED": "O despacho por versão precisa de uma montagem versionada cobrindo o caminho do padrão (api.add(path, source, options, { version })). Um despachante deve retornar uma tag registrada, um array delas, ou nada para usar a versão padrão — ou remova a opção versioned/versionDispatcher para registrar o padrão literalmente.",
485
+ "HOOK_VERSION_UNKNOWN_TAG": "O despacho por versão para o padrão de hook '{pattern}' selecionou '{version}', que não é uma versão registrada.",
486
+ "HINT_HOOK_VERSION_UNKNOWN_TAG": "O despachante deve escolher entre as tags registradas recebidas em allVersions. Registre primeiro a montagem (api.add com uma versão) ou corrija o valor de retorno do despachante."
471
487
  },
472
488
  "metadata": {
473
489
  "code": "pt-br",
@@ -43,6 +43,8 @@
43
43
  "HINT_COLLISION_DEFAULT_EXPORT_ERROR": "Именованный экспорт конфликтует со свойством default export. Измените режим или переименуйте экспорт.",
44
44
  "INVALID_ARGUMENT": "Неверный аргумент '{argument}': ожидалось {expected}, получено {received}.",
45
45
  "HINT_INVALID_ARGUMENT": "Путь должен быть строкой в точечной нотации, например 'math.add'.",
46
+ "API_LEAVES_UNKNOWN_MODULE": "Модуль для '{key}' не найден. Передайте moduleID, возвращённый api.add(), точку монтирования или принадлежащий модулю путь API, либо '.' для базовой загрузки.",
47
+ "HINT_API_LEAVES_UNKNOWN_MODULE": "leaves() разрешает ключ по записям владения: moduleID, путь монтирования модуля или любой путь, которым владеет этот модуль. Текущие монтирования можно получить через api.slothlet.owner.get().",
46
48
  "RUNTIME_NO_ACTIVE_CONTEXT": "Активный контекст не найден. Операция должна выполняться внутри Slothlet API-функции.",
47
49
  "HINT_RUNTIME_NO_ACTIVE_CONTEXT": "metadata.self() должен вызываться внутри Slothlet API-функции.",
48
50
  "INVALID_CONFIG_MUTATIONS_DISABLED": "Невозможно выполнить '{operation}' — мутации отключены. Установите allowMutation: true для разрешения изменений API (add/remove/reload).",
@@ -57,6 +59,10 @@
57
59
  "HINT_MODULE_LOAD_FAILED": "Проверьте файл модуля на ошибки синтаксиса и экспорты.",
58
60
  "MODULE_NOT_FOUND": "Модуль не найден: {modulePath}. {hint}",
59
61
  "HINT_MODULE_NOT_FOUND": "Убедитесь, что модуль существует и путь указан верно. Проверьте опечатки в import-пути.",
62
+ "MODULE_RESERVED_FILENAME": "Файл модуля '{file}' в '{dir}' назван по зарезервированному ключу фреймворка и не может быть загружен.",
63
+ "HINT_MODULE_RESERVED_FILENAME": "Зарезервированные имена (INTERNAL_KEYS, такие как _materialize, _impl) — это собственные обработчики оболочки фреймворка; файл модуля с таким именем перезаписал бы их при принятии потомков. Переименуйте файл.",
64
+ "MODULE_RESERVED_EXPORT": "Экспорт модуля '{name}' назван по зарезервированному ключу фреймворка и не может быть загружен.",
65
+ "HINT_MODULE_RESERVED_EXPORT": "Зарезервированные имена (_materialize, __impl, ...) — это собственные обработчики оболочки фреймворка — такой экспорт может быть лишь скрыт и недостижим. Переименуйте экспорт.",
60
66
  "MODULE_IMPORT_FAILED": "Не удалось импортировать модуль '{modulePath}': {error}. Проверьте, существует ли файл и корректен ли синтаксис.",
61
67
  "HINT_MODULE_IMPORT_FAILED": "Проверьте существование файла и корректность импорта. Проверьте зависимости.",
62
68
  "CONTEXT_ALREADY_EXISTS": "Контекст для экземпляра '{instanceID}' уже существует. Невозможно инициализировать дважды.",
@@ -121,8 +127,6 @@
121
127
  "HINT_V3_CONFIG_DEPRECATED": "Этот параметр конфигурации был переименован для ясности. Обновите код на новое имя параметра для совместимости с v4.",
122
128
  "CONFIG_SCAN_HIDDEN_FOLDERS_DEPRECATED": "Параметр конфигурации '{option}' устарел и будет удалён в v4. Скрытые папки (имена, начинающиеся с '.' или '__') по умолчанию исключаются из API.",
123
129
  "HINT_CONFIG_SCAN_HIDDEN_FOLDERS_DEPRECATED": "Этот параметр — временное средство обратной совместимости. Перенесите не относящееся к API содержимое из каталога API, чтобы скрытые папки больше не требовалось сканировать.",
124
- "V2_CONFIG_UNSUPPORTED": "Опция конфигурации '{option}' из v2 не поддерживается в v3. {hint} Используйте '{replacement}'.",
125
- "HINT_V2_CONFIG_UNSUPPORTED": "Опция v2 не поддерживается в v3 — обновите конфигурацию.",
126
130
  "DEBUG_MODE_ROOT_CONTRIBUTOR": "[{mode}] Обнаружен root-contributor: {functionName}",
127
131
  "DEBUG_MODE_ROOT_CONTRIBUTOR_APPLIED": "[{mode}] Применён шаблон root-contributor — API-функция с {properties} дополнительными свойствами",
128
132
  "DEBUG_MODE_PROCESSING_DIRECTORY": "[{mode}] Обработка каталога: {categoryName} (глубина {currentDepth})",
@@ -300,8 +304,12 @@
300
304
  "HINT_INVALID_HOOK_SUBSET": "Subsets управляют порядком выполнения: 'before', 'primary', 'after'.",
301
305
  "INVALID_TYPE_PATTERN": "Неверный паттерн типа \"{typePattern}\". {expected}",
302
306
  "HINT_INVALID_TYPE_PATTERN": "Шаблоны хуков используют форму 'pattern:type', например 'math.*:before' или '**:error'. Прежняя форма 'type:pattern' всё ещё работает, но устарела.",
303
- "HOOK_BEFORE_RETURNED_PROMISE": "Before-hook '{id}' для пути '{path}' вернул Promise. Before-hooks должны быть синхронными.",
304
- "HINT_HOOK_BEFORE_RETURNED_PROMISE": "Before-hooks выполняются синхронно до вызова API. Уберите async/await или сделайте hook 'after'.",
307
+ "HOOK_BEFORE_RETURNED_PROMISE": "Before-hook '{id}' для пути '{path}' вернул Promise в синхронном конвейере.",
308
+ "HINT_HOOK_BEFORE_RETURNED_PROMISE": "Обработчик 'before' не был распознан как асинхронный. Используйте нативную async-функцию или зарегистрируйте его с { async: true }, чтобы вызов был повышен до асинхронного конвейера.",
309
+ "HOOK_AFTER_RETURNED_PROMISE": "Хук 'after' '{id}' для пути '{path}' вернул Promise в синхронном конвейере.",
310
+ "HINT_HOOK_AFTER_RETURNED_PROMISE": "Обработчик 'after' не был распознан как асинхронный. Используйте нативную async-функцию или зарегистрируйте его с { async: true }, чтобы вызов был повышен до асинхронного конвейера.",
311
+ "HOOK_PROMOTED_RESULT_NOT_AWAITED": "Путь '{path}' вернул Promise, потому что подключён асинхронный hook — используйте await для результата.",
312
+ "HINT_HOOK_PROMOTED_RESULT_NOT_AWAITED": "Синхронная цель повышается до асинхронной диспетчеризации, пока подключён асинхронный before/after-hook. Используйте await для вызова или удалите асинхронный hook, чтобы восстановить синхронные возвраты.",
305
313
  "HOOK_BRACE_EXPANSION_MAX_DEPTH": "Развёртывание скобок в паттерне hook превысило максимальную глубину {maxDepth}.",
306
314
  "HINT_HOOK_BRACE_EXPANSION_MAX_DEPTH": "Упростите паттерн пути, чтобы уменьшить вложенность.",
307
315
  "SCOPE_DISABLED": "Per-request context isolation отключена. Установите 'scope: {}' в конфигурации Slothlet для включения.",
@@ -385,6 +393,8 @@
385
393
  "UNSUPPORTED_CONTEXT_MANAGER": "Неподдерживаемый менеджер контекста: '{manager}'. Поддерживаются AsyncContextManager и LiveContextManager.",
386
394
  "HINT_UNSUPPORTED_CONTEXT_MANAGER": "Используйте AsyncContextManager для async/ALS или LiveContextManager для live-binding.",
387
395
  "INVALID_CONFIG_VERSION_DISPATCHER": "config.versionDispatcher должен быть строкой (ключ метаданных) или функцией; получено: {received}",
396
+ "INVALID_CONFIG_IMPORT": "Недопустимая опция 'import': ожидалась функция, получено {received}.",
397
+ "HINT_INVALID_CONFIG_IMPORT": "Внедряемый импортер листьев заменяет нативный динамический import загрузчика. Передайте функцию вида (url) => import(url) — обычно привязанную к вашему тест-раннеру, чтобы покрытие листьев учитывалось.",
388
398
  "INVALID_CONFIG_VERSION_TAG": "versionConfig.version должен быть непустой строкой; получено: {received}",
389
399
  "VERSION_NOT_FOUND": "Версия '{version}' не зарегистрирована по пути '{apiPath}'.",
390
400
  "HINT_VERSION_NOT_FOUND": "Вызовите api.slothlet.versioning.list('{apiPath}'), чтобы увидеть, какие теги версий зарегистрированы по этому пути.",
@@ -467,7 +477,13 @@
467
477
  "CONTEXT_KEY_OWNED": "Ключ контекста '{key}' уже принадлежит владельцу и не может быть повторно занят вложенной областью.",
468
478
  "SCOPE_INVALID_PROTECT": "'protect' должен быть массивом строковых ключей. Получено: {received}.",
469
479
  "SCOPE_INVALID_OWNERS": "'owners' должен быть простым объектом, сопоставляющим ключи с именами владельцев. Получено: {received}.",
470
- "PERMISSION_SEALED": "Поверхность управления разрешениями запечатана; политику больше нельзя изменить."
480
+ "PERMISSION_SEALED": "Поверхность управления разрешениями запечатана; политику больше нельзя изменить.",
481
+ "WARNING_COVERAGE_IMPORTER_UNSET": "Активен запуск с покрытием, но внедряемый импортер листьев не настроен — загрузки листьев этого внешнего slothlet не будут учтены в отчёте о покрытии.",
482
+ "HINT_WARNING_COVERAGE_IMPORTER_UNSET": "Передайте опцию 'import' из вашей тестовой настройки — функцию вида (url) => import(url) — чтобы загрузки листьев шли через модульный граф вашего раннера. См. docs/TESTING.md.",
483
+ "HOOK_VERSION_UNRESOLVED": "Шаблон hook '{pattern}' не удалось сопоставить с зарегистрированной версией.",
484
+ "HINT_HOOK_VERSION_UNRESOLVED": "Диспетчеризация по версии требует версионированного монтирования, покрывающего путь шаблона (api.add(path, source, options, { version })). Диспетчер должен вернуть зарегистрированный тег, массив тегов или ничего — для версии по умолчанию; либо уберите опцию versioned/versionDispatcher, чтобы зарегистрировать шаблон буквально.",
485
+ "HOOK_VERSION_UNKNOWN_TAG": "Диспетчеризация по версии для шаблона hook '{pattern}' выбрала '{version}' — это не зарегистрированная версия.",
486
+ "HINT_HOOK_VERSION_UNKNOWN_TAG": "Диспетчер должен выбирать из зарегистрированных тегов, переданных в allVersions. Сначала зарегистрируйте монтирование (api.add с версией) или исправьте возвращаемое значение диспетчера."
471
487
  },
472
488
  "metadata": {
473
489
  "code": "ru-ru",
@@ -43,6 +43,8 @@
43
43
  "HINT_COLLISION_DEFAULT_EXPORT_ERROR": "具名导出与此路径下默认导出对象上已存在属性冲突。请将冲突模式更改为 'merge'、'replace'、'warn' 或 'skip',或者重命名冲突的属性。",
44
44
  "INVALID_ARGUMENT": "无效参数 '{argument}':预期为 {expected},接收到 {received}。",
45
45
  "HINT_INVALID_ARGUMENT": "路径必须是点分写法字符串(例如 'math.add')。",
46
+ "API_LEAVES_UNKNOWN_MODULE": "未找到与 '{key}' 对应的模块。请传入 api.add() 返回的 moduleID、挂载端点或该模块拥有的 API 路径,或用 '.' 表示基础加载。",
47
+ "HINT_API_LEAVES_UNKNOWN_MODULE": "leaves() 根据所有权记录解析键:moduleID、模块的挂载路径,或该模块拥有的任意路径。可通过 api.slothlet.owner.get() 列出当前挂载。",
46
48
  "RUNTIME_NO_ACTIVE_CONTEXT": "未找到活动上下文。此操作需要在 slothlet API 函数内部调用。",
47
49
  "HINT_RUNTIME_NO_ACTIVE_CONTEXT": "metadata.self() 必须在 slothlet API 函数内部调用。",
48
50
  "INVALID_CONFIG_MUTATIONS_DISABLED": "无法执行 '{operation}' - 变动功能已禁用。请设置 allowMutation: true 以启用 API 修改操作(add/remove/reload)。",
@@ -57,6 +59,10 @@
57
59
  "HINT_MODULE_LOAD_FAILED": "请检查模块文件是否存在错误。确保其具有有效的 JavaScript 语法和导出。",
58
60
  "MODULE_NOT_FOUND": "未找到模块:{modulePath}。{hint}",
59
61
  "HINT_MODULE_NOT_FOUND": "请确保模块存在且路径正确。检查导入语句中是否存在拼写错误。",
62
+ "MODULE_RESERVED_FILENAME": "'{dir}' 中的模块文件 '{file}' 使用了框架保留键的名称,无法加载。",
63
+ "HINT_MODULE_RESERVED_FILENAME": "保留名称(INTERNAL_KEYS 中的 _materialize、_impl 等)是框架自身的包装器句柄;同名模块文件会在子级收养时覆盖它们。请重命名该文件。",
64
+ "MODULE_RESERVED_EXPORT": "模块导出 '{name}' 使用了框架保留键的名称,无法加载。",
65
+ "HINT_MODULE_RESERVED_EXPORT": "保留名称(_materialize、__impl 等)是框架自身的包装器句柄 — 这样的导出只会被遮蔽且不可达。请重命名该导出。",
60
66
  "MODULE_IMPORT_FAILED": "导入模块 '{modulePath}' 失败:{error}。请检查文件是否存在且语法正确。",
61
67
  "HINT_MODULE_IMPORT_FAILED": "请确保模块文件存在且可导入。检查语法错误或缺失的依赖项。",
62
68
  "CONTEXT_ALREADY_EXISTS": "实例 '{instanceID}' 的上下文已存在。不能初始化两次。",
@@ -121,8 +127,6 @@
121
127
  "HINT_V3_CONFIG_DEPRECATED": "此配置选项已重命名以提高清晰度。请更新代码以使用新选项名称,以确保与 v4 的向前兼容性。",
122
128
  "CONFIG_SCAN_HIDDEN_FOLDERS_DEPRECATED": "配置选项 '{option}' 已弃用,将在 v4 中移除。隐藏文件夹(以 '.' 或 '__' 开头的名称)默认从 API 中排除。",
123
129
  "HINT_CONFIG_SCAN_HIDDEN_FOLDERS_DEPRECATED": "此选项是临时的向后兼容手段。请将与 API 无关的内容移出 API 目录,从而不再需要扫描隐藏文件夹。",
124
- "V2_CONFIG_UNSUPPORTED": "v2 中的配置选项 '{option}' 在 v3 中不受支持。{hint} 请改为使用 '{replacement}'。",
125
- "HINT_V2_CONFIG_UNSUPPORTED": "v2 中的此配置选项在 v3 中不受支持。请更新您的配置以使用 v3 的对应项,从而获得更好的控制权和清晰度。",
126
130
  "DEBUG_MODE_ROOT_CONTRIBUTOR": "[{mode}] 检测到根贡献者:{functionName}",
127
131
  "DEBUG_MODE_ROOT_CONTRIBUTOR_APPLIED": "[{mode}] 应用了根贡献者模式 - 具有 {properties} 个附加属性的函数 API",
128
132
  "DEBUG_MODE_PROCESSING_DIRECTORY": "[{mode}] 正在处理目录:{categoryName}(深度 {currentDepth})",
@@ -300,8 +304,12 @@
300
304
  "HINT_INVALID_HOOK_SUBSET": "子集控制着执行顺序。前置处理请用 'before',主要钩子请用 'primary'(默认),后置处理请用 'after'。",
301
305
  "INVALID_TYPE_PATTERN": "无效的类型模式 \"{typePattern}\"。{expected}",
302
306
  "HINT_INVALID_TYPE_PATTERN": "钩子模式使用 'pattern:type' 形式,例如 'math.*:before' 或 '**:error'。旧的 'type:pattern' 形式仍然有效,但已弃用。",
303
- "HOOK_BEFORE_RETURNED_PROMISE": "路径 '{path}' 的前置钩子 '{id}' 返回了一个 Promise。前置钩子必须是同步的。",
304
- "HINT_HOOK_BEFORE_RETURNED_PROMISE": "前置钩子在 API 调用前同步执行。请从此钩子中移除 async/await 或 Promise 的使用,如果需要异步处理,请改用 'after' 钩子。",
307
+ "HOOK_BEFORE_RETURNED_PROMISE": "路径 '{path}' 的前置钩子 '{id}' 在同步管道中返回了一个 Promise。",
308
+ "HINT_HOOK_BEFORE_RETURNED_PROMISE": "前置处理器未被检测为异步。请使用原生 async 函数,或在注册时传入 { async: true },使调用提升到异步管道。",
309
+ "HOOK_AFTER_RETURNED_PROMISE": "路径 '{path}' 的后置钩子 '{id}' 在同步管道中返回了一个 Promise。",
310
+ "HINT_HOOK_AFTER_RETURNED_PROMISE": "后置处理器未被检测为异步。请使用原生 async 函数,或在注册时传入 { async: true },使调用提升到异步管道。",
311
+ "HOOK_PROMOTED_RESULT_NOT_AWAITED": "路径 '{path}' 返回了一个 Promise,因为附加了异步钩子 — 请对结果使用 await。",
312
+ "HINT_HOOK_PROMOTED_RESULT_NOT_AWAITED": "只要附加了异步的前置/后置钩子,同步目标就会提升为异步调度。请对调用使用 await,或移除异步钩子以恢复同步返回。",
305
313
  "HOOK_BRACE_EXPANSION_MAX_DEPTH": "钩子模式中的大括号扩展超过了最大嵌套深度 {maxDepth}。",
306
314
  "HINT_HOOK_BRACE_EXPANSION_MAX_DEPTH": "请简化钩子路径模式以减少大括号嵌套。最大允许深度为 {maxDepth} 层。",
307
315
  "SCOPE_DISABLED": "每请求上下文隔离已禁用。请在 slothlet 配置中设置 'scope: {}' 以启用该功能。",
@@ -385,6 +393,8 @@
385
393
  "UNSUPPORTED_CONTEXT_MANAGER": "不支持的上下文管理器:'{manager}'。仅支持 AsyncContextManager 和 LiveContextManager。",
386
394
  "HINT_UNSUPPORTED_CONTEXT_MANAGER": "对异步/ALS 上下文隔离使用 AsyncContextManager,对同步实时绑定上下文使用 LiveContextManager。",
387
395
  "INVALID_CONFIG_VERSION_DISPATCHER": "config.versionDispatcher 必须是字符串(元数据键)或函数;收到:{received}",
396
+ "INVALID_CONFIG_IMPORT": "无效的 'import' 选项:应为函数,收到 {received}。",
397
+ "HINT_INVALID_CONFIG_IMPORT": "可注入的叶子导入器会替换加载器的原生动态 import。请传入类似 (url) => import(url) 的函数 — 通常绑定到你的测试运行器,使叶子覆盖率得以归因。",
388
398
  "INVALID_CONFIG_VERSION_TAG": "versionConfig.version 必须是非空字符串;收到:{received}",
389
399
  "VERSION_NOT_FOUND": "版本 '{version}' 未在路径 '{apiPath}' 注册。",
390
400
  "HINT_VERSION_NOT_FOUND": "调用 api.slothlet.versioning.list('{apiPath}') 查看当前在该路径注册的版本标签。",
@@ -467,7 +477,13 @@
467
477
  "CONTEXT_KEY_OWNED": "上下文键 '{key}' 已被占用,嵌套作用域无法重新占用。",
468
478
  "SCOPE_INVALID_PROTECT": "'protect' 必须是字符串键的数组。收到: {received}。",
469
479
  "SCOPE_INVALID_OWNERS": "'owners' 必须是将键映射到所有者名称的普通对象。收到: {received}。",
470
- "PERMISSION_SEALED": "权限控制面已封印;无法再修改策略。"
480
+ "PERMISSION_SEALED": "权限控制面已封印;无法再修改策略。",
481
+ "WARNING_COVERAGE_IMPORTER_UNSET": "覆盖率运行处于活动状态,但未配置可注入的叶子导入器 — 这个外部化的 slothlet 的叶子加载将不会归因到你的覆盖率报告。",
482
+ "HINT_WARNING_COVERAGE_IMPORTER_UNSET": "请在测试设置中传入 'import' 选项 — 类似 (url) => import(url) 的函数 — 使叶子加载经过你的运行器的模块图。参见 docs/TESTING.md。",
483
+ "HOOK_VERSION_UNRESOLVED": "钩子模式 '{pattern}' 无法解析到已注册的版本。",
484
+ "HINT_HOOK_VERSION_UNRESOLVED": "版本调度需要一个覆盖该模式路径的版本化挂载 (api.add(path, source, options, { version }))。调度器必须返回已注册的标签、标签数组,或不返回任何内容以使用默认版本 — 或者去掉 versioned/versionDispatcher 选项以按字面注册该模式。",
485
+ "HOOK_VERSION_UNKNOWN_TAG": "钩子模式 '{pattern}' 的版本调度选择了 '{version}',但它不是已注册的版本。",
486
+ "HINT_HOOK_VERSION_UNKNOWN_TAG": "调度器必须从 allVersions 中提供的已注册标签中选择。请先注册挂载(带版本的 api.add),或修正调度器的返回值。"
471
487
  },
472
488
  "metadata": {
473
489
  "code": "zh-cn",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cldmv/slothlet-i18n",
3
- "version": "3.12.2",
3
+ "version": "3.13.0",
4
4
  "description": "Additional locale packs for @cldmv/slothlet — install alongside it to enable non-English error and warning messages. Slothlet auto-detects this package; you should not import it directly.",
5
5
  "keywords": [
6
6
  "slothlet",
@@ -56,7 +56,7 @@
56
56
  "LICENSE"
57
57
  ],
58
58
  "peerDependencies": {
59
- "@cldmv/slothlet": "3.12.2"
59
+ "@cldmv/slothlet": "3.13.0"
60
60
  },
61
61
  "peerDependenciesMeta": {
62
62
  "@cldmv/slothlet": {