#include <AppKit.h>
#include <LocaleRoster.h>
#include <TypeConstants.h>
#include "SDL_internal.h"
#include "../SDL_syslocale.h"
bool SDL_SYS_GetPreferredLocales(char *buf, size_t buflen)
{
BLocaleRoster *roster = BLocaleRoster::Default();
roster->Refresh();
BMessage msg;
if (roster->GetPreferredLanguages(&msg) != B_OK) {
return SDL_SetError("BLocaleRoster couldn't get preferred languages");
}
const char *key = "language";
type_code typ = B_ANY_TYPE;
int32 numlangs = 0;
if ((msg.GetInfo(key, &typ, &numlangs) != B_OK) || (typ != B_STRING_TYPE)) {
return SDL_SetError("BLocaleRoster message was wrong");
}
for (int32 i = 0; i < numlangs; i++) {
const char *str = NULL;
if (msg.FindString(key, i, &str) != B_OK) {
continue;
}
const size_t len = SDL_strlen(str);
if (buflen <= len) {
break; }
SDL_strlcpy(buf, str, buflen);
buf += len;
buflen -= len;
if (i < (numlangs - 1)) {
if (buflen <= 1) {
break; }
buf[0] = ','; buf[1] = '\0';
buf++;
buflen--;
}
}
return true;
}