TypesXLIFF - TypeScript Library for XLIFF Parsing, Generation and Validation

TypesXLIFF logo

TypesXLIFF is a TypeScript / Node.js library for parsing, generating, and validating XLIFF 2.x files (2.0, 2.1 and 2.2). It includes a fully typed object model and JSON conversion for processing translation and localization data.

The source code is available on GitHub under the Eclipse Public License v1.0. Developers can clone, adapt, and ship the library under the terms of that license, or contact Maxprograms for commercial arrangements.

Quick example

Load an XLIFF file and read the first source segment:

import { XliffParser } from 'typesxliff';

const parser = new XliffParser();
await parser.parseFile("file.xlf");

const doc = parser.getXliffDocument();
const segment = doc?.files[0].units[0].segments[0];

console.log(segment?.source.toString());

Why TypesXLIFF

  • Full XLIFF 2.x object model (not just parsing)
  • Type-safe API for building and modifying documents
  • JSON round-trip for integration with other systems
  • Built on TypesXML (streaming XML parser with validation support)

Features

  • Parse XLIFF files: Load an existing XLIFF 2.x file into a fully typed object model using XliffParser
  • Build programmatically: Construct XliffDocument instances from scratch using the provided model classes
  • Write XLIFF files: Serialize any XliffDocument back to a well-formed XML file using XliffDocument.writeDocument()
  • JSON round-trip: Convert XLIFF ⇄ JSON (lossless) using XliffToJson, and reconstruct it back using JsonToXliff. Built on the round-trip JSON conversion provided by TypesXML
  • Validate: Each model element exposes an isValid() method that checks structural and semantic constraints against the XLIFF 2.x specification

Use Cases

  • Parse XLIFF 2.x files in Node.js or TypeScript
  • Generate XLIFF documents programmatically
  • Convert XLIFF to/from JSON
  • Validate XLIFF structure and content
  • Build localization or translation pipelines

Parsing an existing XLIFF file

import { Catalog } from "typesxml";
import { XliffParser, XliffDocument } from "typesxliff";

const parser = new XliffParser();
// Using a catalog is optional. When provided, the SAX parser can resolve grammar
// schemas and populate default attribute values declared in them.
// A sample catalog covering XLIFF 2.0, 2.1 and 2.2 is included in the catalog/ folder.
parser.setCatalog(new Catalog('/path/to/typesxliff/catalog/catalog.xml'));
parser.parseFile('/path/to/file.xlf');
const doc: XliffDocument | undefined = parser.getXliffDocument();

Building and writing an XLIFF document

import { XliffDocument, XliffFile, XliffUnit, XliffSegment, XliffSource } from "typesxliff";

const doc = new XliffDocument("2.1", "en", "es");

const file = new XliffFile("f1");
const unit = new XliffUnit("u1");
const segment = new XliffSegment("s1");
const source = new XliffSource();
source.addContent("Hello, world!");
segment.setSource(source);
unit.addItem(segment);
file.addEntry(unit);
doc.addFile(file);

doc.writeDocument('/path/to/output.xlf', true);