I have a simple native Visual C++ program that uses .mui files to implement resource localization. If I request fr-fr in SetThreadPreferredUILanguages, Windows finds my prog.exe.mui file in the fr-fr subdirectory, and uses it fine. But if I request just fr (no locale), although Windows sees the resource file (as verified by GetFileMUIPath), it refuses to use it, and goes to the ultimate fallback language. If I request fr-ca, and only have fr available, it refuses to use it.
This happens for "es" as well, and I imagine any "neutral language". It does work for "vi", so it's not a two-letter issue, but I think that's because vi is an actual locale, not a neutral language. This happens under both Windows 7 and Windows 8.
Is there something different I'm supposed to do in preparing the .mui files, the resources, or calling SetThreadPreferredUILanguages than I do for every other 4-letter specification? This is so basic ... what am I missing??