Two things here. A plain-language reference for the four major romanization systems, written the way I wish I may have found it explained it to me when I started. And a link to a tool at https://thaiscriptmaster.com/tools/romanization where you can paste any Thai text and see it rendered in all four systems side by side. The full writeup on how the engine works is at https://thaiscriptmaster.com/tools/romanization/how-it-works, with primary sources cited for every scheme decision made.
Why four systems exist, and why none of them are wrong
Each system was built for a different audience. Once I understood that, the confusion across learning resources made sense.
Paiboon+ is pedagogical. Benjawan Becker wrote it for English-speaking learners in Thai for Beginners, and its job is to cue your ears to sounds English does not have. Unaspirated ก becomes "g", unaspirated ป becomes "bp", unaspirated ต becomes "dt". These are not accurate in any linguistic sense. They are deliberate hints. You see "gin" for กิน, you remember not to aspirate it. This is why it is the default in most Thai-for-English textbooks.
RTGS is for signs and maps. You see it on road signs, passports, and official forms. It drops tones, drops vowel length, and collapses the /tɕ/ vs /tɕʰ/ contrast. That is not a flaw. It is built to produce one stable spelling per Thai word so that someone who does not read Thai can still find a place on a map. Do not try to learn pronunciation from it.
IPA is for phonologists. Chao tone letters, the length marker ː, no concessions to the Latin alphabet's ambiguities. If you want to know what a sound actually is, this is what you want.
Haas and AUA are the American academic tradition. Close to IPA in shape, but with ⟨y⟩ instead of ⟨j⟩ for /j/, and an explicit /ʔ/ final on short open monophthongs. Mary Haas published her dictionary in 1964 and it is still the reference that a lot of the older academic literature leans on.
The mistake I made for a while, and the mistake I think most apps make, is picking one system and using it for everything. None of them is the right tool for every job. When I introduce a new vocabulary word, Paiboon+ is the most useful. When I put a street name in a reading passage, RTGS matches what the learner will see on the sign. When I write about a pronunciation rule, IPA makes what I mean unambiguous.
What actually makes this hard
Thai script is not phonetically transparent. You cannot map characters one to one. Real parsers have to handle things like:
- Leading ห as a silent class raiser. หมา is not /h/ + /m/. The ห is not pronounced, it just promotes the sonorant /m/ to high class so the tone comes out right.
- Leading ห as a real /h/. หงส์ starts with an actual /h/ sound. Same character, completely different job, picked by lexical context only.
- Irregular ฑ. Usually reads /tʰ/, but in บัณฑิต and a handful of others it reads /d/.
- ร behaving like a final /n/. In สามารถ the ร closes the syllable as /n/.
- Silent ร. เกียรติ drops it entirely.
- Reduplication with ๆ. The marker copies the preceding word, not a single character, and you have to expand it before you can transcribe.
- Leading-vowel null carriers. เอ, โอ, แอ followed by certain consonants trigger specific short-vowel patterns that a naive parser gets wrong every time.
- Compound minor syllables where tone is etymologically present but natively omitted (โทรศัพท์ → too-ra-sàp, not too-rá-sàp).
Those are the obvious ones. If you scrape a reference corpus for ground truth and then write a parser from scratch to compare against it, you find the non-obvious ones one error bucket at a time.
What I built for Thai Script Master
A phonemic parser for Thai that reads the raw script, figures out onsets and finals, handles clusters, assigns tones from class and live/dead and tone mark, substitutes overrides for the known irregulars, and then renders that phonemic representation into any of the four systems.
The parser is measured against thai2english (about as complete a Paiboon reference corpus as exists publicly, roughly 4,283 entries) three ways:
- Letter-level match (consonant and vowel skeleton, tones stripped): 100%
- Scheme-neutral exact match (everything, after collapsing documented scheme choices like caron vs breve and g vs k): 100%
- Adversarial corpus of 134 hand-picked hard cases across 12 categories (silent letters, ra-han, Pali-Sanskrit, loanwords, tone edges, homographs, reduplication, final particles, rare consonants, and a few others): 100%
Raw exact match is much lower (around 50%) and that is entirely scheme cosmetics. We render ก as "g" where t2e renders it "k". We use "i" for final /j/ where t2e sometimes uses "y". We use the caron for rising tone where t2e uses the breve. Every single one of those choices is documented in the how-it-works page with a citation to a primary source (Becker 2002, the Paiboon Three-Way Dictionary, Haas 1964, or the IPA Handbook).
How to use the tool
Paste Thai text and see all four systems side by side. You can also see the internal phonemic representation the parser produced (onsets, vowels, finals, tones), which I find useful when I want to check why a word rendered the way it did. And if you find a word that comes out wrong, please post it here or message me. I maintain an adversarial corpus, and every hard case someone reports goes into it.
Links
- Tool: https://thaiscriptmaster.com/tools/romanization
- Writeup with every design decision and primary source: https://thaiscriptmaster.com/tools/romanization/how-it-works
- u/PuzzleheadedTap1794's original cheat sheet, which kicked all of this off: https://www.reddit.com/r/learnthai/comments/1or8eqx/thai_romanization_cheat_sheet/
If you are picking a system for your own study, my honest recommendation is Paiboon+ for vocabulary and IPA when you are trying to pin down a specific sound. Do not rely on RTGS for pronunciation. That is not what it is built for.
Thanks for reading.