hyperlocalise/hyperlocalise@v1 with check: check to validate committed
translations in pull requests. The action reports missing messages, placeholder
errors, and other findings, then fails according to your severity threshold.
It does not generate or repair translations.
Choose the check you need
Use full validation as your baseline. Drift is based on planning and lockfile
state; it does not replace validation of the target contents.
Before you start
Commiti18n.yml, source files, and reviewed target files to your repository.
Commit .hyperlocalise.lock.json too if you use incremental generation or drift
checks. See the quickstart.
The examples use GitHub-hosted Ubuntu runners. They need no translation-provider
API key because they validate local files without calling a model. Translation
and automated repair belong in a separate workflow with provider credentials.
1. Add full validation to pull requests
Create.github/workflows/localization.yml in your app repository:
severity-threshold: error to use the default threshold, which fails on both
warnings and errors. For example, a brand name that matches the source can produce
a same_as_source warning.
The action installs the CLI. @v1 selects the action release line, while
hyperlocalise-version selects the CLI version and defaults to latest. You can
pin an exact CLI release or set hyperlocalise-version: config when i18n.yml
contains a CLI version pin.
2. Read and reproduce a failure
A missing target key produces anot_localized error. A missing target file
produces missing_target_file. Invalid translated ICU structures can produce
icu_shape_mismatch.
Inspect the job summary and inline annotations where source locations are
available. Download check-report.json and check-summary.txt from the uploaded
artifact for details.
Reproduce the error-level gate locally:
Check only changed keys
For repositories with existing findings, you can scope a pull request check to changed translation keys. Replace the baseline workflow with:check --diff-stdin. The additional permission allows reading that diff. See
GitHub workflow permissions.
Changed-key mode supports
.json, .jsonc, and .arb. It ignores unsupported
file types, skips files without identifiable changed keys, and omits file-level
and document-level checks. Keep full validation for missing files, Markdown/MDX,
and other formats. This mode requires a pull request event.extract --prefix-id filename
prefixes but your targets use pack --prefix-id, add
prefix-id: true to the action inputs.
Detect pending translation work
Use drift mode to inspect the translation plan:hyperlocalise run --dry-run. It considers executable tasks or
prune candidates reported by the plan to be drift. It uploads drift-report.json
and drift-summary.txt. Command failures still fail the action when
fail-on-drift is false.
Use the changed-string workflow to
update translations and checkpoint state. A clean drift result is not a guarantee
that every target message is valid.
Action inputs
For a monorepo, set
working-directory: apps/web and keep config-path: i18n.yml
if the configuration lives at apps/web/i18n.yml.
Next steps
- Check command reference lists findings and local flags.
- CI automation covers installation and sync patterns.
- React Intl tutorial covers extraction before validation.

