Ukrainian Pronunciation and IPA Transcription Guide
← Back to Ukrainian transcription ↑ All Languages
Table of Contents
- Getting Started
- Quick Reference (Glossary)
- How to Read IPA Symbols
- Ukrainian Pronunciation Guide
- Stress (Наголос)
- Unstressed Vowels
- Iotated Vowels (є, ї, ю, я) and the Apostrophe
- Soft Consonants and the Soft Sign (ь)
- Voicing Assimilation (and Why There Is No Final Devoicing)
- Г and Ґ
- The Letter В: [ʋ], [w], [u̯], [ʍ]
- The Letter Й: [j] and [i̯]
- Affricates and Digraphs (дж, дз, ц, ч, щ)
- Long (Geminate) Consonants
- Consonant Cluster Changes
- Dark and Soft L
- Orthography to IPA Mapping
- Using the Tool: Practical Notes
- For Developers
- Related Pronunciation Guides
About This Tool
This Ukrainian transcription app uses the Wiktionary Ukrainian Pronunciation Module to generate phonetic transcriptions for Ukrainian text. IPA (International Phonetic Alphabet) is a standardized system for transcribing speech sounds. This tool converts Ukrainian Cyrillic spelling into IPA, helping learners, linguists, and developers understand pronunciation.
Ukrainian spelling is close to phonemic, but the stress is not written in ordinary text, and stress decides how vowels sound (for example, unstressed а becomes /ɐ/). The transcription therefore needs to know which vowel is stressed. The app uses a comprehensive lexicon extracted from Wiktionary data dumps (a "V4" lexicon that stores the position of the stressed vowel for each word form). For words found in the lexicon, the browser chooses the stress automatically. For words that are not found, the app generates one transcription for every possible stress position, and you click the word to cycle through them.
The examples on this page show the rule path: each one is the output of the real pronunciation module called on a word with its stress marked (for example вода́). In the app, a lexicon word reaches the same module with the stress taken from the dictionary, so the result is the same transcription.
Dialects & Limitations
- Supported: Standard Ukrainian (literary) pronunciation, style "Default".
- Not supported: Regional dialects (Carpathian, Polissian, etc.).
- Edge cases: Proper names, recent loanwords, and words missing from the lexicon need the right stress variant to be picked by you. See Common Issues & Limitations.
- Word-by-word: Each word is transcribed independently. Cross-word effects (such as the в / у and і / й alternation after vowels, or sandhi between words) are not modeled.
- Input script: Text must be Cyrillic. A word that mixes in Latin look-alike letters is returned unchanged instead of transcribed.
Phonemic vs Phonetic
- Phonetic (the only form available for Ukrainian): A detailed, narrow transcription that shows non-distinctive variations in pronunciation (allophones), for example unstressed vowel reduction (/ɐ/, /ʊ/, /e/), softened consonants (/lʲ/), and the several sounds of the letter в.
- Phonemic: Not offered. The Wiktionary module produces only a phonetic transcription.
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, e.g. в as /ʋ/ in ві́тер /ˈʋʲiter/ but as /w/ in вода́ /wɔˈda/.
- Stress (Наголос)
- The syllable pronounced with most force. In Ukrainian it is free (can fall on any syllable) and is marked in dictionaries with an acute accent, e.g. вода́. The IPA mark ˈ goes before the stressed syllable.
- Acute / Grave Accent
- Combining marks U+0301 (acute) and U+0300 (grave). The module turns an acute into primary stress ˈ and a grave into secondary stress ˌ, e.g. ра̀діоприйма́ч /ˌradʲiɔprei̯ˈmat͡ʃ/.
- Palatalization (Softening)
- A consonant pronounced with the tongue raised toward the hard palate, written ʲ. Triggered by ь and by the vowels і, є, ю, я, e.g. сі́ль /ˈsʲilʲ/.
- Soft Sign (М'який знак, ь)
- A letter with no sound of its own that marks the preceding consonant as soft, e.g. кінь.
- Apostrophe (Апостроф)
- The letter ' written before я, ю, є, ї to keep the preceding consonant hard and pronounce a separate /j/, e.g. м'я́со /ˈmjasɔ/.
- Iotated Vowel
- The letters є, ї, ю, я, which spell a vowel preceded by /j/ (word-initially, after a vowel, or after an apostrophe) or a softened consonant plus vowel (after a consonant).
- Vowel Reduction
- Change of an unstressed vowel to a weaker quality. In this module: a→ɐ, u→ʊ, ɛ, ɪ→e, and ɔ→o before a stressed u or i.
- Voicing Assimilation
- A voiceless obstruent becomes voiced before a voiced obstruent, e.g. вокза́л /wɔɡˈzaɫ/ (k → ɡ before z). Ukrainian has no devoicing of voiced consonants at the end of a word.
- Final Devoicing
- The process by which voiced consonants become voiceless at word ends (German, Russian). It does not occur in this Ukrainian transcription: зуб /zʊb/ keeps b.
- Akanye
- Russian-type merging of unstressed о and а. Not implemented here: unstressed о stays /ɔ/ (сторона́ /stɔrɔˈna/).
- Affricate
- A stop released as a fricative at the same place, written with a tie bar: /t͡s/ (ц), /t͡ʃ/ (ч), /d͡z/ (дз), /d͡ʒ/ (дж).
- Tie Bar
- The combining mark ͡ joining two letters into one affricate.
- Hushing Consonants
- The "sh-type" sounds ж, ч, ш, щ (ʒ, t͡ʃ, ʃ, ʃt͡ʃ).
- Hissing Consonants
- The "s-type" sounds з, с, ц, дз (z, s, t͡s, d͡z).
- Geminate (Long) Consonant
- A consonant held longer, written ː, e.g. ві́лла /ˈʋʲiɫːɐ/.
- Glide (Non-syllabic Vowel)
- A vowel-like sound that does not form a syllable, marked ̯, e.g. /i̯/ and /u̯/ in ма́йже /ˈmai̯ʒe/ and авто́ /ɐu̯ˈtɔ/.
- Dark L
- The velarized /ɫ/ used for non-soft л, e.g. по́ле /ˈpɔɫe/.
- Lexicon (V4)
- A dictionary generated from Wiktionary dumps. For Ukrainian it stores, for each word form, a stressed spelling (the V4 format records the position of the stressed vowel). One word can have several stressed forms, e.g. "замо́к,за́мок".
- Foot Boundary
- The symbol |. In the module, commas and dashes inside the text become |. The app removes punctuation before calling the module, so you normally never see it.
- Word Boundary Marker
- The module internally wraps every word in #…# so rules can refer to word beginnings and ends. It is stripped before output.
How to Read IPA Symbols
This table helps you understand the IPA symbols used in Ukrainian transcriptions. For each symbol, we provide approximate English equivalents where possible. All examples are produced by the transcription engine.
Vowel Symbols
| IPA | Example | English Approximation | Notes |
|---|---|---|---|
| /a/ | ма́ма /ˈmamɐ/ | "father" (short) | Stressed а |
| /ɐ/ | дава́ти /dɐˈʋate/ | "cup" (UK), "sofa" | Unstressed а (reduction) |
| /ɛ/ | не́сти /ˈnɛste/ | "bed" | Stressed е |
| /e/ | зеле́ний /zeˈɫɛnei̯/ | "say" (short, no glide) | Unstressed е and и merge here |
| /ɪ/ | ми́ша /ˈmɪʃɐ/ | "sit" | Stressed и |
| /i/ | кіно́ /kʲiˈnɔ/ | "see" (short) | Letter і; never reduced |
| /ɔ/ | мо́ре /ˈmɔre/ | "law" (UK) | Letter о; stays open also unstressed |
| /o/ | коні́ /koˈnʲi/ | "go" (no glide) | Unstressed о before a stressed /u/ or /i/ |
| /u/ | му́ха /ˈmuxɐ/ | "food" (short) | Stressed у |
| /ʊ/ | суша́ /sʊˈʃa/ | "put" | Unstressed у |
Consonant Symbols
| IPA | Example | English Approximation | Notes |
|---|---|---|---|
| /ɦ/ | га́нок /ˈɦanɔk/ | "ahead" (breathy h) | Letter г; voiced glottal fricative |
| /ɡ/ | ґа́нок /ˈɡanɔk/ | "go" | Letter ґ (rare in native words) |
| /x/ | ху́тро /ˈxutrɔ/ | Scottish "loch" | Letter х |
| /ʋ/ | ві́тер /ˈʋʲiter/ | Between "v" and "w" | Default sound of в |
| /w/ | вода́ /wɔˈda/ | "water" | в before /ɔ, u/ and voiced consonants |
| /ʍ/ | вкла́д /ˈʍkɫad/ | "which" (voiceless w) | в before a voiceless consonant |
| /j/ | йо́го /ˈjɔɦɔ/ | "yes" | Letter й, and the first part of є, ї, ю, я |
| /ʒ/ | бо́жий /ˈbɔʒei̯/ | "measure" | Letter ж |
| /ʃ/ | ма́шина /ˈmaʃenɐ/ | "shoe" | Letter ш |
| /ʃt͡ʃ/ | ща́стя /ˈʃt͡ʃasʲtʲɐ/ | "fresh cheese" | Letter щ, always two sounds |
| /t͡s/ | ци́рк /ˈt͡sɪrk/ | "cats" | Letter ц |
| /t͡ʃ/ | чо́му /ˈt͡ʃɔmʊ/ | "church" | Letter ч |
| /d͡ʒ/ | дже́рело /ˈd͡ʒɛreɫɔ/ | "judge" | Digraph дж |
| /d͡z/ | дзе́ркало /ˈd͡zɛrkɐɫɔ/ | "adds" | Digraph дз |
| /ɫ/ | по́ле /ˈpɔɫe/ | "full" (dark l) | Non-soft л |
| /r/ | ра́зом /ˈrazɔm/ | Spanish "pero" (tap/trill) | Letter р |
Diacritical Marks
| Symbol | Name | Meaning | Example |
|---|---|---|---|
| ˈ | Primary stress | Main emphasis in the word | вода́ /wɔˈda/ |
| ˌ | Secondary stress | Weaker emphasis (from a grave accent in the input) | ра̀діоприйма́ч /ˌradʲiɔprei̯ˈmat͡ʃ/ |
| ʲ | Palatalization | Consonant is soft | сі́ль /ˈsʲilʲ/ |
| ː | Length mark | Consonant is long | ві́лла /ˈʋʲiɫːɐ/ |
| ͡ | Tie bar | Affricate (single unit) | ци́рк /ˈt͡sɪrk/ |
| ̯ | Non-syllabic | Glide, not a separate syllable | ма́йже /ˈmai̯ʒe/, авто́ /ɐu̯ˈtɔ/ |
| ( ) | Optional segment | Length that appears only in slow speech | ві́стці /ˈʋʲisʲt͡sʲ(ː)i/ |
| | | Foot boundary | Pause between comma-separated words (module-level only) | до́бре,га́зда /ˈdɔbre | ˈɦazdɐ/ |
Interactive Features
- Click words to cycle variants: When a word is not in the lexicon, every possible stress position is generated. Click the transcribed word to cycle through them until you reach the correct one.
- Force the stress yourself: You can type a combining acute accent (U+0301) after a vowel to mark the stress. See the known issue about how the app currently handles a mark you type.
- 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.
Multiple Pronunciation Variants
For Ukrainian, a word can show several transcriptions:
- Different stress positions: Words not found in the lexicon get one transcription per vowel. For мама the app produces /ˈmamɐ/ and /mɐˈma/.
- Homographs with different stress: Dictionary entries such as "замо́к,за́мок" give one transcription per stressed form, joined as /ipa1/,/ipa2/. For example замо́к (lock) is /zɐˈmɔk/ and за́мок (castle) is /ˈzamɔk/.
- Impossible variants are included: Since any vowel may be stressed, some variants are not real Ukrainian pronunciations. Pick the one that matches the word you mean.
When multiple variants exist, click the word to cycle through them. The currently selected variant will be used for PDF/CSV export.
Ukrainian Pronunciation Guide
This guide explains how the module turns Ukrainian spelling into sounds. Ukrainian orthography is largely phonemic: most letters have one sound. The complications are free stress, palatalization (softening), and a few assimilations. Every example below is real engine output for a word with its stress marked.
Stress (Наголос)
Ukrainian stress is free and unmarked in ordinary writing, so the module needs it as input.
- Marked with an acute accent: The accent sits on the stressed vowel (вода́, кни́га). The module converts it to ˈ and places it at the start of the syllable: вода́ /wɔˈda/, кни́га /ˈknɪɦɐ/.
- Stress goes before the onset cluster: The mark is moved back over the consonants that begin the syllable: сестра́ /seˈstra/, кни́жка /ˈknɪʒkɐ/, Дніпро́ /dʲnʲiˈprɔ/.
- Between two consonants: When the syllable boundary falls inside a cluster, the mark stands before the last consonant (or between two affricates): відчу́ти /ʋʲid͡ʒˈt͡ʃute/. Clusters that can begin a word stay together: захисти́ти /zɐxeˈstɪte/.
- Before iotated vowels: The mark sits before the /j/: моє́ /mɔˈjɛ/, Украї́на /ʊkrɐˈjinɐ/.
- Secondary stress: A grave accent in the input gives ˌ: ра̀діоприйма́ч /ˌradʲiɔprei̯ˈmat͡ʃ/.
- Monosyllables in the app: A one-vowel word is given a stressed vowel before transcription, so не appears as /ˈnɛ/ (a full vowel), although in connected speech such small words are usually unstressed. See Common Issues.
Unstressed Vowels
Unstressed vowels change as follows (stress mark is the only trigger; there is no reduction of і):
- а → ɐ: дава́ти /dɐˈʋate/ (stressed: ма́ма /ˈmamɐ/, where the final unstressed а is /ɐ/).
- у → ʊ: суша́ /sʊˈʃa/, узу́м /ʊˈzum/.
- е, и → e: unstressed е and и sound the same: лимо́н /ɫeˈmɔn/, кури́ти /kʊˈrɪte/ (unstressed и in the last syllable is /e/).
- о → ɔ (kept): сторона́ /stɔrɔˈna/. There is no "akanye" (о does not become а).
- о → o before stressed у/і: the vowel is assimilated and closed: коні́ /koˈnʲi/, ходжу́ /xoˈd͡ʒu/, подру́га /poˈdruɦɐ/.
- і is never reduced: кіно́ /kʲiˈnɔ/.
Iotated Vowels (є, ї, ю, я) and the Apostrophe
- є = /jɛ/, ї = /ji/, ю = /ju/, я = /ja/ at the start of a word or after a vowel: ї́жа /ˈjiʒɐ/, моє́ /mɔˈjɛ/, юна́к /jʊˈnak/, я́блуко /ˈjabɫʊkɔ/.
- After a consonant the /j/ is absorbed and the consonant becomes soft: лю́ди /ˈlʲude/, тя́га /ˈtʲaɦɐ/, мо́ря /ˈmɔrʲɐ/.
- After the apostrophe the consonant stays hard and /j/ is pronounced: м'я́со /ˈmjasɔ/, об'є́кт /ɔˈbjɛkt/, комп'ю́тер /kɔmˈpjuter/, сім'я́ /sʲiˈmja/.
- Typographic apostrophe: The curved ’ (U+2019) is converted to the straight ' by the app before transcription, so both spellings give the same result in the app.
Soft Consonants and the Soft Sign (ь)
- Before і: Almost every consonant is softened before the vowel і: лі́то /ˈlʲitɔ/, кі́т /ˈkʲit/, гі́рка /ˈɦʲirkɐ/, ві́тер /ˈʋʲiter/, ці́лий /ˈt͡sʲiɫei̯/, чі́тко /ˈt͡ʃʲitkɔ/.
- Hushing consonants before і: ж, ш (and ч) are also marked soft before і by this module: ші́сть /ˈʃʲisʲtʲ/, жі́нка /ˈʒʲinkɐ/ (Ukrainian orthoepy describes these as slightly softened).
- Soft sign: ь gives ʲ to the preceding consonant: сі́ль /ˈsʲilʲ/, до́ля /ˈdɔlʲɐ/, ма́ть /ˈmatʲ/.
- Softness spreads backward: In a cluster of two consonants where the second is soft, a preceding т, д, с, з, н, л is also soft: пі́сня /ˈpʲisʲnʲɐ/, ра́дість /ˈradʲisʲtʲ/, ма́ленький /ˈmaɫenʲkei̯/.
- Labials do not soften their neighbor: лі́пня /ˈlʲipnʲɐ/ keeps a hard p.
- Not softened: a consonant before the apostrophe (see above).
Voicing Assimilation (and Why There Is No Final Devoicing)
A voiceless obstruent becomes voiced when a voiced obstruent (b d z ʒ ɡ ɦ) follows it:
- вокза́л /wɔɡˈzaɫ/ (к → ɡ), футбо́л /fʊdˈbɔɫ/ (т → d), про́сьба /ˈprɔzʲbɐ/ (сь → zʲ), боротьба́ /bɔrɔdʲˈba/ (тьб → dʲb), про́шба /ˈprɔʒbɐ/ (ш → ʒ), ру́кзак /ˈruɡzɐk/.
- One direction only: A voiced consonant is not devoiced before a voiceless one: ві́дпустка /ˈʋʲidpʊstkɐ/, кі́гті /ˈkʲiɦtʲi/, ле́гко /ˈɫɛɦkɔ/.
- No final devoicing: Voiced consonants stay voiced at the end of a word: ніж /nʲiʒ/, рід /rʲid/, ніг /nʲiɦ/, зуб /zʊb/, дуб /dʊb/. (These monosyllables were passed to the module without stress; in the app they are stressed, which changes only the vowel.)
- В and sonorants do not trigger voicing: в and sonorants (m, n, l, r) are not in the trigger set, so тві́р /ˈtʲʋʲir/ keeps a voiceless t.
Г and Ґ
- г = /ɦ/ (voiced glottal fricative, the usual sound): га́нок /ˈɦanɔk/, ци́ган /ˈt͡sɪɦɐn/, ге́нерал /ˈɦɛnerɐɫ/.
- ґ = /ɡ/ (stop; rare, mainly in loanwords and a few native words): ґа́нок /ˈɡanɔk/, ґо́лос /ˈɡɔɫɔs/.
- Voicing interacts with these letters: before a voiced obstruent, к becomes /ɡ/ (ру́кзак /ˈruɡzɐk/) and х becomes /ɦ/. The letter г itself is never devoiced.
The Letter В: [ʋ], [w], [u̯], [ʍ]
The letter в is one phoneme with four realizations. The module applies them in this order:
- [u̯] after a vowel and before a consonant or the end of the word (syllable coda): ле́в /ˈɫɛu̯/, ко́ров /ˈkɔrɔu̯/, пра́вда /ˈprau̯dɐ/, авто́ /ɐu̯ˈtɔ/, ді́вчина /ˈdʲiu̯t͡ʃenɐ/.
- [w] before /ɔ, u/ and before voiced consonants (when not already [u̯]): вода́ /wɔˈda/, вуха́ /wʊˈxa/, про́вулок /ˈprɔwʊɫɔk/, лі́гво /ˈlʲiɦwɔ/.
- [ʍ] before a voiceless consonant: вкла́д /ˈʍkɫad/, вчо́ра /ˈʍt͡ʃɔrɐ/, вхі́д /ˈʍxʲid/.
- [ʋ] everywhere else (before other vowels, before soft vowels, between vowels): кра́ва /ˈkraʋɐ/, ві́тер /ˈʋʲiter/, шви́дко /ˈʃʋɪdkɔ/, хви́ля /ˈxʋɪlʲɐ/.
A one-letter word в is transcribed as /ʋ/ because words are processed one at a time; in running speech it would behave like [u̯]/[w] after a vowel.
The Letter Й: [j] and [i̯]
- [j] before a vowel: йо́го /ˈjɔɦɔ/.
- [i̯] after a vowel and before a consonant or at the end of the word: ма́йже /ˈmai̯ʒe/, мі́й /ˈmʲii̯/, ві́йна /ˈʋʲii̯nɐ/, ба́йка /ˈbai̯kɐ/.
- [i̯] at the start of a word before a consonant: йти́ /ˈi̯tɪ/.
- Endings -ий / -ій: The unstressed и reduces to /e/ and the й is a glide: зеле́ний /zeˈɫɛnei̯/, чо́рний /ˈt͡ʃɔrnei̯/.
Affricates and Digraphs (дж, дз, ц, ч, щ)
- дж = /d͡ʒ/, дз = /d͡z/: дже́рело /ˈd͡ʒɛreɫɔ/, дзе́ркало /ˈd͡zɛrkɐɫɔ/, піджа́к /pʲiˈd͡ʒak/. The sequence is read as an affricate even across a prefix boundary.
- ц = /t͡s/, ч = /t͡ʃ/: ци́рк /ˈt͡sɪrk/, чо́му /ˈt͡ʃɔmʊ/.
- щ = /ʃt͡ʃ/ (a sequence, not one sound): ща́стя /ˈʃt͡ʃasʲtʲɐ/, ще́дрий /ˈʃt͡ʃɛdrei̯/.
- Soft affricates: ґе́дзь /ˈɡɛd͡zʲ/, дзьо́б /ˈd͡zʲɔb/.
- Dental + sibilant sequences: д or т before a hissing/hushing consonant merges into an affricate: відсо́тки /ʋʲid͡zˈsɔtke/, підши́пник /pʲid͡ʒˈʃɪpnek/, відчу́ти /ʋʲid͡ʒˈt͡ʃute/, ві́дцурати /ˈʋʲid͡zt͡sʊrɐte/, бра́тство /ˈbrat͡stwɔ/, ма́тч /ˈmat͡ʃː/.
Long (Geminate) Consonants
- Doubled letters are read as one long consonant: ві́лла /ˈʋʲiɫːɐ/, ванна́ /ʋɐˈnːa/, ма́ссою /ˈmasːɔjʊ/, суббо́та /sʊˈbːɔtɐ/, ввечері́ /ʋːet͡ʃeˈrʲi/.
- Before я, ю, є, ї, і, ь the long consonant is also soft: зна́ння /ˈznanʲːɐ/, ху́ддя /ˈxudʲːɐ/, оббі́гти /ɔˈbʲːiɦte/, ста́ття /ˈstatʲːɐ/.
- Reflexive endings -ться, -шся: ви́читься /ˈʋɪt͡ʃet͡sʲːɐ/, ви́чишся /ˈʋɪt͡ʃesʲːɐ/.
- Unwritten length: зжа́ти /ˈʒːate/, сши́ти /ˈʃːɪte/, дочці́ /dɔˈt͡sʲːi/.
Consonant Cluster Changes
The module applies a few spelling-to-pronunciation simplifications that Ukrainian orthography does not show:
- нтськ → н'ськ: студе́нтський /stʊˈdɛnʲsʲkei̯/.
- нтст → нст: студе́нтство /stʊˈdɛnstwɔ/.
- стд → зд: шістдеся́т /ʃʲizdeˈsʲat/.
- стс → сс: шістсо́т /ʃʲiˈsːɔt/.
- стч → шч: пі́стчик /ˈpʲiʃt͡ʃek/.
- зш → жш, зч → жч: безшу́мний /beʒˈʃumnei̯/, розча́рувати /rɔʒˈt͡ʃarʊʋɐte/.
- Hushing + hissing: ножці́ /nozʲˈt͡sʲi/, дошці́ /doˈsʲt͡sʲi/, дочці́ /dɔˈt͡sʲːi/.
- Optional length: ві́стці /ˈʋʲisʲt͡sʲ(ː)i/ (length in parentheses is heard only in slow speech).
Dark and Soft L
- [ɫ] (dark) for every non-soft л: по́ле /ˈpɔɫe/, ма́ло /ˈmaɫɔ/, скло́ /ˈskɫɔ/, зло́чин /ˈzɫɔt͡ʃen/.
- [lʲ] before ь, і, я, ю, є, ї: до́ля /ˈdɔlʲɐ/, ві́льно /ˈʋʲilʲnɔ/, лю́ди /ˈlʲude/.
Comprehensive Spelling-to-IPA Mapping
This section lists the actual correspondences used by the engine. Where a letter changes with context, the table says which. All examples are real engine output on a stress-marked word.
1. Vowels
| Letter | IPA (stressed) | Example (stressed) | IPA (unstressed) | Example (unstressed) |
|---|---|---|---|---|
| а | /a/ | ма́ма /ˈmamɐ/ | /ɐ/ | каша́ /kɐˈʃa/ |
| е | /ɛ/ | Оде́са /ɔˈdɛsɐ/ | /e/ | зеле́ний /zeˈɫɛnei̯/ |
| и | /ɪ/ | ми́ша /ˈmɪʃɐ/ | /e/ | кури́ти /kʊˈrɪte/ |
| і | /i/ | мі́сто /ˈmʲistɔ/ | /i/ | кіно́ /kʲiˈnɔ/ |
| о | /ɔ/ | мо́ре /ˈmɔre/ | /ɔ/, or /o/ before a stressed у/і | сторона́ /stɔrɔˈna/; коні́ /koˈnʲi/ |
| у | /u/ | му́ха /ˈmuxɐ/ | /ʊ/ | суша́ /sʊˈʃa/ |
2. Iotated Vowels and the Soft Sign
| Letter | After a vowel / at word start | After a consonant | Notes |
|---|---|---|---|
| є | моє́ /mɔˈjɛ/ | Rare; normally only after a vowel or apostrophe: п'є́са /ˈpjɛsɐ/ | /jɛ/; unstressed: /je/, e.g. Євро́па /jeu̯ˈrɔpɐ/ |
| ї | ї́жа /ˈjiʒɐ/ | Украї́на /ʊkrɐˈjinɐ/ | Always /ji/ |
| ю | юна́к /jʊˈnak/ | лю́ди /ˈlʲude/ | /ju/, softens a preceding consonant |
| я | я́блуко /ˈjabɫʊkɔ/ | ля́ля /ˈlʲalʲɐ/ | /ja/, unstressed /jɐ/, softens a preceding consonant |
| ь | - | сі́ль /ˈsʲilʲ/, цьо́го /ˈt͡sʲɔɦɔ/ | No sound; adds ʲ to the preceding consonant |
| ' (apostrophe) | - | м'я́со /ˈmjasɔ/ | Hard consonant followed by /j/ |
3. Consonants (Single Letters)
| Letter | IPA | Example | Notes |
|---|---|---|---|
| б | /b/ | бу́р /ˈbur/ | Stays voiced at word end |
| в | /ʋ/ /w/ /u̯/ /ʍ/ | кра́ва /ˈkraʋɐ/ | See The Letter В |
| г | /ɦ/ | га́зета /ˈɦazetɐ/ | Voiced glottal fricative |
| ґ | /ɡ/ | ґа́ва /ˈɡaʋɐ/ | Stop |
| д | /d/ | до́бре /ˈdɔbre/ | Stays voiced at word end |
| ж | /ʒ/ | бо́жий /ˈbɔʒei̯/ | Voiced before voiced obstruents |
| з | /z/ | ра́зом /ˈrazɔm/ | |
| й | /j/ /i̯/ | йо́го /ˈjɔɦɔ/, ма́йже /ˈmai̯ʒe/ | See The Letter Й |
| к | /k/ | кі́т /ˈkʲit/ | Becomes /ɡ/ before a voiced obstruent |
| л | /ɫ/ /lʲ/ | по́ле /ˈpɔɫe/, до́ля /ˈdɔlʲɐ/ | Dark unless soft |
| м | /m/ | мо́ре /ˈmɔre/ | |
| н | /n/ | ні́ч /ˈnʲit͡ʃ/ | Soft before і |
| п | /p/ | по́ле /ˈpɔɫe/ | Becomes /b/ before a voiced obstruent |
| р | /r/ | ра́зом /ˈrazɔm/ | |
| с | /s/ | бо́сий /ˈbɔsei̯/ | Becomes /z/ before a voiced obstruent |
| т | /t/ | ту́ск /ˈtusk/ | Becomes /d/ before a voiced obstruent |
| ф | /f/ | фо́рма /ˈfɔrmɐ/ | Becomes /v/ before a voiced obstruent |
| х | /x/ | ху́тро /ˈxutrɔ/ | Becomes /ɦ/ before a voiced obstruent |
| ц | /t͡s/ | ци́рк /ˈt͡sɪrk/ | Soft before і: /t͡sʲ/ |
| ч | /t͡ʃ/ | чо́му /ˈt͡ʃɔmʊ/ | |
| ш | /ʃ/ | ма́шина /ˈmaʃenɐ/ | Voiced before voiced obstruents |
| щ | /ʃt͡ʃ/ | ща́стя /ˈʃt͡ʃasʲtʲɐ/ | Two sounds |
4. Digraphs and Special Sequences
| Spelling | IPA | Example | Notes |
|---|---|---|---|
| дж | /d͡ʒ/ | дже́рело /ˈd͡ʒɛreɫɔ/ | |
| дз | /d͡z/ | дзе́ркало /ˈd͡zɛrkɐɫɔ/ | |
| дзь | /d͡zʲ/ | ґе́дзь /ˈɡɛd͡zʲ/ | Soft affricate |
| дс | /d͡zs/ | відсо́тки /ʋʲid͡zˈsɔtke/ | |
| дш | /d͡ʒʃ/ | підши́пник /pʲid͡ʒˈʃɪpnek/ | |
| дч | /d͡ʒt͡ʃ/ | відчу́ти /ʋʲid͡ʒˈt͡ʃute/ | |
| дц | /d͡zt͡s/ | ві́дцурати /ˈʋʲid͡zt͡sʊrɐte/ | |
| тс | /t͡s/ | бра́тство /ˈbrat͡stwɔ/ | Single affricate |
| тч | /t͡ʃː/ | ма́тч /ˈmat͡ʃː/ | Long |
| тш | /t͡ʃʃ/ | ді́тши /ˈdʲit͡ʃʃe/ | |
| тц | /t͡sː/ | бра́тці /ˈbrat͡sʲːi/ | Long (soft before і) |
| тьс | /t͡sʲː/ | сміє́ться /sʲmʲiˈjɛt͡sʲːɐ/ | Reflexive -ться |
5. Contextual Changes (Summary)
| Context | Change | Example |
|---|---|---|
| Voiceless obstruent before voiced obstruent | Becomes voiced | вокза́л /wɔɡˈzaɫ/ |
| Consonant before soft consonant (т д с з н л) | Becomes soft | пі́сня /ˈpʲisʲnʲɐ/ |
| в after vowel before consonant/end | [u̯] | ле́в /ˈɫɛu̯/ |
| в before ɔ, u, voiced consonant | [w] | вуха́ /wʊˈxa/ |
| в before voiceless consonant | [ʍ] | вкла́д /ˈʍkɫad/ |
| й after vowel before consonant/end | [i̯] | мі́й /ˈmʲii̯/ |
| Unstressed а, у, е, и, о | ɐ, ʊ, e, e, ɔ/o | дава́ти /dɐˈʋate/ |
| Doubled consonant | Long consonant | ві́лла /ˈʋʲiɫːɐ/ |
| Non-soft л | [ɫ] | по́ле /ˈpɔɫe/ |
| Word-final voiced consonant | No change (no devoicing) | ніж /nʲiʒ/ |
Using the Tool: Practical Notes
Why does one word sometimes show several transcriptions, and how do I choose?
Words found in the lexicon are transcribed with the stress stored there, and homographs with different stress give one transcription per form: за́мок /ˈzamɔk/ (castle) and замо́к /zɐˈmɔk/ (lock). A word that is not in the lexicon is transcribed once for every possible stress position, and some of those variants are not real pronunciations. Click the word to cycle through them and keep the right one; see Multiple Pronunciation Variants. Open in the converter
Should I type a stress mark myself?
Only if you know the stress. A word typed with an acute accent after the stressed vowel is transcribed exactly as marked and gives a single result: вода́ /wɔˈda/. Without a mark, a word in the lexicon gets its stress from the dictionary, and any other word is offered with one variant per stress position, which you cycle by clicking. See Stress (Наголос) for how the stress mark is placed.
Why can the output differ from a pronunciation dictionary?
Each word is transcribed on its own, so effects across words, such as the в / у and і / й alternation after vowels, are not modeled. A one-vowel word is given a stressed vowel before transcription, so не́ /ˈnɛ/ appears with a full vowel although such words are usually unstressed in speech. Dialects are not supported; see Dialects & Limitations.
Is the transcription phonemic or phonetic?
Phonetic. The Wiktionary module produces only a narrow phonetic transcription for Ukrainian, so no phonemic form is offered; see Phonemic vs Phonetic.
Implementation Details (for Developers)
The transcription is produced by lua_modules/uk-pron_wasm.lua, which is the Wiktionary Ukrainian
pronunciation module (function export.pronunciation). It uses helper functions from
uk-common.lua (decompose_grave, needs_accents). The module is short: it
has no dictionary of its own and is one pass of ordered regular-expression replacements per word. In the
tables below the Output column is the final engine output for the whole word, while the
Description explains which step produced the visible effect.
Overview of the Pipeline
- App handler (scripts/utils.js): sanitize, lexicon lookup, stress variants.
- Entry checks: Cyrillic check, lowercase, grave decomposition, stress requirement.
- Word split and
#wrapping. - Orthographic cluster simplifications and geminates.
- Letter mapping (sequences first, single letters last).
- Palatalization, voicing, and sibilant assimilation.
- Vowel reduction.
- Allophones of в and й.
- Stress-mark placement and clean-up.
Stage 0. App Handler (Lexicon, Stress Variants)
In ipaHandlers.Ukrainian (scripts/utils.js), only the "Phonetic" form is available. The input is
first cleaned by sanitize(): non-letter characters are removed, the curved apostrophe ’ is
replaced by ', and the text is NFKC-normalized.
| Rule | Example Input | Output | Description |
|---|---|---|---|
Lexicon hit: each stressed form → uk_ipa.pronunciation(form, true) |
"замо́к,за́мок" (record from the V4 lexicon; the browser looks it up) | /zɐˈmɔk/,/ˈzamɔk/ | Forms are split on a comma and joined as /ipa1/,/ipa2/. Outputs are shown here by calling
the module on each form.
|
| Not in lexicon, 0 or 1 vowel → stress the vowel | сад | /ˈsad/ | One transcription (allow_unstressed = true is always passed). |
| Not in lexicon, several vowels → one variant per vowel | мама | /ˈmamɐ/,/mɐˈma/ | U+0301 is put on each vowel in turn; results are joined with a comma. Click the word to cycle. |
| Non-Cyrillic letters → module error → text returned unchanged | ра́ннiй (with Latin i) | ра́ннiй | checkScript(text, "Cyrl") throws; the handler falls back to the original text. |
Stage 1. Entry Checks and Normalization
| Rule | Example Input | Output | Description |
|---|---|---|---|
checkScript(text, "Cyrl") |
ра́ннiй (Latin i) | error (module throws) | Any alphabetic non-Cyrillic character is an error. |
com.decompose_grave + mw.ustring.lower |
ра̀діоприйма́ч | /ˌradʲiɔprei̯ˈmat͡ʃ/ | ѐ and ѝ become letter + U+0300 (secondary stress); text is lower-cased. |
com.needs_accents unless allow_unstressed |
добре (called without allow_unstressed) |
error: "Multisyllabic words ... must have an acute accent" | The app always passes true, so this check never fires in the app. |
Commas and en/em dashes → | |
до́бре,га́зда | /ˈdɔbre | ˈɦazdɐ/ | The foot-boundary marker. Whitespace is then collapsed to single spaces. |
Split on spaces and hyphens, wrap each word in # |
ки́їв-льві́в | /ˈkɪjiu̯ ˈlʲʋʲiu̯/ | Each hyphen-separated part is transcribed separately and the parts are joined with a space. |
Stage 2. Orthographic Cluster Simplifications
Table orthographic_replacements. These run first, on the lower-cased Cyrillic word. The table is
iterated with pairs(), so the order between entries is not specified. Three overlapping rules
(стськ / стс, зш / #зш, зч / #зч) therefore give different results from one run to the next;
both outcomes observed in repeated runs are shown below (see Common Issues).
| Rule | Example Input | Output | Description |
|---|---|---|---|
| нтськ → ньськ | студе́нтський | /stʊˈdɛnʲsʲkei̯/ | The т is dropped; н becomes soft. |
| нтст → нст | студе́нтство | /stʊˈdɛnstwɔ/ | т dropped in the cluster. |
| стд → зд | шістдеся́т | /ʃʲizdeˈsʲat/ | Cluster simplified and voiced. |
| стс → сː | шістсо́т | /ʃʲiˈsːɔt/ | Long s. |
| стч → шч | пі́стчик | /ˈpʲiʃt͡ʃek/ | Hushing cluster. |
| стськ → ськ | журналі́стський | /ʒʊrnɐˈlʲisʲkei̯/ or /ʒʊrnɐˈlʲisʲːkei̯/ | Intended: short sʲk. The generic стс → сː rule can fire first and leave a long consonant (varies per run). |
| зш → жш | безшу́мний | /beʒˈʃumnei̯/ | Voicing agrees with the following ш. |
| #зш → #шː (word start) | зши́ток | /ˈʃːɪtɔk/ or /ˈʒʃɪtɔk/ | Intended: initial зш becomes a long ш. If the generic зш → жш rule fires first, you get ʒʃ (varies per run). |
| зч → жч | розча́рувати | /rɔʒˈt͡ʃarʊʋɐte/ | Voiced before ч. |
| #зч → #шч (word start) | зчи́тати | /ˈʃt͡ʃɪtɐte/ or /ˈʒt͡ʃɪtɐte/ | Intended: voiceless ш. If the generic зч → жч rule fires first, the result is voiced ʒ (varies per run). |
Stage 3. Orthographic Geminates
| Rule | Example Input | Output | Description |
|---|---|---|---|
| ([бвгґд])\1 → \1ː | суббо́та, ввечері́, ві́ддати | /sʊˈbːɔtɐ/, /ʋːet͡ʃeˈrʲi/, /ˈʋʲidːɐte/ | Doubled б, в, г, ґ, д become long. |
| ([йклмнпрстфхцчшщ])\1 → \1ː | ві́лла, ванна́, ма́ссою, пі́цца | /ˈʋʲiɫːɐ/, /ʋɐˈnːa/, /ˈmasːɔjʊ/, /ˈpʲit͡sːɐ/ | Doubled sonorants and voiceless consonants. |
| жж → жː, зз → зː (not after д) | ви́жжати, бе́ззубий | /ˈʋɪʒːɐte/, /ˈbɛzːʊbei̯/ | The "not after д" test keeps дж/дз sequences from being read as geminates. |
| дждж → джː, дздз → дзː | (rare) | - | Long affricates. Not demonstrated: no common word found. |
Stage 4. Apostrophe Protection
| Rule | Example Input | Output | Description |
|---|---|---|---|
| ' → ! (temporary) | м'я́со | /ˈmjasɔ/ | The ! sits between the consonant and я, so the palatalization rules (Stage 6) do not match.
It is removed again in Stage 11. The result keeps a hard consonant followed by /j/.
|
| ’ (U+2019) → j (letter map) | м’я́со (in the raw module) | - | The raw module maps ’ straight to j, which then softens the previous consonant. The app replaces ’
by ' in sanitize() first, so the app output equals that of м'я́со.
|
Stage 5. Letter Mapping (phonetic_chars_map)
Three tables applied with ipairs in this order: first multi-letter sequences, then the two-letter
digraphs, and finally single letters (the code comments label the tables in the opposite order).
| Rule | Example Input | Output | Description |
|---|---|---|---|
| дзь → d͡zʲ, тьс → t͡sʲː | ґе́дзь, сміє́ться | /ˈɡɛd͡zʲ/, /sʲmʲiˈjɛt͡sʲːɐ/ | Soft affricates; reflexive ending as a long soft affricate. |
| дж → d͡ʒ, дз → d͡z | дже́рело, дзе́ркало | /ˈd͡ʒɛreɫɔ/, /ˈd͡zɛrkɐɫɔ/ | Digraphs. |
| дс, дш, дч, дц → affricate + next | відсо́тки, підши́пник, відчу́ти, ві́дцурати | /ʋʲid͡zˈsɔtke/, /pʲid͡ʒˈʃɪpnek/, /ʋʲid͡ʒˈt͡ʃute/, /ˈʋʲid͡zt͡sʊrɐte/ | Dental plosive assimilates to the following sibilant. |
| тс → t͡s; тш → t͡ʃʃ; тч → t͡ʃː; тц → t͡sː | бра́тство, ді́тши, ма́тч, бра́тці | /ˈbrat͡stwɔ/, /ˈdʲit͡ʃʃe/, /ˈmat͡ʃː/, /ˈbrat͡sʲːi/ | Same idea for т. |
| Single letters: а → a, б → b, в → ʋ, г → ɦ, ґ → ɡ, д → d, е → ɛ, и → ɪ, і → i, о → ɔ ... | га́зета | /ˈɦazetɐ/ | The full table is in the mapping section above. |
| є → jɛ, ї → ji, ю → ju, я → ja, й → j, ь → ʲ | є́дність | /ˈjɛdʲnʲisʲtʲ/ | Iotated vowels become j + vowel; ь becomes the palatalization mark. |
| ц → t͡s, ч → t͡ʃ, ш → ʃ, щ → ʃt͡ʃ | ща́стя | /ˈʃt͡ʃasʲtʲɐ/ | Affricates and щ. |
| U+0301 → ˈ, U+0300 → ˌ | ра̀діоприйма́ч | /ˌradʲiɔprei̯ˈmat͡ʃ/ | Accents become IPA stress marks, still placed after the vowel. |
Stage 6. Stress Mark Before the Vowel; Monosyllable Marker
| Rule | Example Input | Output | Description |
|---|---|---|---|
| ([aɛiɪuɔ])([ˈˌ]) → \2\1 | ї́жа | /ˈjiʒɐ/ | The stress mark moves in front of its vowel (final placement is Stage 11). |
One-vowel word and allow_unstressed is false → insert ⁀ before the vowel | сад (called without the flag) | /sad/ | The marker makes the vowel count as stressed for reduction, then is deleted. With the flag set, an unmarked one-vowel word stays unstressed and gives /sɐd/. The app never sends such a word: its handler adds a stress mark to any one-vowel word first, so сад appears in the app as /ˈsad/. |
Stage 7. Palatalization
Consonants in palatalizable (t d s z n l r b p ʋ f ɡ m k ɦ x ʃ ʒ, so also the
s of ц and the ʃ of ч, щ) get ʲ before i, or before
j (the j is then removed).
| Rule | Example Input | Output | Description |
|---|---|---|---|
| C(ː)(stress)i → Cʲ(ː)(stress)i | лі́то, кі́т, ці́лий, чі́тко | /ˈlʲitɔ/, /ˈkʲit/, /ˈt͡sʲiɫei̯/, /ˈt͡ʃʲitkɔ/ | Softening before і. |
| C(ː)j → Cʲ(ː) | ля́ля, тя́га, лю́ди, мо́ря | /ˈlʲalʲɐ/, /ˈtʲaɦɐ/, /ˈlʲude/, /ˈmɔrʲɐ/ | я, ю, є, ї after a consonant: the j is absorbed. |
| ʲːj → ʲː | ви́читься | /ˈʋɪt͡ʃet͡sʲːɐ/ | Clean-up after -тьс-. |
| st͡sʲ(ː) → sʲt͡sʲ(ː) | ві́стці | /ˈʋʲisʲt͡sʲ(ː)i/ | The length is written in parentheses as optional. |
Stage 8. Voicing Assimilation
Table voicing: p→b, f→v, t→d, tʲ→dʲ, s→z, sʲ→zʲ, ʃ→ʒ, k→ɡ, x→ɦ, t͡s→d͡z, t͡sʲ→d͡zʲ, t͡ʃ→d͡ʒ, ʃt͡ʃ→ʒd͡ʒ.
Each applies when followed by one or more of [bdzʒɡɦ].
| Rule | Example Input | Output | Description |
|---|---|---|---|
| k → ɡ before z | вокза́л, ру́кзак | /wɔɡˈzaɫ/, /ˈruɡzɐk/ | Regressive voicing. |
| t → d before b | футбо́л | /fʊdˈbɔɫ/ | |
| tʲ → dʲ, sʲ → zʲ | боротьба́, про́сьба | /bɔrɔdʲˈba/, /ˈprɔzʲbɐ/ | Soft variants have their own entries. |
| ʃ → ʒ | про́шба | /ˈprɔʒbɐ/ | |
| No rule for the reverse direction | ві́дпустка, кі́гті | /ˈʋʲidpʊstkɐ/, /ˈkʲiɦtʲi/ | No devoicing before voiceless consonants and none at word end. |
Stage 9. Softness Assimilation and Hushing/Hissing Assimilation
| Rule | Example Input | Output | Description |
|---|---|---|---|
| ([tdsznl])(.)ʲ → \1ʲ\2ʲ | пі́сня, ра́дість, ма́ленький | /ˈpʲisʲnʲɐ/, /ˈradʲisʲtʲ/, /ˈmaɫenʲkei̯/ | Backward softening in a two-consonant cluster. |
| Labials not in the trigger set (б п в ф м) | лі́пня | /ˈlʲipnʲɐ/ | A preceding labial stays hard. |
| Same, with affricates (t͡s, d͡z) | студе́нтці, жі́нці | /stʊˈdɛnʲt͡sʲːi/, /ˈʒʲinʲt͡sʲi/ | Neighboring dental softens before a soft affricate. |
| ʒt͡sʲ → zʲt͡sʲ; ʃt͡sʲ → sʲt͡sʲ; t͡ʃt͡sʲ → t͡sʲː; ʃsʲ → sʲː | ножці́, дошці́, дочці́, ви́чишся | /nozʲˈt͡sʲi/, /doˈsʲt͡sʲi/, /dɔˈt͡sʲːi/, /ˈʋɪt͡ʃesʲːɐ/ | Hushing consonants adopt the following hissing consonant. |
| zʒ → ʒː; sʃ → ʃː; zt͡ʃ → ʒt͡ʃ; zd͡ʒ → ʒd͡ʒ | зжа́ти, сши́ти, розча́рувати, розджа́рити | /ˈʒːate/, /ˈʃːɪte/, /rɔʒˈt͡ʃarʊʋɐte/, /rɔʒˈd͡ʒarete/ | Hissing consonants adopt the following hushing consonant. |
| t͡ʒ → d͡ʒ; t͡z → d͡z; CʲCʲCʲ → CCʲCʲ | (safety rules) | - | I did not find a common word that triggers these three; they guard against odd sequences created by earlier rules. |
Stage 10. Vowel Reduction
Conditions use the preceding character: a vowel is "stressed" if the character before it is ˈ, ˌ or the temporary ⁀ marker. This is why the stress mark must already be placed directly before the vowel (Stage 6).
| Rule | Example Input | Output | Description |
|---|---|---|---|
| unstressed a → ɐ | дава́ти, каша́ | /dɐˈʋate/, /kɐˈʃa/ | Also at the start of a word. |
| unstressed u → ʊ | суша́, узу́м | /sʊˈʃa/, /ʊˈzum/ | |
| unstressed ɔ → o before a stressed u, i or ʊ (through consonants) | коні́, ходжу́, подру́га | /koˈnʲi/, /xoˈd͡ʒu/, /poˈdruɦɐ/ | Vowel harmony toward a high stressed vowel. |
| unstressed ɛ, ɪ → e | лимо́н, зеле́ний | /ɫeˈmɔn/, /zeˈɫɛnei̯/ | One allophone for both. |
| No rule for ɔ elsewhere or for i | сторона́, кіно́ | /stɔrɔˈna/, /kʲiˈnɔ/ | No akanye. |
Stage 11. Allophones of в and й; Final Stress Placement
| Rule | Example Input | Output | Description |
|---|---|---|---|
Remove ⁀ (monosyllable marker) | - | - | Done before the в/й rules, which do not depend on stress. |
| vowel + ʋ + (consonant or #) → u̯ | ле́в, пра́вда, авто́ | /ˈɫɛu̯/, /ˈprau̯dɐ/, /ɐu̯ˈtɔ/ | в in a syllable coda. |
| ʋ + (ɔ u o ʊ b d z ʒ ɡ ɦ m n l r) → w | вода́, вуха́, про́вулок | /wɔˈda/, /wʊˈxa/, /ˈprɔwʊɫɔk/ | Before round vowels and voiced consonants. |
| ʋ + (p f t s k x ʃ) → ʍ | вкла́д, вчо́ра, вхі́д | /ˈʍkɫad/, /ˈʍt͡ʃɔrɐ/, /ˈʍxʲid/ | Before voiceless consonants. |
| otherwise ʋ stays | кра́ва, шви́дко | /ˈkraʋɐ/, /ˈʃʋɪdkɔ/ | Before other vowels or soft segments. |
| vowel + j + (consonant or #) → i̯ | ма́йже, мі́й, ві́йна | /ˈmai̯ʒe/, /ˈmʲii̯/, /ˈʋʲii̯nɐ/ | Also applies to the j of я, ю, є, ї before a consonant: Ма́йя /ˈmai̯jɐ/. |
| #j + consonant → #i̯ | йти́ | /ˈi̯tɪ/ | Word-initial й before a consonant. |
Remove temporary ! | об'є́кт | /ɔˈbjɛkt/ | Apostrophe marker deleted. |
| Stress mark 1: move before the last consonant of the onset cluster | кни́жка | /ˈknɪʒkɐ/ | Skips over ʲ and ː, then back over consonants. |
Stress mark 2-3: over tie bars and "permanent onset" clusters (perm_syl_onset) | сестра́, захисти́ти, зло́чин | /seˈstra/, /zɐxeˈstɪte/, /ˈzɫɔt͡ʃen/ | Clusters such as str, st, sp, kr, pl, ɦl stay together as an onset. |
| Stress mark 4: affricate handling | відчу́ти | /ʋʲid͡ʒˈt͡ʃute/ | The mark stands between the two affricates. |
| Stress mark 5-6: move back over remaining word-initial consonants, and over initial u̯/i̯ | Дніпро́, йти́ | /dʲnʲiˈprɔ/, /ˈi̯tɪ/ | An initial cluster is never split by the mark. |
Stage 12. Final Clean-up and Output
| Rule | Example Input | Output | Description |
|---|---|---|---|
| ʲ?ːʲ → ʲː | зна́ння | /ˈznanʲːɐ/ | Collapses duplicated softness marks around length. |
| l (not followed by ʲ) → ɫ | по́ле, до́ля | /ˈpɔɫe/, /ˈdɔlʲɐ/ | Dark l for every non-soft л. |
Join words with spaces; delete # | по-украї́нськи | /pɔ ʊkrɐˈjinʲsʲke/ | The result is returned as a plain string (the template output option is unused by the app). |
What the Module Does Not Implement
- No final devoicing and no progressive devoicing (only voiceless → voiced before a voiced obstruent).
- No akanye: unstressed о stays /ɔ/.
- No morphology: there is no prefix/suffix analysis and no automatic stress. The helper
functions in
uk-common.luafor the в/у and і/й alternation (initial_alternation) and for declension are used by other Wiktionary modules, not by this pronunciation function. - No cross-word processing: every word is wrapped in
#and handled alone.
Common Issues & Limitations
Known Transcription Problems
This table shows issues found by running the real engine. "System Output" is what the app handler returns in the Node test environment (no lexicon loaded). "Correct IPA" is either the output of the module called directly on a correctly stress-marked word, or a description in words.
| Input | System Output | Correct IPA | Cause | What to Do |
|---|---|---|---|---|
| не (small word) | /ˈnɛ/ | /ne/ (unstressed clitic, module on the bare word) | Every one-vowel word is stressed by the handler, so function words get full stressed vowels. Also: на gives /ˈna/ instead of /nɐ/; у gives /ˈu/ instead of /ʊ/. | Treat the vowel of a short function word as reduced in running speech. |
| в (preposition) | /ʋ/ | Usually [u̯] or [w] after a vowel, [ʋ] or [w] elsewhere (depends on neighbors; not modeled) | Each word is processed alone, so a one-letter preposition never sees its neighbors. The в/у and і/й alternation is not handled. | Transcribe the phrase with the preposition attached to the next word if you need the neighbor effect. |
| студент (not in lexicon) | /ˈstudent/,/stʊˈdɛnt/ | /stʊˈdɛnt/ | One variant per vowel is generated; some are impossible Ukrainian stress positions. | Click the word to cycle to the right variant. |
| Київ-Львів (hyphen) | /ˈkɪjiu̯ lʲʋʲiu̯/,/keˈjiu̯ lʲʋʲiu̯/,/kejiu̯ ˈlʲʋʲiu̯/ | /ˈkɪjiu̯ ˈlʲʋʲiu̯/ (module on ки́їв-льві́в) | Hyphen-separated parts are transcribed separately, but the handler places only one stress mark in the whole input, so the other part is unstressed. | Transcribe each part as a separate word. |
| ра́ннiй (typed with a Latin i) | ра́ннiй (unchanged) | /ˈranʲːii̯/ (module on ра́нній, Cyrillic і) | Mixed Latin and Cyrillic letters raise an error in the module and the handler returns the text as is. | Retype the Latin look-alike letters (i, o, a, e, p, c, x) in Cyrillic. |
| журналі́стський, ту́ристський, зши́ток, зчи́тати | Varies between page loads: /ʒʊrnɐˈlʲisʲkei̯/ or /ʒʊrnɐˈlʲisʲːkei̯/; /ˈʃːɪtɔk/ or /ˈʒʃɪtɔk/; /ˈʃt͡ʃɪtɐte/ or /ˈʒt͡ʃɪtɐte/ | The first output of each pair: short sʲk (стськ → ськ), long initial ʃː (#зш → #шː), voiceless ʃt͡ʃ (#зч → #шч) | The cluster rules live in a Lua table iterated with pairs(), whose order changes between runs. Overlapping rules (стс / стськ, зш / #зш, зч / #зч) then win in random order. Observed by running the same words repeatedly. |
Known module quirk. If a word like this looks wrong, reload the page and transcribe it again, or check Wiktionary. |
| м’ясо (curved apostrophe) in the raw module | /ˈmʲjasɔ/ (module alone) | /ˈmjasɔ/ (also what the app gives) | The module maps ’ to j without protecting the consonant; the app converts ’ to ' in sanitize()
so users are not affected.
|
No action in the app; relevant when calling the module directly. |
Related Pronunciation Guides
Help pages for related languages in this tool:
For technical issues or suggestions, please visit our GitHub repository.