X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/978af864269a739e77d9431c8465435e3f8f7407..1cb311851d96ed4fb5290c65455075c6989f7142:/src/common/intl.cpp diff --git a/src/common/intl.cpp b/src/common/intl.cpp index ccc1418e29..4d689229a7 100644 --- a/src/common/intl.cpp +++ b/src/common/intl.cpp @@ -1017,20 +1017,26 @@ wxMsgCatalogFile::~wxMsgCatalogFile() delete [] m_pData; } -// return the directory to search for message catalogs under the given prefix +// return the directories to search for message catalogs under the given +// prefix, separated by wxPATH_SEP static -wxString GetMsgCatalogSubdir(const wxChar *prefix, const wxChar *lang) +wxString GetMsgCatalogSubdirs(const wxChar *prefix, const wxChar *lang) { wxString searchPath; searchPath << prefix << wxFILE_SEP_PATH << lang; - // under Unix, the message catalogs are supposed to go into LC_MESSAGES - // subdirectory so look there too -#ifdef __UNIX__ + // Under Unix, the message catalogs are supposed to go into LC_MESSAGES + // subdirectory so look there too. Note that we do it on all platforms + // and not just Unix, because it doesn't cost much to look into one more + // directory and doing it this way has two important benefits: + // a) we don't break compatibility with wx-2.6 and older by stopping to + // look in a directory where the catalogs used to be and thus silently + // breaking apps after they are recompiled against the latest wx + // b) it makes it possible to package app's support files in the same + // way on all target platforms const wxString searchPathOrig(searchPath); searchPath << wxFILE_SEP_PATH << wxT("LC_MESSAGES") << wxPATH_SEP << searchPathOrig; -#endif // __UNIX__ return searchPath; } @@ -1045,7 +1051,7 @@ static wxString GetFullSearchPath(const wxChar *lang) count = gs_searchPrefixes.size(); for ( n = 0; n < count; n++ ) { - paths.Add(GetMsgCatalogSubdir(gs_searchPrefixes[n], lang)); + paths.Add(GetMsgCatalogSubdirs(gs_searchPrefixes[n], lang)); } @@ -1065,7 +1071,7 @@ static wxString GetFullSearchPath(const wxChar *lang) const wxChar *pszLcPath = wxGetenv(wxT("LC_PATH")); if ( pszLcPath ) { - const wxString lcp = GetMsgCatalogSubdir(pszLcPath, lang); + const wxString lcp = GetMsgCatalogSubdirs(pszLcPath, lang); if ( paths.Index(lcp) == wxNOT_FOUND ) paths.Add(lcp); } @@ -1074,7 +1080,7 @@ static wxString GetFullSearchPath(const wxChar *lang) wxString wxp = wxGetInstallPrefix(); if ( !wxp.empty() ) { - wxp = GetMsgCatalogSubdir(wxp + _T("/share/locale"), lang); + wxp = GetMsgCatalogSubdirs(wxp + _T("/share/locale"), lang); if ( paths.Index(wxp) == wxNOT_FOUND ) paths.Add(wxp); } @@ -1585,7 +1591,7 @@ bool wxLocale::Init(const wxChar *szName, // an error if this does not exist if ( bOk ) { - wxString port(wxPlatformInfo().GetPortIdName()); + wxString port(wxPlatformInfo::Get().GetPortIdName()); if ( !port.empty() ) { AddCatalog(port.BeforeFirst(wxT('/')).MakeLower()); @@ -2711,6 +2717,31 @@ wxMsgCatalog *wxLocale::FindCatalog(const wxChar *szDomain) const return NULL; } +// check if the given locale is provided by OS and C run time +/* static */ +bool wxLocale::IsAvailable(int lang) +{ + const wxLanguageInfo *info = wxLocale::GetLanguageInfo(lang); + wxCHECK_MSG( info, false, _T("invalid language") ); + +#ifdef __WIN32__ + if ( !info->WinLang ) + return false; + + if ( !::IsValidLocale + ( + MAKELCID(MAKELANGID(info->WinLang, info->WinSublang), + SORT_DEFAULT), + LCID_INSTALLED + ) ) + return false; +#else // !__WIN32__ + // TODO: test if setlocale(info->CanonicalName) works under other OS? +#endif // __WIN32__/!__WIN32__ + + return true; +} + // check if the given catalog is loaded bool wxLocale::IsLoaded(const wxChar *szDomain) const {