i18next-cli vs Hedgeling — comparison
Hedgeling 1.3.1, each project with its tuned configuration, against i18next-cli 1.87.0 with a per-project tuned configuration. Both tools ran on the same pinned project commits.
Recall on the same strip test
2,181 messages in the Keycloak Admin Console were unwrapped from their t() calls back into hardcoded English, then both tools were run on the result. A message counts as found when it appears in what the tool shows the developer.
| tool and configuration | messages found | messages missed | recall |
|---|---|---|---|
| i18next-cli, out of the box | 1,588 | 593 | 72.81% |
| Hedgeling, out of the box | 2,157 | 24 | 98.90% |
| i18next-cli, tuned | 1,998 | 183 | 91.61% |
| Hedgeling, tuned | 2,162 | 19 | 99.13% |
Out of the box, i18next-cli misses about one in four of these messages; Hedgeling with no configuration at all misses 24. Tuned as far as its options allow it still misses 183, against Hedgeling's 19. About seven in ten of those remaining misses are the same pattern: a success or error message passed straight to a notification helper. i18next-cli does not treat a string handed to a function as user-facing copy, so toast and alert text is invisible to it.
Brownfield
Already internationalized. Precision is a residue ratio; the TP count is the headline metric (real i18n gaps found).
| project | fw | Hedgeling strings | i18next-cli strings | Hedgeling precision | Hedgeling TP | i18next-cli precision | i18next-cli TP |
|---|---|---|---|---|---|---|---|
| keycloak-admin-ui | react | 122 | 121 | 70% | 70/100 | 70% | 70/100 |
| directus | vue | 119 | 178 | 83% | 83/100 | 35% | 35/100 |
| all brownfield projects | 77% | 153/200 | 53% | 105/200 | |||
Greenfield
No existing i18n pass. Precision is the headline accuracy number.
| project | fw | Hedgeling strings | i18next-cli strings | Hedgeling precision | Hedgeling TP | i18next-cli precision | i18next-cli TP |
|---|---|---|---|---|---|---|---|
| bulletproof-react | react | 103 | 123 | 100% | 100/100 | 99% | 99/100 |
| analog | angular | 116 | 28 | 82% | 82/100 | 32% | 9/28 |
| pocketbase-admin | svelte | 992 | 1,183 | 96% | 96/100 | 68% | 68/100 |
| hf-chat-ui | svelte | 528 | 368 | 100% | 100/100 | 94% | 94/100 |
| appwrite-console | svelte | 4,129 | 1,541 | 98% | 98/100 | 94% | 94/100 |
| supabase-studio | react | 14,084 | 15,136 | 97% | 97/100 | 81% | 81/100 |
| all greenfield projects | 96% | 573/600 | 84% | 445/528 | |||
instrument command would transform (dry run) with a per-project tuned configuration: file ignores, a
custom scorer built from its own lint and dry-run diagnostics that skips noise and raises the confidence of
everything else, and every lint tag accepted. For the Vue and Svelte apps its string set also includes the
hardcoded-string findings of the community Vue and Svelte lint plugins; there is no Angular plugin, so Analog is
JS/TS only on its side. Precision for both tools comes from 100-string samples labeled with the same rubric.
Recall for both tools is the same Keycloak strip test: a message counts as found when it appears in what the tool
shows the developer.