Phonetic English spelling translator. Words are spelled exactly as they sound - no exceptions!
Try it live → · Spelling Guide
Ingglish translates English text into a consistent, phonetic spelling system where each sound has exactly one representation. Using the CMU Pronouncing Dictionary (134,000+ words), it eliminates the irregularities and exceptions that make English spelling notoriously difficult.
- Bidirectional translation - Translate English → Ingglish and back (see limitations for homophones)
- IPA support - Output in International Phonetic Alphabet with proper stress markers
- URL translator - Translate entire web pages with fullscreen viewing
- Word correspondence - Interactive hover to see original/translated word pairs
- Contraction support - Handles "wouldn't", "can't", "you're", etc.
- Case preservation - Maintains capitalization patterns
- DOM translation - Translate web pages in-place with hover tooltips
This is a monorepo containing:
- @ingglish/core - Core text translation library (Node.js & Browser)
- @ingglish/dom - DOM translation utilities (Browser only)
- @ingglish/website - React website for text and URL translation
- @ingglish/extension - Chrome extension for translating any webpage
- @ingglish/cors-proxy - Cloudflare Worker CORS proxy for URL translation
# Core library (text translation)
npm install @ingglish/core
# DOM utilities (browser translation with tooltips)
npm install @ingglish/dom# Clone and install
git clone https://github.com/ptarjan/ingglish.git
cd ingglish
npm install
# Build all packages
npm run buildimport { translate, reverseTranslate } from '@ingglish/core';
// Translate English → Ingglish (async, auto-loads dictionary)
const ingglish = await translate('Hello, world!');
console.log(ingglish); // "Huloh, werld!"
// Translate English → IPA
const ipa = await translate('Hello, world!', 'ipa');
console.log(ipa); // "/həˈloʊ, wɝld!/"
// Translate Ingglish → English (async, loads dictionary + word frequencies)
const english = await reverseTranslate('huloh, werld!');
console.log(english); // "hello, world!"
// Translate IPA → English
const fromIpa = await reverseTranslate('/həˈloʊ, wɝld!/', 'ipa');
console.log(fromIpa); // "hello, world!"import { translateDOM, observeAndTranslate } from '@ingglish/dom';
// Translate DOM elements with tooltips
await translateDOM(document.body, {
showTooltips: true,
chunked: true, // Smooth rendering for large pages
});
// Auto-translate dynamic content (SPAs)
const stop = observeAndTranslate(document.body);
// Later: stop() to disconnect observernpm run dev -w @ingglish/websiteThen open http://localhost:3000
npm run build -w @ingglish/extensionThen load packages/extension/dist as an unpacked extension in Chrome (chrome://extensions > Developer mode > Load unpacked).
Each sound maps to exactly one spelling:
| Sound | Ingglish | Examples |
|---|---|---|
| Long "e" | ee | bee, see |
| Long "i" | ai | my, time |
| Long "o" | oh | go, show |
| Voiced "th" | dh | the, this |
| Unvoiced "th" | th | think, bath |
| Short "u" | u | but, cup |
| "o" sound | o | hot, rock |
| "aw" sound | aw | thought, law |
| "er" sound | er | bird, her |
See docs/phoneme-mapping.md for the complete mapping.
| English | Ingglish | IPA |
|---|---|---|
| hello | huloh | /həˈloʊ/ |
| world | werld | /wɝld/ |
| beautiful | byuutuful | /ˈbjutəfəl/ |
| through | thruu | /θɹu/ |
| though | dhoh | /ðoʊ/ |
| thought | thawt | /θɔt/ |
| the | dhu | /ðə/ |
| English | Ingglish | /ˈɪŋɡlɪʃ/ |
About the name: "Ingglish" is simply how you spell "English" in Ingglish! When speaking, you can distinguish them by stressing the first syllable and pausing briefly between the two g's: ING·glish vs. English.
English has many words that sound identical but are spelled differently (homophones). Since Ingglish is purely phonetic, these words merge into a single spelling:
| English | Ingglish |
|---|---|
| to, too, two | tuu |
| their, there, they're | dhair |
| sea, see | see |
| eye, I | ai |
Forward translation (English → Ingglish) works perfectly - the correct pronunciation is preserved.
Reverse translation (Ingglish → English) uses word frequency to pick the most common word, which may not be what you intended. For example:
kyuureverses to "q" (not "queue" or "cue")ailcould be "aisle", "I'll", or "isle" (ambiguous)
This is an inherent trade-off of phonetic spelling - we gain consistency but lose the ability to distinguish homophones in writing.
Numbers remain as digits (e.g., "123" stays "123"). If you want phonetic numbers, spell them out first: "one hundred twenty three" → "wun hundred twentee three".
npm test # Run all tests
npm run build # Build all packages
npm run dev -w @ingglish/website # Run website dev serverSee Contributing Guide for detailed development workflow, testing guidelines, and code style.
cd packages/core
# Translate text (shows word-by-word breakdown)
npm run translate -- "Hello world"
# Reverse translate
npm run translate -- -r "huloh werld"
# Debug round-trip issues
npm run debug:roundtrip -- "beautiful"See Performance Guide for profiling and benchmarking scripts.
For words not in the CMU dictionary, Ingglish uses a multi-step fallback strategy:
- Custom pronunciations - Known tech terms and brand names (e.g., "GitHub" → "git-hub")
- Initialisms - Spell out as letters (e.g., "URL" → "you-are-ell", "API" → "ay-pee-ai")
- Compound splitting - Split on common boundaries (e.g., "github" → "git" + "hub")
- Stemming - Find known base word + suffix (e.g., "running" → "run" + "ing")
- Neural G2P - Use grapheme-to-phoneme neural network for complex words
- Rule-based G2P - Fall back to letter-to-sound conversion rules
Deploy the website with one click:
See Deployment Guide for detailed instructions on deploying the website, Chrome extension, and CORS proxy.
- Design Decisions - Why Ingglish works the way it does
- Spelling Reform Comparison - How Ingglish avoids the mistakes of 250 years of failed reforms
- Orthography Comparison - How every spelling compares to other languages
- Phoneme Mapping - ARPAbet to Ingglish/IPA tables
- Architecture - System design, data flow, module structure
- Contributing - Development setup and workflow
- Deployment - Deploy website, extension, CORS proxy
- Performance - Profiling and optimization
- Troubleshooting - Common issues and fixes
MIT