]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/intl.cpp
Integrated fixes from latest UNIX version.
[wxWidgets.git] / src / common / intl.cpp
index 168c33334363cc89378b6b44a9907ad3843779b7..3b26983d779b30e9e8777534b043678a78745f5f 100644 (file)
@@ -300,6 +300,15 @@ static wxString GetFullSearchPath(const wxChar *lang)
     if ( pszLcPath != NULL )
         searchPath << GetAllMsgCatalogSubdirs(pszLcPath, lang);
 
+#ifdef __UNIX__
+    // add some standard ones and the one in the tree where wxWin was installed:
+    searchPath
+        << GetAllMsgCatalogSubdirs(wxString(wxGetInstallPrefix()) + wxT("/share/locale"), lang)
+        << GetAllMsgCatalogSubdirs(wxT("/usr/share/locale"), lang)
+        << GetAllMsgCatalogSubdirs(wxT("/usr/lib/locale"), lang)
+        << GetAllMsgCatalogSubdirs(wxT("/usr/local/share/locale"), lang);
+#endif // __UNIX__
+
     // then take the current directory
     // FIXME it should be the directory of the executable
 #ifdef __WXMAC__
@@ -307,15 +316,11 @@ static wxString GetFullSearchPath(const wxChar *lang)
     wxGetWorkingDirectory( cwd , sizeof( cwd ) ) ;
     searchPath << GetAllMsgCatalogSubdirs(cwd, lang);
     // generic search paths could be somewhere in the system folder preferences
-#else
+#else // !Mac
     searchPath << GetAllMsgCatalogSubdirs(wxT("."), lang);
 
-    // and finally add some standard ones
-    searchPath
-        << GetAllMsgCatalogSubdirs(wxT("/usr/share/locale"), lang)
-        << GetAllMsgCatalogSubdirs(wxT("/usr/lib/locale"), lang)
-        << GetAllMsgCatalogSubdirs(wxT("/usr/local/share/locale"), lang);
-#endif
+#endif // platform
+
     return searchPath;
 }
 
@@ -444,7 +449,7 @@ void wxMsgCatalogFile::FillHash(wxMessagesHash& hash, bool convertEncoding) cons
     if ( convertEncoding )
     {
         wxFontEncoding targetEnc = wxFONTENCODING_SYSTEM;
-        wxFontEncoding enc = wxTheFontMapper->CharsetToEncoding(charset, FALSE);
+        wxFontEncoding enc = wxFontMapper::Get()->CharsetToEncoding(charset, FALSE);
         if ( enc == wxFONTENCODING_SYSTEM )
         {
             convertEncoding = FALSE; // unknown encoding
@@ -636,11 +641,7 @@ bool wxLocale::Init(const wxChar *szName,
 
 bool wxLocale::Init(int language, int flags)
 {
-    wxLanguageInfo *info = NULL;
     int lang = language;
-
-    CreateLanguagesDB();
-
     if (lang == wxLANGUAGE_DEFAULT)
     {
         // auto detect the language
@@ -653,17 +654,7 @@ bool wxLocale::Init(int language, int flags)
        return FALSE;
     }
 
-    if (lang != wxLANGUAGE_DEFAULT)
-    {
-        for (size_t i = 0; i < ms_languagesDB->GetCount(); i++)
-        {
-            if (ms_languagesDB->Item(i).Language == lang)
-            {
-                info = &ms_languagesDB->Item(i);
-                break;
-            }
-        }
-    }
+    const wxLanguageInfo *info = GetLanguageInfo(lang);
 
     // Unknown language:
     if (info == NULL)
@@ -678,7 +669,7 @@ bool wxLocale::Init(int language, int flags)
     const wxChar *retloc;
 
     // Set the locale:
-#ifdef __UNIX__
+#if defined(__UNIX__) && !defined(__WXMAC__)
     if (language == wxLANGUAGE_DEFAULT)
         locale = wxEmptyString;
     else
@@ -789,7 +780,7 @@ void wxLocale::AddCatalogLookupPathPrefix(const wxString& prefix)
     size_t i = 0,
            count = ms_languagesDB->GetCount();
 
-#if defined(__UNIX__)
+#if defined(__UNIX__) && !defined(__WXMAC__)
     // first get the string identifying the language from the environment
     wxString langFull;
     if (!wxGetEnv(wxT("LC_ALL"), &langFull) &&
@@ -912,7 +903,7 @@ void wxLocale::AddCatalogLookupPathPrefix(const wxString& prefix)
         }
     }
 #elif defined(__WXMAC__)
-    char* lc = NULL ;
+    const char* lc = NULL ;
     long lang = GetScriptVariable( smSystemScript, smScriptLang) ;
     switch( GetScriptManagerVariable( smRegionCode ) ) {
       case verUS :
@@ -1271,7 +1262,7 @@ wxString wxLocale::GetSystemEncodingName()
         }
         else
         {
-            encname = wxConvLibc.cMB2WX(alang);
+            encname = wxString::FromAscii( alang );
         }
     }
     else
@@ -1280,24 +1271,24 @@ wxString wxLocale::GetSystemEncodingName()
         // if we can't get at the character set directly, try to see if it's in
         // the environment variables (in most cases this won't work, but I was
         // out of ideas)
-        wxChar *lang = wxGetenv(wxT("LC_ALL"));
-        wxChar *dot = lang ? wxStrchr(lang, wxT('.')) : (wxChar *)NULL;
+        char *lang = getenv( "LC_ALL");
+        char *dot = lang ? strchr(lang, '.') : (char *)NULL;
         if (!dot)
         {
-            lang = wxGetenv(wxT("LC_CTYPE"));
+            lang = getenv( "LC_CTYPE" );
             if ( lang )
-                dot = wxStrchr(lang, wxT('.'));
+                dot = strchr(lang, '.' );
         }
         if (!dot)
         {
-            lang = wxGetenv(wxT("LANG"));
+            lang = getenv( "LANG");
             if ( lang )
-                dot = wxStrchr(lang, wxT('.'));
+                dot = strchr(lang, '.');
         }
 
         if ( dot )
         {
-            encname = dot+1;
+            encname = wxString::FromAscii( dot+1 );
         }
     }
 #endif // Win32/Unix
@@ -1340,7 +1331,7 @@ wxFontEncoding wxLocale::GetSystemEncoding()
     wxString encname = GetSystemEncodingName();
     if ( !encname.empty() )
     {
-        wxFontEncoding enc = wxTheFontMapper->
+        wxFontEncoding enc = wxFontMapper::Get()->
             CharsetToEncoding(encname, FALSE /* not interactive */);
 
         // this should probably be considered as a bug in CharsetToEncoding():
@@ -1360,12 +1351,30 @@ wxFontEncoding wxLocale::GetSystemEncoding()
     return wxFONTENCODING_SYSTEM;
 }
 
-/*static*/ void wxLocale::AddLanguage(const wxLanguageInfo& info)
+/* static */
+void wxLocale::AddLanguage(const wxLanguageInfo& info)
 {
     CreateLanguagesDB();
     ms_languagesDB->Add(info);
 }
 
+/* static */
+const wxLanguageInfo *wxLocale::GetLanguageInfo(int lang)
+{
+    CreateLanguagesDB();
+
+    size_t count = ms_languagesDB->GetCount();
+    for ( size_t i = 0; i < count; i++ )
+    {
+        if ( ms_languagesDB->Item(i).Language == lang )
+        {
+            return &ms_languagesDB->Item(i);
+        }
+    }
+
+    return NULL;
+}
+
 wxString wxLocale::GetSysName() const
 {
     return wxSetlocale(LC_ALL, NULL);
@@ -1425,12 +1434,14 @@ const wxChar *wxLocale::GetString(const wxChar *szOrigString,
 
             if ( szDomain != NULL )
             {
-                wxLogDebug(_T("string '%s' not found in domain '%s' for locale '%s'."),
-                             szOrigString, szDomain, m_strLocale.c_str());
+                wxLogTrace(_T("i18n"),
+                           _T("string '%s' not found in domain '%s' for locale '%s'."),
+                           szOrigString, szDomain, m_strLocale.c_str());
             }
             else
             {
-                wxLogDebug(_T("string '%s' not found in locale '%s'."),
+                wxLogTrace(_T("i18n"),
+                           _T("string '%s' not found in locale '%s'."),
                            szOrigString, m_strLocale.c_str());
             }
         }
@@ -2093,7 +2104,7 @@ void wxLocale::InitLanguagesDB()
    wxLanguageInfo info;
    wxStringTokenizer tkn;
 
-      LNG(wxLANGUAGE_ABKHAZIAN,                  "ab"   , 0              , 0                                 , "Abkhazian")
+   LNG(wxLANGUAGE_ABKHAZIAN,                  "ab"   , 0              , 0                                 , "Abkhazian")
    LNG(wxLANGUAGE_AFAR,                       "aa"   , 0              , 0                                 , "Afar")
    LNG(wxLANGUAGE_AFRIKAANS,                  "af_ZA", LANG_AFRIKAANS , SUBLANG_DEFAULT                   , "Afrikaans")
    LNG(wxLANGUAGE_ALBANIAN,                   "sq_AL", LANG_ALBANIAN  , SUBLANG_DEFAULT                   , "Albanian")