Well, first thing that I want to say:
Ь does not have a sound (but instead "softens" the previous consonant)
is simply wrong from international point of view. It looks like true from point of view of Ukrainian (and Russian, and some other) linguistics — because every hearing is individual, different humans have different perception of sound shades and when standardizing interpretation of nuances, people often more follow tradition than real physics.
But, according to International Phonetic Alphabet, the soft sign (ь) does produce a sound, denoted as [ ʲ ]. As the sound of й is [ j ], you are quite close to truth when saying ь and й produce similar sounds (at least, closer to truth than official Ukrainian phonetics, IMHO).
In addition to producing the [ ʲ ] sound, the soft sign (ь) also sometimes modifies preceding consonant:
- ла → [ ɫa ]
- льа (ля) → [ lʲa ]
Actually, I think [ ʲ ] by its nature (very short [ i ] or [ j ], which is pronounced immediately after preceding consonant and partially mixed with it) always modifies preceding consonant, but in some cases (like л) modification is more significant than in others.
So, probably Ukrainian palatalization both modifies preceding consonant (and BTW the following vowel, which is also ignored by official Ukrainian phonetics) and inserts a ultrashort in-separated vowel. But inserting ultrashort-j-or-i is, probably, a first step for English-background learner, as it'll probably cause some modification of preceding-consonant/following-vowel per se. Then additional tuning may be needed for combination of specific consonants with [ ʲ ], e. g. л.
To get perception of [ ʲ ] I recommend you:
- listen all sound examples for Russian (sadly, it has no examples for Ukrainian, but palatalization in these languages works similarly) in the Palatalization (phonetics) Wikipedia article noting how [ ʲ ], preceding consonant and following letter are pronounced;
- enter some test words like ла льа ла льа ла льа and ту тьу ту тьу ту тьу into Google Translate and listen for generated sound:
- Google Translate pronunciation isn't ideal, but it would give some initial perception;
- official Ukrainian spelling doesn't allow to write "льа" instead of "ля" (despite "я" in this case acts like "ьа"); in some cases Google Translate pronounces "unofficial" expanded form ("ьа") correctly, in others fails to recognize it ("ье"); it's always better to write in official way;
- you can put commas instead of spaces to make pauses longer;
- listen for words with ь and consonant+{я/є/ю} on one of sites providing user-supplied pronunciations:
I understand your problem as you don't feel difference between ь and й. I assume that you know {я/є/ю/ї} decompose into {ь/й}+{а/е/у/і}. In case you don't — я, є, ю and ї:
- in the beginning of the word, after " - " (hyphen), " ' " (apostrophe), " ь " (soft sign) or any vowel (аеєиіїоюя) — turn into йа, йе, йу and йі (accordingly);
- after any consonant (бвгґджзйклмнопрстфхцчшщ) — turn into ьа, ье, ьу and [nothing, ї is never after consonant] (accordingly).
Example: "п'янючий" → "пйаньучий".
Then to get difference between ь and й you can type other samples into Google Translate, like "ля лья ля лья ля лья", "тю тью тю тью тю тью", etc (unlike previous examples that emphasizing difference between [ tu ] and [ tʲu ], these show difference between [ tʲu ] and [ tju ]).
NB: Everything above is just my personal perception. I may be simply wrong, especially when declaring that [ ʲ ] is a separate sound. Still, IMHO, such perception, even if wrong, allows to feel the difference more precisely.