]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/intl.cpp
mac encodings support
[wxWidgets.git] / src / common / intl.cpp
index a383076d0f6342f623c89744add3efcf7e8a8415..0a3c746a53666fd636b187025c55c3b63312a2b8 100644 (file)
@@ -672,12 +672,11 @@ wxPluralFormsNode*wxPluralFormsParser::logicalOrExpression()
             rn->setNode(0, un.release());
             return rn.release();
         }
-        else
-        {
-            un->setNode(0, ln.release());
-            un->setNode(1, rn.release());
-            return un.release();
-        }
+
+
+        un->setNode(0, ln.release());
+        un->setNode(1, rn.release());
+        return un.release();
     }
     return ln.release();
 }
@@ -712,12 +711,10 @@ wxPluralFormsNode* wxPluralFormsParser::logicalAndExpression()
             rn->setNode(0, un.release());
             return rn.release();
         }
-        else
-        {
-            un->setNode(0, ln.release());
-            un->setNode(1, rn.release());
-            return un.release();
-        }
+
+        un->setNode(0, ln.release());
+        un->setNode(1, rn.release());
+        return un.release();
     }
     return ln.release();
 }
@@ -1218,7 +1215,7 @@ void wxMsgCatalogFile::FillHash(wxMessagesHash& hash, bool convertEncoding) cons
     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
@@ -1372,6 +1369,7 @@ wxLocale::wxLocale()
   m_pszOldLocale = NULL;
   m_pMsgCat = NULL;
   m_language = wxLANGUAGE_UNKNOWN;
+  m_initialized = false;
 }
 
 // NB: this function has (desired) side effect of changing current locale
@@ -1381,6 +1379,10 @@ bool wxLocale::Init(const wxChar *szName,
                     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;
@@ -1423,7 +1425,7 @@ bool wxLocale::Init(const wxChar *szName,
   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] )
@@ -1569,7 +1571,11 @@ bool wxLocale::Init(int language, int flags)
         }
         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
@@ -1653,7 +1659,7 @@ bool wxLocale::Init(int language, int flags)
                     (flags & wxLOCALE_CONV_ENCODING) != 0);
     free(szLocale);
 
-    if ( ret )
+    if (IsOk()) // setlocale() succeeded
         m_language = lang;
 
     return ret;
@@ -2232,6 +2238,8 @@ wxFontEncoding wxLocale::GetSystemEncoding()
     {
         return wxFONTENCODING_CP950;
     }
+#elif defined(__WXMAC__)
+    return wxMacGetFontEncFromSystemEnc( CFStringGetSystemEncoding() ) ;
 #elif defined(__UNIX_LIKE__) && wxUSE_FONTMAP
     wxString encname = GetSystemEncodingName();
     if ( !encname.empty() )
@@ -2414,14 +2422,14 @@ const wxChar *wxLocale::GetString(const wxChar *szOrigString,
             if ( szDomain != NULL )
             {
                 wxLogTrace(_T("i18n"),
-                           _T("string '%s'[%d] not found in domain '%s' for locale '%s'."),
+                           _T("string '%s'[%ld] not found in domain '%s' for locale '%s'."),
                            szOrigString, n, szDomain, m_strLocale.c_str());
 
             }
             else
             {
                 wxLogTrace(_T("i18n"),
-                           _T("string '%s'[%d] not found in locale '%s'."),
+                           _T("string '%s'[%ld] not found in locale '%s'."),
                            szOrigString, n, m_strLocale.c_str());
             }
         }
@@ -2473,6 +2481,11 @@ bool wxLocale::AddCatalog(const wxChar *szDomain)
     // 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;
   }
 }
@@ -3285,7 +3298,7 @@ void wxLocale::InitLanguagesDB()
    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")