diff --git a/Minecraft.Client/Common/Consoles_App.cpp b/Minecraft.Client/Common/Consoles_App.cpp index c3a623d5f..288cd88f9 100644 --- a/Minecraft.Client/Common/Consoles_App.cpp +++ b/Minecraft.Client/Common/Consoles_App.cpp @@ -9776,7 +9776,7 @@ void CMinecraftApp::getLocale(vector &vecWstrLocales) locales.push_back(eMCLang_zhCN); break; -#if defined __PS3__ || defined __ORBIS__ || defined __PSVITA__ || defined _DURANGO +#if defined __PS3__ || defined __ORBIS__ || defined __PSVITA__ || defined _DURANGO || defined _WINDOWS64 case XC_LANGUAGE_DANISH: locales.push_back(eMCLang_daDA); locales.push_back(eMCLang_daDK); diff --git a/Minecraft.Client/Common/Media/MediaWindows64.arc b/Minecraft.Client/Common/Media/MediaWindows64.arc index 599228503..264149468 100644 Binary files a/Minecraft.Client/Common/Media/MediaWindows64.arc and b/Minecraft.Client/Common/Media/MediaWindows64.arc differ diff --git a/Minecraft.Client/Common/UI/UIController.cpp b/Minecraft.Client/Common/UI/UIController.cpp index b12ea5e73..429a40373 100644 --- a/Minecraft.Client/Common/UI/UIController.cpp +++ b/Minecraft.Client/Common/UI/UIController.cpp @@ -392,8 +392,8 @@ void UIController::SetupFont() if (m_eTargetFont == m_eCurrentFont) { - // 4J-JEV: If we're ingame, reload the font to update all the text. - if (app.GetGameStarted()) app.SetAction(ProfileManager.GetPrimaryPad(), eAppAction_ReloadFont); + // 4J-JEV: Font type unchanged but language changed - always reload UI to refresh strings. + app.SetAction(ProfileManager.GetPrimaryPad(), eAppAction_ReloadFont); return; } @@ -708,7 +708,7 @@ int UIController::reloadSkinThreadProc(void* lpParam) controller->m_groups[eUIGroup_Fullscreen]->ReloadAll(); // 4J Stu - Don't do this on windows, as we never navigated forwards to start with -#ifndef _WINDOW64 +#ifndef _WINDOWS64 controller->NavigateBack(0, false, eUIScene_COUNT, eUILayer_Tooltips); #endif LeaveCriticalSection(&ms_reloadSkinCS); diff --git a/Minecraft.Client/Common/UI/UIScene_LanguageSelector.h b/Minecraft.Client/Common/UI/UIScene_LanguageSelector.h index b5c3d4c6c..05fea2c59 100644 --- a/Minecraft.Client/Common/UI/UIScene_LanguageSelector.h +++ b/Minecraft.Client/Common/UI/UIScene_LanguageSelector.h @@ -16,7 +16,7 @@ #define HAS_LANGUAGE_KO_KR(exp) exp, #define HAS_LANGUAGE_CN_TW(exp) exp, -#ifdef _DURANGO +#if defined(_DURANGO) || defined(_WINDOWS64) #define HAS_LANGUAGE_CN_CN(exp) exp, #define HAS_LANGUAGE_SK_SK(exp) exp, #define HAS_LANGUAGE_CZ_CZ(exp) exp, diff --git a/Minecraft.Client/Common/UI/UIScene_SettingsOptionsMenu.cpp b/Minecraft.Client/Common/UI/UIScene_SettingsOptionsMenu.cpp index 7b4d3d9dd..77a024a77 100644 --- a/Minecraft.Client/Common/UI/UIScene_SettingsOptionsMenu.cpp +++ b/Minecraft.Client/Common/UI/UIScene_SettingsOptionsMenu.cpp @@ -2,7 +2,7 @@ #include "UI.h" #include "UIScene_SettingsOptionsMenu.h" -#if defined(_XBOX_ONE) +#if defined(_XBOX_ONE) || defined(_WINDOWS64) #define _ENABLE_LANGUAGE_SELECT #endif diff --git a/Minecraft.Client/Extrax64Stubs.cpp b/Minecraft.Client/Extrax64Stubs.cpp index 0147896ca..e1597c812 100644 --- a/Minecraft.Client/Extrax64Stubs.cpp +++ b/Minecraft.Client/Extrax64Stubs.cpp @@ -544,8 +544,113 @@ void XMemDestroyDecompressionContext(XMEMDECOMPRESSION_CONTEXT Context) //#ifndef __PS3__ #if !(defined _DURANGO || defined __PS3__ || defined __ORBIS__ || defined __PSVITA__) +#ifdef _WINDOWS64 +DWORD XGetLanguage() +{ + // If the player has explicitly selected a language in-game, honour that override + unsigned char ucLang = app.GetMinecraftLanguage(0); + if (ucLang != MINECRAFT_LANGUAGE_DEFAULT) return ucLang; + + // Otherwise detect the Windows UI language and map it to an XC_LANGUAGE_ constant + WCHAR wchLocaleName[LOCALE_NAME_MAX_LENGTH]; + GetUserDefaultLocaleName(wchLocaleName, LOCALE_NAME_MAX_LENGTH); + eMCLang eLang = static_cast(app.get_eMCLang(wchLocaleName)); + + switch (eLang) + { + case eMCLang_jaJP: + return XC_LANGUAGE_JAPANESE; + case eMCLang_deDE: + case eMCLang_deAT: + case eMCLang_deCH: + return XC_LANGUAGE_GERMAN; + case eMCLang_frFR: + case eMCLang_frCA: + case eMCLang_frBE: + case eMCLang_frCH: + return XC_LANGUAGE_FRENCH; + case eMCLang_esES: + case eMCLang_esMX: + case eMCLang_laLAS: + case eMCLang_esAR: + case eMCLang_esCL: + case eMCLang_esCO: + case eMCLang_esUS: + return XC_LANGUAGE_SPANISH; + case eMCLang_itIT: + return XC_LANGUAGE_ITALIAN; + case eMCLang_koKR: + return XC_LANGUAGE_KOREAN; + case eMCLang_zhCHT: + case eMCLang_zhHK: + case eMCLang_zhTW: + case eMCLang_hant: + return XC_LANGUAGE_TCHINESE; + case eMCLang_ptPT: + case eMCLang_ptBR: + return XC_LANGUAGE_PORTUGUESE; + case eMCLang_plPL: + return XC_LANGUAGE_POLISH; + case eMCLang_ruRU: + return XC_LANGUAGE_RUSSIAN; + case eMCLang_svSV: + case eMCLang_svSE: + return XC_LANGUAGE_SWEDISH; + case eMCLang_trTR: + return XC_LANGUAGE_TURKISH; + case eMCLang_nbNO: + case eMCLang_noNO: + case eMCLang_nnNO: + return XC_LANGUAGE_BNORWEGIAN; + case eMCLang_nlNL: + case eMCLang_nlBE: + return XC_LANGUAGE_DUTCH; + case eMCLang_zhCN: + case eMCLang_zhSG: + case eMCLang_hans: + case eMCLang_csCS: + return XC_LANGUAGE_SCHINESE; + case eMCLang_fiFI: + return XC_LANGUAGE_FINISH; + case eMCLang_daDA: + case eMCLang_daDK: + return XC_LANGUAGE_DANISH; + case eMCLang_csCZ: + case eMCLang_enCZ: + return XC_LANGUAGE_CZECH; + case eMCLang_skSK: + case eMCLang_enSK: + return XC_LANGUAGE_SLOVAK; + case eMCLang_elEL: + case eMCLang_elGR: + case eMCLang_enGR: + return XC_LANGUAGE_GREEK; + case eMCLang_enGB: + case eMCLang_enIE: + case eMCLang_enAU: + case eMCLang_enNZ: + case eMCLang_enCA: + case eMCLang_enUS: + default: + return XC_LANGUAGE_ENGLISH; + } +} + +DWORD XGetLocale() +{ + // If the player has explicitly selected a locale in-game, honour that override + unsigned char ucLocale = app.GetMinecraftLocale(0); + if (ucLocale != MINECRAFT_LANGUAGE_DEFAULT) return ucLocale; + + // Otherwise map the Windows UI locale to an XC_LOCALE_ constant + WCHAR wchLocaleName[LOCALE_NAME_MAX_LENGTH]; + GetUserDefaultLocaleName(wchLocaleName, LOCALE_NAME_MAX_LENGTH); + return app.get_xcLang(wchLocaleName); +} +#else DWORD XGetLanguage() { return 1; } DWORD XGetLocale() { return 0; } +#endif DWORD XEnableGuestSignin(BOOL fEnable) { return 0; } #endif diff --git a/Minecraft.Client/Windows64Media/Media/languages.loc b/Minecraft.Client/Windows64Media/Media/languages.loc index e3d9162b0..d8b16ec65 100644 Binary files a/Minecraft.Client/Windows64Media/Media/languages.loc and b/Minecraft.Client/Windows64Media/Media/languages.loc differ diff --git a/Minecraft.Client/Windows64Media/loc/stringsLanguages.xml b/Minecraft.Client/Windows64Media/loc/stringsLanguages.xml index 1468a170b..41bb557eb 100644 --- a/Minecraft.Client/Windows64Media/loc/stringsLanguages.xml +++ b/Minecraft.Client/Windows64Media/loc/stringsLanguages.xml @@ -37,4 +37,6 @@ Greek Turkish + Slovak + Czech \ No newline at end of file diff --git a/Minecraft.Client/Windows64Media/strings.h b/Minecraft.Client/Windows64Media/strings.h index 63e3a7f4e..217fe44c8 100644 --- a/Minecraft.Client/Windows64Media/strings.h +++ b/Minecraft.Client/Windows64Media/strings.h @@ -2189,6 +2189,8 @@ #define IDS_LANG_NORWEGIAN 2183 #define IDS_LANG_GREEK 2184 #define IDS_LANG_TURKISH 2185 +#define IDS_LANG_SLOVAK 2286 +#define IDS_LANG_CZECH 2287 #define IDS_LEADERBOARD_KILLS_EASY 2186 #define IDS_LEADERBOARD_KILLS_NORMAL 2187 #define IDS_LEADERBOARD_KILLS_HARD 2188