| 84 | } |
| 85 | |
| 86 | void LocalisationService::OpenLanguage(int32_t id) |
| 87 | { |
| 88 | CloseLanguages(); |
| 89 | if (id == LANGUAGE_UNDEFINED) |
| 90 | { |
| 91 | throw std::invalid_argument("id was undefined"); |
| 92 | } |
| 93 | |
| 94 | auto preferredLanguage = LanguagePackFactory::FromLanguageId(id); |
| 95 | if (preferredLanguage != nullptr) |
| 96 | { |
| 97 | _currentLanguage = id; |
| 98 | _languageOrder.emplace_back(id); |
| 99 | _loadedLanguages.emplace_back(std::move(preferredLanguage)); |
| 100 | TryLoadFonts(*this); |
| 101 | } |
| 102 | else |
| 103 | { |
| 104 | throw std::runtime_error("Unable to open language " + std::to_string(id)); |
| 105 | } |
| 106 | |
| 107 | auto checkLanguage = LanguagesDescriptors[id].fallback; |
| 108 | while (checkLanguage != LANGUAGE_UNDEFINED) |
| 109 | { |
| 110 | _languageOrder.emplace_back(checkLanguage); |
| 111 | auto fallbackLanguagePack = LanguagePackFactory::FromLanguageId(checkLanguage); |
| 112 | if (fallbackLanguagePack != nullptr) |
| 113 | { |
| 114 | _loadedLanguages.emplace_back(std::move(fallbackLanguagePack)); |
| 115 | } |
| 116 | |
| 117 | checkLanguage = LanguagesDescriptors[checkLanguage].fallback; |
| 118 | } |
| 119 | |
| 120 | if (id != LANGUAGE_ENGLISH_UK) |
| 121 | { |
| 122 | _languageOrder.emplace_back(LANGUAGE_ENGLISH_UK); |
| 123 | auto englishLanguagePack = LanguagePackFactory::FromLanguageId(LANGUAGE_ENGLISH_UK); |
| 124 | if (englishLanguagePack != nullptr) |
| 125 | { |
| 126 | _loadedLanguages.emplace_back(std::move(englishLanguagePack)); |
| 127 | } |
| 128 | else |
| 129 | { |
| 130 | throw std::runtime_error("Unable to open the English language file!"); |
| 131 | } |
| 132 | } |
| 133 | } |
| 134 | |
| 135 | void LocalisationService::CloseLanguages() |
| 136 | { |
no test coverage detected