hl run translates Excel workbooks, Word documents, and PowerPoint decks. Markdown translations that come back as real links, heading ids, or callouts are stored with their placeholders restored. Flat JSON keys that contain dots stay flat when the target file is written.
View the GitHub release · Full changelog
Breaking changes
None.Features
- Add Excel workbooks (
.xlsx). Each visible sheet is a multilingual string table when the first row names the source locale, or a cell document keyed by address such asSheet1!B3. A workbook can mix both layouts. Row keys come from a key column; a missing or duplicate key falls back to the sheet and row, such asSheet1!5:5. Comments go to the model as context, and length-limit columns set the maximum length. Writeback copies the source workbook, so formulas, numbers, dates, booleans, hidden sheets, and other locales stay in place. A target locale with no column is added after the last used column, copying the source column’s width and cell styles. Existing target cells are kept. Rich text inside a cell is written back as plain text, and cell formatting stays. Mapfromto the same path to keep every locale in one workbook, or use{{target}}for one workbook per locale. Lock entries for a shared.xlsx,.csv, or.tsvtarget include the locale (path::key::fr) so two locales of the same key stay distinct. Olderpath::keyentries still match. See Translate Excel workbooks. - Add
hl entries --source-localefor files that store locales as columns.hl entries strings.xlsx --source-locale en --locale frprints the French column. Without--source-locale,--localenames the source column. - Add Word documents (
.docx) and PowerPoint decks (.pptx). Paragraphs are keyed by part and position, such asword/document.xml#12orppt/slides/slide3.xml#4. Word reads the body, table cells, text boxes, headers, footers, footnotes, and endnotes. Tracked insertions are translated and tracked deletions are left out. PowerPoint reads slide text boxes, placeholders, and table cells in presentation order, and copies speaker notes, layouts, masters, charts, and SmartArt unchanged. Most of a paragraph’s formatting is the translation style; other runs, links, and objects are placeholders that writeback restores. An existing target is updated in place, and untranslated paragraphs keep their source text. The CLI does not parse legacy.xls,.doc, or.pptfiles. See Translate Word documents and Translate PowerPoint decks. - Restore markdown placeholders when a translation comes back as real markdown. Links, Intercom
{#heading-id}anchors, and:::calloutfences are turned back intoHLMDPHtokens before the segment is stored, so writeback can expand them. A candidate whose tokens still do not match the source fails validation.
Fixes
- Update flat dotted JSON keys in place on flush. A catalog whose keys are literal strings such as
figma.k.Akeeps those keys whenhl runwrites the file. A string that already lives under a nested object, such asfigma→k.A, is still updated there.
Performance
- JSX extraction allocates the React Intl attribute map only after a message attribute matches.
Tests
- Excel shared-workbook locales, preserved columns for locales outside the run, and writeback from the source workbook.
hl entries --source-localereading an.xlsxtarget column.- Word paragraph extract with context, in-place merge of an existing
.docx, and PowerPoint writeback from the source deck. - Markdown recovery of Intercom links into
HLMDPHtokens. - Flat dotted JSON keys, including a mixed catalog that already nests part of the path.

