RTGS scheme (Royal Thai General System)¶
The rtgs scheme implements the 2002 revision of the Royal Thai General System of Transcription — the official romanization of the Royal Institute of Thailand. It is the system used on Thai road signs, government publications, transliterated place names, and most official English-language contexts.
RTGS is deliberately simple: plain ASCII Latin letters, no diacritics, no tone marks, and vowel length collapsed to a single spelling per vowel quality. It is designed as a reading aid for unfamiliar audiences rather than a reversible phonological notation.
from thaiphon import transcribe
transcribe("น้ำ", scheme="rtgs")
# 'nam'
transcribe("สวัสดี", scheme="rtgs")
# 'sawatdi'
transcribe("กรุงเทพ", scheme="rtgs")
# 'krungthep'
Format conventions¶
| Convention | Detail |
|---|---|
| Character set | plain ASCII Latin — no diacritics, no IPA-extension letters |
| Tone | not marked |
| Vowel length | not marked — short and long map to the same spelling |
| Syllable separator | none — syllables concatenate directly inside a word |
| Glottal stop | not written — vowel-initial syllables start straight with the vowel letter |
| No slashes | no /…/ wrapping |
Because syllables concatenate without a separator, multi-syllable words become continuous strings: กรุงเทพ → krungthep, สวัสดี → sawatdi. Spaces between words are supplied at the sentence layer via transcribe_sentence.
from thaiphon import transcribe_sentence
transcribe_sentence("กรุงเทพ มหานคร", scheme="rtgs")
# 'krungthep mahanakhon'
Onset map (IPA → RTGS)¶
Aspirated stops are written with digraphs; the aspiration contrast for /tɕ/ vs /tɕʰ/ is neutralised — both render as ch.
| IPA onset | RTGS | Note |
|---|---|---|
k |
k |
unaspirated velar stop |
kʰ |
kh |
aspirated |
tɕ |
ch |
unaspirated palatal affricate |
tɕʰ |
ch |
aspirated palatal affricate — same digraph |
d |
d |
|
t |
t |
|
tʰ |
th |
aspirated |
b |
b |
|
p |
p |
|
pʰ |
ph |
aspirated |
f |
f |
|
s |
s |
|
h |
h |
|
ʔ |
(none) | glottal stop is never written |
m |
m |
|
n |
n |
|
ŋ |
ng |
digraph |
j |
y |
|
r |
r |
|
l |
l |
|
w |
w |
Aspiration neutralisation for /tɕ/ and /tɕʰ/: Unlike rtl, paiboon, and the Cyrillic schemes, RTGS does not distinguish the unaspirated and aspirated palatal affricates on the surface. จ and ช both render as ch.
transcribe("จาน", scheme="rtgs") # 'chan' — unaspirated /tɕ/
transcribe("ชา", scheme="rtgs") # 'cha' — aspirated /tɕʰ/
Vowel map (IPA → RTGS)¶
Vowel length is not encoded. Short and long forms of each quality map to the same spelling. The close back unrounded /ɯ/ is written ue; the mid-central /ɤ/ is written oe. The open-mid back /ɔ/ and mid-back /o/ both surface as o — RTGS neutralises this contrast.
| IPA quality | RTGS | Note |
|---|---|---|
| /a/ | a |
short and long identical |
| /i/ | i |
|
| /u/ | u |
|
| /e/ | e |
|
| /ɛ/ | ae |
digraph |
| /o/ | o |
|
| /ɔ/ | o |
merges with /o/ — no surface distinction |
| /ɯ/ | ue |
digraph |
| /ɤ/ | oe |
digraph |
| /iə/ centring diphthong | ia |
|
| /ɯə/ centring diphthong | uea |
trigraph |
| /uə/ centring diphthong | ua |
Long /iː/ before a /w/ coda is written as the diphthong ia, so เขียว (green) renders as khiao rather than khio. This matches how the pattern เ-ียว is conventionally handled in RTGS output.
transcribe("เขียว", scheme="rtgs") # 'khiao'
transcribe("เสือ", scheme="rtgs") # 'suea'
transcribe("ภาษา", scheme="rtgs") # 'phasa'
Coda map (IPA → RTGS)¶
Codas follow the standard six-way place-of-articulation merge. Foreign-origin coda phonemes that Thai phonotactics does not natively support collapse unconditionally to the nearest native segment. RTGS has no exception for modern loanwords, regardless of the active reading profile. Callers that want preserved foreign /f/ in output should use rtl, paiboon, or paiboon_plus.
| IPA coda | RTGS | Note |
|---|---|---|
m |
m |
|
n |
n |
|
ŋ |
ng |
|
p̚ |
p |
|
t̚ |
t |
|
k̚ |
k |
|
w (offglide) |
o |
|
j (offglide) |
i |
ไทย → thai |
f (loanword) |
p |
always collapses |
s (loanword) |
t |
always collapses |
l (loanword) |
n |
always collapses |
transcribe("ไทย", scheme="rtgs") # 'thai' — /j/ offglide → i
transcribe("ข้าว", scheme="rtgs") # 'khao' — /w/ offglide → o
transcribe("ลิฟต์", scheme="rtgs") # 'lip' — /f/ collapses to p
Profile-insensitivity: Unlike the learner schemes, RTGS never preserves a foreign coda surface form. Passing profile="everyday" or profile="careful_educated" has no effect on coda output — the collapse is part of the RTGS specification, not a stylistic choice.
transcribe("ลิฟต์", scheme="rtgs", profile="everyday") # 'lip'
transcribe("ลิฟต์", scheme="rtgs", profile="careful_educated") # 'lip'
transcribe("ลิฟต์", scheme="rtgs", profile="etalon_compat") # 'lip'
RTGS vs other schemes¶
| RTGS | RTL | Paiboon | |
|---|---|---|---|
| Tone marks | none | combining diacritic on first vowel | combining diacritic on first vowel |
| Vowel length | collapsed | doubled vowel letter | doubled vowel letter |
| /tɕ/ vs /tɕʰ/ | both ch |
c vs ch |
j vs ch |
| Foreign coda /f/ | always p |
preserved for lexicon entries | preserved for lexicon entries |
| Syllable separator | (none) | space | hyphen |
Use rtgs when you need the official form — for place names, government documents, geographic references, or whenever the intended reader is expecting Thai romanization in its standard published form. Use rtl or paiboon when tone information or vowel length matters to your reader.
Examples¶
All outputs are verified against the engine.
| Thai | Gloss | RTGS |
|---|---|---|
| กา | crow | ka |
| ขา | leg | kha |
| ตา | eye / grandfather | ta |
| ทา | to apply | tha |
| ปา | to throw | pa |
| พา | to bring | pha |
| จาน | plate | chan |
| ชา | tea | cha |
| น้ำ | water | nam |
| ข้าว | rice | khao |
| รัก | love | rak |
| ปลา | fish | pla |
| สวัสดี | hello | sawatdi |
| ภาษาไทย | Thai language | phasathai |
| กรุงเทพ | Bangkok | krungthep |
| เขียว | green | khiao |
| เสือ | tiger | suea |
| เรือ | boat | ruea |
| ถุง | bag | thung |
| เด็ก | child | dek |