in the part reading the dictionary, we should avoid the String.toLowerCase() without any locale here, at least use String.toLowerCase(Locale.ENGLISH) for consistency?
Yep, for consistency it's probably better to lowercase using an explicit locale than system default. I tested with my name, and Locale.ENGLISH converts Ø->ø, so I'm happy
shouldn't we case fold the affixes too? however, i'm guessing most of these are already in lowercase.
The way it works now is that we case fold the input word after affixes are applied, before comparing with dictionary words. So if either input word or affixes are not lower-case they will both be. We could add a test for it to make sure..
are we "merging" dictionary entries here (I think we should in this lower-casing mode?)
No, we are not, meaning, I guess, that Foo/B would overwrite foo/A in your example? Would you like to take a stab at the merging code?