hl run can route strings through Google or DeepL MT profiles, segment text with SRX 2.0, and execute MT in bounded batches. sync push and sync pull honor storage.adapter in i18n.yml, and hl check warns on escaped-character regressions plus optional per-locale spellcheck allow-lists.
View the GitHub release · Full changelog
Breaking changes
- Configs that define both
translation(includingtranslation.rules) and legacyllm.rulesfail validation. Move routing rules totranslation.rulesbefore enabling MT routing. (#2294) - TMS
sync pullandsync pushthrough storage adapters treat locale files without provenance metadata (flat JSON with no.meta.jsonsidecar,origin=unknown) as conflicts (unknown_provenance_mismatch) instead of silently overwriting local or remote values. Use--force-conflictson push when you intend to override. (#2385)
Features
- Add Phrase file-mode parity:
phrase init,phrase push/phrase pull,phrase locales list, upload--waitwith terminal-state polling, andphrase uploads cleanup --idfor unmentioned keys. - Expand
hyperlocalise smartlingwith translation file import (upload translations), discovery (files list/status,locales list,projects list/info), file rename/delete,download sources|translations --allwith officialname_locale.extpaths, optional download locales, retrieval type (pending/published/pseudo), upload directives, and glossary list/create/import/download. (#2248, #2264, #2274) - Add
hyperlocalise lokalise:upload translations(requires--target-locale),locales list,files list, and--poll/--poll-timeouton uploads to wait for Lokalise process completion. (#2330) - Route
sync push/sync pullthroughstorage.adapterwhen Hyperlocalise Cloud sync is not configured; native Hyperlocalise sync still wins when both blocks are present. - Add translation routing and typed
mt.profilessohl runcan select LLM or MT engines per group; MT image tasks are rejected at planning time. - Add an MT engine factory for Google Translate and DeepL (credentials from configured environment variables) and bounded MT batch execution with retries, cancellation, and partial-success behavior aligned with the existing LLM worker path.
- Add native SRX 2.0 segmentation for
hl runviabuckets.*.files[].srxorrun --srx, with span keys, lock fingerprints, and skips for already-segmented formats and ICU/printf/Fluent placeholders. - Add
escaped_char_mismatchwarnings tohl checkwhen translations introduce literal escapes or decoded control characters not present in the source; supports--quiet,--fix, and--diff-stdin. - Add
spellcheck.dictionary_dirini18n.ymlandhl check --dictionary-dirfor per-locale Hunspell allow-list files ({locale}.txt).
Fixes
- Lokalise entry sync chunks
Keys.Create/Keys.BulkUpdateat 500 keys, maps hyphen/underscore locale codes, and hardens pull locale resolution for adapter-only configs.
Performance
- Java Properties parsing is about 28% faster (632 µs → 453 µs/op) with allocations dropping from 2,044 to 19 allocs/op when escapes are absent.
- Eval scoring token counting is about 2.3× faster (41.5 µs → 18.0 µs/op) with lower heap use in
BenchmarkEvaluatorEvaluate. - Scoring evaluator tag analysis avoids
strings.ToLowerandstrings.Builderallocations for typical HTML/ICU tokens. - Android XML parsing is about 7–8% faster by lazily computing line numbers only for errors and
<plurals>metadata. - JSONC comment parsing is about 10% faster (874 µs → 788 µs/op) with 301 fewer allocations per operation.
Tests
- Phrase init/push/pull/wait/cleanup, Smartling import/discovery/download-all/glossary flows, and Lokalise upload/list/poll command suites.
- Storage-adapter
sync push/sync pull, unknown-provenance conflict regressions, and Lokalise adapter live/httptest paths. - MT profile validation, engine factory credential errors, bounded MT batch execution, and SRX segmentation/join round-trips.
escaped_char_mismatchand spellcheck dictionary directory resolution forhl check.
Maintenance
- Bump
google.golang.org/grpcfrom v1.83.1 to v1.83.2. (#2306)

