#elif defined(__UNIX__)
// Test if setting the locale works, then set it back.
- const char *oldLocale = wxSetlocaleTryUTF8(LC_ALL, info->CanonicalName);
- if ( !oldLocale )
- {
- // Some C libraries don't like xx_YY form and require xx only
- oldLocale = wxSetlocaleTryUTF8(LC_ALL, ExtractLang(info->CanonicalName));
- if ( !oldLocale )
- return false;
- }
+ char * const oldLocale = wxStrdupA(setlocale(LC_ALL, NULL));
+
+ // Some platforms don't like xx_YY form and require xx only so test for
+ // it too.
+ const bool
+ available = wxSetlocaleTryUTF8(LC_ALL, info->CanonicalName) ||
+ wxSetlocaleTryUTF8(LC_ALL, ExtractLang(info->CanonicalName));
+
// restore the original locale
wxSetlocale(LC_ALL, oldLocale);
+
+ free(oldLocale);
+
+ if ( !available )
+ return false;
#endif
return true;