// headers
// ----------------------------------------------------------------------------
-#if defined(__BORLAND__) && !defined(__WXDEBUG__)
- // There's a bug in Borland's compiler that breaks wxLocale with -O2,
- // so make sure that flag is not used for this file:
- #pragma option -O1
-#endif
-
#ifdef __EMX__
// The following define is needed by Innotek's libc to
// make the definition of struct localeconv available.
{
retloc = wxSetlocaleTryUTF(LC_ALL, localeAlt);
if ( !retloc )
- retloc = wxSetlocaleTryUTF(LC_ALL, locale.Left(2));
+ retloc = wxSetlocaleTryUTF(LC_ALL, localeAlt.Left(2));
}
}
!wxGetEnv(wxT("LC_MESSAGES"), &langFull) &&
!wxGetEnv(wxT("LANG"), &langFull))
{
- // no language specified, threat it as English
- return wxLANGUAGE_ENGLISH;
+ // no language specified, treat it as English
+ return wxLANGUAGE_ENGLISH_US;
}
if ( langFull == _T("C") || langFull == _T("POSIX") )
{
- // default C locale
- return wxLANGUAGE_ENGLISH;
+ // default C locale is English too
+ return wxLANGUAGE_ENGLISH_US;
}
// the language string has the following form
{
if ( ms_languagesDB->Item(i).Language == lang )
{
- return &ms_languagesDB->Item(i);
+ // We need to create a temporary here in order to make this work with BCC in final build mode
+ wxLanguageInfo *ptr = &ms_languagesDB->Item(i);
+ return ptr;
}
}
const wxLanguageInfo *info = wxLocale::GetLanguageInfo(lang);
wxCHECK_MSG( info, false, _T("invalid language") );
-#ifdef __WIN32__
+#if defined(__WIN32__)
if ( !info->WinLang )
return false;
SORT_DEFAULT),
LCID_INSTALLED
) )
- return false;
-#else // !__WIN32__
- // TODO: test if setlocale(info->CanonicalName) works under other OS?
-#endif // __WIN32__/!__WIN32__
+ return false;
+
+#elif defined(__UNIX__)
+
+ // Test if setting the locale works, then set it back.
+ wxMB2WXbuf oldLocale = wxSetlocale(LC_ALL, wxEmptyString);
+ wxMB2WXbuf tmp = wxSetlocaleTryUTF(LC_ALL, info->CanonicalName);
+ if ( !tmp )
+ {
+ // Some C libraries don't like xx_YY form and require xx only
+ tmp = wxSetlocaleTryUTF(LC_ALL, info->CanonicalName.Left(2));
+ if ( !tmp )
+ return false;
+ }
+ // restore the original locale
+ wxSetlocale(LC_ALL, oldLocale);
+#endif
return true;
}
// add a catalog to our linked list
bool wxLocale::AddCatalog(const wxChar *szDomain)
{
- return AddCatalog(szDomain, wxLANGUAGE_ENGLISH, NULL);
+ return AddCatalog(szDomain, wxLANGUAGE_ENGLISH_US, NULL);
}
// add a catalog to our linked list