fix(langs): ts() no avisa al usar un |fallback de nivel superior

Asimetria: t() (engine) y ts() (mono) devuelven el |fallback en SILENCIO,
pero ts() de engine iba via resolveValue, que emitia REFERENCE_FALLBACK_USED
(WARN) en cada miss-con-fallback → consola ruidosa en DEV para el patron
`#?key|fallback` (i18n gradual: fallback inline, claves de catalogo despues).

El |fallback es el default deliberado del autor, no una condicion avisable.
Gate del emit a `depth > 0`: solo avisa cuando una cadena de referencia
ANIDADA cae al fallback (ref interna rota), no en el lookup de nivel superior.
Alinea engine-ts con t() y mono-ts. Sin test que fijara el warn; 132/132 verde.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
alpha-0.1-sec-dom
dev 3 months ago
parent 960ae03c6a
commit 45543ab95e

@ -214,9 +214,15 @@ langs.ts({ es: 'Solo español' }, 'en'); // 'Solo español' (single-locale fallb
// 3) LangRef — alias to a schema key (optional literal fallback)
langs.ts('#?common.ok', 'es'); // resolves to 'Aceptar'
langs.ts('#?missing.key|Default', 'es'); // fallback literal wins
langs.ts('#?missing.key|Default', 'es'); // fallback literal wins (silently)
```
A provided `|fallback` is the author's deliberate default, so a top-level miss
that uses it is **not** a warnable condition — `t`, `ts`, and the mono engine all
return the literal silently. A warning is only emitted for a broken **nested**
reference chain (a catalog value that is itself a `#?ref` whose target is missing)
or for a top-level miss with **no** fallback.
Practical pattern — a generic button component that accepts a translatable label:
```svelte

@ -139,7 +139,11 @@ export function createEngineLangs<S extends LangNode>(
if (resolved === undefined) {
if (parsed?.fallback !== undefined) {
if (DEV)
// A provided `|fallback` is the author's deliberate default, so a
// TOP-LEVEL lookup using it is not warnable — `t()` (above) and
// mono-langs `ts()` are already silent here. Only warn when a NESTED
// reference chain (depth > 0) falls back: that's a broken internal ref.
if (DEV && depth > 0)
emitLangDiagnostic(
diagnostics,
LANG_DIAGNOSTIC_EVENTS.REFERENCE_FALLBACK_USED,

Loading…
Cancel
Save

Powered by TurnKey Linux.