shipglot

XLIFF (.xlf) checker

Drop an .xlf or .xliff file, for example Angular's messages.fr.xlf. The page reads source and target of every unit and reports inline codes (<x/>, <g>, <ph>) that a target dropped, targets longer than maxwidth, units still in a needs-review state, and units with no target at all.

Drop .xlf / .xliff files here, or use Choose files. Your files stay in this browser tab: the page runs the same parser, checks and writer as npx shipglot check, and nothing is sent anywhere.

Source and target languages come from the file (source-language / target-language, or srcLang / trgLang in 2.x).

Paste text instead

Run the same checks on every pull request

The same checks as a GitHub Action, with annotations on the lines that break. The XLIFF 1.2 / 2.x CI guide has a config and workflow for this format.

name: Translations
on: pull_request
jobs:
  shipglot:
    runs-on: ubuntu-latest
    permissions:
      contents: read
    steps:
      - uses: actions/checkout@v5
      - uses: aurelien64/shipglot@v0
        with:
          fail-on: error

Translate

Hosted translation is not open yet. The checks on this page work today with no account: run the open-source gate in your project,

npx shipglot check

or add the GitHub Action from the XLIFF 1.2 / 2.x CI guide to check every pull request.

When hosted translation opens, it will run from your repository, not from this page. With a free Shipglot account, shipglot translate sends only new and changed XLIFF 1.2 / 2.x strings to Shipglot, writes the translations into your files with the same writer this page uses, and updates shipglot.lock. The free plan will cover projects up to 500 source keys, with translation included.

npx shipglot init        # writes shipglot.config.json for your layout
export SHIPGLOT_TOKEN=...  # from your Shipglot account
npx shipglot translate
npx shipglot check

In GitHub Actions, run it as a step and commit the result, or run it locally before you push:

- uses: actions/checkout@v5
- run: npx shipglot translate
  env:
    SHIPGLOT_TOKEN: ${{ secrets.SHIPGLOT_TOKEN }}
- uses: aurelien64/shipglot@v0
  with:
    fail-on: error

Every check has its own page with a failing and a passing example: all checks.