1
0
Fork 0

Codechange: use std::string for Windows' ISO code mangling

pull/10968/head
Rubidium 2023-06-07 06:57:15 +02:00 committed by rubidium42
parent a541b8217d
commit b2a8d8aea4
2 changed files with 9 additions and 11 deletions

View File

@ -541,23 +541,21 @@ const char *GetCurrentLocale(const char *)
static WCHAR _cur_iso_locale[16] = L"";
void Win32SetCurrentLocaleName(const char *iso_code)
void Win32SetCurrentLocaleName(std::string iso_code)
{
/* Convert the iso code into the format that windows expects. */
char iso[16];
if (strcmp(iso_code, "zh_TW") == 0) {
strecpy(iso, "zh-Hant", lastof(iso));
} else if (strcmp(iso_code, "zh_CN") == 0) {
strecpy(iso, "zh-Hans", lastof(iso));
if (iso_code == "zh_TW") {
iso_code = "zh-Hant";
} else if (iso_code == "zh_CN") {
iso_code = "zh-Hans";
} else {
/* Windows expects a '-' between language and country code, but we use a '_'. */
strecpy(iso, iso_code, lastof(iso));
for (char *c = iso; *c != '\0'; c++) {
if (*c == '_') *c = '-';
for (char &c : iso_code) {
if (c == '_') c = '-';
}
}
MultiByteToWideChar(CP_UTF8, 0, iso, -1, _cur_iso_locale, lengthof(_cur_iso_locale));
MultiByteToWideChar(CP_UTF8, 0, iso_code.c_str(), -1, _cur_iso_locale, lengthof(_cur_iso_locale));
}
int OTTDStringCompare(std::string_view s1, std::string_view s2)

View File

@ -1887,7 +1887,7 @@ bool ReadLanguagePack(const LanguageMetadata *lang)
SetCurrentGrfLangID(_current_language->newgrflangid);
#ifdef _WIN32
extern void Win32SetCurrentLocaleName(const char *iso_code);
extern void Win32SetCurrentLocaleName(std::string iso_code);
Win32SetCurrentLocaleName(_current_language->isocode);
#endif