Blame gnulib-tests/localename.c

Packit 709fb3
/* Determine name of the currently selected locale.
Packit 709fb3
   Copyright (C) 1995-2017 Free Software Foundation, Inc.
Packit 709fb3
Packit 709fb3
   This program is free software: you can redistribute it and/or modify
Packit 709fb3
   it under the terms of the GNU General Public License as published by
Packit 709fb3
   the Free Software Foundation; either version 3 of the License, or
Packit 709fb3
   (at your option) any later version.
Packit 709fb3
Packit 709fb3
   This program is distributed in the hope that it will be useful,
Packit 709fb3
   but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 709fb3
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit 709fb3
   GNU General Public License for more details.
Packit 709fb3
Packit 709fb3
   You should have received a copy of the GNU General Public License
Packit 709fb3
   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
Packit 709fb3
Packit 709fb3
/* Written by Ulrich Drepper <drepper@gnu.org>, 1995.  */
Packit 709fb3
/* Native Windows code written by Tor Lillqvist <tml@iki.fi>.  */
Packit 709fb3
/* Mac OS X code written by Bruno Haible <bruno@clisp.org>.  */
Packit 709fb3
Packit 709fb3
#include <config.h>
Packit 709fb3
Packit 709fb3
/* Specification.  */
Packit 709fb3
#ifdef IN_LIBINTL
Packit 709fb3
# include "gettextP.h"
Packit 709fb3
#else
Packit 709fb3
# include "localename.h"
Packit 709fb3
#endif
Packit 709fb3
Packit 709fb3
#include <limits.h>
Packit 709fb3
#include <stddef.h>
Packit 709fb3
#include <stdlib.h>
Packit 709fb3
#include <locale.h>
Packit 709fb3
#include <string.h>
Packit 709fb3
Packit 709fb3
#include "flexmember.h"
Packit 709fb3
Packit 709fb3
#if HAVE_USELOCALE
Packit 709fb3
/* Mac OS X 10.5 defines the locale_t type in <xlocale.h>.  */
Packit 709fb3
# if defined __APPLE__ && defined __MACH__
Packit 709fb3
#  include <xlocale.h>
Packit 709fb3
# endif
Packit 709fb3
# if (__GLIBC__ >= 2 && !defined __UCLIBC__) || defined __CYGWIN__
Packit 709fb3
#  include <langinfo.h>
Packit 709fb3
# endif
Packit 709fb3
# if !defined IN_LIBINTL
Packit 709fb3
#  include "glthread/lock.h"
Packit 709fb3
# endif
Packit 709fb3
# if defined __sun && HAVE_GETLOCALENAME_L
Packit 709fb3
/* Solaris >= 12.  */
Packit 709fb3
extern char * getlocalename_l(int, locale_t);
Packit 709fb3
# endif
Packit 709fb3
#endif
Packit 709fb3
Packit 709fb3
#if HAVE_CFLOCALECOPYCURRENT || HAVE_CFPREFERENCESCOPYAPPVALUE
Packit 709fb3
# include <CoreFoundation/CFString.h>
Packit 709fb3
# if HAVE_CFLOCALECOPYCURRENT
Packit 709fb3
#  include <CoreFoundation/CFLocale.h>
Packit 709fb3
# elif HAVE_CFPREFERENCESCOPYAPPVALUE
Packit 709fb3
#  include <CoreFoundation/CFPreferences.h>
Packit 709fb3
# endif
Packit 709fb3
#endif
Packit 709fb3
Packit 709fb3
#if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__
Packit 709fb3
# define WINDOWS_NATIVE
Packit 709fb3
# if !defined IN_LIBINTL
Packit 709fb3
#  include "glthread/lock.h"
Packit 709fb3
# endif
Packit 709fb3
#endif
Packit 709fb3
Packit 709fb3
#if defined WINDOWS_NATIVE || defined __CYGWIN__ /* Native Windows or Cygwin */
Packit 709fb3
# define WIN32_LEAN_AND_MEAN
Packit 709fb3
# include <windows.h>
Packit 709fb3
# include <winnls.h>
Packit 709fb3
/* List of language codes, sorted by value:
Packit 709fb3
   0x01 LANG_ARABIC
Packit 709fb3
   0x02 LANG_BULGARIAN
Packit 709fb3
   0x03 LANG_CATALAN
Packit 709fb3
   0x04 LANG_CHINESE
Packit 709fb3
   0x05 LANG_CZECH
Packit 709fb3
   0x06 LANG_DANISH
Packit 709fb3
   0x07 LANG_GERMAN
Packit 709fb3
   0x08 LANG_GREEK
Packit 709fb3
   0x09 LANG_ENGLISH
Packit 709fb3
   0x0a LANG_SPANISH
Packit 709fb3
   0x0b LANG_FINNISH
Packit 709fb3
   0x0c LANG_FRENCH
Packit 709fb3
   0x0d LANG_HEBREW
Packit 709fb3
   0x0e LANG_HUNGARIAN
Packit 709fb3
   0x0f LANG_ICELANDIC
Packit 709fb3
   0x10 LANG_ITALIAN
Packit 709fb3
   0x11 LANG_JAPANESE
Packit 709fb3
   0x12 LANG_KOREAN
Packit 709fb3
   0x13 LANG_DUTCH
Packit 709fb3
   0x14 LANG_NORWEGIAN
Packit 709fb3
   0x15 LANG_POLISH
Packit 709fb3
   0x16 LANG_PORTUGUESE
Packit 709fb3
   0x17 LANG_ROMANSH
Packit 709fb3
   0x18 LANG_ROMANIAN
Packit 709fb3
   0x19 LANG_RUSSIAN
Packit 709fb3
   0x1a LANG_CROATIAN == LANG_SERBIAN
Packit 709fb3
   0x1b LANG_SLOVAK
Packit 709fb3
   0x1c LANG_ALBANIAN
Packit 709fb3
   0x1d LANG_SWEDISH
Packit 709fb3
   0x1e LANG_THAI
Packit 709fb3
   0x1f LANG_TURKISH
Packit 709fb3
   0x20 LANG_URDU
Packit 709fb3
   0x21 LANG_INDONESIAN
Packit 709fb3
   0x22 LANG_UKRAINIAN
Packit 709fb3
   0x23 LANG_BELARUSIAN
Packit 709fb3
   0x24 LANG_SLOVENIAN
Packit 709fb3
   0x25 LANG_ESTONIAN
Packit 709fb3
   0x26 LANG_LATVIAN
Packit 709fb3
   0x27 LANG_LITHUANIAN
Packit 709fb3
   0x28 LANG_TAJIK
Packit 709fb3
   0x29 LANG_FARSI
Packit 709fb3
   0x2a LANG_VIETNAMESE
Packit 709fb3
   0x2b LANG_ARMENIAN
Packit 709fb3
   0x2c LANG_AZERI
Packit 709fb3
   0x2d LANG_BASQUE
Packit 709fb3
   0x2e LANG_SORBIAN
Packit 709fb3
   0x2f LANG_MACEDONIAN
Packit 709fb3
   0x30 LANG_SUTU
Packit 709fb3
   0x31 LANG_TSONGA
Packit 709fb3
   0x32 LANG_TSWANA
Packit 709fb3
   0x33 LANG_VENDA
Packit 709fb3
   0x34 LANG_XHOSA
Packit 709fb3
   0x35 LANG_ZULU
Packit 709fb3
   0x36 LANG_AFRIKAANS
Packit 709fb3
   0x37 LANG_GEORGIAN
Packit 709fb3
   0x38 LANG_FAEROESE
Packit 709fb3
   0x39 LANG_HINDI
Packit 709fb3
   0x3a LANG_MALTESE
Packit 709fb3
   0x3b LANG_SAMI
Packit 709fb3
   0x3c LANG_GAELIC
Packit 709fb3
   0x3d LANG_YIDDISH
Packit 709fb3
   0x3e LANG_MALAY
Packit 709fb3
   0x3f LANG_KAZAK
Packit 709fb3
   0x40 LANG_KYRGYZ
Packit 709fb3
   0x41 LANG_SWAHILI
Packit 709fb3
   0x42 LANG_TURKMEN
Packit 709fb3
   0x43 LANG_UZBEK
Packit 709fb3
   0x44 LANG_TATAR
Packit 709fb3
   0x45 LANG_BENGALI
Packit 709fb3
   0x46 LANG_PUNJABI
Packit 709fb3
   0x47 LANG_GUJARATI
Packit 709fb3
   0x48 LANG_ORIYA
Packit 709fb3
   0x49 LANG_TAMIL
Packit 709fb3
   0x4a LANG_TELUGU
Packit 709fb3
   0x4b LANG_KANNADA
Packit 709fb3
   0x4c LANG_MALAYALAM
Packit 709fb3
   0x4d LANG_ASSAMESE
Packit 709fb3
   0x4e LANG_MARATHI
Packit 709fb3
   0x4f LANG_SANSKRIT
Packit 709fb3
   0x50 LANG_MONGOLIAN
Packit 709fb3
   0x51 LANG_TIBETAN
Packit 709fb3
   0x52 LANG_WELSH
Packit 709fb3
   0x53 LANG_CAMBODIAN
Packit 709fb3
   0x54 LANG_LAO
Packit 709fb3
   0x55 LANG_BURMESE
Packit 709fb3
   0x56 LANG_GALICIAN
Packit 709fb3
   0x57 LANG_KONKANI
Packit 709fb3
   0x58 LANG_MANIPURI
Packit 709fb3
   0x59 LANG_SINDHI
Packit 709fb3
   0x5a LANG_SYRIAC
Packit 709fb3
   0x5b LANG_SINHALESE
Packit 709fb3
   0x5c LANG_CHEROKEE
Packit 709fb3
   0x5d LANG_INUKTITUT
Packit 709fb3
   0x5e LANG_AMHARIC
Packit 709fb3
   0x5f LANG_TAMAZIGHT
Packit 709fb3
   0x60 LANG_KASHMIRI
Packit 709fb3
   0x61 LANG_NEPALI
Packit 709fb3
   0x62 LANG_FRISIAN
Packit 709fb3
   0x63 LANG_PASHTO
Packit 709fb3
   0x64 LANG_TAGALOG
Packit 709fb3
   0x65 LANG_DIVEHI
Packit 709fb3
   0x66 LANG_EDO
Packit 709fb3
   0x67 LANG_FULFULDE
Packit 709fb3
   0x68 LANG_HAUSA
Packit 709fb3
   0x69 LANG_IBIBIO
Packit 709fb3
   0x6a LANG_YORUBA
Packit 709fb3
   0x6d LANG_BASHKIR
Packit 709fb3
   0x6e LANG_LUXEMBOURGISH
Packit 709fb3
   0x6f LANG_GREENLANDIC
Packit 709fb3
   0x70 LANG_IGBO
Packit 709fb3
   0x71 LANG_KANURI
Packit 709fb3
   0x72 LANG_OROMO
Packit 709fb3
   0x73 LANG_TIGRINYA
Packit 709fb3
   0x74 LANG_GUARANI
Packit 709fb3
   0x75 LANG_HAWAIIAN
Packit 709fb3
   0x76 LANG_LATIN
Packit 709fb3
   0x77 LANG_SOMALI
Packit 709fb3
   0x78 LANG_YI
Packit 709fb3
   0x79 LANG_PAPIAMENTU
Packit 709fb3
   0x7a LANG_MAPUDUNGUN
Packit 709fb3
   0x7c LANG_MOHAWK
Packit 709fb3
   0x7e LANG_BRETON
Packit 709fb3
   0x82 LANG_OCCITAN
Packit 709fb3
   0x83 LANG_CORSICAN
Packit 709fb3
   0x84 LANG_ALSATIAN
Packit 709fb3
   0x85 LANG_YAKUT
Packit 709fb3
   0x86 LANG_KICHE
Packit 709fb3
   0x87 LANG_KINYARWANDA
Packit 709fb3
   0x88 LANG_WOLOF
Packit 709fb3
   0x8c LANG_DARI
Packit 709fb3
   0x91 LANG_SCOTTISH_GAELIC
Packit 709fb3
*/
Packit 709fb3
/* Mingw headers don't have latest language and sublanguage codes.  */
Packit 709fb3
# ifndef LANG_AFRIKAANS
Packit 709fb3
# define LANG_AFRIKAANS 0x36
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_ALBANIAN
Packit 709fb3
# define LANG_ALBANIAN 0x1c
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_ALSATIAN
Packit 709fb3
# define LANG_ALSATIAN 0x84
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_AMHARIC
Packit 709fb3
# define LANG_AMHARIC 0x5e
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_ARABIC
Packit 709fb3
# define LANG_ARABIC 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_ARMENIAN
Packit 709fb3
# define LANG_ARMENIAN 0x2b
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_ASSAMESE
Packit 709fb3
# define LANG_ASSAMESE 0x4d
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_AZERI
Packit 709fb3
# define LANG_AZERI 0x2c
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_BASHKIR
Packit 709fb3
# define LANG_BASHKIR 0x6d
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_BASQUE
Packit 709fb3
# define LANG_BASQUE 0x2d
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_BELARUSIAN
Packit 709fb3
# define LANG_BELARUSIAN 0x23
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_BENGALI
Packit 709fb3
# define LANG_BENGALI 0x45
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_BRETON
Packit 709fb3
# define LANG_BRETON 0x7e
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_BURMESE
Packit 709fb3
# define LANG_BURMESE 0x55
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_CAMBODIAN
Packit 709fb3
# define LANG_CAMBODIAN 0x53
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_CATALAN
Packit 709fb3
# define LANG_CATALAN 0x03
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_CHEROKEE
Packit 709fb3
# define LANG_CHEROKEE 0x5c
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_CORSICAN
Packit 709fb3
# define LANG_CORSICAN 0x83
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_DARI
Packit 709fb3
# define LANG_DARI 0x8c
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_DIVEHI
Packit 709fb3
# define LANG_DIVEHI 0x65
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_EDO
Packit 709fb3
# define LANG_EDO 0x66
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_ESTONIAN
Packit 709fb3
# define LANG_ESTONIAN 0x25
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_FAEROESE
Packit 709fb3
# define LANG_FAEROESE 0x38
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_FARSI
Packit 709fb3
# define LANG_FARSI 0x29
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_FRISIAN
Packit 709fb3
# define LANG_FRISIAN 0x62
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_FULFULDE
Packit 709fb3
# define LANG_FULFULDE 0x67
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_GAELIC
Packit 709fb3
# define LANG_GAELIC 0x3c
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_GALICIAN
Packit 709fb3
# define LANG_GALICIAN 0x56
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_GEORGIAN
Packit 709fb3
# define LANG_GEORGIAN 0x37
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_GREENLANDIC
Packit 709fb3
# define LANG_GREENLANDIC 0x6f
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_GUARANI
Packit 709fb3
# define LANG_GUARANI 0x74
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_GUJARATI
Packit 709fb3
# define LANG_GUJARATI 0x47
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_HAUSA
Packit 709fb3
# define LANG_HAUSA 0x68
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_HAWAIIAN
Packit 709fb3
# define LANG_HAWAIIAN 0x75
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_HEBREW
Packit 709fb3
# define LANG_HEBREW 0x0d
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_HINDI
Packit 709fb3
# define LANG_HINDI 0x39
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_IBIBIO
Packit 709fb3
# define LANG_IBIBIO 0x69
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_IGBO
Packit 709fb3
# define LANG_IGBO 0x70
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_INDONESIAN
Packit 709fb3
# define LANG_INDONESIAN 0x21
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_INUKTITUT
Packit 709fb3
# define LANG_INUKTITUT 0x5d
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_KANNADA
Packit 709fb3
# define LANG_KANNADA 0x4b
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_KANURI
Packit 709fb3
# define LANG_KANURI 0x71
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_KASHMIRI
Packit 709fb3
# define LANG_KASHMIRI 0x60
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_KAZAK
Packit 709fb3
# define LANG_KAZAK 0x3f
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_KICHE
Packit 709fb3
# define LANG_KICHE 0x86
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_KINYARWANDA
Packit 709fb3
# define LANG_KINYARWANDA 0x87
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_KONKANI
Packit 709fb3
# define LANG_KONKANI 0x57
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_KYRGYZ
Packit 709fb3
# define LANG_KYRGYZ 0x40
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_LAO
Packit 709fb3
# define LANG_LAO 0x54
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_LATIN
Packit 709fb3
# define LANG_LATIN 0x76
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_LATVIAN
Packit 709fb3
# define LANG_LATVIAN 0x26
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_LITHUANIAN
Packit 709fb3
# define LANG_LITHUANIAN 0x27
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_LUXEMBOURGISH
Packit 709fb3
# define LANG_LUXEMBOURGISH 0x6e
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_MACEDONIAN
Packit 709fb3
# define LANG_MACEDONIAN 0x2f
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_MALAY
Packit 709fb3
# define LANG_MALAY 0x3e
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_MALAYALAM
Packit 709fb3
# define LANG_MALAYALAM 0x4c
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_MALTESE
Packit 709fb3
# define LANG_MALTESE 0x3a
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_MANIPURI
Packit 709fb3
# define LANG_MANIPURI 0x58
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_MAORI
Packit 709fb3
# define LANG_MAORI 0x81
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_MAPUDUNGUN
Packit 709fb3
# define LANG_MAPUDUNGUN 0x7a
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_MARATHI
Packit 709fb3
# define LANG_MARATHI 0x4e
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_MOHAWK
Packit 709fb3
# define LANG_MOHAWK 0x7c
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_MONGOLIAN
Packit 709fb3
# define LANG_MONGOLIAN 0x50
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_NEPALI
Packit 709fb3
# define LANG_NEPALI 0x61
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_OCCITAN
Packit 709fb3
# define LANG_OCCITAN 0x82
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_ORIYA
Packit 709fb3
# define LANG_ORIYA 0x48
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_OROMO
Packit 709fb3
# define LANG_OROMO 0x72
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_PAPIAMENTU
Packit 709fb3
# define LANG_PAPIAMENTU 0x79
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_PASHTO
Packit 709fb3
# define LANG_PASHTO 0x63
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_PUNJABI
Packit 709fb3
# define LANG_PUNJABI 0x46
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_QUECHUA
Packit 709fb3
# define LANG_QUECHUA 0x6b
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_ROMANSH
Packit 709fb3
# define LANG_ROMANSH 0x17
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_SAMI
Packit 709fb3
# define LANG_SAMI 0x3b
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_SANSKRIT
Packit 709fb3
# define LANG_SANSKRIT 0x4f
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_SCOTTISH_GAELIC
Packit 709fb3
# define LANG_SCOTTISH_GAELIC 0x91
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_SERBIAN
Packit 709fb3
# define LANG_SERBIAN 0x1a
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_SINDHI
Packit 709fb3
# define LANG_SINDHI 0x59
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_SINHALESE
Packit 709fb3
# define LANG_SINHALESE 0x5b
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_SLOVAK
Packit 709fb3
# define LANG_SLOVAK 0x1b
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_SOMALI
Packit 709fb3
# define LANG_SOMALI 0x77
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_SORBIAN
Packit 709fb3
# define LANG_SORBIAN 0x2e
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_SOTHO
Packit 709fb3
# define LANG_SOTHO 0x6c
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_SUTU
Packit 709fb3
# define LANG_SUTU 0x30
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_SWAHILI
Packit 709fb3
# define LANG_SWAHILI 0x41
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_SYRIAC
Packit 709fb3
# define LANG_SYRIAC 0x5a
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_TAGALOG
Packit 709fb3
# define LANG_TAGALOG 0x64
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_TAJIK
Packit 709fb3
# define LANG_TAJIK 0x28
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_TAMAZIGHT
Packit 709fb3
# define LANG_TAMAZIGHT 0x5f
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_TAMIL
Packit 709fb3
# define LANG_TAMIL 0x49
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_TATAR
Packit 709fb3
# define LANG_TATAR 0x44
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_TELUGU
Packit 709fb3
# define LANG_TELUGU 0x4a
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_THAI
Packit 709fb3
# define LANG_THAI 0x1e
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_TIBETAN
Packit 709fb3
# define LANG_TIBETAN 0x51
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_TIGRINYA
Packit 709fb3
# define LANG_TIGRINYA 0x73
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_TSONGA
Packit 709fb3
# define LANG_TSONGA 0x31
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_TSWANA
Packit 709fb3
# define LANG_TSWANA 0x32
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_TURKMEN
Packit 709fb3
# define LANG_TURKMEN 0x42
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_UIGHUR
Packit 709fb3
# define LANG_UIGHUR 0x80
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_UKRAINIAN
Packit 709fb3
# define LANG_UKRAINIAN 0x22
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_URDU
Packit 709fb3
# define LANG_URDU 0x20
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_UZBEK
Packit 709fb3
# define LANG_UZBEK 0x43
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_VENDA
Packit 709fb3
# define LANG_VENDA 0x33
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_VIETNAMESE
Packit 709fb3
# define LANG_VIETNAMESE 0x2a
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_WELSH
Packit 709fb3
# define LANG_WELSH 0x52
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_WOLOF
Packit 709fb3
# define LANG_WOLOF 0x88
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_XHOSA
Packit 709fb3
# define LANG_XHOSA 0x34
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_YAKUT
Packit 709fb3
# define LANG_YAKUT 0x85
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_YI
Packit 709fb3
# define LANG_YI 0x78
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_YIDDISH
Packit 709fb3
# define LANG_YIDDISH 0x3d
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_YORUBA
Packit 709fb3
# define LANG_YORUBA 0x6a
Packit 709fb3
# endif
Packit 709fb3
# ifndef LANG_ZULU
Packit 709fb3
# define LANG_ZULU 0x35
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_AFRIKAANS_SOUTH_AFRICA
Packit 709fb3
# define SUBLANG_AFRIKAANS_SOUTH_AFRICA 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_ALBANIAN_ALBANIA
Packit 709fb3
# define SUBLANG_ALBANIAN_ALBANIA 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_ALSATIAN_FRANCE
Packit 709fb3
# define SUBLANG_ALSATIAN_FRANCE 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_AMHARIC_ETHIOPIA
Packit 709fb3
# define SUBLANG_AMHARIC_ETHIOPIA 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_ARABIC_SAUDI_ARABIA
Packit 709fb3
# define SUBLANG_ARABIC_SAUDI_ARABIA 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_ARABIC_IRAQ
Packit 709fb3
# define SUBLANG_ARABIC_IRAQ 0x02
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_ARABIC_EGYPT
Packit 709fb3
# define SUBLANG_ARABIC_EGYPT 0x03
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_ARABIC_LIBYA
Packit 709fb3
# define SUBLANG_ARABIC_LIBYA 0x04
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_ARABIC_ALGERIA
Packit 709fb3
# define SUBLANG_ARABIC_ALGERIA 0x05
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_ARABIC_MOROCCO
Packit 709fb3
# define SUBLANG_ARABIC_MOROCCO 0x06
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_ARABIC_TUNISIA
Packit 709fb3
# define SUBLANG_ARABIC_TUNISIA 0x07
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_ARABIC_OMAN
Packit 709fb3
# define SUBLANG_ARABIC_OMAN 0x08
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_ARABIC_YEMEN
Packit 709fb3
# define SUBLANG_ARABIC_YEMEN 0x09
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_ARABIC_SYRIA
Packit 709fb3
# define SUBLANG_ARABIC_SYRIA 0x0a
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_ARABIC_JORDAN
Packit 709fb3
# define SUBLANG_ARABIC_JORDAN 0x0b
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_ARABIC_LEBANON
Packit 709fb3
# define SUBLANG_ARABIC_LEBANON 0x0c
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_ARABIC_KUWAIT
Packit 709fb3
# define SUBLANG_ARABIC_KUWAIT 0x0d
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_ARABIC_UAE
Packit 709fb3
# define SUBLANG_ARABIC_UAE 0x0e
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_ARABIC_BAHRAIN
Packit 709fb3
# define SUBLANG_ARABIC_BAHRAIN 0x0f
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_ARABIC_QATAR
Packit 709fb3
# define SUBLANG_ARABIC_QATAR 0x10
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_ARMENIAN_ARMENIA
Packit 709fb3
# define SUBLANG_ARMENIAN_ARMENIA 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_ASSAMESE_INDIA
Packit 709fb3
# define SUBLANG_ASSAMESE_INDIA 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_AZERI_LATIN
Packit 709fb3
# define SUBLANG_AZERI_LATIN 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_AZERI_CYRILLIC
Packit 709fb3
# define SUBLANG_AZERI_CYRILLIC 0x02
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_BASHKIR_RUSSIA
Packit 709fb3
# define SUBLANG_BASHKIR_RUSSIA 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_BASQUE_BASQUE
Packit 709fb3
# define SUBLANG_BASQUE_BASQUE 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_BELARUSIAN_BELARUS
Packit 709fb3
# define SUBLANG_BELARUSIAN_BELARUS 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_BENGALI_INDIA
Packit 709fb3
# define SUBLANG_BENGALI_INDIA 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_BENGALI_BANGLADESH
Packit 709fb3
# define SUBLANG_BENGALI_BANGLADESH 0x02
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_LATIN
Packit 709fb3
# define SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_LATIN 0x05
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_CYRILLIC
Packit 709fb3
# define SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_CYRILLIC 0x08
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_BRETON_FRANCE
Packit 709fb3
# define SUBLANG_BRETON_FRANCE 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_BULGARIAN_BULGARIA
Packit 709fb3
# define SUBLANG_BULGARIAN_BULGARIA 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_CAMBODIAN_CAMBODIA
Packit 709fb3
# define SUBLANG_CAMBODIAN_CAMBODIA 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_CATALAN_SPAIN
Packit 709fb3
# define SUBLANG_CATALAN_SPAIN 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_CORSICAN_FRANCE
Packit 709fb3
# define SUBLANG_CORSICAN_FRANCE 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_CROATIAN_CROATIA
Packit 709fb3
# define SUBLANG_CROATIAN_CROATIA 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_CROATIAN_BOSNIA_HERZEGOVINA_LATIN
Packit 709fb3
# define SUBLANG_CROATIAN_BOSNIA_HERZEGOVINA_LATIN 0x04
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_CHINESE_MACAU
Packit 709fb3
# define SUBLANG_CHINESE_MACAU 0x05
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_CZECH_CZECH_REPUBLIC
Packit 709fb3
# define SUBLANG_CZECH_CZECH_REPUBLIC 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_DANISH_DENMARK
Packit 709fb3
# define SUBLANG_DANISH_DENMARK 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_DARI_AFGHANISTAN
Packit 709fb3
# define SUBLANG_DARI_AFGHANISTAN 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_DIVEHI_MALDIVES
Packit 709fb3
# define SUBLANG_DIVEHI_MALDIVES 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_DUTCH_SURINAM
Packit 709fb3
# define SUBLANG_DUTCH_SURINAM 0x03
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_ENGLISH_SOUTH_AFRICA
Packit 709fb3
# define SUBLANG_ENGLISH_SOUTH_AFRICA 0x07
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_ENGLISH_JAMAICA
Packit 709fb3
# define SUBLANG_ENGLISH_JAMAICA 0x08
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_ENGLISH_CARIBBEAN
Packit 709fb3
# define SUBLANG_ENGLISH_CARIBBEAN 0x09
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_ENGLISH_BELIZE
Packit 709fb3
# define SUBLANG_ENGLISH_BELIZE 0x0a
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_ENGLISH_TRINIDAD
Packit 709fb3
# define SUBLANG_ENGLISH_TRINIDAD 0x0b
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_ENGLISH_ZIMBABWE
Packit 709fb3
# define SUBLANG_ENGLISH_ZIMBABWE 0x0c
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_ENGLISH_PHILIPPINES
Packit 709fb3
# define SUBLANG_ENGLISH_PHILIPPINES 0x0d
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_ENGLISH_INDONESIA
Packit 709fb3
# define SUBLANG_ENGLISH_INDONESIA 0x0e
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_ENGLISH_HONGKONG
Packit 709fb3
# define SUBLANG_ENGLISH_HONGKONG 0x0f
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_ENGLISH_INDIA
Packit 709fb3
# define SUBLANG_ENGLISH_INDIA 0x10
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_ENGLISH_MALAYSIA
Packit 709fb3
# define SUBLANG_ENGLISH_MALAYSIA 0x11
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_ENGLISH_SINGAPORE
Packit 709fb3
# define SUBLANG_ENGLISH_SINGAPORE 0x12
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_ESTONIAN_ESTONIA
Packit 709fb3
# define SUBLANG_ESTONIAN_ESTONIA 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_FAEROESE_FAROE_ISLANDS
Packit 709fb3
# define SUBLANG_FAEROESE_FAROE_ISLANDS 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_FARSI_IRAN
Packit 709fb3
# define SUBLANG_FARSI_IRAN 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_FINNISH_FINLAND
Packit 709fb3
# define SUBLANG_FINNISH_FINLAND 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_FRENCH_LUXEMBOURG
Packit 709fb3
# define SUBLANG_FRENCH_LUXEMBOURG 0x05
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_FRENCH_MONACO
Packit 709fb3
# define SUBLANG_FRENCH_MONACO 0x06
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_FRENCH_WESTINDIES
Packit 709fb3
# define SUBLANG_FRENCH_WESTINDIES 0x07
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_FRENCH_REUNION
Packit 709fb3
# define SUBLANG_FRENCH_REUNION 0x08
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_FRENCH_CONGO
Packit 709fb3
# define SUBLANG_FRENCH_CONGO 0x09
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_FRENCH_SENEGAL
Packit 709fb3
# define SUBLANG_FRENCH_SENEGAL 0x0a
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_FRENCH_CAMEROON
Packit 709fb3
# define SUBLANG_FRENCH_CAMEROON 0x0b
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_FRENCH_COTEDIVOIRE
Packit 709fb3
# define SUBLANG_FRENCH_COTEDIVOIRE 0x0c
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_FRENCH_MALI
Packit 709fb3
# define SUBLANG_FRENCH_MALI 0x0d
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_FRENCH_MOROCCO
Packit 709fb3
# define SUBLANG_FRENCH_MOROCCO 0x0e
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_FRENCH_HAITI
Packit 709fb3
# define SUBLANG_FRENCH_HAITI 0x0f
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_FRISIAN_NETHERLANDS
Packit 709fb3
# define SUBLANG_FRISIAN_NETHERLANDS 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_GALICIAN_SPAIN
Packit 709fb3
# define SUBLANG_GALICIAN_SPAIN 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_GEORGIAN_GEORGIA
Packit 709fb3
# define SUBLANG_GEORGIAN_GEORGIA 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_GERMAN_LUXEMBOURG
Packit 709fb3
# define SUBLANG_GERMAN_LUXEMBOURG 0x04
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_GERMAN_LIECHTENSTEIN
Packit 709fb3
# define SUBLANG_GERMAN_LIECHTENSTEIN 0x05
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_GREEK_GREECE
Packit 709fb3
# define SUBLANG_GREEK_GREECE 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_GREENLANDIC_GREENLAND
Packit 709fb3
# define SUBLANG_GREENLANDIC_GREENLAND 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_GUJARATI_INDIA
Packit 709fb3
# define SUBLANG_GUJARATI_INDIA 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_HAUSA_NIGERIA_LATIN
Packit 709fb3
# define SUBLANG_HAUSA_NIGERIA_LATIN 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_HEBREW_ISRAEL
Packit 709fb3
# define SUBLANG_HEBREW_ISRAEL 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_HINDI_INDIA
Packit 709fb3
# define SUBLANG_HINDI_INDIA 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_HUNGARIAN_HUNGARY
Packit 709fb3
# define SUBLANG_HUNGARIAN_HUNGARY 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_ICELANDIC_ICELAND
Packit 709fb3
# define SUBLANG_ICELANDIC_ICELAND 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_IGBO_NIGERIA
Packit 709fb3
# define SUBLANG_IGBO_NIGERIA 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_INDONESIAN_INDONESIA
Packit 709fb3
# define SUBLANG_INDONESIAN_INDONESIA 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_INUKTITUT_CANADA
Packit 709fb3
# define SUBLANG_INUKTITUT_CANADA 0x01
Packit 709fb3
# endif
Packit 709fb3
# undef SUBLANG_INUKTITUT_CANADA_LATIN
Packit 709fb3
# define SUBLANG_INUKTITUT_CANADA_LATIN 0x02
Packit 709fb3
# undef SUBLANG_IRISH_IRELAND
Packit 709fb3
# define SUBLANG_IRISH_IRELAND 0x02
Packit 709fb3
# ifndef SUBLANG_JAPANESE_JAPAN
Packit 709fb3
# define SUBLANG_JAPANESE_JAPAN 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_KANNADA_INDIA
Packit 709fb3
# define SUBLANG_KANNADA_INDIA 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_KASHMIRI_INDIA
Packit 709fb3
# define SUBLANG_KASHMIRI_INDIA 0x02
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_KAZAK_KAZAKHSTAN
Packit 709fb3
# define SUBLANG_KAZAK_KAZAKHSTAN 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_KICHE_GUATEMALA
Packit 709fb3
# define SUBLANG_KICHE_GUATEMALA 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_KINYARWANDA_RWANDA
Packit 709fb3
# define SUBLANG_KINYARWANDA_RWANDA 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_KONKANI_INDIA
Packit 709fb3
# define SUBLANG_KONKANI_INDIA 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_KYRGYZ_KYRGYZSTAN
Packit 709fb3
# define SUBLANG_KYRGYZ_KYRGYZSTAN 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_LAO_LAOS
Packit 709fb3
# define SUBLANG_LAO_LAOS 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_LATVIAN_LATVIA
Packit 709fb3
# define SUBLANG_LATVIAN_LATVIA 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_LITHUANIAN_LITHUANIA
Packit 709fb3
# define SUBLANG_LITHUANIAN_LITHUANIA 0x01
Packit 709fb3
# endif
Packit 709fb3
# undef SUBLANG_LOWER_SORBIAN_GERMANY
Packit 709fb3
# define SUBLANG_LOWER_SORBIAN_GERMANY 0x02
Packit 709fb3
# ifndef SUBLANG_LUXEMBOURGISH_LUXEMBOURG
Packit 709fb3
# define SUBLANG_LUXEMBOURGISH_LUXEMBOURG 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_MACEDONIAN_MACEDONIA
Packit 709fb3
# define SUBLANG_MACEDONIAN_MACEDONIA 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_MALAY_MALAYSIA
Packit 709fb3
# define SUBLANG_MALAY_MALAYSIA 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_MALAY_BRUNEI_DARUSSALAM
Packit 709fb3
# define SUBLANG_MALAY_BRUNEI_DARUSSALAM 0x02
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_MALAYALAM_INDIA
Packit 709fb3
# define SUBLANG_MALAYALAM_INDIA 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_MALTESE_MALTA
Packit 709fb3
# define SUBLANG_MALTESE_MALTA 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_MAORI_NEW_ZEALAND
Packit 709fb3
# define SUBLANG_MAORI_NEW_ZEALAND 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_MAPUDUNGUN_CHILE
Packit 709fb3
# define SUBLANG_MAPUDUNGUN_CHILE 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_MARATHI_INDIA
Packit 709fb3
# define SUBLANG_MARATHI_INDIA 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_MOHAWK_CANADA
Packit 709fb3
# define SUBLANG_MOHAWK_CANADA 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_MONGOLIAN_CYRILLIC_MONGOLIA
Packit 709fb3
# define SUBLANG_MONGOLIAN_CYRILLIC_MONGOLIA 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_MONGOLIAN_PRC
Packit 709fb3
# define SUBLANG_MONGOLIAN_PRC 0x02
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_NEPALI_NEPAL
Packit 709fb3
# define SUBLANG_NEPALI_NEPAL 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_NEPALI_INDIA
Packit 709fb3
# define SUBLANG_NEPALI_INDIA 0x02
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_OCCITAN_FRANCE
Packit 709fb3
# define SUBLANG_OCCITAN_FRANCE 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_ORIYA_INDIA
Packit 709fb3
# define SUBLANG_ORIYA_INDIA 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_PASHTO_AFGHANISTAN
Packit 709fb3
# define SUBLANG_PASHTO_AFGHANISTAN 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_POLISH_POLAND
Packit 709fb3
# define SUBLANG_POLISH_POLAND 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_PUNJABI_INDIA
Packit 709fb3
# define SUBLANG_PUNJABI_INDIA 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_PUNJABI_PAKISTAN
Packit 709fb3
# define SUBLANG_PUNJABI_PAKISTAN 0x02
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_QUECHUA_BOLIVIA
Packit 709fb3
# define SUBLANG_QUECHUA_BOLIVIA 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_QUECHUA_ECUADOR
Packit 709fb3
# define SUBLANG_QUECHUA_ECUADOR 0x02
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_QUECHUA_PERU
Packit 709fb3
# define SUBLANG_QUECHUA_PERU 0x03
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_ROMANIAN_ROMANIA
Packit 709fb3
# define SUBLANG_ROMANIAN_ROMANIA 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_ROMANIAN_MOLDOVA
Packit 709fb3
# define SUBLANG_ROMANIAN_MOLDOVA 0x02
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_ROMANSH_SWITZERLAND
Packit 709fb3
# define SUBLANG_ROMANSH_SWITZERLAND 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_RUSSIAN_RUSSIA
Packit 709fb3
# define SUBLANG_RUSSIAN_RUSSIA 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_RUSSIAN_MOLDAVIA
Packit 709fb3
# define SUBLANG_RUSSIAN_MOLDAVIA 0x02
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_SAMI_NORTHERN_NORWAY
Packit 709fb3
# define SUBLANG_SAMI_NORTHERN_NORWAY 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_SAMI_NORTHERN_SWEDEN
Packit 709fb3
# define SUBLANG_SAMI_NORTHERN_SWEDEN 0x02
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_SAMI_NORTHERN_FINLAND
Packit 709fb3
# define SUBLANG_SAMI_NORTHERN_FINLAND 0x03
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_SAMI_LULE_NORWAY
Packit 709fb3
# define SUBLANG_SAMI_LULE_NORWAY 0x04
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_SAMI_LULE_SWEDEN
Packit 709fb3
# define SUBLANG_SAMI_LULE_SWEDEN 0x05
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_SAMI_SOUTHERN_NORWAY
Packit 709fb3
# define SUBLANG_SAMI_SOUTHERN_NORWAY 0x06
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_SAMI_SOUTHERN_SWEDEN
Packit 709fb3
# define SUBLANG_SAMI_SOUTHERN_SWEDEN 0x07
Packit 709fb3
# endif
Packit 709fb3
# undef SUBLANG_SAMI_SKOLT_FINLAND
Packit 709fb3
# define SUBLANG_SAMI_SKOLT_FINLAND 0x08
Packit 709fb3
# undef SUBLANG_SAMI_INARI_FINLAND
Packit 709fb3
# define SUBLANG_SAMI_INARI_FINLAND 0x09
Packit 709fb3
# ifndef SUBLANG_SANSKRIT_INDIA
Packit 709fb3
# define SUBLANG_SANSKRIT_INDIA 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_SERBIAN_LATIN
Packit 709fb3
# define SUBLANG_SERBIAN_LATIN 0x02
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_SERBIAN_CYRILLIC
Packit 709fb3
# define SUBLANG_SERBIAN_CYRILLIC 0x03
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_SINDHI_INDIA
Packit 709fb3
# define SUBLANG_SINDHI_INDIA 0x01
Packit 709fb3
# endif
Packit 709fb3
# undef SUBLANG_SINDHI_PAKISTAN
Packit 709fb3
# define SUBLANG_SINDHI_PAKISTAN 0x02
Packit 709fb3
# ifndef SUBLANG_SINDHI_AFGHANISTAN
Packit 709fb3
# define SUBLANG_SINDHI_AFGHANISTAN 0x02
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_SINHALESE_SRI_LANKA
Packit 709fb3
# define SUBLANG_SINHALESE_SRI_LANKA 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_SLOVAK_SLOVAKIA
Packit 709fb3
# define SUBLANG_SLOVAK_SLOVAKIA 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_SLOVENIAN_SLOVENIA
Packit 709fb3
# define SUBLANG_SLOVENIAN_SLOVENIA 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_SOTHO_SOUTH_AFRICA
Packit 709fb3
# define SUBLANG_SOTHO_SOUTH_AFRICA 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_SPANISH_GUATEMALA
Packit 709fb3
# define SUBLANG_SPANISH_GUATEMALA 0x04
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_SPANISH_COSTA_RICA
Packit 709fb3
# define SUBLANG_SPANISH_COSTA_RICA 0x05
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_SPANISH_PANAMA
Packit 709fb3
# define SUBLANG_SPANISH_PANAMA 0x06
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_SPANISH_DOMINICAN_REPUBLIC
Packit 709fb3
# define SUBLANG_SPANISH_DOMINICAN_REPUBLIC 0x07
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_SPANISH_VENEZUELA
Packit 709fb3
# define SUBLANG_SPANISH_VENEZUELA 0x08
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_SPANISH_COLOMBIA
Packit 709fb3
# define SUBLANG_SPANISH_COLOMBIA 0x09
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_SPANISH_PERU
Packit 709fb3
# define SUBLANG_SPANISH_PERU 0x0a
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_SPANISH_ARGENTINA
Packit 709fb3
# define SUBLANG_SPANISH_ARGENTINA 0x0b
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_SPANISH_ECUADOR
Packit 709fb3
# define SUBLANG_SPANISH_ECUADOR 0x0c
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_SPANISH_CHILE
Packit 709fb3
# define SUBLANG_SPANISH_CHILE 0x0d
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_SPANISH_URUGUAY
Packit 709fb3
# define SUBLANG_SPANISH_URUGUAY 0x0e
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_SPANISH_PARAGUAY
Packit 709fb3
# define SUBLANG_SPANISH_PARAGUAY 0x0f
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_SPANISH_BOLIVIA
Packit 709fb3
# define SUBLANG_SPANISH_BOLIVIA 0x10
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_SPANISH_EL_SALVADOR
Packit 709fb3
# define SUBLANG_SPANISH_EL_SALVADOR 0x11
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_SPANISH_HONDURAS
Packit 709fb3
# define SUBLANG_SPANISH_HONDURAS 0x12
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_SPANISH_NICARAGUA
Packit 709fb3
# define SUBLANG_SPANISH_NICARAGUA 0x13
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_SPANISH_PUERTO_RICO
Packit 709fb3
# define SUBLANG_SPANISH_PUERTO_RICO 0x14
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_SPANISH_US
Packit 709fb3
# define SUBLANG_SPANISH_US 0x15
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_SWAHILI_KENYA
Packit 709fb3
# define SUBLANG_SWAHILI_KENYA 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_SWEDISH_SWEDEN
Packit 709fb3
# define SUBLANG_SWEDISH_SWEDEN 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_SWEDISH_FINLAND
Packit 709fb3
# define SUBLANG_SWEDISH_FINLAND 0x02
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_SYRIAC_SYRIA
Packit 709fb3
# define SUBLANG_SYRIAC_SYRIA 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_TAGALOG_PHILIPPINES
Packit 709fb3
# define SUBLANG_TAGALOG_PHILIPPINES 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_TAJIK_TAJIKISTAN
Packit 709fb3
# define SUBLANG_TAJIK_TAJIKISTAN 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_TAMAZIGHT_ARABIC
Packit 709fb3
# define SUBLANG_TAMAZIGHT_ARABIC 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_TAMAZIGHT_ALGERIA_LATIN
Packit 709fb3
# define SUBLANG_TAMAZIGHT_ALGERIA_LATIN 0x02
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_TAMIL_INDIA
Packit 709fb3
# define SUBLANG_TAMIL_INDIA 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_TATAR_RUSSIA
Packit 709fb3
# define SUBLANG_TATAR_RUSSIA 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_TELUGU_INDIA
Packit 709fb3
# define SUBLANG_TELUGU_INDIA 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_THAI_THAILAND
Packit 709fb3
# define SUBLANG_THAI_THAILAND 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_TIBETAN_PRC
Packit 709fb3
# define SUBLANG_TIBETAN_PRC 0x01
Packit 709fb3
# endif
Packit 709fb3
# undef SUBLANG_TIBETAN_BHUTAN
Packit 709fb3
# define SUBLANG_TIBETAN_BHUTAN 0x02
Packit 709fb3
# ifndef SUBLANG_TIGRINYA_ETHIOPIA
Packit 709fb3
# define SUBLANG_TIGRINYA_ETHIOPIA 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_TIGRINYA_ERITREA
Packit 709fb3
# define SUBLANG_TIGRINYA_ERITREA 0x02
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_TSWANA_SOUTH_AFRICA
Packit 709fb3
# define SUBLANG_TSWANA_SOUTH_AFRICA 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_TURKISH_TURKEY
Packit 709fb3
# define SUBLANG_TURKISH_TURKEY 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_TURKMEN_TURKMENISTAN
Packit 709fb3
# define SUBLANG_TURKMEN_TURKMENISTAN 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_UIGHUR_PRC
Packit 709fb3
# define SUBLANG_UIGHUR_PRC 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_UKRAINIAN_UKRAINE
Packit 709fb3
# define SUBLANG_UKRAINIAN_UKRAINE 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_UPPER_SORBIAN_GERMANY
Packit 709fb3
# define SUBLANG_UPPER_SORBIAN_GERMANY 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_URDU_PAKISTAN
Packit 709fb3
# define SUBLANG_URDU_PAKISTAN 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_URDU_INDIA
Packit 709fb3
# define SUBLANG_URDU_INDIA 0x02
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_UZBEK_LATIN
Packit 709fb3
# define SUBLANG_UZBEK_LATIN 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_UZBEK_CYRILLIC
Packit 709fb3
# define SUBLANG_UZBEK_CYRILLIC 0x02
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_VIETNAMESE_VIETNAM
Packit 709fb3
# define SUBLANG_VIETNAMESE_VIETNAM 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_WELSH_UNITED_KINGDOM
Packit 709fb3
# define SUBLANG_WELSH_UNITED_KINGDOM 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_WOLOF_SENEGAL
Packit 709fb3
# define SUBLANG_WOLOF_SENEGAL 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_XHOSA_SOUTH_AFRICA
Packit 709fb3
# define SUBLANG_XHOSA_SOUTH_AFRICA 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_YAKUT_RUSSIA
Packit 709fb3
# define SUBLANG_YAKUT_RUSSIA 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_YI_PRC
Packit 709fb3
# define SUBLANG_YI_PRC 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_YORUBA_NIGERIA
Packit 709fb3
# define SUBLANG_YORUBA_NIGERIA 0x01
Packit 709fb3
# endif
Packit 709fb3
# ifndef SUBLANG_ZULU_SOUTH_AFRICA
Packit 709fb3
# define SUBLANG_ZULU_SOUTH_AFRICA 0x01
Packit 709fb3
# endif
Packit 709fb3
/* GetLocaleInfoA operations.  */
Packit 709fb3
# ifndef LOCALE_SNAME
Packit 709fb3
# define LOCALE_SNAME 0x5c
Packit 709fb3
# endif
Packit 709fb3
# ifndef LOCALE_NAME_MAX_LENGTH
Packit 709fb3
# define LOCALE_NAME_MAX_LENGTH 85
Packit 709fb3
# endif
Packit 709fb3
#endif
Packit 709fb3
Packit 709fb3
Packit 709fb3
#if HAVE_CFLOCALECOPYCURRENT || HAVE_CFPREFERENCESCOPYAPPVALUE
Packit 709fb3
/* Mac OS X 10.2 or newer */
Packit 709fb3
Packit 709fb3
/* Canonicalize a Mac OS X locale name to a Unix locale name.
Packit 709fb3
   NAME is a sufficiently large buffer.
Packit 709fb3
   On input, it contains the Mac OS X locale name.
Packit 709fb3
   On output, it contains the Unix locale name.  */
Packit 709fb3
# if !defined IN_LIBINTL
Packit 709fb3
static
Packit 709fb3
# endif
Packit 709fb3
void
Packit 709fb3
gl_locale_name_canonicalize (char *name)
Packit 709fb3
{
Packit 709fb3
  /* This conversion is based on a posting by
Packit 709fb3
     Deborah GoldSmith <goldsmit@apple.com> on 2005-03-08,
Packit 709fb3
     http://lists.apple.com/archives/carbon-dev/2005/Mar/msg00293.html */
Packit 709fb3
Packit 709fb3
  /* Convert legacy (NeXTstep inherited) English names to Unix (ISO 639 and
Packit 709fb3
     ISO 3166) names.  Prior to Mac OS X 10.3, there is no API for doing this.
Packit 709fb3
     Therefore we do it ourselves, using a table based on the results of the
Packit 709fb3
     Mac OS X 10.3.8 function
Packit 709fb3
     CFLocaleCreateCanonicalLocaleIdentifierFromString().  */
Packit 709fb3
  typedef struct { const char legacy[21+1]; const char unixy[5+1]; }
Packit 709fb3
          legacy_entry;
Packit 709fb3
  static const legacy_entry legacy_table[] = {
Packit 709fb3
    { "Afrikaans",             "af" },
Packit 709fb3
    { "Albanian",              "sq" },
Packit 709fb3
    { "Amharic",               "am" },
Packit 709fb3
    { "Arabic",                "ar" },
Packit 709fb3
    { "Armenian",              "hy" },
Packit 709fb3
    { "Assamese",              "as" },
Packit 709fb3
    { "Aymara",                "ay" },
Packit 709fb3
    { "Azerbaijani",           "az" },
Packit 709fb3
    { "Basque",                "eu" },
Packit 709fb3
    { "Belarusian",            "be" },
Packit 709fb3
    { "Belorussian",           "be" },
Packit 709fb3
    { "Bengali",               "bn" },
Packit 709fb3
    { "Brazilian Portugese",   "pt_BR" },
Packit 709fb3
    { "Brazilian Portuguese",  "pt_BR" },
Packit 709fb3
    { "Breton",                "br" },
Packit 709fb3
    { "Bulgarian",             "bg" },
Packit 709fb3
    { "Burmese",               "my" },
Packit 709fb3
    { "Byelorussian",          "be" },
Packit 709fb3
    { "Catalan",               "ca" },
Packit 709fb3
    { "Chewa",                 "ny" },
Packit 709fb3
    { "Chichewa",              "ny" },
Packit 709fb3
    { "Chinese",               "zh" },
Packit 709fb3
    { "Chinese, Simplified",   "zh_CN" },
Packit 709fb3
    { "Chinese, Traditional",  "zh_TW" },
Packit 709fb3
    { "Chinese, Tradtional",   "zh_TW" },
Packit 709fb3
    { "Croatian",              "hr" },
Packit 709fb3
    { "Czech",                 "cs" },
Packit 709fb3
    { "Danish",                "da" },
Packit 709fb3
    { "Dutch",                 "nl" },
Packit 709fb3
    { "Dzongkha",              "dz" },
Packit 709fb3
    { "English",               "en" },
Packit 709fb3
    { "Esperanto",             "eo" },
Packit 709fb3
    { "Estonian",              "et" },
Packit 709fb3
    { "Faroese",               "fo" },
Packit 709fb3
    { "Farsi",                 "fa" },
Packit 709fb3
    { "Finnish",               "fi" },
Packit 709fb3
    { "Flemish",               "nl_BE" },
Packit 709fb3
    { "French",                "fr" },
Packit 709fb3
    { "Galician",              "gl" },
Packit 709fb3
    { "Gallegan",              "gl" },
Packit 709fb3
    { "Georgian",              "ka" },
Packit 709fb3
    { "German",                "de" },
Packit 709fb3
    { "Greek",                 "el" },
Packit 709fb3
    { "Greenlandic",           "kl" },
Packit 709fb3
    { "Guarani",               "gn" },
Packit 709fb3
    { "Gujarati",              "gu" },
Packit 709fb3
    { "Hawaiian",              "haw" }, /* Yes, "haw", not "cpe".  */
Packit 709fb3
    { "Hebrew",                "he" },
Packit 709fb3
    { "Hindi",                 "hi" },
Packit 709fb3
    { "Hungarian",             "hu" },
Packit 709fb3
    { "Icelandic",             "is" },
Packit 709fb3
    { "Indonesian",            "id" },
Packit 709fb3
    { "Inuktitut",             "iu" },
Packit 709fb3
    { "Irish",                 "ga" },
Packit 709fb3
    { "Italian",               "it" },
Packit 709fb3
    { "Japanese",              "ja" },
Packit 709fb3
    { "Javanese",              "jv" },
Packit 709fb3
    { "Kalaallisut",           "kl" },
Packit 709fb3
    { "Kannada",               "kn" },
Packit 709fb3
    { "Kashmiri",              "ks" },
Packit 709fb3
    { "Kazakh",                "kk" },
Packit 709fb3
    { "Khmer",                 "km" },
Packit 709fb3
    { "Kinyarwanda",           "rw" },
Packit 709fb3
    { "Kirghiz",               "ky" },
Packit 709fb3
    { "Korean",                "ko" },
Packit 709fb3
    { "Kurdish",               "ku" },
Packit 709fb3
    { "Latin",                 "la" },
Packit 709fb3
    { "Latvian",               "lv" },
Packit 709fb3
    { "Lithuanian",            "lt" },
Packit 709fb3
    { "Macedonian",            "mk" },
Packit 709fb3
    { "Malagasy",              "mg" },
Packit 709fb3
    { "Malay",                 "ms" },
Packit 709fb3
    { "Malayalam",             "ml" },
Packit 709fb3
    { "Maltese",               "mt" },
Packit 709fb3
    { "Manx",                  "gv" },
Packit 709fb3
    { "Marathi",               "mr" },
Packit 709fb3
    { "Moldavian",             "mo" },
Packit 709fb3
    { "Mongolian",             "mn" },
Packit 709fb3
    { "Nepali",                "ne" },
Packit 709fb3
    { "Norwegian",             "nb" }, /* Yes, "nb", not the obsolete "no".  */
Packit 709fb3
    { "Nyanja",                "ny" },
Packit 709fb3
    { "Nynorsk",               "nn" },
Packit 709fb3
    { "Oriya",                 "or" },
Packit 709fb3
    { "Oromo",                 "om" },
Packit 709fb3
    { "Panjabi",               "pa" },
Packit 709fb3
    { "Pashto",                "ps" },
Packit 709fb3
    { "Persian",               "fa" },
Packit 709fb3
    { "Polish",                "pl" },
Packit 709fb3
    { "Portuguese",            "pt" },
Packit 709fb3
    { "Portuguese, Brazilian", "pt_BR" },
Packit 709fb3
    { "Punjabi",               "pa" },
Packit 709fb3
    { "Pushto",                "ps" },
Packit 709fb3
    { "Quechua",               "qu" },
Packit 709fb3
    { "Romanian",              "ro" },
Packit 709fb3
    { "Ruanda",                "rw" },
Packit 709fb3
    { "Rundi",                 "rn" },
Packit 709fb3
    { "Russian",               "ru" },
Packit 709fb3
    { "Sami",                  "se_NO" }, /* Not just "se".  */
Packit 709fb3
    { "Sanskrit",              "sa" },
Packit 709fb3
    { "Scottish",              "gd" },
Packit 709fb3
    { "Serbian",               "sr" },
Packit 709fb3
    { "Simplified Chinese",    "zh_CN" },
Packit 709fb3
    { "Sindhi",                "sd" },
Packit 709fb3
    { "Sinhalese",             "si" },
Packit 709fb3
    { "Slovak",                "sk" },
Packit 709fb3
    { "Slovenian",             "sl" },
Packit 709fb3
    { "Somali",                "so" },
Packit 709fb3
    { "Spanish",               "es" },
Packit 709fb3
    { "Sundanese",             "su" },
Packit 709fb3
    { "Swahili",               "sw" },
Packit 709fb3
    { "Swedish",               "sv" },
Packit 709fb3
    { "Tagalog",               "tl" },
Packit 709fb3
    { "Tajik",                 "tg" },
Packit 709fb3
    { "Tajiki",                "tg" },
Packit 709fb3
    { "Tamil",                 "ta" },
Packit 709fb3
    { "Tatar",                 "tt" },
Packit 709fb3
    { "Telugu",                "te" },
Packit 709fb3
    { "Thai",                  "th" },
Packit 709fb3
    { "Tibetan",               "bo" },
Packit 709fb3
    { "Tigrinya",              "ti" },
Packit 709fb3
    { "Tongan",                "to" },
Packit 709fb3
    { "Traditional Chinese",   "zh_TW" },
Packit 709fb3
    { "Turkish",               "tr" },
Packit 709fb3
    { "Turkmen",               "tk" },
Packit 709fb3
    { "Uighur",                "ug" },
Packit 709fb3
    { "Ukrainian",             "uk" },
Packit 709fb3
    { "Urdu",                  "ur" },
Packit 709fb3
    { "Uzbek",                 "uz" },
Packit 709fb3
    { "Vietnamese",            "vi" },
Packit 709fb3
    { "Welsh",                 "cy" },
Packit 709fb3
    { "Yiddish",               "yi" }
Packit 709fb3
  };
Packit 709fb3
Packit 709fb3
  /* Convert new-style locale names with language tags (ISO 639 and ISO 15924)
Packit 709fb3
     to Unix (ISO 639 and ISO 3166) names.  */
Packit 709fb3
  typedef struct { const char langtag[7+1]; const char unixy[12+1]; }
Packit 709fb3
          langtag_entry;
Packit 709fb3
  static const langtag_entry langtag_table[] = {
Packit 709fb3
    /* Mac OS X has "az-Arab", "az-Cyrl", "az-Latn".
Packit 709fb3
       The default script for az on Unix is Latin.  */
Packit 709fb3
    { "az-Latn", "az" },
Packit 709fb3
    /* Mac OS X has "ga-dots".  Does not yet exist on Unix.  */
Packit 709fb3
    { "ga-dots", "ga" },
Packit 709fb3
    /* Mac OS X has "kk-Cyrl".  Does not yet exist on Unix.  */
Packit 709fb3
    /* Mac OS X has "mn-Cyrl", "mn-Mong".
Packit 709fb3
       The default script for mn on Unix is Cyrillic.  */
Packit 709fb3
    { "mn-Cyrl", "mn" },
Packit 709fb3
    /* Mac OS X has "ms-Arab", "ms-Latn".
Packit 709fb3
       The default script for ms on Unix is Latin.  */
Packit 709fb3
    { "ms-Latn", "ms" },
Packit 709fb3
    /* Mac OS X has "tg-Cyrl".
Packit 709fb3
       The default script for tg on Unix is Cyrillic.  */
Packit 709fb3
    { "tg-Cyrl", "tg" },
Packit 709fb3
    /* Mac OS X has "tk-Cyrl".  Does not yet exist on Unix.  */
Packit 709fb3
    /* Mac OS X has "tt-Cyrl".
Packit 709fb3
       The default script for tt on Unix is Cyrillic.  */
Packit 709fb3
    { "tt-Cyrl", "tt" },
Packit 709fb3
    /* Mac OS X has "zh-Hans", "zh-Hant".
Packit 709fb3
       Country codes are used to distinguish these on Unix.  */
Packit 709fb3
    { "zh-Hans", "zh_CN" },
Packit 709fb3
    { "zh-Hant", "zh_TW" }
Packit 709fb3
  };
Packit 709fb3
Packit 709fb3
  /* Convert script names (ISO 15924) to Unix conventions.
Packit 709fb3
     See http://www.unicode.org/iso15924/iso15924-codes.html  */
Packit 709fb3
  typedef struct { const char script[4+1]; const char unixy[9+1]; }
Packit 709fb3
          script_entry;
Packit 709fb3
  static const script_entry script_table[] = {
Packit 709fb3
    { "Arab", "arabic" },
Packit 709fb3
    { "Cyrl", "cyrillic" },
Packit 709fb3
    { "Mong", "mongolian" }
Packit 709fb3
  };
Packit 709fb3
Packit 709fb3
  /* Step 1: Convert using legacy_table.  */
Packit 709fb3
  if (name[0] >= 'A' && name[0] <= 'Z')
Packit 709fb3
    {
Packit 709fb3
      unsigned int i1, i2;
Packit 709fb3
      i1 = 0;
Packit 709fb3
      i2 = sizeof (legacy_table) / sizeof (legacy_entry);
Packit 709fb3
      while (i2 - i1 > 1)
Packit 709fb3
        {
Packit 709fb3
          /* At this point we know that if name occurs in legacy_table,
Packit 709fb3
             its index must be >= i1 and < i2.  */
Packit 709fb3
          unsigned int i = (i1 + i2) >> 1;
Packit 709fb3
          const legacy_entry *p = &legacy_table[i];
Packit 709fb3
          if (strcmp (name, p->legacy) < 0)
Packit 709fb3
            i2 = i;
Packit 709fb3
          else
Packit 709fb3
            i1 = i;
Packit 709fb3
        }
Packit 709fb3
      if (strcmp (name, legacy_table[i1].legacy) == 0)
Packit 709fb3
        {
Packit 709fb3
          strcpy (name, legacy_table[i1].unixy);
Packit 709fb3
          return;
Packit 709fb3
        }
Packit 709fb3
    }
Packit 709fb3
Packit 709fb3
  /* Step 2: Convert using langtag_table and script_table.  */
Packit 709fb3
  if (strlen (name) == 7 && name[2] == '-')
Packit 709fb3
    {
Packit 709fb3
      unsigned int i1, i2;
Packit 709fb3
      i1 = 0;
Packit 709fb3
      i2 = sizeof (langtag_table) / sizeof (langtag_entry);
Packit 709fb3
      while (i2 - i1 > 1)
Packit 709fb3
        {
Packit 709fb3
          /* At this point we know that if name occurs in langtag_table,
Packit 709fb3
             its index must be >= i1 and < i2.  */
Packit 709fb3
          unsigned int i = (i1 + i2) >> 1;
Packit 709fb3
          const langtag_entry *p = &langtag_table[i];
Packit 709fb3
          if (strcmp (name, p->langtag) < 0)
Packit 709fb3
            i2 = i;
Packit 709fb3
          else
Packit 709fb3
            i1 = i;
Packit 709fb3
        }
Packit 709fb3
      if (strcmp (name, langtag_table[i1].langtag) == 0)
Packit 709fb3
        {
Packit 709fb3
          strcpy (name, langtag_table[i1].unixy);
Packit 709fb3
          return;
Packit 709fb3
        }
Packit 709fb3
Packit 709fb3
      i1 = 0;
Packit 709fb3
      i2 = sizeof (script_table) / sizeof (script_entry);
Packit 709fb3
      while (i2 - i1 > 1)
Packit 709fb3
        {
Packit 709fb3
          /* At this point we know that if (name + 3) occurs in script_table,
Packit 709fb3
             its index must be >= i1 and < i2.  */
Packit 709fb3
          unsigned int i = (i1 + i2) >> 1;
Packit 709fb3
          const script_entry *p = &script_table[i];
Packit 709fb3
          if (strcmp (name + 3, p->script) < 0)
Packit 709fb3
            i2 = i;
Packit 709fb3
          else
Packit 709fb3
            i1 = i;
Packit 709fb3
        }
Packit 709fb3
      if (strcmp (name + 3, script_table[i1].script) == 0)
Packit 709fb3
        {
Packit 709fb3
          name[2] = '@';
Packit 709fb3
          strcpy (name + 3, script_table[i1].unixy);
Packit 709fb3
          return;
Packit 709fb3
        }
Packit 709fb3
    }
Packit 709fb3
Packit 709fb3
  /* Step 3: Convert new-style dash to Unix underscore. */
Packit 709fb3
  {
Packit 709fb3
    char *p;
Packit 709fb3
    for (p = name; *p != '\0'; p++)
Packit 709fb3
      if (*p == '-')
Packit 709fb3
        *p = '_';
Packit 709fb3
  }
Packit 709fb3
}
Packit 709fb3
Packit 709fb3
#endif
Packit 709fb3
Packit 709fb3
Packit 709fb3
#if defined WINDOWS_NATIVE || defined __CYGWIN__ /* Native Windows or Cygwin */
Packit 709fb3
Packit 709fb3
/* Canonicalize a Windows native locale name to a Unix locale name.
Packit 709fb3
   NAME is a sufficiently large buffer.
Packit 709fb3
   On input, it contains the Windows locale name.
Packit 709fb3
   On output, it contains the Unix locale name.  */
Packit 709fb3
# if !defined IN_LIBINTL
Packit 709fb3
static
Packit 709fb3
# endif
Packit 709fb3
void
Packit 709fb3
gl_locale_name_canonicalize (char *name)
Packit 709fb3
{
Packit 709fb3
  /* FIXME: This is probably incomplete: it does not handle "zh-Hans" and
Packit 709fb3
     "zh-Hant".  */
Packit 709fb3
  char *p;
Packit 709fb3
Packit 709fb3
  for (p = name; *p != '\0'; p++)
Packit 709fb3
    if (*p == '-')
Packit 709fb3
      {
Packit 709fb3
        *p = '_';
Packit 709fb3
        p++;
Packit 709fb3
        for (; *p != '\0'; p++)
Packit 709fb3
          {
Packit 709fb3
            if (*p >= 'a' && *p <= 'z')
Packit 709fb3
              *p += 'A' - 'a';
Packit 709fb3
            if (*p == '-')
Packit 709fb3
              {
Packit 709fb3
                *p = '\0';
Packit 709fb3
                return;
Packit 709fb3
              }
Packit 709fb3
          }
Packit 709fb3
        return;
Packit 709fb3
      }
Packit 709fb3
}
Packit 709fb3
Packit 709fb3
# if !defined IN_LIBINTL
Packit 709fb3
static
Packit 709fb3
# endif
Packit 709fb3
const char *
Packit 709fb3
gl_locale_name_from_win32_LANGID (LANGID langid)
Packit 709fb3
{
Packit 709fb3
  /* Activate the new code only when the GETTEXT_MUI environment variable is
Packit 709fb3
     set, for the time being, since the new code is not well tested.  */
Packit 709fb3
  if (getenv ("GETTEXT_MUI") != NULL)
Packit 709fb3
    {
Packit 709fb3
      static char namebuf[256];
Packit 709fb3
Packit 709fb3
      /* Query the system's notion of locale name.
Packit 709fb3
         On Windows95/98/ME, GetLocaleInfoA returns some incorrect results.
Packit 709fb3
         But we don't need to support systems that are so old.  */
Packit 709fb3
      if (GetLocaleInfoA (MAKELCID (langid, SORT_DEFAULT), LOCALE_SNAME,
Packit 709fb3
                          namebuf, sizeof (namebuf) - 1))
Packit 709fb3
        {
Packit 709fb3
          /* Convert it to a Unix locale name.  */
Packit 709fb3
          gl_locale_name_canonicalize (namebuf);
Packit 709fb3
          return namebuf;
Packit 709fb3
        }
Packit 709fb3
    }
Packit 709fb3
  /* Internet Explorer has an LCID to RFC3066 name mapping stored in
Packit 709fb3
     HKEY_CLASSES_ROOT\Mime\Database\Rfc1766.  But we better don't use that
Packit 709fb3
     since IE's i18n subsystem is known to be inconsistent with the native
Packit 709fb3
     Windows base (e.g. they have different character conversion facilities
Packit 709fb3
     that produce different results).  */
Packit 709fb3
  /* Use our own table.  */
Packit 709fb3
  {
Packit 709fb3
    int primary, sub;
Packit 709fb3
Packit 709fb3
    /* Split into language and territory part.  */
Packit 709fb3
    primary = PRIMARYLANGID (langid);
Packit 709fb3
    sub = SUBLANGID (langid);
Packit 709fb3
Packit 709fb3
    /* Dispatch on language.
Packit 709fb3
       See also http://www.unicode.org/unicode/onlinedat/languages.html .
Packit 709fb3
       For details about languages, see http://www.ethnologue.com/ .  */
Packit 709fb3
    switch (primary)
Packit 709fb3
      {
Packit 709fb3
      case LANG_AFRIKAANS:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_AFRIKAANS_SOUTH_AFRICA: return "af_ZA";
Packit 709fb3
          }
Packit 709fb3
        return "af";
Packit 709fb3
      case LANG_ALBANIAN:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_ALBANIAN_ALBANIA: return "sq_AL";
Packit 709fb3
          }
Packit 709fb3
        return "sq";
Packit 709fb3
      case LANG_ALSATIAN:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_ALSATIAN_FRANCE: return "gsw_FR";
Packit 709fb3
          }
Packit 709fb3
        return "gsw";
Packit 709fb3
      case LANG_AMHARIC:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_AMHARIC_ETHIOPIA: return "am_ET";
Packit 709fb3
          }
Packit 709fb3
        return "am";
Packit 709fb3
      case LANG_ARABIC:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_ARABIC_SAUDI_ARABIA: return "ar_SA";
Packit 709fb3
          case SUBLANG_ARABIC_IRAQ: return "ar_IQ";
Packit 709fb3
          case SUBLANG_ARABIC_EGYPT: return "ar_EG";
Packit 709fb3
          case SUBLANG_ARABIC_LIBYA: return "ar_LY";
Packit 709fb3
          case SUBLANG_ARABIC_ALGERIA: return "ar_DZ";
Packit 709fb3
          case SUBLANG_ARABIC_MOROCCO: return "ar_MA";
Packit 709fb3
          case SUBLANG_ARABIC_TUNISIA: return "ar_TN";
Packit 709fb3
          case SUBLANG_ARABIC_OMAN: return "ar_OM";
Packit 709fb3
          case SUBLANG_ARABIC_YEMEN: return "ar_YE";
Packit 709fb3
          case SUBLANG_ARABIC_SYRIA: return "ar_SY";
Packit 709fb3
          case SUBLANG_ARABIC_JORDAN: return "ar_JO";
Packit 709fb3
          case SUBLANG_ARABIC_LEBANON: return "ar_LB";
Packit 709fb3
          case SUBLANG_ARABIC_KUWAIT: return "ar_KW";
Packit 709fb3
          case SUBLANG_ARABIC_UAE: return "ar_AE";
Packit 709fb3
          case SUBLANG_ARABIC_BAHRAIN: return "ar_BH";
Packit 709fb3
          case SUBLANG_ARABIC_QATAR: return "ar_QA";
Packit 709fb3
          }
Packit 709fb3
        return "ar";
Packit 709fb3
      case LANG_ARMENIAN:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_ARMENIAN_ARMENIA: return "hy_AM";
Packit 709fb3
          }
Packit 709fb3
        return "hy";
Packit 709fb3
      case LANG_ASSAMESE:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_ASSAMESE_INDIA: return "as_IN";
Packit 709fb3
          }
Packit 709fb3
        return "as";
Packit 709fb3
      case LANG_AZERI:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          /* FIXME: Adjust this when Azerbaijani locales appear on Unix.  */
Packit 709fb3
          case 0x1e: return "az@latin";
Packit 709fb3
          case SUBLANG_AZERI_LATIN: return "az_AZ@latin";
Packit 709fb3
          case 0x1d: return "az@cyrillic";
Packit 709fb3
          case SUBLANG_AZERI_CYRILLIC: return "az_AZ@cyrillic";
Packit 709fb3
          }
Packit 709fb3
        return "az";
Packit 709fb3
      case LANG_BASHKIR:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_BASHKIR_RUSSIA: return "ba_RU";
Packit 709fb3
          }
Packit 709fb3
        return "ba";
Packit 709fb3
      case LANG_BASQUE:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_BASQUE_BASQUE: return "eu_ES";
Packit 709fb3
          }
Packit 709fb3
        return "eu"; /* Ambiguous: could be "eu_ES" or "eu_FR".  */
Packit 709fb3
      case LANG_BELARUSIAN:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_BELARUSIAN_BELARUS: return "be_BY";
Packit 709fb3
          }
Packit 709fb3
        return "be";
Packit 709fb3
      case LANG_BENGALI:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_BENGALI_INDIA: return "bn_IN";
Packit 709fb3
          case SUBLANG_BENGALI_BANGLADESH: return "bn_BD";
Packit 709fb3
          }
Packit 709fb3
        return "bn";
Packit 709fb3
      case LANG_BRETON:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_BRETON_FRANCE: return "br_FR";
Packit 709fb3
          }
Packit 709fb3
        return "br";
Packit 709fb3
      case LANG_BULGARIAN:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_BULGARIAN_BULGARIA: return "bg_BG";
Packit 709fb3
          }
Packit 709fb3
        return "bg";
Packit 709fb3
      case LANG_BURMESE:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_DEFAULT: return "my_MM";
Packit 709fb3
          }
Packit 709fb3
        return "my";
Packit 709fb3
      case LANG_CAMBODIAN:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_CAMBODIAN_CAMBODIA: return "km_KH";
Packit 709fb3
          }
Packit 709fb3
        return "km";
Packit 709fb3
      case LANG_CATALAN:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_CATALAN_SPAIN: return "ca_ES";
Packit 709fb3
          }
Packit 709fb3
        return "ca";
Packit 709fb3
      case LANG_CHEROKEE:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_DEFAULT: return "chr_US";
Packit 709fb3
          }
Packit 709fb3
        return "chr";
Packit 709fb3
      case LANG_CHINESE:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_CHINESE_TRADITIONAL: case 0x1f: return "zh_TW";
Packit 709fb3
          case SUBLANG_CHINESE_SIMPLIFIED: case 0x00: return "zh_CN";
Packit 709fb3
          case SUBLANG_CHINESE_HONGKONG: return "zh_HK"; /* traditional */
Packit 709fb3
          case SUBLANG_CHINESE_SINGAPORE: return "zh_SG"; /* simplified */
Packit 709fb3
          case SUBLANG_CHINESE_MACAU: return "zh_MO"; /* traditional */
Packit 709fb3
          }
Packit 709fb3
        return "zh";
Packit 709fb3
      case LANG_CORSICAN:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_CORSICAN_FRANCE: return "co_FR";
Packit 709fb3
          }
Packit 709fb3
        return "co";
Packit 709fb3
      case LANG_CROATIAN:      /* LANG_CROATIAN == LANG_SERBIAN == LANG_BOSNIAN
Packit 709fb3
                                * What used to be called Serbo-Croatian
Packit 709fb3
                                * should really now be two separate
Packit 709fb3
                                * languages because of political reasons.
Packit 709fb3
                                * (Says tml, who knows nothing about Serbian
Packit 709fb3
                                * or Croatian.)
Packit 709fb3
                                * (I can feel those flames coming already.)
Packit 709fb3
                                */
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          /* Croatian */
Packit 709fb3
          case 0x00: return "hr";
Packit 709fb3
          case SUBLANG_CROATIAN_CROATIA: return "hr_HR";
Packit 709fb3
          case SUBLANG_CROATIAN_BOSNIA_HERZEGOVINA_LATIN: return "hr_BA";
Packit 709fb3
          /* Serbian */
Packit 709fb3
          case 0x1f: return "sr";
Packit 709fb3
          case 0x1c: return "sr"; /* latin */
Packit 709fb3
          case SUBLANG_SERBIAN_LATIN: return "sr_CS"; /* latin */
Packit 709fb3
          case 0x09: return "sr_RS"; /* latin */
Packit 709fb3
          case 0x0b: return "sr_ME"; /* latin */
Packit 709fb3
          case 0x06: return "sr_BA"; /* latin */
Packit 709fb3
          case 0x1b: return "sr@cyrillic";
Packit 709fb3
          case SUBLANG_SERBIAN_CYRILLIC: return "sr_CS@cyrillic";
Packit 709fb3
          case 0x0a: return "sr_RS@cyrillic";
Packit 709fb3
          case 0x0c: return "sr_ME@cyrillic";
Packit 709fb3
          case 0x07: return "sr_BA@cyrillic";
Packit 709fb3
          /* Bosnian */
Packit 709fb3
          case 0x1e: return "bs";
Packit 709fb3
          case 0x1a: return "bs"; /* latin */
Packit 709fb3
          case SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_LATIN: return "bs_BA"; /* latin */
Packit 709fb3
          case 0x19: return "bs@cyrillic";
Packit 709fb3
          case SUBLANG_BOSNIAN_BOSNIA_HERZEGOVINA_CYRILLIC: return "bs_BA@cyrillic";
Packit 709fb3
          }
Packit 709fb3
        return "hr";
Packit 709fb3
      case LANG_CZECH:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_CZECH_CZECH_REPUBLIC: return "cs_CZ";
Packit 709fb3
          }
Packit 709fb3
        return "cs";
Packit 709fb3
      case LANG_DANISH:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_DANISH_DENMARK: return "da_DK";
Packit 709fb3
          }
Packit 709fb3
        return "da";
Packit 709fb3
      case LANG_DARI:
Packit 709fb3
        /* FIXME: Adjust this when such locales appear on Unix.  */
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_DARI_AFGHANISTAN: return "prs_AF";
Packit 709fb3
          }
Packit 709fb3
        return "prs";
Packit 709fb3
      case LANG_DIVEHI:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_DIVEHI_MALDIVES: return "dv_MV";
Packit 709fb3
          }
Packit 709fb3
        return "dv";
Packit 709fb3
      case LANG_DUTCH:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_DUTCH: return "nl_NL";
Packit 709fb3
          case SUBLANG_DUTCH_BELGIAN: /* FLEMISH, VLAAMS */ return "nl_BE";
Packit 709fb3
          case SUBLANG_DUTCH_SURINAM: return "nl_SR";
Packit 709fb3
          }
Packit 709fb3
        return "nl";
Packit 709fb3
      case LANG_EDO:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_DEFAULT: return "bin_NG";
Packit 709fb3
          }
Packit 709fb3
        return "bin";
Packit 709fb3
      case LANG_ENGLISH:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          /* SUBLANG_ENGLISH_US == SUBLANG_DEFAULT. Heh. I thought
Packit 709fb3
           * English was the language spoken in England.
Packit 709fb3
           * Oh well.
Packit 709fb3
           */
Packit 709fb3
          case SUBLANG_ENGLISH_US: return "en_US";
Packit 709fb3
          case SUBLANG_ENGLISH_UK: return "en_GB";
Packit 709fb3
          case SUBLANG_ENGLISH_AUS: return "en_AU";
Packit 709fb3
          case SUBLANG_ENGLISH_CAN: return "en_CA";
Packit 709fb3
          case SUBLANG_ENGLISH_NZ: return "en_NZ";
Packit 709fb3
          case SUBLANG_ENGLISH_EIRE: return "en_IE";
Packit 709fb3
          case SUBLANG_ENGLISH_SOUTH_AFRICA: return "en_ZA";
Packit 709fb3
          case SUBLANG_ENGLISH_JAMAICA: return "en_JM";
Packit 709fb3
          case SUBLANG_ENGLISH_CARIBBEAN: return "en_GD"; /* Grenada? */
Packit 709fb3
          case SUBLANG_ENGLISH_BELIZE: return "en_BZ";
Packit 709fb3
          case SUBLANG_ENGLISH_TRINIDAD: return "en_TT";
Packit 709fb3
          case SUBLANG_ENGLISH_ZIMBABWE: return "en_ZW";
Packit 709fb3
          case SUBLANG_ENGLISH_PHILIPPINES: return "en_PH";
Packit 709fb3
          case SUBLANG_ENGLISH_INDONESIA: return "en_ID";
Packit 709fb3
          case SUBLANG_ENGLISH_HONGKONG: return "en_HK";
Packit 709fb3
          case SUBLANG_ENGLISH_INDIA: return "en_IN";
Packit 709fb3
          case SUBLANG_ENGLISH_MALAYSIA: return "en_MY";
Packit 709fb3
          case SUBLANG_ENGLISH_SINGAPORE: return "en_SG";
Packit 709fb3
          }
Packit 709fb3
        return "en";
Packit 709fb3
      case LANG_ESTONIAN:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_ESTONIAN_ESTONIA: return "et_EE";
Packit 709fb3
          }
Packit 709fb3
        return "et";
Packit 709fb3
      case LANG_FAEROESE:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_FAEROESE_FAROE_ISLANDS: return "fo_FO";
Packit 709fb3
          }
Packit 709fb3
        return "fo";
Packit 709fb3
      case LANG_FARSI:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_FARSI_IRAN: return "fa_IR";
Packit 709fb3
          }
Packit 709fb3
        return "fa";
Packit 709fb3
      case LANG_FINNISH:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_FINNISH_FINLAND: return "fi_FI";
Packit 709fb3
          }
Packit 709fb3
        return "fi";
Packit 709fb3
      case LANG_FRENCH:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_FRENCH: return "fr_FR";
Packit 709fb3
          case SUBLANG_FRENCH_BELGIAN: /* WALLOON */ return "fr_BE";
Packit 709fb3
          case SUBLANG_FRENCH_CANADIAN: return "fr_CA";
Packit 709fb3
          case SUBLANG_FRENCH_SWISS: return "fr_CH";
Packit 709fb3
          case SUBLANG_FRENCH_LUXEMBOURG: return "fr_LU";
Packit 709fb3
          case SUBLANG_FRENCH_MONACO: return "fr_MC";
Packit 709fb3
          case SUBLANG_FRENCH_WESTINDIES: return "fr"; /* Caribbean? */
Packit 709fb3
          case SUBLANG_FRENCH_REUNION: return "fr_RE";
Packit 709fb3
          case SUBLANG_FRENCH_CONGO: return "fr_CG";
Packit 709fb3
          case SUBLANG_FRENCH_SENEGAL: return "fr_SN";
Packit 709fb3
          case SUBLANG_FRENCH_CAMEROON: return "fr_CM";
Packit 709fb3
          case SUBLANG_FRENCH_COTEDIVOIRE: return "fr_CI";
Packit 709fb3
          case SUBLANG_FRENCH_MALI: return "fr_ML";
Packit 709fb3
          case SUBLANG_FRENCH_MOROCCO: return "fr_MA";
Packit 709fb3
          case SUBLANG_FRENCH_HAITI: return "fr_HT";
Packit 709fb3
          }
Packit 709fb3
        return "fr";
Packit 709fb3
      case LANG_FRISIAN:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_FRISIAN_NETHERLANDS: return "fy_NL";
Packit 709fb3
          }
Packit 709fb3
        return "fy";
Packit 709fb3
      case LANG_FULFULDE:
Packit 709fb3
        /* Spoken in Nigeria, Guinea, Senegal, Mali, Niger, Cameroon, Benin.  */
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_DEFAULT: return "ff_NG";
Packit 709fb3
          }
Packit 709fb3
        return "ff";
Packit 709fb3
      case LANG_GAELIC:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case 0x01: /* SCOTTISH */
Packit 709fb3
            /* old, superseded by LANG_SCOTTISH_GAELIC */
Packit 709fb3
            return "gd_GB";
Packit 709fb3
          case SUBLANG_IRISH_IRELAND: return "ga_IE";
Packit 709fb3
          }
Packit 709fb3
        return "ga";
Packit 709fb3
      case LANG_GALICIAN:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_GALICIAN_SPAIN: return "gl_ES";
Packit 709fb3
          }
Packit 709fb3
        return "gl";
Packit 709fb3
      case LANG_GEORGIAN:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_GEORGIAN_GEORGIA: return "ka_GE";
Packit 709fb3
          }
Packit 709fb3
        return "ka";
Packit 709fb3
      case LANG_GERMAN:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_GERMAN: return "de_DE";
Packit 709fb3
          case SUBLANG_GERMAN_SWISS: return "de_CH";
Packit 709fb3
          case SUBLANG_GERMAN_AUSTRIAN: return "de_AT";
Packit 709fb3
          case SUBLANG_GERMAN_LUXEMBOURG: return "de_LU";
Packit 709fb3
          case SUBLANG_GERMAN_LIECHTENSTEIN: return "de_LI";
Packit 709fb3
          }
Packit 709fb3
        return "de";
Packit 709fb3
      case LANG_GREEK:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_GREEK_GREECE: return "el_GR";
Packit 709fb3
          }
Packit 709fb3
        return "el";
Packit 709fb3
      case LANG_GREENLANDIC:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_GREENLANDIC_GREENLAND: return "kl_GL";
Packit 709fb3
          }
Packit 709fb3
        return "kl";
Packit 709fb3
      case LANG_GUARANI:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_DEFAULT: return "gn_PY";
Packit 709fb3
          }
Packit 709fb3
        return "gn";
Packit 709fb3
      case LANG_GUJARATI:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_GUJARATI_INDIA: return "gu_IN";
Packit 709fb3
          }
Packit 709fb3
        return "gu";
Packit 709fb3
      case LANG_HAUSA:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case 0x1f: return "ha";
Packit 709fb3
          case SUBLANG_HAUSA_NIGERIA_LATIN: return "ha_NG";
Packit 709fb3
          }
Packit 709fb3
        return "ha";
Packit 709fb3
      case LANG_HAWAIIAN:
Packit 709fb3
        /* FIXME: Do they mean Hawaiian ("haw_US", 1000 speakers)
Packit 709fb3
           or Hawaii Creole English ("cpe_US", 600000 speakers)?  */
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_DEFAULT: return "cpe_US";
Packit 709fb3
          }
Packit 709fb3
        return "cpe";
Packit 709fb3
      case LANG_HEBREW:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_HEBREW_ISRAEL: return "he_IL";
Packit 709fb3
          }
Packit 709fb3
        return "he";
Packit 709fb3
      case LANG_HINDI:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_HINDI_INDIA: return "hi_IN";
Packit 709fb3
          }
Packit 709fb3
        return "hi";
Packit 709fb3
      case LANG_HUNGARIAN:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_HUNGARIAN_HUNGARY: return "hu_HU";
Packit 709fb3
          }
Packit 709fb3
        return "hu";
Packit 709fb3
      case LANG_IBIBIO:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_DEFAULT: return "nic_NG";
Packit 709fb3
          }
Packit 709fb3
        return "nic";
Packit 709fb3
      case LANG_ICELANDIC:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_ICELANDIC_ICELAND: return "is_IS";
Packit 709fb3
          }
Packit 709fb3
        return "is";
Packit 709fb3
      case LANG_IGBO:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_IGBO_NIGERIA: return "ig_NG";
Packit 709fb3
          }
Packit 709fb3
        return "ig";
Packit 709fb3
      case LANG_INDONESIAN:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_INDONESIAN_INDONESIA: return "id_ID";
Packit 709fb3
          }
Packit 709fb3
        return "id";
Packit 709fb3
      case LANG_INUKTITUT:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case 0x1e: return "iu"; /* syllabic */
Packit 709fb3
          case SUBLANG_INUKTITUT_CANADA: return "iu_CA"; /* syllabic */
Packit 709fb3
          case 0x1f: return "iu@latin";
Packit 709fb3
          case SUBLANG_INUKTITUT_CANADA_LATIN: return "iu_CA@latin";
Packit 709fb3
          }
Packit 709fb3
        return "iu";
Packit 709fb3
      case LANG_ITALIAN:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_ITALIAN: return "it_IT";
Packit 709fb3
          case SUBLANG_ITALIAN_SWISS: return "it_CH";
Packit 709fb3
          }
Packit 709fb3
        return "it";
Packit 709fb3
      case LANG_JAPANESE:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_JAPANESE_JAPAN: return "ja_JP";
Packit 709fb3
          }
Packit 709fb3
        return "ja";
Packit 709fb3
      case LANG_KANNADA:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_KANNADA_INDIA: return "kn_IN";
Packit 709fb3
          }
Packit 709fb3
        return "kn";
Packit 709fb3
      case LANG_KANURI:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_DEFAULT: return "kr_NG";
Packit 709fb3
          }
Packit 709fb3
        return "kr";
Packit 709fb3
      case LANG_KASHMIRI:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_DEFAULT: return "ks_PK";
Packit 709fb3
          case SUBLANG_KASHMIRI_INDIA: return "ks_IN";
Packit 709fb3
          }
Packit 709fb3
        return "ks";
Packit 709fb3
      case LANG_KAZAK:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_KAZAK_KAZAKHSTAN: return "kk_KZ";
Packit 709fb3
          }
Packit 709fb3
        return "kk";
Packit 709fb3
      case LANG_KICHE:
Packit 709fb3
        /* FIXME: Adjust this when such locales appear on Unix.  */
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_KICHE_GUATEMALA: return "qut_GT";
Packit 709fb3
          }
Packit 709fb3
        return "qut";
Packit 709fb3
      case LANG_KINYARWANDA:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_KINYARWANDA_RWANDA: return "rw_RW";
Packit 709fb3
          }
Packit 709fb3
        return "rw";
Packit 709fb3
      case LANG_KONKANI:
Packit 709fb3
        /* FIXME: Adjust this when such locales appear on Unix.  */
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_KONKANI_INDIA: return "kok_IN";
Packit 709fb3
          }
Packit 709fb3
        return "kok";
Packit 709fb3
      case LANG_KOREAN:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_DEFAULT: return "ko_KR";
Packit 709fb3
          }
Packit 709fb3
        return "ko";
Packit 709fb3
      case LANG_KYRGYZ:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_KYRGYZ_KYRGYZSTAN: return "ky_KG";
Packit 709fb3
          }
Packit 709fb3
        return "ky";
Packit 709fb3
      case LANG_LAO:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_LAO_LAOS: return "lo_LA";
Packit 709fb3
          }
Packit 709fb3
        return "lo";
Packit 709fb3
      case LANG_LATIN:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_DEFAULT: return "la_VA";
Packit 709fb3
          }
Packit 709fb3
        return "la";
Packit 709fb3
      case LANG_LATVIAN:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_LATVIAN_LATVIA: return "lv_LV";
Packit 709fb3
          }
Packit 709fb3
        return "lv";
Packit 709fb3
      case LANG_LITHUANIAN:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_LITHUANIAN_LITHUANIA: return "lt_LT";
Packit 709fb3
          }
Packit 709fb3
        return "lt";
Packit 709fb3
      case LANG_LUXEMBOURGISH:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_LUXEMBOURGISH_LUXEMBOURG: return "lb_LU";
Packit 709fb3
          }
Packit 709fb3
        return "lb";
Packit 709fb3
      case LANG_MACEDONIAN:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_MACEDONIAN_MACEDONIA: return "mk_MK";
Packit 709fb3
          }
Packit 709fb3
        return "mk";
Packit 709fb3
      case LANG_MALAY:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_MALAY_MALAYSIA: return "ms_MY";
Packit 709fb3
          case SUBLANG_MALAY_BRUNEI_DARUSSALAM: return "ms_BN";
Packit 709fb3
          }
Packit 709fb3
        return "ms";
Packit 709fb3
      case LANG_MALAYALAM:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_MALAYALAM_INDIA: return "ml_IN";
Packit 709fb3
          }
Packit 709fb3
        return "ml";
Packit 709fb3
      case LANG_MALTESE:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_MALTESE_MALTA: return "mt_MT";
Packit 709fb3
          }
Packit 709fb3
        return "mt";
Packit 709fb3
      case LANG_MANIPURI:
Packit 709fb3
        /* FIXME: Adjust this when such locales appear on Unix.  */
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_DEFAULT: return "mni_IN";
Packit 709fb3
          }
Packit 709fb3
        return "mni";
Packit 709fb3
      case LANG_MAORI:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_MAORI_NEW_ZEALAND: return "mi_NZ";
Packit 709fb3
          }
Packit 709fb3
        return "mi";
Packit 709fb3
      case LANG_MAPUDUNGUN:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_MAPUDUNGUN_CHILE: return "arn_CL";
Packit 709fb3
          }
Packit 709fb3
        return "arn";
Packit 709fb3
      case LANG_MARATHI:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_MARATHI_INDIA: return "mr_IN";
Packit 709fb3
          }
Packit 709fb3
        return "mr";
Packit 709fb3
      case LANG_MOHAWK:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_MOHAWK_CANADA: return "moh_CA";
Packit 709fb3
          }
Packit 709fb3
        return "moh";
Packit 709fb3
      case LANG_MONGOLIAN:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_MONGOLIAN_CYRILLIC_MONGOLIA: case 0x1e: return "mn_MN";
Packit 709fb3
          case SUBLANG_MONGOLIAN_PRC: case 0x1f: return "mn_CN";
Packit 709fb3
          }
Packit 709fb3
        return "mn"; /* Ambiguous: could be "mn_CN" or "mn_MN".  */
Packit 709fb3
      case LANG_NEPALI:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_NEPALI_NEPAL: return "ne_NP";
Packit 709fb3
          case SUBLANG_NEPALI_INDIA: return "ne_IN";
Packit 709fb3
          }
Packit 709fb3
        return "ne";
Packit 709fb3
      case LANG_NORWEGIAN:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case 0x1f: return "nb";
Packit 709fb3
          case SUBLANG_NORWEGIAN_BOKMAL: return "nb_NO";
Packit 709fb3
          case 0x1e: return "nn";
Packit 709fb3
          case SUBLANG_NORWEGIAN_NYNORSK: return "nn_NO";
Packit 709fb3
          }
Packit 709fb3
        return "no";
Packit 709fb3
      case LANG_OCCITAN:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_OCCITAN_FRANCE: return "oc_FR";
Packit 709fb3
          }
Packit 709fb3
        return "oc";
Packit 709fb3
      case LANG_ORIYA:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_ORIYA_INDIA: return "or_IN";
Packit 709fb3
          }
Packit 709fb3
        return "or";
Packit 709fb3
      case LANG_OROMO:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_DEFAULT: return "om_ET";
Packit 709fb3
          }
Packit 709fb3
        return "om";
Packit 709fb3
      case LANG_PAPIAMENTU:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_DEFAULT: return "pap_AN";
Packit 709fb3
          }
Packit 709fb3
        return "pap";
Packit 709fb3
      case LANG_PASHTO:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_PASHTO_AFGHANISTAN: return "ps_AF";
Packit 709fb3
          }
Packit 709fb3
        return "ps"; /* Ambiguous: could be "ps_PK" or "ps_AF".  */
Packit 709fb3
      case LANG_POLISH:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_POLISH_POLAND: return "pl_PL";
Packit 709fb3
          }
Packit 709fb3
        return "pl";
Packit 709fb3
      case LANG_PORTUGUESE:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          /* Hmm. SUBLANG_PORTUGUESE_BRAZILIAN == SUBLANG_DEFAULT.
Packit 709fb3
             Same phenomenon as SUBLANG_ENGLISH_US == SUBLANG_DEFAULT. */
Packit 709fb3
          case SUBLANG_PORTUGUESE_BRAZILIAN: return "pt_BR";
Packit 709fb3
          case SUBLANG_PORTUGUESE: return "pt_PT";
Packit 709fb3
          }
Packit 709fb3
        return "pt";
Packit 709fb3
      case LANG_PUNJABI:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_PUNJABI_INDIA: return "pa_IN"; /* Gurmukhi script */
Packit 709fb3
          case SUBLANG_PUNJABI_PAKISTAN: return "pa_PK"; /* Arabic script */
Packit 709fb3
          }
Packit 709fb3
        return "pa";
Packit 709fb3
      case LANG_QUECHUA:
Packit 709fb3
        /* Note: Microsoft uses the non-ISO language code "quz".  */
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_QUECHUA_BOLIVIA: return "qu_BO";
Packit 709fb3
          case SUBLANG_QUECHUA_ECUADOR: return "qu_EC";
Packit 709fb3
          case SUBLANG_QUECHUA_PERU: return "qu_PE";
Packit 709fb3
          }
Packit 709fb3
        return "qu";
Packit 709fb3
      case LANG_ROMANIAN:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_ROMANIAN_ROMANIA: return "ro_RO";
Packit 709fb3
          case SUBLANG_ROMANIAN_MOLDOVA: return "ro_MD";
Packit 709fb3
          }
Packit 709fb3
        return "ro";
Packit 709fb3
      case LANG_ROMANSH:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_ROMANSH_SWITZERLAND: return "rm_CH";
Packit 709fb3
          }
Packit 709fb3
        return "rm";
Packit 709fb3
      case LANG_RUSSIAN:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_RUSSIAN_RUSSIA: return "ru_RU";
Packit 709fb3
          case SUBLANG_RUSSIAN_MOLDAVIA: return "ru_MD";
Packit 709fb3
          }
Packit 709fb3
        return "ru"; /* Ambiguous: could be "ru_RU" or "ru_UA" or "ru_MD".  */
Packit 709fb3
      case LANG_SAMI:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          /* Northern Sami */
Packit 709fb3
          case 0x00: return "se";
Packit 709fb3
          case SUBLANG_SAMI_NORTHERN_NORWAY: return "se_NO";
Packit 709fb3
          case SUBLANG_SAMI_NORTHERN_SWEDEN: return "se_SE";
Packit 709fb3
          case SUBLANG_SAMI_NORTHERN_FINLAND: return "se_FI";
Packit 709fb3
          /* Lule Sami */
Packit 709fb3
          case 0x1f: return "smj";
Packit 709fb3
          case SUBLANG_SAMI_LULE_NORWAY: return "smj_NO";
Packit 709fb3
          case SUBLANG_SAMI_LULE_SWEDEN: return "smj_SE";
Packit 709fb3
          /* Southern Sami */
Packit 709fb3
          case 0x1e: return "sma";
Packit 709fb3
          case SUBLANG_SAMI_SOUTHERN_NORWAY: return "sma_NO";
Packit 709fb3
          case SUBLANG_SAMI_SOUTHERN_SWEDEN: return "sma_SE";
Packit 709fb3
          /* Skolt Sami */
Packit 709fb3
          case 0x1d: return "sms";
Packit 709fb3
          case SUBLANG_SAMI_SKOLT_FINLAND: return "sms_FI";
Packit 709fb3
          /* Inari Sami */
Packit 709fb3
          case 0x1c: return "smn";
Packit 709fb3
          case SUBLANG_SAMI_INARI_FINLAND: return "smn_FI";
Packit 709fb3
          }
Packit 709fb3
        return "se"; /* or "smi"? */
Packit 709fb3
      case LANG_SANSKRIT:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_SANSKRIT_INDIA: return "sa_IN";
Packit 709fb3
          }
Packit 709fb3
        return "sa";
Packit 709fb3
      case LANG_SCOTTISH_GAELIC:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_DEFAULT: return "gd_GB";
Packit 709fb3
          }
Packit 709fb3
        return "gd";
Packit 709fb3
      case LANG_SINDHI:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_SINDHI_INDIA: return "sd_IN";
Packit 709fb3
          case SUBLANG_SINDHI_PAKISTAN: return "sd_PK";
Packit 709fb3
          /*case SUBLANG_SINDHI_AFGHANISTAN: return "sd_AF";*/
Packit 709fb3
          }
Packit 709fb3
        return "sd";
Packit 709fb3
      case LANG_SINHALESE:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_SINHALESE_SRI_LANKA: return "si_LK";
Packit 709fb3
          }
Packit 709fb3
        return "si";
Packit 709fb3
      case LANG_SLOVAK:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_SLOVAK_SLOVAKIA: return "sk_SK";
Packit 709fb3
          }
Packit 709fb3
        return "sk";
Packit 709fb3
      case LANG_SLOVENIAN:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_SLOVENIAN_SLOVENIA: return "sl_SI";
Packit 709fb3
          }
Packit 709fb3
        return "sl";
Packit 709fb3
      case LANG_SOMALI:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_DEFAULT: return "so_SO";
Packit 709fb3
          }
Packit 709fb3
        return "so";
Packit 709fb3
      case LANG_SORBIAN:
Packit 709fb3
        /* FIXME: Adjust this when such locales appear on Unix.  */
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          /* Upper Sorbian */
Packit 709fb3
          case 0x00: return "hsb";
Packit 709fb3
          case SUBLANG_UPPER_SORBIAN_GERMANY: return "hsb_DE";
Packit 709fb3
          /* Lower Sorbian */
Packit 709fb3
          case 0x1f: return "dsb";
Packit 709fb3
          case SUBLANG_LOWER_SORBIAN_GERMANY: return "dsb_DE";
Packit 709fb3
          }
Packit 709fb3
        return "wen";
Packit 709fb3
      case LANG_SOTHO:
Packit 709fb3
        /* <http://www.microsoft.com/globaldev/reference/lcid-all.mspx> calls
Packit 709fb3
           it "Sepedi"; according to
Packit 709fb3
           <http://www.ethnologue.com/show_language.asp?code=nso>
Packit 709fb3
           <http://www.ethnologue.com/show_language.asp?code=sot>
Packit 709fb3
           it's the same as Northern Sotho.  */
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_SOTHO_SOUTH_AFRICA: return "nso_ZA";
Packit 709fb3
          }
Packit 709fb3
        return "nso";
Packit 709fb3
      case LANG_SPANISH:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_SPANISH: return "es_ES";
Packit 709fb3
          case SUBLANG_SPANISH_MEXICAN: return "es_MX";
Packit 709fb3
          case SUBLANG_SPANISH_MODERN:
Packit 709fb3
            return "es_ES@modern";      /* not seen on Unix */
Packit 709fb3
          case SUBLANG_SPANISH_GUATEMALA: return "es_GT";
Packit 709fb3
          case SUBLANG_SPANISH_COSTA_RICA: return "es_CR";
Packit 709fb3
          case SUBLANG_SPANISH_PANAMA: return "es_PA";
Packit 709fb3
          case SUBLANG_SPANISH_DOMINICAN_REPUBLIC: return "es_DO";
Packit 709fb3
          case SUBLANG_SPANISH_VENEZUELA: return "es_VE";
Packit 709fb3
          case SUBLANG_SPANISH_COLOMBIA: return "es_CO";
Packit 709fb3
          case SUBLANG_SPANISH_PERU: return "es_PE";
Packit 709fb3
          case SUBLANG_SPANISH_ARGENTINA: return "es_AR";
Packit 709fb3
          case SUBLANG_SPANISH_ECUADOR: return "es_EC";
Packit 709fb3
          case SUBLANG_SPANISH_CHILE: return "es_CL";
Packit 709fb3
          case SUBLANG_SPANISH_URUGUAY: return "es_UY";
Packit 709fb3
          case SUBLANG_SPANISH_PARAGUAY: return "es_PY";
Packit 709fb3
          case SUBLANG_SPANISH_BOLIVIA: return "es_BO";
Packit 709fb3
          case SUBLANG_SPANISH_EL_SALVADOR: return "es_SV";
Packit 709fb3
          case SUBLANG_SPANISH_HONDURAS: return "es_HN";
Packit 709fb3
          case SUBLANG_SPANISH_NICARAGUA: return "es_NI";
Packit 709fb3
          case SUBLANG_SPANISH_PUERTO_RICO: return "es_PR";
Packit 709fb3
          case SUBLANG_SPANISH_US: return "es_US";
Packit 709fb3
          }
Packit 709fb3
        return "es";
Packit 709fb3
      case LANG_SUTU:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_DEFAULT: return "bnt_TZ"; /* or "st_LS" or "nso_ZA"? */
Packit 709fb3
          }
Packit 709fb3
        return "bnt";
Packit 709fb3
      case LANG_SWAHILI:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_SWAHILI_KENYA: return "sw_KE";
Packit 709fb3
          }
Packit 709fb3
        return "sw";
Packit 709fb3
      case LANG_SWEDISH:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_SWEDISH_SWEDEN: return "sv_SE";
Packit 709fb3
          case SUBLANG_SWEDISH_FINLAND: return "sv_FI";
Packit 709fb3
          }
Packit 709fb3
        return "sv";
Packit 709fb3
      case LANG_SYRIAC:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_SYRIAC_SYRIA: return "syr_SY"; /* An extinct language.  */
Packit 709fb3
          }
Packit 709fb3
        return "syr";
Packit 709fb3
      case LANG_TAGALOG:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_TAGALOG_PHILIPPINES: return "tl_PH"; /* or "fil_PH"? */
Packit 709fb3
          }
Packit 709fb3
        return "tl"; /* or "fil"? */
Packit 709fb3
      case LANG_TAJIK:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case 0x1f: return "tg";
Packit 709fb3
          case SUBLANG_TAJIK_TAJIKISTAN: return "tg_TJ";
Packit 709fb3
          }
Packit 709fb3
        return "tg";
Packit 709fb3
      case LANG_TAMAZIGHT:
Packit 709fb3
        /* Note: Microsoft uses the non-ISO language code "tmz".  */
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          /* FIXME: Adjust this when Tamazight locales appear on Unix.  */
Packit 709fb3
          case SUBLANG_TAMAZIGHT_ARABIC: return "ber_MA@arabic";
Packit 709fb3
          case 0x1f: return "ber@latin";
Packit 709fb3
          case SUBLANG_TAMAZIGHT_ALGERIA_LATIN: return "ber_DZ@latin";
Packit 709fb3
          }
Packit 709fb3
        return "ber";
Packit 709fb3
      case LANG_TAMIL:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_TAMIL_INDIA: return "ta_IN";
Packit 709fb3
          }
Packit 709fb3
        return "ta"; /* Ambiguous: could be "ta_IN" or "ta_LK" or "ta_SG".  */
Packit 709fb3
      case LANG_TATAR:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_TATAR_RUSSIA: return "tt_RU";
Packit 709fb3
          }
Packit 709fb3
        return "tt";
Packit 709fb3
      case LANG_TELUGU:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_TELUGU_INDIA: return "te_IN";
Packit 709fb3
          }
Packit 709fb3
        return "te";
Packit 709fb3
      case LANG_THAI:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_THAI_THAILAND: return "th_TH";
Packit 709fb3
          }
Packit 709fb3
        return "th";
Packit 709fb3
      case LANG_TIBETAN:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_TIBETAN_PRC:
Packit 709fb3
            /* Most Tibetans would not like "bo_CN".  But Tibet does not yet
Packit 709fb3
               have a country code of its own.  */
Packit 709fb3
            return "bo";
Packit 709fb3
          case SUBLANG_TIBETAN_BHUTAN: return "bo_BT";
Packit 709fb3
          }
Packit 709fb3
        return "bo";
Packit 709fb3
      case LANG_TIGRINYA:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_TIGRINYA_ETHIOPIA: return "ti_ET";
Packit 709fb3
          case SUBLANG_TIGRINYA_ERITREA: return "ti_ER";
Packit 709fb3
          }
Packit 709fb3
        return "ti";
Packit 709fb3
      case LANG_TSONGA:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_DEFAULT: return "ts_ZA";
Packit 709fb3
          }
Packit 709fb3
        return "ts";
Packit 709fb3
      case LANG_TSWANA:
Packit 709fb3
        /* Spoken in South Africa, Botswana.  */
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_TSWANA_SOUTH_AFRICA: return "tn_ZA";
Packit 709fb3
          }
Packit 709fb3
        return "tn";
Packit 709fb3
      case LANG_TURKISH:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_TURKISH_TURKEY: return "tr_TR";
Packit 709fb3
          }
Packit 709fb3
        return "tr";
Packit 709fb3
      case LANG_TURKMEN:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_TURKMEN_TURKMENISTAN: return "tk_TM";
Packit 709fb3
          }
Packit 709fb3
        return "tk";
Packit 709fb3
      case LANG_UIGHUR:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_UIGHUR_PRC: return "ug_CN";
Packit 709fb3
          }
Packit 709fb3
        return "ug";
Packit 709fb3
      case LANG_UKRAINIAN:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_UKRAINIAN_UKRAINE: return "uk_UA";
Packit 709fb3
          }
Packit 709fb3
        return "uk";
Packit 709fb3
      case LANG_URDU:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_URDU_PAKISTAN: return "ur_PK";
Packit 709fb3
          case SUBLANG_URDU_INDIA: return "ur_IN";
Packit 709fb3
          }
Packit 709fb3
        return "ur";
Packit 709fb3
      case LANG_UZBEK:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case 0x1f: return "uz";
Packit 709fb3
          case SUBLANG_UZBEK_LATIN: return "uz_UZ";
Packit 709fb3
          case 0x1e: return "uz@cyrillic";
Packit 709fb3
          case SUBLANG_UZBEK_CYRILLIC: return "uz_UZ@cyrillic";
Packit 709fb3
          }
Packit 709fb3
        return "uz";
Packit 709fb3
      case LANG_VENDA:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_DEFAULT: return "ve_ZA";
Packit 709fb3
          }
Packit 709fb3
        return "ve";
Packit 709fb3
      case LANG_VIETNAMESE:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_VIETNAMESE_VIETNAM: return "vi_VN";
Packit 709fb3
          }
Packit 709fb3
        return "vi";
Packit 709fb3
      case LANG_WELSH:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_WELSH_UNITED_KINGDOM: return "cy_GB";
Packit 709fb3
          }
Packit 709fb3
        return "cy";
Packit 709fb3
      case LANG_WOLOF:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_WOLOF_SENEGAL: return "wo_SN";
Packit 709fb3
          }
Packit 709fb3
        return "wo";
Packit 709fb3
      case LANG_XHOSA:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_XHOSA_SOUTH_AFRICA: return "xh_ZA";
Packit 709fb3
          }
Packit 709fb3
        return "xh";
Packit 709fb3
      case LANG_YAKUT:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_YAKUT_RUSSIA: return "sah_RU";
Packit 709fb3
          }
Packit 709fb3
        return "sah";
Packit 709fb3
      case LANG_YI:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_YI_PRC: return "ii_CN";
Packit 709fb3
          }
Packit 709fb3
        return "ii";
Packit 709fb3
      case LANG_YIDDISH:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_DEFAULT: return "yi_IL";
Packit 709fb3
          }
Packit 709fb3
        return "yi";
Packit 709fb3
      case LANG_YORUBA:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_YORUBA_NIGERIA: return "yo_NG";
Packit 709fb3
          }
Packit 709fb3
        return "yo";
Packit 709fb3
      case LANG_ZULU:
Packit 709fb3
        switch (sub)
Packit 709fb3
          {
Packit 709fb3
          case SUBLANG_ZULU_SOUTH_AFRICA: return "zu_ZA";
Packit 709fb3
          }
Packit 709fb3
        return "zu";
Packit 709fb3
      default: return "C";
Packit 709fb3
      }
Packit 709fb3
  }
Packit 709fb3
}
Packit 709fb3
Packit 709fb3
# if !defined IN_LIBINTL
Packit 709fb3
static
Packit 709fb3
# endif
Packit 709fb3
const char *
Packit 709fb3
gl_locale_name_from_win32_LCID (LCID lcid)
Packit 709fb3
{
Packit 709fb3
  LANGID langid;
Packit 709fb3
Packit 709fb3
  /* Strip off the sorting rules, keep only the language part.  */
Packit 709fb3
  langid = LANGIDFROMLCID (lcid);
Packit 709fb3
Packit 709fb3
  return gl_locale_name_from_win32_LANGID (langid);
Packit 709fb3
}
Packit 709fb3
Packit 709fb3
# ifdef WINDOWS_NATIVE
Packit 709fb3
Packit 709fb3
/* Two variables to interface between get_lcid and the EnumLocales
Packit 709fb3
   callback function below.  */
Packit 709fb3
static LCID found_lcid;
Packit 709fb3
static char lname[LC_MAX * (LOCALE_NAME_MAX_LENGTH + 1) + 1];
Packit 709fb3
Packit 709fb3
/* Callback function for EnumLocales.  */
Packit 709fb3
static BOOL CALLBACK
Packit 709fb3
enum_locales_fn (LPTSTR locale_num_str)
Packit 709fb3
{
Packit 709fb3
  char *endp;
Packit 709fb3
  char locval[2 * LOCALE_NAME_MAX_LENGTH + 1 + 1];
Packit 709fb3
  LCID try_lcid = strtoul (locale_num_str, &endp, 16);
Packit 709fb3
Packit 709fb3
  if (GetLocaleInfo (try_lcid, LOCALE_SENGLANGUAGE,
Packit 709fb3
                    locval, LOCALE_NAME_MAX_LENGTH))
Packit 709fb3
    {
Packit 709fb3
      strcat (locval, "_");
Packit 709fb3
      if (GetLocaleInfo (try_lcid, LOCALE_SENGCOUNTRY,
Packit 709fb3
                        locval + strlen (locval), LOCALE_NAME_MAX_LENGTH))
Packit 709fb3
       {
Packit 709fb3
         size_t locval_len = strlen (locval);
Packit 709fb3
Packit 709fb3
         if (strncmp (locval, lname, locval_len) == 0
Packit 709fb3
             && (lname[locval_len] == '.'
Packit 709fb3
                 || lname[locval_len] == '\0'))
Packit 709fb3
           {
Packit 709fb3
             found_lcid = try_lcid;
Packit 709fb3
             return FALSE;
Packit 709fb3
           }
Packit 709fb3
       }
Packit 709fb3
    }
Packit 709fb3
  return TRUE;
Packit 709fb3
}
Packit 709fb3
Packit 709fb3
/* This lock protects the get_lcid against multiple simultaneous calls.  */
Packit 709fb3
gl_lock_define_initialized(static, get_lcid_lock)
Packit 709fb3
Packit 709fb3
/* Return the Locale ID (LCID) number given the locale's name, a
Packit 709fb3
   string, in LOCALE_NAME.  This works by enumerating all the locales
Packit 709fb3
   supported by the system, until we find one whose name matches
Packit 709fb3
   LOCALE_NAME.  */
Packit 709fb3
static LCID
Packit 709fb3
get_lcid (const char *locale_name)
Packit 709fb3
{
Packit 709fb3
  /* A simple cache.  */
Packit 709fb3
  static LCID last_lcid;
Packit 709fb3
  static char last_locale[1000];
Packit 709fb3
Packit 709fb3
  /* Lock while looking for an LCID, to protect access to static
Packit 709fb3
     variables: last_lcid, last_locale, found_lcid, and lname.  */
Packit 709fb3
  gl_lock_lock (get_lcid_lock);
Packit 709fb3
  if (last_lcid > 0 && strcmp (locale_name, last_locale) == 0)
Packit 709fb3
    {
Packit 709fb3
      gl_lock_unlock (get_lcid_lock);
Packit 709fb3
      return last_lcid;
Packit 709fb3
    }
Packit 709fb3
  strncpy (lname, locale_name, sizeof (lname) - 1);
Packit 709fb3
  lname[sizeof (lname) - 1] = '\0';
Packit 709fb3
  found_lcid = 0;
Packit 709fb3
  EnumSystemLocales (enum_locales_fn, LCID_SUPPORTED);
Packit 709fb3
  if (found_lcid > 0)
Packit 709fb3
    {
Packit 709fb3
      last_lcid = found_lcid;
Packit 709fb3
      strcpy (last_locale, locale_name);
Packit 709fb3
    }
Packit 709fb3
  gl_lock_unlock (get_lcid_lock);
Packit 709fb3
  return found_lcid;
Packit 709fb3
}
Packit 709fb3
Packit 709fb3
# endif
Packit 709fb3
#endif
Packit 709fb3
Packit 709fb3
Packit 709fb3
#if HAVE_USELOCALE /* glibc, Solaris >= 12 or Mac OS X */
Packit 709fb3
Packit 709fb3
/* Simple hash set of strings.  We don't want to drag in lots of hash table
Packit 709fb3
   code here.  */
Packit 709fb3
Packit 709fb3
# define SIZE_BITS (sizeof (size_t) * CHAR_BIT)
Packit 709fb3
Packit 709fb3
/* A hash function for NUL-terminated char* strings using
Packit 709fb3
   the method described by Bruno Haible.
Packit 709fb3
   See http://www.haible.de/bruno/hashfunc.html.  */
Packit 709fb3
static size_t _GL_ATTRIBUTE_PURE
Packit 709fb3
string_hash (const void *x)
Packit 709fb3
{
Packit 709fb3
  const char *s = (const char *) x;
Packit 709fb3
  size_t h = 0;
Packit 709fb3
Packit 709fb3
  for (; *s; s++)
Packit 709fb3
    h = *s + ((h << 9) | (h >> (SIZE_BITS - 9)));
Packit 709fb3
Packit 709fb3
  return h;
Packit 709fb3
}
Packit 709fb3
Packit 709fb3
/* A hash table of fixed size.  Multiple threads can access it read-only
Packit 709fb3
   simultaneously, but only one thread can insert into it at the same time.  */
Packit 709fb3
Packit 709fb3
/* A node in a hash bucket collision list.  */
Packit 709fb3
struct hash_node
Packit 709fb3
  {
Packit 709fb3
    struct hash_node * volatile next;
Packit 709fb3
    char contents[FLEXIBLE_ARRAY_MEMBER];
Packit 709fb3
  };
Packit 709fb3
Packit 709fb3
# define HASH_TABLE_SIZE 257
Packit 709fb3
static struct hash_node * volatile struniq_hash_table[HASH_TABLE_SIZE]
Packit 709fb3
  /* = { NULL, ..., NULL } */;
Packit 709fb3
Packit 709fb3
/* This lock protects the struniq_hash_table against multiple simultaneous
Packit 709fb3
   insertions.  */
Packit 709fb3
gl_lock_define_initialized(static, struniq_lock)
Packit 709fb3
Packit 709fb3
/* Store a copy of the given string in a string pool with indefinite extent.
Packit 709fb3
   Return a pointer to this copy.  */
Packit 709fb3
static const char *
Packit 709fb3
struniq (const char *string)
Packit 709fb3
{
Packit 709fb3
  size_t hashcode = string_hash (string);
Packit 709fb3
  size_t slot = hashcode % HASH_TABLE_SIZE;
Packit 709fb3
  size_t size;
Packit 709fb3
  struct hash_node *new_node;
Packit 709fb3
  struct hash_node *p;
Packit 709fb3
  for (p = struniq_hash_table[slot]; p != NULL; p = p->next)
Packit 709fb3
    if (strcmp (p->contents, string) == 0)
Packit 709fb3
      return p->contents;
Packit 709fb3
  size = strlen (string) + 1;
Packit 709fb3
  new_node =
Packit 709fb3
    (struct hash_node *)
Packit 709fb3
    malloc (FLEXSIZEOF (struct hash_node, contents, size));
Packit 709fb3
  if (new_node == NULL)
Packit 709fb3
    /* Out of memory.  Return a statically allocated string.  */
Packit 709fb3
    return "C";
Packit 709fb3
  memcpy (new_node->contents, string, size);
Packit 709fb3
  /* Lock while inserting new_node.  */
Packit 709fb3
  gl_lock_lock (struniq_lock);
Packit 709fb3
  /* Check whether another thread already added the string while we were
Packit 709fb3
     waiting on the lock.  */
Packit 709fb3
  for (p = struniq_hash_table[slot]; p != NULL; p = p->next)
Packit 709fb3
    if (strcmp (p->contents, string) == 0)
Packit 709fb3
      {
Packit 709fb3
        free (new_node);
Packit 709fb3
        new_node = p;
Packit 709fb3
        goto done;
Packit 709fb3
      }
Packit 709fb3
  /* Really insert new_node into the hash table.  Fill new_node entirely first,
Packit 709fb3
     because other threads may be iterating over the linked list.  */
Packit 709fb3
  new_node->next = struniq_hash_table[slot];
Packit 709fb3
  struniq_hash_table[slot] = new_node;
Packit 709fb3
 done:
Packit 709fb3
  /* Unlock after new_node is inserted.  */
Packit 709fb3
  gl_lock_unlock (struniq_lock);
Packit 709fb3
  return new_node->contents;
Packit 709fb3
}
Packit 709fb3
Packit 709fb3
#endif
Packit 709fb3
Packit 709fb3
Packit 709fb3
#if defined IN_LIBINTL || HAVE_USELOCALE
Packit 709fb3
Packit 709fb3
/* Like gl_locale_name_thread, except that the result is not in storage of
Packit 709fb3
   indefinite extent.  */
Packit 709fb3
# if !defined IN_LIBINTL
Packit 709fb3
static
Packit 709fb3
# endif
Packit 709fb3
const char *
Packit 709fb3
gl_locale_name_thread_unsafe (int category, const char *categoryname)
Packit 709fb3
{
Packit 709fb3
# if HAVE_USELOCALE
Packit 709fb3
  {
Packit 709fb3
    locale_t thread_locale = uselocale (NULL);
Packit 709fb3
    if (thread_locale != LC_GLOBAL_LOCALE)
Packit 709fb3
      {
Packit 709fb3
#  if __GLIBC__ >= 2 && !defined __UCLIBC__
Packit 709fb3
        /* Work around an incorrect definition of the _NL_LOCALE_NAME macro in
Packit 709fb3
           glibc < 2.12.
Packit 709fb3
           See <http://sourceware.org/bugzilla/show_bug.cgi?id=10968>.  */
Packit 709fb3
        const char *name =
Packit 709fb3
          nl_langinfo (_NL_ITEM ((category), _NL_ITEM_INDEX (-1)));
Packit 709fb3
        if (name[0] == '\0')
Packit 709fb3
          /* Fallback code for glibc < 2.4, which did not implement
Packit 709fb3
             nl_langinfo (_NL_LOCALE_NAME (category)).  */
Packit 709fb3
          name = thread_locale->__names[category];
Packit 709fb3
        return name;
Packit 709fb3
#  elif (defined __FreeBSD__ || defined __DragonFly__) || (defined __APPLE__ && defined __MACH__)
Packit 709fb3
        /* FreeBSD, Mac OS X */
Packit 709fb3
        int mask;
Packit 709fb3
Packit 709fb3
        switch (category)
Packit 709fb3
          {
Packit 709fb3
          case LC_CTYPE:
Packit 709fb3
            mask = LC_CTYPE_MASK;
Packit 709fb3
            break;
Packit 709fb3
          case LC_NUMERIC:
Packit 709fb3
            mask = LC_NUMERIC_MASK;
Packit 709fb3
            break;
Packit 709fb3
          case LC_TIME:
Packit 709fb3
            mask = LC_TIME_MASK;
Packit 709fb3
            break;
Packit 709fb3
          case LC_COLLATE:
Packit 709fb3
            mask = LC_COLLATE_MASK;
Packit 709fb3
            break;
Packit 709fb3
          case LC_MONETARY:
Packit 709fb3
            mask = LC_MONETARY_MASK;
Packit 709fb3
            break;
Packit 709fb3
          case LC_MESSAGES:
Packit 709fb3
            mask = LC_MESSAGES_MASK;
Packit 709fb3
            break;
Packit 709fb3
          default: /* We shouldn't get here.  */
Packit 709fb3
            return "";
Packit 709fb3
          }
Packit 709fb3
        return querylocale (mask, thread_locale);
Packit 709fb3
#  elif defined __sun && HAVE_GETLOCALENAME_L
Packit 709fb3
        /* Solaris >= 12.  */
Packit 709fb3
        return getlocalename_l (category, thread_locale);
Packit 709fb3
#  elif defined __CYGWIN__
Packit 709fb3
        /* Cygwin < 2.6 lacks uselocale and thread-local locales altogether.
Packit 709fb3
           Cygwin <= 2.6.1 lacks NL_LOCALE_NAME, requiring peeking inside
Packit 709fb3
           an opaque struct.  */
Packit 709fb3
#   ifdef NL_LOCALE_NAME
Packit 709fb3
        return nl_langinfo_l (NL_LOCALE_NAME (category), thread_locale);
Packit 709fb3
#   else
Packit 709fb3
        /* FIXME: Remove when we can assume new-enough Cygwin.  */
Packit 709fb3
        struct __locale_t {
Packit 709fb3
          char categories[7][32];
Packit 709fb3
        };
Packit 709fb3
        return ((struct __locale_t *) thread_locale)->categories[category];
Packit 709fb3
#   endif
Packit 709fb3
#  elif defined __ANDROID__
Packit 709fb3
        return MB_CUR_MAX == 4 ? "C.UTF-8" : "C";
Packit 709fb3
#  endif
Packit 709fb3
      }
Packit 709fb3
  }
Packit 709fb3
# endif
Packit 709fb3
  return NULL;
Packit 709fb3
}
Packit 709fb3
Packit 709fb3
#endif
Packit 709fb3
Packit 709fb3
const char *
Packit 709fb3
gl_locale_name_thread (int category, const char *categoryname)
Packit 709fb3
{
Packit 709fb3
#if HAVE_USELOCALE
Packit 709fb3
  const char *name = gl_locale_name_thread_unsafe (category, categoryname);
Packit 709fb3
  if (name != NULL)
Packit 709fb3
    return struniq (name);
Packit 709fb3
#elif defined WINDOWS_NATIVE
Packit 709fb3
  if (LC_MIN <= category && category <= LC_MAX)
Packit 709fb3
    {
Packit 709fb3
      char *locname = setlocale (category, NULL);
Packit 709fb3
      LCID lcid = 0;
Packit 709fb3
Packit 709fb3
      /* If CATEGORY is LC_ALL, the result might be a semi-colon
Packit 709fb3
        separated list of locales.  We need only one, so we take the
Packit 709fb3
        one corresponding to LC_CTYPE, as the most important for
Packit 709fb3
        character translations.  */
Packit 709fb3
      if (strchr (locname, ';'))
Packit 709fb3
       locname = setlocale (LC_CTYPE, NULL);
Packit 709fb3
Packit 709fb3
      /* Convert locale name to LCID.  We don't want to use
Packit 709fb3
         LocaleNameToLCID because (a) it is only available since Vista,
Packit 709fb3
         and (b) it doesn't accept locale names returned by 'setlocale'.  */
Packit 709fb3
      lcid = get_lcid (locname);
Packit 709fb3
Packit 709fb3
      if (lcid > 0)
Packit 709fb3
        return gl_locale_name_from_win32_LCID (lcid);
Packit 709fb3
    }
Packit 709fb3
#endif
Packit 709fb3
  return NULL;
Packit 709fb3
}
Packit 709fb3
Packit 709fb3
/* XPG3 defines the result of 'setlocale (category, NULL)' as:
Packit 709fb3
   "Directs 'setlocale()' to query 'category' and return the current
Packit 709fb3
    setting of 'local'."
Packit 709fb3
   However it does not specify the exact format.  Neither do SUSV2 and
Packit 709fb3
   ISO C 99.  So we can use this feature only on selected systems (e.g.
Packit 709fb3
   those using GNU C Library).  */
Packit 709fb3
#if defined _LIBC || ((defined __GLIBC__ && __GLIBC__ >= 2) && !defined __UCLIBC__)
Packit 709fb3
# define HAVE_LOCALE_NULL
Packit 709fb3
#endif
Packit 709fb3
Packit 709fb3
const char *
Packit 709fb3
gl_locale_name_posix (int category, const char *categoryname)
Packit 709fb3
{
Packit 709fb3
  /* Use the POSIX methods of looking to 'LC_ALL', 'LC_xxx', and 'LANG'.
Packit 709fb3
     On some systems this can be done by the 'setlocale' function itself.  */
Packit 709fb3
#if defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES && defined HAVE_LOCALE_NULL
Packit 709fb3
  return setlocale (category, NULL);
Packit 709fb3
#else
Packit 709fb3
  /* On other systems we ignore what setlocale reports and instead look at the
Packit 709fb3
     environment variables directly.  This is necessary
Packit 709fb3
       1. on systems which have a facility for customizing the default locale
Packit 709fb3
          (Mac OS X, native Windows, Cygwin) and where the system's setlocale()
Packit 709fb3
          function ignores this default locale (Mac OS X, Cygwin), in two cases:
Packit 709fb3
          a. when the user missed to use the setlocale() override from libintl
Packit 709fb3
             (for example by not including <libintl.h>),
Packit 709fb3
          b. when setlocale supports only the "C" locale, such as on Cygwin
Packit 709fb3
             1.5.x.  In this case even the override from libintl cannot help.
Packit 709fb3
       2. on all systems where setlocale supports only the "C" locale.  */
Packit 709fb3
  /* Strictly speaking, it is a POSIX violation to look at the environment
Packit 709fb3
     variables regardless whether setlocale has been called or not.  POSIX
Packit 709fb3
     says:
Packit 709fb3
         "For C-language programs, the POSIX locale shall be the
Packit 709fb3
          default locale when the setlocale() function is not called."
Packit 709fb3
     But we assume that all programs that use internationalized APIs call
Packit 709fb3
     setlocale (LC_ALL, "").  */
Packit 709fb3
  return gl_locale_name_environ (category, categoryname);
Packit 709fb3
#endif
Packit 709fb3
}
Packit 709fb3
Packit 709fb3
const char *
Packit 709fb3
gl_locale_name_environ (int category, const char *categoryname)
Packit 709fb3
{
Packit 709fb3
  const char *retval;
Packit 709fb3
Packit 709fb3
  /* Setting of LC_ALL overrides all other.  */
Packit 709fb3
  retval = getenv ("LC_ALL");
Packit 709fb3
  if (retval != NULL && retval[0] != '\0')
Packit 709fb3
    return retval;
Packit 709fb3
  /* Next comes the name of the desired category.  */
Packit 709fb3
  retval = getenv (categoryname);
Packit 709fb3
  if (retval != NULL && retval[0] != '\0')
Packit 709fb3
    return retval;
Packit 709fb3
  /* Last possibility is the LANG environment variable.  */
Packit 709fb3
  retval = getenv ("LANG");
Packit 709fb3
  if (retval != NULL && retval[0] != '\0')
Packit 709fb3
    {
Packit 709fb3
#if HAVE_CFLOCALECOPYCURRENT || HAVE_CFPREFERENCESCOPYAPPVALUE
Packit 709fb3
      /* Mac OS X 10.2 or newer.
Packit 709fb3
         Ignore invalid LANG value set by the Terminal application.  */
Packit 709fb3
      if (strcmp (retval, "UTF-8") != 0)
Packit 709fb3
#endif
Packit 709fb3
#if defined __CYGWIN__
Packit 709fb3
      /* Cygwin.
Packit 709fb3
         Ignore dummy LANG value set by ~/.profile.  */
Packit 709fb3
      if (strcmp (retval, "C.UTF-8") != 0)
Packit 709fb3
#endif
Packit 709fb3
        return retval;
Packit 709fb3
    }
Packit 709fb3
Packit 709fb3
  return NULL;
Packit 709fb3
}
Packit 709fb3
Packit 709fb3
const char *
Packit 709fb3
gl_locale_name_default (void)
Packit 709fb3
{
Packit 709fb3
  /* POSIX:2001 says:
Packit 709fb3
     "All implementations shall define a locale as the default locale, to be
Packit 709fb3
      invoked when no environment variables are set, or set to the empty
Packit 709fb3
      string.  This default locale can be the POSIX locale or any other
Packit 709fb3
      implementation-defined locale.  Some implementations may provide
Packit 709fb3
      facilities for local installation administrators to set the default
Packit 709fb3
      locale, customizing it for each location.  POSIX:2001 does not require
Packit 709fb3
      such a facility.
Packit 709fb3
Packit 709fb3
     The systems with such a facility are Mac OS X and Windows: They provide a
Packit 709fb3
     GUI that allows the user to choose a locale.
Packit 709fb3
       - On Mac OS X, by default, none of LC_* or LANG are set.  Starting with
Packit 709fb3
         Mac OS X 10.4 or 10.5, LANG is set for processes launched by the
Packit 709fb3
         'Terminal' application (but sometimes to an incorrect value "UTF-8").
Packit 709fb3
         When no environment variable is set, setlocale (LC_ALL, "") uses the
Packit 709fb3
         "C" locale.
Packit 709fb3
       - On native Windows, by default, none of LC_* or LANG are set.
Packit 709fb3
         When no environment variable is set, setlocale (LC_ALL, "") uses the
Packit 709fb3
         locale chosen by the user.
Packit 709fb3
       - On Cygwin 1.5.x, by default, none of LC_* or LANG are set.
Packit 709fb3
         When no environment variable is set, setlocale (LC_ALL, "") uses the
Packit 709fb3
         "C" locale.
Packit 709fb3
       - On Cygwin 1.7, by default, LANG is set to "C.UTF-8" when the default
Packit 709fb3
         ~/.profile is executed.
Packit 709fb3
         When no environment variable is set, setlocale (LC_ALL, "") uses the
Packit 709fb3
         "C.UTF-8" locale, which operates in the same way as the "C" locale.
Packit 709fb3
  */
Packit 709fb3
Packit 709fb3
#if !(HAVE_CFLOCALECOPYCURRENT || HAVE_CFPREFERENCESCOPYAPPVALUE || defined WINDOWS_NATIVE || defined __CYGWIN__)
Packit 709fb3
Packit 709fb3
  /* The system does not have a way of setting the locale, other than the
Packit 709fb3
     POSIX specified environment variables.  We use C as default locale.  */
Packit 709fb3
  return "C";
Packit 709fb3
Packit 709fb3
#else
Packit 709fb3
Packit 709fb3
  /* Return an XPG style locale name language[_territory][@modifier].
Packit 709fb3
     Don't even bother determining the codeset; it's not useful in this
Packit 709fb3
     context, because message catalogs are not specific to a single
Packit 709fb3
     codeset.  */
Packit 709fb3
Packit 709fb3
# if HAVE_CFLOCALECOPYCURRENT || HAVE_CFPREFERENCESCOPYAPPVALUE
Packit 709fb3
  /* Mac OS X 10.2 or newer */
Packit 709fb3
  {
Packit 709fb3
    /* Cache the locale name, since CoreFoundation calls are expensive.  */
Packit 709fb3
    static const char *cached_localename;
Packit 709fb3
Packit 709fb3
    if (cached_localename == NULL)
Packit 709fb3
      {
Packit 709fb3
        char namebuf[256];
Packit 709fb3
#  if HAVE_CFLOCALECOPYCURRENT /* Mac OS X 10.3 or newer */
Packit 709fb3
        CFLocaleRef locale = CFLocaleCopyCurrent ();
Packit 709fb3
        CFStringRef name = CFLocaleGetIdentifier (locale);
Packit 709fb3
Packit 709fb3
        if (CFStringGetCString (name, namebuf, sizeof (namebuf),
Packit 709fb3
                                kCFStringEncodingASCII))
Packit 709fb3
          {
Packit 709fb3
            gl_locale_name_canonicalize (namebuf);
Packit 709fb3
            cached_localename = strdup (namebuf);
Packit 709fb3
          }
Packit 709fb3
        CFRelease (locale);
Packit 709fb3
#  elif HAVE_CFPREFERENCESCOPYAPPVALUE /* Mac OS X 10.2 or newer */
Packit 709fb3
        CFTypeRef value =
Packit 709fb3
          CFPreferencesCopyAppValue (CFSTR ("AppleLocale"),
Packit 709fb3
                                     kCFPreferencesCurrentApplication);
Packit 709fb3
        if (value != NULL
Packit 709fb3
            && CFGetTypeID (value) == CFStringGetTypeID ()
Packit 709fb3
            && CFStringGetCString ((CFStringRef)value,
Packit 709fb3
                                   namebuf, sizeof (namebuf),
Packit 709fb3
                                   kCFStringEncodingASCII))
Packit 709fb3
          {
Packit 709fb3
            gl_locale_name_canonicalize (namebuf);
Packit 709fb3
            cached_localename = strdup (namebuf);
Packit 709fb3
          }
Packit 709fb3
#  endif
Packit 709fb3
        if (cached_localename == NULL)
Packit 709fb3
          cached_localename = "C";
Packit 709fb3
      }
Packit 709fb3
    return cached_localename;
Packit 709fb3
  }
Packit 709fb3
Packit 709fb3
# endif
Packit 709fb3
Packit 709fb3
# if defined WINDOWS_NATIVE || defined __CYGWIN__ /* Native Windows or Cygwin */
Packit 709fb3
  {
Packit 709fb3
    LCID lcid;
Packit 709fb3
Packit 709fb3
    /* Use native Windows API locale ID.  */
Packit 709fb3
    lcid = GetThreadLocale ();
Packit 709fb3
Packit 709fb3
    return gl_locale_name_from_win32_LCID (lcid);
Packit 709fb3
  }
Packit 709fb3
# endif
Packit 709fb3
#endif
Packit 709fb3
}
Packit 709fb3
Packit 709fb3
/* Determine the current locale's name, and canonicalize it into XPG syntax
Packit 709fb3
     language[_territory][.codeset][@modifier]
Packit 709fb3
   The codeset part in the result is not reliable; the locale_charset()
Packit 709fb3
   should be used for codeset information instead.
Packit 709fb3
   The result must not be freed; it is statically allocated.  */
Packit 709fb3
Packit 709fb3
const char *
Packit 709fb3
gl_locale_name (int category, const char *categoryname)
Packit 709fb3
{
Packit 709fb3
  const char *retval;
Packit 709fb3
Packit 709fb3
  retval = gl_locale_name_thread (category, categoryname);
Packit 709fb3
  if (retval != NULL)
Packit 709fb3
    return retval;
Packit 709fb3
Packit 709fb3
  retval = gl_locale_name_posix (category, categoryname);
Packit 709fb3
  if (retval != NULL)
Packit 709fb3
    return retval;
Packit 709fb3
Packit 709fb3
  return gl_locale_name_default ();
Packit 709fb3
}