| 9 | #include "../ProgramLog/error/winrt.hpp" |
| 10 | |
| 11 | bool Localization::SetProcessLangOverride(std::wstring_view langOverride) |
| 12 | { |
| 13 | // make double null terminated |
| 14 | std::wstring language(langOverride); |
| 15 | language.push_back(L'\0'); |
| 16 | |
| 17 | // set for process |
| 18 | if (!SetProcessPreferredUILanguages(MUI_LANGUAGE_NAME, language.c_str(), nullptr)) |
| 19 | { |
| 20 | LastErrorHandle(spdlog::level::err, L"Failed to set process UI language. Is the language set in the configuration file a BCP-47 language name?"); |
| 21 | |
| 22 | // don't try setting thread & XAML language, it'll probably fail too |
| 23 | return false; |
| 24 | } |
| 25 | |
| 26 | // SetProcessPreferredUILanguages does not affect the lookup behavior of resource functions like FindResourceEx, |
| 27 | // only SetThreadPreferredUILanguages does. |
| 28 | // WHY WINDOWS |
| 29 | // WHAT IS THE POINT OF SETPROCESSPREFERREDUILANGUAGES THEN |
| 30 | if (!SetThreadPreferredUILanguages(MUI_LANGUAGE_NAME, language.c_str(), nullptr)) |
| 31 | { |
| 32 | LastErrorHandle(spdlog::level::err, L"Failed to set thread UI language. Is the language set in the configuration file a BCP-47 language name?"); |
| 33 | |
| 34 | // remove the existing override to not fail in a partially localized to previous value state |
| 35 | SetProcessPreferredUILanguages(MUI_LANGUAGE_NAME, nullptr, nullptr); |
| 36 | |
| 37 | // don't try setting XAML language, it'll probably fail too |
| 38 | return false; |
| 39 | } |
| 40 | |
| 41 | // set for WinRT resources |
| 42 | try |
| 43 | { |
| 44 | winrt::Windows::ApplicationModel::Resources::Core::ResourceContext::SetGlobalQualifierValue(L"Language", langOverride); |
| 45 | } |
| 46 | catch (const winrt::hresult_error& err) |
| 47 | { |
| 48 | HresultErrorHandle(err, spdlog::level::err, L"Failed to set resource language override. Is the language set in the configuration file a BCP-47 language name?"); |
| 49 | |
| 50 | // remove the existing overrides to not fail in a partially localized to previous value state |
| 51 | SetThreadPreferredUILanguages(MUI_LANGUAGE_NAME, nullptr, nullptr); |
| 52 | SetProcessPreferredUILanguages(MUI_LANGUAGE_NAME, nullptr, nullptr); |
| 53 | |
| 54 | return false; |
| 55 | } |
| 56 | |
| 57 | return true; |
| 58 | } |
| 59 | |
| 60 | Util::null_terminated_wstring_view Localization::LoadLocalizedResourceString(uint16_t resource, HINSTANCE hInst, WORD lang) |
| 61 | { |