#include #include #include "result.h" #include "runtime/env.h" #include "kernel/svc.h" #include "services/set.h" #include "nacp.h" static u32 g_nacpLanguageTable[15] = { [SetLanguage_JA] = 2, [SetLanguage_ENUS] = 0, [SetLanguage_ENGB] = 1, [SetLanguage_FR] = 3, [SetLanguage_DE] = 4, [SetLanguage_ES419] = 5, [SetLanguage_ES] = 6, [SetLanguage_IT] = 7, [SetLanguage_NL] = 8, [SetLanguage_FRCA] = 9, [SetLanguage_PT] = 10, [SetLanguage_RU] = 11, [SetLanguage_KO] = 12, [SetLanguage_ZHTW] = 13, [SetLanguage_ZHCN] = 14, }; //Official sw uses nsam for this, but since that's a privileged service, use set-service instead for compatibility with newer system-versions. Result nacpGetLanguageEntry(NacpStruct* nacp, NacpLanguageEntry** langentry) { Result rc=0; u64 LanguageCode=0; SetLanguage Language=0; NacpLanguageEntry *entry = NULL; u32 i=0; if (nacp==NULL || langentry==NULL) return MAKERESULT(Module_Libnx, LibnxError_BadInput); *langentry = NULL; rc = setInitialize(); if (R_FAILED(rc)) return rc; rc = setGetSystemLanguage(&LanguageCode); if (R_SUCCEEDED(rc)) rc = setMakeLanguage(LanguageCode, &Language); if (Language < 0) rc = MAKERESULT(Module_Libnx, LibnxError_BadInput); if (R_SUCCEEDED(rc) && Language >= 15) Language = SetLanguage_ENUS;//Use ENUS for unsupported system languages. setExit(); if (R_FAILED(rc)) return rc; entry = &nacp->lang[g_nacpLanguageTable[Language]]; if (entry->name[0]==0 && entry->author[0]==0) { for(i=0; i<16; i++) { entry = &nacp->lang[i]; if (entry->name[0] || entry->author[0]) break; } } if (entry->name[0]==0 && entry->author[0]==0) return rc; *langentry = entry; return rc; }