Function _vsnprintf_l from CRT does not respect passed locale. When called, it calls
e = _WCTOMB_S(&retval, L_buffer, _countof(L_buffer), *p++);
in file output.c, which calls
return _wctomb_s_l(pRetValue, dst, sizeInBytes, wchar, NULL);
in wctomb.c (please notice NULL instead of given locale). As a result call
in line 77 of wctomb.c resolves default locale instead of passed one.
Applies to _sprintf_l, _vsnprintf_l, _sprintf_s_l, _vsnprintf_s_l and possibly other relatives.