#pragma implementation "intl.h"
#endif
+#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.
+#define __INTERNAL_DEFS
+#endif
+
// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
if ( convertEncoding )
{
wxFontEncoding targetEnc = wxFONTENCODING_SYSTEM;
- wxFontEncoding enc = wxFontMapper::Get()->CharsetToEncoding(charset, FALSE);
+ wxFontEncoding enc = wxFontMapper::Get()->CharsetToEncoding(m_charset, FALSE);
if ( enc == wxFONTENCODING_SYSTEM )
{
convertEncoding = FALSE; // unknown encoding
}
-wxLocale::wxLocale()
+void wxLocale::DoCommonInit()
{
m_pszOldLocale = NULL;
m_pMsgCat = NULL;
m_language = wxLANGUAGE_UNKNOWN;
+ m_initialized = false;
}
// NB: this function has (desired) side effect of changing current locale
bool bLoadDefault,
bool bConvertEncoding)
{
+ wxASSERT_MSG( !m_initialized,
+ _T("you can't call wxLocale::Init more than once") );
+
+ m_initialized = true;
m_strLocale = szName;
m_strShort = szShort;
m_bConvertEncoding = bConvertEncoding;
// TODO: how to find languageId
// SetLocaleInfo(languageId, SORT_DEFAULT, localeName);
#else
- m_pszOldLocale = wxSetlocale(LC_ALL, szLocale);
- if ( m_pszOldLocale )
- m_pszOldLocale = wxStrdup(m_pszOldLocale);
+ wxMB2WXbuf oldLocale = wxSetlocale(LC_ALL, szLocale);
+ if ( oldLocale )
+ m_pszOldLocale = wxStrdup(oldLocale);
+ else
+ m_pszOldLocale = NULL;
#endif
if ( m_pszOldLocale == NULL )
if ( m_strShort.IsEmpty() ) {
// FIXME I don't know how these 2 letter abbreviations are formed,
// this wild guess is surely wrong
- if ( szLocale[0] )
+ if ( szLocale && szLocale[0] )
{
m_strShort += (wxChar)wxTolower(szLocale[0]);
if ( szLocale[1] )
}
else
{
- int codepage = -1;
+ int codepage
+ #ifdef SETLOCALE_FAILS_ON_UNICODE_LANGS
+ = -1
+ #endif
+ ;
wxUint32 lcid = MAKELCID(MAKELANGID(info->WinLang, info->WinSublang),
SORT_DEFAULT);
// FIXME
(flags & wxLOCALE_CONV_ENCODING) != 0);
free(szLocale);
- if ( ret )
+ if (IsOk()) // setlocale() succeeded
m_language = lang;
return ret;
{
return wxFONTENCODING_CP950;
}
+#elif defined(__WXMAC__)
+ TextEncoding encoding = 0 ;
+#if TARGET_CARBON
+ encoding = CFStringGetSystemEncoding() ;
+#else
+ UpgradeScriptInfoToTextEncoding ( smSystemScript , kTextLanguageDontCare , kTextRegionDontCare , NULL , &encoding ) ;
+#endif
+ return wxMacGetFontEncFromSystemEnc( encoding ) ;
#elif defined(__UNIX_LIKE__) && wxUSE_FONTMAP
wxString encname = GetSystemEncodingName();
if ( !encname.empty() )
if ( szDomain != NULL )
{
wxLogTrace(_T("i18n"),
- _T("string '%s'[%d] not found in domain '%s' for locale '%s'."),
- szOrigString, n, szDomain, m_strLocale.c_str());
+ _T("string '%s'[%lu] not found in domain '%s' for locale '%s'."),
+ szOrigString, (unsigned long)n,
+ szDomain, m_strLocale.c_str());
}
else
{
wxLogTrace(_T("i18n"),
- _T("string '%s'[%d] not found in locale '%s'."),
- szOrigString, n, m_strLocale.c_str());
+ _T("string '%s'[%lu] not found in locale '%s'."),
+ szOrigString, (unsigned long)n, m_strLocale.c_str());
}
}
#endif // __WXDEBUG__
// don't add it because it couldn't be loaded anyway
delete pMsgCat;
+ // it's OK to not load English catalog, the texts are embedded in
+ // the program:
+ if (m_strShort.Mid(0, 2) == wxT("en"))
+ return TRUE;
+
return FALSE;
}
}
// accessors for locale-dependent data
// ----------------------------------------------------------------------------
-#if 0
-
#ifdef __WXMSW__
/* static */
-wxString wxLocale::GetInfo(wxLocaleInfo index)
+wxString wxLocale::GetInfo(wxLocaleInfo index, wxLocaleCategory WXUNUSED(cat))
{
wxString str;
wxChar buffer[256];
buffer[0] = wxT('\0');
switch (index)
{
- case wxSYS_DECIMAL_SEPARATOR:
+ case wxLOCALE_DECIMAL_POINT:
count = ::GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SDECIMAL, buffer, 256);
if (!count)
- str << ".";
+ str << wxT(".");
else
str << buffer;
break;
+#if 0
case wxSYS_LIST_SEPARATOR:
count = ::GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SLIST, buffer, 256);
if (!count)
- str << ",";
+ str << wxT(",");
else
str << buffer;
break;
case wxSYS_LEADING_ZERO: // 0 means no leading zero, 1 means leading zero
count = ::GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_ILZERO, buffer, 256);
if (!count)
- str << "0";
+ str << wxT("0");
else
str << buffer;
break;
+#endif
default:
- wxFAIL_MSG("Unknown System String !");
+ wxFAIL_MSG(wxT("Unknown System String !"));
}
return str;
}
#else // !__WXMSW__
/* static */
-wxString wxLocale::GetInfo(wxLocaleInfo index, wxLocaleCategory)
+wxString wxLocale::GetInfo(wxLocaleInfo index, wxLocaleCategory cat)
{
- return wxEmptyString;
-}
+ struct lconv *locale_info = localeconv();
+ switch (cat)
+ {
+ case wxLOCALE_CAT_NUMBER:
+ switch (index)
+ {
+ case wxLOCALE_THOUSANDS_SEP:
+ return wxString(locale_info->thousands_sep,
+ *wxConvCurrent);
+ case wxLOCALE_DECIMAL_POINT:
+ return wxString(locale_info->decimal_point,
+ *wxConvCurrent);
+ default:
+ return wxEmptyString;
+ }
+ case wxLOCALE_CAT_MONEY:
+ switch (index)
+ {
+ case wxLOCALE_THOUSANDS_SEP:
+ return wxString(locale_info->mon_thousands_sep,
+ *wxConvCurrent);
+ case wxLOCALE_DECIMAL_POINT:
+ return wxString(locale_info->mon_decimal_point,
+ *wxConvCurrent);
+ default:
+ return wxEmptyString;
+ }
+ default:
+ return wxEmptyString;
+ }
+}
#endif // __WXMSW__/!__WXMSW__
-#endif // 0
-
// ----------------------------------------------------------------------------
// global functions and variables
// ----------------------------------------------------------------------------
LNG(wxLANGUAGE_SWAHILI, "sw_KE", LANG_SWAHILI , SUBLANG_DEFAULT , "Swahili")
LNG(wxLANGUAGE_SWEDISH, "sv_SE", LANG_SWEDISH , SUBLANG_SWEDISH , "Swedish")
LNG(wxLANGUAGE_SWEDISH_FINLAND, "sv_FI", LANG_SWEDISH , SUBLANG_SWEDISH_FINLAND , "Swedish (Finland)")
- LNG(wxLANGUAGE_TAGALOG, "tl" , 0 , 0 , "Tagalog")
+ LNG(wxLANGUAGE_TAGALOG, "tl_PH", 0 , 0 , "Tagalog")
LNG(wxLANGUAGE_TAJIK, "tg" , 0 , 0 , "Tajik")
LNG(wxLANGUAGE_TAMIL, "ta" , LANG_TAMIL , SUBLANG_DEFAULT , "Tamil")
LNG(wxLANGUAGE_TATAR, "tt" , LANG_TATAR , SUBLANG_DEFAULT , "Tatar")