GetUserPreferredUILanguages ​​() никогда не возвращает более двух языков - PullRequest
0 голосов
/ 17 октября 2018

Я пытаюсь получить полный список предпочитаемых языков пользователя из приложения C ++ / Qt, настроенного на странице «Регион и язык» в настройках пользователя:

Preferred languages

Для этого я пытаюсь использовать функцию WinAPI GetUserPreferredUILanguages ​​() в современной системе Windows 10 Pro.

Однакофункция всегда возвращает только первую запись (основной язык отображения Windows) и «en-US».Если английский язык настроен как основной язык, то возвращается только «en-US».Например, если я настроил (немецкий, французский, английский), [[de-de »,« en-US »] возвращается, французский опускается.Если я добавлю больше языков в список, они также будут опущены.Я также посмотрел на Управление языком интерфейса пользователя , но безрезультатно.Например, GetSystemPreferredUILanguages ​​() возвращает только «en-US». GetUILanguageFallbackList () возвращает ["de-de", "de", "en-US", "en"].

Код, который я использую:

// calling GetUserPreferredUILanguages() twice, once to get number of 
// languages and required buffer size, then to get the actual data

ULONG numberOfLanguages = 0;
DWORD bufferLength = 0;
const auto result1 = GetUserPreferredUILanguages(MUI_LANGUAGE_NAME,
                                                 &numberOfLanguages,
                                                 nullptr,
                                                 &bufferLength);
// result1 is true, numberOfLanguages=2

QVector<wchar_t> languagesBuffer(static_cast<int>(bufferLength));
const auto result2 = GetUserPreferredUILanguages(MUI_LANGUAGE_NAME,
                                                 &numberOfLanguages,
                                                 languagesBuffer.data(),
                                                 &bufferLength);

// result2 is true, languageBuffer contains "de-de", "en-US"

Это неправильная функция или я неправильно понимаю конфигурацию языка в Windows 10?Как я могу получить полный список предпочитаемых языков?Я вижу UWP API , который мог бы выполнять эту работу, но, если возможно, я бы хотел использовать C API, поскольку он легче интегрируется с базой кода C ++ под рукой.(неуправляемый C ++, то есть)

...