| 228 | } |
| 229 | |
| 230 | void FillLanguageTerritory(const char* lang, struct SystemInfo* info) |
| 231 | { |
| 232 | // find first separator ("-" or "_") |
| 233 | size_t lang_len = lang ? strlen(lang) : 0; |
| 234 | if(lang_len == 0) |
| 235 | { |
| 236 | lang = "en_US"; |
| 237 | lang_len = strlen(lang); |
| 238 | dmLogWarning("Invalid language parameter (empty field), using default: \"%s\"", lang); |
| 239 | } |
| 240 | const char* sep_first = lang; |
| 241 | while((*sep_first) && (*sep_first != '-') && (*sep_first != '_')) |
| 242 | ++sep_first; |
| 243 | const char* sep_last = lang + lang_len; |
| 244 | while((sep_last != sep_first) && (*sep_last != '-') && (*sep_last != '_')) |
| 245 | --sep_last; |
| 246 | |
| 247 | dmStrlCpy(info->m_Language, lang, dmMath::Min((size_t)(sep_first+1 - lang), sizeof(info->m_Language))); |
| 248 | |
| 249 | if(sep_first != sep_last) |
| 250 | { |
| 251 | // Language script. If there is more than one separator, this is what is up to the last separator (<language>-<script>-<territory> format) |
| 252 | dmStrlCpy(info->m_DeviceLanguage, lang, dmMath::Min((size_t)(sep_last+1 - lang), sizeof(info->m_DeviceLanguage))); |
| 253 | info->m_DeviceLanguage[sep_first - lang] = '-'; |
| 254 | } |
| 255 | else |
| 256 | { |
| 257 | // No language script, default to language |
| 258 | dmStrlCpy(info->m_DeviceLanguage, info->m_Language, dmMath::Min(sizeof(info->m_DeviceLanguage), sizeof(info->m_Language))); |
| 259 | } |
| 260 | |
| 261 | if(sep_last != lang + lang_len) |
| 262 | { |
| 263 | dmStrlCpy(info->m_Territory, sep_last + 1, dmMath::Min((size_t)((lang + lang_len) - sep_last), sizeof(info->m_Territory))); |
| 264 | } |
| 265 | else |
| 266 | { |
| 267 | info->m_Territory[0] = '\0'; |
| 268 | dmLogWarning("No territory detected in language string: \"%s\"", lang); |
| 269 | } |
| 270 | |
| 271 | } |
| 272 | |
| 273 | void PumpMessageQueue() { |
| 274 | #if defined(__EMSCRIPTEN__) |
no test coverage detected