Russian Pronunciation and IPA Transcription Guide
← Back to Russian transcription ↑ All Languages
Table of Contents
- Getting Started
- Quick Reference (Glossary)
- How to Read IPA Symbols
- Russian Pronunciation Guide
- Stress and Vowel Reduction (Akanye & Ikanye)
- Stress Marks, Monosyllables and ё
- Hard and Soft Consonants (Palatalization)
- The Soft Sign ь and Hard Sign ъ
- Hushing Consonants: ж ш ц ч щ
- Iotated Vowels: е ё ю я and /j/
- Final Devoicing
- Voicing Assimilation
- Dropped Consonants in Clusters
- щ, сч, зч, жч
- Affricates and Assimilated Stops (тс, дз, тш, -ться)
- Doubled Consonants (Gemination)
- Spelling Exceptions: -ого, что, мягк-
- Prepositions, Particles and Hyphens
- Final -е and -я
- Fronting of а and у Between Soft Consonants
- Hard л (Dark L)
- Punctuation and Special Input
- Orthography to IPA Mapping
- Using the Tool: Practical Notes
- For Developers
- Related Pronunciation Guides
About This Tool
This Russian transcription app uses the Wiktionary Russian Pronunciation Module (ru-pron, the
version maintained by Benwing2, with its helpers ru-translit and ru-common) to
generate phonetic transcriptions for Russian text. IPA (International Phonetic Alphabet) is a standardized
system for transcribing speech sounds using symbols based on the Latin alphabet. This tool converts Russian
orthography (spelling) into IPA, helping learners, linguists, and developers understand pronunciation.
Russian spelling does not show stress, and stress decides how most vowels sound. The module therefore needs to know which vowel is stressed before it can transcribe a word. The app obtains the stress in two ways:
- Lexicon first. A lexicon built from Wiktionary data dumps (about 500,000 entries) stores the position of the stressed vowel of each word form. If your word is found, the stress-marked form (for example вода́) is passed to the module. Homographs with different stress (for example за́мок / замо́к) are stored as several comma-separated forms, and each one is transcribed.
- Fallback for unknown words. If the word is not in the lexicon, the app transcribes it once for every possible stress position (one acute accent on each vowel in turn) and joins the results, for example /a/,/b/,/c/. Click the word to cycle through the candidates. A word with zero or one vowel is transcribed directly, because its stress is not in doubt.
You can also force the stress yourself by typing a combining acute accent (U+0301) after a vowel, and the letter ё is always treated as stressed when no other stress mark is present (see Stress Marks, Monosyllables and ё). Note, however, the known bug that a word which already carries an accent mark currently also receives a second, automatic stress in the fallback path.
About the examples on this page. Every IPA string below was produced by running the real engine, not written by hand. Unless a table says otherwise, the examples show the rule-based path, fed with stress-marked words (го́род), which is exactly what the browser produces for words found in the lexicon. For those words the browser picks the correct stress automatically; the lexicon itself is not available in the offline tool used to generate these examples.
Dialects & Limitations
- Supported: One style, Default: standard Russian (Moscow-based literary pronunciation), with vowel reduction (akanye / ikanye), palatalization and assimilation as described by the module.
- Not supported: Regional or dialectal pronunciation (for example non-reducing okanye speech). Colloquial fast-speech reductions are not modeled either.
- Edge cases: The module works from spelling only. Loanwords whose е is pronounced [ɛ] after a hard consonant (кафе́, отель), initialisms (США), a few words with irregular -чн- or -вств- clusters, and proper names may need a respelling (see Common Issues & Limitations).
- Technical limit: The app handler transcribes one word at a time. Digits are dropped,
and some module options (part of speech, gemination,
zhpal) are not exposed by the app.
Phonemic vs Phonetic
- Phonetic (the only form offered for Russian): A detailed, narrow transcription that shows subtle, non-distinctive variations in pronunciation (allophones): reduced vowels [ɐ ə ɪ ʊ], fronted vowels [æ ʉ] next to soft consonants, palatalization [ʲ], dark [ɫ], and optional segments in parentheses. It aims to represent how a word is actually said.
- Phonemic (not offered): The Wiktionary module produces only phonetic output for Russian, so the app has no separate phonemic form.
Quick Reference (Glossary)
- Allophone
- A variant pronunciation of a phoneme that doesn't change meaning, such as the reduced vowels [ɐ], [ə], [ɪ] that stand in for unstressed /a/, /o/, /e/ and /i/.
- Akanye
- The reduction of unstressed а and о: to ɐ immediately before the stress and to ə elsewhere, e.g. молоко́ /məɫɐˈko/.
- Ikanye
- The reduction of unstressed е, и, я to ɪ, e.g. де́ти /ˈdʲetʲɪ/.
- Pretonic
- The syllable directly before the stressed syllable. In the module it is the only unstressed position where а/о reduce to [ɐ] rather than [ə].
- Tertiary Stress
- An internal state in which a vowel is treated as stressed for reduction purposes but gets no stress mark in the output, for example in monosyllables: дом /dom/.
- Secondary Stress
- A weaker stress marked ˌ, entered with a grave accent (U+0300), e.g. воѐнно-морско́й /vɐˌjenːə mɐrˈskoj/.
- Hard Consonant
- A consonant with no palatal articulation (твёрдый), e.g. the n in кон /kon/.
- Soft (Palatalized) Consonant
- A consonant pronounced with the middle of the tongue raised toward the hard palate, marked ʲ, e.g. конь /konʲ/.
- Iotated Vowel
- The letters е, ё, ю, я, which stand for /j/ + vowel at the start of a word and after another vowel or a sign, but only soften the preceding consonant after a consonant: я́ма /ˈjamə/ vs. мя́со /ˈmʲasə/.
- Soft Sign (ь) / Hard Sign (ъ)
- Letters that have no sound of their own: ь softens the preceding consonant, ъ keeps it hard and separates it from an iotated vowel.
- Hushing Consonants
- The sounds spelled ж, ш (always hard) and ч, щ (always soft), plus ц (hard except before я, ю, ё, ь; an affricate).
- Retroflex (ʂ, ʐ)
- The symbols the module uses for hard ш ʂ and hard ж ʐ.
- Alveolo-palatal (ɕ, ʑ, t͡ɕ)
- The soft hushing sounds: щ is the long ɕː, ч is the affricate t͡ɕ.
- Affricate
- A complex consonant beginning as a stop and releasing as a fricative, written with a tie bar: t͡s (ц), t͡ɕ (ч), d͡ʐ (дж).
- Final Devoicing
- Voiced obstruents become voiceless at the end of a word: хлеб /xlʲep/, год /ɡot/.
- Voicing Assimilation
- An obstruent takes over the voicing of the following obstruent: во́дка /ˈvotkə/ (д → [t]), сбор /zbor/ (с → [z]).
- Gemination
- A long (doubled) consonant, marked ː, e.g. ва́нна /ˈvanːə/. In most positions the module removes orthographic doubling, e.g. кла́сс /ˈkɫas/.
- Clitic / Liaison Tie
- The tie ‿ joins an unstressed preposition or particle to the next or previous word as one phonetic word: под сто́лом /pɐt͡s‿ˈstoɫəm/.
- Foot Boundary
- The symbol |, which the module inserts for a comma or dash: /ˈdomə | ɐ‿nʲɪ‿f‿ˈʂkolʲe/.
- Optional Segment
- A segment in parentheses can be pronounced or omitted: (j) in ябло́ко /(j)ɪˈbɫokə/, (ː) in два́дцать /ˈdvat͡s(ː)ɨtʲ/, and ⁽ʲ⁾ (optional palatalization) in вперёд /f⁽ʲ⁾pʲɪˈrʲɵt/.
- Fronting
- The shift of /a/ to æ and of /u/ to ʉ between soft consonants: пять /pʲætʲ/, лю́ди /ˈlʲʉdʲɪ/.
- Retraction
- The shift of /e/ to ɛ and of /i/ to ɨ after the always-hard ж, ш, ц: цена́ /t͡sɨˈna/, ши́на /ˈʂɨnə/.
- Schwa
- The neutral vowel ə, found in most unstressed а/о syllables not directly before the stress.
- Lexicon (V4)
- The compressed word list used by the app. Instead of storing IPA, the V4 format stores the stressed-vowel position of each word form, and the module generates the IPA from it.
- Homograph
- Words spelled alike but stressed differently, e.g. за́мок (castle) and замо́к (lock). Each form is transcribed separately and the results can be cycled by clicking.
- Hiatus
- Two adjacent vowels in different syllables; in the module two adjacent reduced vowels merge to ɐ‿ɐ, e.g. по абази́ну /pɐ‿ɐbɐˈzʲinʊ/.
- NFD
- Unicode Normalization Form Decomposed: accents are split off as combining characters (the module reads the stress as U+0301 after the vowel).
How to Read IPA Symbols
This table helps you understand the IPA symbols used in Russian transcriptions. For each symbol, we provide approximate English equivalents where possible. The app shows the transcription between slashes.
Vowel Symbols
| IPA | Example | English Approximation | Notes |
|---|---|---|---|
| /a/ | ма́ма /ˈmamə/ | "father" (shorter) | Stressed а, or stressed я after a soft consonant when no soft consonant follows |
| /ɐ/ | вода́ /vɐˈda/ | "cup" (UK) | Unstressed а/о in the syllable directly before the stress, and word-initial unstressed а/о |
| /ə/ | молоко́ /məɫɐˈko/ | "about" | Unstressed а/о elsewhere; also word-final -я |
| /e/ | ле́то /ˈlʲetə/ | "say" (without glide) | Stressed е after a soft consonant (or after /j/ at a word start) |
| /ɛ/ | э́то /ˈɛtə/, же́ны /ˈʐɛnɨ/ | "bed" | Stressed э; also stressed е after the always-hard ж, ш, ц |
| /i/ | и́ли /ˈilʲɪ/ | "see" (without glide) | Stressed и (soft consonant before it) |
| /ɪ/ | де́ти /ˈdʲetʲɪ/ | "sit" | Unstressed е, и, я (ikanye) |
| /o/ | до́ма /ˈdomə/ | "more" (without glide) | Stressed о |
| /ɵ/ | тётя /ˈtʲɵtʲə/ | "bird" with rounded lips | Stressed ё (also in ьо), a rounded central vowel |
| /u/ | ру́чка /ˈrut͡ɕkə/ | "food" (without glide) | Stressed у, ю |
| /ʊ/ | пучо́к /pʊˈt͡ɕɵk/ | "put" | Unstressed у, ю |
| /ɨ/ | ры́ба /ˈrɨbə/ | No English equivalent | ы; also и after ж, ш, ц. Say "i" with the tongue pulled back |
| /æ/ | пять /pʲætʲ/ | "cat" | Fronted /a/ between soft consonants |
| /ʉ/ | лю́ди /ˈlʲʉdʲɪ/ | No English equivalent | Fronted /u/ between soft consonants, a rounded close central vowel |
Consonant Symbols
Russian has hard/soft pairs for most consonants. The soft member is written with the superscript ʲ (see Hard and Soft Consonants). Symbols that are the same as in English (p, b, t, d, k, f, m, n, s, z) are listed in the Mapping tables below.
| IPA | Example | English Approximation | Notes |
|---|---|---|---|
| /ɡ/ | кни́га /ˈknʲiɡə/ | "go" | The tool prints the single-story IPA g (U+0261) |
| /x/ | хорошо́ /xərɐˈʂo/ | Scottish "loch" | х; also the result of г before к/ч in мягк-, лёгк-, легч- |
| /ʂ/ | ши́на /ˈʂɨnə/ | "shoe" (tongue curled back) | Always hard ш |
| /ʐ/ | жена́ /ʐɨˈna/ | "measure" (tongue curled back) | Always hard ж |
| /t͡s/ | пти́ца /ˈptʲit͡sə/ | "cats" | ц, and assimilated тс/дз |
| /t͡ɕ/ | ту́ча /ˈtut͡ɕə/ | "cheese" (soft) | ч, always soft |
| /ɕː/ | щёки /ˈɕːɵkʲɪ/ | Long "sh" (soft) | щ, always soft and long; also сч, зч, жч |
| /ʑː/ | дро́жжи /ˈdroʐːɨ/, /ˈdroʑːɪ/ | Long soft "zh" | The second variant for зж/жж |
| /d͡ʐ/ | дже́м /ˈd͡ʐʐɛm/ | "judge" (tongue curled back) | дж |
| /d͡ʑ/ | до́чь бы /ˈdod͡ʑ‿bɨ/ | Soft "judge" | ч voiced before a voiced obstruent |
| /d͡z/ | от зо́лота /ɐd͡z‿ˈzoɫətə/ | "adze" | дз/тз at a word boundary (rare) |
| /j/ | я́ма /ˈjamə/ | "yes" | й; the glide in iotated vowels |
| /ɫ/ | лук /ɫuk/ | "full" (dark L) | Hard л |
| /lʲ/ | люк /lʲuk/ | "million" (light L) | Soft л |
| /r/ | ры́ба /ˈrɨbə/ | Spanish "pero" | Alveolar trill or tap; soft [rʲ] before soft vowels |
Diacritical Marks
| Symbol | Name | Meaning | Example |
|---|---|---|---|
| ˈ | Primary stress | Main emphasis in word, written before the stressed syllable | кни́га /ˈknʲiɡə/ |
| ˌ | Secondary stress | Weaker emphasis (typed as a grave accent) | воѐнно-морско́й /vɐˌjenːə mɐrˈskoj/ |
| ʲ | Palatalization | Consonant is soft | конь /konʲ/ |
| ⁽ʲ⁾ | Optional palatalization | Either soft or hard is acceptable | вперёд /f⁽ʲ⁾pʲɪˈrʲɵt/ |
| ː | Length mark | Consonant is long (geminate) | ва́нна /ˈvanːə/ |
| (ː) | Optional length | Long or short is acceptable | два́дцать /ˈdvat͡s(ː)ɨtʲ/ |
| (j) | Optional glide | The /j/ may or may not be heard | ябло́ко /(j)ɪˈbɫokə/ |
| ‿ | Linking tie | Words pronounced as one unit (clitic + host); module with phrases only, not shown by the app | под сто́лом /pɐt͡s‿ˈstoɫəm/ |
| | | Foot boundary | Pause (from a comma or dash); module with phrases only, not shown by the app | /ˈdomə | ɐ‿nʲɪ‿f‿ˈʂkolʲe/ |
| ͡ | Tie bar | Affricate (single unit) | /t͡s/ in цена́ /t͡sɨˈna/ |
Interactive Features
- Click words to cycle variants: Words not found in the lexicon show one candidate for every possible stress position. Click any transcribed word to cycle through the alternatives.
- Audio playback: Click the speaker icon next to any word or line to hear text-to-speech pronunciation (requires browser TTS support).
- Export results: Use PDF or CSV buttons to save transcriptions in your preferred format.
- Force the stress: Type a combining acute accent (U+0301) after the vowel you want stressed. Typing ё already implies the stress.
Multiple Pronunciation Variants
For Russian, a word can have several candidate transcriptions for different reasons:
- Homographs with different stress: Lexicon entries such as за́мок / замо́к contain several stressed forms; each is transcribed and shown as a separate variant.
- One variant per stress position: For words missing from the lexicon the app generates a transcription per vowel, for example /ˈmuɕːɪnə/,/mʊˈɕːinə/,/mʊɕːɪˈna/. Only one of them is usually correct.
- Module-internal alternatives: In a few clusters the module itself returns two pronunciations: the non-palatal and palatal variants of зж/жж (дрожжи́ /drɐˈʐːɨ/, /drɐˈʑːi/), or soft and hard realizations of a vowel before an optionally soft consonant (ля́мпя /ˈlʲampʲə/, /ˈlʲæmʲpʲə/).
- Lexicon vs. generated: Dictionary lookup and rule-based generation can differ only in the choice of stress; the sound rules are the same.
When multiple variants exist, click the word to cycle through them. The currently selected variant will be used for PDF/CSV export.
Russian Pronunciation Guide
This guide explains the pronunciation rules that the Wiktionary module actually implements. Russian spelling is only partly phonetic: vowels change with stress, consonants soften before certain vowels, and neighboring consonants influence each other's voicing and softness. The sections below follow the processing order of the module wherever possible; the Implementation Details section lists the exact stages.
Note: the app splits the input at spaces and transcribes each word on its own, and it strips punctuation. The liaison tie ‿, the foot boundary | and all cross-word effects below therefore show the capability of the module (which accepts whole phrases) and will not appear in the app's output.
Stress and Vowel Reduction (Akanye & Ikanye)
The module's allophones table gives each vowel three values: the stressed value,
the value in the pretonic syllable (immediately before a primary or secondary stress), and the
value elsewhere (all other unstressed syllables). The pretonic slot is only used before a
real stress mark (acute or grave), not before a tertiary stress.
| Letter | Stressed | Pretonic | Elsewhere | Examples |
|---|---|---|---|---|
| а | a | ɐ | ə | трава́ /trɐˈva/, голова́ /ɡəɫɐˈva/, ма́ма /ˈmamə/ |
| о | o | ɐ | ə | молоко́ /məɫɐˈko/, борода́ /bərɐˈda/, го́род /ˈɡorət/ |
| е | e | ɪ | ɪ | дети́ /dʲɪˈtʲi/, де́ти /ˈdʲetʲɪ/, челове́к /t͡ɕɪɫɐˈvʲek/ |
| и | i | ɪ | ɪ | ви́дел /ˈvʲidʲɪɫ/, лицо́ /lʲɪˈt͡so/ |
| я | a (æ between soft consonants) | ɪ | ɪ | мя́со /ˈmʲasə/, язы́к /(j)ɪˈzɨk/ |
| ё | ɵ (o after ж, ш) | ɪ | ɪ | тётя /ˈtʲɵtʲə/, жёлтый /ˈʐoɫtɨj/ |
| у | u | ʊ | ʊ | ту́ча /ˈtut͡ɕə/, пучо́к /pʊˈt͡ɕɵk/ |
| ю | u (ʉ between soft consonants) | ʊ | ʊ | лю́ди /ˈlʲʉdʲɪ/, пя́тью /ˈpʲætʲjʊ/ |
| ы | ɨ | ɨ | ɨ | ры́ба /ˈrɨbə/, часы́ /t͡ɕɪˈsɨ/ |
| э | ɛ | ɨ | ɨ | э́то /ˈɛtə/, рэкети́р /rɨkʲɪˈtʲir/ |
Word-Initial Unstressed а and о
An unstressed а or о at the very beginning of a word is always ɐ, even when it is not in the pretonic syllable: океа́н /ɐkʲɪˈan/, авто́бус /ɐfˈtobʊs/.
Unstressed э
A word-initial unstressed э, and an unstressed э directly after a vowel, are rewritten as и before the vowel table is applied: эта́ж /ɪˈtaʂ/, аэропо́рт /ɐɪrɐˈport/. After a consonant it is reduced to ɨ (рэкети́р /rɨkʲɪˈtʲir/). Word-final unstressed -э is kept unreduced.
Adjacent Reduced Vowels
When a schwa is followed by another [ɐ] or [ə] (also across a joined word boundary), both become ɐ: по абази́ну /pɐ‿ɐbɐˈzʲinʊ/.
Optional [j] Before ɪ
A /j/ before an unstressed ɪ is optional when it stands at the start of a word or after a vowel: ябло́ко /(j)ɪˈbɫokə/, по-мо́ему /pɐ‿ˈmo(j)ɪmʊ/, ещё /(j)ɪˈɕːɵ/.
Stress Marks, Monosyllables and ё
- Acute accent (U+0301): primary stress, shown as ˈ before the stressed syllable: кни́га /ˈknʲiɡə/.
- Grave accent (U+0300): secondary stress, shown as ˌ: воѐнно-морско́й /vɐˌjenːə mɐrˈskoj/.
- Circumflex (U+0302): "tertiary" stress. The vowel is treated as stressed for the purposes of reduction, but no stress mark is printed. The module adds it by itself to single-syllable words (see below).
- Dot above (U+0307) and dot below (U+0323): the dot above prevents the module from adding any stress; the dot below on я or а asks for the semi-reduced value [ɐ]/[ə] instead of [ɪ].
In the app only combining marks survive input cleaning; the ASCII shorthands `,
@ and ^ that the module accepts on Wiktionary are removed before the text reaches it.
Monosyllables
A word with a single vowel that carries no accent, is not an unstressed particle or preposition, and is not a prefix or suffix, receives tertiary stress: its vowel is not reduced but no mark is shown: дом /dom/, ель /jelʲ/, сын /sɨn/. If such a word stands next to an unstressed preposition or particle, it receives a real primary stress instead: на дом /nɐ‿ˈdom/.
ё
The letter ё is always a stressed vowel. If a word contains no explicit primary stress and has more than one vowel, the module adds an acute accent to its last ё: самолёт /səmɐˈlʲɵt/. A monosyllabic word with ё gets no printed mark: лёд /lʲɵt/, всё /fsʲɵ/. If the user marks another vowel as stressed, the ё loses its stress, which is why the fallback variants of ё-words can look odd (see Common Issues).
Hard and Soft Consonants (Palatalization)
Most Russian consonants come in hard and soft pairs. Softness is marked by ʲ. The
module softens a consonant when it is followed by е, и, ё, ю, я or the soft sign ь, as
implemented by the substitution of ʲ after any of
m n p b t d k g f v s z x ɣ r l that is followed by a front or iotated vowel or by ь.
| Hard | Soft |
|---|---|
| кон /kon/ | конь /konʲ/ |
| брат /brat/ | брать /bratʲ/ |
| мат /mat/ | мать /matʲ/ |
| лук /ɫuk/ | люк /lʲuk/ |
| у́гол /ˈuɡəɫ/ | у́голь /ˈuɡəlʲ/ |
Always Hard and Always Soft
- Always hard: ж, ш, even before и, е, ю, я (see Hushing Consonants), and ц, which is softened only before я, ю, ё and ь: Цю́рих /ˈt͡sʲʉrʲɪx/.
- Always soft: ч, щ and й (the module adds ʲ to them internally and removes it again, so you never see it): чай /t͡ɕæj/, щёки /ˈɕːɵkʲɪ/.
Assimilative Softening in Clusters
A consonant also softens when a soft consonant follows it. The module has three groups of rules:
- Always: н before т, д (ба́нтик /ˈbanʲtʲɪk/), before ч, щ (кончи́ть /kɐnʲˈt͡ɕitʲ/); х before к (мя́гкий /ˈmʲæxʲkʲɪj/); the pairs т/д before н and с/з before т/д when no р or л precedes (пя́тница /ˈpʲætʲnʲɪt͡sə/, жи́знь /ˈʐɨzʲnʲ/, сте́на /ˈsʲtʲenə/, здесь /zʲdʲesʲ/, сде́лать /ˈzʲdʲeɫətʲ/).
- Optionally (shown as ⁽ʲ⁾): сл, зл (бессмы́сленно /bʲɪsːˈmɨs⁽ʲ⁾lʲɪn(ː)ə/, безразли́чно /bʲɪzrɐz⁽ʲ⁾ˈlʲit͡ɕnə/), нс, нз, мп, мб, мф, фм; вп, вб at the start of a word (вперёд /f⁽ʲ⁾pʲɪˈrʲɵt/); labials before /j/ (семья́ /sʲɪˈm⁽ʲ⁾ja/); final -лся (учи́лся /ʊˈt͡ɕiɫs⁽ʲ⁾ə/); labial + ь before ст- (ста́вьте /ˈstaf⁽ʲ⁾tʲe/).
- Never: in most other clusters a hard consonant stays hard before a soft one, e.g. the t in тря́пка /ˈtrʲapkə/.
The Soft Sign ь and Hard Sign ъ
- ь softens the preceding consonant and has no sound itself: соль /solʲ/, тетра́дь /tʲɪˈtratʲ/. Before и it adds a /j/ (семьи́ /sʲɪˈm⁽ʲ⁾ji/), and ьо is read like ьё: Асунсьо́н /ɐsʊn⁽ʲ⁾ˈsʲjɵn/.
- ъ keeps the preceding consonant hard and makes the following iotated vowel keep its /j/: объе́ктом /ɐbˈjektəm/, подъе́зд /pɐdˈjest/. A hard sign before a non-iotated vowel (rare) is turned into a glottal stop ʔ. A word-final ъ in pre-reform spelling is ignored: хлѣ́бъ /ˈxlʲep/.
Hushing Consonants: ж ш ц ч щ
Retraction After ж, ш, ц
These consonants are always hard, so a following и is pronounced ɨ and a
following е is pronounced ɛ, regardless of spelling (module table
retracting): жи́знь /ˈʐɨzʲnʲ/, ши́на /ˈʂɨnə/, цирк /t͡sɨrk/, цена́ /t͡sɨˈna/, же́ны /ˈʐɛnɨ/, цель /t͡sɛlʲ/.
A written ю or ё after ж, ш is pronounced without the /j/ and without softening: жюри́ /ʐʊˈrʲi/, брошю́ра /brɐˈʂurə/, жёлтый /ˈʐoɫtɨj/.
Soft ч and щ
A written а, о, у after ч, щ is treated like я, ё, ю (a /j/ is inserted), so the vowel is fronted or iotated: чай /t͡ɕæj/, ща́вель /ˈɕːævʲɪlʲ/, пучо́к /pʊˈt͡ɕɵk/, ту́ча /ˈtut͡ɕə/.
Iotated Vowels: е ё ю я and /j/
| Position | Result | Examples |
|---|---|---|
| Word-initial or after a vowel | /j/ + vowel | ель /jelʲ/, я́ма /ˈjamə/, ю́г /ˈjuk/, музе́й /mʊˈzʲej/ |
| After a consonant | Softens the consonant, vowel only | мя́со /ˈmʲasə/, лёд /lʲɵt/, лю́ди /ˈlʲʉdʲɪ/ |
| After ь | Soft consonant + /j/ + vowel | здоро́вье /zdɐˈrov⁽ʲ⁾je/, ра́достью /ˈradəsʲtʲjʊ/ |
| After ъ | Hard consonant + /j/ + vowel | объе́ктом /ɐbˈjektəm/ |
| й + е, й + я | Doubled /j/ (the length survives only in the usual gemination positions) | конве́йер /kɐnˈvʲejːɪr/, аллилу́йя /ɐlʲɪˈɫujːə/, фойе́ /fɐˈje/ |
Final Devoicing
Voiced obstruents become voiceless at the end of a word, or before the pause between two words when the next
word does not begin with a voiced obstruent (the module lists b d g v ɣ z ž ĝ ĵ ǰ ӂ for this).
The table below shows the pairs applied by the devoicing table.
| Spelling | Final | Example |
|---|---|---|
| б | p | хлеб /xlʲep/, гриб /ɡrʲip/ |
| в | f | ров /rof/, морко́вь /mɐrˈkofʲ/ |
| г | k | друг /druk/, круг /kruk/ |
| д | t | год /ɡot/, сад /sat/ |
| ж | ʂ | нож /noʂ/, ложь /ɫoʂ/ |
| з | s | глаз /ɡɫas/ |
Voicing Assimilation
Within a word and across a word boundary, obstruents agree in voicing with the following obstruent. The module repeats the assimilation until nothing changes, so that whole clusters are handled.
- Voiced becomes voiceless before a voiceless obstruent: ло́жка /ˈɫoʂkə/, ска́зка /ˈskaskə/, во́дка /ˈvotkə/, ни́зкий /ˈnʲiskʲɪj/, авто́бус /ɐfˈtobʊs/.
- Voiceless becomes voiced before a voiced obstruent: сбор /zbor/, футбо́л /fʊdˈboɫ/, вокза́л /vɐɡˈzaɫ/, экза́мен /ɪɡˈzamʲɪn/, сгоре́ть /zɡɐˈrʲetʲ/.
- В is special: before an obstruent it behaves like an obstruent and takes part in assimilation (всё /fsʲɵ/, взять /vzʲætʲ/); before a sonorant it neither triggers nor undergoes it.
- Across words: от до́ма /ɐd‿ˈdomə/, под сто́лом /pɐt͡s‿ˈstoɫəm/, без ша́пки /bʲɪʂ‿ˈʂapkʲɪ/, из го́рода /ɪz‿ˈɡorədə/.
- Sonorants (м, н, л, р, й) never trigger assimilation: тру́дно /ˈtrudnə/.
Dropped Consonants in Clusters
The module deletes or simplifies a consonant in these clusters (list phonetic_subs):
| Cluster | Result | Examples |
|---|---|---|
| стн | сн (т dropped) | ле́стница /ˈlʲesʲnʲɪt͡sə/, че́стный /ˈt͡ɕesnɨj/ |
| здн | зн (д dropped) | по́здно /ˈpoznə/, бе́здна /ˈbʲeznə/ |
| лнц | нц (л dropped) | со́лнце /ˈsont͡sɨ/ |
| рдц, ндц, ртц, нтц before affricate | д/т dropped after р, н | се́рдце /ˈsʲert͡sɨ/ |
| нтг, ндг, стг, сдг | т/д dropped after н, с | рентге́н /rʲɪnˈɡʲen/ |
| стлив | слив | сча́стливым /ˈɕːaslʲɪvɨm/, /ˈɕːæsʲlʲɪvɨm/ |
| нтск, ндск | н(т)ск, т optional | гига́нтский /ɡʲɪˈɡan(t)skʲɪj/, голла́ндский /ɡɐˈɫan(t)skʲɪj/ |
| стск, сдск | written as с + ц + к (the т/д merges into an affricate) | ма́рксистский /ˈmarksʲɪst͡skʲɪj/ |
| -дцат- (numerals) | optionally long ц; unstressed as -дцыт- | два́дцать /ˈdvat͡s(ː)ɨtʲ/, тридца́тый /trʲɪˈt͡s(ː)atɨj/ |
Not implemented: the module does not drop the в in -вств- (чу́вство, здра́вствуйте) or turn -чн- into [ʂn] (коне́чно); see Common Issues.
щ, сч, зч, жч
- щ is the long soft sibilant ɕː: щит /ɕːit/, щёки /ˈɕːɵkʲɪ/.
- зч, жч become ɕː: мужчи́на /mʊˈɕːinə/.
- сч at the start of a word and in счёт / счит- becomes ɕː: сча́стье /ˈɕːæsʲtʲje/, счёт /ɕːɵt/, расчёт /rɐˈɕːɵt/, рассчита́ть /rəɕːɪˈtatʲ/. After ц, д, т (a prefix boundary) the result is t͡ɕ + ɕː: подсчёт /pɐt͡ɕˈɕːɵt/, отсчи́тываться /ɐt͡ɕˈɕːitɨvət͡sə/.
- сш, зш and сж, зж assimilate completely to a long hard sibilant: сшить /ʂːɨtʲ/, сжать /ʐːatʲ/.
- зж, жж not at a prefix boundary have two pronunciations, a hard ʐː and a soft ʑː: жужжа́ть /ʐʊˈʐːatʲ/, /ʐʊˈʑːætʲ/, дро́жжи /ˈdroʐːɨ/, /ˈdroʑːɪ/. At a prefix boundary only the hard form is generated: изжи́ть /ɪˈʐːɨtʲ/, расжа́ть /rɐˈʐːatʲ/.
Affricates and Assimilated Stops (тс, дз, тш, -ться)
- тс, дз become the short affricates t͡s, d͡z: де́тство /ˈdʲet͡stvə/. Across words, before a vowel, and after the prefixes от-, под- they become long (t͡s + s): отсу́тствие /ɐt͡sˈsut͡stvʲɪje/, под сто́лом /pɐt͡s‿ˈstoɫəm/, от зо́лота /ɐd͡z‿ˈzoɫətə/.
- тш, дж, чш give the hard affricates t͡ʂ, d͡ʐ: лу́чший /ˈɫut͡ʂʂɨj/, дже́м /ˈd͡ʐʐɛm/.
- дц, тц, дч, тч before a vowel are always long: отцо́м /ɐˈt͡sːom/; otherwise the doubling is treated as ordinary gemination and normally disappears: оте́ц /ɐˈtʲet͡s/.
- -тся, -ться (with the default part of speech) are pronounced as t͡s plus schwa, and the affricate is long when the stressed vowel directly precedes the т: у́чится /ˈut͡ɕɪt͡sə/, учи́ться /ʊˈt͡ɕit͡sːə/, мы́ться /ˈmɨt͡sːə/.
- ч before a voiced obstruent is voiced to d͡ʑ: до́чь бы /ˈdod͡ʑ‿bɨ/.
Doubled Consonants (Gemination)
Doubled letters are first marked as long (ː), and most of the length is removed again in a later step. The default rules are:
- л is always degeminated.
- Length is kept between vowels directly after the stressed vowel: ва́нна /ˈvanːə/, гру́ппа /ˈɡrupːə/, програ́мма /prɐˈɡramːə/, дли́нный /ˈdlʲinːɨj/; also ж and н between vowels elsewhere in the word, and сск / зск directly after the stress: ру́сский /ˈrusːkʲɪj/.
- Optional length (ː) for н between vowels after the stress but not directly after it: бессмы́сленно /bʲɪsːˈmɨs⁽ʲ⁾lʲɪn(ː)ə/.
- щ and the soft ж (ʑː) are always long.
- At recognized prefix boundaries (без-/бес-, воз-/вос-, из-/ис-, от-, об-, под-, над-, пред-, раз-/рас-, с-/з-, меж-, транс-,
контр-, супер-, also after не-/по-, and others from the
geminate_preftable) the doubling is always kept: расска́з /rɐsːˈkas/, о́тдых /ˈodːɨx/, ссо́ра /ˈsːorə/, бессмы́сленно /bʲɪsːˈmɨs⁽ʲ⁾lʲɪn(ː)ə/. - Everywhere else doubling disappears: кла́сс /ˈkɫas/.
The module can also be told to keep, drop or make all gemination optional (gem=y/n/o), but the app
does not use this switch. For illustration, the same words with each setting:
| Word | Default | gem = n | gem = o | gem = y |
|---|---|---|---|---|
| кла́сс | /ˈkɫas/ | /ˈkɫas/ | /ˈkɫas(ː)/ | /ˈkɫasː/ |
| ва́нна | /ˈvanːə/ | /ˈvanə/ | /ˈvan(ː)ə/ | /ˈvanːə/ |
| гру́ппа | /ˈɡrupːə/ | /ˈɡrupə/ | /ˈɡrup(ː)ə/ | /ˈɡrupːə/ |
Spelling Exceptions: -ого, что, мягк-
The transliteration helper apply_tr_fixes rewrites the Cyrillic spelling of a few frequent patterns
before any sound rule runs:
- -ого, -его → -ово, -ево: the г of adjective and pronoun genitive endings is pronounced [v]: кра́сного /ˈkrasnəvə/, большо́го /bɐlʲˈʂovə/, его́ /(j)ɪˈvo/, кого́ /kɐˈvo/, чего́ /t͡ɕɪˈvo/, того́ /tɐˈvo/. Likewise сегодня: сего́дня /sʲɪˈvodʲnʲə/.
- Exceptions where the г is kept (an explicit list of spellings, including много, дорого, строго, убого, ого, лого, Диего): мно́го /ˈmnoɡə/, до́рого /ˈdorəɡə/, стро́го /ˈstroɡə/, убо́го /ʊˈboɡə/, ого́ /ɐˈɡo/, ло́го /ˈɫoɡə/, Дие́го /dʲɪˈjeɡə/. Because the check is made on the written form, a stress variant that puts the accent on the final -о is not recognized as the exception.
- что, чтобы, ничто → ш: что́ /ˈʂto/, чтобы /ʂtəbɨ/, ничто́ /nʲɪʂˈto/, что-то /ˈʂto‿tə/.
- мягк-, мягч-, лёгк-, легч- → -хк-, -хч-: мя́гкий /ˈmʲæxʲkʲɪj/, лёгкий /ˈlʲɵxʲkʲɪj/, ле́гче /ˈlʲext͡ɕe/.
Prepositions, Particles and Hyphens
Note: the app splits the input at spaces and transcribes each word on its own, and it strips punctuation. The liaison tie ‿, the foot boundary | and all cross-word effects below therefore show the capability of the module (which accepts whole phrases) and will not appear in the app's output.
Certain unaccented words are not stressed and are joined to a neighboring word with the tie
‿ so that they reduce and assimilate with it (module table accentless):
- Join with the following word: без, близ, в, во, да, до, за, из, из-под, из-за, изо, к, ко, меж, на, над, надо, не, ни, об, обо, от, ото, перед, передо, по, под, подо, пред, предо, при, про, с, со, у, через; and а, о only when a space (not a hyphen) follows.
- Join with the preceding word: бы, б, ж, же, ли, либо, ль, ка, нибудь, тка; то only after a hyphen.
Examples: не зна́ю /nʲɪ‿ˈznajʊ/, на столе́ /nə‿stɐˈlʲe/, ты́ же /ˈtɨ‿ʐɨ/, говори́л ли /ɡəvɐˈrʲiɫ‿lʲɪ/, что-то /ˈʂto‿tə/, а ведь /ɐ‿ˈvʲetʲ/. The same word written with a stress mark is not a clitic, which changes the whole phrase: по не́бу /pɐ‿ˈnʲebʊ/ vs. по́ небу /ˈpo nʲɪbʊ/, а ведь /ɐ‿ˈvʲetʲ/ vs. а́ вот /ˈa vot/.
The words не and же are special-cased so that their final -е is not treated as an ordinary word-final -е: they become nʲɪ and ʐɨ. After a joined consonant, и turns into ɨ: под игло́й /pəd‿ɨˈɡɫoj/. A hyphen inside a word is converted into a space (кое-кто́ /kəjə ˈkto/), and a leading or trailing hyphen marks a prefix or suffix, which is never stressed.
Final -е and -я
Word-final unstressed -я is always ə: я́блоня /ˈjabɫənʲə/. Word-final unstressed
-е is more complicated because its value depends on the part of speech. The module keeps a table
pos_properties keyed by the kind of ending (after -о, after another vowel, after й/ь, after a paired
consonant, after ж ш ц, after ч щ). The app always uses the default entry (def):
| Ending | Default value | Examples |
|---|---|---|
| -ое | ə | му́дрое /ˈmudrəjə/ |
| other vowel + е | e | зда́ние /ˈzdanʲɪje/ |
| -ье | e | здоро́вье /zdɐˈrov⁽ʲ⁾je/ |
| soft paired consonant + е | e | по́ле /ˈpolʲe/, мо́ре /ˈmorʲe/ |
| ж, ш, ц + е | ɨ | бо́льше /ˈbolʲʂɨ/, се́рдце /ˈsʲert͡sɨ/ |
| ч, щ + е | e | ле́гче /ˈlʲext͡ɕe/, убе́жище /ʊˈbʲeʐɨɕːe/ |
Other parts of speech (noun, adjective, preposition, pronoun, comparative, and forced values) can give
ə or ɪ instead. These are available in the Lua module (option
pos) but not in the app; for illustration:
| Word | Default | pos = low (schwa) | pos = hi ([ɪ]) |
|---|---|---|---|
| по́ле | /ˈpolʲe/ | /ˈpolʲə/ | /ˈpolʲɪ/ |
| убе́жище | /ʊˈbʲeʐɨɕːe/ | /ʊˈbʲeʐɨɕːə/ | /ʊˈbʲeʐɨɕːɪ/ |
Fronting of а and у Between Soft Consonants
When a or u (including ʊ) stands between two soft consonants, it is fronted to æ or ʉ: пять /pʲætʲ/, ня́ня /ˈnʲænʲə/, лю́ди /ˈlʲʉdʲɪ/, чай /t͡ɕæj/, ща́вель /ˈɕːævʲɪlʲ/. Next to a hard consonant nothing changes: мя́со /ˈmʲasə/.
If the following consonant is only optionally soft, the module returns two pronunciations, one with a hard consonant and an unfronted vowel, and one with a soft consonant and a fronted vowel: ля́мпя /ˈlʲampʲə/, /ˈlʲæmʲpʲə/, тя́нзи /ˈtʲanzʲɪ/, /ˈtʲænʲzʲɪ/, сча́стливым /ˈɕːaslʲɪvɨm/, /ˈɕːæsʲlʲɪvɨm/.
Hard л (Dark L)
A hard л is written as the dark ɫ, a soft л as lʲ: лук /ɫuk/ vs. люк /lʲuk/, ма́сло /ˈmasɫə/, жёлтый /ˈʐoɫtɨj/.
Punctuation and Special Input
- Commas and dashes inside the text become the foot boundary |: /ˈdomə | ɐ‿nʲɪ‿f‿ˈʂkolʲe/.
- ! and ? are treated as separate words so that they do not disturb the word-final rules: /da! nʲet?/.
- Apostrophes in foreign names are dropped.
- Pre-reform and Old Russian letters (ѣ, і, ѳ, ѵ, ъ at the end of a word and others) are converted to their modern equivalents: хлѣ́бъ /ˈxlʲep/.
- Capital letters are lowercased before processing; digits are dropped by the app.
Comprehensive Spelling-to-IPA Mapping
This section maps Russian spelling (orthography) to pronunciation (IPA). The tables describe the rules that the transcription engine really applies, and every example was produced by the engine from a stress-marked word. Remember that the stress position is the one thing the spelling does not give you.
1. Vowel Letters After a Consonant or at a Word Start
Russian has five "hard" vowel letters (а, о, у, ы, э) and five "soft" or iotated ones (я, ё, ю, и, е). After a consonant the soft letters mark that consonant as soft; at the start of a word, after a vowel, or after ь/ъ the letters я, ё, ю, е add a /j/. The values below are for the stressed position; see Stress and Vowel Reduction for unstressed values.
| Letter | After a hard consonant | After a soft consonant (or iotated) | Word-initial or after a vowel |
|---|---|---|---|
| а, я | /a/ ма́ма /ˈmamə/ | /a/, /æ/ between soft consonants: мя́со /ˈmʲasə/, пять /pʲætʲ/ | /ja/ from я: я́ма /ˈjamə/ |
| о, ё | /o/ до́ма /ˈdomə/ | /ɵ/ from ё: тётя /ˈtʲɵtʲə/ | /jɵ/ from ё: ёлка /ˈjɵɫkə/ |
| у, ю | /u/ ту́ча /ˈtut͡ɕə/ | /u/, /ʉ/ between soft consonants: лю́ди /ˈlʲʉdʲɪ/ | /ju/ from ю: ю́г /ˈjuk/ |
| ы, и | /ɨ/ from ы (and и after ж, ш, ц): ры́ба /ˈrɨbə/, жи́знь /ˈʐɨzʲnʲ/ | /i/ from и: ви́дел /ˈvʲidʲɪɫ/ | /i/ from и: и́ли /ˈilʲɪ/ |
| э, е | /ɛ/ from э (and е after ж, ш, ц): э́то /ˈɛtə/, же́ны /ˈʐɛnɨ/ | /e/ from е: ле́то /ˈlʲetə/ | /je/ from е: ель /jelʲ/, е́сть /ˈjesʲtʲ/ |
2. Consonant Letters
| Letter | Hard | Soft | Notes |
|---|---|---|---|
| б | ба́нка /ˈbankə/ | бе́лый /ˈbʲeɫɨj/ | Final devoicing → p |
| в | вода́ /vɐˈda/ | ви́дел /ˈvʲidʲɪɫ/ | Final devoicing → f; special in voicing assimilation |
| г | го́род /ˈɡorət/ | кни́ги /ˈknʲiɡʲɪ/ | Final devoicing → k; [v] in -ого/-его; [x] in мягк-, лёгк- |
| д | до́ма /ˈdomə/ | де́ти /ˈdʲetʲɪ/ | Final devoicing → t |
| ж | жена́ /ʐɨˈna/ | - | Always hard; final devoicing → ʂ |
| з | зу́бы /ˈzubɨ/ | зелёный /zʲɪˈlʲɵnɨj/ | Final devoicing → s |
| й | - | музе́й /mʊˈzʲej/ | Always j |
| к | ко́шка /ˈkoʂkə/ | кни́ги /ˈknʲiɡʲɪ/ | Voiced before a voiced obstruent: вокза́л /vɐɡˈzaɫ/ |
| л | лук /ɫuk/ | люк /lʲuk/ | Hard is dark ɫ |
| м | ма́ма /ˈmamə/ | ме́сто /ˈmʲestə/ | - |
| н | нос /nos/ | конь /konʲ/ | Soft before soft т, д, ч, щ: ба́нтик /ˈbanʲtʲɪk/ |
| п | па́па /ˈpapə/ | пять /pʲætʲ/ | - |
| р | ры́ба /ˈrɨbə/ | ря́дом /ˈrʲadəm/ | - |
| с | сад /sat/ | семь /sʲemʲ/ | Voiced before a voiced obstruent: сбор /zbor/ |
| т | ту́ча /ˈtut͡ɕə/ | тётя /ˈtʲɵtʲə/ | Voiced before a voiced obstruent: футбо́л /fʊdˈboɫ/ |
| ф | фо́рма /ˈformə/ | фи́лин /ˈfʲilʲɪn/ | - |
| х | хорошо́ /xərɐˈʂo/ | хи́мия /ˈxʲimʲɪjə/ | x; voiced ɣ before a voiced obstruent |
| ц | пти́ца /ˈptʲit͡sə/ | Цю́рих /ˈt͡sʲʉrʲɪx/ | Hard except before я, ю, ё, ь; t͡s |
| ч | - | ту́ча /ˈtut͡ɕə/ | Always soft t͡ɕ |
| ш | ши́на /ˈʂɨnə/ | - | Always hard ʂ |
| щ | - | щёки /ˈɕːɵkʲɪ/ | Always soft and long ɕː |
| ь, ъ | объе́ктом /ɐbˈjektəm/ | соль /solʲ/ | No sound of their own; ъ keeps /j/ before iotated vowels |
3. Digraphs and Clusters
| Spelling | IPA | Context / Rule | Example |
|---|---|---|---|
| сч | ɕː | Word-initial, and in счёт / счит- | сча́стье /ˈɕːæsʲtʲje/, счёт /ɕːɵt/ |
| зч, жч | ɕː | Always | мужчи́на /mʊˈɕːinə/ |
| сш, зш, сж | ʂː, ʐː | Complete assimilation | сшить /ʂːɨtʲ/, сжать /ʐːatʲ/ |
| зж, жж | ʐː or ʑː | Two variants, except at a prefix boundary | жужжа́ть /ʐʊˈʐːatʲ/, /ʐʊˈʑːætʲ/ |
| тс, дз | t͡s | Short; long across words, before vowels, after от-/под- | де́тство /ˈdʲet͡stvə/, отсу́тствие /ɐt͡sˈsut͡stvʲɪje/ |
| тш, дж, чш | t͡ʂ, d͡ʐ | Hard affricates | лу́чший /ˈɫut͡ʂʂɨj/, дже́м /ˈd͡ʐʐɛm/ |
| тц, дц + vowel | t͡sː | Always long | отцо́м /ɐˈt͡sːom/ |
| -тся, -ться | t͡sə | Long after a directly preceding stressed vowel | у́чится /ˈut͡ɕɪt͡sə/, учи́ться /ʊˈt͡ɕit͡sːə/ |
| -дцат- | t͡s(ː) | Optionally long; unstressed → -цыт- | два́дцать /ˈdvat͡s(ː)ɨtʲ/ |
| что, чтобы, ничто | ʂt | ч → ш in these words only | что́ /ˈʂto/, ничто́ /nʲɪʂˈto/ |
| -чн- | t͡ɕn | No special rule, even in words pronounced [ʂn] | ску́чный /ˈskut͡ɕnɨj/ |
| стн, здн, лнц | sn, zn, nt͡s | Middle consonant is dropped | ле́стница /ˈlʲesʲnʲɪt͡sə/, по́здно /ˈpoznə/, со́лнце /ˈsont͡sɨ/ |
| -вств- | fstv | The в is not dropped (see Known Issues) | чу́вство /ˈt͡ɕufstvə/ |
| мягк-, лёгк- | xʲk | г → х before к, ч | мя́гкий /ˈmʲæxʲkʲɪj/, лёгкий /ˈlʲɵxʲkʲɪj/ |
| -ого, -его | vo, ve | Adjective and pronoun endings, with exceptions | кра́сного /ˈkrasnəvə/, его́ /(j)ɪˈvo/ |
| Double consonant | ː or single | Long only between vowels after the stress or at certain prefixes | ва́нна /ˈvanːə/, кла́сс /ˈkɫas/ |
4. Voiced-Voiceless Pairs
The module defines the pairs below in its devoicing and voicing tables. A voiced member
devoices at the end of a word and before a voiceless obstruent; a voiceless member becomes voiced before a
voiced obstruent.
| Voiced | Voiceless | Becomes voiceless (example) | Becomes voiced (example) |
|---|---|---|---|
| b | p | хлеб /xlʲep/ | - |
| d | t | год /ɡot/ | футбо́л /fʊdˈboɫ/ |
| ɡ | k | друг /druk/ | вокза́л /vɐɡˈzaɫ/ |
| z | s | глаз /ɡɫas/ | сбор /zbor/ |
| v | f | ров /rof/ | афга́нец /ɐvˈɡanʲɪt͡s/ |
| ʐ | ʂ | нож /noʂ/ | ка́ш бы /ˈkaʐ‿bɨ/ |
| ɣ | x | - | мо́х бы /ˈmoɣ‿bɨ/ |
| d͡ʑ | t͡ɕ | - | до́чь бы /ˈdod͡ʑ‿bɨ/ |
5. Special Words and Spelling Rewrites
| Spelling | Rewritten as | Example |
|---|---|---|
| -ого, -его (adjectives, pronouns) | -ово, -ево | большо́го /bɐlʲˈʂovə/, чего́ /t͡ɕɪˈvo/ |
| сегодня, сегодняшн- | севодня | сего́дня /sʲɪˈvodʲnʲə/ |
| что, чтобы, ничто | што, штобы, ништо | что́ /ˈʂto/, ничто́ /nʲɪʂˈto/ |
| мягк-, лёгк-, легч- | мяхк-, лёхк-, лехч- | ле́гче /ˈlʲext͡ɕe/ |
| Word-final ъ (old spelling) | (ignored) | хлѣ́бъ /ˈxlʲep/ |
Using the Tool: Practical Notes
Why does one word sometimes show several transcriptions, and how do I choose?
Spelling does not show stress, so a word can map to more than one pronunciation. Homographs with different stress, such as за́мок /ˈzamək/ and замо́к /zɐˈmok/, are listed as separate variants. A word that is not in the lexicon is transcribed once for every possible stress position. Click the word to cycle through the variants and keep the one that matches the word you mean; see Multiple Pronunciation Variants. Open in the converter
How do I mark the stress myself?
Type a combining acute accent (U+0301) directly after the stressed vowel, for example рука́ /rʊˈka/. The letter ё counts as stressed when no other stress mark is present, and a combining grave accent (U+0300) gives secondary stress. A word typed with a stress mark, or containing ё, is transcribed exactly as marked and gives a single result. Details are in Stress Marks, Monosyllables and ё.
Why can the output differ from a pronunciation dictionary?
The module works from spelling and stress only. It does not know lexical exceptions, for example the vowel of the loanword кафе́ /kɐˈfʲe/, which speakers pronounce with [ɛ] after a hard consonant, and it does not implement the dropped в in -вств- or -чн- as [ʂn]. Dialects and fast-speech reductions are not modeled. See Dialects & Limitations and Common Issues.
Is the transcription phonemic or phonetic?
Phonetic. The Wiktionary module produces only a narrow phonetic transcription for Russian, so the app offers no phonemic form; see Phonemic vs Phonetic.
Implementation Details (for Developers)
Russian transcription is done in two layers: a JavaScript handler in scripts/utils.js
(ipaHandlers.Russian) that finds out the stress, and the Lua module
lua_modules/ru-pron_wasm.lua (the Wiktionary ru-pron module, Benwing2's version),
which turns one stress-marked phrase into IPA. Two helpers are required:
ru-translit.lua (apply_tr_fixes, tr_after_fixes) and
ru-common.lua (decompose, remove_grave_accents and character classes). The
Lua module is called as ru_ipa.ipa_string(text), which returns the list of pronunciations produced by
export.ipa joined with ", ".
App Handler (JavaScript)
The handler is only active for the form Phonetic (the only form configured for Russian).
| Case | Condition | Action | Example |
|---|---|---|---|
| 1. Lexicon hit | Word (letters, marks and hyphens only; also tried in lowercase) found in ru_lexicon_v4.zip |
The V4 record holds one or more comma-separated stress-marked forms. Each is run through
ru_ipa.ipa_string, duplicates are collapsed (the variant containing ˈ
is preferred), and the result is returned as /ipa1/,/ipa2/. |
The record во́да, вода́ gives /ˈvodə/, /vɐˈda/ |
| 2. Not in lexicon, 0 or 1 vowel | Letters of аэиуеюяёоы counted | The single vowel receives a combining acute (U+0301) and the word is transcribed once. | /ˈdom/ |
| 3. Not in lexicon, 2 or more vowels | Same count | One transcription per vowel position (acute added to each vowel in turn); the results are joined with commas. The user clicks the word to cycle through them. | /ˈmuɕːɪnə/,/mʊˈɕːinə/,/mʊɕːɪˈna/ |
The input is sanitized first: everything except letters, combining marks, apostrophes and hyphens is removed
(so digits, spaces, backticks and @ ^ disappear), and the text is normalized to NFKC. A stress
mark typed by the user survives as U+0301; a word that already contains one (or contains ё) skips cases 2 and 3 and is transcribed once, as typed.
Lua Pipeline (export.ipa and ru_ipa_main)
The stages below follow the order in which the code runs. Example outputs are produced by calling
ipa_string on the stress-marked example word. Stages 4 to 7 and several rules below concern
multi-word input (clitic joints, foot boundaries, cross-word assimilation). The app transcribes each space-separated
word separately (main.js splits lines on spaces and the handler strips punctuation), so these
effects are visible only when the module is called with a phrase, as in the examples here.
Internal Notation (Intermediate Forms)
The module works on a Latin-based internal alphabet and uses helper symbols that are not present in the final IPA output:
| Symbol | Name | Purpose | Final output |
|---|---|---|---|
⁀ |
Word boundary | Added at the start and end of each word so that regular expressions can anchor on it | Removed |
‿ |
Joint | Links an unstressed clitic to its host (stored as ⁀‿⁀) |
Kept as ‿ |
ʹ / ʺ |
Soft / hard sign | Transliteration of ь and ъ; they trigger palatalization or a glottal stop | Removed |
ˑ |
Protected length | Marks gemination that must never be removed (prefix boundaries, дц/тц before a vowel) | Becomes ː |
@ and / |
Syllable boundary | @ is inserted by the syllabifier; / is an explicit boundary written by the user |
Removed |
_ |
Assimilation blocker | Prevents assimilation across it | Removed |
| U+FFF2 | Pseudoconsonant | Replaces the hyphen at the start of a suffix or the end of a prefix, so that vowels and consonants there behave as if neighbored by a consonant | Removed |
| U+0302 | Tertiary stress (circumflex) | A vowel treated as stressed without a visible mark | Removed |
ä ë ö ü ạ |
Iotated vowels | я, е, ё, ю and semi-reduced я after the /j/ has been absorbed into softness | Converted by allophones |
c č ĉ ĵ ǰ ĝ ӂ š ž |
Single-letter consonants | Internal letters for t͡s t͡ɕ t͡ʂ d͡z d͡ʑ d͡ʐ ʑ ʂ ʐ | Converted by translit_conv |
1. Spelling Rewrites (apply_tr_fixes)
Run once at the start (unless the caller says the text is already transformed). It works on Cyrillic text, before any lowercasing.
| Rule | Example Input | Output | Description |
|---|---|---|---|
| Alias letters, decompose accents | хлѣ́бъ | /ˈxlʲep/ | Old letters are mapped to modern ones; accents are split off as combining characters |
| -ого/-его → -ово/-ево | кра́сного | /ˈkrasnəvə/ | Pattern on Cyrillic text; the exceptions list is checked first |
| Exceptions: много, дорого, строго, убого, лого, ого, ... | мно́го | /ˈmnoɡə/ | Table of case patterns; the г is protected by a placeholder (TEMP_G) |
| сегодня, сегодняшн- | сего́дня | /sʲɪˈvodʲnʲə/ | г → в |
| что, чтобы, ничто | что́ | /ˈʂto/ | ч → ш |
| [мл][яеё]г[кч] | мя́гкий | /ˈmʲæxʲkʲɪj/ | г → х |
2. Argument Checks and Marker Conversion
export.ipa(text, adj, gem, bracket, pos, zhpal, is_transformed) validates gem
(y/o/n or empty) and pos (a key of pos_properties), lowercases the text
and converts the ASCII shorthands to combining characters: `` and a double grave become a
circumflex, ` a grave, @ a dot above, ^ a circumflex. The app never uses the
shorthands, but the combining characters work the same way:
| Rule | Example Input | Output | Description |
|---|---|---|---|
| Grave accent → secondary stress | воѐнно-морско́й | /vɐˌjenːə mɐrˈskoj/ | The grave becomes ˌ later in the pipeline |
3. Transliteration (tr_after_fixes)
| Rule | Example Input | Output | Description |
|---|---|---|---|
| э → ɛ before transliteration | э́то | /ˈɛtə/ | The transliteration module does not always do this by itself |
| Vowel + йе → йй + е | конве́йер | /kɐnˈvʲejːɪr/ | Gives the doubled /j/ |
| е, э after a consonant → plain e, ɛ | ле́то | /ˈlʲetə/ | Otherwise е is transliterated je |
| ю after ж, ш → u | жюри́ | /ʐʊˈrʲi/ | Always-hard consonant: no iotation |
| ё after ж ч ш щ → o | жёлтый | /ˈʐoɫtɨj/ | The /j/ is dropped (for ч, щ it is inserted again in step 9) |
| Implicit stress on ё | самолёт | /səmɐˈlʲɵt/ | The last ё gets an acute accent unless the word has an explicit primary stress |
| Word-final ъ ignored | хлѣ́бъ | /ˈxlʲep/ | Old orthography |
4. Foot Boundaries and Spacing
Commas and dashes (with surrounding spaces) are converted to | , repeated spaces are collapsed.
| Rule | Example Input | Output | Description |
|---|---|---|---|
| , – — → | | до́ма, а не в шко́ле | /ˈdomə | ɐ‿nʲɪ‿f‿ˈʂkolʲe/ | IPA foot boundary |
5. Stress for Monosyllables
The text is split into words and separators (capturing_split on spaces and hyphens). A single-vowel
word without any accent that is not a prefix or suffix and not accentless gets primary
stress if a neighboring word is an accentless particle, and tertiary stress (a circumflex)
otherwise. The accentless classes are in accentless (pre, prespace,
post, posthyphen).
| Rule | Example Input | Output | Description |
|---|---|---|---|
| Tertiary stress | дом | /dom/ | Vowel not reduced, no mark |
| Primary stress next to a clitic | на дом | /nɐ‿ˈdom/ | The preposition на is accentless |
| Accentless word keeps no stress | не зна́ю | /nʲɪ‿ˈznajʊ/ | Reduced and joined |
6. Joining Clitics
The separator after an accentless pre word (or prespace word when a space follows) and the
separator before a post word (or posthyphen after a hyphen) is replaced by ‿.
In a multi-word gem/pos list the spec of the absorbed word is removed so that one
spec remains for each combined word.
| Rule | Example Input | Output | Description |
|---|---|---|---|
| pre + host | по не́бу | /pɐ‿ˈnʲebʊ/ | Preposition joined to the following word |
| stressed по: no joining | по́ небу | /ˈpo nʲɪbʊ/ | The accent turns it into a full word |
| post + host | ты́ же | /ˈtɨ‿ʐɨ/ | Particle joined to the preceding word |
| prespace word followed by a space | а ведь | /ɐ‿ˈvʲetʲ/ | а, о join only before a space |
7. Hyphens and Word Markers
The words are joined again. A hyphen at the start of a suffix or the end of a prefix becomes the
pseudoconsonant; all other hyphens become spaces. Then ⁀ is added at both ends of every word
and around ‿, and ! and ? become separate words.
| Rule | Example Input | Output | Description |
|---|---|---|---|
| Inner hyphen → space | кое-кто́ | /kəjə ˈkto/ | The two parts are processed as separate words |
| ! and ? as separate words | да! нет? | /da! nʲet?/ | Prevents interference with the word-final rules |
8. Variants for зж and жж
Unless zhpal=n, a text containing ж is searched for the prefixes of geminate_pref that
end in a sibilant. If one of them stands directly before ж, a marker ˑ is inserted so that the
palatal variant is not generated. If зж or жж still occurs, two spellings are produced: the original and one with
ӂӂ (ʑː). Each is transcribed separately.
| Rule | Example Input | Output | Description |
|---|---|---|---|
| Two variants | дро́жжи | /ˈdroʐːɨ/, /ˈdroʑːɪ/ | Hard and soft long sibilant |
| Prefix boundary: one variant | изжи́ть | /ɪˈʐːɨtʲ/ | из- is in geminate_pref |
zhpal=n |
дро́жжи | /ˈdroʐːɨ/ | Only the hard variant |
9. Opening Steps of ru_ipa_main
The function receives the normalized text and the original spelling (kept for the prefix check later).
| Rule | Example Input | Output | Description |
|---|---|---|---|
| Remove apostrophes | - | - | Purely cosmetic apostrophes in names; apostrophes standing for ъ were handled by transliteration |
| [шж] + j + [ou] → [ou] | брошю́ра | /brɐˈʂurə/ | Always-hard consonants never take an iotated vowel |
| [čǰӂ] + [aou] → insert j | чай | /t͡ɕæj/ | Always-soft consonants always take palatal vowels |
| ьо → ьйо | Асунсьо́н | /ɐsʊn⁽ʲ⁾ˈsʲjɵn/ | Read like ьё |
| Tertiary stress on final -о after a vowel or palatal | то́кио, ра́нчо | /ˈtokʲɪo/, /ˈranʲt͡ɕɵ/ | The final о is not reduced |
| Remove dot-above, convert dot-below | - | - | Dot below is only allowed on я or palatal а, otherwise an error is raised |
10. Final -ться / -тся
final_tsja_processing looks up tsjapal in pos_properties. For every part of speech except
imp (tsjapal is n) the ending is rewritten to cca (long) directly after a stressed
vowel, otherwise to ca. For imperatives (pos=imp) the ending stays palatalized.
| Rule | Example Input | Output | Description |
|---|---|---|---|
| Stress directly before -ться | учи́ться | /ʊˈt͡ɕit͡sːə/ | Long affricate |
| Stress elsewhere | у́чится | /ˈut͡ɕɪt͡sə/ | Short affricate |
pos=imp |
учи́ться | /ʊˈt͡ɕit͡sʲsʲə/ | Palatalized (not available in the app) |
11. Ad-hoc Phonetic Substitutions (phonetic_subs)
An ordered list of two-element entries (pattern, replacement) applied in sequence; the order is deliberate and must not be rearranged. It contains the cluster-simplification and affricate rules:
| Rule | Example Input | Output | Description |
|---|---|---|---|
| h → ɣ; šč → ɕː | щит | /ɕːit/ | щ becomes the long soft sibilant first |
| n[dt]sk → n(t)sk; s[dt]sk → sck | гига́нтский, ма́рксистский | /ɡʲɪˈɡan(t)skʲɪj/, /ˈmarksʲɪst͡skʲɪj/ | Optional or merged т/д |
| -дцат- → c(c)yt (unstressed) or c(c)át | два́дцать | /ˈdvat͡s(ː)ɨtʲ/ | Numerals in -дцать |
| [dt] + s/z → c, ĵ (short) or long variants | де́тство, отсу́тствие | /ˈdʲet͡stvə/, /ɐt͡sˈsut͡stvʲɪje/ | Long across words, before a vowel, after от-/под- |
| [dtč] + š/ž → ĉ, ĝ | лу́чший, дже́м | /ˈɫut͡ʂʂɨj/, /ˈd͡ʐʐɛm/ | Hard affricates |
| зч, жч → ɕː; сч → ɕː or ɕč | мужчи́на, счёт, подсчёт | /mʊˈɕːinə/, /ɕːɵt/, /pɐt͡ɕˈɕːɵt/ | Different outcomes at word start, in счёт/счит-, after ц д т |
| [rn][dt][cč] → [rn][cč] | се́рдце | /ˈsʲert͡sɨ/ | Dropped д/т |
| [dt][cč] + vowel → ˑ | отцо́м | /ɐˈt͡sːom/ | Always long |
| [zs] + š/ž → š/ž (long) | сшить, сжать | /ʂːɨtʲ/, /ʐːatʲ/ | Total assimilation |
| [mpbfv]ʹ + [st][eij] → optional ʹ | ста́вьте | /ˈstaf⁽ʲ⁾tʲe/ | Optional palatalization of labials |
| sverxi → sverxy | сверхинтере́сный | /svʲɪrxɨnʲtʲɪˈrʲesnɨj/ | и after the prefix сверх- is hard |
| stʹd → zd; tʹd → dd | - | - | Soft-sign clusters; the second often degeminates |
| Consonant losses: [ns][dt]g, zdn, lnc, [sz]tliv, [sz]tn | рентге́н, по́здно, со́лнце, ле́стница | /rʲɪnˈɡʲen/, /ˈpoznə/, /ˈsont͡sɨ/, /ˈlʲesʲnʲɪt͡sə/ | See Dropped Consonants |
| Initial unstressed э → и; э after a vowel → и | эта́ж, аэропо́рт | /ɪˈtaʂ/, /ɐɪrɐˈport/ | A form of ikanye done before the vowel table |
| и → ы after a consonant at a close juncture | под игло́й | /pəd‿ɨˈɡɫoj/ | Applies to the joint ⁀‿⁀ |
12. Voicing and Devoicing
Uses the tables devoicing and voicing. The loop is repeated until the text no longer changes,
so assimilation can spread through a cluster. In the module a в before an obstruent both triggers and undergoes
assimilation, but before a sonorant it does neither.
| Rule | Example Input | Output | Description |
|---|---|---|---|
| 1. Absolutely final devoicing | хлеб, морко́вь | /xlʲep/, /mɐrˈkofʲ/ | Including soft-sign-final words |
| 2. Devoicing before the next word | из го́рода, без ша́пки | /ɪz‿ˈɡorədə/, /bʲɪʂ‿ˈʂapkʲɪ/ | Not before a voiced obstruent |
| 3. Assimilation, repeated | ло́жка, сбор | /ˈɫoʂkə/, /zbor/ | Right to left within the cluster |
| 3a. в as an obstruent | всё, вдруг | /fsʲɵ/, /vdruk/ | в devoices before a voiceless obstruent and stays voiced before a voiced one; between a voiceless and a voiced obstruent it is transparent to voicing |
13. Gemination Marks and Iotated Vowels
| Rule | Example Input | Output | Description |
|---|---|---|---|
| Doubled consonant letters → X + ː | ва́нна | /ˈvanːə/ | Also the optional (X) form |
| j + [aeou] → ä ë ö ü | я́ма | /ˈjamə/ | Table iotating |
| Remove j after a consonant before an iotated vowel | мя́со | /ˈmʲasə/ | Softness replaces the glide |
14. Gemination Handling (per word)
The text is now split into words and each is processed independently. The first step compares the
pronounced and original spellings against geminate_pref and turns the first ː into
ˑ at a prefix boundary. After that the gem option decides (y keep,
o optional, n remove). By default:
| Rule | Example Input | Output | Description |
|---|---|---|---|
| Prefix boundary → ˑ | расска́з | /rɐsːˈkas/ | Both spellings must match the entry (avoids false matches like Поттер) |
| лː → л | тро́лль | /ˈtrolʲ/ | л is always degeminated |
| Between vowels right after the stress → ˑ | програ́мма | /prɐˈɡramːə/ | Kept |
| Remaining n after the stress → (ː) | бессмы́сленно | /bʲɪsːˈmɨs⁽ʲ⁾lʲɪn(ː)ə/ | Optional |
| ssk / zsk after the stress → ˑ | ру́сский | /ˈrusːkʲɪj/ | Kept |
| Everything else except ɕː, ӂː | кла́сс | /ˈkɫas/ | Removed |
15. Soft and Hard Signs, Assimilative Palatalization
| Rule | Example Input | Output | Description |
|---|---|---|---|
| ʹi → ʹji | семьи́ | /sʲɪˈm⁽ʲ⁾ji/ | /j/ before и after ь |
| ʺ + [aɛiouy] → ʔ + vowel | - | - | Glottal stop after a hard sign before a non-iotated vowel (rare) |
| (ʹ) → ⁽ʲ⁾ | - | - | Optional softness written in the spelling, e.g. п(ь)я́нка |
| [mnpbtdkgfvszxɣrl] + front vowel or ʹ → ʲ | конь, пять | /konʲ/, /pʲætʲ/ | Main palatalization rule |
| [cĵ] + [äạöüʹ] → ʲ | Цю́рих | /ˈt͡sʲʉrʲɪx/ | ц only softens before я, ю, ё, ь |
| Remove ʹ and ʺ | соль | /solʲ/ | The signs have done their work |
16. Final -я and -е
Unstressed word-final ä and ạ become ə; ⁀nʲe⁀ becomes
⁀nʲi⁀ and ⁀že⁀ becomes ⁀žy⁀. For final -е the function
fetch_e_sub(ending) looks up pos_properties (through fetch_pos_property,
which resolves aliases and falls back to the def entry). An unstressed [e] is protected by a temporary
circumflex so that it is not reduced to [ɪ]. A final -э is kept unreduced.
| Rule | Example Input | Output | Description |
|---|---|---|---|
| Final -я → ə | я́блоня | /ˈjabɫənʲə/ | Always |
| не, же alone | ты́ же | /ˈtɨ‿ʐɨ/ | же → ʐɨ |
| vowel + je (-ое: ə; others: e) | му́дрое, зда́ние | /ˈmudrəjə/, /ˈzdanʲɪje/ | Keys oe, ve |
| paired consonant + е → e | по́ле | /ˈpolʲe/ | Key softpaired |
| ж, ш, ц + е → ɨ | бо́льше | /ˈbolʲʂɨ/ | Key hardsib |
| ч, щ + е → e | убе́жище | /ʊˈbʲeʐɨɕːe/ | Key softsib |
pos=low / pos=hi |
по́ле | /ˈpolʲə/, /ˈpolʲɪ/ | Forced schwa or [ɪ] (not available in the app) |
17. Retraction After ц, ш, ж
The table retracting turns e into ɛ and i into y (later
ɨ) after c ĵ š ž ĉ ĝ and an optional length mark.
| Rule | Example Input | Output | Description |
|---|---|---|---|
| [cĵšžĉĝ] + e → ɛ | цель, же́ны | /t͡sɛlʲ/, /ˈʐɛnɨ/ | Hard consonants cannot take /e/ |
| [cĵšžĉĝ] + i → y | ши́на, цирк | /ˈʂɨnə/, /t͡sɨrk/ | Pronounced ɨ |
18. Syllabification
Syllable boundaries (@) are needed to find the stressed syllable and the pretonic syllable. They are
inserted in nine steps:
| Step | Rule | Description |
|---|---|---|
| 1 | Insert @ after each vowel (with its accents) |
Every vowel closes a syllable |
| 2 | Remove the word-final @ |
No empty last syllable |
| 3 | Move @ before ‿⁀ if a consonant follows |
A joined preposition's consonants start the next syllable |
| 4 | Move @ to before the last consonant of a cluster |
Default: a cluster is split before its last consonant |
| 5 | Move @ back before a "permanent onset" (perm_syl_onset) |
spr str skr spl skl sp st sk sf sx sc pr br tr dr kr gr fr vr xr pl bl kl gl fl vl xl ml mn šč dž, and soft sibilant + j |
| 6 | If the user wrote /, it replaces the automatic @ |
Explicit syllable boundary |
| 7-8 | Remove @ before a final cluster or after an initial cluster |
Only possible for user-inserted slashes and цз/чж |
| 9 | Move @ to after a linking ‿⁀ |
A boundary never stands directly before the link |
19. Word-Initial а/о, Stress Marks and Vowel Allophony
An unstressed ⁀a or ⁀o is first rewritten to ɐ (done after syllabification
because the syllabifier does not know ɐ as a vowel). The word is split at @. A syllable is
real stressed if it contains an acute or grave, and tertiary if it contains a circumflex. Then each
syllable is converted: a stressed one gets ˈ (acute) or ˌ (grave) in front, the circumflex is
deleted, and the vowel is replaced using column 1; a syllable directly before a real stress uses column 2; all
others column 3.
| Internal vowel | Stressed | Pretonic | Elsewhere | Source letter |
|---|---|---|---|---|
a | a | ɐ | ə | а |
o | o | ɐ | ə | о |
e | e | ɪ | ɪ | е after a consonant or ь/ъ |
i | i | ɪ | ɪ | и |
u | u | ʊ | ʊ | у |
y | ɨ | ɨ | ɨ | ы |
ɛ | ɛ | ɨ | ɨ | э |
ä | a | ɪ | ɪ | я |
ạ | a | ɐ | ə | я with dot below |
ë | e | ɪ | ɪ | е at the start of a word or after a vowel or й |
ö | ɵ | ɪ | ɪ | ё |
ü | u | ʊ | ʊ | ю |
ə | ə | ə | ə | (already reduced) |
| Rule | Example Input | Output | Description |
|---|---|---|---|
| Initial unstressed а/о → ɐ | океа́н | /ɐkʲɪˈan/ | Regardless of position relative to stress |
| Pretonic and elsewhere | молоко́ | /məɫɐˈko/ | ə then ɐ |
| Tertiary stress → no mark | ель | /jelʲ/ | Stressed value, no ˈ |
20. Optional [j] Before ɪ
| Rule | Example Input | Output | Description |
|---|---|---|---|
| ⁀jɪ → ⁀(j)ɪ | ябло́ко | /(j)ɪˈbɫokə/ | Word-initial |
| Vowel + jɪ → (j)ɪ | по-мо́ему | /pɐ‿ˈmo(j)ɪmʊ/ | After a vowel |
| After a joined consonant: j kept | - | - | Not optional after a consonant across ⁀‿⁀ |
21. Palatal Assimilation in Clusters
These rules run on the IPA vowels and use the sets cons_assim_palatal.compulsory
(ntʲ ndʲ xkʲ csʲ ĵzʲ ncʲ nĵʲ) and cons_assim_palatal.optional
(slʲ zlʲ nsʲ nzʲ mpʲ mbʲ mfʲ fmʲ).
| Rule | Example Input | Output | Description |
|---|---|---|---|
| [dtsz] + nʲ: compulsory unless [rl] precedes | пя́тница | /ˈpʲætʲnʲɪt͡sə/ | Optional ⁽ʲ⁾ after р or л |
| [sz] + [td]ʲ: compulsory unless [rl] precedes | сте́на | /ˈsʲtʲenə/ | Also здесь, сде́лать |
| Compulsory pairs | ба́нтик, мя́гкий | /ˈbanʲtʲɪk/, /ˈmʲæxʲkʲɪj/ | ntʲ, ndʲ, xkʲ, csʲ, ĵzʲ, ncʲ, nĵʲ |
| Optional pairs | бессмы́сленно | /bʲɪsːˈmɨs⁽ʲ⁾lʲɪn(ː)ə/ | slʲ, zlʲ, nsʲ, nzʲ, mpʲ, mbʲ, mfʲ, fmʲ |
| n + [čǰɕӂ] → nʲ | кончи́ть | /kɐnʲˈt͡ɕitʲ/ | Before alveolopalatals |
| Word-initial вп, вб → optional ⁽ʲ⁾ | вперёд | /f⁽ʲ⁾pʲɪˈrʲɵt/ | Only at the start of a word |
| бв → optional; not in обв- | обвини́ть | /ɐbvʲɪˈnʲitʲ/ | Exception for the prefix об- + в |
| Labial + ʲ before /j/ → optional | семья́ | /sʲɪˈm⁽ʲ⁾ja/ | Also здоро́вье |
| -лся: optional ⁽ʲ⁾ | учи́лся | /ʊˈt͡ɕiɫs⁽ʲ⁾ə/ | Only after л |
22. Brackets and Fronting of a and u
If bracket is set the words are enclosed in [ ] (the app does not use it). Then, to make the
sequence rules easy, ʲ is added temporarily to the inherently soft č ǰ ɕ ӂ j.
a, u and ʊ between two soft consonants (ʲ + vowel + any consonant
+ ʲ) are replaced by æ and ʉ using the table fronting; a vowel
between a soft consonant and an optionally soft one produces two output strings.
| Rule | Example Input | Output | Description |
|---|---|---|---|
| Soft + a + soft → æ | пять | /pʲætʲ/ | Fronting |
| Soft + u + soft → ʉ | лю́ди | /ˈlʲʉdʲɪ/ | Fronting |
| Soft + a + optionally soft | ля́мпя | /ˈlʲampʲə/, /ˈlʲæmʲpʲə/ | Two variants (hard and unfronted, soft and fronted) |
bracket=y |
до́м | /[ˈdom]/ | Square brackets (not available in the app) |
23. Conversion to IPA and Cleanup
Each output string goes through the final conversions. The table translit_conv replaces the internal
single-letter consonants, translit_conv_j handles cʲ and ĵʲ, two adjacent
reduced vowels merge, the dark L is written, and the helper symbols are removed.
| Internal | IPA | Example |
|---|---|---|
c, cʲ |
t͡s, t͡sʲ | пти́ца /ˈptʲit͡sə/ |
č, ĉ |
t͡ɕ, t͡ʂ | ту́ча /ˈtut͡ɕə/, лу́чший /ˈɫut͡ʂʂɨj/ |
ĝ, ǰ, ĵ |
d͡ʐ, d͡ʑ, d͡z | дже́м /ˈd͡ʐʐɛm/, до́чь бы /ˈdod͡ʑ‿bɨ/, от зо́лота /ɐd͡z‿ˈzoɫətə/ |
š, ž, ɕ, ӂ |
ʂ, ʐ, ɕ, ʑ | ши́на /ˈʂɨnə/, жена́ /ʐɨˈna/, щёки /ˈɕːɵkʲɪ/, дро́жжи /ˈdroʐːɨ/, /ˈdroʑːɪ/ |
g |
ɡ (U+0261) | го́род /ˈɡorət/ |
l not followed by ʲ |
ɫ | лук /ɫuk/ / люк /lʲuk/ |
ə + [ɐə] |
ɐ + ɐ | по абази́ну /pɐ‿ɐbɐˈzʲinʊ/ |
24. Result
ru_ipa_main returns a list (one entry per variant). export.ipa concatenates the lists of all
spelling variants, and export.ipa_string joins them with ", ". This is why the
ж-variants appear inside one pair of slashes in the app when the handler's fallback path is used (see
Known Issues).
Module Options Not Used by the App
| Parameter | Meaning | Effect |
|---|---|---|
adj |
Force the -ого → -ово rewrite inside ru_ipa_main |
Redundant here, since apply_tr_fixes already does it |
gem |
y, o, n, or X/Y/... for each word |
Keep, make optional, or remove gemination (see the table in the gemination section) |
bracket |
y / n |
Wrap the result in square brackets |
pos |
Part of speech of each word | Selects the value of unstressed final -е and the -ться behavior |
zhpal |
y / n |
Force or suppress the soft ʑː variant of зж/жж |
is_transformed |
Text already passed through apply_tr_fixes |
Skips the spelling rewrites |
Note for maintainers: ru-translit.lua calls ulower and uupper
without declaring them. They are defined as globals near the top of ru-pron_wasm.lua, so that file
must be loaded first. The adapter also prints a small debugging line at load time.
Common Issues & Limitations
Known Transcription Problems
This table shows known issues where the automatic transcription may be incorrect. The "System Output" column is real engine output (for cases that concern the app's fallback path it is the handler's output, otherwise the output for the stress-marked word as the browser would produce it from the lexicon). The "Correct IPA" column is also real engine output, obtained from a correct stress, a correct option or a respelled input (named in the cell).
| Input | System Output | Correct IPA | Cause | What to Do |
|---|---|---|---|---|
| чу́вство | /ˈt͡ɕufstvə/ | /ˈt͡ɕustvə/ (respelled input) | The module has rules for стн, здн but none for -вств-, so в is kept and devoiced | Respell as чу́ство |
| здра́вствуйте | /ˈzdrafstvʊjtʲe/ | /ˈzdrastvʊjtʲe/ (respelled input) | Same: -вств- is not simplified | Respell as здра́ствуйте |
| коне́чно | /kɐˈnʲet͡ɕnə/ | /kɐˈnʲeʂnə/ (respelled input) | Only что-words get ч → ш; -чн- is otherwise unchanged, although коне́чно (and ску́чно) are pronounced with [ʂn] | Respell with ш |
| ску́чно | /ˈskut͡ɕnə/ | /ˈskuʂnə/ (respelled input) | Same | Respell with ш |
| кафе́ | /kɐˈfʲe/ | /kɐˈfɛ/ (respelled input) | Spelling-based softness: е is assumed to soften ф, but many loanwords keep the consonant hard and have [ɛ] | Respell with э |
| оте́ль | /ɐˈtʲelʲ/ | /ɐˈtɛlʲ/ (respelled input) | Same | Respell with э |
| жужжать (not in the lexicon) | /ˈʐuʐːətʲ, ˈʐuʑːɪtʲ/,/ʐʊˈʐːatʲ, ʐʊˈʑːætʲ/ | /ʐʊˈʐːatʲ/, /ʐʊˈʑːætʲ/ (the module's two variants as separate items) | The module returns two pronunciations for жж; the handler wraps the string, joined by a comma and space, in one pair
of slashes. The page cycles values by splitting on /,, so each stress variant is shown as one item that
still contains both ж-variants |
Read both parts inside the item |
| США | /ˈʂːa/ | Spelled-out letter names, with stress on the last syllable (no respelling reproduces them exactly: a respelled эсшэа́ gives /ɪʂɨˈa/ because unstressed э is reduced) | Initialisms are read like ordinary words | Do not rely on the output for initialisms |
| Лего (not in the lexicon) | /ˈlʲeɡə/,/lʲɪˈvo/ | /ˈlʲeɡə/ (the first variant) | The -ого/-его rewrite works on spelling; the exception list only fits particular stress positions, so the variant with stress on the final о is pronounced like a genitive ending | Pick the variant that matches the actual stress |
| мужчина (not in the lexicon) | /ˈmuɕːɪnə/,/mʊˈɕːinə/,/mʊɕːɪˈna/ | Variant 2 is the real stress | One variant for every stress position; the first one is not necessarily right | Click until the stress matches |
Other Limitations
- By design the module renders unstressed final -е as [e] after a soft consonant (по́ле /ˈpolʲe/); other realizations
(/ˈpolʲə/, /ˈpolʲɪ/) need the
posoption, which the app does not pass. - Stress is only known from the lexicon (or typed by the user); the module never guesses it.
- The rules cover standard Moscow pronunciation. Dialects and fast-speech reductions are not modeled.
- Numbers, symbols and Latin letters inside Russian words are dropped or passed through unchanged.
- The module's own FIXME list mentions open issues such as the pronunciation of final unstressed -е before a pause and -э after paired consonants in loanwords.
Related Pronunciation Guides
Help pages for related languages in this tool:
For technical issues or suggestions, please visit our GitHub repository.