1 ///////////////////////////////////////////////////////////////////////////// 
   2 // Name:        src/common/intl.cpp 
   3 // Purpose:     Internationalization and localisation for wxWindows 
   4 // Author:      Vadim Zeitlin 
   8 // Copyright:   (c) 1998 Vadim Zeitlin <zeitlin@dptmaths.ens-cachan.fr> 
   9 // Licence:     wxWindows licence 
  10 ///////////////////////////////////////////////////////////////////////////// 
  12 // ============================================================================ 
  14 // ============================================================================ 
  16 // ---------------------------------------------------------------------------- 
  18 // ---------------------------------------------------------------------------- 
  21     #pragma implementation "intl.h" 
  24 // For compilers that support precompilation, includes "wx.h". 
  25 #include "wx/wxprec.h" 
  37 #ifdef HAVE_LANGINFO_H 
  43     #include "wx/string.h" 
  48     #include "wx/dynarray.h" 
  52 #include "wx/tokenzr.h" 
  53 #include "wx/module.h" 
  54 #include "wx/fontmap.h" 
  55 #include "wx/encconv.h" 
  56 #include "wx/hashmap.h" 
  59     #include "wx/msw/private.h" 
  60 #elif defined(__UNIX_LIKE__) 
  61     #include "wx/fontmap.h"         // for CharsetToEncoding() 
  64 #if defined(__WXMAC__) 
  65   #include  "wx/mac/private.h"  // includes mac headers 
  68 // ---------------------------------------------------------------------------- 
  70 // ---------------------------------------------------------------------------- 
  72 // this should *not* be wxChar, this type must have exactly 8 bits! 
  73 typedef wxUint8 size_t8
; 
  74 typedef wxUint32 size_t32
; 
  76 // ---------------------------------------------------------------------------- 
  78 // ---------------------------------------------------------------------------- 
  80 // magic number identifying the .mo format file 
  81 const size_t32 MSGCATALOG_MAGIC    
= 0x950412de; 
  82 const size_t32 MSGCATALOG_MAGIC_SW 
= 0xde120495; 
  84 // extension of ".mo" files 
  85 #define MSGCATALOG_EXTENSION  _T(".mo") 
  87 // the constants describing the format of lang_LANG locale string 
  88 static const size_t LEN_LANG 
= 2; 
  89 static const size_t LEN_SUBLANG 
= 2; 
  90 static const size_t LEN_FULL 
= LEN_LANG 
+ 1 + LEN_SUBLANG
; // 1 for '_' 
  92 // ---------------------------------------------------------------------------- 
  94 // ---------------------------------------------------------------------------- 
  98 // small class to suppress the translation erros until exit from current scope 
 102     NoTransErr() { ms_suppressCount
++; } 
 103    ~NoTransErr() { ms_suppressCount
--;  } 
 105    static bool Suppress() { return ms_suppressCount 
> 0; } 
 108    static size_t ms_suppressCount
; 
 111 size_t NoTransErr::ms_suppressCount 
= 0; 
 122 #endif // Debug/!Debug 
 124 static wxLocale 
*wxSetLocale(wxLocale 
*pLocale
); 
 126 // helper functions of GetSystemLanguage() 
 129 // get just the language part 
 130 static inline wxString 
ExtractLang(const wxString
& langFull
) 
 132     return langFull
.Left(LEN_LANG
); 
 135 // get everything else (including the leading '_') 
 136 static inline wxString 
ExtractNotLang(const wxString
& langFull
) 
 138     return langFull
.Mid(LEN_LANG
); 
 144 // ---------------------------------------------------------------------------- 
 145 // wxMsgCatalogFile corresponds to one disk-file message catalog. 
 147 // This is a "low-level" class and is used only by wxMsgCatalog 
 148 // ---------------------------------------------------------------------------- 
 150 WX_DECLARE_EXPORTED_STRING_HASH_MAP(wxString
, wxMessagesHash
); 
 152 class wxMsgCatalogFile
 
 159     // load the catalog from disk (szDirPrefix corresponds to language) 
 160     bool Load(const wxChar 
*szDirPrefix
, const wxChar 
*szName
); 
 162     // fills the hash with string-translation pairs 
 163     void FillHash(wxMessagesHash
& hash
, bool convertEncoding
) const; 
 166     // this implementation is binary compatible with GNU gettext() version 0.10 
 168     // an entry in the string table 
 169     struct wxMsgTableEntry
 
 171       size_t32   nLen
;           // length of the string 
 172       size_t32   ofsString
;      // pointer to the string 
 175     // header of a .mo file 
 176     struct wxMsgCatalogHeader
 
 178       size_t32  magic
,          // offset +00:  magic id 
 179                 revision
,       //        +04:  revision 
 180                 numStrings
;     //        +08:  number of strings in the file 
 181       size_t32  ofsOrigTable
,   //        +0C:  start of original string table 
 182                 ofsTransTable
;  //        +10:  start of translated string table 
 183       size_t32  nHashSize
,      //        +14:  hash table size 
 184                 ofsHashTable
;   //        +18:  offset of hash table start 
 187     // all data is stored here, NULL if no data loaded 
 191     size_t32          m_numStrings
;   // number of strings in this domain 
 192     wxMsgTableEntry  
*m_pOrigTable
,   // pointer to original   strings 
 193                      *m_pTransTable
;  //            translated 
 195     const char *StringAtOfs(wxMsgTableEntry 
*pTable
, size_t32 index
) const 
 196       { return (const char *)(m_pData 
+ Swap(pTable
[index
].ofsString
)); } 
 198     wxString 
GetCharset() const; 
 201       // big<->little endian 
 202     inline size_t32 
Swap(size_t32 ui
) const; 
 204     bool          m_bSwapped
;   // wrong endianness? 
 206     DECLARE_NO_COPY_CLASS(wxMsgCatalogFile
) 
 210 // ---------------------------------------------------------------------------- 
 211 // wxMsgCatalog corresponds to one loaded message catalog. 
 213 // This is a "low-level" class and is used only by wxLocale (that's why 
 214 // it's designed to be stored in a linked list) 
 215 // ---------------------------------------------------------------------------- 
 220     // load the catalog from disk (szDirPrefix corresponds to language) 
 221     bool Load(const wxChar 
*szDirPrefix
, const wxChar 
*szName
, bool bConvertEncoding 
= FALSE
); 
 223     // get name of the catalog 
 224     wxString 
GetName() const { return m_name
; } 
 226     // get the translated string: returns NULL if not found 
 227     const wxChar 
*GetString(const wxChar 
*sz
) const; 
 229     // public variable pointing to the next element in a linked list (or NULL) 
 230     wxMsgCatalog 
*m_pNext
; 
 233     wxMessagesHash  m_messages
; // all messages in the catalog 
 234     wxString        m_name
;     // name of the domain 
 237 // ---------------------------------------------------------------------------- 
 239 // ---------------------------------------------------------------------------- 
 241 // the list of the directories to search for message catalog files 
 242 static wxArrayString s_searchPrefixes
; 
 244 // ============================================================================ 
 246 // ============================================================================ 
 248 // ---------------------------------------------------------------------------- 
 249 // wxMsgCatalogFile class 
 250 // ---------------------------------------------------------------------------- 
 252 // swap the 2 halves of 32 bit integer if needed 
 253 size_t32 
wxMsgCatalogFile::Swap(size_t32 ui
) const 
 255   return m_bSwapped 
? (ui 
<< 24) | ((ui 
& 0xff00) << 8) | 
 256                       ((ui 
>> 8) & 0xff00) | (ui 
>> 24) 
 260 wxMsgCatalogFile::wxMsgCatalogFile() 
 265 wxMsgCatalogFile::~wxMsgCatalogFile() 
 270 // return all directories to search for given prefix 
 271 static wxString 
GetAllMsgCatalogSubdirs(const wxChar 
*prefix
, 
 276     // search first in prefix/fr/LC_MESSAGES, then in prefix/fr and finally in 
 277     // prefix (assuming the language is 'fr') 
 278     searchPath 
<< prefix 
<< wxFILE_SEP_PATH 
<< lang 
<< wxFILE_SEP_PATH
 
 279                          << wxT("LC_MESSAGES") << wxPATH_SEP
 
 280                << prefix 
<< wxFILE_SEP_PATH 
<< lang 
<< wxPATH_SEP
 
 281                << prefix 
<< wxPATH_SEP
; 
 286 // construct the search path for the given language 
 287 static wxString 
GetFullSearchPath(const wxChar 
*lang
) 
 291     // first take the entries explicitly added by the program 
 292     size_t count 
= s_searchPrefixes
.Count(); 
 293     for ( size_t n 
= 0; n 
< count
; n
++ ) 
 295         searchPath 
<< GetAllMsgCatalogSubdirs(s_searchPrefixes
[n
], lang
) 
 299     // LC_PATH is a standard env var containing the search path for the .mo 
 301     const wxChar 
*pszLcPath 
= wxGetenv(wxT("LC_PATH")); 
 302     if ( pszLcPath 
!= NULL 
) 
 303         searchPath 
<< GetAllMsgCatalogSubdirs(pszLcPath
, lang
); 
 306     // add some standard ones and the one in the tree where wxWin was installed: 
 308         << GetAllMsgCatalogSubdirs(wxString(wxGetInstallPrefix()) + wxT("/share/locale"), lang
) 
 309         << GetAllMsgCatalogSubdirs(wxT("/usr/share/locale"), lang
) 
 310         << GetAllMsgCatalogSubdirs(wxT("/usr/lib/locale"), lang
) 
 311         << GetAllMsgCatalogSubdirs(wxT("/usr/local/share/locale"), lang
); 
 314     // then take the current directory 
 315     // FIXME it should be the directory of the executable 
 318     wxGetWorkingDirectory( cwd 
, sizeof( cwd 
) ) ; 
 319     searchPath 
<< GetAllMsgCatalogSubdirs(cwd
, lang
); 
 320     // generic search paths could be somewhere in the system folder preferences 
 322     searchPath 
<< GetAllMsgCatalogSubdirs(wxT("."), lang
); 
 329 // open disk file and read in it's contents 
 330 bool wxMsgCatalogFile::Load(const wxChar 
*szDirPrefix
, const wxChar 
*szName0
) 
 332    /* We need to handle locales like  de_AT.iso-8859-1 
 333       For this we first chop off the .CHARSET specifier and ignore it. 
 334       FIXME: UNICODE SUPPORT: must use CHARSET specifier! 
 336    wxString szName 
= szName0
; 
 337    if(szName
.Find(wxT('.')) != -1) // contains a dot 
 338       szName 
= szName
.Left(szName
.Find(wxT('.'))); 
 340   wxString searchPath 
= GetFullSearchPath(szDirPrefix
); 
 341   const wxChar 
*sublocale 
= wxStrchr(szDirPrefix
, wxT('_')); 
 344       // also add just base locale name: for things like "fr_BE" (belgium 
 345       // french) we should use "fr" if no belgium specific message catalogs 
 347       searchPath 
<< GetFullSearchPath(wxString(szDirPrefix
). 
 348                                       Left((size_t)(sublocale 
- szDirPrefix
))) 
 352   wxString strFile 
= szName
; 
 353   strFile 
+= MSGCATALOG_EXTENSION
; 
 355   // don't give translation errors here because the wxstd catalog might 
 356   // not yet be loaded (and it's normal) 
 358   // (we're using an object because we have several return paths) 
 360   NoTransErr noTransErr
; 
 361   wxLogVerbose(_("looking for catalog '%s' in path '%s'."), 
 362                szName
.c_str(), searchPath
.c_str()); 
 364   wxString strFullName
; 
 365   if ( !wxFindFileInPath(&strFullName
, searchPath
, strFile
) ) { 
 366     wxLogVerbose(_("catalog file for domain '%s' not found."), szName
.c_str()); 
 371   wxLogVerbose(_("using catalog '%s' from '%s'."), 
 372              szName
.c_str(), strFullName
.c_str()); 
 374   wxFile 
fileMsg(strFullName
); 
 375   if ( !fileMsg
.IsOpened() ) 
 379   off_t nSize 
= fileMsg
.Length(); 
 380   if ( nSize 
== wxInvalidOffset 
) 
 383   // read the whole file in memory 
 384   m_pData 
= new size_t8
[nSize
]; 
 385   if ( fileMsg
.Read(m_pData
, nSize
) != nSize 
) { 
 391   bool bValid 
= (size_t)nSize 
> sizeof(wxMsgCatalogHeader
); 
 393   wxMsgCatalogHeader 
*pHeader 
= (wxMsgCatalogHeader 
*)m_pData
; 
 395     // we'll have to swap all the integers if it's true 
 396     m_bSwapped 
= pHeader
->magic 
== MSGCATALOG_MAGIC_SW
; 
 398     // check the magic number 
 399     bValid 
= m_bSwapped 
|| pHeader
->magic 
== MSGCATALOG_MAGIC
; 
 403     // it's either too short or has incorrect magic number 
 404     wxLogWarning(_("'%s' is not a valid message catalog."), strFullName
.c_str()); 
 411   m_numStrings  
= Swap(pHeader
->numStrings
); 
 412   m_pOrigTable  
= (wxMsgTableEntry 
*)(m_pData 
+ 
 413                    Swap(pHeader
->ofsOrigTable
)); 
 414   m_pTransTable 
= (wxMsgTableEntry 
*)(m_pData 
+ 
 415                    Swap(pHeader
->ofsTransTable
)); 
 417   // everything is fine 
 421 void wxMsgCatalogFile::FillHash(wxMessagesHash
& hash
, bool convertEncoding
) const 
 423     wxString charset 
= GetCharset(); 
 426     wxCSConv 
*csConv 
= NULL
; 
 428         csConv 
= new wxCSConv(charset
); 
 430     wxMBConv
& inputConv 
= csConv 
? *((wxMBConv
*)csConv
) : *wxConvCurrent
; 
 432     for (size_t i 
= 0; i 
< m_numStrings
; i
++) 
 434         wxString 
key(StringAtOfs(m_pOrigTable
, i
), inputConv
); 
 437         hash
[key
] = wxString(StringAtOfs(m_pTransTable
, i
), inputConv
); 
 439         if ( convertEncoding 
) 
 441                 wxString(inputConv
.cMB2WC(StringAtOfs(m_pTransTable
, i
)), 
 444             hash
[key
] = StringAtOfs(m_pTransTable
, i
); 
 449 #else // !wxUSE_WCHAR_T 
 451     if ( convertEncoding 
) 
 453         wxFontEncoding targetEnc 
= wxFONTENCODING_SYSTEM
; 
 454         wxFontEncoding enc 
= wxFontMapper::Get()->CharsetToEncoding(charset
, FALSE
); 
 455         if ( enc 
== wxFONTENCODING_SYSTEM 
) 
 457             convertEncoding 
= FALSE
; // unknown encoding 
 461             targetEnc 
= wxLocale::GetSystemEncoding(); 
 462             if (targetEnc 
== wxFONTENCODING_SYSTEM
) 
 464                 wxFontEncodingArray a 
= wxEncodingConverter::GetPlatformEquivalents(enc
); 
 466                     // no conversion needed, locale uses native encoding 
 467                     convertEncoding 
= FALSE
; 
 468                 if (a
.GetCount() == 0) 
 469                     // we don't know common equiv. under this platform 
 470                     convertEncoding 
= FALSE
; 
 475         if ( convertEncoding 
) 
 477             wxEncodingConverter converter
; 
 478             converter
.Init(enc
, targetEnc
); 
 480             for (size_t i 
= 0; i 
< m_numStrings
; i
++) 
 482                 wxString 
key(StringAtOfs(m_pOrigTable
, i
)); 
 484                     converter
.Convert(wxString(StringAtOfs(m_pTransTable
, i
))); 
 489     if ( !convertEncoding 
) 
 490     #endif // wxUSE_FONTMAP/!wxUSE_FONTMAP 
 492         for (size_t i 
= 0; i 
< m_numStrings
; i
++) 
 494             wxString 
key(StringAtOfs(m_pOrigTable
, i
)); 
 495             hash
[key
] = StringAtOfs(m_pTransTable
, i
); 
 498 #endif // wxUSE_WCHAR_T/!wxUSE_WCHAR_T 
 501 wxString 
wxMsgCatalogFile::GetCharset() const 
 503     // first, find encoding header: 
 504     const char *hdr 
= StringAtOfs(m_pOrigTable
, 0); 
 505     if ( hdr 
== NULL 
|| hdr
[0] != 0 ) 
 507         // not supported by this catalog, does not have correct header 
 508         return wxEmptyString
; 
 511     wxString header 
= wxString::FromAscii( StringAtOfs(m_pTransTable
, 0)); 
 513     int pos 
= header
.Find(wxT("Content-Type: text/plain; charset=")); 
 514     if ( pos 
== wxNOT_FOUND 
) 
 516         // incorrectly filled Content-Type header 
 517         return wxEmptyString
; 
 520     size_t n 
= pos 
+ 34; /*strlen("Content-Type: text/plain; charset=")*/ 
 521     while ( header
[n
] != wxT('\n') ) 
 522         charset 
<< header
[n
++]; 
 524     if ( charset 
== wxT("CHARSET") ) 
 526         // "CHARSET" is not valid charset, but lazy translator 
 527         return wxEmptyString
; 
 533 // ---------------------------------------------------------------------------- 
 534 // wxMsgCatalog class 
 535 // ---------------------------------------------------------------------------- 
 537 bool wxMsgCatalog::Load(const wxChar 
*szDirPrefix
, const wxChar 
*szName
, 
 538                         bool bConvertEncoding
) 
 540     wxMsgCatalogFile file
; 
 544     if ( file
.Load(szDirPrefix
, szName
) ) 
 546         file
.FillHash(m_messages
, bConvertEncoding
); 
 553 const wxChar 
*wxMsgCatalog::GetString(const wxChar 
*sz
) const 
 555     wxMessagesHash::const_iterator i 
= m_messages
.find(sz
); 
 556     if ( i 
!= m_messages
.end() ) 
 558         return i
->second
.c_str(); 
 564 // ---------------------------------------------------------------------------- 
 566 // ---------------------------------------------------------------------------- 
 568 #include "wx/arrimpl.cpp" 
 569 WX_DECLARE_EXPORTED_OBJARRAY(wxLanguageInfo
, wxLanguageInfoArray
); 
 570 WX_DEFINE_OBJARRAY(wxLanguageInfoArray
); 
 572 wxLanguageInfoArray 
*wxLocale::ms_languagesDB 
= NULL
; 
 574 /*static*/ void wxLocale::CreateLanguagesDB() 
 576     if (ms_languagesDB 
== NULL
) 
 578         ms_languagesDB 
= new wxLanguageInfoArray
; 
 583 /*static*/ void wxLocale::DestroyLanguagesDB() 
 585     delete ms_languagesDB
; 
 586     ms_languagesDB 
= NULL
; 
 592   m_pszOldLocale 
= NULL
; 
 594   m_language 
= wxLANGUAGE_UNKNOWN
; 
 597 // NB: this function has (desired) side effect of changing current locale 
 598 bool wxLocale::Init(const wxChar 
*szName
, 
 599                     const wxChar 
*szShort
, 
 600                     const wxChar 
*szLocale
, 
 602                     bool        bConvertEncoding
) 
 604   m_strLocale 
= szName
; 
 605   m_strShort 
= szShort
; 
 606   m_bConvertEncoding 
= bConvertEncoding
; 
 607   m_language 
= wxLANGUAGE_UNKNOWN
; 
 609   // change current locale (default: same as long name) 
 610   if ( szLocale 
== NULL 
) 
 612     // the argument to setlocale() 
 615     wxCHECK_MSG( szLocale
, FALSE
, _T("no locale to set in wxLocale::Init()") ); 
 617   m_pszOldLocale 
= wxSetlocale(LC_ALL
, szLocale
); 
 618   if ( m_pszOldLocale 
== NULL 
) 
 619     wxLogError(_("locale '%s' can not be set."), szLocale
); 
 621   // the short name will be used to look for catalog files as well, 
 622   // so we need something here 
 623   if ( m_strShort
.IsEmpty() ) { 
 624     // FIXME I don't know how these 2 letter abbreviations are formed, 
 625     //       this wild guess is surely wrong 
 628         m_strShort 
+= (wxChar
)wxTolower(szLocale
[0]); 
 630             m_strShort 
+= (wxChar
)wxTolower(szLocale
[1]); 
 634   // save the old locale to be able to restore it later 
 635   m_pOldLocale 
= wxSetLocale(this); 
 637   // load the default catalog with wxWindows standard messages 
 641     bOk 
= AddCatalog(wxT("wxstd")); 
 646 bool wxLocale::Init(int language
, int flags
) 
 649     if (lang 
== wxLANGUAGE_DEFAULT
) 
 651         // auto detect the language 
 652         lang 
= GetSystemLanguage(); 
 655     // We failed to detect system language, so we will use English: 
 656     if (lang 
== wxLANGUAGE_UNKNOWN
) 
 661     const wxLanguageInfo 
*info 
= GetLanguageInfo(lang
); 
 666         wxLogError(wxT("Unknown language %i."), lang
); 
 670     wxString name 
= info
->Description
; 
 671     wxString canonical 
= info
->CanonicalName
; 
 675 #if defined(__UNIX__) && !defined(__WXMAC__) 
 676     if (language 
== wxLANGUAGE_DEFAULT
) 
 677         locale 
= wxEmptyString
; 
 679         locale 
= info
->CanonicalName
; 
 681     wxMB2WXbuf retloc 
= wxSetlocale(LC_ALL
, locale
); 
 685         // Some C libraries don't like xx_YY form and require xx only 
 686         retloc 
= wxSetlocale(LC_ALL
, locale
.Mid(0,2)); 
 690         // Some C libraries (namely glibc) still use old ISO 639, 
 691         // so will translate the abbrev for them 
 692         wxString mid 
= locale
.Mid(0,2); 
 693         if (mid 
== wxT("he")) 
 694             locale 
= wxT("iw") + locale
.Mid(3); 
 695         else if (mid 
== wxT("id")) 
 696             locale 
= wxT("in") + locale
.Mid(3); 
 697         else if (mid 
== wxT("yi")) 
 698             locale 
= wxT("ji") + locale
.Mid(3); 
 700         retloc 
= wxSetlocale(LC_ALL
, locale
); 
 704         // (This time, we changed locale in previous if-branch, so try again.) 
 705         // Some C libraries don't like xx_YY form and require xx only 
 706         retloc 
= wxSetlocale(LC_ALL
, locale
.Mid(0,2)); 
 710         wxLogError(wxT("Cannot set locale to '%s'."), locale
.c_str()); 
 713 #elif defined(__WIN32__) 
 714     wxMB2WXbuf retloc 
= wxT("C"); 
 715     if (language 
!= wxLANGUAGE_DEFAULT
) 
 717         if (info
->WinLang 
== 0) 
 719             wxLogWarning(wxT("Locale '%s' not supported by OS."), name
.c_str()); 
 720             // retloc already set to "C" 
 724             wxUint32 lcid 
= MAKELCID(MAKELANGID(info
->WinLang
, info
->WinSublang
), 
 726             if (SetThreadLocale(lcid
)) 
 728                 retloc 
= wxSetlocale(LC_ALL
, wxEmptyString
); 
 732                 // Windows9X doesn't support SetThreadLocale, so we must 
 733                 // translate LCID to CRT's setlocale string ourselves 
 735                 if (GetLastError() == ERROR_CALL_NOT_IMPLEMENTED
) 
 738                     buffer
[0] = wxT('\0'); 
 739                     GetLocaleInfo(lcid
, LOCALE_SENGLANGUAGE
, buffer
, 256); 
 741                     if (GetLocaleInfo(lcid
, LOCALE_SENGCOUNTRY
, buffer
, 256) > 0) 
 742                         locale 
<< wxT("_") << buffer
; 
 744                 if (locale
.IsEmpty()) 
 746                     wxLogLastError(wxT("SetThreadLocale")); 
 747                     wxLogError(wxT("Cannot set locale to language %s."), name
.c_str()); 
 752                     retloc 
= wxSetlocale(LC_ALL
, locale
); 
 759         retloc 
= wxSetlocale(LC_ALL
, wxEmptyString
); 
 764         wxLogError(wxT("Cannot set locale to language %s."), name
.c_str()); 
 767 #elif defined(__WXMAC__) || defined(__WXPM__) 
 768     wxMB2WXbuf retloc 
= wxSetlocale(LC_ALL 
, wxEmptyString
); 
 771     #define WX_NO_LOCALE_SUPPORT 
 774 #ifndef WX_NO_LOCALE_SUPPORT 
 775      wxChar 
*szLocale 
= retloc 
? wxStrdup(retloc
) : NULL
; 
 776     bool ret 
= Init(name
, canonical
, retloc
, 
 777                     (flags 
& wxLOCALE_LOAD_DEFAULT
) != 0, 
 778                     (flags 
& wxLOCALE_CONV_ENCODING
) != 0); 
 787 void wxLocale::AddCatalogLookupPathPrefix(const wxString
& prefix
) 
 789     if ( s_searchPrefixes
.Index(prefix
) == wxNOT_FOUND 
) 
 791         s_searchPrefixes
.Add(prefix
); 
 793     //else: already have it 
 796 /*static*/ int wxLocale::GetSystemLanguage() 
 800     // init i to avoid compiler warning 
 802            count 
= ms_languagesDB
->GetCount(); 
 804 #if defined(__UNIX__) && !defined(__WXMAC__) 
 805     // first get the string identifying the language from the environment 
 807     if (!wxGetEnv(wxT("LC_ALL"), &langFull
) && 
 808         !wxGetEnv(wxT("LC_MESSAGES"), &langFull
) && 
 809         !wxGetEnv(wxT("LANG"), &langFull
)) 
 811         // no language specified, threat it as English 
 812         return wxLANGUAGE_ENGLISH
; 
 815     if ( langFull 
== _T("C") || langFull 
== _T("POSIX") ) 
 818         return wxLANGUAGE_ENGLISH
; 
 821     // the language string has the following form 
 823     //      lang[_LANG][.encoding][@modifier] 
 825     // (see environ(5) in the Open Unix specification) 
 827     // where lang is the primary language, LANG is a sublang/territory, 
 828     // encoding is the charset to use and modifier "allows the user to select 
 829     // a specific instance of localization data within a single category" 
 831     // for example, the following strings are valid: 
 836     //      de_DE.iso88591@euro 
 838     // for now we don't use the encoding, although we probably should (doing 
 839     // translations of the msg catalogs on the fly as required) (TODO) 
 841     // we don't use the modifiers neither but we probably should translate 
 842     // "euro" into iso885915 
 843     size_t posEndLang 
= langFull
.find_first_of(_T("@.")); 
 844     if ( posEndLang 
!= wxString::npos 
) 
 846         langFull
.Truncate(posEndLang
); 
 849     // in addition to the format above, we also can have full language names 
 850     // in LANG env var - for example, SuSE is known to use LANG="german" - so 
 853     // do we have just the language (or sublang too)? 
 854     bool justLang 
= langFull
.Len() == LEN_LANG
; 
 856          (langFull
.Len() == LEN_FULL 
&& langFull
[LEN_LANG
] == wxT('_')) ) 
 858         // 0. Make sure the lang is according to latest ISO 639 
 859         //    (this is neccessary because glibc uses iw and in instead 
 860         //    of he and id respectively). 
 862         // the language itself (second part is the dialect/sublang) 
 863         wxString langOrig 
= ExtractLang(langFull
); 
 866         if ( langOrig 
== wxT("iw")) 
 868         else if ( langOrig 
== wxT("in") ) 
 870         else if ( langOrig 
== wxT("ji") ) 
 876         if ( lang 
!= langOrig 
) 
 878             langFull 
= lang 
+ ExtractNotLang(langFull
); 
 881         // 1. Try to find the language either as is: 
 882         for ( i 
= 0; i 
< count
; i
++ ) 
 884             if ( ms_languagesDB
->Item(i
).CanonicalName 
== langFull 
) 
 890         // 2. If langFull is of the form xx_YY, try to find xx: 
 891         if ( i 
== count 
&& !justLang 
) 
 893             for ( i 
= 0; i 
< count
; i
++ ) 
 895                 if ( ms_languagesDB
->Item(i
).CanonicalName 
== lang 
) 
 902         // 3. If langFull is of the form xx, try to find any xx_YY record: 
 903         if ( i 
== count 
&& justLang 
) 
 905             for ( i 
= 0; i 
< count
; i
++ ) 
 907                 if ( ExtractLang(ms_languagesDB
->Item(i
).CanonicalName
) 
 915     else // not standard format 
 917         // try to find the name in verbose description 
 918         for ( i 
= 0; i 
< count
; i
++ ) 
 920             if (ms_languagesDB
->Item(i
).Description
.CmpNoCase(langFull
) == 0) 
 926 #elif defined(__WXMAC__) 
 927     const char* lc 
= NULL 
; 
 928     long lang 
= GetScriptVariable( smSystemScript
, smScriptLang
) ; 
 929     switch( GetScriptManagerVariable( smRegionCode 
) ) { 
 945       case verNetherlands 
: 
1000       // _CY is not part of wx, so we have to translate according to the system language 
1001         if ( lang 
== langGreek 
) { 
1004         else if ( lang 
== langTurkish 
) { 
1011       case verYugoCroatian
: 
1017       case verPakistanUrdu
: 
1020       case verTurkishModified
: 
1023       case verItalianSwiss
: 
1026       case verInternational
: 
1087       case verByeloRussian
: 
1117       case verScottishGaelic
: 
1132       case verIrishGaelicScript
: 
1147       case verSpLatinAmerica
: 
1153       case verFrenchUniversal
: 
1204   for ( i 
= 0; i 
< count
; i
++ ) 
1206       if ( ms_languagesDB
->Item(i
).CanonicalName 
== lc 
) 
1212 #elif defined(__WIN32__) 
1213     LCID lcid 
= GetUserDefaultLCID(); 
1216         wxUint32 lang 
= PRIMARYLANGID(LANGIDFROMLCID(lcid
)); 
1217         wxUint32 sublang 
= SUBLANGID(LANGIDFROMLCID(lcid
)); 
1219         for ( i 
= 0; i 
< count
; i
++ ) 
1221             if (ms_languagesDB
->Item(i
).WinLang 
== lang 
&& 
1222                 ms_languagesDB
->Item(i
).WinSublang 
== sublang
) 
1228     //else: leave wxlang == wxLANGUAGE_UNKNOWN 
1229 #endif // Unix/Win32 
1233         // we did find a matching entry, use it 
1234         return ms_languagesDB
->Item(i
).Language
; 
1237     // no info about this language in the database 
1238     return wxLANGUAGE_UNKNOWN
; 
1241 // ---------------------------------------------------------------------------- 
1243 // ---------------------------------------------------------------------------- 
1245 // this is a bit strange as under Windows we get the encoding name using its 
1246 // numeric value and under Unix we do it the other way round, but this just 
1247 // reflects the way different systems provide he encoding info 
1250 wxString 
wxLocale::GetSystemEncodingName() 
1254 #if defined(__WIN32__) && !defined(__WXMICROWIN__) 
1255     // FIXME: what is the error return value for GetACP()? 
1256     UINT codepage 
= ::GetACP(); 
1257     encname
.Printf(_T("windows-%u"), codepage
); 
1258 #elif defined(__UNIX_LIKE__) 
1260 #if defined(HAVE_LANGINFO_H) && defined(CODESET) 
1261     // GNU libc provides current character set this way (this conforms 
1263     char *oldLocale 
= strdup(setlocale(LC_CTYPE
, NULL
)); 
1264     setlocale(LC_CTYPE
, ""); 
1265     char *alang 
= nl_langinfo(CODESET
); 
1266     setlocale(LC_CTYPE
, oldLocale
); 
1271         // 7 bit ASCII encoding has several alternative names which we should 
1272         // recognize to avoid warnings about unrecognized encoding on each 
1275         // nl_langinfo() under Solaris returns 646 by default which stands for 
1276         // ISO-646, i.e. 7 bit ASCII 
1278         // and recent glibc call it ANSI_X3.4-1968... 
1279         if ( strcmp(alang
, "646") == 0 || 
1280                strcmp(alang
, "ANSI_X3.4-1968") == 0 ) 
1282             encname 
= _T("US-ASCII"); 
1286             encname 
= wxString::FromAscii( alang 
); 
1290 #endif // HAVE_LANGINFO_H 
1292         // if we can't get at the character set directly, try to see if it's in 
1293         // the environment variables (in most cases this won't work, but I was 
1295         char *lang 
= getenv( "LC_ALL"); 
1296         char *dot 
= lang 
? strchr(lang
, '.') : (char *)NULL
; 
1299             lang 
= getenv( "LC_CTYPE" ); 
1301                 dot 
= strchr(lang
, '.' ); 
1305             lang 
= getenv( "LANG"); 
1307                 dot 
= strchr(lang
, '.'); 
1312             encname 
= wxString::FromAscii( dot
+1 ); 
1315 #endif // Win32/Unix 
1321 wxFontEncoding 
wxLocale::GetSystemEncoding() 
1323 #if defined(__WIN32__) && !defined(__WXMICROWIN__) 
1324     UINT codepage 
= ::GetACP(); 
1326     // wxWindows only knows about CP1250-1257, 932, 936, 949, 950 
1327     if ( codepage 
>= 1250 && codepage 
<= 1257 ) 
1329         return (wxFontEncoding
)(wxFONTENCODING_CP1250 
+ codepage 
- 1250); 
1332     if ( codepage 
== 932 ) 
1334         return wxFONTENCODING_CP932
; 
1337     if ( codepage 
== 936 ) 
1339         return wxFONTENCODING_CP936
; 
1342     if ( codepage 
== 949 ) 
1344         return wxFONTENCODING_CP949
; 
1347     if ( codepage 
== 950 ) 
1349         return wxFONTENCODING_CP950
; 
1351 #elif defined(__UNIX_LIKE__) && wxUSE_FONTMAP 
1352     wxString encname 
= GetSystemEncodingName(); 
1353     if ( !encname
.empty() ) 
1355         wxFontEncoding enc 
= wxFontMapper::Get()-> 
1356             CharsetToEncoding(encname
, FALSE 
/* not interactive */); 
1358         // on some modern Linux systems (RedHat 8) the default system locale 
1359         // is UTF8 -- but it isn't supported by wxGTK in ANSI build at all so 
1360         // don't even try to use it in this case 
1362         if ( enc 
== wxFONTENCODING_UTF8 
) 
1364             // the most similar supported encoding... 
1365             enc 
= wxFONTENCODING_ISO8859_1
; 
1367 #endif // !wxUSE_UNICODE 
1369         // this should probably be considered as a bug in CharsetToEncoding(): 
1370         // it shouldn't return wxFONTENCODING_DEFAULT at all - but it does it 
1371         // for US-ASCII charset 
1373         // we, OTOH, definitely shouldn't return it as it doesn't make sense at 
1374         // all (which encoding is it?) 
1375         if ( enc 
!= wxFONTENCODING_DEFAULT 
) 
1379         //else: return wxFONTENCODING_SYSTEM below 
1381 #endif // Win32/Unix 
1383     return wxFONTENCODING_SYSTEM
; 
1387 void wxLocale::AddLanguage(const wxLanguageInfo
& info
) 
1389     CreateLanguagesDB(); 
1390     ms_languagesDB
->Add(info
); 
1394 const wxLanguageInfo 
*wxLocale::GetLanguageInfo(int lang
) 
1396     CreateLanguagesDB(); 
1398     const size_t count 
= ms_languagesDB
->GetCount(); 
1399     for ( size_t i 
= 0; i 
< count
; i
++ ) 
1401         if ( ms_languagesDB
->Item(i
).Language 
== lang 
) 
1403             return &ms_languagesDB
->Item(i
); 
1411 const wxLanguageInfo 
*wxLocale::FindLanguageInfo(const wxString
& locale
) 
1413     CreateLanguagesDB(); 
1415     const wxLanguageInfo 
*infoRet 
= NULL
; 
1417     const size_t count 
= ms_languagesDB
->GetCount(); 
1418     for ( size_t i 
= 0; i 
< count
; i
++ ) 
1420         const wxLanguageInfo 
*info 
= &ms_languagesDB
->Item(i
); 
1422         if ( wxStricmp(locale
, info
->CanonicalName
) == 0 || 
1423                 wxStricmp(locale
, info
->Description
) == 0 ) 
1425             // exact match, stop searching 
1430         if ( wxStricmp(locale
, info
->CanonicalName
.BeforeFirst(_T('_'))) == 0 ) 
1432             // a match -- but maybe we'll find an exact one later, so continue 
1435             // OTOH, maybe we had already found a language match and in this 
1436             // case don't overwrite it becauce the entry for the default 
1437             // country always appears first in ms_languagesDB 
1446 wxString 
wxLocale::GetSysName() const 
1448     return wxSetlocale(LC_ALL
, NULL
); 
1452 wxLocale::~wxLocale() 
1455     wxMsgCatalog 
*pTmpCat
; 
1456     while ( m_pMsgCat 
!= NULL 
) { 
1457         pTmpCat 
= m_pMsgCat
; 
1458         m_pMsgCat 
= m_pMsgCat
->m_pNext
; 
1462     // restore old locale 
1463     wxSetLocale(m_pOldLocale
); 
1464     wxSetlocale(LC_ALL
, m_pszOldLocale
); 
1467 // get the translation of given string in current locale 
1468 const wxChar 
*wxLocale::GetString(const wxChar 
*szOrigString
, 
1469                                   const wxChar 
*szDomain
) const 
1471     if ( wxIsEmpty(szOrigString
) ) 
1474     const wxChar 
*pszTrans 
= NULL
; 
1475     wxMsgCatalog 
*pMsgCat
; 
1477     if ( szDomain 
!= NULL 
) 
1479         pMsgCat 
= FindCatalog(szDomain
); 
1481         // does the catalog exist? 
1482         if ( pMsgCat 
!= NULL 
) 
1483             pszTrans 
= pMsgCat
->GetString(szOrigString
); 
1487         // search in all domains 
1488         for ( pMsgCat 
= m_pMsgCat
; pMsgCat 
!= NULL
; pMsgCat 
= pMsgCat
->m_pNext 
) 
1490             pszTrans 
= pMsgCat
->GetString(szOrigString
); 
1491             if ( pszTrans 
!= NULL 
)   // take the first found 
1496     if ( pszTrans 
== NULL 
) 
1499         if ( !NoTransErr::Suppress() ) 
1501             NoTransErr noTransErr
; 
1503             if ( szDomain 
!= NULL 
) 
1505                 wxLogTrace(_T("i18n"), 
1506                            _T("string '%s' not found in domain '%s' for locale '%s'."), 
1507                            szOrigString
, szDomain
, m_strLocale
.c_str()); 
1511                 wxLogTrace(_T("i18n"), 
1512                            _T("string '%s' not found in locale '%s'."), 
1513                            szOrigString
, m_strLocale
.c_str()); 
1516 #endif // __WXDEBUG__ 
1518         return szOrigString
; 
1524 // find catalog by name in a linked list, return NULL if !found 
1525 wxMsgCatalog 
*wxLocale::FindCatalog(const wxChar 
*szDomain
) const 
1527     // linear search in the linked list 
1528     wxMsgCatalog 
*pMsgCat
; 
1529     for ( pMsgCat 
= m_pMsgCat
; pMsgCat 
!= NULL
; pMsgCat 
= pMsgCat
->m_pNext 
) 
1531         if ( wxStricmp(pMsgCat
->GetName(), szDomain
) == 0 ) 
1538 // check if the given catalog is loaded 
1539 bool wxLocale::IsLoaded(const wxChar 
*szDomain
) const 
1541   return FindCatalog(szDomain
) != NULL
; 
1544 // add a catalog to our linked list 
1545 bool wxLocale::AddCatalog(const wxChar 
*szDomain
) 
1547   wxMsgCatalog 
*pMsgCat 
= new wxMsgCatalog
; 
1549   if ( pMsgCat
->Load(m_strShort
, szDomain
, m_bConvertEncoding
) ) { 
1550     // add it to the head of the list so that in GetString it will 
1551     // be searched before the catalogs added earlier 
1552     pMsgCat
->m_pNext 
= m_pMsgCat
; 
1553     m_pMsgCat 
= pMsgCat
; 
1558     // don't add it because it couldn't be loaded anyway 
1565 // ---------------------------------------------------------------------------- 
1566 // accessors for locale-dependent data 
1567 // ---------------------------------------------------------------------------- 
1574 wxString 
wxLocale::GetInfo(wxLocaleInfo index
) 
1579     buffer
[0] = wxT('\0'); 
1582         case wxSYS_DECIMAL_SEPARATOR
: 
1583             count 
= ::GetLocaleInfo(LOCALE_USER_DEFAULT
, LOCALE_SDECIMAL
, buffer
, 256); 
1589         case wxSYS_LIST_SEPARATOR
: 
1590             count 
= ::GetLocaleInfo(LOCALE_USER_DEFAULT
, LOCALE_SLIST
, buffer
, 256); 
1596         case wxSYS_LEADING_ZERO
: // 0 means no leading zero, 1 means leading zero 
1597             count 
= ::GetLocaleInfo(LOCALE_USER_DEFAULT
, LOCALE_ILZERO
, buffer
, 256); 
1604             wxFAIL_MSG("Unknown System String !"); 
1612 wxString 
wxLocale::GetInfo(wxLocaleInfo index
, wxLocaleCategory
) 
1614     return wxEmptyString
; 
1617 #endif // __WXMSW__/!__WXMSW__ 
1621 // ---------------------------------------------------------------------------- 
1622 // global functions and variables 
1623 // ---------------------------------------------------------------------------- 
1625 // retrieve/change current locale 
1626 // ------------------------------ 
1628 // the current locale object 
1629 static wxLocale 
*g_pLocale 
= NULL
; 
1631 wxLocale 
*wxGetLocale() 
1636 wxLocale 
*wxSetLocale(wxLocale 
*pLocale
) 
1638   wxLocale 
*pOld 
= g_pLocale
; 
1639   g_pLocale 
= pLocale
; 
1645 // ---------------------------------------------------------------------------- 
1646 // wxLocale module (for lazy destruction of languagesDB) 
1647 // ---------------------------------------------------------------------------- 
1649 class wxLocaleModule
: public wxModule
 
1651     DECLARE_DYNAMIC_CLASS(wxLocaleModule
) 
1654         bool OnInit() { return TRUE
; } 
1655         void OnExit() { wxLocale::DestroyLanguagesDB(); } 
1658 IMPLEMENT_DYNAMIC_CLASS(wxLocaleModule
, wxModule
) 
1662 // ---------------------------------------------------------------------------- 
1663 // default languages table & initialization 
1664 // ---------------------------------------------------------------------------- 
1668 // --- --- --- generated code begins here --- --- --- 
1670 // This table is generated by misc/languages/genlang.py 
1671 // When making changes, please put them into misc/languages/langtabl.txt 
1673 #if !defined(__WIN32__) || defined(__WXMICROWIN__) 
1675 #define SETWINLANG(info,lang,sublang) 
1679 #define SETWINLANG(info,lang,sublang) \ 
1680     info.WinLang = lang, info.WinSublang = sublang; 
1682 #ifndef LANG_AFRIKAANS 
1683 #define LANG_AFRIKAANS (0) 
1685 #ifndef LANG_ALBANIAN 
1686 #define LANG_ALBANIAN (0) 
1689 #define LANG_ARABIC (0) 
1691 #ifndef LANG_ARMENIAN 
1692 #define LANG_ARMENIAN (0) 
1694 #ifndef LANG_ASSAMESE 
1695 #define LANG_ASSAMESE (0) 
1698 #define LANG_AZERI (0) 
1701 #define LANG_BASQUE (0) 
1703 #ifndef LANG_BELARUSIAN 
1704 #define LANG_BELARUSIAN (0) 
1706 #ifndef LANG_BENGALI 
1707 #define LANG_BENGALI (0) 
1709 #ifndef LANG_BULGARIAN 
1710 #define LANG_BULGARIAN (0) 
1712 #ifndef LANG_CATALAN 
1713 #define LANG_CATALAN (0) 
1715 #ifndef LANG_CHINESE 
1716 #define LANG_CHINESE (0) 
1718 #ifndef LANG_CROATIAN 
1719 #define LANG_CROATIAN (0) 
1722 #define LANG_CZECH (0) 
1725 #define LANG_DANISH (0) 
1728 #define LANG_DUTCH (0) 
1730 #ifndef LANG_ENGLISH 
1731 #define LANG_ENGLISH (0) 
1733 #ifndef LANG_ESTONIAN 
1734 #define LANG_ESTONIAN (0) 
1736 #ifndef LANG_FAEROESE 
1737 #define LANG_FAEROESE (0) 
1740 #define LANG_FARSI (0) 
1742 #ifndef LANG_FINNISH 
1743 #define LANG_FINNISH (0) 
1746 #define LANG_FRENCH (0) 
1748 #ifndef LANG_GEORGIAN 
1749 #define LANG_GEORGIAN (0) 
1752 #define LANG_GERMAN (0) 
1755 #define LANG_GREEK (0) 
1757 #ifndef LANG_GUJARATI 
1758 #define LANG_GUJARATI (0) 
1761 #define LANG_HEBREW (0) 
1764 #define LANG_HINDI (0) 
1766 #ifndef LANG_HUNGARIAN 
1767 #define LANG_HUNGARIAN (0) 
1769 #ifndef LANG_ICELANDIC 
1770 #define LANG_ICELANDIC (0) 
1772 #ifndef LANG_INDONESIAN 
1773 #define LANG_INDONESIAN (0) 
1775 #ifndef LANG_ITALIAN 
1776 #define LANG_ITALIAN (0) 
1778 #ifndef LANG_JAPANESE 
1779 #define LANG_JAPANESE (0) 
1781 #ifndef LANG_KANNADA 
1782 #define LANG_KANNADA (0) 
1784 #ifndef LANG_KASHMIRI 
1785 #define LANG_KASHMIRI (0) 
1788 #define LANG_KAZAK (0) 
1790 #ifndef LANG_KONKANI 
1791 #define LANG_KONKANI (0) 
1794 #define LANG_KOREAN (0) 
1796 #ifndef LANG_LATVIAN 
1797 #define LANG_LATVIAN (0) 
1799 #ifndef LANG_LITHUANIAN 
1800 #define LANG_LITHUANIAN (0) 
1802 #ifndef LANG_MACEDONIAN 
1803 #define LANG_MACEDONIAN (0) 
1806 #define LANG_MALAY (0) 
1808 #ifndef LANG_MALAYALAM 
1809 #define LANG_MALAYALAM (0) 
1811 #ifndef LANG_MANIPURI 
1812 #define LANG_MANIPURI (0) 
1814 #ifndef LANG_MARATHI 
1815 #define LANG_MARATHI (0) 
1818 #define LANG_NEPALI (0) 
1820 #ifndef LANG_NORWEGIAN 
1821 #define LANG_NORWEGIAN (0) 
1824 #define LANG_ORIYA (0) 
1827 #define LANG_POLISH (0) 
1829 #ifndef LANG_PORTUGUESE 
1830 #define LANG_PORTUGUESE (0) 
1832 #ifndef LANG_PUNJABI 
1833 #define LANG_PUNJABI (0) 
1835 #ifndef LANG_ROMANIAN 
1836 #define LANG_ROMANIAN (0) 
1838 #ifndef LANG_RUSSIAN 
1839 #define LANG_RUSSIAN (0) 
1841 #ifndef LANG_SANSKRIT 
1842 #define LANG_SANSKRIT (0) 
1844 #ifndef LANG_SERBIAN 
1845 #define LANG_SERBIAN (0) 
1848 #define LANG_SINDHI (0) 
1851 #define LANG_SLOVAK (0) 
1853 #ifndef LANG_SLOVENIAN 
1854 #define LANG_SLOVENIAN (0) 
1856 #ifndef LANG_SPANISH 
1857 #define LANG_SPANISH (0) 
1859 #ifndef LANG_SWAHILI 
1860 #define LANG_SWAHILI (0) 
1862 #ifndef LANG_SWEDISH 
1863 #define LANG_SWEDISH (0) 
1866 #define LANG_TAMIL (0) 
1869 #define LANG_TATAR (0) 
1872 #define LANG_TELUGU (0) 
1875 #define LANG_THAI (0) 
1877 #ifndef LANG_TURKISH 
1878 #define LANG_TURKISH (0) 
1880 #ifndef LANG_UKRAINIAN 
1881 #define LANG_UKRAINIAN (0) 
1884 #define LANG_URDU (0) 
1887 #define LANG_UZBEK (0) 
1889 #ifndef LANG_VIETNAMESE 
1890 #define LANG_VIETNAMESE (0) 
1892 #ifndef SUBLANG_ARABIC_ALGERIA 
1893 #define SUBLANG_ARABIC_ALGERIA SUBLANG_DEFAULT 
1895 #ifndef SUBLANG_ARABIC_BAHRAIN 
1896 #define SUBLANG_ARABIC_BAHRAIN SUBLANG_DEFAULT 
1898 #ifndef SUBLANG_ARABIC_EGYPT 
1899 #define SUBLANG_ARABIC_EGYPT SUBLANG_DEFAULT 
1901 #ifndef SUBLANG_ARABIC_IRAQ 
1902 #define SUBLANG_ARABIC_IRAQ SUBLANG_DEFAULT 
1904 #ifndef SUBLANG_ARABIC_JORDAN 
1905 #define SUBLANG_ARABIC_JORDAN SUBLANG_DEFAULT 
1907 #ifndef SUBLANG_ARABIC_KUWAIT 
1908 #define SUBLANG_ARABIC_KUWAIT SUBLANG_DEFAULT 
1910 #ifndef SUBLANG_ARABIC_LEBANON 
1911 #define SUBLANG_ARABIC_LEBANON SUBLANG_DEFAULT 
1913 #ifndef SUBLANG_ARABIC_LIBYA 
1914 #define SUBLANG_ARABIC_LIBYA SUBLANG_DEFAULT 
1916 #ifndef SUBLANG_ARABIC_MOROCCO 
1917 #define SUBLANG_ARABIC_MOROCCO SUBLANG_DEFAULT 
1919 #ifndef SUBLANG_ARABIC_OMAN 
1920 #define SUBLANG_ARABIC_OMAN SUBLANG_DEFAULT 
1922 #ifndef SUBLANG_ARABIC_QATAR 
1923 #define SUBLANG_ARABIC_QATAR SUBLANG_DEFAULT 
1925 #ifndef SUBLANG_ARABIC_SAUDI_ARABIA 
1926 #define SUBLANG_ARABIC_SAUDI_ARABIA SUBLANG_DEFAULT 
1928 #ifndef SUBLANG_ARABIC_SYRIA 
1929 #define SUBLANG_ARABIC_SYRIA SUBLANG_DEFAULT 
1931 #ifndef SUBLANG_ARABIC_TUNISIA 
1932 #define SUBLANG_ARABIC_TUNISIA SUBLANG_DEFAULT 
1934 #ifndef SUBLANG_ARABIC_UAE 
1935 #define SUBLANG_ARABIC_UAE SUBLANG_DEFAULT 
1937 #ifndef SUBLANG_ARABIC_YEMEN 
1938 #define SUBLANG_ARABIC_YEMEN SUBLANG_DEFAULT 
1940 #ifndef SUBLANG_AZERI_CYRILLIC 
1941 #define SUBLANG_AZERI_CYRILLIC SUBLANG_DEFAULT 
1943 #ifndef SUBLANG_AZERI_LATIN 
1944 #define SUBLANG_AZERI_LATIN SUBLANG_DEFAULT 
1946 #ifndef SUBLANG_CHINESE_SIMPLIFIED 
1947 #define SUBLANG_CHINESE_SIMPLIFIED SUBLANG_DEFAULT 
1949 #ifndef SUBLANG_CHINESE_TRADITIONAL 
1950 #define SUBLANG_CHINESE_TRADITIONAL SUBLANG_DEFAULT 
1952 #ifndef SUBLANG_CHINESE_HONGKONG 
1953 #define SUBLANG_CHINESE_HONGKONG SUBLANG_DEFAULT 
1955 #ifndef SUBLANG_CHINESE_MACAU 
1956 #define SUBLANG_CHINESE_MACAU SUBLANG_DEFAULT 
1958 #ifndef SUBLANG_CHINESE_SINGAPORE 
1959 #define SUBLANG_CHINESE_SINGAPORE SUBLANG_DEFAULT 
1961 #ifndef SUBLANG_DUTCH 
1962 #define SUBLANG_DUTCH SUBLANG_DEFAULT 
1964 #ifndef SUBLANG_DUTCH_BELGIAN 
1965 #define SUBLANG_DUTCH_BELGIAN SUBLANG_DEFAULT 
1967 #ifndef SUBLANG_ENGLISH_UK 
1968 #define SUBLANG_ENGLISH_UK SUBLANG_DEFAULT 
1970 #ifndef SUBLANG_ENGLISH_US 
1971 #define SUBLANG_ENGLISH_US SUBLANG_DEFAULT 
1973 #ifndef SUBLANG_ENGLISH_AUS 
1974 #define SUBLANG_ENGLISH_AUS SUBLANG_DEFAULT 
1976 #ifndef SUBLANG_ENGLISH_BELIZE 
1977 #define SUBLANG_ENGLISH_BELIZE SUBLANG_DEFAULT 
1979 #ifndef SUBLANG_ENGLISH_CAN 
1980 #define SUBLANG_ENGLISH_CAN SUBLANG_DEFAULT 
1982 #ifndef SUBLANG_ENGLISH_CARIBBEAN 
1983 #define SUBLANG_ENGLISH_CARIBBEAN SUBLANG_DEFAULT 
1985 #ifndef SUBLANG_ENGLISH_EIRE 
1986 #define SUBLANG_ENGLISH_EIRE SUBLANG_DEFAULT 
1988 #ifndef SUBLANG_ENGLISH_JAMAICA 
1989 #define SUBLANG_ENGLISH_JAMAICA SUBLANG_DEFAULT 
1991 #ifndef SUBLANG_ENGLISH_NZ 
1992 #define SUBLANG_ENGLISH_NZ SUBLANG_DEFAULT 
1994 #ifndef SUBLANG_ENGLISH_PHILIPPINES 
1995 #define SUBLANG_ENGLISH_PHILIPPINES SUBLANG_DEFAULT 
1997 #ifndef SUBLANG_ENGLISH_SOUTH_AFRICA 
1998 #define SUBLANG_ENGLISH_SOUTH_AFRICA SUBLANG_DEFAULT 
2000 #ifndef SUBLANG_ENGLISH_TRINIDAD 
2001 #define SUBLANG_ENGLISH_TRINIDAD SUBLANG_DEFAULT 
2003 #ifndef SUBLANG_ENGLISH_ZIMBABWE 
2004 #define SUBLANG_ENGLISH_ZIMBABWE SUBLANG_DEFAULT 
2006 #ifndef SUBLANG_FRENCH 
2007 #define SUBLANG_FRENCH SUBLANG_DEFAULT 
2009 #ifndef SUBLANG_FRENCH_BELGIAN 
2010 #define SUBLANG_FRENCH_BELGIAN SUBLANG_DEFAULT 
2012 #ifndef SUBLANG_FRENCH_CANADIAN 
2013 #define SUBLANG_FRENCH_CANADIAN SUBLANG_DEFAULT 
2015 #ifndef SUBLANG_FRENCH_LUXEMBOURG 
2016 #define SUBLANG_FRENCH_LUXEMBOURG SUBLANG_DEFAULT 
2018 #ifndef SUBLANG_FRENCH_MONACO 
2019 #define SUBLANG_FRENCH_MONACO SUBLANG_DEFAULT 
2021 #ifndef SUBLANG_FRENCH_SWISS 
2022 #define SUBLANG_FRENCH_SWISS SUBLANG_DEFAULT 
2024 #ifndef SUBLANG_GERMAN 
2025 #define SUBLANG_GERMAN SUBLANG_DEFAULT 
2027 #ifndef SUBLANG_GERMAN_AUSTRIAN 
2028 #define SUBLANG_GERMAN_AUSTRIAN SUBLANG_DEFAULT 
2030 #ifndef SUBLANG_GERMAN_LIECHTENSTEIN 
2031 #define SUBLANG_GERMAN_LIECHTENSTEIN SUBLANG_DEFAULT 
2033 #ifndef SUBLANG_GERMAN_LUXEMBOURG 
2034 #define SUBLANG_GERMAN_LUXEMBOURG SUBLANG_DEFAULT 
2036 #ifndef SUBLANG_GERMAN_SWISS 
2037 #define SUBLANG_GERMAN_SWISS SUBLANG_DEFAULT 
2039 #ifndef SUBLANG_ITALIAN 
2040 #define SUBLANG_ITALIAN SUBLANG_DEFAULT 
2042 #ifndef SUBLANG_ITALIAN_SWISS 
2043 #define SUBLANG_ITALIAN_SWISS SUBLANG_DEFAULT 
2045 #ifndef SUBLANG_KASHMIRI_INDIA 
2046 #define SUBLANG_KASHMIRI_INDIA SUBLANG_DEFAULT 
2048 #ifndef SUBLANG_KOREAN 
2049 #define SUBLANG_KOREAN SUBLANG_DEFAULT 
2051 #ifndef SUBLANG_LITHUANIAN 
2052 #define SUBLANG_LITHUANIAN SUBLANG_DEFAULT 
2054 #ifndef SUBLANG_MALAY_BRUNEI_DARUSSALAM 
2055 #define SUBLANG_MALAY_BRUNEI_DARUSSALAM SUBLANG_DEFAULT 
2057 #ifndef SUBLANG_MALAY_MALAYSIA 
2058 #define SUBLANG_MALAY_MALAYSIA SUBLANG_DEFAULT 
2060 #ifndef SUBLANG_NEPALI_INDIA 
2061 #define SUBLANG_NEPALI_INDIA SUBLANG_DEFAULT 
2063 #ifndef SUBLANG_NORWEGIAN_BOKMAL 
2064 #define SUBLANG_NORWEGIAN_BOKMAL SUBLANG_DEFAULT 
2066 #ifndef SUBLANG_NORWEGIAN_NYNORSK 
2067 #define SUBLANG_NORWEGIAN_NYNORSK SUBLANG_DEFAULT 
2069 #ifndef SUBLANG_PORTUGUESE 
2070 #define SUBLANG_PORTUGUESE SUBLANG_DEFAULT 
2072 #ifndef SUBLANG_PORTUGUESE_BRAZILIAN 
2073 #define SUBLANG_PORTUGUESE_BRAZILIAN SUBLANG_DEFAULT 
2075 #ifndef SUBLANG_SERBIAN_CYRILLIC 
2076 #define SUBLANG_SERBIAN_CYRILLIC SUBLANG_DEFAULT 
2078 #ifndef SUBLANG_SERBIAN_LATIN 
2079 #define SUBLANG_SERBIAN_LATIN SUBLANG_DEFAULT 
2081 #ifndef SUBLANG_SPANISH 
2082 #define SUBLANG_SPANISH SUBLANG_DEFAULT 
2084 #ifndef SUBLANG_SPANISH_ARGENTINA 
2085 #define SUBLANG_SPANISH_ARGENTINA SUBLANG_DEFAULT 
2087 #ifndef SUBLANG_SPANISH_BOLIVIA 
2088 #define SUBLANG_SPANISH_BOLIVIA SUBLANG_DEFAULT 
2090 #ifndef SUBLANG_SPANISH_CHILE 
2091 #define SUBLANG_SPANISH_CHILE SUBLANG_DEFAULT 
2093 #ifndef SUBLANG_SPANISH_COLOMBIA 
2094 #define SUBLANG_SPANISH_COLOMBIA SUBLANG_DEFAULT 
2096 #ifndef SUBLANG_SPANISH_COSTA_RICA 
2097 #define SUBLANG_SPANISH_COSTA_RICA SUBLANG_DEFAULT 
2099 #ifndef SUBLANG_SPANISH_DOMINICAN_REPUBLIC 
2100 #define SUBLANG_SPANISH_DOMINICAN_REPUBLIC SUBLANG_DEFAULT 
2102 #ifndef SUBLANG_SPANISH_ECUADOR 
2103 #define SUBLANG_SPANISH_ECUADOR SUBLANG_DEFAULT 
2105 #ifndef SUBLANG_SPANISH_EL_SALVADOR 
2106 #define SUBLANG_SPANISH_EL_SALVADOR SUBLANG_DEFAULT 
2108 #ifndef SUBLANG_SPANISH_GUATEMALA 
2109 #define SUBLANG_SPANISH_GUATEMALA SUBLANG_DEFAULT 
2111 #ifndef SUBLANG_SPANISH_HONDURAS 
2112 #define SUBLANG_SPANISH_HONDURAS SUBLANG_DEFAULT 
2114 #ifndef SUBLANG_SPANISH_MEXICAN 
2115 #define SUBLANG_SPANISH_MEXICAN SUBLANG_DEFAULT 
2117 #ifndef SUBLANG_SPANISH_MODERN 
2118 #define SUBLANG_SPANISH_MODERN SUBLANG_DEFAULT 
2120 #ifndef SUBLANG_SPANISH_NICARAGUA 
2121 #define SUBLANG_SPANISH_NICARAGUA SUBLANG_DEFAULT 
2123 #ifndef SUBLANG_SPANISH_PANAMA 
2124 #define SUBLANG_SPANISH_PANAMA SUBLANG_DEFAULT 
2126 #ifndef SUBLANG_SPANISH_PARAGUAY 
2127 #define SUBLANG_SPANISH_PARAGUAY SUBLANG_DEFAULT 
2129 #ifndef SUBLANG_SPANISH_PERU 
2130 #define SUBLANG_SPANISH_PERU SUBLANG_DEFAULT 
2132 #ifndef SUBLANG_SPANISH_PUERTO_RICO 
2133 #define SUBLANG_SPANISH_PUERTO_RICO SUBLANG_DEFAULT 
2135 #ifndef SUBLANG_SPANISH_URUGUAY 
2136 #define SUBLANG_SPANISH_URUGUAY SUBLANG_DEFAULT 
2138 #ifndef SUBLANG_SPANISH_VENEZUELA 
2139 #define SUBLANG_SPANISH_VENEZUELA SUBLANG_DEFAULT 
2141 #ifndef SUBLANG_SWEDISH 
2142 #define SUBLANG_SWEDISH SUBLANG_DEFAULT 
2144 #ifndef SUBLANG_SWEDISH_FINLAND 
2145 #define SUBLANG_SWEDISH_FINLAND SUBLANG_DEFAULT 
2147 #ifndef SUBLANG_URDU_INDIA 
2148 #define SUBLANG_URDU_INDIA SUBLANG_DEFAULT 
2150 #ifndef SUBLANG_URDU_PAKISTAN 
2151 #define SUBLANG_URDU_PAKISTAN SUBLANG_DEFAULT 
2153 #ifndef SUBLANG_UZBEK_CYRILLIC 
2154 #define SUBLANG_UZBEK_CYRILLIC SUBLANG_DEFAULT 
2156 #ifndef SUBLANG_UZBEK_LATIN 
2157 #define SUBLANG_UZBEK_LATIN SUBLANG_DEFAULT 
2163 #define LNG(wxlang, canonical, winlang, winsublang, desc) \ 
2164     info.Language = wxlang;                               \ 
2165     info.CanonicalName = wxT(canonical);                  \ 
2166     info.Description = wxT(desc);                         \ 
2167     SETWINLANG(info, winlang, winsublang)                 \ 
2170 void wxLocale::InitLanguagesDB() 
2172    wxLanguageInfo info
; 
2173    wxStringTokenizer tkn
; 
2175    LNG(wxLANGUAGE_ABKHAZIAN
,                  "ab"   , 0              , 0                                 , "Abkhazian") 
2176    LNG(wxLANGUAGE_AFAR
,                       "aa"   , 0              , 0                                 , "Afar") 
2177    LNG(wxLANGUAGE_AFRIKAANS
,                  "af_ZA", LANG_AFRIKAANS 
, SUBLANG_DEFAULT                   
, "Afrikaans") 
2178    LNG(wxLANGUAGE_ALBANIAN
,                   "sq_AL", LANG_ALBANIAN  
, SUBLANG_DEFAULT                   
, "Albanian") 
2179    LNG(wxLANGUAGE_AMHARIC
,                    "am"   , 0              , 0                                 , "Amharic") 
2180    LNG(wxLANGUAGE_ARABIC
,                     "ar"   , LANG_ARABIC    
, SUBLANG_DEFAULT                   
, "Arabic") 
2181    LNG(wxLANGUAGE_ARABIC_ALGERIA
,             "ar_DZ", LANG_ARABIC    
, SUBLANG_ARABIC_ALGERIA            
, "Arabic (Algeria)") 
2182    LNG(wxLANGUAGE_ARABIC_BAHRAIN
,             "ar_BH", LANG_ARABIC    
, SUBLANG_ARABIC_BAHRAIN            
, "Arabic (Bahrain)") 
2183    LNG(wxLANGUAGE_ARABIC_EGYPT
,               "ar_EG", LANG_ARABIC    
, SUBLANG_ARABIC_EGYPT              
, "Arabic (Egypt)") 
2184    LNG(wxLANGUAGE_ARABIC_IRAQ
,                "ar_IQ", LANG_ARABIC    
, SUBLANG_ARABIC_IRAQ               
, "Arabic (Iraq)") 
2185    LNG(wxLANGUAGE_ARABIC_JORDAN
,              "ar_JO", LANG_ARABIC    
, SUBLANG_ARABIC_JORDAN             
, "Arabic (Jordan)") 
2186    LNG(wxLANGUAGE_ARABIC_KUWAIT
,              "ar_KW", LANG_ARABIC    
, SUBLANG_ARABIC_KUWAIT             
, "Arabic (Kuwait)") 
2187    LNG(wxLANGUAGE_ARABIC_LEBANON
,             "ar_LB", LANG_ARABIC    
, SUBLANG_ARABIC_LEBANON            
, "Arabic (Lebanon)") 
2188    LNG(wxLANGUAGE_ARABIC_LIBYA
,               "ar_LY", LANG_ARABIC    
, SUBLANG_ARABIC_LIBYA              
, "Arabic (Libya)") 
2189    LNG(wxLANGUAGE_ARABIC_MOROCCO
,             "ar_MA", LANG_ARABIC    
, SUBLANG_ARABIC_MOROCCO            
, "Arabic (Morocco)") 
2190    LNG(wxLANGUAGE_ARABIC_OMAN
,                "ar_OM", LANG_ARABIC    
, SUBLANG_ARABIC_OMAN               
, "Arabic (Oman)") 
2191    LNG(wxLANGUAGE_ARABIC_QATAR
,               "ar_QA", LANG_ARABIC    
, SUBLANG_ARABIC_QATAR              
, "Arabic (Qatar)") 
2192    LNG(wxLANGUAGE_ARABIC_SAUDI_ARABIA
,        "ar_SA", LANG_ARABIC    
, SUBLANG_ARABIC_SAUDI_ARABIA       
, "Arabic (Saudi Arabia)") 
2193    LNG(wxLANGUAGE_ARABIC_SUDAN
,               "ar_SD", 0              , 0                                 , "Arabic (Sudan)") 
2194    LNG(wxLANGUAGE_ARABIC_SYRIA
,               "ar_SY", LANG_ARABIC    
, SUBLANG_ARABIC_SYRIA              
, "Arabic (Syria)") 
2195    LNG(wxLANGUAGE_ARABIC_TUNISIA
,             "ar_TN", LANG_ARABIC    
, SUBLANG_ARABIC_TUNISIA            
, "Arabic (Tunisia)") 
2196    LNG(wxLANGUAGE_ARABIC_UAE
,                 "ar_AE", LANG_ARABIC    
, SUBLANG_ARABIC_UAE                
, "Arabic (Uae)") 
2197    LNG(wxLANGUAGE_ARABIC_YEMEN
,               "ar_YE", LANG_ARABIC    
, SUBLANG_ARABIC_YEMEN              
, "Arabic (Yemen)") 
2198    LNG(wxLANGUAGE_ARMENIAN
,                   "hy"   , LANG_ARMENIAN  
, SUBLANG_DEFAULT                   
, "Armenian") 
2199    LNG(wxLANGUAGE_ASSAMESE
,                   "as"   , LANG_ASSAMESE  
, SUBLANG_DEFAULT                   
, "Assamese") 
2200    LNG(wxLANGUAGE_AYMARA
,                     "ay"   , 0              , 0                                 , "Aymara") 
2201    LNG(wxLANGUAGE_AZERI
,                      "az"   , LANG_AZERI     
, SUBLANG_DEFAULT                   
, "Azeri") 
2202    LNG(wxLANGUAGE_AZERI_CYRILLIC
,             "az"   , LANG_AZERI     
, SUBLANG_AZERI_CYRILLIC            
, "Azeri (Cyrillic)") 
2203    LNG(wxLANGUAGE_AZERI_LATIN
,                "az"   , LANG_AZERI     
, SUBLANG_AZERI_LATIN               
, "Azeri (Latin)") 
2204    LNG(wxLANGUAGE_BASHKIR
,                    "ba"   , 0              , 0                                 , "Bashkir") 
2205    LNG(wxLANGUAGE_BASQUE
,                     "eu_ES", LANG_BASQUE    
, SUBLANG_DEFAULT                   
, "Basque") 
2206    LNG(wxLANGUAGE_BELARUSIAN
,                 "be_BY", LANG_BELARUSIAN
, SUBLANG_DEFAULT                   
, "Belarusian") 
2207    LNG(wxLANGUAGE_BENGALI
,                    "bn"   , LANG_BENGALI   
, SUBLANG_DEFAULT                   
, "Bengali") 
2208    LNG(wxLANGUAGE_BHUTANI
,                    "dz"   , 0              , 0                                 , "Bhutani") 
2209    LNG(wxLANGUAGE_BIHARI
,                     "bh"   , 0              , 0                                 , "Bihari") 
2210    LNG(wxLANGUAGE_BISLAMA
,                    "bi"   , 0              , 0                                 , "Bislama") 
2211    LNG(wxLANGUAGE_BRETON
,                     "br"   , 0              , 0                                 , "Breton") 
2212    LNG(wxLANGUAGE_BULGARIAN
,                  "bg_BG", LANG_BULGARIAN 
, SUBLANG_DEFAULT                   
, "Bulgarian") 
2213    LNG(wxLANGUAGE_BURMESE
,                    "my"   , 0              , 0                                 , "Burmese") 
2214    LNG(wxLANGUAGE_CAMBODIAN
,                  "km"   , 0              , 0                                 , "Cambodian") 
2215    LNG(wxLANGUAGE_CATALAN
,                    "ca_ES", LANG_CATALAN   
, SUBLANG_DEFAULT                   
, "Catalan") 
2216    LNG(wxLANGUAGE_CHINESE
,                    "zh_CN", LANG_CHINESE   
, SUBLANG_DEFAULT                   
, "Chinese") 
2217    LNG(wxLANGUAGE_CHINESE_SIMPLIFIED
,         "zh_CN", LANG_CHINESE   
, SUBLANG_CHINESE_SIMPLIFIED        
, "Chinese (Simplified)") 
2218    LNG(wxLANGUAGE_CHINESE_TRADITIONAL
,        "zh_TW", LANG_CHINESE   
, SUBLANG_CHINESE_TRADITIONAL       
, "Chinese (Traditional)") 
2219    LNG(wxLANGUAGE_CHINESE_HONGKONG
,           "zh_HK", LANG_CHINESE   
, SUBLANG_CHINESE_HONGKONG          
, "Chinese (Hongkong)") 
2220    LNG(wxLANGUAGE_CHINESE_MACAU
,              "zh_MO", LANG_CHINESE   
, SUBLANG_CHINESE_MACAU             
, "Chinese (Macau)") 
2221    LNG(wxLANGUAGE_CHINESE_SINGAPORE
,          "zh_SG", LANG_CHINESE   
, SUBLANG_CHINESE_SINGAPORE         
, "Chinese (Singapore)") 
2222    LNG(wxLANGUAGE_CHINESE_TAIWAN
,             "zh_TW", LANG_CHINESE   
, SUBLANG_CHINESE_TRADITIONAL       
, "Chinese (Taiwan)") 
2223    LNG(wxLANGUAGE_CORSICAN
,                   "co"   , 0              , 0                                 , "Corsican") 
2224    LNG(wxLANGUAGE_CROATIAN
,                   "hr_HR", LANG_CROATIAN  
, SUBLANG_DEFAULT                   
, "Croatian") 
2225    LNG(wxLANGUAGE_CZECH
,                      "cs_CZ", LANG_CZECH     
, SUBLANG_DEFAULT                   
, "Czech") 
2226    LNG(wxLANGUAGE_DANISH
,                     "da_DK", LANG_DANISH    
, SUBLANG_DEFAULT                   
, "Danish") 
2227    LNG(wxLANGUAGE_DUTCH
,                      "nl_NL", LANG_DUTCH     
, SUBLANG_DUTCH                     
, "Dutch") 
2228    LNG(wxLANGUAGE_DUTCH_BELGIAN
,              "nl_BE", LANG_DUTCH     
, SUBLANG_DUTCH_BELGIAN             
, "Dutch (Belgian)") 
2229    LNG(wxLANGUAGE_ENGLISH
,                    "en_GB", LANG_ENGLISH   
, SUBLANG_ENGLISH_UK                
, "English") 
2230    LNG(wxLANGUAGE_ENGLISH_UK
,                 "en_GB", LANG_ENGLISH   
, SUBLANG_ENGLISH_UK                
, "English (U.K.)") 
2231    LNG(wxLANGUAGE_ENGLISH_US
,                 "en_US", LANG_ENGLISH   
, SUBLANG_ENGLISH_US                
, "English (U.S.)") 
2232    LNG(wxLANGUAGE_ENGLISH_AUSTRALIA
,          "en_AU", LANG_ENGLISH   
, SUBLANG_ENGLISH_AUS               
, "English (Australia)") 
2233    LNG(wxLANGUAGE_ENGLISH_BELIZE
,             "en_BZ", LANG_ENGLISH   
, SUBLANG_ENGLISH_BELIZE            
, "English (Belize)") 
2234    LNG(wxLANGUAGE_ENGLISH_BOTSWANA
,           "en_BW", 0              , 0                                 , "English (Botswana)") 
2235    LNG(wxLANGUAGE_ENGLISH_CANADA
,             "en_CA", LANG_ENGLISH   
, SUBLANG_ENGLISH_CAN               
, "English (Canada)") 
2236    LNG(wxLANGUAGE_ENGLISH_CARIBBEAN
,          "en_CB", LANG_ENGLISH   
, SUBLANG_ENGLISH_CARIBBEAN         
, "English (Caribbean)") 
2237    LNG(wxLANGUAGE_ENGLISH_DENMARK
,            "en_DK", 0              , 0                                 , "English (Denmark)") 
2238    LNG(wxLANGUAGE_ENGLISH_EIRE
,               "en_IE", LANG_ENGLISH   
, SUBLANG_ENGLISH_EIRE              
, "English (Eire)") 
2239    LNG(wxLANGUAGE_ENGLISH_JAMAICA
,            "en_JM", LANG_ENGLISH   
, SUBLANG_ENGLISH_JAMAICA           
, "English (Jamaica)") 
2240    LNG(wxLANGUAGE_ENGLISH_NEW_ZEALAND
,        "en_NZ", LANG_ENGLISH   
, SUBLANG_ENGLISH_NZ                
, "English (New Zealand)") 
2241    LNG(wxLANGUAGE_ENGLISH_PHILIPPINES
,        "en_PH", LANG_ENGLISH   
, SUBLANG_ENGLISH_PHILIPPINES       
, "English (Philippines)") 
2242    LNG(wxLANGUAGE_ENGLISH_SOUTH_AFRICA
,       "en_ZA", LANG_ENGLISH   
, SUBLANG_ENGLISH_SOUTH_AFRICA      
, "English (South Africa)") 
2243    LNG(wxLANGUAGE_ENGLISH_TRINIDAD
,           "en_TT", LANG_ENGLISH   
, SUBLANG_ENGLISH_TRINIDAD          
, "English (Trinidad)") 
2244    LNG(wxLANGUAGE_ENGLISH_ZIMBABWE
,           "en_ZW", LANG_ENGLISH   
, SUBLANG_ENGLISH_ZIMBABWE          
, "English (Zimbabwe)") 
2245    LNG(wxLANGUAGE_ESPERANTO
,                  "eo"   , 0              , 0                                 , "Esperanto") 
2246    LNG(wxLANGUAGE_ESTONIAN
,                   "et_EE", LANG_ESTONIAN  
, SUBLANG_DEFAULT                   
, "Estonian") 
2247    LNG(wxLANGUAGE_FAEROESE
,                   "fo_FO", LANG_FAEROESE  
, SUBLANG_DEFAULT                   
, "Faeroese") 
2248    LNG(wxLANGUAGE_FARSI
,                      "fa_IR", LANG_FARSI     
, SUBLANG_DEFAULT                   
, "Farsi") 
2249    LNG(wxLANGUAGE_FIJI
,                       "fj"   , 0              , 0                                 , "Fiji") 
2250    LNG(wxLANGUAGE_FINNISH
,                    "fi_FI", LANG_FINNISH   
, SUBLANG_DEFAULT                   
, "Finnish") 
2251    LNG(wxLANGUAGE_FRENCH
,                     "fr_FR", LANG_FRENCH    
, SUBLANG_FRENCH                    
, "French") 
2252    LNG(wxLANGUAGE_FRENCH_BELGIAN
,             "fr_BE", LANG_FRENCH    
, SUBLANG_FRENCH_BELGIAN            
, "French (Belgian)") 
2253    LNG(wxLANGUAGE_FRENCH_CANADIAN
,            "fr_CA", LANG_FRENCH    
, SUBLANG_FRENCH_CANADIAN           
, "French (Canadian)") 
2254    LNG(wxLANGUAGE_FRENCH_LUXEMBOURG
,          "fr_LU", LANG_FRENCH    
, SUBLANG_FRENCH_LUXEMBOURG         
, "French (Luxembourg)") 
2255    LNG(wxLANGUAGE_FRENCH_MONACO
,              "fr_MC", LANG_FRENCH    
, SUBLANG_FRENCH_MONACO             
, "French (Monaco)") 
2256    LNG(wxLANGUAGE_FRENCH_SWISS
,               "fr_CH", LANG_FRENCH    
, SUBLANG_FRENCH_SWISS              
, "French (Swiss)") 
2257    LNG(wxLANGUAGE_FRISIAN
,                    "fy"   , 0              , 0                                 , "Frisian") 
2258    LNG(wxLANGUAGE_GALICIAN
,                   "gl_ES", 0              , 0                                 , "Galician") 
2259    LNG(wxLANGUAGE_GEORGIAN
,                   "ka"   , LANG_GEORGIAN  
, SUBLANG_DEFAULT                   
, "Georgian") 
2260    LNG(wxLANGUAGE_GERMAN
,                     "de_DE", LANG_GERMAN    
, SUBLANG_GERMAN                    
, "German") 
2261    LNG(wxLANGUAGE_GERMAN_AUSTRIAN
,            "de_AT", LANG_GERMAN    
, SUBLANG_GERMAN_AUSTRIAN           
, "German (Austrian)") 
2262    LNG(wxLANGUAGE_GERMAN_BELGIUM
,             "de_BE", 0              , 0                                 , "German (Belgium)") 
2263    LNG(wxLANGUAGE_GERMAN_LIECHTENSTEIN
,       "de_LI", LANG_GERMAN    
, SUBLANG_GERMAN_LIECHTENSTEIN      
, "German (Liechtenstein)") 
2264    LNG(wxLANGUAGE_GERMAN_LUXEMBOURG
,          "de_LU", LANG_GERMAN    
, SUBLANG_GERMAN_LUXEMBOURG         
, "German (Luxembourg)") 
2265    LNG(wxLANGUAGE_GERMAN_SWISS
,               "de_CH", LANG_GERMAN    
, SUBLANG_GERMAN_SWISS              
, "German (Swiss)") 
2266    LNG(wxLANGUAGE_GREEK
,                      "el_GR", LANG_GREEK     
, SUBLANG_DEFAULT                   
, "Greek") 
2267    LNG(wxLANGUAGE_GREENLANDIC
,                "kl_GL", 0              , 0                                 , "Greenlandic") 
2268    LNG(wxLANGUAGE_GUARANI
,                    "gn"   , 0              , 0                                 , "Guarani") 
2269    LNG(wxLANGUAGE_GUJARATI
,                   "gu"   , LANG_GUJARATI  
, SUBLANG_DEFAULT                   
, "Gujarati") 
2270    LNG(wxLANGUAGE_HAUSA
,                      "ha"   , 0              , 0                                 , "Hausa") 
2271    LNG(wxLANGUAGE_HEBREW
,                     "he_IL", LANG_HEBREW    
, SUBLANG_DEFAULT                   
, "Hebrew") 
2272    LNG(wxLANGUAGE_HINDI
,                      "hi_IN", LANG_HINDI     
, SUBLANG_DEFAULT                   
, "Hindi") 
2273    LNG(wxLANGUAGE_HUNGARIAN
,                  "hu_HU", LANG_HUNGARIAN 
, SUBLANG_DEFAULT                   
, "Hungarian") 
2274    LNG(wxLANGUAGE_ICELANDIC
,                  "is_IS", LANG_ICELANDIC 
, SUBLANG_DEFAULT                   
, "Icelandic") 
2275    LNG(wxLANGUAGE_INDONESIAN
,                 "id_ID", LANG_INDONESIAN
, SUBLANG_DEFAULT                   
, "Indonesian") 
2276    LNG(wxLANGUAGE_INTERLINGUA
,                "ia"   , 0              , 0                                 , "Interlingua") 
2277    LNG(wxLANGUAGE_INTERLINGUE
,                "ie"   , 0              , 0                                 , "Interlingue") 
2278    LNG(wxLANGUAGE_INUKTITUT
,                  "iu"   , 0              , 0                                 , "Inuktitut") 
2279    LNG(wxLANGUAGE_INUPIAK
,                    "ik"   , 0              , 0                                 , "Inupiak") 
2280    LNG(wxLANGUAGE_IRISH
,                      "ga_IE", 0              , 0                                 , "Irish") 
2281    LNG(wxLANGUAGE_ITALIAN
,                    "it_IT", LANG_ITALIAN   
, SUBLANG_ITALIAN                   
, "Italian") 
2282    LNG(wxLANGUAGE_ITALIAN_SWISS
,              "it_CH", LANG_ITALIAN   
, SUBLANG_ITALIAN_SWISS             
, "Italian (Swiss)") 
2283    LNG(wxLANGUAGE_JAPANESE
,                   "ja_JP", LANG_JAPANESE  
, SUBLANG_DEFAULT                   
, "Japanese") 
2284    LNG(wxLANGUAGE_JAVANESE
,                   "jw"   , 0              , 0                                 , "Javanese") 
2285    LNG(wxLANGUAGE_KANNADA
,                    "kn"   , LANG_KANNADA   
, SUBLANG_DEFAULT                   
, "Kannada") 
2286    LNG(wxLANGUAGE_KASHMIRI
,                   "ks"   , LANG_KASHMIRI  
, SUBLANG_DEFAULT                   
, "Kashmiri") 
2287    LNG(wxLANGUAGE_KASHMIRI_INDIA
,             "ks_IN", LANG_KASHMIRI  
, SUBLANG_KASHMIRI_INDIA            
, "Kashmiri (India)") 
2288    LNG(wxLANGUAGE_KAZAKH
,                     "kk"   , LANG_KAZAK     
, SUBLANG_DEFAULT                   
, "Kazakh") 
2289    LNG(wxLANGUAGE_KERNEWEK
,                   "kw_GB", 0              , 0                                 , "Kernewek") 
2290    LNG(wxLANGUAGE_KINYARWANDA
,                "rw"   , 0              , 0                                 , "Kinyarwanda") 
2291    LNG(wxLANGUAGE_KIRGHIZ
,                    "ky"   , 0              , 0                                 , "Kirghiz") 
2292    LNG(wxLANGUAGE_KIRUNDI
,                    "rn"   , 0              , 0                                 , "Kirundi") 
2293    LNG(wxLANGUAGE_KONKANI
,                    ""     , LANG_KONKANI   
, SUBLANG_DEFAULT                   
, "Konkani") 
2294    LNG(wxLANGUAGE_KOREAN
,                     "ko_KR", LANG_KOREAN    
, SUBLANG_KOREAN                    
, "Korean") 
2295    LNG(wxLANGUAGE_KURDISH
,                    "ku"   , 0              , 0                                 , "Kurdish") 
2296    LNG(wxLANGUAGE_LAOTHIAN
,                   "lo"   , 0              , 0                                 , "Laothian") 
2297    LNG(wxLANGUAGE_LATIN
,                      "la"   , 0              , 0                                 , "Latin") 
2298    LNG(wxLANGUAGE_LATVIAN
,                    "lv_LV", LANG_LATVIAN   
, SUBLANG_DEFAULT                   
, "Latvian") 
2299    LNG(wxLANGUAGE_LINGALA
,                    "ln"   , 0              , 0                                 , "Lingala") 
2300    LNG(wxLANGUAGE_LITHUANIAN
,                 "lt_LT", LANG_LITHUANIAN
, SUBLANG_LITHUANIAN                
, "Lithuanian") 
2301    LNG(wxLANGUAGE_MACEDONIAN
,                 "mk_MK", LANG_MACEDONIAN
, SUBLANG_DEFAULT                   
, "Macedonian") 
2302    LNG(wxLANGUAGE_MALAGASY
,                   "mg"   , 0              , 0                                 , "Malagasy") 
2303    LNG(wxLANGUAGE_MALAY
,                      "ms_MY", LANG_MALAY     
, SUBLANG_DEFAULT                   
, "Malay") 
2304    LNG(wxLANGUAGE_MALAYALAM
,                  "ml"   , LANG_MALAYALAM 
, SUBLANG_DEFAULT                   
, "Malayalam") 
2305    LNG(wxLANGUAGE_MALAY_BRUNEI_DARUSSALAM
,    "ms_BN", LANG_MALAY     
, SUBLANG_MALAY_BRUNEI_DARUSSALAM   
, "Malay (Brunei Darussalam)") 
2306    LNG(wxLANGUAGE_MALAY_MALAYSIA
,             "ms_MY", LANG_MALAY     
, SUBLANG_MALAY_MALAYSIA            
, "Malay (Malaysia)") 
2307    LNG(wxLANGUAGE_MALTESE
,                    "mt_MT", 0              , 0                                 , "Maltese") 
2308    LNG(wxLANGUAGE_MANIPURI
,                   ""     , LANG_MANIPURI  
, SUBLANG_DEFAULT                   
, "Manipuri") 
2309    LNG(wxLANGUAGE_MAORI
,                      "mi"   , 0              , 0                                 , "Maori") 
2310    LNG(wxLANGUAGE_MARATHI
,                    "mr_IN", LANG_MARATHI   
, SUBLANG_DEFAULT                   
, "Marathi") 
2311    LNG(wxLANGUAGE_MOLDAVIAN
,                  "mo"   , 0              , 0                                 , "Moldavian") 
2312    LNG(wxLANGUAGE_MONGOLIAN
,                  "mn"   , 0              , 0                                 , "Mongolian") 
2313    LNG(wxLANGUAGE_NAURU
,                      "na"   , 0              , 0                                 , "Nauru") 
2314    LNG(wxLANGUAGE_NEPALI
,                     "ne"   , LANG_NEPALI    
, SUBLANG_DEFAULT                   
, "Nepali") 
2315    LNG(wxLANGUAGE_NEPALI_INDIA
,               "ne_IN", LANG_NEPALI    
, SUBLANG_NEPALI_INDIA              
, "Nepali (India)") 
2316    LNG(wxLANGUAGE_NORWEGIAN_BOKMAL
,           "no_NO", LANG_NORWEGIAN 
, SUBLANG_NORWEGIAN_BOKMAL          
, "Norwegian (Bokmal)") 
2317    LNG(wxLANGUAGE_NORWEGIAN_NYNORSK
,          "nn_NO", LANG_NORWEGIAN 
, SUBLANG_NORWEGIAN_NYNORSK         
, "Norwegian (Nynorsk)") 
2318    LNG(wxLANGUAGE_OCCITAN
,                    "oc"   , 0              , 0                                 , "Occitan") 
2319    LNG(wxLANGUAGE_ORIYA
,                      "or"   , LANG_ORIYA     
, SUBLANG_DEFAULT                   
, "Oriya") 
2320    LNG(wxLANGUAGE_OROMO
,                      "om"   , 0              , 0                                 , "(Afan) Oromo") 
2321    LNG(wxLANGUAGE_PASHTO
,                     "ps"   , 0              , 0                                 , "Pashto, Pushto") 
2322    LNG(wxLANGUAGE_POLISH
,                     "pl_PL", LANG_POLISH    
, SUBLANG_DEFAULT                   
, "Polish") 
2323    LNG(wxLANGUAGE_PORTUGUESE
,                 "pt_PT", LANG_PORTUGUESE
, SUBLANG_PORTUGUESE                
, "Portuguese") 
2324    LNG(wxLANGUAGE_PORTUGUESE_BRAZILIAN
,       "pt_BR", LANG_PORTUGUESE
, SUBLANG_PORTUGUESE_BRAZILIAN      
, "Portuguese (Brazilian)") 
2325    LNG(wxLANGUAGE_PUNJABI
,                    "pa"   , LANG_PUNJABI   
, SUBLANG_DEFAULT                   
, "Punjabi") 
2326    LNG(wxLANGUAGE_QUECHUA
,                    "qu"   , 0              , 0                                 , "Quechua") 
2327    LNG(wxLANGUAGE_RHAETO_ROMANCE
,             "rm"   , 0              , 0                                 , "Rhaeto-Romance") 
2328    LNG(wxLANGUAGE_ROMANIAN
,                   "ro_RO", LANG_ROMANIAN  
, SUBLANG_DEFAULT                   
, "Romanian") 
2329    LNG(wxLANGUAGE_RUSSIAN
,                    "ru_RU", LANG_RUSSIAN   
, SUBLANG_DEFAULT                   
, "Russian") 
2330    LNG(wxLANGUAGE_RUSSIAN_UKRAINE
,            "ru_UA", 0              , 0                                 , "Russian (Ukraine)") 
2331    LNG(wxLANGUAGE_SAMOAN
,                     "sm"   , 0              , 0                                 , "Samoan") 
2332    LNG(wxLANGUAGE_SANGHO
,                     "sg"   , 0              , 0                                 , "Sangho") 
2333    LNG(wxLANGUAGE_SANSKRIT
,                   "sa"   , LANG_SANSKRIT  
, SUBLANG_DEFAULT                   
, "Sanskrit") 
2334    LNG(wxLANGUAGE_SCOTS_GAELIC
,               "gd"   , 0              , 0                                 , "Scots Gaelic") 
2335    LNG(wxLANGUAGE_SERBIAN
,                    "sr_YU", LANG_SERBIAN   
, SUBLANG_DEFAULT                   
, "Serbian") 
2336    LNG(wxLANGUAGE_SERBIAN_CYRILLIC
,           "sr_YU", LANG_SERBIAN   
, SUBLANG_SERBIAN_CYRILLIC          
, "Serbian (Cyrillic)") 
2337    LNG(wxLANGUAGE_SERBIAN_LATIN
,              "sr_YU", LANG_SERBIAN   
, SUBLANG_SERBIAN_LATIN             
, "Serbian (Latin)") 
2338    LNG(wxLANGUAGE_SERBO_CROATIAN
,             "sh"   , 0              , 0                                 , "Serbo-Croatian") 
2339    LNG(wxLANGUAGE_SESOTHO
,                    "st"   , 0              , 0                                 , "Sesotho") 
2340    LNG(wxLANGUAGE_SETSWANA
,                   "tn"   , 0              , 0                                 , "Setswana") 
2341    LNG(wxLANGUAGE_SHONA
,                      "sn"   , 0              , 0                                 , "Shona") 
2342    LNG(wxLANGUAGE_SINDHI
,                     "sd"   , LANG_SINDHI    
, SUBLANG_DEFAULT                   
, "Sindhi") 
2343    LNG(wxLANGUAGE_SINHALESE
,                  "si"   , 0              , 0                                 , "Sinhalese") 
2344    LNG(wxLANGUAGE_SISWATI
,                    "ss"   , 0              , 0                                 , "Siswati") 
2345    LNG(wxLANGUAGE_SLOVAK
,                     "sk_SK", LANG_SLOVAK    
, SUBLANG_DEFAULT                   
, "Slovak") 
2346    LNG(wxLANGUAGE_SLOVENIAN
,                  "sl_SI", LANG_SLOVENIAN 
, SUBLANG_DEFAULT                   
, "Slovenian") 
2347    LNG(wxLANGUAGE_SOMALI
,                     "so"   , 0              , 0                                 , "Somali") 
2348    LNG(wxLANGUAGE_SPANISH
,                    "es_ES", LANG_SPANISH   
, SUBLANG_SPANISH                   
, "Spanish") 
2349    LNG(wxLANGUAGE_SPANISH_ARGENTINA
,          "es_AR", LANG_SPANISH   
, SUBLANG_SPANISH_ARGENTINA         
, "Spanish (Argentina)") 
2350    LNG(wxLANGUAGE_SPANISH_BOLIVIA
,            "es_BO", LANG_SPANISH   
, SUBLANG_SPANISH_BOLIVIA           
, "Spanish (Bolivia)") 
2351    LNG(wxLANGUAGE_SPANISH_CHILE
,              "es_CL", LANG_SPANISH   
, SUBLANG_SPANISH_CHILE             
, "Spanish (Chile)") 
2352    LNG(wxLANGUAGE_SPANISH_COLOMBIA
,           "es_CO", LANG_SPANISH   
, SUBLANG_SPANISH_COLOMBIA          
, "Spanish (Colombia)") 
2353    LNG(wxLANGUAGE_SPANISH_COSTA_RICA
,         "es_CR", LANG_SPANISH   
, SUBLANG_SPANISH_COSTA_RICA        
, "Spanish (Costa Rica)") 
2354    LNG(wxLANGUAGE_SPANISH_DOMINICAN_REPUBLIC
, "es_DO", LANG_SPANISH   
, SUBLANG_SPANISH_DOMINICAN_REPUBLIC
, "Spanish (Dominican republic)") 
2355    LNG(wxLANGUAGE_SPANISH_ECUADOR
,            "es_EC", LANG_SPANISH   
, SUBLANG_SPANISH_ECUADOR           
, "Spanish (Ecuador)") 
2356    LNG(wxLANGUAGE_SPANISH_EL_SALVADOR
,        "es_SV", LANG_SPANISH   
, SUBLANG_SPANISH_EL_SALVADOR       
, "Spanish (El Salvador)") 
2357    LNG(wxLANGUAGE_SPANISH_GUATEMALA
,          "es_GT", LANG_SPANISH   
, SUBLANG_SPANISH_GUATEMALA         
, "Spanish (Guatemala)") 
2358    LNG(wxLANGUAGE_SPANISH_HONDURAS
,           "es_HN", LANG_SPANISH   
, SUBLANG_SPANISH_HONDURAS          
, "Spanish (Honduras)") 
2359    LNG(wxLANGUAGE_SPANISH_MEXICAN
,            "es_MX", LANG_SPANISH   
, SUBLANG_SPANISH_MEXICAN           
, "Spanish (Mexican)") 
2360    LNG(wxLANGUAGE_SPANISH_MODERN
,             "es_ES", LANG_SPANISH   
, SUBLANG_SPANISH_MODERN            
, "Spanish (Modern)") 
2361    LNG(wxLANGUAGE_SPANISH_NICARAGUA
,          "es_NI", LANG_SPANISH   
, SUBLANG_SPANISH_NICARAGUA         
, "Spanish (Nicaragua)") 
2362    LNG(wxLANGUAGE_SPANISH_PANAMA
,             "es_PA", LANG_SPANISH   
, SUBLANG_SPANISH_PANAMA            
, "Spanish (Panama)") 
2363    LNG(wxLANGUAGE_SPANISH_PARAGUAY
,           "es_PY", LANG_SPANISH   
, SUBLANG_SPANISH_PARAGUAY          
, "Spanish (Paraguay)") 
2364    LNG(wxLANGUAGE_SPANISH_PERU
,               "es_PE", LANG_SPANISH   
, SUBLANG_SPANISH_PERU              
, "Spanish (Peru)") 
2365    LNG(wxLANGUAGE_SPANISH_PUERTO_RICO
,        "es_PR", LANG_SPANISH   
, SUBLANG_SPANISH_PUERTO_RICO       
, "Spanish (Puerto Rico)") 
2366    LNG(wxLANGUAGE_SPANISH_URUGUAY
,            "es_UY", LANG_SPANISH   
, SUBLANG_SPANISH_URUGUAY           
, "Spanish (Uruguay)") 
2367    LNG(wxLANGUAGE_SPANISH_US
,                 "es_US", 0              , 0                                 , "Spanish (U.S.)") 
2368    LNG(wxLANGUAGE_SPANISH_VENEZUELA
,          "es_VE", LANG_SPANISH   
, SUBLANG_SPANISH_VENEZUELA         
, "Spanish (Venezuela)") 
2369    LNG(wxLANGUAGE_SUNDANESE
,                  "su"   , 0              , 0                                 , "Sundanese") 
2370    LNG(wxLANGUAGE_SWAHILI
,                    "sw_KE", LANG_SWAHILI   
, SUBLANG_DEFAULT                   
, "Swahili") 
2371    LNG(wxLANGUAGE_SWEDISH
,                    "sv_SE", LANG_SWEDISH   
, SUBLANG_SWEDISH                   
, "Swedish") 
2372    LNG(wxLANGUAGE_SWEDISH_FINLAND
,            "sv_FI", LANG_SWEDISH   
, SUBLANG_SWEDISH_FINLAND           
, "Swedish (Finland)") 
2373    LNG(wxLANGUAGE_TAGALOG
,                    "tl"   , 0              , 0                                 , "Tagalog") 
2374    LNG(wxLANGUAGE_TAJIK
,                      "tg"   , 0              , 0                                 , "Tajik") 
2375    LNG(wxLANGUAGE_TAMIL
,                      "ta"   , LANG_TAMIL     
, SUBLANG_DEFAULT                   
, "Tamil") 
2376    LNG(wxLANGUAGE_TATAR
,                      "tt"   , LANG_TATAR     
, SUBLANG_DEFAULT                   
, "Tatar") 
2377    LNG(wxLANGUAGE_TELUGU
,                     "te"   , LANG_TELUGU    
, SUBLANG_DEFAULT                   
, "Telugu") 
2378    LNG(wxLANGUAGE_THAI
,                       "th_TH", LANG_THAI      
, SUBLANG_DEFAULT                   
, "Thai") 
2379    LNG(wxLANGUAGE_TIBETAN
,                    "bo"   , 0              , 0                                 , "Tibetan") 
2380    LNG(wxLANGUAGE_TIGRINYA
,                   "ti"   , 0              , 0                                 , "Tigrinya") 
2381    LNG(wxLANGUAGE_TONGA
,                      "to"   , 0              , 0                                 , "Tonga") 
2382    LNG(wxLANGUAGE_TSONGA
,                     "ts"   , 0              , 0                                 , "Tsonga") 
2383    LNG(wxLANGUAGE_TURKISH
,                    "tr_TR", LANG_TURKISH   
, SUBLANG_DEFAULT                   
, "Turkish") 
2384    LNG(wxLANGUAGE_TURKMEN
,                    "tk"   , 0              , 0                                 , "Turkmen") 
2385    LNG(wxLANGUAGE_TWI
,                        "tw"   , 0              , 0                                 , "Twi") 
2386    LNG(wxLANGUAGE_UIGHUR
,                     "ug"   , 0              , 0                                 , "Uighur") 
2387    LNG(wxLANGUAGE_UKRAINIAN
,                  "uk_UA", LANG_UKRAINIAN 
, SUBLANG_DEFAULT                   
, "Ukrainian") 
2388    LNG(wxLANGUAGE_URDU
,                       "ur"   , LANG_URDU      
, SUBLANG_DEFAULT                   
, "Urdu") 
2389    LNG(wxLANGUAGE_URDU_INDIA
,                 "ur_IN", LANG_URDU      
, SUBLANG_URDU_INDIA                
, "Urdu (India)") 
2390    LNG(wxLANGUAGE_URDU_PAKISTAN
,              "ur_PK", LANG_URDU      
, SUBLANG_URDU_PAKISTAN             
, "Urdu (Pakistan)") 
2391    LNG(wxLANGUAGE_UZBEK
,                      "uz"   , LANG_UZBEK     
, SUBLANG_DEFAULT                   
, "Uzbek") 
2392    LNG(wxLANGUAGE_UZBEK_CYRILLIC
,             "uz"   , LANG_UZBEK     
, SUBLANG_UZBEK_CYRILLIC            
, "Uzbek (Cyrillic)") 
2393    LNG(wxLANGUAGE_UZBEK_LATIN
,                "uz"   , LANG_UZBEK     
, SUBLANG_UZBEK_LATIN               
, "Uzbek (Latin)") 
2394    LNG(wxLANGUAGE_VIETNAMESE
,                 "vi_VN", LANG_VIETNAMESE
, SUBLANG_DEFAULT                   
, "Vietnamese") 
2395    LNG(wxLANGUAGE_VOLAPUK
,                    "vo"   , 0              , 0                                 , "Volapuk") 
2396    LNG(wxLANGUAGE_WELSH
,                      "cy"   , 0              , 0                                 , "Welsh") 
2397    LNG(wxLANGUAGE_WOLOF
,                      "wo"   , 0              , 0                                 , "Wolof") 
2398    LNG(wxLANGUAGE_XHOSA
,                      "xh"   , 0              , 0                                 , "Xhosa") 
2399    LNG(wxLANGUAGE_YIDDISH
,                    "yi"   , 0              , 0                                 , "Yiddish") 
2400    LNG(wxLANGUAGE_YORUBA
,                     "yo"   , 0              , 0                                 , "Yoruba") 
2401    LNG(wxLANGUAGE_ZHUANG
,                     "za"   , 0              , 0                                 , "Zhuang") 
2402    LNG(wxLANGUAGE_ZULU
,                       "zu"   , 0              , 0                                 , "Zulu") 
2407 // --- --- --- generated code ends here --- --- --- 
2409 #endif // wxUSE_INTL