| 464 | //========================================================================== |
| 465 | |
| 466 | void FStringTable::UpdateLanguage(const char *language) |
| 467 | { |
| 468 | if (language) activeLanguage = language; |
| 469 | else language = activeLanguage.GetChars(); |
| 470 | size_t langlen = strlen(language); |
| 471 | |
| 472 | int LanguageID = (langlen < 2 || langlen > 3) ? |
| 473 | MAKE_ID('e', 'n', 'u', '\0') : |
| 474 | MAKE_ID(language[0], language[1], language[2], '\0'); |
| 475 | |
| 476 | currentLanguageSet.Clear(); |
| 477 | |
| 478 | auto checkone = [&](uint32_t lang_id) |
| 479 | { |
| 480 | auto list = allStrings.CheckKey(lang_id); |
| 481 | if (list && currentLanguageSet.FindEx([&](const auto &element) { return element.first == lang_id; }) == currentLanguageSet.Size()) |
| 482 | currentLanguageSet.Push(std::make_pair(lang_id, list)); |
| 483 | }; |
| 484 | |
| 485 | checkone(override_table); |
| 486 | checkone(global_table); |
| 487 | checkone(LanguageID); |
| 488 | checkone(LanguageID & MAKE_ID(0xff, 0xff, 0, 0)); |
| 489 | checkone(default_table); |
| 490 | } |
| 491 | |
| 492 | //========================================================================== |
| 493 | // |