https://bugs.winehq.org/show_bug.cgi?id=9583
--- Comment #22 from Virgo Pärna virgo@gaiasoft.ee --- I'm not a C programmer, but as far as can see: Any call to CompareString or CompareStringEx ends up calling wine_compare_string. And at that moment any locale information passed together with CompareString or CompareStringEx call (as lcid or locale parameter) is lost. wine_comparer_string ends up calling compare_unicode_weights. And CompareString/CompareStringEx end up reporting strings equal only if that call reports them equal (returns 0). And compare_unicode_weights uses collation_table. And that part of the code is little bit too complex to me. But it appears that collation_table is compiled in and is incorrect for this use. Someone, that is better at C, can correct me, if I misunderstood something. CompareStringEx is in locale.c wine_compare_string and compare_unicode_weights are in sortkey.c collation_table is in collation.c