I see some differences in the output when _create_locale() is used vs. when GetLocaleInfoEx() is used. Forex.
Thanks for the thorough review.
The function IsoLocaleName() header comment says "Convert a Windows setlocale() argument to a Unix-style one", so I was expecting above cases which gives valid values with _create_locale() should also work with GetLocaleInfoEx(). If it is fine for GetLocaleInfoEx() to return an error for the above cases, then we need an explanation of the same and probably add a few comments as well. So, I am not sure if we can conclude that GetLocaleInfoEx() is an alternative to _create_locale() at this stage.
We can get a match for those locales in non-ISO format by enumerating available locales with EnumSystemLocalesEx(), and trying to find a match.