Docs

Localeizer

Localeizer rewrites text into American, British, Australian or Canadian spelling, from source written in either American or British English. It ships as the @stunt-double/localeizer package. Stunt Double's public sites are written in American English and rewritten in the browser for visitors who read British, Australian or Canadian spelling.

import { localiseSpelling } from "@stunt-double/localeizer";

localiseSpelling("Organize the color of the center.", "british");
// 'Organise the colour of the centre.'

localiseSpelling("Analyse the cancelled catalogue.", "american");
// 'Analyze the canceled catalog.'

localiseSpelling("Organise the colour of the centre.", "canadian");
// 'Organize the colour of the centre.'

Canadian spelling takes "-our", "-re" and the doubled "l" from British, and "-ize", "-yze" and words such as "program" and "check" from American.

Australian English

Australian English spells like British English (colour, organise, centre, travelled), so use the 'british' system. There is no separate 'australian' value.

localiseSpelling("Organize a program to analyze the color of the center.", "british");
// 'Organise a program to analyse the colour of the centre.'

"Program" is left as written: it is correct in both systems, and it is the usual Australian spelling for software too. The same goes for New Zealand, Irish and most other Commonwealth English.

LocaleSystem
en-US'american'
en-GB, en-AU, en-NZ, en-IE'british'
en-CA'canadian'

Install

Add @stunt-double:registry=https://npm.pkg.github.com and a GitHub token with read:packages to your .npmrc.

npm install @stunt-double/localeizer

No dependencies. Runs anywhere JavaScript does: browsers, Node 20 or later and workers.

How it works

Every rewrite is a whole word, looked up exactly in a dictionary generated from stems and the suffixes they take. Nothing is rewritten by pattern alone: "promise", "enterprise" and "otherwise" keep their "-ise" in American English, and "four" and "tour" keep their "-our". A word that isn't in the dictionary stays as written.

  • Both directions. A British word left in American copy still comes out American.
  • Ambiguous words are left alone. Words correct in both systems with different meanings ("practice", "license", "check", "program") are never rewritten towards British.
  • Case is carried. Color becomes Colour and COLOR becomes COLOUR.
  • Identifiers are kept. A word in a domain, path, address or snake_case name (color.com, /center, color_scheme) keeps its spelling.
  • Identity on no change. When nothing matches, the same string is returned, so you can compare by identity to skip a DOM write.

API

  • localiseSpelling(text, system) rewrites text into system ('british' | 'american' | 'canadian').
  • spellingDictionary(system) returns the lowercase word map for a system, useful for style checks and tooling.

Australia, New Zealand, Ireland and most of the Commonwealth use 'british' (see Australian English).

Rewrite a page in the browser

import { localiseSpelling, type SpellingSystem } from "@stunt-double/localeizer";

function localisePage(root: Node, system: SpellingSystem): void {
  const walker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT);
  for (let node = walker.nextNode(); node; node = walker.nextNode()) {
    const text = node.nodeValue ?? "";
    const next = localiseSpelling(text, system);
    if (next !== text) node.nodeValue = next;
  }
}

Skip code, pre and anything else where text isn't prose.

Next steps

On this page