// wxWindows
#include "wx/defs.h"
#include "wx/string.h"
+#include "wx/tokenzr.h"
#include "wx/intl.h"
#include "wx/file.h"
#include "wx/log.h"
#include "wx/debug.h"
#include "wx/utils.h"
+#include "wx/dynarray.h"
+#ifdef __WIN32__
+#include "wx/msw/private.h"
+#endif
+
#include <stdlib.h>
{
// Asserting a sizeof directly causes some compilers to
// issue a "using constant in a conditional expression" warning
- size_t intsize = sizeof(int);
+ size_t intsize = sizeof(int);
wxASSERT_MSG( intsize == 4,
"size_t32 is incorrectly defined!" );
const size_t32 MSGCATALOG_MAGIC_SW = 0xde120495;
// extension of ".mo" files
-#define MSGCATALOG_EXTENSION ".mo"
+#define MSGCATALOG_EXTENSION _T(".mo")
// ----------------------------------------------------------------------------
// global functions
// ----------------------------------------------------------------------------
-// suppress further error messages about missing translations
-// (if you don't have one catalog file, you wouldn't like to see the
-// error message for each string in it, so normally it's given only
-// once)
-void wxSuppressTransErrors();
+#ifdef __WXDEBUG__
-// restore the logging
-void wxRestoreTransErrors();
+// small class to suppress the translation erros until exit from current scope
+class NoTransErr
+{
+public:
+ NoTransErr() { ms_suppressCount++; }
+ ~NoTransErr() { ms_suppressCount--; }
+
+ static bool Suppress() { return ms_suppressCount > 0; }
+
+private:
+ static size_t ms_suppressCount;
+};
-// get the current state
-bool wxIsLoggingTransErrors();
+size_t NoTransErr::ms_suppressCount = 0;
+
+#else // !Debug
+
+class NoTransErr
+{
+public:
+ NoTransErr() { }
+ ~NoTransErr() { }
+};
+
+#endif // Debug/!Debug
static wxLocale *wxSetLocale(wxLocale *pLocale);
~wxMsgCatalog();
// load the catalog from disk (szDirPrefix corresponds to language)
- bool Load(const wxChar *szDirPrefix, const wxChar *szName);
+ bool Load(const wxChar *szDirPrefix, const wxChar *szName, bool bConvertEncoding = FALSE);
bool IsLoaded() const { return m_pData != NULL; }
// get name of the catalog
const char *StringAtOfs(wxMsgTableEntry *pTable, size_t32 index) const
{ return (const char *)(m_pData + Swap(pTable[index].ofsString)); }
+ // convert encoding to platform native one, if neccessary
+ void ConvertEncoding();
+
// utility functions
// calculate the hash value of given string
static inline size_t32 GetHash(const char *sz);
wxDELETEA(m_pszName);
}
-// small class to suppress the translation erros until exit from current scope
-class NoTransErr
-{
-public:
- NoTransErr() { wxSuppressTransErrors(); }
- ~NoTransErr() { wxRestoreTransErrors(); }
-};
-
// return all directories to search for given prefix
static wxString GetAllMsgCatalogSubdirs(const wxChar *prefix,
const wxChar *lang)
<< wxPATH_SEP;
}
+ // LC_PATH is a standard env var containing the search path for the .mo
+ // files
+ const wxChar *pszLcPath = wxGetenv(wxT("LC_PATH"));
+ if ( pszLcPath != NULL )
+ searchPath << GetAllMsgCatalogSubdirs(pszLcPath, lang);
+
// then take the current directory
// FIXME it should be the directory of the executable
- searchPath << GetAllMsgCatalogSubdirs(wxT("."), lang) << wxPATH_SEP;
+ searchPath << GetAllMsgCatalogSubdirs(wxT("."), lang);
// and finally add some standard ones
searchPath
- << GetAllMsgCatalogSubdirs(wxT("/usr/share/locale"), lang) << wxPATH_SEP
- << GetAllMsgCatalogSubdirs(wxT("/usr/lib/locale"), lang) << wxPATH_SEP
+ << GetAllMsgCatalogSubdirs(wxT("/usr/share/locale"), lang)
+ << GetAllMsgCatalogSubdirs(wxT("/usr/lib/locale"), lang)
<< GetAllMsgCatalogSubdirs(wxT("/usr/local/share/locale"), lang);
return searchPath;
}
// open disk file and read in it's contents
-bool wxMsgCatalog::Load(const wxChar *szDirPrefix, const wxChar *szName0)
+bool wxMsgCatalog::Load(const wxChar *szDirPrefix, const wxChar *szName0, bool bConvertEncoding)
{
/* We need to handle locales like de_AT.iso-8859-1
For this we first chop off the .CHARSET specifier and ignore it.
FIXME: UNICODE SUPPORT: must use CHARSET specifier!
*/
wxString szName = szName0;
- if(szName.Find('.') != -1) // contains a dot
- szName = szName.Left(szName.Find('.'));
-
- // FIXME VZ: I forgot the exact meaning of LC_PATH - anyone to remind me?
- // KB: search path where to find the mo files, probably : delimited
-#if 0
- const wxChar *pszLcPath = wxGetenv("LC_PATH");
- if ( pszLcPath != NULL )
- strPath += pszLcPath + wxString(szDirPrefix) + MSG_PATH;
-#endif // 0
+ if(szName.Find(wxT('.')) != -1) // contains a dot
+ szName = szName.Left(szName.Find(wxT('.')));
wxString searchPath = GetFullSearchPath(szDirPrefix);
const wxChar *sublocale = wxStrchr(szDirPrefix, wxT('_'));
// (we're using an object because we have several return paths)
NoTransErr noTransErr;
- wxLogVerbose(wxT("looking for catalog '%s' in path '%s'."),
+ wxLogVerbose(_("looking for catalog '%s' in path '%s'."),
szName.c_str(), searchPath.c_str());
wxString strFullName;
if ( !wxFindFileInPath(&strFullName, searchPath, strFile) ) {
- wxLogWarning(_("catalog file for domain '%s' not found."), szName.c_str());
+ wxLogVerbose(_("catalog file for domain '%s' not found."), szName.c_str());
return FALSE;
}
m_pszName = new wxChar[wxStrlen(szName) + 1];
wxStrcpy(m_pszName, szName);
+ if (bConvertEncoding)
+ ConvertEncoding();
+
// everything is fine
return TRUE;
}
size_t32 nIncr = 1 + (nHashVal % (m_nHashSize - 2));
- while ( TRUE ) {
+#if defined(__VISAGECPP__)
+// VA just can't stand while(1) or while(TRUE)
+ bool bOs2var = TRUE;
+ while(bOs2var) {
+#else
+ while (1) {
+#endif
size_t32 nStr = Swap(m_pHashTable[nIndex]);
if ( nStr == 0 )
return NULL;
return NULL;
}
+
+#if wxUSE_GUI
+#include "wx/fontmap.h"
+#include "wx/encconv.h"
+#endif
+
+void wxMsgCatalog::ConvertEncoding()
+{
+#if wxUSE_GUI
+ wxFontEncoding enc;
+
+ // first, find encoding header:
+ const char *hdr = StringAtOfs(m_pOrigTable, 0);
+ if (hdr == NULL) return; // not supported by this catalog, does not have non-fuzzy header
+ if (hdr[0] != 0) return; // ditto
+
+ /* we support catalogs with header (msgid "") that is _not_ marked as "#, fuzzy" (otherwise
+ the string would not be included into compiled catalog) */
+ wxString header(StringAtOfs(m_pTransTable, 0));
+ wxString charset;
+ int pos = header.Find(wxT("Content-Type: text/plain; charset="));
+ if (pos == wxNOT_FOUND)
+ return; // incorrectly filled Content-Type header
+ size_t n = pos + 34; /*strlen("Content-Type: text/plain; charset=")*/
+ while (header[n] != wxT('\n'))
+ charset << header[n++];
+
+ enc = wxTheFontMapper->CharsetToEncoding(charset, FALSE);
+ if ( enc == wxFONTENCODING_SYSTEM )
+ return; // unknown encoding
+
+ wxFontEncodingArray a = wxEncodingConverter::GetPlatformEquivalents(enc);
+ if (a[0] == enc)
+ return; // no conversion needed, locale uses native encoding
+
+ if (a.GetCount() == 0)
+ return; // we don't know common equiv. under this platform
+
+ wxEncodingConverter converter;
+
+ converter.Init(enc, a[0]);
+ for (size_t i = 0; i < m_numStrings; i++)
+ converter.Convert((char*)StringAtOfs(m_pTransTable, i));
+#endif
+}
+
+
// ----------------------------------------------------------------------------
// wxLocale
// ----------------------------------------------------------------------------
+#include "wx/arrimpl.cpp"
+WX_DECLARE_EXPORTED_OBJARRAY(wxLanguageInfo, wxLanguageInfoArray);
+WX_DEFINE_OBJARRAY(wxLanguageInfoArray);
+
+
+
wxLocale::wxLocale()
{
m_pszOldLocale = NULL;
m_pMsgCat = NULL;
+ m_languagesDB = NULL;
+ m_language = wxLANGUAGE_UNKNOWN;
}
// NB: this function has (desired) side effect of changing current locale
bool wxLocale::Init(const wxChar *szName,
const wxChar *szShort,
const wxChar *szLocale,
- bool bLoadDefault)
+ bool bLoadDefault,
+ bool bConvertEncoding)
{
m_strLocale = szName;
m_strShort = szShort;
+ m_bConvertEncoding = bConvertEncoding;
+ m_language = wxLANGUAGE_UNKNOWN;
// change current locale (default: same as long name)
if ( szLocale == NULL )
return bOk;
}
+
+
+bool wxLocale::Init(int language, int flags)
+{
+ wxLanguageInfo *info = NULL;
+ int lang = language;
+
+ if (m_languagesDB == NULL)
+ {
+ m_languagesDB = new wxLanguageInfoArray;
+ InitLanguagesDB();
+ }
+
+ if (lang == wxLANGUAGE_DEFAULT) lang = GetSystemLanguage();
+ if (lang != wxLANGUAGE_UNKNOWN)
+ {
+ for (size_t i = 0; i < m_languagesDB->GetCount(); i++)
+ {
+ if (m_languagesDB->Item(i).Language == lang)
+ {
+ info = &m_languagesDB->Item(i);
+ break;
+ }
+ }
+ }
+
+ // We failed to detect system language, so we will use English:
+ if (lang == wxLANGUAGE_UNKNOWN)
+ {
+ return FALSE;
+ }
+ // Unknown language:
+ if (info == NULL)
+ {
+ wxLogError(wxT("Unknown language %i."), lang);
+ return FALSE;
+ }
+
+ wxString name = info->Description;
+ wxString canonical = info->CanonicalName;
+ wxString locale;
+ wxChar *retloc;
+
+ // Set the locale:
+#ifdef __UNIX__
+ if (language == wxLANGUAGE_DEFAULT) locale = wxEmptyString;
+ else locale = info->CanonicalName;
+
+ retloc = wxSetlocale(LC_ALL, locale);
+
+ if (retloc == NULL)
+ {
+ // Some C libraries don't like xx_YY form and require xx only
+ retloc = wxSetlocale(LC_ALL, locale.Mid(0,2));
+ }
+ if (retloc == NULL)
+ {
+ // Some C libraries (namely glibc) still use old ISO 639,
+ // so will translate the abbrev for them
+ wxString mid = locale.Mid(0,2);
+ if (mid == wxT("he")) locale = wxT("iw") + locale.Mid(3);
+ else if (mid == wxT("id")) locale = wxT("in") + locale.Mid(3);
+ else if (mid == wxT("yi")) locale = wxT("ji") + locale.Mid(3);
+ retloc = wxSetlocale(LC_ALL, locale);
+ }
+ if (retloc == NULL)
+ {
+ // (This time, we changed locale in previous if-branch, so try again.)
+ // Some C libraries don't like xx_YY form and require xx only
+ retloc = wxSetlocale(LC_ALL, locale.Mid(0,2));
+ }
+ if (retloc == NULL)
+ {
+ wxLogError(wxT("Cannot set locale to '%s'."), locale.c_str());
+ return FALSE;
+ }
+
+#elif defined(__WIN32__)
+ if (language != wxLANGUAGE_DEFAULT)
+ {
+ wxUint32 lcid = MAKELCID(MAKELANGID(info->WinLang, info->WinSublang),
+ SORT_DEFAULT);
+ if (SetThreadLocale(lcid))
+ retloc = wxSetlocale(LC_ALL, wxEmptyString);
+ else
+ {
+ // Windows9X doesn't support SetThreadLocale, so we must
+ // translate LCID to CRT's setlocale string ourselves
+ locale.Empty();
+ if (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED)
+ {
+ wxChar buffer[256];
+ buffer[0] = wxT('\0');
+ GetLocaleInfo(lcid, LOCALE_SENGLANGUAGE, buffer, 256);
+ locale << buffer;
+ if (GetLocaleInfo(lcid, LOCALE_SENGCOUNTRY, buffer, 256) > 0)
+ locale << wxT("_") << buffer;
+ }
+ if (locale.IsEmpty())
+ {
+ wxLogLastError(wxT("SetThreadLocale"));
+ wxLogError(wxT("Cannot set locale to language %s."), name.c_str());
+ return FALSE;
+ }
+ else
+ retloc = wxSetlocale(LC_ALL, locale);
+ }
+ }
+ else
+ retloc = wxSetlocale(LC_ALL, wxEmptyString);
+
+ if (retloc == NULL)
+ {
+ wxLogError(wxT("Cannot set locale to language %s."), name.c_str());
+ return FALSE;
+ }
+
+#else
+ return FALSE;
+#endif
+
+ return Init(name, canonical, wxString(retloc),
+ (flags & wxLOCALE_LOAD_DEFAULT) != 0,
+ (flags & wxLOCALE_CONV_ENCODING) != 0);
+}
+
+
+
void wxLocale::AddCatalogLookupPathPrefix(const wxString& prefix)
{
if ( s_searchPrefixes.Index(prefix) == wxNOT_FOUND )
//else: already have it
}
+
+int wxLocale::GetSystemLanguage() const
+{
+ int wxlang = wxLANGUAGE_UNKNOWN;
+ size_t i;
+
+ wxASSERT_MSG(m_languagesDB != NULL, "Languages DB not initialized, call wxLocale::Init!");
+
+#if defined(__UNIX__)
+ wxString lang;
+ if (!wxGetEnv(wxT("LC_ALL"), &lang) &&
+ !wxGetEnv(wxT("LC_MESSAGES"), &lang) &&
+ !wxGetEnv(wxT("LANG"), &lang))
+ return wxLANGUAGE_UNKNOWN;
+
+ bool is_abbrev = lang.Len() == 2 ||
+ (lang.Len() == 5 && lang[2] == wxT('_'));
+
+ // 0. Make sure the abbrev is according to latest ISO 639
+ // (this is neccessary because glibc uses iw and in instead
+ // of he and id respectively).
+ if (is_abbrev)
+ {
+ wxString mid = lang.Mid(0,2);
+ if (mid == wxT("iw")) lang = wxT("he") + lang.Mid(3);
+ else if (mid == wxT("in")) lang = wxT("id") + lang.Mid(3);
+ else if (mid == wxT("ji")) lang = wxT("yi") + lang.Mid(3);
+ }
+
+ // 1. Try to find the lang as is:
+ if (is_abbrev)
+ {
+ for (i = 0; i < m_languagesDB->GetCount(); i++)
+ {
+ if (m_languagesDB->Item(i).CanonicalName == lang)
+ {
+ wxlang = m_languagesDB->Item(i).Language;
+ break;
+ }
+ }
+ }
+
+ // 2. If lang is of the form xx_YY, try to find xx:
+ if (wxlang == wxLANGUAGE_UNKNOWN && is_abbrev && lang.Len() == 5)
+ {
+ wxString lang2 = lang.Mid(0,2);
+ for (i = 0; i < m_languagesDB->GetCount(); i++)
+ {
+ if (m_languagesDB->Item(i).CanonicalName == lang2)
+ {
+ wxlang = m_languagesDB->Item(i).Language;
+ break;
+ }
+ }
+ }
+
+ // 3. If lang is of the form xx, try to find any xx_YY record:
+ if (wxlang == wxLANGUAGE_UNKNOWN && is_abbrev && lang.Len() == 2)
+ {
+ for (i = 0; i < m_languagesDB->GetCount(); i++)
+ {
+ if (m_languagesDB->Item(i).CanonicalName.Mid(0,2) == lang)
+ {
+ wxlang = m_languagesDB->Item(i).Language;
+ break;
+ }
+ }
+ }
+
+ // 4. If everything failed, try to find the name in verbose description
+ // (SuSE is known to use LANG="german"):
+ if (wxlang == wxLANGUAGE_UNKNOWN && !is_abbrev)
+ {
+ for (i = 0; i < m_languagesDB->GetCount(); i++)
+ {
+ if (m_languagesDB->Item(i).Description.CmpNoCase(lang) == 0)
+ {
+ wxlang = m_languagesDB->Item(i).Language;
+ break;
+ }
+ }
+ }
+
+#elif defined(__WIN32__)
+ LCID lcid = GetUserDefaultLCID();
+ if (lcid == 0) return wxLANGUAGE_UNKNOWN;
+ wxUint32 lang = PRIMARYLANGID(LANGIDFROMLCID(lcid));
+ wxUint32 sublang = SUBLANGID(LANGIDFROMLCID(lcid));
+
+ for (i = 0; i < m_languagesDB->GetCount(); i++)
+ {
+ if (m_languagesDB->Item(i).WinLang == lang &&
+ m_languagesDB->Item(i).WinSublang == sublang)
+ {
+ wxlang = m_languagesDB->Item(i).Language;
+ break;
+ }
+ }
+#endif
+
+ return wxlang;
+}
+
+
+
+void wxLocale::AddLanguage(const wxLanguageInfo& info)
+{
+ wxASSERT_MSG(m_languagesDB != NULL, "Languages DB not initialized, call wxLocale::Init!");
+ m_languagesDB->Add(info);
+}
+
+
+
+wxString wxLocale::GetSysName() const
+{
+ return wxSetlocale(LC_ALL, NULL);
+}
+
+
+
// clean up
wxLocale::~wxLocale()
{
delete pTmpCat;
}
+ delete m_languagesDB;
+
// restore old locale
wxSetLocale(m_pOldLocale);
wxSetlocale(LC_ALL, m_pszOldLocale);
}
if ( pszTrans == NULL ) {
- if ( wxIsLoggingTransErrors() ) {
- // suppress further error messages if we're not debugging: this avoids
- // flooding the user with messages about each and every missing string if,
- // for example, a whole catalog file is missing.
-
- // do it before calling LogWarning to prevent infinite recursion!
#ifdef __WXDEBUG__
+ if ( !NoTransErr::Suppress() ) {
NoTransErr noTransErr;
-#else // !debug
- wxSuppressTransErrors();
-#endif // debug/!debug
if ( szDomain != NULL )
{
- wxLogWarning(_("string '%s' not found in domain '%s' for locale '%s'."),
+ wxLogDebug(_T("string '%s' not found in domain '%s' for locale '%s'."),
szOrigString, szDomain, m_strLocale.c_str());
}
else
{
- wxLogWarning(_("string '%s' not found in locale '%s'."),
- szOrigString, m_strLocale.c_str());
+ wxLogDebug(_T("string '%s' not found in locale '%s'."),
+ szOrigString, m_strLocale.c_str());
}
}
+#endif // __WXDEBUG__
return (wxMB2WXbuf)(szOrigString);
}
else
{
- // FIXME it was
- // return (wxMB2WXbuf)(wxConvCurrent->cMB2WX(pszTrans));
- // before, but we don't want to use wxConvCurrent explicitly to
- // avoid linking unnecessary code in ANSI programs without MB
- // support
- return (wxMB2WXbuf)(pszTrans);
+ return wxConvertMB2WX(pszTrans); // or preferably wxCSConv(charset).cMB2WX(pszTrans) or something,
+ // a macro similar to wxConvertMB2WX could be written for that
}
#undef szOrgString
{
wxMsgCatalog *pMsgCat = new wxMsgCatalog;
- if ( pMsgCat->Load(m_strShort, szDomain) ) {
+ if ( pMsgCat->Load(m_strShort, szDomain, m_bConvertEncoding) ) {
// add it to the head of the list so that in GetString it will
// be searched before the catalogs added earlier
pMsgCat->m_pNext = m_pMsgCat;
}
}
-// ----------------------------------------------------------------------------
-// global functions and variables
-// ----------------------------------------------------------------------------
-// translation errors logging
-// --------------------------
-static bool gs_bGiveTransErrors = TRUE;
-void wxSuppressTransErrors()
-{
- gs_bGiveTransErrors = FALSE;
-}
-void wxRestoreTransErrors()
-{
- gs_bGiveTransErrors = TRUE;
-}
-bool wxIsLoggingTransErrors()
-{
- return gs_bGiveTransErrors;
-}
+// ----------------------------------------------------------------------------
+// global functions and variables
+// ----------------------------------------------------------------------------
// retrieve/change current locale
// ------------------------------
return pOld;
}
+
+
+
+// ----------------------------------------------------------------------------
+// default languages table & initialization
+// ----------------------------------------------------------------------------
+
+
+// This table is generated by misc/languages/genlang.py
+// When making changes, please put them into misc/languages/langtabl.txt
+
+#ifdef __WXMSW__
+#define SETWINLANG(info,lang,sublang) \
+ info.WinLang = lang, info.WinSublang = sublang;
+#else
+#define SETWINLANG(info,lang,sublang)
+#endif
+
+#define LNG(wxlang, canonical, winlang, winsublang, desc) \
+ info.Language = wxlang; \
+ info.CanonicalName = wxT(canonical); \
+ info.Description = desc; \
+ SETWINLANG(info, winlang, winsublang) \
+ AddLanguage(info);
+
+void wxLocale::InitLanguagesDB()
+{
+ wxLanguageInfo info;
+ wxStringTokenizer tkn;
+
+ 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")
+ LNG(wxLANGUAGE_AMHARIC, "am" , 0 , 0 , "Amharic")
+ LNG(wxLANGUAGE_ARABIC, "ar" , LANG_ARABIC , SUBLANG_DEFAULT , "Arabic")
+ LNG(wxLANGUAGE_ARABIC_ALGERIA, "ar_DZ", LANG_ARABIC , SUBLANG_ARABIC_ALGERIA , "Arabic (Algeria)")
+ LNG(wxLANGUAGE_ARABIC_BAHRAIN, "ar_BH", LANG_ARABIC , SUBLANG_ARABIC_BAHRAIN , "Arabic (Bahrain)")
+ LNG(wxLANGUAGE_ARABIC_EGYPT, "ar_EG", LANG_ARABIC , SUBLANG_ARABIC_EGYPT , "Arabic (Egypt)")
+ LNG(wxLANGUAGE_ARABIC_IRAQ, "ar_IQ", LANG_ARABIC , SUBLANG_ARABIC_IRAQ , "Arabic (Iraq)")
+ LNG(wxLANGUAGE_ARABIC_JORDAN, "ar_JO", LANG_ARABIC , SUBLANG_ARABIC_JORDAN , "Arabic (Jordan)")
+ LNG(wxLANGUAGE_ARABIC_KUWAIT, "ar_KW", LANG_ARABIC , SUBLANG_ARABIC_KUWAIT , "Arabic (Kuwait)")
+ LNG(wxLANGUAGE_ARABIC_LEBANON, "ar_LB", LANG_ARABIC , SUBLANG_ARABIC_LEBANON , "Arabic (Lebanon)")
+ LNG(wxLANGUAGE_ARABIC_LIBYA, "ar_LY", LANG_ARABIC , SUBLANG_ARABIC_LIBYA , "Arabic (Libya)")
+ LNG(wxLANGUAGE_ARABIC_MOROCCO, "ar_MA", LANG_ARABIC , SUBLANG_ARABIC_MOROCCO , "Arabic (Morocco)")
+ LNG(wxLANGUAGE_ARABIC_OMAN, "ar_OM", LANG_ARABIC , SUBLANG_ARABIC_OMAN , "Arabic (Oman)")
+ LNG(wxLANGUAGE_ARABIC_QATAR, "ar_QA", LANG_ARABIC , SUBLANG_ARABIC_QATAR , "Arabic (Qatar)")
+ LNG(wxLANGUAGE_ARABIC_SAUDI_ARABIA, "ar_SA", LANG_ARABIC , SUBLANG_ARABIC_SAUDI_ARABIA , "Arabic (Saudi Arabia)")
+ LNG(wxLANGUAGE_ARABIC_SUDAN, "ar_SD", 0 , 0 , "Arabic (Sudan)")
+ LNG(wxLANGUAGE_ARABIC_SYRIA, "ar_SY", LANG_ARABIC , SUBLANG_ARABIC_SYRIA , "Arabic (Syria)")
+ LNG(wxLANGUAGE_ARABIC_TUNISIA, "ar_TN", LANG_ARABIC , SUBLANG_ARABIC_TUNISIA , "Arabic (Tunisia)")
+ LNG(wxLANGUAGE_ARABIC_UAE, "ar_AE", LANG_ARABIC , SUBLANG_ARABIC_UAE , "Arabic (Uae)")
+ LNG(wxLANGUAGE_ARABIC_YEMEN, "ar_YE", LANG_ARABIC , SUBLANG_ARABIC_YEMEN , "Arabic (Yemen)")
+ LNG(wxLANGUAGE_ARMENIAN, "hy" , LANG_ARMENIAN , SUBLANG_DEFAULT , "Armenian")
+ LNG(wxLANGUAGE_ASSAMESE, "as" , LANG_ASSAMESE , SUBLANG_DEFAULT , "Assamese")
+ LNG(wxLANGUAGE_AYMARA, "ay" , 0 , 0 , "Aymara")
+ LNG(wxLANGUAGE_AZERI, "az" , LANG_AZERI , SUBLANG_DEFAULT , "Azeri")
+ LNG(wxLANGUAGE_AZERI_CYRILLIC, "az" , LANG_AZERI , SUBLANG_AZERI_CYRILLIC , "Azeri (Cyrillic)")
+ LNG(wxLANGUAGE_AZERI_LATIN, "az" , LANG_AZERI , SUBLANG_AZERI_LATIN , "Azeri (Latin)")
+ LNG(wxLANGUAGE_BASHKIR, "ba" , 0 , 0 , "Bashkir")
+ LNG(wxLANGUAGE_BASQUE, "eu_ES", LANG_BASQUE , SUBLANG_DEFAULT , "Basque")
+ LNG(wxLANGUAGE_BELARUSIAN, "be_BY", LANG_BELARUSIAN, SUBLANG_DEFAULT , "Belarusian")
+ LNG(wxLANGUAGE_BENGALI, "bn" , LANG_BENGALI , SUBLANG_DEFAULT , "Bengali")
+ LNG(wxLANGUAGE_BHUTANI, "dz" , 0 , 0 , "Bhutani")
+ LNG(wxLANGUAGE_BIHARI, "bh" , 0 , 0 , "Bihari")
+ LNG(wxLANGUAGE_BISLAMA, "bi" , 0 , 0 , "Bislama")
+ LNG(wxLANGUAGE_BRETON, "br" , 0 , 0 , "Breton")
+ LNG(wxLANGUAGE_BULGARIAN, "bg_BG", LANG_BULGARIAN , SUBLANG_DEFAULT , "Bulgarian")
+ LNG(wxLANGUAGE_BURMESE, "my" , 0 , 0 , "Burmese")
+ LNG(wxLANGUAGE_CAMBODIAN, "km" , 0 , 0 , "Cambodian")
+ LNG(wxLANGUAGE_CATALAN, "ca_ES", LANG_CATALAN , SUBLANG_DEFAULT , "Catalan")
+ LNG(wxLANGUAGE_CHINESE, "zh_CN", LANG_CHINESE , SUBLANG_DEFAULT , "Chinese")
+ LNG(wxLANGUAGE_CHINESE_SIMPLIFIED, "zh_CN", LANG_CHINESE , SUBLANG_CHINESE_SIMPLIFIED , "Chinese (Simplified)")
+ LNG(wxLANGUAGE_CHINESE_TRADITIONAL, "zh_CN", LANG_CHINESE , SUBLANG_CHINESE_TRADITIONAL , "Chinese (Traditional)")
+ LNG(wxLANGUAGE_CHINESE_HONGKONG, "zh_HK", LANG_CHINESE , SUBLANG_CHINESE_HONGKONG , "Chinese (Hongkong)")
+ LNG(wxLANGUAGE_CHINESE_MACAU, "zh_MO", LANG_CHINESE , SUBLANG_CHINESE_MACAU , "Chinese (Macau)")
+ LNG(wxLANGUAGE_CHINESE_SINGAPORE, "zh_SG", LANG_CHINESE , SUBLANG_CHINESE_SINGAPORE , "Chinese (Singapore)")
+ LNG(wxLANGUAGE_CHINESE_TAIWAN, "zh_TW", 0 , 0 , "Chinese (Taiwan)")
+ LNG(wxLANGUAGE_CORSICAN, "co" , 0 , 0 , "Corsican")
+ LNG(wxLANGUAGE_CROATIAN, "hr_HR", LANG_CROATIAN , SUBLANG_DEFAULT , "Croatian")
+ LNG(wxLANGUAGE_CZECH, "cs_CZ", LANG_CZECH , SUBLANG_DEFAULT , "Czech")
+ LNG(wxLANGUAGE_DANISH, "da_DK", LANG_DANISH , SUBLANG_DEFAULT , "Danish")
+ LNG(wxLANGUAGE_DUTCH, "nl_NL", LANG_DUTCH , SUBLANG_DUTCH , "Dutch")
+ LNG(wxLANGUAGE_DUTCH_BELGIAN, "nl_BE", LANG_DUTCH , SUBLANG_DUTCH_BELGIAN , "Dutch (Belgian)")
+ LNG(wxLANGUAGE_ENGLISH, "en_GB", LANG_ENGLISH , SUBLANG_ENGLISH_UK , "English")
+ LNG(wxLANGUAGE_ENGLISH_UK, "en_GB", LANG_ENGLISH , SUBLANG_ENGLISH_UK , "English (U.K.)")
+ LNG(wxLANGUAGE_ENGLISH_US, "en_US", LANG_ENGLISH , SUBLANG_ENGLISH_US , "English (U.S.)")
+ LNG(wxLANGUAGE_ENGLISH_AUSTRALIA, "en_AU", LANG_ENGLISH , SUBLANG_ENGLISH_AUS , "English (Australia)")
+ LNG(wxLANGUAGE_ENGLISH_BELIZE, "en_BZ", LANG_ENGLISH , SUBLANG_ENGLISH_BELIZE , "English (Belize)")
+ LNG(wxLANGUAGE_ENGLISH_BOTSWANA, "en_BW", 0 , 0 , "English (Botswana)")
+ LNG(wxLANGUAGE_ENGLISH_CANADA, "en_CA", LANG_ENGLISH , SUBLANG_ENGLISH_CAN , "English (Canada)")
+ LNG(wxLANGUAGE_ENGLISH_CARIBBEAN, "en_CB", LANG_ENGLISH , SUBLANG_ENGLISH_CARIBBEAN , "English (Caribbean)")
+ LNG(wxLANGUAGE_ENGLISH_DENMARK, "en_DK", 0 , 0 , "English (Denmark)")
+ LNG(wxLANGUAGE_ENGLISH_EIRE, "en_IE", LANG_ENGLISH , SUBLANG_ENGLISH_EIRE , "English (Eire)")
+ LNG(wxLANGUAGE_ENGLISH_JAMAICA, "en_JM", LANG_ENGLISH , SUBLANG_ENGLISH_JAMAICA , "English (Jamaica)")
+ LNG(wxLANGUAGE_ENGLISH_NEW_ZEALAND, "en_NZ", LANG_ENGLISH , SUBLANG_ENGLISH_NZ , "English (New Zealand)")
+ LNG(wxLANGUAGE_ENGLISH_PHILIPPINES, "en_PH", LANG_ENGLISH , SUBLANG_ENGLISH_PHILIPPINES , "English (Philippines)")
+ LNG(wxLANGUAGE_ENGLISH_SOUTH_AFRICA, "en_ZA", LANG_ENGLISH , SUBLANG_ENGLISH_SOUTH_AFRICA , "English (South Africa)")
+ LNG(wxLANGUAGE_ENGLISH_TRINIDAD, "en_TT", LANG_ENGLISH , SUBLANG_ENGLISH_TRINIDAD , "English (Trinidad)")
+ LNG(wxLANGUAGE_ENGLISH_ZIMBABWE, "en_ZW", LANG_ENGLISH , SUBLANG_ENGLISH_ZIMBABWE , "English (Zimbabwe)")
+ LNG(wxLANGUAGE_ESPERANTO, "eo" , 0 , 0 , "Esperanto")
+ LNG(wxLANGUAGE_ESTONIAN, "et_EE", LANG_ESTONIAN , SUBLANG_DEFAULT , "Estonian")
+ LNG(wxLANGUAGE_FAEROESE, "fo_FO", LANG_FAEROESE , SUBLANG_DEFAULT , "Faeroese")
+ LNG(wxLANGUAGE_FARSI, "fa_IR", LANG_FARSI , SUBLANG_DEFAULT , "Farsi")
+ LNG(wxLANGUAGE_FIJI, "fj" , 0 , 0 , "Fiji")
+ LNG(wxLANGUAGE_FINNISH, "fi_FI", LANG_FINNISH , SUBLANG_DEFAULT , "Finnish")
+ LNG(wxLANGUAGE_FRENCH, "fr_FR", LANG_FRENCH , SUBLANG_FRENCH , "French")
+ LNG(wxLANGUAGE_FRENCH_BELGIAN, "fr_BE", LANG_FRENCH , SUBLANG_FRENCH_BELGIAN , "French (Belgian)")
+ LNG(wxLANGUAGE_FRENCH_CANADIAN, "fr_CA", LANG_FRENCH , SUBLANG_FRENCH_CANADIAN , "French (Canadian)")
+ LNG(wxLANGUAGE_FRENCH_LUXEMBOURG, "fr_LU", LANG_FRENCH , SUBLANG_FRENCH_LUXEMBOURG , "French (Luxembourg)")
+ LNG(wxLANGUAGE_FRENCH_MONACO, "fr_MC", LANG_FRENCH , SUBLANG_FRENCH_MONACO , "French (Monaco)")
+ LNG(wxLANGUAGE_FRENCH_SWISS, "fr_CH", LANG_FRENCH , SUBLANG_FRENCH_SWISS , "French (Swiss)")
+ LNG(wxLANGUAGE_FRISIAN, "fy" , 0 , 0 , "Frisian")
+ LNG(wxLANGUAGE_GALICIAN, "gl_ES", 0 , 0 , "Galician")
+ LNG(wxLANGUAGE_GEORGIAN, "ka" , LANG_GEORGIAN , SUBLANG_DEFAULT , "Georgian")
+ LNG(wxLANGUAGE_GERMAN, "de_DE", LANG_GERMAN , SUBLANG_GERMAN , "German")
+ LNG(wxLANGUAGE_GERMAN_AUSTRIAN, "de_AT", LANG_GERMAN , SUBLANG_GERMAN_AUSTRIAN , "German (Austrian)")
+ LNG(wxLANGUAGE_GERMAN_BELGIUM, "de_BE", 0 , 0 , "German (Belgium)")
+ LNG(wxLANGUAGE_GERMAN_LIECHTENSTEIN, "de_LI", LANG_GERMAN , SUBLANG_GERMAN_LIECHTENSTEIN , "German (Liechtenstein)")
+ LNG(wxLANGUAGE_GERMAN_LUXEMBOURG, "de_LU", LANG_GERMAN , SUBLANG_GERMAN_LUXEMBOURG , "German (Luxembourg)")
+ LNG(wxLANGUAGE_GERMAN_SWISS, "de_CH", LANG_GERMAN , SUBLANG_GERMAN_SWISS , "German (Swiss)")
+ LNG(wxLANGUAGE_GREEK, "el_GR", LANG_GREEK , SUBLANG_DEFAULT , "Greek")
+ LNG(wxLANGUAGE_GREENLANDIC, "kl_GL", 0 , 0 , "Greenlandic")
+ LNG(wxLANGUAGE_GUARANI, "gn" , 0 , 0 , "Guarani")
+ LNG(wxLANGUAGE_GUJARATI, "gu" , LANG_GUJARATI , SUBLANG_DEFAULT , "Gujarati")
+ LNG(wxLANGUAGE_HAUSA, "ha" , 0 , 0 , "Hausa")
+ LNG(wxLANGUAGE_HEBREW, "he_IL", LANG_HEBREW , SUBLANG_DEFAULT , "Hebrew")
+ LNG(wxLANGUAGE_HINDI, "hi_IN", LANG_HINDI , SUBLANG_DEFAULT , "Hindi")
+ LNG(wxLANGUAGE_HUNGARIAN, "hu_HU", LANG_HUNGARIAN , SUBLANG_DEFAULT , "Hungarian")
+ LNG(wxLANGUAGE_ICELANDIC, "is_IS", LANG_ICELANDIC , SUBLANG_DEFAULT , "Icelandic")
+ LNG(wxLANGUAGE_INDONESIAN, "id_ID", LANG_INDONESIAN, SUBLANG_DEFAULT , "Indonesian")
+ LNG(wxLANGUAGE_INTERLINGUA, "ia" , 0 , 0 , "Interlingua")
+ LNG(wxLANGUAGE_INTERLINGUE, "ie" , 0 , 0 , "Interlingue")
+ LNG(wxLANGUAGE_INUKTITUT, "iu" , 0 , 0 , "Inuktitut")
+ LNG(wxLANGUAGE_INUPIAK, "ik" , 0 , 0 , "Inupiak")
+ LNG(wxLANGUAGE_IRISH, "ga_IE", 0 , 0 , "Irish")
+ LNG(wxLANGUAGE_ITALIAN, "it_IT", LANG_ITALIAN , SUBLANG_ITALIAN , "Italian")
+ LNG(wxLANGUAGE_ITALIAN_SWISS, "it_CH", LANG_ITALIAN , SUBLANG_ITALIAN_SWISS , "Italian (Swiss)")
+ LNG(wxLANGUAGE_JAPANESE, "ja_JP", LANG_JAPANESE , SUBLANG_DEFAULT , "Japanese")
+ LNG(wxLANGUAGE_JAVANESE, "jw" , 0 , 0 , "Javanese")
+ LNG(wxLANGUAGE_KANNADA, "kn" , LANG_KANNADA , SUBLANG_DEFAULT , "Kannada")
+ LNG(wxLANGUAGE_KASHMIRI, "ks" , LANG_KASHMIRI , SUBLANG_DEFAULT , "Kashmiri")
+ LNG(wxLANGUAGE_KASHMIRI_INDIA, "ks_IN", LANG_KASHMIRI , SUBLANG_KASHMIRI_INDIA , "Kashmiri (India)")
+ LNG(wxLANGUAGE_KAZAKH, "kk" , LANG_KAZAK , SUBLANG_DEFAULT , "Kazakh")
+ LNG(wxLANGUAGE_KERNEWEK, "kw_GB", 0 , 0 , "Kernewek")
+ LNG(wxLANGUAGE_KINYARWANDA, "rw" , 0 , 0 , "Kinyarwanda")
+ LNG(wxLANGUAGE_KIRGHIZ, "ky" , 0 , 0 , "Kirghiz")
+ LNG(wxLANGUAGE_KIRUNDI, "rn" , 0 , 0 , "Kirundi")
+ LNG(wxLANGUAGE_KONKANI, "" , LANG_KONKANI , SUBLANG_DEFAULT , "Konkani")
+ LNG(wxLANGUAGE_KOREAN, "ko_KR", LANG_KOREAN , SUBLANG_KOREAN , "Korean")
+ LNG(wxLANGUAGE_KURDISH, "ku" , 0 , 0 , "Kurdish")
+ LNG(wxLANGUAGE_LAOTHIAN, "lo" , 0 , 0 , "Laothian")
+ LNG(wxLANGUAGE_LATIN, "la" , 0 , 0 , "Latin")
+ LNG(wxLANGUAGE_LATVIAN, "lv_LV", LANG_LATVIAN , SUBLANG_DEFAULT , "Latvian")
+ LNG(wxLANGUAGE_LINGALA, "ln" , 0 , 0 , "Lingala")
+ LNG(wxLANGUAGE_LITHUANIAN, "lt_LT", LANG_LITHUANIAN, SUBLANG_LITHUANIAN , "Lithuanian")
+ LNG(wxLANGUAGE_MACEDONIAN, "mk_MK", LANG_MACEDONIAN, SUBLANG_DEFAULT , "Macedonian")
+ LNG(wxLANGUAGE_MALAGASY, "mg" , 0 , 0 , "Malagasy")
+ LNG(wxLANGUAGE_MALAY, "ms_MY", LANG_MALAY , SUBLANG_DEFAULT , "Malay")
+ LNG(wxLANGUAGE_MALAYALAM, "ml" , LANG_MALAYALAM , SUBLANG_DEFAULT , "Malayalam")
+ LNG(wxLANGUAGE_MALAY_BRUNEI_DARUSSALAM, "ms_BN", LANG_MALAY , SUBLANG_MALAY_BRUNEI_DARUSSALAM , "Malay (Brunei Darussalam)")
+ LNG(wxLANGUAGE_MALAY_MALAYSIA, "ms_MY", LANG_MALAY , SUBLANG_MALAY_MALAYSIA , "Malay (Malaysia)")
+ LNG(wxLANGUAGE_MALTESE, "mt_MT", 0 , 0 , "Maltese")
+ LNG(wxLANGUAGE_MANIPURI, "" , LANG_MANIPURI , SUBLANG_DEFAULT , "Manipuri")
+ LNG(wxLANGUAGE_MAORI, "mi" , 0 , 0 , "Maori")
+ LNG(wxLANGUAGE_MARATHI, "mr_IN", LANG_MARATHI , SUBLANG_DEFAULT , "Marathi")
+ LNG(wxLANGUAGE_MOLDAVIAN, "mo" , 0 , 0 , "Moldavian")
+ LNG(wxLANGUAGE_MONGOLIAN, "mn" , 0 , 0 , "Mongolian")
+ LNG(wxLANGUAGE_NAURU, "na" , 0 , 0 , "Nauru")
+ LNG(wxLANGUAGE_NEPALI, "ne" , LANG_NEPALI , SUBLANG_DEFAULT , "Nepali")
+ LNG(wxLANGUAGE_NEPALI_INDIA, "ne_IN", LANG_NEPALI , SUBLANG_NEPALI_INDIA , "Nepali (India)")
+ LNG(wxLANGUAGE_NORWEGIAN_BOKMAL, "no_NO", LANG_NORWEGIAN , SUBLANG_NORWEGIAN_BOKMAL , "Norwegian (Bokmal)")
+ LNG(wxLANGUAGE_NORWEGIAN_NYNORSK, "nn_NO", LANG_NORWEGIAN , SUBLANG_NORWEGIAN_NYNORSK , "Norwegian (Nynorsk)")
+ LNG(wxLANGUAGE_OCCITAN, "oc" , 0 , 0 , "Occitan")
+ LNG(wxLANGUAGE_ORIYA, "or" , LANG_ORIYA , SUBLANG_DEFAULT , "Oriya")
+ LNG(wxLANGUAGE_OROMO, "om" , 0 , 0 , "(Afan) Oromo")
+ LNG(wxLANGUAGE_PASHTO, "ps" , 0 , 0 , "Pashto, Pushto")
+ LNG(wxLANGUAGE_POLISH, "pl_PL", LANG_POLISH , SUBLANG_DEFAULT , "Polish")
+ LNG(wxLANGUAGE_PORTUGUESE, "pt_PT", LANG_PORTUGUESE, SUBLANG_PORTUGUESE , "Portuguese")
+ LNG(wxLANGUAGE_PORTUGUESE_BRAZILIAN, "pt_BR", LANG_PORTUGUESE, SUBLANG_PORTUGUESE_BRAZILIAN , "Portuguese (Brazilian)")
+ LNG(wxLANGUAGE_PUNJABI, "pa" , LANG_PUNJABI , SUBLANG_DEFAULT , "Punjabi")
+ LNG(wxLANGUAGE_QUECHUA, "qu" , 0 , 0 , "Quechua")
+ LNG(wxLANGUAGE_RHAETO_ROMANCE, "rm" , 0 , 0 , "Rhaeto-Romance")
+ LNG(wxLANGUAGE_ROMANIAN, "ro_RO", LANG_ROMANIAN , SUBLANG_DEFAULT , "Romanian")
+ LNG(wxLANGUAGE_RUSSIAN, "ru_RU", LANG_RUSSIAN , SUBLANG_DEFAULT , "Russian")
+ LNG(wxLANGUAGE_RUSSIAN_UKRAINE, "ru_UA", 0 , 0 , "Russian (Ukraine)")
+ LNG(wxLANGUAGE_SAMOAN, "sm" , 0 , 0 , "Samoan")
+ LNG(wxLANGUAGE_SANGHO, "sg" , 0 , 0 , "Sangho")
+ LNG(wxLANGUAGE_SANSKRIT, "sa" , LANG_SANSKRIT , SUBLANG_DEFAULT , "Sanskrit")
+ LNG(wxLANGUAGE_SCOTS_GAELIC, "gd" , 0 , 0 , "Scots Gaelic")
+ LNG(wxLANGUAGE_SERBIAN, "sr_YU", LANG_SERBIAN , SUBLANG_DEFAULT , "Serbian")
+ LNG(wxLANGUAGE_SERBIAN_CYRILLIC, "sr_YU", LANG_SERBIAN , SUBLANG_SERBIAN_CYRILLIC , "Serbian (Cyrillic)")
+ LNG(wxLANGUAGE_SERBIAN_LATIN, "sr_YU", LANG_SERBIAN , SUBLANG_SERBIAN_LATIN , "Serbian (Latin)")
+ LNG(wxLANGUAGE_SERBO_CROATIAN, "sh" , 0 , 0 , "Serbo-Croatian")
+ LNG(wxLANGUAGE_SESOTHO, "st" , 0 , 0 , "Sesotho")
+ LNG(wxLANGUAGE_SETSWANA, "tn" , 0 , 0 , "Setswana")
+ LNG(wxLANGUAGE_SHONA, "sn" , 0 , 0 , "Shona")
+ LNG(wxLANGUAGE_SINDHI, "sd" , LANG_SINDHI , SUBLANG_DEFAULT , "Sindhi")
+ LNG(wxLANGUAGE_SINHALESE, "si" , 0 , 0 , "Sinhalese")
+ LNG(wxLANGUAGE_SISWATI, "ss" , 0 , 0 , "Siswati")
+ LNG(wxLANGUAGE_SLOVAK, "sk_SK", LANG_SLOVAK , SUBLANG_DEFAULT , "Slovak")
+ LNG(wxLANGUAGE_SLOVENIAN, "sl_SI", LANG_SLOVENIAN , SUBLANG_DEFAULT , "Slovenian")
+ LNG(wxLANGUAGE_SOMALI, "so" , 0 , 0 , "Somali")
+ LNG(wxLANGUAGE_SPANISH, "es_ES", LANG_SPANISH , SUBLANG_SPANISH , "Spanish")
+ LNG(wxLANGUAGE_SPANISH_ARGENTINA, "es_AR", LANG_SPANISH , SUBLANG_SPANISH_ARGENTINA , "Spanish (Argentina)")
+ LNG(wxLANGUAGE_SPANISH_BOLIVIA, "es_BO", LANG_SPANISH , SUBLANG_SPANISH_BOLIVIA , "Spanish (Bolivia)")
+ LNG(wxLANGUAGE_SPANISH_CHILE, "es_CL", LANG_SPANISH , SUBLANG_SPANISH_CHILE , "Spanish (Chile)")
+ LNG(wxLANGUAGE_SPANISH_COLOMBIA, "es_CO", LANG_SPANISH , SUBLANG_SPANISH_COLOMBIA , "Spanish (Colombia)")
+ LNG(wxLANGUAGE_SPANISH_COSTA_RICA, "es_CR", LANG_SPANISH , SUBLANG_SPANISH_COSTA_RICA , "Spanish (Costa Rica)")
+ LNG(wxLANGUAGE_SPANISH_DOMINICAN_REPUBLIC, "es_DO", LANG_SPANISH , SUBLANG_SPANISH_DOMINICAN_REPUBLIC, "Spanish (Dominican republic)")
+ LNG(wxLANGUAGE_SPANISH_ECUADOR, "es_EC", LANG_SPANISH , SUBLANG_SPANISH_ECUADOR , "Spanish (Ecuador)")
+ LNG(wxLANGUAGE_SPANISH_EL_SALVADOR, "es_SV", LANG_SPANISH , SUBLANG_SPANISH_EL_SALVADOR , "Spanish (El Salvador)")
+ LNG(wxLANGUAGE_SPANISH_GUATEMALA, "es_GT", LANG_SPANISH , SUBLANG_SPANISH_GUATEMALA , "Spanish (Guatemala)")
+ LNG(wxLANGUAGE_SPANISH_HONDURAS, "es_HN", LANG_SPANISH , SUBLANG_SPANISH_HONDURAS , "Spanish (Honduras)")
+ LNG(wxLANGUAGE_SPANISH_MEXICAN, "es_MX", LANG_SPANISH , SUBLANG_SPANISH_MEXICAN , "Spanish (Mexican)")
+ LNG(wxLANGUAGE_SPANISH_MODERN, "es_ES", LANG_SPANISH , SUBLANG_SPANISH_MODERN , "Spanish (Modern)")
+ LNG(wxLANGUAGE_SPANISH_NICARAGUA, "es_NI", LANG_SPANISH , SUBLANG_SPANISH_NICARAGUA , "Spanish (Nicaragua)")
+ LNG(wxLANGUAGE_SPANISH_PANAMA, "es_PA", LANG_SPANISH , SUBLANG_SPANISH_PANAMA , "Spanish (Panama)")
+ LNG(wxLANGUAGE_SPANISH_PARAGUAY, "es_PY", LANG_SPANISH , SUBLANG_SPANISH_PARAGUAY , "Spanish (Paraguay)")
+ LNG(wxLANGUAGE_SPANISH_PERU, "es_PE", LANG_SPANISH , SUBLANG_SPANISH_PERU , "Spanish (Peru)")
+ LNG(wxLANGUAGE_SPANISH_PUERTO_RICO, "es_PR", LANG_SPANISH , SUBLANG_SPANISH_PUERTO_RICO , "Spanish (Puerto Rico)")
+ LNG(wxLANGUAGE_SPANISH_URUGUAY, "es_UY", LANG_SPANISH , SUBLANG_SPANISH_URUGUAY , "Spanish (Uruguay)")
+ LNG(wxLANGUAGE_SPANISH_US, "es_US", 0 , 0 , "Spanish (U.S.)")
+ LNG(wxLANGUAGE_SPANISH_VENEZUELA, "es_VE", LANG_SPANISH , SUBLANG_SPANISH_VENEZUELA , "Spanish (Venezuela)")
+ LNG(wxLANGUAGE_SUNDANESE, "su" , 0 , 0 , "Sundanese")
+ 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_TAJIK, "tg" , 0 , 0 , "Tajik")
+ LNG(wxLANGUAGE_TAMIL, "ta" , LANG_TAMIL , SUBLANG_DEFAULT , "Tamil")
+ LNG(wxLANGUAGE_TATAR, "tt" , LANG_TATAR , SUBLANG_DEFAULT , "Tatar")
+ LNG(wxLANGUAGE_TELUGU, "te" , LANG_TELUGU , SUBLANG_DEFAULT , "Telugu")
+ LNG(wxLANGUAGE_THAI, "th_TH", LANG_THAI , SUBLANG_DEFAULT , "Thai")
+ LNG(wxLANGUAGE_TIBETAN, "bo" , 0 , 0 , "Tibetan")
+ LNG(wxLANGUAGE_TIGRINYA, "ti" , 0 , 0 , "Tigrinya")
+ LNG(wxLANGUAGE_TONGA, "to" , 0 , 0 , "Tonga")
+ LNG(wxLANGUAGE_TSONGA, "ts" , 0 , 0 , "Tsonga")
+ LNG(wxLANGUAGE_TURKISH, "tr_TR", LANG_TURKISH , SUBLANG_DEFAULT , "Turkish")
+ LNG(wxLANGUAGE_TURKMEN, "tk" , 0 , 0 , "Turkmen")
+ LNG(wxLANGUAGE_TWI, "tw" , 0 , 0 , "Twi")
+ LNG(wxLANGUAGE_UIGHUR, "ug" , 0 , 0 , "Uighur")
+ LNG(wxLANGUAGE_UKRAINIAN, "uk_UA", LANG_UKRAINIAN , SUBLANG_DEFAULT , "Ukrainian")
+ LNG(wxLANGUAGE_URDU, "ur" , LANG_URDU , SUBLANG_DEFAULT , "Urdu")
+ LNG(wxLANGUAGE_URDU_INDIA, "ur_IN", LANG_URDU , SUBLANG_URDU_INDIA , "Urdu (India)")
+ LNG(wxLANGUAGE_URDU_PAKISTAN, "ur_PK", LANG_URDU , SUBLANG_URDU_PAKISTAN , "Urdu (Pakistan)")
+ LNG(wxLANGUAGE_UZBEK, "uz" , LANG_UZBEK , SUBLANG_DEFAULT , "Uzbek")
+ LNG(wxLANGUAGE_UZBEK_CYRILLIC, "uz" , LANG_UZBEK , SUBLANG_UZBEK_CYRILLIC , "Uzbek (Cyrillic)")
+ LNG(wxLANGUAGE_UZBEK_LATIN, "uz" , LANG_UZBEK , SUBLANG_UZBEK_LATIN , "Uzbek (Latin)")
+ LNG(wxLANGUAGE_VIETNAMESE, "vi_VN", LANG_VIETNAMESE, SUBLANG_DEFAULT , "Vietnamese")
+ LNG(wxLANGUAGE_VOLAPUK, "vo" , 0 , 0 , "Volapuk")
+ LNG(wxLANGUAGE_WELSH, "cy" , 0 , 0 , "Welsh")
+ LNG(wxLANGUAGE_WOLOF, "wo" , 0 , 0 , "Wolof")
+ LNG(wxLANGUAGE_XHOSA, "xh" , 0 , 0 , "Xhosa")
+ LNG(wxLANGUAGE_YIDDISH, "yi" , 0 , 0 , "Yiddish")
+ LNG(wxLANGUAGE_YORUBA, "yo" , 0 , 0 , "Yoruba")
+ LNG(wxLANGUAGE_ZHUANG, "za" , 0 , 0 , "Zhuang")
+ LNG(wxLANGUAGE_ZULU, "zu" , 0 , 0 , "Zulu")
+};
+#undef LNG
+
+
#endif // wxUSE_INTL