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 // ---------------------------------------------------------------------------- 
  20 #if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) 
  21     #pragma implementation "intl.h" 
  24 // For compilers that support precompilation, includes "wx.h". 
  25 #include "wx/wxprec.h" 
  41 #ifdef HAVE_LANGINFO_H 
  47     #include "wx/string.h" 
  52     #include "wx/dynarray.h" 
  56     #include "wx/msw/private.h" 
  57 #elif defined(__UNIX_LIKE__) 
  58     #include "wx/fontmap.h"         // for CharsetToEncoding() 
  62 #include "wx/tokenzr.h" 
  63 #include "wx/module.h" 
  64 #include "wx/fontmap.h" 
  65 #include "wx/encconv.h" 
  66 #include "wx/hashmap.h" 
  68 #if defined(__WXMAC__) 
  69   #include  "wx/mac/private.h"  // includes mac headers 
  72 // ---------------------------------------------------------------------------- 
  74 // ---------------------------------------------------------------------------- 
  76 // this should *not* be wxChar, this type must have exactly 8 bits! 
  77 typedef wxUint8 size_t8
; 
  78 typedef wxUint32 size_t32
; 
  80 // ---------------------------------------------------------------------------- 
  82 // ---------------------------------------------------------------------------- 
  84 // magic number identifying the .mo format file 
  85 const size_t32 MSGCATALOG_MAGIC    
= 0x950412de; 
  86 const size_t32 MSGCATALOG_MAGIC_SW 
= 0xde120495; 
  88 // extension of ".mo" files 
  89 #define MSGCATALOG_EXTENSION  _T(".mo") 
  91 // the constants describing the format of lang_LANG locale string 
  92 static const size_t LEN_LANG 
= 2; 
  93 static const size_t LEN_SUBLANG 
= 2; 
  94 static const size_t LEN_FULL 
= LEN_LANG 
+ 1 + LEN_SUBLANG
; // 1 for '_' 
  96 // ---------------------------------------------------------------------------- 
  98 // ---------------------------------------------------------------------------- 
 102 // small class to suppress the translation erros until exit from current scope 
 106     NoTransErr() { ms_suppressCount
++; } 
 107    ~NoTransErr() { ms_suppressCount
--;  } 
 109    static bool Suppress() { return ms_suppressCount 
> 0; } 
 112    static size_t ms_suppressCount
; 
 115 size_t NoTransErr::ms_suppressCount 
= 0; 
 126 #endif // Debug/!Debug 
 128 static wxLocale 
*wxSetLocale(wxLocale 
*pLocale
); 
 130 // helper functions of GetSystemLanguage() 
 133 // get just the language part 
 134 static inline wxString 
ExtractLang(const wxString
& langFull
) 
 136     return langFull
.Left(LEN_LANG
); 
 139 // get everything else (including the leading '_') 
 140 static inline wxString 
ExtractNotLang(const wxString
& langFull
) 
 142     return langFull
.Mid(LEN_LANG
); 
 149 // ---------------------------------------------------------------------------- 
 150 // wxMsgCatalogFile corresponds to one disk-file message catalog. 
 152 // This is a "low-level" class and is used only by wxMsgCatalog 
 153 // ---------------------------------------------------------------------------- 
 155 WX_DECLARE_EXPORTED_STRING_HASH_MAP(wxString
, wxMessagesHash
); 
 157 class wxMsgCatalogFile
 
 164     // load the catalog from disk (szDirPrefix corresponds to language) 
 165     bool Load(const wxChar 
*szDirPrefix
, const wxChar 
*szName
); 
 167     // fills the hash with string-translation pairs 
 168     void FillHash(wxMessagesHash
& hash
, bool convertEncoding
) const; 
 171     // this implementation is binary compatible with GNU gettext() version 0.10 
 173     // an entry in the string table 
 174     struct wxMsgTableEntry
 
 176       size_t32   nLen
;           // length of the string 
 177       size_t32   ofsString
;      // pointer to the string 
 180     // header of a .mo file 
 181     struct wxMsgCatalogHeader
 
 183       size_t32  magic
,          // offset +00:  magic id 
 184                 revision
,       //        +04:  revision 
 185                 numStrings
;     //        +08:  number of strings in the file 
 186       size_t32  ofsOrigTable
,   //        +0C:  start of original string table 
 187                 ofsTransTable
;  //        +10:  start of translated string table 
 188       size_t32  nHashSize
,      //        +14:  hash table size 
 189                 ofsHashTable
;   //        +18:  offset of hash table start 
 192     // all data is stored here, NULL if no data loaded 
 195     // amount of memory pointed to by m_pData. 
 199     size_t32          m_numStrings
;   // number of strings in this domain 
 200     wxMsgTableEntry  
*m_pOrigTable
,   // pointer to original   strings 
 201                      *m_pTransTable
;  //            translated 
 203     // swap the 2 halves of 32 bit integer if needed 
 204     size_t32 
Swap(size_t32 ui
) const 
 206           return m_bSwapped 
? (ui 
<< 24) | ((ui 
& 0xff00) << 8) | 
 207                               ((ui 
>> 8) & 0xff00) | (ui 
>> 24) 
 211     const char *StringAtOfs(wxMsgTableEntry 
*pTable
, size_t32 n
) const 
 213         const wxMsgTableEntry 
* const ent 
= pTable 
+ n
; 
 215         // this check could fail for a corrupt message catalog 
 216         size_t32 ofsString 
= Swap(ent
->ofsString
); 
 217         if ( ofsString 
+ Swap(ent
->nLen
) > m_nSize
) 
 220         return (const char *)(m_pData 
+ ofsString
); 
 223     wxString 
GetCharset() const; 
 225     bool m_bSwapped
;   // wrong endianness? 
 227     DECLARE_NO_COPY_CLASS(wxMsgCatalogFile
) 
 231 // ---------------------------------------------------------------------------- 
 232 // wxMsgCatalog corresponds to one loaded message catalog. 
 234 // This is a "low-level" class and is used only by wxLocale (that's why 
 235 // it's designed to be stored in a linked list) 
 236 // ---------------------------------------------------------------------------- 
 241     // load the catalog from disk (szDirPrefix corresponds to language) 
 242     bool Load(const wxChar 
*szDirPrefix
, const wxChar 
*szName
, bool bConvertEncoding 
= FALSE
); 
 244     // get name of the catalog 
 245     wxString 
GetName() const { return m_name
; } 
 247     // get the translated string: returns NULL if not found 
 248     const wxChar 
*GetString(const wxChar 
*sz
) const; 
 250     // public variable pointing to the next element in a linked list (or NULL) 
 251     wxMsgCatalog 
*m_pNext
; 
 254     wxMessagesHash  m_messages
; // all messages in the catalog 
 255     wxString        m_name
;     // name of the domain 
 258 // ---------------------------------------------------------------------------- 
 260 // ---------------------------------------------------------------------------- 
 262 // the list of the directories to search for message catalog files 
 263 static wxArrayString s_searchPrefixes
; 
 265 // ============================================================================ 
 267 // ============================================================================ 
 269 // ---------------------------------------------------------------------------- 
 270 // wxMsgCatalogFile class 
 271 // ---------------------------------------------------------------------------- 
 273 wxMsgCatalogFile::wxMsgCatalogFile() 
 279 wxMsgCatalogFile::~wxMsgCatalogFile() 
 284 // return all directories to search for given prefix 
 285 static wxString 
GetAllMsgCatalogSubdirs(const wxChar 
*prefix
, 
 290     // search first in prefix/fr/LC_MESSAGES, then in prefix/fr and finally in 
 291     // prefix (assuming the language is 'fr') 
 292     searchPath 
<< prefix 
<< wxFILE_SEP_PATH 
<< lang 
<< wxFILE_SEP_PATH
 
 293                          << wxT("LC_MESSAGES") << wxPATH_SEP
 
 294                << prefix 
<< wxFILE_SEP_PATH 
<< lang 
<< wxPATH_SEP
 
 295                << prefix 
<< wxPATH_SEP
; 
 300 // construct the search path for the given language 
 301 static wxString 
GetFullSearchPath(const wxChar 
*lang
) 
 305     // first take the entries explicitly added by the program 
 306     size_t count 
= s_searchPrefixes
.Count(); 
 307     for ( size_t n 
= 0; n 
< count
; n
++ ) 
 309         searchPath 
<< GetAllMsgCatalogSubdirs(s_searchPrefixes
[n
], lang
) 
 313     // LC_PATH is a standard env var containing the search path for the .mo 
 316     const wxChar 
*pszLcPath 
= wxGetenv(wxT("LC_PATH")); 
 317     if ( pszLcPath 
!= NULL 
) 
 318         searchPath 
<< GetAllMsgCatalogSubdirs(pszLcPath
, lang
); 
 322     // add some standard ones and the one in the tree where wxWin was installed: 
 324         << GetAllMsgCatalogSubdirs(wxString(wxGetInstallPrefix()) + wxT("/share/locale"), lang
) 
 325         << GetAllMsgCatalogSubdirs(wxT("/usr/share/locale"), lang
) 
 326         << GetAllMsgCatalogSubdirs(wxT("/usr/lib/locale"), lang
) 
 327         << GetAllMsgCatalogSubdirs(wxT("/usr/local/share/locale"), lang
); 
 330     // then take the current directory 
 331     // FIXME it should be the directory of the executable 
 334     wxGetWorkingDirectory( cwd 
, sizeof( cwd 
) ) ; 
 335     searchPath 
<< GetAllMsgCatalogSubdirs(cwd
, lang
); 
 336     // generic search paths could be somewhere in the system folder preferences 
 338     searchPath 
<< GetAllMsgCatalogSubdirs(wxT("."), lang
); 
 345 // open disk file and read in it's contents 
 346 bool wxMsgCatalogFile::Load(const wxChar 
*szDirPrefix
, const wxChar 
*szName0
) 
 348    /* We need to handle locales like  de_AT.iso-8859-1 
 349       For this we first chop off the .CHARSET specifier and ignore it. 
 350       FIXME: UNICODE SUPPORT: must use CHARSET specifier! 
 352    wxString szName 
= szName0
; 
 353    if(szName
.Find(wxT('.')) != -1) // contains a dot 
 354       szName 
= szName
.Left(szName
.Find(wxT('.'))); 
 356   wxString searchPath 
= GetFullSearchPath(szDirPrefix
); 
 357   const wxChar 
*sublocale 
= wxStrchr(szDirPrefix
, wxT('_')); 
 360       // also add just base locale name: for things like "fr_BE" (belgium 
 361       // french) we should use "fr" if no belgium specific message catalogs 
 363       searchPath 
<< GetFullSearchPath(wxString(szDirPrefix
). 
 364                                       Left((size_t)(sublocale 
- szDirPrefix
))) 
 368   wxString strFile 
= szName
; 
 369   strFile 
+= MSGCATALOG_EXTENSION
; 
 371   // don't give translation errors here because the wxstd catalog might 
 372   // not yet be loaded (and it's normal) 
 374   // (we're using an object because we have several return paths) 
 376   NoTransErr noTransErr
; 
 377   wxLogVerbose(_("looking for catalog '%s' in path '%s'."), 
 378                szName
.c_str(), searchPath
.c_str()); 
 380   wxString strFullName
; 
 381   if ( !wxFindFileInPath(&strFullName
, searchPath
, strFile
) ) { 
 382     wxLogVerbose(_("catalog file for domain '%s' not found."), szName
.c_str()); 
 387   wxLogVerbose(_("using catalog '%s' from '%s'."), 
 388              szName
.c_str(), strFullName
.c_str()); 
 390   wxFile 
fileMsg(strFullName
); 
 391   if ( !fileMsg
.IsOpened() ) 
 395   off_t nSize 
= fileMsg
.Length(); 
 396   if ( nSize 
== wxInvalidOffset 
) 
 399   // read the whole file in memory 
 400   m_pData 
= new size_t8
[nSize
]; 
 401   if ( fileMsg
.Read(m_pData
, nSize
) != nSize 
) { 
 407   bool bValid 
= (size_t)nSize 
> sizeof(wxMsgCatalogHeader
); 
 409   wxMsgCatalogHeader 
*pHeader 
= (wxMsgCatalogHeader 
*)m_pData
; 
 411     // we'll have to swap all the integers if it's true 
 412     m_bSwapped 
= pHeader
->magic 
== MSGCATALOG_MAGIC_SW
; 
 414     // check the magic number 
 415     bValid 
= m_bSwapped 
|| pHeader
->magic 
== MSGCATALOG_MAGIC
; 
 419     // it's either too short or has incorrect magic number 
 420     wxLogWarning(_("'%s' is not a valid message catalog."), strFullName
.c_str()); 
 427   m_numStrings  
= Swap(pHeader
->numStrings
); 
 428   m_pOrigTable  
= (wxMsgTableEntry 
*)(m_pData 
+ 
 429                    Swap(pHeader
->ofsOrigTable
)); 
 430   m_pTransTable 
= (wxMsgTableEntry 
*)(m_pData 
+ 
 431                    Swap(pHeader
->ofsTransTable
)); 
 434   // everything is fine 
 438 void wxMsgCatalogFile::FillHash(wxMessagesHash
& hash
, bool convertEncoding
) const 
 440     wxString charset 
= GetCharset(); 
 443     wxCSConv 
*csConv 
= NULL
; 
 445         csConv 
= new wxCSConv(charset
); 
 447     wxMBConv
& inputConv 
= csConv 
? *((wxMBConv
*)csConv
) : *wxConvCurrent
; 
 449     for (size_t i 
= 0; i 
< m_numStrings
; i
++) 
 451         wxString 
key(StringAtOfs(m_pOrigTable
, i
), inputConv
); 
 454         hash
[key
] = wxString(StringAtOfs(m_pTransTable
, i
), inputConv
); 
 456         if ( convertEncoding 
) 
 458                 wxString(inputConv
.cMB2WC(StringAtOfs(m_pTransTable
, i
)), 
 461             hash
[key
] = StringAtOfs(m_pTransTable
, i
); 
 466 #else // !wxUSE_WCHAR_T 
 468     if ( convertEncoding 
) 
 470         wxFontEncoding targetEnc 
= wxFONTENCODING_SYSTEM
; 
 471         wxFontEncoding enc 
= wxFontMapper::Get()->CharsetToEncoding(charset
, FALSE
); 
 472         if ( enc 
== wxFONTENCODING_SYSTEM 
) 
 474             convertEncoding 
= FALSE
; // unknown encoding 
 478             targetEnc 
= wxLocale::GetSystemEncoding(); 
 479             if (targetEnc 
== wxFONTENCODING_SYSTEM
) 
 481                 wxFontEncodingArray a 
= wxEncodingConverter::GetPlatformEquivalents(enc
); 
 483                     // no conversion needed, locale uses native encoding 
 484                     convertEncoding 
= FALSE
; 
 485                 if (a
.GetCount() == 0) 
 486                     // we don't know common equiv. under this platform 
 487                     convertEncoding 
= FALSE
; 
 492         if ( convertEncoding 
) 
 494             wxEncodingConverter converter
; 
 495             converter
.Init(enc
, targetEnc
); 
 497             for (size_t i 
= 0; i 
< m_numStrings
; i
++) 
 499                 wxString 
key(StringAtOfs(m_pOrigTable
, i
)); 
 501                     converter
.Convert(wxString(StringAtOfs(m_pTransTable
, i
))); 
 506     if ( !convertEncoding 
) 
 507     #endif // wxUSE_FONTMAP/!wxUSE_FONTMAP 
 509         for (size_t i 
= 0; i 
< m_numStrings
; i
++) 
 511             wxString 
key(StringAtOfs(m_pOrigTable
, i
)); 
 512             hash
[key
] = StringAtOfs(m_pTransTable
, i
); 
 515 #endif // wxUSE_WCHAR_T/!wxUSE_WCHAR_T 
 518 wxString 
wxMsgCatalogFile::GetCharset() const 
 520     // first, find encoding header: 
 521     const char *hdr 
= StringAtOfs(m_pOrigTable
, 0); 
 522     if ( hdr 
== NULL 
|| hdr
[0] != 0 ) 
 524         // not supported by this catalog, does not have correct header 
 525         return wxEmptyString
; 
 528     wxString header 
= wxString::FromAscii( StringAtOfs(m_pTransTable
, 0)); 
 530     int pos 
= header
.Find(wxT("Content-Type: text/plain; charset=")); 
 531     if ( pos 
== wxNOT_FOUND 
) 
 533         // incorrectly filled Content-Type header 
 534         return wxEmptyString
; 
 537     size_t n 
= pos 
+ 34; /*strlen("Content-Type: text/plain; charset=")*/ 
 538     while ( header
[n
] != wxT('\n') ) 
 539         charset 
<< header
[n
++]; 
 541     if ( charset 
== wxT("CHARSET") ) 
 543         // "CHARSET" is not valid charset, but lazy translator 
 544         return wxEmptyString
; 
 550 // ---------------------------------------------------------------------------- 
 551 // wxMsgCatalog class 
 552 // ---------------------------------------------------------------------------- 
 554 bool wxMsgCatalog::Load(const wxChar 
*szDirPrefix
, const wxChar 
*szName
, 
 555                         bool bConvertEncoding
) 
 557     wxMsgCatalogFile file
; 
 561     if ( file
.Load(szDirPrefix
, szName
) ) 
 563         file
.FillHash(m_messages
, bConvertEncoding
); 
 570 const wxChar 
*wxMsgCatalog::GetString(const wxChar 
*sz
) const 
 572     wxMessagesHash::const_iterator i 
= m_messages
.find(sz
); 
 573     if ( i 
!= m_messages
.end() ) 
 575         return i
->second
.c_str(); 
 581 // ---------------------------------------------------------------------------- 
 583 // ---------------------------------------------------------------------------- 
 585 #include "wx/arrimpl.cpp" 
 586 WX_DECLARE_EXPORTED_OBJARRAY(wxLanguageInfo
, wxLanguageInfoArray
); 
 587 WX_DEFINE_OBJARRAY(wxLanguageInfoArray
); 
 589 wxLanguageInfoArray 
*wxLocale::ms_languagesDB 
= NULL
; 
 591 /*static*/ void wxLocale::CreateLanguagesDB() 
 593     if (ms_languagesDB 
== NULL
) 
 595         ms_languagesDB 
= new wxLanguageInfoArray
; 
 600 /*static*/ void wxLocale::DestroyLanguagesDB() 
 602     delete ms_languagesDB
; 
 603     ms_languagesDB 
= NULL
; 
 609   m_pszOldLocale 
= NULL
; 
 611   m_language 
= wxLANGUAGE_UNKNOWN
; 
 614 // NB: this function has (desired) side effect of changing current locale 
 615 bool wxLocale::Init(const wxChar 
*szName
, 
 616                     const wxChar 
*szShort
, 
 617                     const wxChar 
*szLocale
, 
 619                     bool        bConvertEncoding
) 
 621   m_strLocale 
= szName
; 
 622   m_strShort 
= szShort
; 
 623   m_bConvertEncoding 
= bConvertEncoding
; 
 624   m_language 
= wxLANGUAGE_UNKNOWN
; 
 626   // change current locale (default: same as long name) 
 627   if ( szLocale 
== NULL 
) 
 629     // the argument to setlocale() 
 632     wxCHECK_MSG( szLocale
, FALSE
, _T("no locale to set in wxLocale::Init()") ); 
 636   // FIXME: I'm guessing here 
 637   wxChar localeName
[256]; 
 638   int ret 
= GetLocaleInfo(LOCALE_USER_DEFAULT
, LOCALE_SLANGUAGE
, localeName
, 
 642     m_pszOldLocale 
= wxStrdup(localeName
);       
 645     m_pszOldLocale 
= NULL
; 
 647   // TODO: how to find languageId 
 648   // SetLocaleInfo(languageId, SORT_DEFAULT, localeName); 
 650   m_pszOldLocale 
= wxSetlocale(LC_ALL
, szLocale
); 
 651   if ( m_pszOldLocale 
) 
 652       m_pszOldLocale 
= wxStrdup(m_pszOldLocale
); 
 655   if ( m_pszOldLocale 
== NULL 
) 
 656     wxLogError(_("locale '%s' can not be set."), szLocale
); 
 658   // the short name will be used to look for catalog files as well, 
 659   // so we need something here 
 660   if ( m_strShort
.IsEmpty() ) { 
 661     // FIXME I don't know how these 2 letter abbreviations are formed, 
 662     //       this wild guess is surely wrong 
 665         m_strShort 
+= (wxChar
)wxTolower(szLocale
[0]); 
 667             m_strShort 
+= (wxChar
)wxTolower(szLocale
[1]); 
 671   // save the old locale to be able to restore it later 
 672   m_pOldLocale 
= wxSetLocale(this); 
 674   // load the default catalog with wxWindows standard messages 
 678     bOk 
= AddCatalog(wxT("wxstd")); 
 684 #if defined(__UNIX__) && wxUSE_UNICODE 
 685 static wxWCharBuffer 
wxSetlocaleTryUTF(int c
, const wxChar 
*lc
) 
 687     wxMB2WXbuf l 
= wxSetlocale(c
, lc
); 
 688     if ( !l 
&& lc 
&& lc
[0] != 0 ) 
 692         buf2 
= buf 
+ wxT(".UTF-8"); 
 693         l 
= wxSetlocale(c
, buf2
.c_str()); 
 696             buf2 
= buf 
+ wxT(".utf-8"); 
 697             l 
= wxSetlocale(c
, buf2
.c_str()); 
 701             buf2 
= buf 
+ wxT(".UTF8"); 
 702             l 
= wxSetlocale(c
, buf2
.c_str()); 
 706             buf2 
= buf 
+ wxT(".utf8"); 
 707             l 
= wxSetlocale(c
, buf2
.c_str()); 
 713 #define wxSetlocaleTryUTF(c, lc)  wxSetlocale(c, lc) 
 716 bool wxLocale::Init(int language
, int flags
) 
 719     if (lang 
== wxLANGUAGE_DEFAULT
) 
 721         // auto detect the language 
 722         lang 
= GetSystemLanguage(); 
 725     // We failed to detect system language, so we will use English: 
 726     if (lang 
== wxLANGUAGE_UNKNOWN
) 
 731     const wxLanguageInfo 
*info 
= GetLanguageInfo(lang
); 
 736         wxLogError(wxT("Unknown language %i."), lang
); 
 740     wxString name 
= info
->Description
; 
 741     wxString canonical 
= info
->CanonicalName
; 
 745 #if defined(__UNIX__) && !defined(__WXMAC__) 
 746     if (language 
== wxLANGUAGE_DEFAULT
) 
 747         locale 
= wxEmptyString
; 
 749         locale 
= info
->CanonicalName
; 
 751     wxMB2WXbuf retloc 
= wxSetlocaleTryUTF(LC_ALL
, locale
); 
 755         // Some C libraries don't like xx_YY form and require xx only 
 756         retloc 
= wxSetlocaleTryUTF(LC_ALL
, locale
.Mid(0,2)); 
 760         // Some C libraries (namely glibc) still use old ISO 639, 
 761         // so will translate the abbrev for them 
 762         wxString mid 
= locale
.Mid(0,2); 
 763         if (mid 
== wxT("he")) 
 764             locale 
= wxT("iw") + locale
.Mid(3); 
 765         else if (mid 
== wxT("id")) 
 766             locale 
= wxT("in") + locale
.Mid(3); 
 767         else if (mid 
== wxT("yi")) 
 768             locale 
= wxT("ji") + locale
.Mid(3); 
 769         else if (mid 
== wxT("nb")) 
 770             locale 
= wxT("no_NO"); 
 771         else if (mid 
== wxT("nn")) 
 772             locale 
= wxT("no_NY"); 
 774         retloc 
= wxSetlocaleTryUTF(LC_ALL
, locale
); 
 778         // (This time, we changed locale in previous if-branch, so try again.) 
 779         // Some C libraries don't like xx_YY form and require xx only 
 780         retloc 
= wxSetlocaleTryUTF(LC_ALL
, locale
.Mid(0,2)); 
 784         wxLogError(wxT("Cannot set locale to '%s'."), locale
.c_str()); 
 787 #elif defined(__WIN32__) 
 789     #if wxUSE_UNICODE && (defined(__VISUALC__) || defined(__MINGW32__)) 
 790         // NB: setlocale() from msvcrt.dll (used by VC++ and Mingw) 
 791         //     can't set locale to language that can only be written using 
 792         //     Unicode.  Therefore wxSetlocale call failed, but we don't want 
 793         //     to report it as an error -- so that at least message catalogs 
 794         //     can be used. Watch for code marked with 
 795         //     #ifdef SETLOCALE_FAILS_ON_UNICODE_LANGS bellow. 
 796         #define SETLOCALE_FAILS_ON_UNICODE_LANGS 
 799     wxMB2WXbuf retloc 
= wxT("C"); 
 800     if (language 
!= wxLANGUAGE_DEFAULT
) 
 802         if (info
->WinLang 
== 0) 
 804             wxLogWarning(wxT("Locale '%s' not supported by OS."), name
.c_str()); 
 805             // retloc already set to "C" 
 810             wxUint32 lcid 
= MAKELCID(MAKELANGID(info
->WinLang
, info
->WinSublang
), 
 814             SetThreadLocale(lcid
); 
 816             // NB: we must translate LCID to CRT's setlocale string ourselves, 
 817             //     because SetThreadLocale does not modify change the 
 818             //     interpretation of setlocale(LC_ALL, "") call: 
 820             buffer
[0] = wxT('\0'); 
 821             GetLocaleInfo(lcid
, LOCALE_SENGLANGUAGE
, buffer
, 256); 
 823             if (GetLocaleInfo(lcid
, LOCALE_SENGCOUNTRY
, buffer
, 256) > 0) 
 824                 locale 
<< wxT("_") << buffer
; 
 825             if (GetLocaleInfo(lcid
, LOCALE_IDEFAULTANSICODEPAGE
, buffer
, 256) > 0) 
 827                 codepage 
= wxAtoi(buffer
); 
 829                     locale 
<< wxT(".") << buffer
; 
 831             if (locale
.IsEmpty()) 
 833                 wxLogLastError(wxT("SetThreadLocale")); 
 834                 wxLogError(wxT("Cannot set locale to language %s."), name
.c_str()); 
 841                 retloc 
= wxSetlocale(LC_ALL
, locale
); 
 843 #ifdef SETLOCALE_FAILS_ON_UNICODE_LANGS 
 844                 if (codepage 
== 0 && (const wxChar
*)retloc 
== NULL
) 
 856         retloc 
= wxSetlocale(LC_ALL
, wxEmptyString
); 
 860 #ifdef SETLOCALE_FAILS_ON_UNICODE_LANGS 
 861         if ((const wxChar
*)retloc 
== NULL
) 
 864             if (GetLocaleInfo(LOCALE_USER_DEFAULT
, 
 865                               LOCALE_IDEFAULTANSICODEPAGE
, buffer
, 16) > 0 && 
 866                  wxStrcmp(buffer
, wxT("0")) == 0) 
 876         wxLogError(wxT("Cannot set locale to language %s."), name
.c_str()); 
 879 #elif defined(__WXMAC__) || defined(__WXPM__) 
 880     wxMB2WXbuf retloc 
= wxSetlocale(LC_ALL 
, wxEmptyString
); 
 883     #define WX_NO_LOCALE_SUPPORT 
 886 #ifndef WX_NO_LOCALE_SUPPORT 
 887     wxChar 
*szLocale 
= retloc 
? wxStrdup(retloc
) : NULL
; 
 888     bool ret 
= Init(name
, canonical
, retloc
, 
 889                     (flags 
& wxLOCALE_LOAD_DEFAULT
) != 0, 
 890                     (flags 
& wxLOCALE_CONV_ENCODING
) != 0); 
 902 void wxLocale::AddCatalogLookupPathPrefix(const wxString
& prefix
) 
 904     if ( s_searchPrefixes
.Index(prefix
) == wxNOT_FOUND 
) 
 906         s_searchPrefixes
.Add(prefix
); 
 908     //else: already have it 
 911 /*static*/ int wxLocale::GetSystemLanguage() 
 915     // init i to avoid compiler warning 
 917            count 
= ms_languagesDB
->GetCount(); 
 919 #if defined(__UNIX__) && !defined(__WXMAC__) 
 920     // first get the string identifying the language from the environment 
 922     if (!wxGetEnv(wxT("LC_ALL"), &langFull
) && 
 923         !wxGetEnv(wxT("LC_MESSAGES"), &langFull
) && 
 924         !wxGetEnv(wxT("LANG"), &langFull
)) 
 926         // no language specified, threat it as English 
 927         return wxLANGUAGE_ENGLISH
; 
 930     if ( langFull 
== _T("C") || langFull 
== _T("POSIX") ) 
 933         return wxLANGUAGE_ENGLISH
; 
 936     // the language string has the following form 
 938     //      lang[_LANG][.encoding][@modifier] 
 940     // (see environ(5) in the Open Unix specification) 
 942     // where lang is the primary language, LANG is a sublang/territory, 
 943     // encoding is the charset to use and modifier "allows the user to select 
 944     // a specific instance of localization data within a single category" 
 946     // for example, the following strings are valid: 
 951     //      de_DE.iso88591@euro 
 953     // for now we don't use the encoding, although we probably should (doing 
 954     // translations of the msg catalogs on the fly as required) (TODO) 
 956     // we don't use the modifiers neither but we probably should translate 
 957     // "euro" into iso885915 
 958     size_t posEndLang 
= langFull
.find_first_of(_T("@.")); 
 959     if ( posEndLang 
!= wxString::npos 
) 
 961         langFull
.Truncate(posEndLang
); 
 964     // in addition to the format above, we also can have full language names 
 965     // in LANG env var - for example, SuSE is known to use LANG="german" - so 
 968     // do we have just the language (or sublang too)? 
 969     bool justLang 
= langFull
.Len() == LEN_LANG
; 
 971          (langFull
.Len() == LEN_FULL 
&& langFull
[LEN_LANG
] == wxT('_')) ) 
 973         // 0. Make sure the lang is according to latest ISO 639 
 974         //    (this is neccessary because glibc uses iw and in instead 
 975         //    of he and id respectively). 
 977         // the language itself (second part is the dialect/sublang) 
 978         wxString langOrig 
= ExtractLang(langFull
); 
 981         if ( langOrig 
== wxT("iw")) 
 983         else if (langOrig 
== wxT("in")) 
 985         else if (langOrig 
== wxT("ji")) 
 987         else if (langOrig 
== wxT("no_NO")) 
 989         else if (langOrig 
== wxT("no_NY")) 
 991         else if (langOrig 
== wxT("no")) 
 997         if ( lang 
!= langOrig 
) 
 999             langFull 
= lang 
+ ExtractNotLang(langFull
); 
1002         // 1. Try to find the language either as is: 
1003         for ( i 
= 0; i 
< count
; i
++ ) 
1005             if ( ms_languagesDB
->Item(i
).CanonicalName 
== langFull 
) 
1011         // 2. If langFull is of the form xx_YY, try to find xx: 
1012         if ( i 
== count 
&& !justLang 
) 
1014             for ( i 
= 0; i 
< count
; i
++ ) 
1016                 if ( ms_languagesDB
->Item(i
).CanonicalName 
== lang 
) 
1023         // 3. If langFull is of the form xx, try to find any xx_YY record: 
1024         if ( i 
== count 
&& justLang 
) 
1026             for ( i 
= 0; i 
< count
; i
++ ) 
1028                 if ( ExtractLang(ms_languagesDB
->Item(i
).CanonicalName
) 
1036     else // not standard format 
1038         // try to find the name in verbose description 
1039         for ( i 
= 0; i 
< count
; i
++ ) 
1041             if (ms_languagesDB
->Item(i
).Description
.CmpNoCase(langFull
) == 0) 
1047 #elif defined(__WXMAC__) 
1048     const wxChar 
* lc 
= NULL 
; 
1049     long lang 
= GetScriptVariable( smSystemScript
, smScriptLang
) ; 
1050     switch( GetScriptManagerVariable( smRegionCode 
) ) { 
1066       case verNetherlands 
: 
1121       // _CY is not part of wx, so we have to translate according to the system language 
1122         if ( lang 
== langGreek 
) { 
1125         else if ( lang 
== langTurkish 
) { 
1132       case verYugoCroatian
: 
1138       case verPakistanUrdu
: 
1141       case verTurkishModified
: 
1144       case verItalianSwiss
: 
1147       case verInternational
: 
1208       case verByeloRussian
: 
1230         lc 
= wxT("pt_BR ") ; 
1238       case verScottishGaelic
: 
1253       case verIrishGaelicScript
: 
1268       case verSpLatinAmerica
: 
1274       case verFrenchUniversal
: 
1325   for ( i 
= 0; i 
< count
; i
++ ) 
1327       if ( ms_languagesDB
->Item(i
).CanonicalName 
== lc 
) 
1333 #elif defined(__WIN32__) 
1334     LCID lcid 
= GetUserDefaultLCID(); 
1337         wxUint32 lang 
= PRIMARYLANGID(LANGIDFROMLCID(lcid
)); 
1338         wxUint32 sublang 
= SUBLANGID(LANGIDFROMLCID(lcid
)); 
1340         for ( i 
= 0; i 
< count
; i
++ ) 
1342             if (ms_languagesDB
->Item(i
).WinLang 
== lang 
&& 
1343                 ms_languagesDB
->Item(i
).WinSublang 
== sublang
) 
1349     //else: leave wxlang == wxLANGUAGE_UNKNOWN 
1350 #endif // Unix/Win32 
1354         // we did find a matching entry, use it 
1355         return ms_languagesDB
->Item(i
).Language
; 
1358     // no info about this language in the database 
1359     return wxLANGUAGE_UNKNOWN
; 
1362 // ---------------------------------------------------------------------------- 
1364 // ---------------------------------------------------------------------------- 
1366 // this is a bit strange as under Windows we get the encoding name using its 
1367 // numeric value and under Unix we do it the other way round, but this just 
1368 // reflects the way different systems provide he encoding info 
1371 wxString 
wxLocale::GetSystemEncodingName() 
1375 #if defined(__WIN32__) && !defined(__WXMICROWIN__) 
1376     // FIXME: what is the error return value for GetACP()? 
1377     UINT codepage 
= ::GetACP(); 
1378     encname
.Printf(_T("windows-%u"), codepage
); 
1379 #elif defined(__UNIX_LIKE__) 
1381 #if defined(HAVE_LANGINFO_H) && defined(CODESET) 
1382     // GNU libc provides current character set this way (this conforms 
1384     char *oldLocale 
= strdup(setlocale(LC_CTYPE
, NULL
)); 
1385     setlocale(LC_CTYPE
, ""); 
1386     char *alang 
= nl_langinfo(CODESET
); 
1387     setlocale(LC_CTYPE
, oldLocale
); 
1392         // 7 bit ASCII encoding has several alternative names which we should 
1393         // recognize to avoid warnings about unrecognized encoding on each 
1396         // nl_langinfo() under Solaris returns 646 by default which stands for 
1397         // ISO-646, i.e. 7 bit ASCII 
1399         // and recent glibc call it ANSI_X3.4-1968... 
1400         if ( strcmp(alang
, "646") == 0 || 
1401                strcmp(alang
, "ANSI_X3.4-1968") == 0 ) 
1403             encname 
= _T("US-ASCII"); 
1407             encname 
= wxString::FromAscii( alang 
); 
1411 #endif // HAVE_LANGINFO_H 
1413         // if we can't get at the character set directly, try to see if it's in 
1414         // the environment variables (in most cases this won't work, but I was 
1416         char *lang 
= getenv( "LC_ALL"); 
1417         char *dot 
= lang 
? strchr(lang
, '.') : (char *)NULL
; 
1420             lang 
= getenv( "LC_CTYPE" ); 
1422                 dot 
= strchr(lang
, '.' ); 
1426             lang 
= getenv( "LANG"); 
1428                 dot 
= strchr(lang
, '.'); 
1433             encname 
= wxString::FromAscii( dot
+1 ); 
1436 #endif // Win32/Unix 
1442 wxFontEncoding 
wxLocale::GetSystemEncoding() 
1444 #if defined(__WIN32__) && !defined(__WXMICROWIN__) 
1445     UINT codepage 
= ::GetACP(); 
1447     // wxWindows only knows about CP1250-1257, 932, 936, 949, 950 
1448     if ( codepage 
>= 1250 && codepage 
<= 1257 ) 
1450         return (wxFontEncoding
)(wxFONTENCODING_CP1250 
+ codepage 
- 1250); 
1453     if ( codepage 
== 932 ) 
1455         return wxFONTENCODING_CP932
; 
1458     if ( codepage 
== 936 ) 
1460         return wxFONTENCODING_CP936
; 
1463     if ( codepage 
== 949 ) 
1465         return wxFONTENCODING_CP949
; 
1468     if ( codepage 
== 950 ) 
1470         return wxFONTENCODING_CP950
; 
1472 #elif defined(__UNIX_LIKE__) && wxUSE_FONTMAP 
1473     wxString encname 
= GetSystemEncodingName(); 
1474     if ( !encname
.empty() ) 
1476         wxFontEncoding enc 
= wxFontMapper::Get()-> 
1477             CharsetToEncoding(encname
, FALSE 
/* not interactive */); 
1479         // on some modern Linux systems (RedHat 8) the default system locale 
1480         // is UTF8 -- but it isn't supported by wxGTK in ANSI build at all so 
1481         // don't even try to use it in this case 
1483         if ( enc 
== wxFONTENCODING_UTF8 
) 
1485             // the most similar supported encoding... 
1486             enc 
= wxFONTENCODING_ISO8859_1
; 
1488 #endif // !wxUSE_UNICODE 
1490         // this should probably be considered as a bug in CharsetToEncoding(): 
1491         // it shouldn't return wxFONTENCODING_DEFAULT at all - but it does it 
1492         // for US-ASCII charset 
1494         // we, OTOH, definitely shouldn't return it as it doesn't make sense at 
1495         // all (which encoding is it?) 
1496         if ( enc 
!= wxFONTENCODING_DEFAULT 
) 
1500         //else: return wxFONTENCODING_SYSTEM below 
1502 #endif // Win32/Unix 
1504     return wxFONTENCODING_SYSTEM
; 
1508 void wxLocale::AddLanguage(const wxLanguageInfo
& info
) 
1510     CreateLanguagesDB(); 
1511     ms_languagesDB
->Add(info
); 
1515 const wxLanguageInfo 
*wxLocale::GetLanguageInfo(int lang
) 
1517     CreateLanguagesDB(); 
1519     const size_t count 
= ms_languagesDB
->GetCount(); 
1520     for ( size_t i 
= 0; i 
< count
; i
++ ) 
1522         if ( ms_languagesDB
->Item(i
).Language 
== lang 
) 
1524             return &ms_languagesDB
->Item(i
); 
1532 wxString 
wxLocale::GetLanguageName(int lang
) 
1534     const wxLanguageInfo 
*info 
= GetLanguageInfo(lang
); 
1536         return wxEmptyString
; 
1538         return info
->Description
; 
1542 const wxLanguageInfo 
*wxLocale::FindLanguageInfo(const wxString
& locale
) 
1544     CreateLanguagesDB(); 
1546     const wxLanguageInfo 
*infoRet 
= NULL
; 
1548     const size_t count 
= ms_languagesDB
->GetCount(); 
1549     for ( size_t i 
= 0; i 
< count
; i
++ ) 
1551         const wxLanguageInfo 
*info 
= &ms_languagesDB
->Item(i
); 
1553         if ( wxStricmp(locale
, info
->CanonicalName
) == 0 || 
1554                 wxStricmp(locale
, info
->Description
) == 0 ) 
1556             // exact match, stop searching 
1561         if ( wxStricmp(locale
, info
->CanonicalName
.BeforeFirst(_T('_'))) == 0 ) 
1563             // a match -- but maybe we'll find an exact one later, so continue 
1566             // OTOH, maybe we had already found a language match and in this 
1567             // case don't overwrite it becauce the entry for the default 
1568             // country always appears first in ms_languagesDB 
1577 wxString 
wxLocale::GetSysName() const 
1581     return wxSetlocale(LC_ALL
, NULL
); 
1583     return wxEmptyString
; 
1588 wxLocale::~wxLocale() 
1591     wxMsgCatalog 
*pTmpCat
; 
1592     while ( m_pMsgCat 
!= NULL 
) { 
1593         pTmpCat 
= m_pMsgCat
; 
1594         m_pMsgCat 
= m_pMsgCat
->m_pNext
; 
1598     // restore old locale 
1599     wxSetLocale(m_pOldLocale
); 
1602     wxSetlocale(LC_ALL
, m_pszOldLocale
); 
1604     free((wxChar 
*)m_pszOldLocale
);     // const_cast 
1607 // get the translation of given string in current locale 
1608 const wxChar 
*wxLocale::GetString(const wxChar 
*szOrigString
, 
1609                                   const wxChar 
*szDomain
) const 
1611     if ( wxIsEmpty(szOrigString
) ) 
1614     const wxChar 
*pszTrans 
= NULL
; 
1615     wxMsgCatalog 
*pMsgCat
; 
1617     if ( szDomain 
!= NULL 
) 
1619         pMsgCat 
= FindCatalog(szDomain
); 
1621         // does the catalog exist? 
1622         if ( pMsgCat 
!= NULL 
) 
1623             pszTrans 
= pMsgCat
->GetString(szOrigString
); 
1627         // search in all domains 
1628         for ( pMsgCat 
= m_pMsgCat
; pMsgCat 
!= NULL
; pMsgCat 
= pMsgCat
->m_pNext 
) 
1630             pszTrans 
= pMsgCat
->GetString(szOrigString
); 
1631             if ( pszTrans 
!= NULL 
)   // take the first found 
1636     if ( pszTrans 
== NULL 
) 
1639         if ( !NoTransErr::Suppress() ) 
1641             NoTransErr noTransErr
; 
1643             if ( szDomain 
!= NULL 
) 
1645                 wxLogTrace(_T("i18n"), 
1646                            _T("string '%s' not found in domain '%s' for locale '%s'."), 
1647                            szOrigString
, szDomain
, m_strLocale
.c_str()); 
1651                 wxLogTrace(_T("i18n"), 
1652                            _T("string '%s' not found in locale '%s'."), 
1653                            szOrigString
, m_strLocale
.c_str()); 
1656 #endif // __WXDEBUG__ 
1658         return szOrigString
; 
1664 // find catalog by name in a linked list, return NULL if !found 
1665 wxMsgCatalog 
*wxLocale::FindCatalog(const wxChar 
*szDomain
) const 
1667     // linear search in the linked list 
1668     wxMsgCatalog 
*pMsgCat
; 
1669     for ( pMsgCat 
= m_pMsgCat
; pMsgCat 
!= NULL
; pMsgCat 
= pMsgCat
->m_pNext 
) 
1671         if ( wxStricmp(pMsgCat
->GetName(), szDomain
) == 0 ) 
1678 // check if the given catalog is loaded 
1679 bool wxLocale::IsLoaded(const wxChar 
*szDomain
) const 
1681   return FindCatalog(szDomain
) != NULL
; 
1684 // add a catalog to our linked list 
1685 bool wxLocale::AddCatalog(const wxChar 
*szDomain
) 
1687   wxMsgCatalog 
*pMsgCat 
= new wxMsgCatalog
; 
1689   if ( pMsgCat
->Load(m_strShort
, szDomain
, m_bConvertEncoding
) ) { 
1690     // add it to the head of the list so that in GetString it will 
1691     // be searched before the catalogs added earlier 
1692     pMsgCat
->m_pNext 
= m_pMsgCat
; 
1693     m_pMsgCat 
= pMsgCat
; 
1698     // don't add it because it couldn't be loaded anyway 
1705 // ---------------------------------------------------------------------------- 
1706 // accessors for locale-dependent data 
1707 // ---------------------------------------------------------------------------- 
1714 wxString 
wxLocale::GetInfo(wxLocaleInfo index
) 
1719     buffer
[0] = wxT('\0'); 
1722         case wxSYS_DECIMAL_SEPARATOR
: 
1723             count 
= ::GetLocaleInfo(LOCALE_USER_DEFAULT
, LOCALE_SDECIMAL
, buffer
, 256); 
1729         case wxSYS_LIST_SEPARATOR
: 
1730             count 
= ::GetLocaleInfo(LOCALE_USER_DEFAULT
, LOCALE_SLIST
, buffer
, 256); 
1736         case wxSYS_LEADING_ZERO
: // 0 means no leading zero, 1 means leading zero 
1737             count 
= ::GetLocaleInfo(LOCALE_USER_DEFAULT
, LOCALE_ILZERO
, buffer
, 256); 
1744             wxFAIL_MSG("Unknown System String !"); 
1752 wxString 
wxLocale::GetInfo(wxLocaleInfo index
, wxLocaleCategory
) 
1754     return wxEmptyString
; 
1757 #endif // __WXMSW__/!__WXMSW__ 
1761 // ---------------------------------------------------------------------------- 
1762 // global functions and variables 
1763 // ---------------------------------------------------------------------------- 
1765 // retrieve/change current locale 
1766 // ------------------------------ 
1768 // the current locale object 
1769 static wxLocale 
*g_pLocale 
= NULL
; 
1771 wxLocale 
*wxGetLocale() 
1776 wxLocale 
*wxSetLocale(wxLocale 
*pLocale
) 
1778   wxLocale 
*pOld 
= g_pLocale
; 
1779   g_pLocale 
= pLocale
; 
1785 // ---------------------------------------------------------------------------- 
1786 // wxLocale module (for lazy destruction of languagesDB) 
1787 // ---------------------------------------------------------------------------- 
1789 class wxLocaleModule
: public wxModule
 
1791     DECLARE_DYNAMIC_CLASS(wxLocaleModule
) 
1794         bool OnInit() { return TRUE
; } 
1795         void OnExit() { wxLocale::DestroyLanguagesDB(); } 
1798 IMPLEMENT_DYNAMIC_CLASS(wxLocaleModule
, wxModule
) 
1802 // ---------------------------------------------------------------------------- 
1803 // default languages table & initialization 
1804 // ---------------------------------------------------------------------------- 
1808 // --- --- --- generated code begins here --- --- --- 
1810 // This table is generated by misc/languages/genlang.py 
1811 // When making changes, please put them into misc/languages/langtabl.txt 
1813 #if !defined(__WIN32__) || defined(__WXMICROWIN__) 
1815 #define SETWINLANG(info,lang,sublang) 
1819 #define SETWINLANG(info,lang,sublang) \ 
1820     info.WinLang = lang, info.WinSublang = sublang; 
1822 #ifndef LANG_AFRIKAANS 
1823 #define LANG_AFRIKAANS (0) 
1825 #ifndef LANG_ALBANIAN 
1826 #define LANG_ALBANIAN (0) 
1829 #define LANG_ARABIC (0) 
1831 #ifndef LANG_ARMENIAN 
1832 #define LANG_ARMENIAN (0) 
1834 #ifndef LANG_ASSAMESE 
1835 #define LANG_ASSAMESE (0) 
1838 #define LANG_AZERI (0) 
1841 #define LANG_BASQUE (0) 
1843 #ifndef LANG_BELARUSIAN 
1844 #define LANG_BELARUSIAN (0) 
1846 #ifndef LANG_BENGALI 
1847 #define LANG_BENGALI (0) 
1849 #ifndef LANG_BULGARIAN 
1850 #define LANG_BULGARIAN (0) 
1852 #ifndef LANG_CATALAN 
1853 #define LANG_CATALAN (0) 
1855 #ifndef LANG_CHINESE 
1856 #define LANG_CHINESE (0) 
1858 #ifndef LANG_CROATIAN 
1859 #define LANG_CROATIAN (0) 
1862 #define LANG_CZECH (0) 
1865 #define LANG_DANISH (0) 
1868 #define LANG_DUTCH (0) 
1870 #ifndef LANG_ENGLISH 
1871 #define LANG_ENGLISH (0) 
1873 #ifndef LANG_ESTONIAN 
1874 #define LANG_ESTONIAN (0) 
1876 #ifndef LANG_FAEROESE 
1877 #define LANG_FAEROESE (0) 
1880 #define LANG_FARSI (0) 
1882 #ifndef LANG_FINNISH 
1883 #define LANG_FINNISH (0) 
1886 #define LANG_FRENCH (0) 
1888 #ifndef LANG_GEORGIAN 
1889 #define LANG_GEORGIAN (0) 
1892 #define LANG_GERMAN (0) 
1895 #define LANG_GREEK (0) 
1897 #ifndef LANG_GUJARATI 
1898 #define LANG_GUJARATI (0) 
1901 #define LANG_HEBREW (0) 
1904 #define LANG_HINDI (0) 
1906 #ifndef LANG_HUNGARIAN 
1907 #define LANG_HUNGARIAN (0) 
1909 #ifndef LANG_ICELANDIC 
1910 #define LANG_ICELANDIC (0) 
1912 #ifndef LANG_INDONESIAN 
1913 #define LANG_INDONESIAN (0) 
1915 #ifndef LANG_ITALIAN 
1916 #define LANG_ITALIAN (0) 
1918 #ifndef LANG_JAPANESE 
1919 #define LANG_JAPANESE (0) 
1921 #ifndef LANG_KANNADA 
1922 #define LANG_KANNADA (0) 
1924 #ifndef LANG_KASHMIRI 
1925 #define LANG_KASHMIRI (0) 
1928 #define LANG_KAZAK (0) 
1930 #ifndef LANG_KONKANI 
1931 #define LANG_KONKANI (0) 
1934 #define LANG_KOREAN (0) 
1936 #ifndef LANG_LATVIAN 
1937 #define LANG_LATVIAN (0) 
1939 #ifndef LANG_LITHUANIAN 
1940 #define LANG_LITHUANIAN (0) 
1942 #ifndef LANG_MACEDONIAN 
1943 #define LANG_MACEDONIAN (0) 
1946 #define LANG_MALAY (0) 
1948 #ifndef LANG_MALAYALAM 
1949 #define LANG_MALAYALAM (0) 
1951 #ifndef LANG_MANIPURI 
1952 #define LANG_MANIPURI (0) 
1954 #ifndef LANG_MARATHI 
1955 #define LANG_MARATHI (0) 
1958 #define LANG_NEPALI (0) 
1960 #ifndef LANG_NORWEGIAN 
1961 #define LANG_NORWEGIAN (0) 
1964 #define LANG_ORIYA (0) 
1967 #define LANG_POLISH (0) 
1969 #ifndef LANG_PORTUGUESE 
1970 #define LANG_PORTUGUESE (0) 
1972 #ifndef LANG_PUNJABI 
1973 #define LANG_PUNJABI (0) 
1975 #ifndef LANG_ROMANIAN 
1976 #define LANG_ROMANIAN (0) 
1978 #ifndef LANG_RUSSIAN 
1979 #define LANG_RUSSIAN (0) 
1981 #ifndef LANG_SANSKRIT 
1982 #define LANG_SANSKRIT (0) 
1984 #ifndef LANG_SERBIAN 
1985 #define LANG_SERBIAN (0) 
1988 #define LANG_SINDHI (0) 
1991 #define LANG_SLOVAK (0) 
1993 #ifndef LANG_SLOVENIAN 
1994 #define LANG_SLOVENIAN (0) 
1996 #ifndef LANG_SPANISH 
1997 #define LANG_SPANISH (0) 
1999 #ifndef LANG_SWAHILI 
2000 #define LANG_SWAHILI (0) 
2002 #ifndef LANG_SWEDISH 
2003 #define LANG_SWEDISH (0) 
2006 #define LANG_TAMIL (0) 
2009 #define LANG_TATAR (0) 
2012 #define LANG_TELUGU (0) 
2015 #define LANG_THAI (0) 
2017 #ifndef LANG_TURKISH 
2018 #define LANG_TURKISH (0) 
2020 #ifndef LANG_UKRAINIAN 
2021 #define LANG_UKRAINIAN (0) 
2024 #define LANG_URDU (0) 
2027 #define LANG_UZBEK (0) 
2029 #ifndef LANG_VIETNAMESE 
2030 #define LANG_VIETNAMESE (0) 
2032 #ifndef SUBLANG_ARABIC_ALGERIA 
2033 #define SUBLANG_ARABIC_ALGERIA SUBLANG_DEFAULT 
2035 #ifndef SUBLANG_ARABIC_BAHRAIN 
2036 #define SUBLANG_ARABIC_BAHRAIN SUBLANG_DEFAULT 
2038 #ifndef SUBLANG_ARABIC_EGYPT 
2039 #define SUBLANG_ARABIC_EGYPT SUBLANG_DEFAULT 
2041 #ifndef SUBLANG_ARABIC_IRAQ 
2042 #define SUBLANG_ARABIC_IRAQ SUBLANG_DEFAULT 
2044 #ifndef SUBLANG_ARABIC_JORDAN 
2045 #define SUBLANG_ARABIC_JORDAN SUBLANG_DEFAULT 
2047 #ifndef SUBLANG_ARABIC_KUWAIT 
2048 #define SUBLANG_ARABIC_KUWAIT SUBLANG_DEFAULT 
2050 #ifndef SUBLANG_ARABIC_LEBANON 
2051 #define SUBLANG_ARABIC_LEBANON SUBLANG_DEFAULT 
2053 #ifndef SUBLANG_ARABIC_LIBYA 
2054 #define SUBLANG_ARABIC_LIBYA SUBLANG_DEFAULT 
2056 #ifndef SUBLANG_ARABIC_MOROCCO 
2057 #define SUBLANG_ARABIC_MOROCCO SUBLANG_DEFAULT 
2059 #ifndef SUBLANG_ARABIC_OMAN 
2060 #define SUBLANG_ARABIC_OMAN SUBLANG_DEFAULT 
2062 #ifndef SUBLANG_ARABIC_QATAR 
2063 #define SUBLANG_ARABIC_QATAR SUBLANG_DEFAULT 
2065 #ifndef SUBLANG_ARABIC_SAUDI_ARABIA 
2066 #define SUBLANG_ARABIC_SAUDI_ARABIA SUBLANG_DEFAULT 
2068 #ifndef SUBLANG_ARABIC_SYRIA 
2069 #define SUBLANG_ARABIC_SYRIA SUBLANG_DEFAULT 
2071 #ifndef SUBLANG_ARABIC_TUNISIA 
2072 #define SUBLANG_ARABIC_TUNISIA SUBLANG_DEFAULT 
2074 #ifndef SUBLANG_ARABIC_UAE 
2075 #define SUBLANG_ARABIC_UAE SUBLANG_DEFAULT 
2077 #ifndef SUBLANG_ARABIC_YEMEN 
2078 #define SUBLANG_ARABIC_YEMEN SUBLANG_DEFAULT 
2080 #ifndef SUBLANG_AZERI_CYRILLIC 
2081 #define SUBLANG_AZERI_CYRILLIC SUBLANG_DEFAULT 
2083 #ifndef SUBLANG_AZERI_LATIN 
2084 #define SUBLANG_AZERI_LATIN SUBLANG_DEFAULT 
2086 #ifndef SUBLANG_CHINESE_SIMPLIFIED 
2087 #define SUBLANG_CHINESE_SIMPLIFIED SUBLANG_DEFAULT 
2089 #ifndef SUBLANG_CHINESE_TRADITIONAL 
2090 #define SUBLANG_CHINESE_TRADITIONAL SUBLANG_DEFAULT 
2092 #ifndef SUBLANG_CHINESE_HONGKONG 
2093 #define SUBLANG_CHINESE_HONGKONG SUBLANG_DEFAULT 
2095 #ifndef SUBLANG_CHINESE_MACAU 
2096 #define SUBLANG_CHINESE_MACAU SUBLANG_DEFAULT 
2098 #ifndef SUBLANG_CHINESE_SINGAPORE 
2099 #define SUBLANG_CHINESE_SINGAPORE SUBLANG_DEFAULT 
2101 #ifndef SUBLANG_DUTCH 
2102 #define SUBLANG_DUTCH SUBLANG_DEFAULT 
2104 #ifndef SUBLANG_DUTCH_BELGIAN 
2105 #define SUBLANG_DUTCH_BELGIAN SUBLANG_DEFAULT 
2107 #ifndef SUBLANG_ENGLISH_UK 
2108 #define SUBLANG_ENGLISH_UK SUBLANG_DEFAULT 
2110 #ifndef SUBLANG_ENGLISH_US 
2111 #define SUBLANG_ENGLISH_US SUBLANG_DEFAULT 
2113 #ifndef SUBLANG_ENGLISH_AUS 
2114 #define SUBLANG_ENGLISH_AUS SUBLANG_DEFAULT 
2116 #ifndef SUBLANG_ENGLISH_BELIZE 
2117 #define SUBLANG_ENGLISH_BELIZE SUBLANG_DEFAULT 
2119 #ifndef SUBLANG_ENGLISH_CAN 
2120 #define SUBLANG_ENGLISH_CAN SUBLANG_DEFAULT 
2122 #ifndef SUBLANG_ENGLISH_CARIBBEAN 
2123 #define SUBLANG_ENGLISH_CARIBBEAN SUBLANG_DEFAULT 
2125 #ifndef SUBLANG_ENGLISH_EIRE 
2126 #define SUBLANG_ENGLISH_EIRE SUBLANG_DEFAULT 
2128 #ifndef SUBLANG_ENGLISH_JAMAICA 
2129 #define SUBLANG_ENGLISH_JAMAICA SUBLANG_DEFAULT 
2131 #ifndef SUBLANG_ENGLISH_NZ 
2132 #define SUBLANG_ENGLISH_NZ SUBLANG_DEFAULT 
2134 #ifndef SUBLANG_ENGLISH_PHILIPPINES 
2135 #define SUBLANG_ENGLISH_PHILIPPINES SUBLANG_DEFAULT 
2137 #ifndef SUBLANG_ENGLISH_SOUTH_AFRICA 
2138 #define SUBLANG_ENGLISH_SOUTH_AFRICA SUBLANG_DEFAULT 
2140 #ifndef SUBLANG_ENGLISH_TRINIDAD 
2141 #define SUBLANG_ENGLISH_TRINIDAD SUBLANG_DEFAULT 
2143 #ifndef SUBLANG_ENGLISH_ZIMBABWE 
2144 #define SUBLANG_ENGLISH_ZIMBABWE SUBLANG_DEFAULT 
2146 #ifndef SUBLANG_FRENCH 
2147 #define SUBLANG_FRENCH SUBLANG_DEFAULT 
2149 #ifndef SUBLANG_FRENCH_BELGIAN 
2150 #define SUBLANG_FRENCH_BELGIAN SUBLANG_DEFAULT 
2152 #ifndef SUBLANG_FRENCH_CANADIAN 
2153 #define SUBLANG_FRENCH_CANADIAN SUBLANG_DEFAULT 
2155 #ifndef SUBLANG_FRENCH_LUXEMBOURG 
2156 #define SUBLANG_FRENCH_LUXEMBOURG SUBLANG_DEFAULT 
2158 #ifndef SUBLANG_FRENCH_MONACO 
2159 #define SUBLANG_FRENCH_MONACO SUBLANG_DEFAULT 
2161 #ifndef SUBLANG_FRENCH_SWISS 
2162 #define SUBLANG_FRENCH_SWISS SUBLANG_DEFAULT 
2164 #ifndef SUBLANG_GERMAN 
2165 #define SUBLANG_GERMAN SUBLANG_DEFAULT 
2167 #ifndef SUBLANG_GERMAN_AUSTRIAN 
2168 #define SUBLANG_GERMAN_AUSTRIAN SUBLANG_DEFAULT 
2170 #ifndef SUBLANG_GERMAN_LIECHTENSTEIN 
2171 #define SUBLANG_GERMAN_LIECHTENSTEIN SUBLANG_DEFAULT 
2173 #ifndef SUBLANG_GERMAN_LUXEMBOURG 
2174 #define SUBLANG_GERMAN_LUXEMBOURG SUBLANG_DEFAULT 
2176 #ifndef SUBLANG_GERMAN_SWISS 
2177 #define SUBLANG_GERMAN_SWISS SUBLANG_DEFAULT 
2179 #ifndef SUBLANG_ITALIAN 
2180 #define SUBLANG_ITALIAN SUBLANG_DEFAULT 
2182 #ifndef SUBLANG_ITALIAN_SWISS 
2183 #define SUBLANG_ITALIAN_SWISS SUBLANG_DEFAULT 
2185 #ifndef SUBLANG_KASHMIRI_INDIA 
2186 #define SUBLANG_KASHMIRI_INDIA SUBLANG_DEFAULT 
2188 #ifndef SUBLANG_KOREAN 
2189 #define SUBLANG_KOREAN SUBLANG_DEFAULT 
2191 #ifndef SUBLANG_LITHUANIAN 
2192 #define SUBLANG_LITHUANIAN SUBLANG_DEFAULT 
2194 #ifndef SUBLANG_MALAY_BRUNEI_DARUSSALAM 
2195 #define SUBLANG_MALAY_BRUNEI_DARUSSALAM SUBLANG_DEFAULT 
2197 #ifndef SUBLANG_MALAY_MALAYSIA 
2198 #define SUBLANG_MALAY_MALAYSIA SUBLANG_DEFAULT 
2200 #ifndef SUBLANG_NEPALI_INDIA 
2201 #define SUBLANG_NEPALI_INDIA SUBLANG_DEFAULT 
2203 #ifndef SUBLANG_NORWEGIAN_BOKMAL 
2204 #define SUBLANG_NORWEGIAN_BOKMAL SUBLANG_DEFAULT 
2206 #ifndef SUBLANG_NORWEGIAN_NYNORSK 
2207 #define SUBLANG_NORWEGIAN_NYNORSK SUBLANG_DEFAULT 
2209 #ifndef SUBLANG_PORTUGUESE 
2210 #define SUBLANG_PORTUGUESE SUBLANG_DEFAULT 
2212 #ifndef SUBLANG_PORTUGUESE_BRAZILIAN 
2213 #define SUBLANG_PORTUGUESE_BRAZILIAN SUBLANG_DEFAULT 
2215 #ifndef SUBLANG_SERBIAN_CYRILLIC 
2216 #define SUBLANG_SERBIAN_CYRILLIC SUBLANG_DEFAULT 
2218 #ifndef SUBLANG_SERBIAN_LATIN 
2219 #define SUBLANG_SERBIAN_LATIN SUBLANG_DEFAULT 
2221 #ifndef SUBLANG_SPANISH 
2222 #define SUBLANG_SPANISH SUBLANG_DEFAULT 
2224 #ifndef SUBLANG_SPANISH_ARGENTINA 
2225 #define SUBLANG_SPANISH_ARGENTINA SUBLANG_DEFAULT 
2227 #ifndef SUBLANG_SPANISH_BOLIVIA 
2228 #define SUBLANG_SPANISH_BOLIVIA SUBLANG_DEFAULT 
2230 #ifndef SUBLANG_SPANISH_CHILE 
2231 #define SUBLANG_SPANISH_CHILE SUBLANG_DEFAULT 
2233 #ifndef SUBLANG_SPANISH_COLOMBIA 
2234 #define SUBLANG_SPANISH_COLOMBIA SUBLANG_DEFAULT 
2236 #ifndef SUBLANG_SPANISH_COSTA_RICA 
2237 #define SUBLANG_SPANISH_COSTA_RICA SUBLANG_DEFAULT 
2239 #ifndef SUBLANG_SPANISH_DOMINICAN_REPUBLIC 
2240 #define SUBLANG_SPANISH_DOMINICAN_REPUBLIC SUBLANG_DEFAULT 
2242 #ifndef SUBLANG_SPANISH_ECUADOR 
2243 #define SUBLANG_SPANISH_ECUADOR SUBLANG_DEFAULT 
2245 #ifndef SUBLANG_SPANISH_EL_SALVADOR 
2246 #define SUBLANG_SPANISH_EL_SALVADOR SUBLANG_DEFAULT 
2248 #ifndef SUBLANG_SPANISH_GUATEMALA 
2249 #define SUBLANG_SPANISH_GUATEMALA SUBLANG_DEFAULT 
2251 #ifndef SUBLANG_SPANISH_HONDURAS 
2252 #define SUBLANG_SPANISH_HONDURAS SUBLANG_DEFAULT 
2254 #ifndef SUBLANG_SPANISH_MEXICAN 
2255 #define SUBLANG_SPANISH_MEXICAN SUBLANG_DEFAULT 
2257 #ifndef SUBLANG_SPANISH_MODERN 
2258 #define SUBLANG_SPANISH_MODERN SUBLANG_DEFAULT 
2260 #ifndef SUBLANG_SPANISH_NICARAGUA 
2261 #define SUBLANG_SPANISH_NICARAGUA SUBLANG_DEFAULT 
2263 #ifndef SUBLANG_SPANISH_PANAMA 
2264 #define SUBLANG_SPANISH_PANAMA SUBLANG_DEFAULT 
2266 #ifndef SUBLANG_SPANISH_PARAGUAY 
2267 #define SUBLANG_SPANISH_PARAGUAY SUBLANG_DEFAULT 
2269 #ifndef SUBLANG_SPANISH_PERU 
2270 #define SUBLANG_SPANISH_PERU SUBLANG_DEFAULT 
2272 #ifndef SUBLANG_SPANISH_PUERTO_RICO 
2273 #define SUBLANG_SPANISH_PUERTO_RICO SUBLANG_DEFAULT 
2275 #ifndef SUBLANG_SPANISH_URUGUAY 
2276 #define SUBLANG_SPANISH_URUGUAY SUBLANG_DEFAULT 
2278 #ifndef SUBLANG_SPANISH_VENEZUELA 
2279 #define SUBLANG_SPANISH_VENEZUELA SUBLANG_DEFAULT 
2281 #ifndef SUBLANG_SWEDISH 
2282 #define SUBLANG_SWEDISH SUBLANG_DEFAULT 
2284 #ifndef SUBLANG_SWEDISH_FINLAND 
2285 #define SUBLANG_SWEDISH_FINLAND SUBLANG_DEFAULT 
2287 #ifndef SUBLANG_URDU_INDIA 
2288 #define SUBLANG_URDU_INDIA SUBLANG_DEFAULT 
2290 #ifndef SUBLANG_URDU_PAKISTAN 
2291 #define SUBLANG_URDU_PAKISTAN SUBLANG_DEFAULT 
2293 #ifndef SUBLANG_UZBEK_CYRILLIC 
2294 #define SUBLANG_UZBEK_CYRILLIC SUBLANG_DEFAULT 
2296 #ifndef SUBLANG_UZBEK_LATIN 
2297 #define SUBLANG_UZBEK_LATIN SUBLANG_DEFAULT 
2303 #define LNG(wxlang, canonical, winlang, winsublang, desc) \ 
2304     info.Language = wxlang;                               \ 
2305     info.CanonicalName = wxT(canonical);                  \ 
2306     info.Description = wxT(desc);                         \ 
2307     SETWINLANG(info, winlang, winsublang)                 \ 
2310 void wxLocale::InitLanguagesDB() 
2312    wxLanguageInfo info
; 
2313    wxStringTokenizer tkn
; 
2315    LNG(wxLANGUAGE_ABKHAZIAN
,                  "ab"   , 0              , 0                                 , "Abkhazian") 
2316    LNG(wxLANGUAGE_AFAR
,                       "aa"   , 0              , 0                                 , "Afar") 
2317    LNG(wxLANGUAGE_AFRIKAANS
,                  "af_ZA", LANG_AFRIKAANS 
, SUBLANG_DEFAULT                   
, "Afrikaans") 
2318    LNG(wxLANGUAGE_ALBANIAN
,                   "sq_AL", LANG_ALBANIAN  
, SUBLANG_DEFAULT                   
, "Albanian") 
2319    LNG(wxLANGUAGE_AMHARIC
,                    "am"   , 0              , 0                                 , "Amharic") 
2320    LNG(wxLANGUAGE_ARABIC
,                     "ar"   , LANG_ARABIC    
, SUBLANG_DEFAULT                   
, "Arabic") 
2321    LNG(wxLANGUAGE_ARABIC_ALGERIA
,             "ar_DZ", LANG_ARABIC    
, SUBLANG_ARABIC_ALGERIA            
, "Arabic (Algeria)") 
2322    LNG(wxLANGUAGE_ARABIC_BAHRAIN
,             "ar_BH", LANG_ARABIC    
, SUBLANG_ARABIC_BAHRAIN            
, "Arabic (Bahrain)") 
2323    LNG(wxLANGUAGE_ARABIC_EGYPT
,               "ar_EG", LANG_ARABIC    
, SUBLANG_ARABIC_EGYPT              
, "Arabic (Egypt)") 
2324    LNG(wxLANGUAGE_ARABIC_IRAQ
,                "ar_IQ", LANG_ARABIC    
, SUBLANG_ARABIC_IRAQ               
, "Arabic (Iraq)") 
2325    LNG(wxLANGUAGE_ARABIC_JORDAN
,              "ar_JO", LANG_ARABIC    
, SUBLANG_ARABIC_JORDAN             
, "Arabic (Jordan)") 
2326    LNG(wxLANGUAGE_ARABIC_KUWAIT
,              "ar_KW", LANG_ARABIC    
, SUBLANG_ARABIC_KUWAIT             
, "Arabic (Kuwait)") 
2327    LNG(wxLANGUAGE_ARABIC_LEBANON
,             "ar_LB", LANG_ARABIC    
, SUBLANG_ARABIC_LEBANON            
, "Arabic (Lebanon)") 
2328    LNG(wxLANGUAGE_ARABIC_LIBYA
,               "ar_LY", LANG_ARABIC    
, SUBLANG_ARABIC_LIBYA              
, "Arabic (Libya)") 
2329    LNG(wxLANGUAGE_ARABIC_MOROCCO
,             "ar_MA", LANG_ARABIC    
, SUBLANG_ARABIC_MOROCCO            
, "Arabic (Morocco)") 
2330    LNG(wxLANGUAGE_ARABIC_OMAN
,                "ar_OM", LANG_ARABIC    
, SUBLANG_ARABIC_OMAN               
, "Arabic (Oman)") 
2331    LNG(wxLANGUAGE_ARABIC_QATAR
,               "ar_QA", LANG_ARABIC    
, SUBLANG_ARABIC_QATAR              
, "Arabic (Qatar)") 
2332    LNG(wxLANGUAGE_ARABIC_SAUDI_ARABIA
,        "ar_SA", LANG_ARABIC    
, SUBLANG_ARABIC_SAUDI_ARABIA       
, "Arabic (Saudi Arabia)") 
2333    LNG(wxLANGUAGE_ARABIC_SUDAN
,               "ar_SD", 0              , 0                                 , "Arabic (Sudan)") 
2334    LNG(wxLANGUAGE_ARABIC_SYRIA
,               "ar_SY", LANG_ARABIC    
, SUBLANG_ARABIC_SYRIA              
, "Arabic (Syria)") 
2335    LNG(wxLANGUAGE_ARABIC_TUNISIA
,             "ar_TN", LANG_ARABIC    
, SUBLANG_ARABIC_TUNISIA            
, "Arabic (Tunisia)") 
2336    LNG(wxLANGUAGE_ARABIC_UAE
,                 "ar_AE", LANG_ARABIC    
, SUBLANG_ARABIC_UAE                
, "Arabic (Uae)") 
2337    LNG(wxLANGUAGE_ARABIC_YEMEN
,               "ar_YE", LANG_ARABIC    
, SUBLANG_ARABIC_YEMEN              
, "Arabic (Yemen)") 
2338    LNG(wxLANGUAGE_ARMENIAN
,                   "hy"   , LANG_ARMENIAN  
, SUBLANG_DEFAULT                   
, "Armenian") 
2339    LNG(wxLANGUAGE_ASSAMESE
,                   "as"   , LANG_ASSAMESE  
, SUBLANG_DEFAULT                   
, "Assamese") 
2340    LNG(wxLANGUAGE_AYMARA
,                     "ay"   , 0              , 0                                 , "Aymara") 
2341    LNG(wxLANGUAGE_AZERI
,                      "az"   , LANG_AZERI     
, SUBLANG_DEFAULT                   
, "Azeri") 
2342    LNG(wxLANGUAGE_AZERI_CYRILLIC
,             "az"   , LANG_AZERI     
, SUBLANG_AZERI_CYRILLIC            
, "Azeri (Cyrillic)") 
2343    LNG(wxLANGUAGE_AZERI_LATIN
,                "az"   , LANG_AZERI     
, SUBLANG_AZERI_LATIN               
, "Azeri (Latin)") 
2344    LNG(wxLANGUAGE_BASHKIR
,                    "ba"   , 0              , 0                                 , "Bashkir") 
2345    LNG(wxLANGUAGE_BASQUE
,                     "eu_ES", LANG_BASQUE    
, SUBLANG_DEFAULT                   
, "Basque") 
2346    LNG(wxLANGUAGE_BELARUSIAN
,                 "be_BY", LANG_BELARUSIAN
, SUBLANG_DEFAULT                   
, "Belarusian") 
2347    LNG(wxLANGUAGE_BENGALI
,                    "bn"   , LANG_BENGALI   
, SUBLANG_DEFAULT                   
, "Bengali") 
2348    LNG(wxLANGUAGE_BHUTANI
,                    "dz"   , 0              , 0                                 , "Bhutani") 
2349    LNG(wxLANGUAGE_BIHARI
,                     "bh"   , 0              , 0                                 , "Bihari") 
2350    LNG(wxLANGUAGE_BISLAMA
,                    "bi"   , 0              , 0                                 , "Bislama") 
2351    LNG(wxLANGUAGE_BRETON
,                     "br"   , 0              , 0                                 , "Breton") 
2352    LNG(wxLANGUAGE_BULGARIAN
,                  "bg_BG", LANG_BULGARIAN 
, SUBLANG_DEFAULT                   
, "Bulgarian") 
2353    LNG(wxLANGUAGE_BURMESE
,                    "my"   , 0              , 0                                 , "Burmese") 
2354    LNG(wxLANGUAGE_CAMBODIAN
,                  "km"   , 0              , 0                                 , "Cambodian") 
2355    LNG(wxLANGUAGE_CATALAN
,                    "ca_ES", LANG_CATALAN   
, SUBLANG_DEFAULT                   
, "Catalan") 
2356    LNG(wxLANGUAGE_CHINESE
,                    "zh_CN", LANG_CHINESE   
, SUBLANG_DEFAULT                   
, "Chinese") 
2357    LNG(wxLANGUAGE_CHINESE_SIMPLIFIED
,         "zh_CN", LANG_CHINESE   
, SUBLANG_CHINESE_SIMPLIFIED        
, "Chinese (Simplified)") 
2358    LNG(wxLANGUAGE_CHINESE_TRADITIONAL
,        "zh_TW", LANG_CHINESE   
, SUBLANG_CHINESE_TRADITIONAL       
, "Chinese (Traditional)") 
2359    LNG(wxLANGUAGE_CHINESE_HONGKONG
,           "zh_HK", LANG_CHINESE   
, SUBLANG_CHINESE_HONGKONG          
, "Chinese (Hongkong)") 
2360    LNG(wxLANGUAGE_CHINESE_MACAU
,              "zh_MO", LANG_CHINESE   
, SUBLANG_CHINESE_MACAU             
, "Chinese (Macau)") 
2361    LNG(wxLANGUAGE_CHINESE_SINGAPORE
,          "zh_SG", LANG_CHINESE   
, SUBLANG_CHINESE_SINGAPORE         
, "Chinese (Singapore)") 
2362    LNG(wxLANGUAGE_CHINESE_TAIWAN
,             "zh_TW", LANG_CHINESE   
, SUBLANG_CHINESE_TRADITIONAL       
, "Chinese (Taiwan)") 
2363    LNG(wxLANGUAGE_CORSICAN
,                   "co"   , 0              , 0                                 , "Corsican") 
2364    LNG(wxLANGUAGE_CROATIAN
,                   "hr_HR", LANG_CROATIAN  
, SUBLANG_DEFAULT                   
, "Croatian") 
2365    LNG(wxLANGUAGE_CZECH
,                      "cs_CZ", LANG_CZECH     
, SUBLANG_DEFAULT                   
, "Czech") 
2366    LNG(wxLANGUAGE_DANISH
,                     "da_DK", LANG_DANISH    
, SUBLANG_DEFAULT                   
, "Danish") 
2367    LNG(wxLANGUAGE_DUTCH
,                      "nl_NL", LANG_DUTCH     
, SUBLANG_DUTCH                     
, "Dutch") 
2368    LNG(wxLANGUAGE_DUTCH_BELGIAN
,              "nl_BE", LANG_DUTCH     
, SUBLANG_DUTCH_BELGIAN             
, "Dutch (Belgian)") 
2369    LNG(wxLANGUAGE_ENGLISH
,                    "en_GB", LANG_ENGLISH   
, SUBLANG_ENGLISH_UK                
, "English") 
2370    LNG(wxLANGUAGE_ENGLISH_UK
,                 "en_GB", LANG_ENGLISH   
, SUBLANG_ENGLISH_UK                
, "English (U.K.)") 
2371    LNG(wxLANGUAGE_ENGLISH_US
,                 "en_US", LANG_ENGLISH   
, SUBLANG_ENGLISH_US                
, "English (U.S.)") 
2372    LNG(wxLANGUAGE_ENGLISH_AUSTRALIA
,          "en_AU", LANG_ENGLISH   
, SUBLANG_ENGLISH_AUS               
, "English (Australia)") 
2373    LNG(wxLANGUAGE_ENGLISH_BELIZE
,             "en_BZ", LANG_ENGLISH   
, SUBLANG_ENGLISH_BELIZE            
, "English (Belize)") 
2374    LNG(wxLANGUAGE_ENGLISH_BOTSWANA
,           "en_BW", 0              , 0                                 , "English (Botswana)") 
2375    LNG(wxLANGUAGE_ENGLISH_CANADA
,             "en_CA", LANG_ENGLISH   
, SUBLANG_ENGLISH_CAN               
, "English (Canada)") 
2376    LNG(wxLANGUAGE_ENGLISH_CARIBBEAN
,          "en_CB", LANG_ENGLISH   
, SUBLANG_ENGLISH_CARIBBEAN         
, "English (Caribbean)") 
2377    LNG(wxLANGUAGE_ENGLISH_DENMARK
,            "en_DK", 0              , 0                                 , "English (Denmark)") 
2378    LNG(wxLANGUAGE_ENGLISH_EIRE
,               "en_IE", LANG_ENGLISH   
, SUBLANG_ENGLISH_EIRE              
, "English (Eire)") 
2379    LNG(wxLANGUAGE_ENGLISH_JAMAICA
,            "en_JM", LANG_ENGLISH   
, SUBLANG_ENGLISH_JAMAICA           
, "English (Jamaica)") 
2380    LNG(wxLANGUAGE_ENGLISH_NEW_ZEALAND
,        "en_NZ", LANG_ENGLISH   
, SUBLANG_ENGLISH_NZ                
, "English (New Zealand)") 
2381    LNG(wxLANGUAGE_ENGLISH_PHILIPPINES
,        "en_PH", LANG_ENGLISH   
, SUBLANG_ENGLISH_PHILIPPINES       
, "English (Philippines)") 
2382    LNG(wxLANGUAGE_ENGLISH_SOUTH_AFRICA
,       "en_ZA", LANG_ENGLISH   
, SUBLANG_ENGLISH_SOUTH_AFRICA      
, "English (South Africa)") 
2383    LNG(wxLANGUAGE_ENGLISH_TRINIDAD
,           "en_TT", LANG_ENGLISH   
, SUBLANG_ENGLISH_TRINIDAD          
, "English (Trinidad)") 
2384    LNG(wxLANGUAGE_ENGLISH_ZIMBABWE
,           "en_ZW", LANG_ENGLISH   
, SUBLANG_ENGLISH_ZIMBABWE          
, "English (Zimbabwe)") 
2385    LNG(wxLANGUAGE_ESPERANTO
,                  "eo"   , 0              , 0                                 , "Esperanto") 
2386    LNG(wxLANGUAGE_ESTONIAN
,                   "et_EE", LANG_ESTONIAN  
, SUBLANG_DEFAULT                   
, "Estonian") 
2387    LNG(wxLANGUAGE_FAEROESE
,                   "fo_FO", LANG_FAEROESE  
, SUBLANG_DEFAULT                   
, "Faeroese") 
2388    LNG(wxLANGUAGE_FARSI
,                      "fa_IR", LANG_FARSI     
, SUBLANG_DEFAULT                   
, "Farsi") 
2389    LNG(wxLANGUAGE_FIJI
,                       "fj"   , 0              , 0                                 , "Fiji") 
2390    LNG(wxLANGUAGE_FINNISH
,                    "fi_FI", LANG_FINNISH   
, SUBLANG_DEFAULT                   
, "Finnish") 
2391    LNG(wxLANGUAGE_FRENCH
,                     "fr_FR", LANG_FRENCH    
, SUBLANG_FRENCH                    
, "French") 
2392    LNG(wxLANGUAGE_FRENCH_BELGIAN
,             "fr_BE", LANG_FRENCH    
, SUBLANG_FRENCH_BELGIAN            
, "French (Belgian)") 
2393    LNG(wxLANGUAGE_FRENCH_CANADIAN
,            "fr_CA", LANG_FRENCH    
, SUBLANG_FRENCH_CANADIAN           
, "French (Canadian)") 
2394    LNG(wxLANGUAGE_FRENCH_LUXEMBOURG
,          "fr_LU", LANG_FRENCH    
, SUBLANG_FRENCH_LUXEMBOURG         
, "French (Luxembourg)") 
2395    LNG(wxLANGUAGE_FRENCH_MONACO
,              "fr_MC", LANG_FRENCH    
, SUBLANG_FRENCH_MONACO             
, "French (Monaco)") 
2396    LNG(wxLANGUAGE_FRENCH_SWISS
,               "fr_CH", LANG_FRENCH    
, SUBLANG_FRENCH_SWISS              
, "French (Swiss)") 
2397    LNG(wxLANGUAGE_FRISIAN
,                    "fy"   , 0              , 0                                 , "Frisian") 
2398    LNG(wxLANGUAGE_GALICIAN
,                   "gl_ES", 0              , 0                                 , "Galician") 
2399    LNG(wxLANGUAGE_GEORGIAN
,                   "ka"   , LANG_GEORGIAN  
, SUBLANG_DEFAULT                   
, "Georgian") 
2400    LNG(wxLANGUAGE_GERMAN
,                     "de_DE", LANG_GERMAN    
, SUBLANG_GERMAN                    
, "German") 
2401    LNG(wxLANGUAGE_GERMAN_AUSTRIAN
,            "de_AT", LANG_GERMAN    
, SUBLANG_GERMAN_AUSTRIAN           
, "German (Austrian)") 
2402    LNG(wxLANGUAGE_GERMAN_BELGIUM
,             "de_BE", 0              , 0                                 , "German (Belgium)") 
2403    LNG(wxLANGUAGE_GERMAN_LIECHTENSTEIN
,       "de_LI", LANG_GERMAN    
, SUBLANG_GERMAN_LIECHTENSTEIN      
, "German (Liechtenstein)") 
2404    LNG(wxLANGUAGE_GERMAN_LUXEMBOURG
,          "de_LU", LANG_GERMAN    
, SUBLANG_GERMAN_LUXEMBOURG         
, "German (Luxembourg)") 
2405    LNG(wxLANGUAGE_GERMAN_SWISS
,               "de_CH", LANG_GERMAN    
, SUBLANG_GERMAN_SWISS              
, "German (Swiss)") 
2406    LNG(wxLANGUAGE_GREEK
,                      "el_GR", LANG_GREEK     
, SUBLANG_DEFAULT                   
, "Greek") 
2407    LNG(wxLANGUAGE_GREENLANDIC
,                "kl_GL", 0              , 0                                 , "Greenlandic") 
2408    LNG(wxLANGUAGE_GUARANI
,                    "gn"   , 0              , 0                                 , "Guarani") 
2409    LNG(wxLANGUAGE_GUJARATI
,                   "gu"   , LANG_GUJARATI  
, SUBLANG_DEFAULT                   
, "Gujarati") 
2410    LNG(wxLANGUAGE_HAUSA
,                      "ha"   , 0              , 0                                 , "Hausa") 
2411    LNG(wxLANGUAGE_HEBREW
,                     "he_IL", LANG_HEBREW    
, SUBLANG_DEFAULT                   
, "Hebrew") 
2412    LNG(wxLANGUAGE_HINDI
,                      "hi_IN", LANG_HINDI     
, SUBLANG_DEFAULT                   
, "Hindi") 
2413    LNG(wxLANGUAGE_HUNGARIAN
,                  "hu_HU", LANG_HUNGARIAN 
, SUBLANG_DEFAULT                   
, "Hungarian") 
2414    LNG(wxLANGUAGE_ICELANDIC
,                  "is_IS", LANG_ICELANDIC 
, SUBLANG_DEFAULT                   
, "Icelandic") 
2415    LNG(wxLANGUAGE_INDONESIAN
,                 "id_ID", LANG_INDONESIAN
, SUBLANG_DEFAULT                   
, "Indonesian") 
2416    LNG(wxLANGUAGE_INTERLINGUA
,                "ia"   , 0              , 0                                 , "Interlingua") 
2417    LNG(wxLANGUAGE_INTERLINGUE
,                "ie"   , 0              , 0                                 , "Interlingue") 
2418    LNG(wxLANGUAGE_INUKTITUT
,                  "iu"   , 0              , 0                                 , "Inuktitut") 
2419    LNG(wxLANGUAGE_INUPIAK
,                    "ik"   , 0              , 0                                 , "Inupiak") 
2420    LNG(wxLANGUAGE_IRISH
,                      "ga_IE", 0              , 0                                 , "Irish") 
2421    LNG(wxLANGUAGE_ITALIAN
,                    "it_IT", LANG_ITALIAN   
, SUBLANG_ITALIAN                   
, "Italian") 
2422    LNG(wxLANGUAGE_ITALIAN_SWISS
,              "it_CH", LANG_ITALIAN   
, SUBLANG_ITALIAN_SWISS             
, "Italian (Swiss)") 
2423    LNG(wxLANGUAGE_JAPANESE
,                   "ja_JP", LANG_JAPANESE  
, SUBLANG_DEFAULT                   
, "Japanese") 
2424    LNG(wxLANGUAGE_JAVANESE
,                   "jw"   , 0              , 0                                 , "Javanese") 
2425    LNG(wxLANGUAGE_KANNADA
,                    "kn"   , LANG_KANNADA   
, SUBLANG_DEFAULT                   
, "Kannada") 
2426    LNG(wxLANGUAGE_KASHMIRI
,                   "ks"   , LANG_KASHMIRI  
, SUBLANG_DEFAULT                   
, "Kashmiri") 
2427    LNG(wxLANGUAGE_KASHMIRI_INDIA
,             "ks_IN", LANG_KASHMIRI  
, SUBLANG_KASHMIRI_INDIA            
, "Kashmiri (India)") 
2428    LNG(wxLANGUAGE_KAZAKH
,                     "kk"   , LANG_KAZAK     
, SUBLANG_DEFAULT                   
, "Kazakh") 
2429    LNG(wxLANGUAGE_KERNEWEK
,                   "kw_GB", 0              , 0                                 , "Kernewek") 
2430    LNG(wxLANGUAGE_KINYARWANDA
,                "rw"   , 0              , 0                                 , "Kinyarwanda") 
2431    LNG(wxLANGUAGE_KIRGHIZ
,                    "ky"   , 0              , 0                                 , "Kirghiz") 
2432    LNG(wxLANGUAGE_KIRUNDI
,                    "rn"   , 0              , 0                                 , "Kirundi") 
2433    LNG(wxLANGUAGE_KONKANI
,                    ""     , LANG_KONKANI   
, SUBLANG_DEFAULT                   
, "Konkani") 
2434    LNG(wxLANGUAGE_KOREAN
,                     "ko_KR", LANG_KOREAN    
, SUBLANG_KOREAN                    
, "Korean") 
2435    LNG(wxLANGUAGE_KURDISH
,                    "ku"   , 0              , 0                                 , "Kurdish") 
2436    LNG(wxLANGUAGE_LAOTHIAN
,                   "lo"   , 0              , 0                                 , "Laothian") 
2437    LNG(wxLANGUAGE_LATIN
,                      "la"   , 0              , 0                                 , "Latin") 
2438    LNG(wxLANGUAGE_LATVIAN
,                    "lv_LV", LANG_LATVIAN   
, SUBLANG_DEFAULT                   
, "Latvian") 
2439    LNG(wxLANGUAGE_LINGALA
,                    "ln"   , 0              , 0                                 , "Lingala") 
2440    LNG(wxLANGUAGE_LITHUANIAN
,                 "lt_LT", LANG_LITHUANIAN
, SUBLANG_LITHUANIAN                
, "Lithuanian") 
2441    LNG(wxLANGUAGE_MACEDONIAN
,                 "mk_MK", LANG_MACEDONIAN
, SUBLANG_DEFAULT                   
, "Macedonian") 
2442    LNG(wxLANGUAGE_MALAGASY
,                   "mg"   , 0              , 0                                 , "Malagasy") 
2443    LNG(wxLANGUAGE_MALAY
,                      "ms_MY", LANG_MALAY     
, SUBLANG_DEFAULT                   
, "Malay") 
2444    LNG(wxLANGUAGE_MALAYALAM
,                  "ml"   , LANG_MALAYALAM 
, SUBLANG_DEFAULT                   
, "Malayalam") 
2445    LNG(wxLANGUAGE_MALAY_BRUNEI_DARUSSALAM
,    "ms_BN", LANG_MALAY     
, SUBLANG_MALAY_BRUNEI_DARUSSALAM   
, "Malay (Brunei Darussalam)") 
2446    LNG(wxLANGUAGE_MALAY_MALAYSIA
,             "ms_MY", LANG_MALAY     
, SUBLANG_MALAY_MALAYSIA            
, "Malay (Malaysia)") 
2447    LNG(wxLANGUAGE_MALTESE
,                    "mt_MT", 0              , 0                                 , "Maltese") 
2448    LNG(wxLANGUAGE_MANIPURI
,                   ""     , LANG_MANIPURI  
, SUBLANG_DEFAULT                   
, "Manipuri") 
2449    LNG(wxLANGUAGE_MAORI
,                      "mi"   , 0              , 0                                 , "Maori") 
2450    LNG(wxLANGUAGE_MARATHI
,                    "mr_IN", LANG_MARATHI   
, SUBLANG_DEFAULT                   
, "Marathi") 
2451    LNG(wxLANGUAGE_MOLDAVIAN
,                  "mo"   , 0              , 0                                 , "Moldavian") 
2452    LNG(wxLANGUAGE_MONGOLIAN
,                  "mn"   , 0              , 0                                 , "Mongolian") 
2453    LNG(wxLANGUAGE_NAURU
,                      "na"   , 0              , 0                                 , "Nauru") 
2454    LNG(wxLANGUAGE_NEPALI
,                     "ne"   , LANG_NEPALI    
, SUBLANG_DEFAULT                   
, "Nepali") 
2455    LNG(wxLANGUAGE_NEPALI_INDIA
,               "ne_IN", LANG_NEPALI    
, SUBLANG_NEPALI_INDIA              
, "Nepali (India)") 
2456    LNG(wxLANGUAGE_NORWEGIAN_BOKMAL
,           "nb_NO", LANG_NORWEGIAN 
, SUBLANG_NORWEGIAN_BOKMAL          
, "Norwegian (Bokmal)") 
2457    LNG(wxLANGUAGE_NORWEGIAN_NYNORSK
,          "nn_NO", LANG_NORWEGIAN 
, SUBLANG_NORWEGIAN_NYNORSK         
, "Norwegian (Nynorsk)") 
2458    LNG(wxLANGUAGE_OCCITAN
,                    "oc"   , 0              , 0                                 , "Occitan") 
2459    LNG(wxLANGUAGE_ORIYA
,                      "or"   , LANG_ORIYA     
, SUBLANG_DEFAULT                   
, "Oriya") 
2460    LNG(wxLANGUAGE_OROMO
,                      "om"   , 0              , 0                                 , "(Afan) Oromo") 
2461    LNG(wxLANGUAGE_PASHTO
,                     "ps"   , 0              , 0                                 , "Pashto, Pushto") 
2462    LNG(wxLANGUAGE_POLISH
,                     "pl_PL", LANG_POLISH    
, SUBLANG_DEFAULT                   
, "Polish") 
2463    LNG(wxLANGUAGE_PORTUGUESE
,                 "pt_PT", LANG_PORTUGUESE
, SUBLANG_PORTUGUESE                
, "Portuguese") 
2464    LNG(wxLANGUAGE_PORTUGUESE_BRAZILIAN
,       "pt_BR", LANG_PORTUGUESE
, SUBLANG_PORTUGUESE_BRAZILIAN      
, "Portuguese (Brazilian)") 
2465    LNG(wxLANGUAGE_PUNJABI
,                    "pa"   , LANG_PUNJABI   
, SUBLANG_DEFAULT                   
, "Punjabi") 
2466    LNG(wxLANGUAGE_QUECHUA
,                    "qu"   , 0              , 0                                 , "Quechua") 
2467    LNG(wxLANGUAGE_RHAETO_ROMANCE
,             "rm"   , 0              , 0                                 , "Rhaeto-Romance") 
2468    LNG(wxLANGUAGE_ROMANIAN
,                   "ro_RO", LANG_ROMANIAN  
, SUBLANG_DEFAULT                   
, "Romanian") 
2469    LNG(wxLANGUAGE_RUSSIAN
,                    "ru_RU", LANG_RUSSIAN   
, SUBLANG_DEFAULT                   
, "Russian") 
2470    LNG(wxLANGUAGE_RUSSIAN_UKRAINE
,            "ru_UA", 0              , 0                                 , "Russian (Ukraine)") 
2471    LNG(wxLANGUAGE_SAMOAN
,                     "sm"   , 0              , 0                                 , "Samoan") 
2472    LNG(wxLANGUAGE_SANGHO
,                     "sg"   , 0              , 0                                 , "Sangho") 
2473    LNG(wxLANGUAGE_SANSKRIT
,                   "sa"   , LANG_SANSKRIT  
, SUBLANG_DEFAULT                   
, "Sanskrit") 
2474    LNG(wxLANGUAGE_SCOTS_GAELIC
,               "gd"   , 0              , 0                                 , "Scots Gaelic") 
2475    LNG(wxLANGUAGE_SERBIAN
,                    "sr_YU", LANG_SERBIAN   
, SUBLANG_DEFAULT                   
, "Serbian") 
2476    LNG(wxLANGUAGE_SERBIAN_CYRILLIC
,           "sr_YU", LANG_SERBIAN   
, SUBLANG_SERBIAN_CYRILLIC          
, "Serbian (Cyrillic)") 
2477    LNG(wxLANGUAGE_SERBIAN_LATIN
,              "sr_YU", LANG_SERBIAN   
, SUBLANG_SERBIAN_LATIN             
, "Serbian (Latin)") 
2478    LNG(wxLANGUAGE_SERBO_CROATIAN
,             "sh"   , 0              , 0                                 , "Serbo-Croatian") 
2479    LNG(wxLANGUAGE_SESOTHO
,                    "st"   , 0              , 0                                 , "Sesotho") 
2480    LNG(wxLANGUAGE_SETSWANA
,                   "tn"   , 0              , 0                                 , "Setswana") 
2481    LNG(wxLANGUAGE_SHONA
,                      "sn"   , 0              , 0                                 , "Shona") 
2482    LNG(wxLANGUAGE_SINDHI
,                     "sd"   , LANG_SINDHI    
, SUBLANG_DEFAULT                   
, "Sindhi") 
2483    LNG(wxLANGUAGE_SINHALESE
,                  "si"   , 0              , 0                                 , "Sinhalese") 
2484    LNG(wxLANGUAGE_SISWATI
,                    "ss"   , 0              , 0                                 , "Siswati") 
2485    LNG(wxLANGUAGE_SLOVAK
,                     "sk_SK", LANG_SLOVAK    
, SUBLANG_DEFAULT                   
, "Slovak") 
2486    LNG(wxLANGUAGE_SLOVENIAN
,                  "sl_SI", LANG_SLOVENIAN 
, SUBLANG_DEFAULT                   
, "Slovenian") 
2487    LNG(wxLANGUAGE_SOMALI
,                     "so"   , 0              , 0                                 , "Somali") 
2488    LNG(wxLANGUAGE_SPANISH
,                    "es_ES", LANG_SPANISH   
, SUBLANG_SPANISH                   
, "Spanish") 
2489    LNG(wxLANGUAGE_SPANISH_ARGENTINA
,          "es_AR", LANG_SPANISH   
, SUBLANG_SPANISH_ARGENTINA         
, "Spanish (Argentina)") 
2490    LNG(wxLANGUAGE_SPANISH_BOLIVIA
,            "es_BO", LANG_SPANISH   
, SUBLANG_SPANISH_BOLIVIA           
, "Spanish (Bolivia)") 
2491    LNG(wxLANGUAGE_SPANISH_CHILE
,              "es_CL", LANG_SPANISH   
, SUBLANG_SPANISH_CHILE             
, "Spanish (Chile)") 
2492    LNG(wxLANGUAGE_SPANISH_COLOMBIA
,           "es_CO", LANG_SPANISH   
, SUBLANG_SPANISH_COLOMBIA          
, "Spanish (Colombia)") 
2493    LNG(wxLANGUAGE_SPANISH_COSTA_RICA
,         "es_CR", LANG_SPANISH   
, SUBLANG_SPANISH_COSTA_RICA        
, "Spanish (Costa Rica)") 
2494    LNG(wxLANGUAGE_SPANISH_DOMINICAN_REPUBLIC
, "es_DO", LANG_SPANISH   
, SUBLANG_SPANISH_DOMINICAN_REPUBLIC
, "Spanish (Dominican republic)") 
2495    LNG(wxLANGUAGE_SPANISH_ECUADOR
,            "es_EC", LANG_SPANISH   
, SUBLANG_SPANISH_ECUADOR           
, "Spanish (Ecuador)") 
2496    LNG(wxLANGUAGE_SPANISH_EL_SALVADOR
,        "es_SV", LANG_SPANISH   
, SUBLANG_SPANISH_EL_SALVADOR       
, "Spanish (El Salvador)") 
2497    LNG(wxLANGUAGE_SPANISH_GUATEMALA
,          "es_GT", LANG_SPANISH   
, SUBLANG_SPANISH_GUATEMALA         
, "Spanish (Guatemala)") 
2498    LNG(wxLANGUAGE_SPANISH_HONDURAS
,           "es_HN", LANG_SPANISH   
, SUBLANG_SPANISH_HONDURAS          
, "Spanish (Honduras)") 
2499    LNG(wxLANGUAGE_SPANISH_MEXICAN
,            "es_MX", LANG_SPANISH   
, SUBLANG_SPANISH_MEXICAN           
, "Spanish (Mexican)") 
2500    LNG(wxLANGUAGE_SPANISH_MODERN
,             "es_ES", LANG_SPANISH   
, SUBLANG_SPANISH_MODERN            
, "Spanish (Modern)") 
2501    LNG(wxLANGUAGE_SPANISH_NICARAGUA
,          "es_NI", LANG_SPANISH   
, SUBLANG_SPANISH_NICARAGUA         
, "Spanish (Nicaragua)") 
2502    LNG(wxLANGUAGE_SPANISH_PANAMA
,             "es_PA", LANG_SPANISH   
, SUBLANG_SPANISH_PANAMA            
, "Spanish (Panama)") 
2503    LNG(wxLANGUAGE_SPANISH_PARAGUAY
,           "es_PY", LANG_SPANISH   
, SUBLANG_SPANISH_PARAGUAY          
, "Spanish (Paraguay)") 
2504    LNG(wxLANGUAGE_SPANISH_PERU
,               "es_PE", LANG_SPANISH   
, SUBLANG_SPANISH_PERU              
, "Spanish (Peru)") 
2505    LNG(wxLANGUAGE_SPANISH_PUERTO_RICO
,        "es_PR", LANG_SPANISH   
, SUBLANG_SPANISH_PUERTO_RICO       
, "Spanish (Puerto Rico)") 
2506    LNG(wxLANGUAGE_SPANISH_URUGUAY
,            "es_UY", LANG_SPANISH   
, SUBLANG_SPANISH_URUGUAY           
, "Spanish (Uruguay)") 
2507    LNG(wxLANGUAGE_SPANISH_US
,                 "es_US", 0              , 0                                 , "Spanish (U.S.)") 
2508    LNG(wxLANGUAGE_SPANISH_VENEZUELA
,          "es_VE", LANG_SPANISH   
, SUBLANG_SPANISH_VENEZUELA         
, "Spanish (Venezuela)") 
2509    LNG(wxLANGUAGE_SUNDANESE
,                  "su"   , 0              , 0                                 , "Sundanese") 
2510    LNG(wxLANGUAGE_SWAHILI
,                    "sw_KE", LANG_SWAHILI   
, SUBLANG_DEFAULT                   
, "Swahili") 
2511    LNG(wxLANGUAGE_SWEDISH
,                    "sv_SE", LANG_SWEDISH   
, SUBLANG_SWEDISH                   
, "Swedish") 
2512    LNG(wxLANGUAGE_SWEDISH_FINLAND
,            "sv_FI", LANG_SWEDISH   
, SUBLANG_SWEDISH_FINLAND           
, "Swedish (Finland)") 
2513    LNG(wxLANGUAGE_TAGALOG
,                    "tl"   , 0              , 0                                 , "Tagalog") 
2514    LNG(wxLANGUAGE_TAJIK
,                      "tg"   , 0              , 0                                 , "Tajik") 
2515    LNG(wxLANGUAGE_TAMIL
,                      "ta"   , LANG_TAMIL     
, SUBLANG_DEFAULT                   
, "Tamil") 
2516    LNG(wxLANGUAGE_TATAR
,                      "tt"   , LANG_TATAR     
, SUBLANG_DEFAULT                   
, "Tatar") 
2517    LNG(wxLANGUAGE_TELUGU
,                     "te"   , LANG_TELUGU    
, SUBLANG_DEFAULT                   
, "Telugu") 
2518    LNG(wxLANGUAGE_THAI
,                       "th_TH", LANG_THAI      
, SUBLANG_DEFAULT                   
, "Thai") 
2519    LNG(wxLANGUAGE_TIBETAN
,                    "bo"   , 0              , 0                                 , "Tibetan") 
2520    LNG(wxLANGUAGE_TIGRINYA
,                   "ti"   , 0              , 0                                 , "Tigrinya") 
2521    LNG(wxLANGUAGE_TONGA
,                      "to"   , 0              , 0                                 , "Tonga") 
2522    LNG(wxLANGUAGE_TSONGA
,                     "ts"   , 0              , 0                                 , "Tsonga") 
2523    LNG(wxLANGUAGE_TURKISH
,                    "tr_TR", LANG_TURKISH   
, SUBLANG_DEFAULT                   
, "Turkish") 
2524    LNG(wxLANGUAGE_TURKMEN
,                    "tk"   , 0              , 0                                 , "Turkmen") 
2525    LNG(wxLANGUAGE_TWI
,                        "tw"   , 0              , 0                                 , "Twi") 
2526    LNG(wxLANGUAGE_UIGHUR
,                     "ug"   , 0              , 0                                 , "Uighur") 
2527    LNG(wxLANGUAGE_UKRAINIAN
,                  "uk_UA", LANG_UKRAINIAN 
, SUBLANG_DEFAULT                   
, "Ukrainian") 
2528    LNG(wxLANGUAGE_URDU
,                       "ur"   , LANG_URDU      
, SUBLANG_DEFAULT                   
, "Urdu") 
2529    LNG(wxLANGUAGE_URDU_INDIA
,                 "ur_IN", LANG_URDU      
, SUBLANG_URDU_INDIA                
, "Urdu (India)") 
2530    LNG(wxLANGUAGE_URDU_PAKISTAN
,              "ur_PK", LANG_URDU      
, SUBLANG_URDU_PAKISTAN             
, "Urdu (Pakistan)") 
2531    LNG(wxLANGUAGE_UZBEK
,                      "uz"   , LANG_UZBEK     
, SUBLANG_DEFAULT                   
, "Uzbek") 
2532    LNG(wxLANGUAGE_UZBEK_CYRILLIC
,             "uz"   , LANG_UZBEK     
, SUBLANG_UZBEK_CYRILLIC            
, "Uzbek (Cyrillic)") 
2533    LNG(wxLANGUAGE_UZBEK_LATIN
,                "uz"   , LANG_UZBEK     
, SUBLANG_UZBEK_LATIN               
, "Uzbek (Latin)") 
2534    LNG(wxLANGUAGE_VIETNAMESE
,                 "vi_VN", LANG_VIETNAMESE
, SUBLANG_DEFAULT                   
, "Vietnamese") 
2535    LNG(wxLANGUAGE_VOLAPUK
,                    "vo"   , 0              , 0                                 , "Volapuk") 
2536    LNG(wxLANGUAGE_WELSH
,                      "cy"   , 0              , 0                                 , "Welsh") 
2537    LNG(wxLANGUAGE_WOLOF
,                      "wo"   , 0              , 0                                 , "Wolof") 
2538    LNG(wxLANGUAGE_XHOSA
,                      "xh"   , 0              , 0                                 , "Xhosa") 
2539    LNG(wxLANGUAGE_YIDDISH
,                    "yi"   , 0              , 0                                 , "Yiddish") 
2540    LNG(wxLANGUAGE_YORUBA
,                     "yo"   , 0              , 0                                 , "Yoruba") 
2541    LNG(wxLANGUAGE_ZHUANG
,                     "za"   , 0              , 0                                 , "Zhuang") 
2542    LNG(wxLANGUAGE_ZULU
,                       "zu"   , 0              , 0                                 , "Zulu") 
2547 // --- --- --- generated code ends here --- --- --- 
2549 #endif // wxUSE_INTL