Belarusian Pronunciation and IPA Transcription Guide

← Back to Belarusian transcription ↑ All Languages

Mark the stress yourself. This tool does not look words up in a dictionary and does not know where the stress falls. Unless you mark it, most words come out with no stress mark at all: вада /vada/ but вада́ (with a combining acute accent after the stressed vowel) /vaˈda/. The only automatic guess is this: if a word has no stress mark, contains exactly one letter о (or ё) and at least one other vowel, that о/ё is assumed to be stressed, because in standard spelling an unstressed о is written а (го́рад and горад both give /ˈɣorat/). Words with one vowel (ён /jon/), with no о (чалавек /t͡ʂaɫavʲek/) or with two or more о (мотоцыкл /motot͡sɨkɫ/) get no stress mark. The letter ё is not treated as inherently stressed: ёсць gives /josʲt͡sʲ/; type ё́сць (ё + U+0301) to get /ˈjosʲt͡sʲ/. To type the accent, put the combining acute (U+0301) directly after the vowel; a combining grave (U+0300) gives a secondary stress mark ˌ.

Table of Contents

About This Tool

This Belarusian transcription app uses the Wiktionary Belarusian Pronunciation Module to generate phonemic transcriptions for Belarusian text. IPA (International Phonetic Alphabet) is a standardized system for transcribing speech sounds. This tool converts Belarusian Cyrillic spelling into IPA, helping learners, linguists, and developers see how a word is pronounced. Phonemic transcription represents the abstract sound system (phonemes), while phonetic transcription shows actual speech variations (allophones).

Unlike the German or French pages, there is no lexicon here. Every word is transcribed purely by the module's rules: the text is split on spaces, each word is cleaned (everything except letters, combining marks, apostrophes and hyphens is dropped) and handed to the module's toIPA function. Because the rules only see spelling, the quality of the output depends on the spelling you type, and above all on whether you mark the stress (see the box at the top of this page).

Belarusian spelling already records the vowel reductions of the spoken language (akanye: unstressed о is written а; yakanye: unstressed е is often written я). For that reason the module maps letters to sounds almost one-to-one and applies no vowel-reduction rules of its own. What it does model is consonant palatalization, voicing assimilation, final devoicing, sibilant assimilation, gemination, the hard/soft distinction of л, and the placement of the stress mark.

Dialects & Limitations

Phonemic vs Phonetic

Quick Reference (Glossary)

Phoneme
The smallest unit of sound in a language that distinguishes meaning (e.g., /p/ vs. /b/ in English "pat" vs. "bat").
Allophone
A variant pronunciation of a phoneme that doesn't change meaning.
Palatalization (soft consonant)
A consonant pronounced with the middle of the tongue raised towards the hard palate, written ʲ after the consonant, e.g. ліс /lʲis/. A consonant followed by е ё ю я і or ь is soft.
Hard consonant
A consonant with no palatalization, e.g. the ɫ in ла /ɫa/.
Soft sign (ь)
A letter with no sound of its own that makes the preceding consonant soft: соль /solʲ/.
Akanye / Yakanye
The Belarusian reduction of unstressed о to a and of unstressed е to ʲa. Belarusian spelling already writes it, so the module does not apply it: it reads а as a and я as ʲa exactly as written.
Affricate
A consonant that begins as a stop and ends as a fricative, e.g. t͡s (ц) and d͡z (дз).
Tie bar
The combining mark ͡ joining two symbols into one affricate: t͡ʂ, d͡ʐ.
Retroflex / hard sibilant
The symbols ʂ and ʐ are what Wiktionary uses for the hard ш and ж (and t͡ʂ for ч).
Velar fricative
The Belarusian г is a fricative ɣ (the voiced partner of x), not a stop. The stop ɡ is written ґ.
Non-syllabic u
The glide u̯ in кроў /krou̯/. It is the letter ў right after a vowel.
Final devoicing
Voiced obstruents become voiceless at the end of a word: зуб /zup/, горад /ˈɣorat/.
Voicing assimilation
Neighbouring obstruents agree in voicing: вакзал /vaɡzaɫ/ (к becomes voiced before з), лёгка /ˈlʲoxka/ (г becomes voiceless before к).
Sibilant assimilation
A sibilant takes over the place of a following sibilant: сшыты /ʂːɨtɨ/.
Gemination
Two identical consonants in a row are written as one long consonant with ː: каменне /kamʲenʲːe/.
Primary stress
The mark ˈ is placed before the stressed syllable. It comes from a combining acute (U+0301) after the stressed vowel, or from the automatic о rule.
Secondary stress
The mark ˌ, produced only from a combining grave (U+0300) typed by the user.
Word boundary marker
An internal # placed around each word during processing; it never appears in the output.
Foot boundary
A comma or dash in the module's input is converted to | (the web app removes punctuation before calling the module, so you will not normally see it).
NFKC
Unicode normalization applied by the app to each word before transcription; it composes letters such as й and ё and leaves the combining acute in place.

How to Read IPA Symbols

The tables below list the symbols that the Belarusian module can actually produce. Each example was generated by the real engine. English approximations are rough.

Vowel Symbols

IPA Example English Approximation Notes
/a/ вада́ /vaˈda/ "father" Written а; also the vowel of я after ʲ
/ɛ/ гэта /ɣɛta/ "bed" Written э; never softens the preceding consonant
/e/ ле́с /ˈlʲes/ "bait" (shorter) Written е; always preceded by ʲ or j
/i/ ліс /lʲis/ "see" Written і; always preceded by ʲ or j
/ɨ/ бык /bɨk/ No English equivalent (like the Russian ы) Written ы; central, unrounded, normally after hard consonants
/o/ го́рад /ˈɣorat/ "more" (pure vowel) Written о and ё (after ʲ/j)
/u/ ку́бак /ˈkubak/ "food" Written у and ю
/u̯/ кро́ў /ˈkrou̯/ "cow" (final glide) Non-syllabic; the letter ў after a vowel

Consonant Symbols

IPA Example English Approximation Notes
/b/бык /bɨk/"bat"Devoices to p at the end of a word
/d/до́бры /ˈdobrɨ/"dog"Devoices to t at the end of a word
/f/фатограф /faˈtoɣraf/"fan"Voices to v before a voiced obstruent
/ɡ/ґанак /ɡanak/"go"Only from ґ, or from г after з ж с ш
/ɣ/га́лава /ˈɣaɫava/No English equivalent (voiced "h")The normal value of г
/j/я́блык /ˈjabɫɨk/, зімо́й /zʲiˈmoj/"yes"From й, from the apostrophe, and from е ё ю я і at the start of a word or after a vowel
/k/ку́бак /ˈkubak/"skin"Voices to ɡ before a voiced obstruent
/l/ліс /lʲis/"leaf"Soft л (written as lʲ)
/ɫ/ласка /ɫaska/"full" (dark l)Hard л (any л not followed by ʲ)
/m/мама /mama/"mom"
/n/нага́ /naˈɣa/"no"
/p/піць /pʲit͡sʲ/"spin"Voices to b before a voiced obstruent
/r/рука́ /ruˈka/Rolled r (Spanish "pero")
/s/сталь /stalʲ/"sun"Voices to z before a voiced obstruent
/t/тры /trɨ/"stop"Voices to d before a voiced obstruent
/v/вада́ /vaˈda/"van"Never devoiced by the module
/w/ўчора /ˈwt͡ʂora/"water"The letter ў at the start of a word or after a consonant
/x/хле́б /ˈxlʲep/Scottish "loch"Voices to ɣ before a voiced obstruent
/z/зімо́й /zʲiˈmoj/"zoo"Devoices to s at the end of a word
/ʂ/шэ́сць /ˈʂɛsʲt͡sʲ/Like "sh", tongue curled backHard ш
/ʐ/жо́лты /ˈʐoɫtɨ/Like "measure", tongue curled backHard ж
/t͡s/цётка /ˈt͡sʲotka/"cats"Letter ц; also in the digraph forms
/t͡ʂ/чалаве́к /t͡ʂaɫaˈvʲek/Hard "ch"Letter ч
/d͡z/дзе́ці /ˈd͡zʲet͡sʲi/"adze"Digraph дз
/d͡ʐ/джа́зы /ˈd͡ʐazɨ/Hard "j" in "judge"Digraph дж

Diacritical Marks

Symbol Name Meaning Example
ˈ Primary stress Main emphasis in the word; placed before the stressed syllable го́рад /ˈɣorat/
ˌ Secondary stress Weaker emphasis, only from a typed grave accent ра̀дыёста́нцыя /ˌradɨjoˈstant͡sɨja/
ʲ Palatalization The preceding consonant is soft дзень /d͡zʲenʲ/
ː Length mark The consonant is long (geminate) жыццё /ʐɨˈt͡sʲːo/
̯ Non-syllabic Glide, part of a syllable with a vowel праўда /prau̯da/
͡ Tie bar Affricate (single unit) цётка /ˈt͡sʲotka/
| Foot boundary From a comma or dash in the module's input (not reachable from the web app) год, дзень /ɣot | d͡zʲenʲ/

Interactive Features

Multiple Pronunciation Variants

For some languages (such as German or Russian) a word can have several valid transcriptions, and clicking the word cycles through them. Belarusian does not. The module is a deterministic function: the same spelling always gives the same single result. If a word has two stress patterns (homographs that differ only in stress) you choose the one you want by placing the acute accent yourself.

Belarusian Pronunciation Guide

This guide explains the spelling-to-sound correspondences as the module implements them. Belarusian spelling is close to phonemic: most letters have one value, and the module's job is mainly to apply palatalization and consonant assimilation and to place the stress mark.

Stress and How to Mark It

Belarusian stress is free (it can fall on any syllable) and is not marked in ordinary text. The module cannot predict it, so it relies on what you type.

Explicit Marks

The Automatic О Rule

When a word carries no ˈ at all, has exactly one о (the letter ё counts as an о here, because it becomes ʲo), and has at least one other vowel, the module puts the primary stress on that о. A grave accent does not prevent it.

InputOutputWhy
горад/ˈɣorat/One о, other vowels present: stressed automatically
кіно/kʲiˈno/Same, о is the last vowel
вада/vada/No о: nothing is marked
ёсць/josʲt͡sʲ/Only one vowel: nothing is marked
мотоцыкл/motot͡sɨkɫ/Two о: nothing is marked
фотагра́фія/fotaˈɣrafʲija/Explicit accent present: the rule is skipped

Because the rule only looks at the letters о/ё, it is wrong for loanwords that keep an unstressed о in spelling (фотаграфія gets its mark on фо). Always add an accent for such words.

Hard and Soft Vowel Letters (е ё ю я і)

Belarusian has five "hard" vowel letters а о у э ы and five "soft" ones я ё ю е і. A soft letter after a consonant makes that consonant soft and then gives the plain vowel; at the start of a word or after a vowel it gives the glide j plus the vowel.

LetterAfter a consonantWord-initial / after a vowel
яля /lʲa/яе /jaje/
ёлёд /lʲot/маё /maˈjo/
юлю /lʲu/юнак /junak/
елес /lʲes/ёсць (for comparison: е́сць /ˈjesʲt͡sʲ/)
іліс /lʲis/ісці /jisʲt͡sʲi/

The hard letters never soften: ла /ɫa/, лы /ɫɨ/, лэ /ɫɛ/. The letter э stays ɛ; the module never produces ɔ or ʲɛ (the source comments mention them as possible alternatives but they are not implemented).

Soft Sign and Apostrophe

Consonant Letters

Affricates: дз, дж, ц, ч

The letter pairs дз and дж are always read as one affricate with a tie bar, whenever the two letters stand next to each other (the module looks at two characters at a time): дзе́ці /ˈd͡zʲet͡sʲi/, джаз /d͡ʐas/, дзякуй /d͡zʲakuj/. Before a soft vowel or ь, дз is soft: дзень /d͡zʲenʲ/. At the end of a word or before a voiceless consonant the affricate is devoiced: будзь /but͡sʲ/, дзед /d͡zʲet/.

Г, Ґ and the Stop in зг/жг

Ў (Non-syllabic U)

The letter ў is w in the middle of the module's processing and then turns into the glide u̯ when it stands after a vowel and is not followed by another vowel: праўда /prau̯da/, кроў /krou̯/, аўтобус /au̯ˈtobus/. At the start of a word or after a consonant it stays w: ўчора /ˈwt͡ʂora/, ўсход /wsxot/.

Devoicing and Voicing Assimilation

Voiced obstruents lose their voicing at the end of a word and before a voiceless consonant; voiceless obstruents gain it before a voiced one. The pairs the module knows are:

Voicedbdɡzʐɣ
Voicelessptksʂxf (voices to v only)
Examples: зуб /zup/, ба́бка /ˈbapka/, вакзал /vaɡzaɫ/, афганістан /avɣanʲistan/, дождж /doʂt͡ʂ/

The sonorants (м н л р й) and в take no part: в is neither devoiced nor does it block assimilation, so встаць comes out as /vstat͡sʲ/ with v (see Common Issues). Each word is transcribed on its own, so there is no assimilation between words: a word-final voiced consonant is always devoiced, even if the next word starts with a vowel.

Sibilant and Palatal Assimilation

Gemination (Long Consonants)

Two identical consonants in a row (counting a following ʲ) are shown as one long consonant: ссылка /sːɨɫka/, каменне /kamʲenʲːe/, сёння /ˈsʲonʲːa/, жыццё /ʐɨˈt͡sʲːo/, аддзел /ad͡zʲːeɫ/. The same happens when assimilation makes two consonants identical (ззад /zːat/).

Hard and Soft L

Every л that is not followed by ʲ is written as the dark (hard) ɫ: лодка /ˈɫotka/, стол /stoɫ/. Soft л (before е ё ю я і ь) stays lʲ: ліса /lʲisa/, альтанка /alʲtanka/.

Comprehensive Spelling-to-IPA Mapping

Every example below was produced by the engine. A stress mark appears in the output only if it was typed (or added by the automatic о rule).

1. Vowel Letters

LetterExampleIPANotes
амама/mama/Always a; no vowel reduction is applied
осоль/solʲ/Always o; see the automatic stress rule
урука́/ruˈka/u
эгэта/ɣɛta/ɛ, no softening
ыбык/bɨk/ɨ
яля, яна́/lʲa/, /jaˈna/ʲa, or ja initially / after a vowel
ёлёд, ёлка/lʲot/, /ˈjoɫka/ʲo / jo; not automatically stressed
юлю, юнак/lʲu/, /junak/ʲu / ju
елес, е́сць/lʲes/, /ˈjesʲt͡sʲ/ʲe / je
іліс, ісці/lʲis/, /jisʲt͡sʲi/ʲi / ji

2. Simple Consonant Letters

LetterExampleIPANotes
ббык/bɨk/b
ввада́/vaˈda/v
гга́лава/ˈɣaɫava/ɣ
ґґанак/ɡanak/ɡ
ддо́бры/ˈdobrɨ/d
жжо́лты/ˈʐoɫtɨ/ʐ
ззімо́й/zʲiˈmoj/z
йзімо́й/zʲiˈmoj/j
кку́бак/ˈkubak/k
лласка, ліс/ɫaska/, /lʲis/ɫ hard, lʲ soft
ммама/mama/m
ннага́/naˈɣa/n
ппіць/pʲit͡sʲ/p
ррука́/ruˈka/r; soft before soft vowels: ряд /rʲat/
ссталь/stalʲ/s
ттры/trɨ/t
ффатограф/faˈtoɣraf/f
ххле́б/ˈxlʲep/x
ццётка/ˈt͡sʲotka/t͡s
ччалаве́к/t͡ʂaɫaˈvʲek/t͡ʂ
шшэ́сць/ˈʂɛsʲt͡sʲ/ʂ

3. Digraphs, Signs and Special Characters

InputExampleIPANotes
дздзякуй/d͡zʲakuj/Two letters read together: d͡z
джджаз/d͡ʐas/Two letters read together: d͡ʐ
ўпраўда, ўчора/prau̯da/, /ˈwt͡ʂora/u̯ after a vowel, w elsewhere
ьсоль/solʲ/Softens the preceding consonant
' or ’аб'ява/abjava/Becomes j
зг, жгмазгі́/mazˈɡʲi/г becomes ɡ
U+0301 after a vowelго́рад/ˈɣorat/Primary stress
U+0300 after a vowelла̀ўка/ˌɫau̯ka/Secondary stress
Hyphenгорад-герой/ˈɣorat ɣʲeˈroj/Becomes a space: the two parts are processed as separate words
Capital lettersМінск, МІНСК/mʲinsk/, /mʲinsk/Lower-cased first

4. Consonant plus Soft Vowel (Palatalization)

ConsonantHard (+ а)Soft (+ я)
бба /ba/бя /bʲa/
мма /ma/мя /mʲa/
нна /na/ня /nʲa/
сса /sa/ся /sʲa/
рра /ra/ря /rʲa/
лла /ɫa/ля /lʲa/
цца /t͡sa/ця /t͡sʲa/
дздза /d͡za/дзя /d͡zʲa/

5. Final Devoicing and Assimilation Examples

ContextExampleIPANotes
б at word endбоб/bop/b → p
д at word endгорад/ˈɣorat/d → t
г at word endснег/sʲnʲex/ɣ → x
з at word endпраз/pras/z → s
ж at word endнож/noʂ/ʐ → ʂ
дз at word endбудзь/but͡sʲ/d͡zʲ → t͡sʲ
Voiceless + voicedвакзал/vaɡzaɫ/k → ɡ
Voiced + voicelessлёгка/ˈlʲoxka/ɣ → x
Voiced + voicelessба́бка/ˈbapka/b → p
в at word end (not devoiced)Лев/lʲev/The module has no v → f rule

6. Letters Outside the Belarusian Alphabet

CharacterExampleIPANotes
щ (Russian)борщ/borщ/No mapping: the letter is passed through unchanged. Belarusian writes шч: боршч /borʂt͡ʂ/
ъ (Russian)объект/ˈobъʲekt/Passed through unchanged. Belarusian writes an apostrophe: аб'ект /abjekt/
и (Russian)ино/иno/Passed through unchanged; Belarusian uses і or ы
Latin lettersiPhoneError in the module; the web app shows the word unchanged

Using the Tool: Practical Notes

Why does the output often have no stress mark?

The tool has no dictionary and cannot know where the stress falls, so it prints a stress mark only if you type one. The one automatic guess is that a word with exactly one о (or ё) and at least one other vowel is stressed on that letter: го́рад /ˈɣorat/ and горад /ˈɣorat/ give the same result, whereas вада /vada/ gets no mark. See Stress and How to Mark It. Open in the converter

How do I mark the stress?

Type a combining acute accent (U+0301) directly after the stressed vowel, as in вада́ /vaˈda/. A combining grave accent (U+0300) gives secondary stress. The letter ё is not treated as stressed by itself: ёсць /josʲt͡sʲ/ has no mark, while ё́сць /ˈjosʲt͡sʲ/ does.

Why is only one transcription shown for each word?

The Belarusian module is deterministic: the same spelling always gives the same single result, so there are no variants to cycle through. If a word has two stress patterns, choose the one you want by placing the accent yourself; see Multiple Pronunciation Variants.

Why can the output differ from a pronunciation dictionary?

Rules see only spelling, so the result depends on the spelling and stress you type. Each word is transcribed on its own, which means a word-final voiced consonant is always devoiced, even before a following vowel. The automatic о rule is wrong for loanwords that keep an unstressed о in spelling, so add an accent for such words. The output is labelled phonemic but includes some surface detail; see Phonemic vs Phonetic and Common Issues.

Implementation Details (for Developers)

The transcription is produced by lua_modules/be-pron_wasm.lua, a copy of the Wiktionary Belarusian pronunciation module. The web app calls window.be_ipa.toIPA(cleanText) (utils.js, group "Direct Generation"); there is no lexicon and no post-processing in JavaScript. Per word, the app first applies sanitize() (keeps only \p{L}, \p{M}, ', ’, ‿, -; turns ’ into '; NFKC), and if the module raises an error the original text is shown. The module's entry point is export.toIPA(term). It is a fixed pipeline:

  1. Script check (checkScript(term, "Cyrl")).
  2. convert(): punctuation, lowercasing, letter mapping, word boundaries, ʲ → j, г → ɡ after sibilants, the о stress rule, w → u̯.
  3. assimilate_voicing, then assimilate_sibilants, then assimilate_palatals.
  4. Hard ɫ, then gemination.
  5. move_stress, then removal of the # markers.

Additional Key Processes

Helpers

rsub is mw.ustring.gsub keeping only the string result. do_sub_repeatedly(term, fun) and rsub_repeatedly(term, pattern, repl) apply a rule again and again until the string stops changing, so rules propagate along a cluster (for example through бяззубы).

Tables Used by the Pipeline

Table / variableContentsUsed in
correspondencesCyrillic letter (and the digraphs дз, дж, the accents and apostrophes) → IPA stringconvert()
devoicingb→p d→t ɡ→k z→s ʐ→ʂ ɣ→xassimilate_voicing
voicingp→b t→d k→ɡ s→z ʂ→ʐ x→ɣ f→vassimilate_voicing
vowel / vowel_caeɛiɨoustress rules, move_stress
consonant / consonant_cjmnlrvwbdzʐɡɣpftskxʂ (note: no ɫ and no tie-bar affricates)move_stress
accent_cˈ and ˌmove_stress, convert()
perm_syl_onsetAllowed onset clusters: spr str skr spl skl sp st sk sf sx sl sm sn pr br tr dr kr ɡr ɣr fr xr pl bl kl ɡl ɣl fl xlmove_stress step 3

1. Entry and Script Check

RuleExample InputOutputDescription
checkScript(term, "Cyrl")iPhone/iPhone/Any alphabetic character that is not Cyrillic raises an error. The app catches it and shows the input unchanged.
U+02BC counts as non-Cyrillicпʼеса/пʼеса/The module tests correspondences[u(0x2BC)] but the script check rejects the character first, so only ' and ’ work in practice.
Non-letter characters pass123Digits and symbols are not alphabetic, so the check passes and they stay in the output (the web app removes them beforehand).

2. Normalization (start of convert)

RuleExample InputOutputDescription
%s*[,–—]%s* → " | "год, дзень/ɣot | d͡zʲenʲ/Comma, en dash and em dash become the foot boundary |.
%- → spaceгорад-герой/ˈɣorat ɣʲeˈroj/A hyphen becomes a space, so each part is later treated as a separate word (including final devoicing).
Space cleanup(several spaces)Runs of whitespace become one space; leading and trailing space is removed.
mw.ustring.lowerМІНСК/mʲinsk/All input is lower-cased before mapping.

3. Letter-by-Letter Mapping

A while loop walks along the string. At each position it first looks up the next two characters in correspondences (this is how дз and дж are found), and otherwise the single character. A character without an entry is copied unchanged.

RuleExample InputOutputDescription
Two-letter lookup firstдзякуй/d͡zʲakuj/дз → d͡z, дж → d͡ʐ (with U+0361).
Soft vowel letters carry ʲля/lʲa/е → ʲe, ё → ʲo, і → ʲi, ю → ʲu, я → ʲa; ь → ʲ.
Other consonant lettersцётка, шэсць/ˈt͡sʲotka/, /ʂɛsʲt͡sʲ/ц → t͡s, ч → t͡ʂ, ш → ʂ, ж → ʐ, г → ɣ, ґ → ɡ, ў → w, ы → ɨ, э → ɛ.
Accentsго́рад, ла̀ўка/ˈɣorat/, /ˌɫau̯ka/U+0301 → ˈ and U+0300 → ˌ, in place, right after the vowel (moved later by move_stress).
Apostrophesаб'ява/abjava/U+0027, U+2019 and U+02BC → j.
No entry: pass-throughборщ/borщ/Letters the table does not know (щ ъ и) are left as they are.

The source comments next to е and о (-- or ɛ, -- or ɔ) are only notes: no alternative vowels are generated.

4. Word Boundaries

Every run of spaces is wrapped in # ((%s+) → #%1#) and the whole string is wrapped in #…#. The marker lets later patterns recognise word starts and ends. It is removed at the very end.

5. Soft Sign Becomes j Between Vowels

RuleExample InputOutputDescription
([#w vowel ʲ] accent?) ʲ (vowel) → %1j%2маё, яе/maˈjo/, /jaje/A ʲ that follows a word start, w, a vowel (with optional accent) or another ʲ, and precedes a vowel, is a j.
After ьбельё/bʲeˈlʲjo/ь + ё gives ʲj through the "after another ʲ" case.
jʲ → jп'я́ны/ˈpjanɨ/An apostrophe-derived j followed by ʲ keeps just the j.
After ўўя/wja/Because w is in the class, a soft vowel after ў also gets j.

6. Stop ɡ After a Sibilant

RuleExample InputOutputDescription
([sʂzʐ])ɣ → %1ɡмазгі́, жгу́т/mazˈɡʲi/, /ˈʐɡut/The fricative ɣ directly after s ʂ z ʐ becomes the stop.
No change elsewhereкніга/knʲiɣa/After other sounds г stays ɣ.

7. Stress Marking (the о Rule)

Two rsub_repeatedly calls place ˈ after a lone o. The character class [^#o ˈ] excludes the word boundary, other o and an existing primary stress, so each pattern matches only if the word has no primary stress and exactly one o.

RuleExample InputOutputDescription
#…o…[aeɛiɨu]…# → add ˈ after oгорад/ˈɣorat/o followed later in the word by another vowel.
#…[aeɛiɨu]…o…# → add ˈ after oкіно/kʲiˈno/o preceded earlier in the word by another vowel.
No match: no oвада/vada/Nothing is added.
No match: one vowel onlyёсць/josʲt͡sʲ/Neither pattern finds a second vowel.
No match: two oмотоцыкл/motot͡sɨkɫ/The class excludes o, so both patterns fail.
No match: explicit ˈфотагра́фія/fotaˈɣrafʲija/An existing ˈ blocks the rule. A ˌ does not: ра̀дыёста̀нцыя /ˌradɨˈjoˌstant͡sɨja/.

This stage runs before ў is converted, so the glide does not count as a vowel: кроў /krou̯/ has one vowel and is left unmarked, здароў /zdaˈrou̯/ gets a mark.

8. w → u̯

RuleExample InputOutputDescription
([vowel accent]+) w ([^vowel]) → %1u̯%2праўда, кро́ў/prau̯da/, /ˈkrou̯/w after a vowel or stress mark, and not followed by a vowel (consonant, # or accent), becomes u̯.
Stays wўчора/ˈwt͡ʂora/At a word start or after a consonant there is no preceding vowel.

9. assimilate_voicing

A loop (do_sub_repeatedly) that applies two rules until nothing changes. Characters in [ʲː͡]* (softness, length, tie bar) are skipped between the two consonants.

RuleExample InputOutputDescription
[bdɡɣzʐ] + [ptkfxsʂ#] → devoice via devoicingзуб, лёгка, ба́бка/zup/, /ˈlʲoxka/, /ˈbapka/Includes #, which is how final devoicing works; this is why every word-final voiced obstruent is devoiced, even in a hyphenated part.
[ptkfxsʂ] + (v) + [bdɡɣzʐ] → voice via voicingвакзал, афганістан/vaɡzaɫ/, /avɣanʲistan/ф becomes v, not b. An optional v in between is transparent (a nonsense test word such as ксвдо gives /ɡzvdo/).
Chain of changesдождж/doʂt͡ʂ/The loop repeats until stable, so a whole cluster is reassigned.
Not covered: v, sonorantsвстаць/vstat͡sʲ/v is in neither table: it is never devoiced.
Affricatesбудзь/but͡sʲ/The tie bar is skipped, so final z devoices first, which then devoices the d in the next iteration.

10. assimilate_sibilants

RuleExample InputOutputDescription
[sʂzʐ]([td]?͡?)([sʂzʐ]) → %2%1%2сшыты/ʂːɨtɨ/The first sibilant is replaced by the second one (and later merged to a long consonant).
With an affricate in betweenрасчэска/raʂt͡ʂɛska/The optional t͡/d͡ is kept in the middle.
Identical sibilantsбяззубы/bʲazːubɨ/Gives a double consonant, shown as a long one after the gemination step.

11. assimilate_palatals

Another do_sub_repeatedly loop. Its sub-rules, in the order they appear in the code:

RuleExample InputOutputDescription
([bzɡɣpfskxmnlv])%1ʲ → both softкаменне, ззяць/kamʲenʲːe/, /zʲːat͡sʲ/A doubled consonant before ʲ: both halves become soft (later joined into ʲː).
([szn])j → %1ʲjз'ява, сін'я/zʲjava/, /sʲinʲja/s z n before the apostrophe-j become soft.
([sn]) + soft t͡s/d͡zсцяна, ланцюг/sʲt͡sʲana/, /ɫanʲt͡sʲux/s or n before a soft affricate becomes soft.
([sz])([nl])ʲ → %1ʲ%2ʲзняць, слёзы/zʲnʲat͡sʲ/, /ˈsʲlʲozɨ/s/z before a soft n or l.
([sz])([bmpfv])ʲ with two or more vowels after itразмяня́ць, бяспека/razʲmʲaˈnʲat͡sʲ/, /bʲasʲpʲeka/Both consonants become soft. The "no assimilation in a final, non-initial syllable" comment means that when fewer than two vowels follow, nothing happens: узмя /uzmʲa/ (a made-up word to show the contrast).
#…([sz])([bmpfv])ʲ at the word startсвята, звязда́/sʲvʲata/, /zʲvʲazˈda/At the start of a word the rule always applies. The replacement string omits the leading #, so this marker is consumed.
([td]͡[sz])vʲ → %1ʲvʲцвёрды/ˈt͡sʲvʲordɨ/An affricate before vʲ becomes soft.
tsʲ → t͡sʲsʲ (and dzʲ → d͡zʲzʲ, tt͡sʲ, dd͡zʲ)ватсяп (made-up)/vat͡sʲsʲap/Handles the sequences written with separate т + с before a soft vowel. Normal ц and дз already carry a tie bar, so ordinary words do not reach these four lines.

12. Hard ɫ

RuleExample InputOutputDescription
l([^ʲ]) → ɫ%1лодка, стол/ˈɫotka/, /stoɫ/Any l not followed by ʲ (including before #) becomes dark.
Soft l keptліса, альтанка/lʲisa/, /alʲtanka/lʲ is not touched.

13. Gemination

RuleExample InputOutputDescription
([td]͡[szʂʐ]ʲ?)%1 → %1ːаддзел, жыццё/ad͡zʲːeɫ/, /ʐɨˈt͡sʲːo/A repeated affricate becomes long.
([^͡])([consonant]ʲ?)%2 → %1%2ːссылка, каменне, тт/sːɨɫka/, /kamʲenʲːe/, /tː/Any identical consonant pair (with the same softness) is shortened to one symbol plus ː. Applied repeatedly.

14. move_stress

Up to this point the stress mark sits after its vowel. move_stress shifts it to the syllable boundary. Its six rsub steps run in this order:

StepExample InputOutputDescription
1. Move before the single preceding consonant (with its ʲː)вада́, ле́с/vaˈda/, /ˈlʲes/The mark jumps back over the onset consonant of its syllable.
2. Continue over an affricate's tie barця́пер/ˈt͡sʲapʲer/A stress mark that landed inside t͡s is moved in front of the whole affricate.
3. Cluster handling with perm_syl_onsetсястра́, пітво́, ста́лы/sʲaˈstra/, /pʲitˈvo/, /ˈstaɫɨ/For a cluster a b c before the vowel: if abc is an allowed onset the mark goes before a; else if bc is allowed (or c is j) it goes before b; otherwise it stays before c.
4. Affricate safety net(none)-Handles a mark still stranded inside a tie-bar affricate: moved back before the affricate if a consonant plus j follows, otherwise forward past the affricate. No ordinary word is known to need it.
5. Word-initial consonantsмно́га/ˈmnoɣa/The mark is moved to the very start of the word, in front of all initial consonants.
6. u̯/i̯ at a word start(none)-Effectively unused here: the module never produces i̯, and u̯ cannot start a word.

Known limitation of step 3: consonant does not contain ɫ, and perm_syl_onset lists kl/pl/bl with plain l, but hard л has already been converted to ɫ at this point. Clusters ending in hard л are therefore not recognised as onsets: прыкла́д /prɨkˈɫat/, апла́та /apˈɫata/.

15. Finish

All # markers are removed and the string is returned. The app displays it between slashes (phonemic form). Two other functions in the file are not used by the app: export.remove_pron_notations(text, remove_grave) (strips grave accents from annotations) and export.show(frame) (the Wiktionary template entry point, which adds brackets and formatting). The file also contains a leftover print(export.toIPA("Злу́чаныя Шта́ты Аме́рыкі")) that runs when the module is loaded.

Not Implemented in the Module

Common Issues & Limitations

Known Transcription Problems

This table shows known issues where the automatic transcription may be incorrect. "Correct IPA" is the engine's output for the corrected input shown in brackets, unless it is a description.

Input System Output Correct IPA Cause What to Do
вада /vada/ /vaˈda/ (input вада́) Stress is not inferred; the word has no о Add an acute accent after the stressed vowel
ён /jon/ /ˈjon/ (input ё́н) ё is not treated as inherently stressed; one-vowel words get no mark Type ё followed by U+0301
ёсць /josʲt͡sʲ/ /ˈjosʲt͡sʲ/ (input ё́сць) Same as above Type ё followed by U+0301
фотаграфія /ˈfotaɣrafʲija/ /fotaˈɣrafʲija/ (input фотагра́фія) The automatic rule stresses the only written о, but loanwords keep unstressed о Always accent loanwords
мотоцыкл /motot͡sɨkɫ/ /motoˈt͡sɨkɫ/ (input мотоцы́кл) Two о: the automatic rule does not fire Add an accent to compounds and loanwords
прыкла́д /prɨkˈɫat/ Stress mark before the whole kɫ cluster (before k) move_stress does not know ɫ as a consonant, so the onset cluster is split Ignore the mark position; the stressed syllable is still the right one
горад-герой /ˈɣorat ɣʲeˈroj/ /ˈɣoradɣʲeˈroj/ (input го́радгеро́й, no hyphen) The hyphen splits the compound into two words, so the final д is devoiced Write compounds without a hyphen if you need assimilation across the join
встаць /vstat͡sʲ/ Speakers normally devoice в to [f] before a voiceless consonant The module's devoicing table has no entry for v Mentally read the initial v as [f]
пʼеса (with U+02BC) /пʼеса/ (word shown unchanged) /pjesa/ (input with the ordinary apostrophe) U+02BC is a letter, not Cyrillic, so the script check fails Use ' or ’
iPhone /iPhone/ (word shown unchanged) /ajˈfon/ (input айфо́н) Latin letters are rejected Respell foreign words in Cyrillic
борщ /borщ/ /borʂt͡ʂ/ (input боршч) The Russian letter щ has no mapping and is copied through Use Belarusian spelling (шч)
объект /ˈobъʲekt/ /abjekt/ (input аб'ект) The Russian hard sign ъ is copied through, and о is read literally Use Belarusian spelling (apostrophe, а)

Help pages for related languages in this tool:


For technical issues or suggestions, please visit our GitHub repository.