1
/* Determine the current selected locale.
2
Copyright (C) 1995-1999, 2000-2004 Free Software Foundation, Inc.
4
This program is free software; you can redistribute it and/or modify it
5
under the terms of the GNU Library General Public License as published
6
by the Free Software Foundation; either version 2, or (at your option)
9
This program is distributed in the hope that it will be useful,
10
but WITHOUT ANY WARRANTY; without even the implied warranty of
11
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
Library General Public License for more details.
14
You should have received a copy of the GNU Library General Public
15
License along with this program; if not, write to the Free Software
16
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
19
/* Written by Ulrich Drepper <drepper@gnu.org>, 1995. */
20
/* Win32 code written by Tor Lillqvist <tml@iki.fi>. */
29
#if defined _WIN32 || defined __WIN32__
30
# undef WIN32 /* avoid warning on mingw32 */
35
# define WIN32_LEAN_AND_MEAN
37
/* List of language codes, sorted by value:
60
0x17 LANG_RHAETO_ROMANCE
63
0x1a LANG_CROATIAN == LANG_SERBIAN
155
/* Mingw headers don't have latest language and sublanguage codes. */
156
# ifndef LANG_AFRIKAANS
157
# define LANG_AFRIKAANS 0x36
159
# ifndef LANG_ALBANIAN
160
# define LANG_ALBANIAN 0x1c
162
# ifndef LANG_AMHARIC
163
# define LANG_AMHARIC 0x5e
166
# define LANG_ARABIC 0x01
168
# ifndef LANG_ARMENIAN
169
# define LANG_ARMENIAN 0x2b
171
# ifndef LANG_ASSAMESE
172
# define LANG_ASSAMESE 0x4d
175
# define LANG_AZERI 0x2c
178
# define LANG_BASQUE 0x2d
180
# ifndef LANG_BELARUSIAN
181
# define LANG_BELARUSIAN 0x23
183
# ifndef LANG_BENGALI
184
# define LANG_BENGALI 0x45
186
# ifndef LANG_BURMESE
187
# define LANG_BURMESE 0x55
189
# ifndef LANG_CAMBODIAN
190
# define LANG_CAMBODIAN 0x53
192
# ifndef LANG_CATALAN
193
# define LANG_CATALAN 0x03
195
# ifndef LANG_CHEROKEE
196
# define LANG_CHEROKEE 0x5c
199
# define LANG_DIVEHI 0x65
202
# define LANG_EDO 0x66
204
# ifndef LANG_ESTONIAN
205
# define LANG_ESTONIAN 0x25
207
# ifndef LANG_FAEROESE
208
# define LANG_FAEROESE 0x38
211
# define LANG_FARSI 0x29
213
# ifndef LANG_FRISIAN
214
# define LANG_FRISIAN 0x62
216
# ifndef LANG_FULFULDE
217
# define LANG_FULFULDE 0x67
220
# define LANG_GAELIC 0x3c
222
# ifndef LANG_GALICIAN
223
# define LANG_GALICIAN 0x56
225
# ifndef LANG_GEORGIAN
226
# define LANG_GEORGIAN 0x37
228
# ifndef LANG_GUARANI
229
# define LANG_GUARANI 0x74
231
# ifndef LANG_GUJARATI
232
# define LANG_GUJARATI 0x47
235
# define LANG_HAUSA 0x68
237
# ifndef LANG_HAWAIIAN
238
# define LANG_HAWAIIAN 0x75
241
# define LANG_HEBREW 0x0d
244
# define LANG_HINDI 0x39
247
# define LANG_IBIBIO 0x69
250
# define LANG_IGBO 0x70
252
# ifndef LANG_INDONESIAN
253
# define LANG_INDONESIAN 0x21
255
# ifndef LANG_INUKTITUT
256
# define LANG_INUKTITUT 0x5d
258
# ifndef LANG_KANNADA
259
# define LANG_KANNADA 0x4b
262
# define LANG_KANURI 0x71
264
# ifndef LANG_KASHMIRI
265
# define LANG_KASHMIRI 0x60
268
# define LANG_KAZAK 0x3f
270
# ifndef LANG_KONKANI
271
# define LANG_KONKANI 0x57
274
# define LANG_KYRGYZ 0x40
277
# define LANG_LAO 0x54
280
# define LANG_LATIN 0x76
282
# ifndef LANG_LATVIAN
283
# define LANG_LATVIAN 0x26
285
# ifndef LANG_LITHUANIAN
286
# define LANG_LITHUANIAN 0x27
288
# ifndef LANG_MACEDONIAN
289
# define LANG_MACEDONIAN 0x2f
292
# define LANG_MALAY 0x3e
294
# ifndef LANG_MALAYALAM
295
# define LANG_MALAYALAM 0x4c
297
# ifndef LANG_MALTESE
298
# define LANG_MALTESE 0x3a
300
# ifndef LANG_MANIPURI
301
# define LANG_MANIPURI 0x58
303
# ifndef LANG_MARATHI
304
# define LANG_MARATHI 0x4e
306
# ifndef LANG_MONGOLIAN
307
# define LANG_MONGOLIAN 0x50
310
# define LANG_NEPALI 0x61
313
# define LANG_ORIYA 0x48
316
# define LANG_OROMO 0x72
318
# ifndef LANG_PAPIAMENTU
319
# define LANG_PAPIAMENTU 0x79
322
# define LANG_PASHTO 0x63
324
# ifndef LANG_PUNJABI
325
# define LANG_PUNJABI 0x46
327
# ifndef LANG_RHAETO_ROMANCE
328
# define LANG_RHAETO_ROMANCE 0x17
331
# define LANG_SAAMI 0x3b
333
# ifndef LANG_SANSKRIT
334
# define LANG_SANSKRIT 0x4f
336
# ifndef LANG_SERBIAN
337
# define LANG_SERBIAN 0x1a
340
# define LANG_SINDHI 0x59
342
# ifndef LANG_SINHALESE
343
# define LANG_SINHALESE 0x5b
346
# define LANG_SLOVAK 0x1b
349
# define LANG_SOMALI 0x77
351
# ifndef LANG_SORBIAN
352
# define LANG_SORBIAN 0x2e
355
# define LANG_SUTU 0x30
357
# ifndef LANG_SWAHILI
358
# define LANG_SWAHILI 0x41
361
# define LANG_SYRIAC 0x5a
363
# ifndef LANG_TAGALOG
364
# define LANG_TAGALOG 0x64
367
# define LANG_TAJIK 0x28
369
# ifndef LANG_TAMAZIGHT
370
# define LANG_TAMAZIGHT 0x5f
373
# define LANG_TAMIL 0x49
376
# define LANG_TATAR 0x44
379
# define LANG_TELUGU 0x4a
382
# define LANG_THAI 0x1e
384
# ifndef LANG_TIBETAN
385
# define LANG_TIBETAN 0x51
387
# ifndef LANG_TIGRINYA
388
# define LANG_TIGRINYA 0x73
391
# define LANG_TSONGA 0x31
394
# define LANG_TSWANA 0x32
396
# ifndef LANG_TURKMEN
397
# define LANG_TURKMEN 0x42
399
# ifndef LANG_UKRAINIAN
400
# define LANG_UKRAINIAN 0x22
403
# define LANG_URDU 0x20
406
# define LANG_UZBEK 0x43
409
# define LANG_VENDA 0x33
411
# ifndef LANG_VIETNAMESE
412
# define LANG_VIETNAMESE 0x2a
415
# define LANG_WELSH 0x52
418
# define LANG_XHOSA 0x34
421
# define LANG_YI 0x78
423
# ifndef LANG_YIDDISH
424
# define LANG_YIDDISH 0x3d
427
# define LANG_YORUBA 0x6a
430
# define LANG_ZULU 0x35
432
# ifndef SUBLANG_ARABIC_SAUDI_ARABIA
433
# define SUBLANG_ARABIC_SAUDI_ARABIA 0x01
435
# ifndef SUBLANG_ARABIC_IRAQ
436
# define SUBLANG_ARABIC_IRAQ 0x02
438
# ifndef SUBLANG_ARABIC_EGYPT
439
# define SUBLANG_ARABIC_EGYPT 0x03
441
# ifndef SUBLANG_ARABIC_LIBYA
442
# define SUBLANG_ARABIC_LIBYA 0x04
444
# ifndef SUBLANG_ARABIC_ALGERIA
445
# define SUBLANG_ARABIC_ALGERIA 0x05
447
# ifndef SUBLANG_ARABIC_MOROCCO
448
# define SUBLANG_ARABIC_MOROCCO 0x06
450
# ifndef SUBLANG_ARABIC_TUNISIA
451
# define SUBLANG_ARABIC_TUNISIA 0x07
453
# ifndef SUBLANG_ARABIC_OMAN
454
# define SUBLANG_ARABIC_OMAN 0x08
456
# ifndef SUBLANG_ARABIC_YEMEN
457
# define SUBLANG_ARABIC_YEMEN 0x09
459
# ifndef SUBLANG_ARABIC_SYRIA
460
# define SUBLANG_ARABIC_SYRIA 0x0a
462
# ifndef SUBLANG_ARABIC_JORDAN
463
# define SUBLANG_ARABIC_JORDAN 0x0b
465
# ifndef SUBLANG_ARABIC_LEBANON
466
# define SUBLANG_ARABIC_LEBANON 0x0c
468
# ifndef SUBLANG_ARABIC_KUWAIT
469
# define SUBLANG_ARABIC_KUWAIT 0x0d
471
# ifndef SUBLANG_ARABIC_UAE
472
# define SUBLANG_ARABIC_UAE 0x0e
474
# ifndef SUBLANG_ARABIC_BAHRAIN
475
# define SUBLANG_ARABIC_BAHRAIN 0x0f
477
# ifndef SUBLANG_ARABIC_QATAR
478
# define SUBLANG_ARABIC_QATAR 0x10
480
# ifndef SUBLANG_AZERI_LATIN
481
# define SUBLANG_AZERI_LATIN 0x01
483
# ifndef SUBLANG_AZERI_CYRILLIC
484
# define SUBLANG_AZERI_CYRILLIC 0x02
486
# ifndef SUBLANG_BENGALI_INDIA
487
# define SUBLANG_BENGALI_INDIA 0x00
489
# ifndef SUBLANG_BENGALI_BANGLADESH
490
# define SUBLANG_BENGALI_BANGLADESH 0x01
492
# ifndef SUBLANG_CHINESE_MACAU
493
# define SUBLANG_CHINESE_MACAU 0x05
495
# ifndef SUBLANG_ENGLISH_SOUTH_AFRICA
496
# define SUBLANG_ENGLISH_SOUTH_AFRICA 0x07
498
# ifndef SUBLANG_ENGLISH_JAMAICA
499
# define SUBLANG_ENGLISH_JAMAICA 0x08
501
# ifndef SUBLANG_ENGLISH_CARIBBEAN
502
# define SUBLANG_ENGLISH_CARIBBEAN 0x09
504
# ifndef SUBLANG_ENGLISH_BELIZE
505
# define SUBLANG_ENGLISH_BELIZE 0x0a
507
# ifndef SUBLANG_ENGLISH_TRINIDAD
508
# define SUBLANG_ENGLISH_TRINIDAD 0x0b
510
# ifndef SUBLANG_ENGLISH_ZIMBABWE
511
# define SUBLANG_ENGLISH_ZIMBABWE 0x0c
513
# ifndef SUBLANG_ENGLISH_PHILIPPINES
514
# define SUBLANG_ENGLISH_PHILIPPINES 0x0d
516
# ifndef SUBLANG_ENGLISH_INDONESIA
517
# define SUBLANG_ENGLISH_INDONESIA 0x0e
519
# ifndef SUBLANG_ENGLISH_HONGKONG
520
# define SUBLANG_ENGLISH_HONGKONG 0x0f
522
# ifndef SUBLANG_ENGLISH_INDIA
523
# define SUBLANG_ENGLISH_INDIA 0x10
525
# ifndef SUBLANG_ENGLISH_MALAYSIA
526
# define SUBLANG_ENGLISH_MALAYSIA 0x11
528
# ifndef SUBLANG_ENGLISH_SINGAPORE
529
# define SUBLANG_ENGLISH_SINGAPORE 0x12
531
# ifndef SUBLANG_FRENCH_LUXEMBOURG
532
# define SUBLANG_FRENCH_LUXEMBOURG 0x05
534
# ifndef SUBLANG_FRENCH_MONACO
535
# define SUBLANG_FRENCH_MONACO 0x06
537
# ifndef SUBLANG_FRENCH_WESTINDIES
538
# define SUBLANG_FRENCH_WESTINDIES 0x07
540
# ifndef SUBLANG_FRENCH_REUNION
541
# define SUBLANG_FRENCH_REUNION 0x08
543
# ifndef SUBLANG_FRENCH_CONGO
544
# define SUBLANG_FRENCH_CONGO 0x09
546
# ifndef SUBLANG_FRENCH_SENEGAL
547
# define SUBLANG_FRENCH_SENEGAL 0x0a
549
# ifndef SUBLANG_FRENCH_CAMEROON
550
# define SUBLANG_FRENCH_CAMEROON 0x0b
552
# ifndef SUBLANG_FRENCH_COTEDIVOIRE
553
# define SUBLANG_FRENCH_COTEDIVOIRE 0x0c
555
# ifndef SUBLANG_FRENCH_MALI
556
# define SUBLANG_FRENCH_MALI 0x0d
558
# ifndef SUBLANG_FRENCH_MOROCCO
559
# define SUBLANG_FRENCH_MOROCCO 0x0e
561
# ifndef SUBLANG_FRENCH_HAITI
562
# define SUBLANG_FRENCH_HAITI 0x0f
564
# ifndef SUBLANG_GERMAN_LUXEMBOURG
565
# define SUBLANG_GERMAN_LUXEMBOURG 0x04
567
# ifndef SUBLANG_GERMAN_LIECHTENSTEIN
568
# define SUBLANG_GERMAN_LIECHTENSTEIN 0x05
570
# ifndef SUBLANG_KASHMIRI_INDIA
571
# define SUBLANG_KASHMIRI_INDIA 0x02
573
# ifndef SUBLANG_MALAY_MALAYSIA
574
# define SUBLANG_MALAY_MALAYSIA 0x01
576
# ifndef SUBLANG_MALAY_BRUNEI_DARUSSALAM
577
# define SUBLANG_MALAY_BRUNEI_DARUSSALAM 0x02
579
# ifndef SUBLANG_NEPALI_INDIA
580
# define SUBLANG_NEPALI_INDIA 0x02
582
# ifndef SUBLANG_PUNJABI_INDIA
583
# define SUBLANG_PUNJABI_INDIA 0x00
585
# ifndef SUBLANG_PUNJABI_PAKISTAN
586
# define SUBLANG_PUNJABI_PAKISTAN 0x01
588
# ifndef SUBLANG_ROMANIAN_ROMANIA
589
# define SUBLANG_ROMANIAN_ROMANIA 0x00
591
# ifndef SUBLANG_ROMANIAN_MOLDOVA
592
# define SUBLANG_ROMANIAN_MOLDOVA 0x01
594
# ifndef SUBLANG_SERBIAN_LATIN
595
# define SUBLANG_SERBIAN_LATIN 0x02
597
# ifndef SUBLANG_SERBIAN_CYRILLIC
598
# define SUBLANG_SERBIAN_CYRILLIC 0x03
600
# ifndef SUBLANG_SINDHI_INDIA
601
# define SUBLANG_SINDHI_INDIA 0x00
603
# ifndef SUBLANG_SINDHI_PAKISTAN
604
# define SUBLANG_SINDHI_PAKISTAN 0x01
606
# ifndef SUBLANG_SPANISH_GUATEMALA
607
# define SUBLANG_SPANISH_GUATEMALA 0x04
609
# ifndef SUBLANG_SPANISH_COSTA_RICA
610
# define SUBLANG_SPANISH_COSTA_RICA 0x05
612
# ifndef SUBLANG_SPANISH_PANAMA
613
# define SUBLANG_SPANISH_PANAMA 0x06
615
# ifndef SUBLANG_SPANISH_DOMINICAN_REPUBLIC
616
# define SUBLANG_SPANISH_DOMINICAN_REPUBLIC 0x07
618
# ifndef SUBLANG_SPANISH_VENEZUELA
619
# define SUBLANG_SPANISH_VENEZUELA 0x08
621
# ifndef SUBLANG_SPANISH_COLOMBIA
622
# define SUBLANG_SPANISH_COLOMBIA 0x09
624
# ifndef SUBLANG_SPANISH_PERU
625
# define SUBLANG_SPANISH_PERU 0x0a
627
# ifndef SUBLANG_SPANISH_ARGENTINA
628
# define SUBLANG_SPANISH_ARGENTINA 0x0b
630
# ifndef SUBLANG_SPANISH_ECUADOR
631
# define SUBLANG_SPANISH_ECUADOR 0x0c
633
# ifndef SUBLANG_SPANISH_CHILE
634
# define SUBLANG_SPANISH_CHILE 0x0d
636
# ifndef SUBLANG_SPANISH_URUGUAY
637
# define SUBLANG_SPANISH_URUGUAY 0x0e
639
# ifndef SUBLANG_SPANISH_PARAGUAY
640
# define SUBLANG_SPANISH_PARAGUAY 0x0f
642
# ifndef SUBLANG_SPANISH_BOLIVIA
643
# define SUBLANG_SPANISH_BOLIVIA 0x10
645
# ifndef SUBLANG_SPANISH_EL_SALVADOR
646
# define SUBLANG_SPANISH_EL_SALVADOR 0x11
648
# ifndef SUBLANG_SPANISH_HONDURAS
649
# define SUBLANG_SPANISH_HONDURAS 0x12
651
# ifndef SUBLANG_SPANISH_NICARAGUA
652
# define SUBLANG_SPANISH_NICARAGUA 0x13
654
# ifndef SUBLANG_SPANISH_PUERTO_RICO
655
# define SUBLANG_SPANISH_PUERTO_RICO 0x14
657
# ifndef SUBLANG_SWEDISH_FINLAND
658
# define SUBLANG_SWEDISH_FINLAND 0x02
660
# ifndef SUBLANG_TAMAZIGHT_ARABIC
661
# define SUBLANG_TAMAZIGHT_ARABIC 0x01
663
# ifndef SUBLANG_TAMAZIGHT_LATIN
664
# define SUBLANG_TAMAZIGHT_LATIN 0x02
666
# ifndef SUBLANG_TIGRINYA_ETHIOPIA
667
# define SUBLANG_TIGRINYA_ETHIOPIA 0x00
669
# ifndef SUBLANG_TIGRINYA_ERITREA
670
# define SUBLANG_TIGRINYA_ERITREA 0x01
672
# ifndef SUBLANG_URDU_PAKISTAN
673
# define SUBLANG_URDU_PAKISTAN 0x01
675
# ifndef SUBLANG_URDU_INDIA
676
# define SUBLANG_URDU_INDIA 0x02
678
# ifndef SUBLANG_UZBEK_LATIN
679
# define SUBLANG_UZBEK_LATIN 0x01
681
# ifndef SUBLANG_UZBEK_CYRILLIC
682
# define SUBLANG_UZBEK_CYRILLIC 0x02
686
/* XPG3 defines the result of 'setlocale (category, NULL)' as:
687
"Directs 'setlocale()' to query 'category' and return the current
689
However it does not specify the exact format. Neither do SUSV2 and
690
ISO C 99. So we can use this feature only on selected systems (e.g.
691
those using GNU C Library). */
692
#if defined _LIBC || (defined __GNU_LIBRARY__ && __GNU_LIBRARY__ >= 2)
693
# define HAVE_LOCALE_NULL
696
/* Determine the current locale's name, and canonicalize it into XPG syntax
697
language[_territory[.codeset]][@modifier]
698
The codeset part in the result is not reliable; the locale_charset()
699
should be used for codeset information instead.
700
The result must not be freed; it is statically allocated. */
703
sys_message_locale_name ()
705
const char *categoryname = "LC_MESSAGES";
709
int category = LC_MESSAGES;
711
/* Use the POSIX methods of looking to 'LC_ALL', 'LC_xxx', and 'LANG'.
712
On some systems this can be done by the 'setlocale' function itself. */
713
# if defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES && defined HAVE_LOCALE_NULL
714
retval = setlocale (category, NULL);
716
/* Setting of LC_ALL overwrites all other. */
717
retval = getenv ("LC_ALL");
718
if (retval == NULL || retval[0] == '\0')
720
/* Next comes the name of the desired category. */
721
retval = getenv (categoryname);
722
if (retval == NULL || retval[0] == '\0')
724
/* Last possibility is the LANG environment variable. */
725
retval = getenv ("LANG");
726
if (retval == NULL || retval[0] == '\0')
727
/* We use C as the default domain. POSIX says this is
728
implementation defined. */
738
/* Return an XPG style locale name language[_territory][@modifier].
739
Don't even bother determining the codeset; it's not useful in this
740
context, because message catalogs are not specific to a single
747
/* Let the user override the system settings through environment
748
variables, as on POSIX systems. */
749
retval = getenv ("LC_ALL");
750
if (retval != NULL && retval[0] != '\0')
752
retval = getenv (categoryname);
753
if (retval != NULL && retval[0] != '\0')
755
retval = getenv ("LANG");
756
if (retval != NULL && retval[0] != '\0')
759
/* Use native Win32 API locale ID. */
760
lcid = GetThreadLocale ();
762
/* Strip off the sorting rules, keep only the language part. */
763
langid = LANGIDFROMLCID (lcid);
765
/* Split into language and territory part. */
766
primary = PRIMARYLANGID (langid);
767
sub = SUBLANGID (langid);
769
/* Dispatch on language.
770
See also http://www.unicode.org/unicode/onlinedat/languages.html .
771
For details about languages, see http://www.ethnologue.com/ . */
774
case LANG_AFRIKAANS: return "af_ZA";
775
case LANG_ALBANIAN: return "sq_AL";
776
case LANG_AMHARIC: return "am_ET";
780
case SUBLANG_ARABIC_SAUDI_ARABIA: return "ar_SA";
781
case SUBLANG_ARABIC_IRAQ: return "ar_IQ";
782
case SUBLANG_ARABIC_EGYPT: return "ar_EG";
783
case SUBLANG_ARABIC_LIBYA: return "ar_LY";
784
case SUBLANG_ARABIC_ALGERIA: return "ar_DZ";
785
case SUBLANG_ARABIC_MOROCCO: return "ar_MA";
786
case SUBLANG_ARABIC_TUNISIA: return "ar_TN";
787
case SUBLANG_ARABIC_OMAN: return "ar_OM";
788
case SUBLANG_ARABIC_YEMEN: return "ar_YE";
789
case SUBLANG_ARABIC_SYRIA: return "ar_SY";
790
case SUBLANG_ARABIC_JORDAN: return "ar_JO";
791
case SUBLANG_ARABIC_LEBANON: return "ar_LB";
792
case SUBLANG_ARABIC_KUWAIT: return "ar_KW";
793
case SUBLANG_ARABIC_UAE: return "ar_AE";
794
case SUBLANG_ARABIC_BAHRAIN: return "ar_BH";
795
case SUBLANG_ARABIC_QATAR: return "ar_QA";
798
case LANG_ARMENIAN: return "hy_AM";
799
case LANG_ASSAMESE: return "as_IN";
803
/* FIXME: Adjust this when Azerbaijani locales appear on Unix. */
804
case SUBLANG_AZERI_LATIN: return "az_AZ@latin";
805
case SUBLANG_AZERI_CYRILLIC: return "az_AZ@cyrillic";
809
return "eu"; /* Ambiguous: could be "eu_ES" or "eu_FR". */
810
case LANG_BELARUSIAN: return "be_BY";
814
case SUBLANG_BENGALI_INDIA: return "bn_IN";
815
case SUBLANG_BENGALI_BANGLADESH: return "bn_BD";
818
case LANG_BULGARIAN: return "bg_BG";
819
case LANG_BURMESE: return "my_MM";
820
case LANG_CAMBODIAN: return "km_KH";
821
case LANG_CATALAN: return "ca_ES";
822
case LANG_CHEROKEE: return "chr_US";
826
case SUBLANG_CHINESE_TRADITIONAL: return "zh_TW";
827
case SUBLANG_CHINESE_SIMPLIFIED: return "zh_CN";
828
case SUBLANG_CHINESE_HONGKONG: return "zh_HK";
829
case SUBLANG_CHINESE_SINGAPORE: return "zh_SG";
830
case SUBLANG_CHINESE_MACAU: return "zh_MO";
833
case LANG_CROATIAN: /* LANG_CROATIAN == LANG_SERBIAN
834
* What used to be called Serbo-Croatian
835
* should really now be two separate
836
* languages because of political reasons.
837
* (Says tml, who knows nothing about Serbian
839
* (I can feel those flames coming already.)
843
case SUBLANG_DEFAULT: return "hr_HR";
844
case SUBLANG_SERBIAN_LATIN: return "sr_CS";
845
case SUBLANG_SERBIAN_CYRILLIC: return "sr_CS@cyrillic";
848
case LANG_CZECH: return "cs_CZ";
849
case LANG_DANISH: return "da_DK";
850
case LANG_DIVEHI: return "dv_MV";
854
case SUBLANG_DUTCH: return "nl_NL";
855
case SUBLANG_DUTCH_BELGIAN: /* FLEMISH, VLAAMS */ return "nl_BE";
858
case LANG_EDO: return "bin_NG";
862
/* SUBLANG_ENGLISH_US == SUBLANG_DEFAULT. Heh. I thought
863
* English was the language spoken in England.
866
case SUBLANG_ENGLISH_US: return "en_US";
867
case SUBLANG_ENGLISH_UK: return "en_GB";
868
case SUBLANG_ENGLISH_AUS: return "en_AU";
869
case SUBLANG_ENGLISH_CAN: return "en_CA";
870
case SUBLANG_ENGLISH_NZ: return "en_NZ";
871
case SUBLANG_ENGLISH_EIRE: return "en_IE";
872
case SUBLANG_ENGLISH_SOUTH_AFRICA: return "en_ZA";
873
case SUBLANG_ENGLISH_JAMAICA: return "en_JM";
874
case SUBLANG_ENGLISH_CARIBBEAN: return "en_GD"; /* Grenada? */
875
case SUBLANG_ENGLISH_BELIZE: return "en_BZ";
876
case SUBLANG_ENGLISH_TRINIDAD: return "en_TT";
877
case SUBLANG_ENGLISH_ZIMBABWE: return "en_ZW";
878
case SUBLANG_ENGLISH_PHILIPPINES: return "en_PH";
879
case SUBLANG_ENGLISH_INDONESIA: return "en_ID";
880
case SUBLANG_ENGLISH_HONGKONG: return "en_HK";
881
case SUBLANG_ENGLISH_INDIA: return "en_IN";
882
case SUBLANG_ENGLISH_MALAYSIA: return "en_MY";
883
case SUBLANG_ENGLISH_SINGAPORE: return "en_SG";
886
case LANG_ESTONIAN: return "et_EE";
887
case LANG_FAEROESE: return "fo_FO";
888
case LANG_FARSI: return "fa_IR";
889
case LANG_FINNISH: return "fi_FI";
893
case SUBLANG_FRENCH: return "fr_FR";
894
case SUBLANG_FRENCH_BELGIAN: /* WALLOON */ return "fr_BE";
895
case SUBLANG_FRENCH_CANADIAN: return "fr_CA";
896
case SUBLANG_FRENCH_SWISS: return "fr_CH";
897
case SUBLANG_FRENCH_LUXEMBOURG: return "fr_LU";
898
case SUBLANG_FRENCH_MONACO: return "fr_MC";
899
case SUBLANG_FRENCH_WESTINDIES: return "fr"; /* Caribbean? */
900
case SUBLANG_FRENCH_REUNION: return "fr_RE";
901
case SUBLANG_FRENCH_CONGO: return "fr_CG";
902
case SUBLANG_FRENCH_SENEGAL: return "fr_SN";
903
case SUBLANG_FRENCH_CAMEROON: return "fr_CM";
904
case SUBLANG_FRENCH_COTEDIVOIRE: return "fr_CI";
905
case SUBLANG_FRENCH_MALI: return "fr_ML";
906
case SUBLANG_FRENCH_MOROCCO: return "fr_MA";
907
case SUBLANG_FRENCH_HAITI: return "fr_HT";
910
case LANG_FRISIAN: return "fy_NL";
912
/* Spoken in Nigeria, Guinea, Senegal, Mali, Niger, Cameroon, Benin. */
917
case 0x01: /* SCOTTISH */ return "gd_GB";
918
case 0x02: /* IRISH */ return "ga_IE";
921
case LANG_GALICIAN: return "gl_ES";
922
case LANG_GEORGIAN: return "ka_GE";
926
case SUBLANG_GERMAN: return "de_DE";
927
case SUBLANG_GERMAN_SWISS: return "de_CH";
928
case SUBLANG_GERMAN_AUSTRIAN: return "de_AT";
929
case SUBLANG_GERMAN_LUXEMBOURG: return "de_LU";
930
case SUBLANG_GERMAN_LIECHTENSTEIN: return "de_LI";
933
case LANG_GREEK: return "el_GR";
934
case LANG_GUARANI: return "gn_PY";
935
case LANG_GUJARATI: return "gu_IN";
936
case LANG_HAUSA: return "ha_NG";
938
/* FIXME: Do they mean Hawaiian ("haw_US", 1000 speakers)
939
or Hawaii Creole English ("cpe_US", 600000 speakers)? */
941
case LANG_HEBREW: return "he_IL";
942
case LANG_HINDI: return "hi_IN";
943
case LANG_HUNGARIAN: return "hu_HU";
944
case LANG_IBIBIO: return "nic_NG";
945
case LANG_ICELANDIC: return "is_IS";
946
case LANG_IGBO: return "ig_NG";
947
case LANG_INDONESIAN: return "id_ID";
948
case LANG_INUKTITUT: return "iu_CA";
952
case SUBLANG_ITALIAN: return "it_IT";
953
case SUBLANG_ITALIAN_SWISS: return "it_CH";
956
case LANG_JAPANESE: return "ja_JP";
957
case LANG_KANNADA: return "kn_IN";
958
case LANG_KANURI: return "kr_NG";
962
case SUBLANG_DEFAULT: return "ks_PK";
963
case SUBLANG_KASHMIRI_INDIA: return "ks_IN";
966
case LANG_KAZAK: return "kk_KZ";
968
/* FIXME: Adjust this when such locales appear on Unix. */
970
case LANG_KOREAN: return "ko_KR";
971
case LANG_KYRGYZ: return "ky_KG";
972
case LANG_LAO: return "lo_LA";
973
case LANG_LATIN: return "la_VA";
974
case LANG_LATVIAN: return "lv_LV";
975
case LANG_LITHUANIAN: return "lt_LT";
976
case LANG_MACEDONIAN: return "mk_MK";
980
case SUBLANG_MALAY_MALAYSIA: return "ms_MY";
981
case SUBLANG_MALAY_BRUNEI_DARUSSALAM: return "ms_BN";
984
case LANG_MALAYALAM: return "ml_IN";
985
case LANG_MALTESE: return "mt_MT";
987
/* FIXME: Adjust this when such locales appear on Unix. */
989
case LANG_MARATHI: return "mr_IN";
991
return "mn"; /* Ambiguous: could be "mn_CN" or "mn_MN". */
995
case SUBLANG_DEFAULT: return "ne_NP";
996
case SUBLANG_NEPALI_INDIA: return "ne_IN";
1002
case SUBLANG_NORWEGIAN_BOKMAL: return "no_NO";
1003
case SUBLANG_NORWEGIAN_NYNORSK: return "nn_NO";
1006
case LANG_ORIYA: return "or_IN";
1007
case LANG_OROMO: return "om_ET";
1008
case LANG_PAPIAMENTU: return "pap_AN";
1010
return "ps"; /* Ambiguous: could be "ps_PK" or "ps_AF". */
1011
case LANG_POLISH: return "pl_PL";
1012
case LANG_PORTUGUESE:
1015
case SUBLANG_PORTUGUESE: return "pt_PT";
1016
/* Hmm. SUBLANG_PORTUGUESE_BRAZILIAN == SUBLANG_DEFAULT.
1017
Same phenomenon as SUBLANG_ENGLISH_US == SUBLANG_DEFAULT. */
1018
case SUBLANG_PORTUGUESE_BRAZILIAN: return "pt_BR";
1024
case SUBLANG_PUNJABI_INDIA: return "pa_IN"; /* Gurmukhi script */
1025
case SUBLANG_PUNJABI_PAKISTAN: return "pa_PK"; /* Arabic script */
1028
case LANG_RHAETO_ROMANCE: return "rm_CH";
1032
case SUBLANG_ROMANIAN_ROMANIA: return "ro_RO";
1033
case SUBLANG_ROMANIAN_MOLDOVA: return "ro_MD";
1037
return "ru"; /* Ambiguous: could be "ru_RU" or "ru_UA" or "ru_MD". */
1038
case LANG_SAAMI: /* actually Northern Sami */ return "se_NO";
1039
case LANG_SANSKRIT: return "sa_IN";
1043
case SUBLANG_SINDHI_INDIA: return "sd_IN";
1044
case SUBLANG_SINDHI_PAKISTAN: return "sd_PK";
1047
case LANG_SINHALESE: return "si_LK";
1048
case LANG_SLOVAK: return "sk_SK";
1049
case LANG_SLOVENIAN: return "sl_SI";
1050
case LANG_SOMALI: return "so_SO";
1052
/* FIXME: Adjust this when such locales appear on Unix. */
1057
case SUBLANG_SPANISH: return "es_ES";
1058
case SUBLANG_SPANISH_MEXICAN: return "es_MX";
1059
case SUBLANG_SPANISH_MODERN:
1060
return "es_ES@modern"; /* not seen on Unix */
1061
case SUBLANG_SPANISH_GUATEMALA: return "es_GT";
1062
case SUBLANG_SPANISH_COSTA_RICA: return "es_CR";
1063
case SUBLANG_SPANISH_PANAMA: return "es_PA";
1064
case SUBLANG_SPANISH_DOMINICAN_REPUBLIC: return "es_DO";
1065
case SUBLANG_SPANISH_VENEZUELA: return "es_VE";
1066
case SUBLANG_SPANISH_COLOMBIA: return "es_CO";
1067
case SUBLANG_SPANISH_PERU: return "es_PE";
1068
case SUBLANG_SPANISH_ARGENTINA: return "es_AR";
1069
case SUBLANG_SPANISH_ECUADOR: return "es_EC";
1070
case SUBLANG_SPANISH_CHILE: return "es_CL";
1071
case SUBLANG_SPANISH_URUGUAY: return "es_UY";
1072
case SUBLANG_SPANISH_PARAGUAY: return "es_PY";
1073
case SUBLANG_SPANISH_BOLIVIA: return "es_BO";
1074
case SUBLANG_SPANISH_EL_SALVADOR: return "es_SV";
1075
case SUBLANG_SPANISH_HONDURAS: return "es_HN";
1076
case SUBLANG_SPANISH_NICARAGUA: return "es_NI";
1077
case SUBLANG_SPANISH_PUERTO_RICO: return "es_PR";
1080
case LANG_SUTU: return "bnt_TZ"; /* or "st_LS" or "nso_ZA"? */
1081
case LANG_SWAHILI: return "sw_KE";
1085
case SUBLANG_DEFAULT: return "sv_SE";
1086
case SUBLANG_SWEDISH_FINLAND: return "sv_FI";
1089
case LANG_SYRIAC: return "syr_TR"; /* An extinct language. */
1090
case LANG_TAGALOG: return "tl_PH";
1091
case LANG_TAJIK: return "tg_TJ";
1092
case LANG_TAMAZIGHT:
1095
/* FIXME: Adjust this when Tamazight locales appear on Unix. */
1096
case SUBLANG_TAMAZIGHT_ARABIC: return "ber_MA@arabic";
1097
case SUBLANG_TAMAZIGHT_LATIN: return "ber_MA@latin";
1101
return "ta"; /* Ambiguous: could be "ta_IN" or "ta_LK" or "ta_SG". */
1102
case LANG_TATAR: return "tt_RU";
1103
case LANG_TELUGU: return "te_IN";
1104
case LANG_THAI: return "th_TH";
1105
case LANG_TIBETAN: return "bo_CN";
1109
case SUBLANG_TIGRINYA_ETHIOPIA: return "ti_ET";
1110
case SUBLANG_TIGRINYA_ERITREA: return "ti_ER";
1113
case LANG_TSONGA: return "ts_ZA";
1114
case LANG_TSWANA: return "tn_BW";
1115
case LANG_TURKISH: return "tr_TR";
1116
case LANG_TURKMEN: return "tk_TM";
1117
case LANG_UKRAINIAN: return "uk_UA";
1121
case SUBLANG_URDU_PAKISTAN: return "ur_PK";
1122
case SUBLANG_URDU_INDIA: return "ur_IN";
1128
case SUBLANG_UZBEK_LATIN: return "uz_UZ";
1129
case SUBLANG_UZBEK_CYRILLIC: return "uz_UZ@cyrillic";
1132
case LANG_VENDA: return "ve_ZA";
1133
case LANG_VIETNAMESE: return "vi_VN";
1134
case LANG_WELSH: return "cy_GB";
1135
case LANG_XHOSA: return "xh_ZA";
1136
case LANG_YI: return "sit_CN";
1137
case LANG_YIDDISH: return "yi_IL";
1138
case LANG_YORUBA: return "yo_NG";
1139
case LANG_ZULU: return "zu_ZA";
1140
default: return "C";