summaryrefslogtreecommitdiffstats
path: root/perl-install/interactive_gtk.pm
Commit message (Expand)AuthorAgeFilesLines
* (create_ctree): fix focusing (the assumption number of leaves = number of lin...Pascal Rigaux2001-08-191-3/+3
* fix bug in box's height usePascal Rigaux2001-08-181-1/+1
* better radiobox keyboard handlingPascal Rigaux2001-08-181-14/+31
* big renaming of ask_from_entries_refH in ask_from and ask_from_entries_refH_p...Pascal Rigaux2001-08-181-1/+1
* enhance look, fix ask_fileWPascal Rigaux2001-08-181-13/+26
* no scrollbar if list <= 10 and the list is alonedamien2001-08-171-1/+1
* - small fixes (esp. gtk sensitive handling)Pascal Rigaux2001-08-141-2/+8
* clean the nice till fixPascal Rigaux2001-08-121-9/+4
* When a dialog has too many widgets use a scrollbar so that the dialog does no...Till Kamppeter2001-08-121-2/+5
* Fixed bug of input fields with a number as default input not allowing to ente...Till Kamppeter2001-08-121-1/+6
* cleanup, functions already defined in interactivePascal Rigaux2001-08-061-3/+0
* corrected gtkradio : shift instead of popdamien2001-08-061-1/+1
* (ask_browse_tree_info_refW): s/wait_msg/wait_message/ (wait_msg doesn'tPascal Rigaux2001-08-041-1/+1
* allow ask_browse_tree_info_refW to return 0 on cancel (previously always 1).Francois Pons2001-07-271-1/+1
* added a before leaving code to clean added reference (else it seems to bahaveFrancois Pons2001-07-271-0/+9
* fixed wrong reference to added icons to ask_browse_tree_info_refW.Francois Pons2001-07-271-4/+5
* move to MDK::Common, bool->to_boolPascal Rigaux2001-07-241-1/+1
* merging common code for individual package selection and service to createFrancois Pons2001-07-121-0/+190
* (exit): fix the exit codePascal Rigaux2001-04-141-1/+1
* (ask_from_entries_refW): set_default_size width 250Pascal Rigaux2001-04-131-1/+1
* use gtkset_tip (so that no tip is set when tip eq '')Pascal Rigaux2001-04-101-9/+11
* (create_ctree): handle single click on node opens the nodePascal Rigaux2001-04-101-11/+17
* don't crash if wizard. pixel's faultdamien2001-03-291-1/+1
* better default_size settingPascal Rigaux2001-03-281-1/+1
* corrected pixel shit if embeddeddamien2001-03-281-1/+1
* try to fix displaying in draksecPascal Rigaux2001-03-271-7/+9
* (ask_from_entries_refW): better sizing in case of scrollsPascal Rigaux2001-03-191-2/+4
* - cleanup double click stuffPascal Rigaux2001-03-131-12/+18
* (ask_from_entries_refW): add $set for "label" entriesPascal Rigaux2001-03-121-0/+1
* add "label" typePascal Rigaux2001-03-121-0/+2
* added tooltips to create_boxradiodamien2001-03-091-0/+6
* applied gtkradiodamien2001-03-091-2/+26
* if wizard, show the buttondamien2001-02-261-1/+1
* (ask_from_entries_refW): ensure "advanced" lists center the chosen valuePascal Rigaux2001-02-251-2/+2
* (ask_from_entries_refW): double clicking on list means 'Ok'Pascal Rigaux2001-02-231-0/+4
* (ask_from_entries_refW): if no button wanted, don't call create_okcancelPascal Rigaux2001-02-221-1/+2
* major move. now ask_from_list returns false when canceled (it doesn't die 'as...Pascal Rigaux2001-02-201-0/+4
* added png support. Need to test the faces2xpm stuff.damien2001-02-151-2/+2
* (ask_from_entries_refW): use $common->{advanced_label}Mystery Man 5532001-02-121-22/+72
* button behaviour now chosen, and implementedPascal Rigaux2001-02-101-6/+8
* add button handling, quite weird behaviour though cuz of newt sillynessPascal Rigaux2001-02-091-11/+18
* updated wizard modedamien2001-02-071-1/+1
* (create_ctree): node_moveto done only if node_is_visible is not fullPascal Rigaux2001-02-051-1/+1
* (ask_from_entries_refW): use gtkxpmPascal Rigaux2001-02-021-2/+2
* recoded wizard modedamien2001-02-021-1/+1
* updated embedded mode in install.damien2001-02-011-14/+0
* updated embedded modedamien2001-01-261-1/+1
* (create_ctree): fix case with formatted listPascal Rigaux2001-01-211-3/+6
* (create_ctree): fix default value selecting failing (in case of "format")Pascal Rigaux2001-01-111-1/+2
* (ask_from_entries_refW): apply "format" on label when icon is missing for ico...Pascal Rigaux2001-01-111-9/+13
13'>613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879
package lang; # $Id$

use diagnostics;
use strict;

#-######################################################################################
#- misc imports
#-######################################################################################
use common;
use log;

#-######################################################################################
#- Globals
#-######################################################################################
#- key (to be used in $LC_ALL), [0] = english name, [1] = charset encoding,
#- [2] = value for $LANG used by DrakX, [3] = value for LANGUAGE (a list of
#- possible languages, carefully choosen), [4] = use utf8 or not (boolean)
#-
#- when adding a new language here, also add a line in keyboards list

#-
#- NOTE: we cheat for a lot of locales (in particular UTF-8, in DrakX they are
#- the 8bit ones); it's easier like that now. Of course, on the installed
#- system a real UTF-8 locale will be used
#-

my %languages = my @languages = (
'en_US' => [ 'English|United States',	'C', 'en', 'en_US:en' ],
'en_GB' => [ 'English|United Kingdom',	'iso-8859-15', 'en', 'en_GB:en' ],
'en_IE' => [ 'English|Ireland',		'iso-8859-15', 'en', 'en_IE:en_GB:en' ],
'en_US.UTF-8' => [ 'English|UTF-8',	'iso-8859-15', 'en', 'en_US:en', 'UTF-8', ],
  'af'  => [ 'Afrikaans',		'iso-8859-1', 'af', 'af:en_ZA' ],
'ar_EG.UTF-8' => [ 'Arabic',		'iso-8859-6', 'ar', 'ar', 'UTF-8' ],
#'az_AZ.ISO-8859-9E'=> [ 'Azeri (Latin)','iso-8859-9e','az', 'az:tr' ],
'az_AZ.UTF-8' => [ 'Azeri (Latin)',	'iso-8859-9e', 'az', 'az:tr', 'UTF-8' ],
  'be'  => [ 'Belarussian (CP1251)',	'cp1251',      'be', 'be:be_BY.CP1251:ru_RU.CP1251' ],
'be_BY.UTF-8'  => [ 'Belarussian (UTF-8)', 'cp1251',   'be', 'be:be_BY.CP1251:ru_RU.CP1251', 'UTF-8' ],
#- provide aliases for some not very standard names used in po files...
  'bg'  => [ 'Bulgarian (CP1251)',	'cp1251',     'bg', 'bg:bg.CP1251:bg_BG.CP1251:bg_BG' ],
'bg_BG.UTF-8' => [ 'Bulgarian (UTF-8)',	'cp1251',   'bg', 'bg:bg.CP1251:bg_BG.CP1251:bg_BG', 'UTF-8' ],
  'br'  => [ 'Brezhoneg',		'iso-8859-15', 'br', 'br:fr_FR:fr' ],
  'bs'  => [ 'Bosnian',			'iso-8859-2', 'bs', 'bs' ],
'ca_ES' => [ 'Catalan',			'iso-8859-15', 'ca', 'ca:es_ES:es' ],
  'cs'  => [ 'Czech',			'iso-8859-2', 'cs', 'cs' ],
#-  'cy'  => [ 'Cymraeg (Welsh)','iso-8859-14','cy', 'cy:en_GB:en' ],
'cy_GB.UTF-8' => [ 'Cymraeg (Welsh)',	'iso-8859-14',   'cy', 'cy:en_GB:en', 'UTF-8' ],
  'da'  => [ 'Danish',			'iso-8859-15', 'da', 'da' ],		
'de_AT' => [ 'German|Austria',		'iso-8859-15', 'de', 'de_AT:de' ],
'de_BE' => [ 'German|Belgium',		'iso-8859-15', 'de', 'de_BE:de' ],
'de_CH' => [ 'German|Switzerland',	'iso-8859-15', 'de', 'de_CH:de' ],
'de_DE' => [ 'German|Germany',		'iso-8859-15', 'de', 'de_DE:de' ],
  'el'  => [ 'Greek',        'iso-8859-7', 'el', 'el' ],
'el_GR.UTF-8' => [ 'Greek (UTF-8)',        'iso-8859-7',     'el', 'el', 'UTF-8' ],
  'eo'  => [ 'Esperanto',		'iso-8859-3',      'eo', 'eo', 'UTF-8' ],
'es_AR' => [ 'Spanish|Argentina',	'iso-8859-1', 'es', 'es_AR:es_UY:es:es_ES' ],
'es_ES' => [ 'Spanish|Spain (modern sorting)',	'iso-8859-15', 'es', 'es_ES:es' ],
'es@tradicional' => [ 'Spanish|Spain (traditional sorting)', 'iso-8859-15', 'es', 'es' ],
'es_ES.UTF-8' => [ 'Spanish|Spain (UTF-8)', 'iso-8859-15', 'es', 'es_ES:es', 'UTF-8' ],
'es_MX' => [ 'Spanish|Mexico',	'iso-8859-1', 'es', 'es_MX:es:es_ES' ],
  'et'  => [ 'Estonian',		'iso-8859-15', 'et', 'et' ],
'eu_ES' => [ 'Euskara (Basque)', 'iso-8859-15', 'eu', 'eu' ],
'fa_IR.UTF-8' => [ 'Farsi (Iranian)',		'unicode', 'fa', 'fa', 'UTF-8' ],
'fi_FI' => [ 'Finnish (Suomi)',	'iso-8859-15', 'fi', 'fi' ],
#-'fo'  => [ 'Faroese',			'iso-8859-1', 'fo', 'fo' ],
'fr_BE' => [ 'French|Belgium',	'iso-8859-15', 'fr', 'fr_BE:fr' ],
'fr_CA' => [ 'French|Canada',		'iso-8859-15', 'fr', 'fr_CA:fr' ],
'fr_CH' => [ 'French|Switzerland',	'iso-8859-15', 'fr', 'fr_CH:fr' ],
'fr_FR' => [ 'French|France',	'iso-8859-15', 'fr', 'fr_FR:fr' ],
'fr_FR.UTF-8' => [ 'French|France (UTF-8)', 'iso-8859-15', 'fr', 'fr_FR:fr', 'UTF-8' ],
'ga_IE' => [ 'Gaeilge (Irish)',	'iso-8859-15', 'ga', 'ga:en_IE:en' ],
#-'gd'  => [ 'Scottish gaelic',		'iso-8859-14','gd', 'gd:en_GB:en' ],
'gl_ES' => [ 'Galego (Galician)', 'iso-8859-15', 'gl', 'gl:es_ES:pt_PT:pt_BR:es:pt' ],
#-'gv'	=> [ 'Manx gaelic',		'iso-8859-14','gv', 'gv:en_GB:en' ],
#- 'iw' was the old code for hebrew language
'he_IL.UTF-8' => [ 'Hebrew',		'iso-8859-8', 'he', 'he:iw_IL', 'UTF-8' ],
  'hr'  => [ 'Croatian',		'iso-8859-2', 'hr', 'hr' ],
  'hu'  => [ 'Hungarian', 		'iso-8859-2', 'hu', 'hu' ],
#'hy_AM.ARMSCII-8'=> [ 'Armenian|ARMSCII-8','armscii-8','hy','hy' ],
'hy_AM.UTF-8' => [ 'Armenian',     'armscii-8',     'hy', 'hy', 'UTF-8' ],
#- 'in' was the old code for indonesian language; by putting LANGUAGE=id:in_ID
#- we catch the few catalog files still using the wrong code
  'id'  => [ 'Indonesian',		'iso-8859-1', 'id', 'id:in_ID' ],
  'is'  => [ 'Icelandic', 		'iso-8859-1', 'is', 'is' ],
'it_CH' => [ 'Italian|Switzerland',	'iso-8859-15', 'it', 'it_IT:it' ],
'it_IT' => [ 'Italian|Italy', 'iso-8859-15', 'it', 'it_IT:it' ],
#-'iu'  => [ 'Inuktitut', 		'unicodeIU',  'iu', 'iu' ],
  'ja'  => [ 'Japanese',		'jisx0208',   'ja', 'ja_JP.ujis:ja' ],
'ja_JP.UTF-8' => [ 'Japanese (UTF-8)',	'jisx0208',     'ja', 'ja_JP.ujis:ja', 'UTF-8' ],
'ka_GE.UTF-8' => [ 'Georgian',  		'utf_ka',     'ka', 'ka', 'UTF-8' ],
#-'kl'  => [ 'Greenlandic (inuit)',	'iso-8859-1', 'kl', 'kl' ],
  'ko'  => [ 'Korean',           'ksc5601',    'ko', 'ko' ],
'ko_KR.UTF-8' => [ 'Korean (UTF-8)',       'ksc5601',     'ko', 'ko', 'UTF-8' ],
#-'kw'	=> [ 'Cornish gaelic',		'iso-8859-14','kw', 'kw:en_GB:en' ],
#-'lo'  => [ 'Laotian',			'mulelao-1',  'lo', 'lo' ],
  'lt'  => [ 'Lithuanian',		'iso-8859-13', 'lt', 'lt' ],
  'lv'  => [ 'Latvian',			'iso-8859-13', 'lv', 'lv' ],   
  'mi'	=> [ 'Maori',			'iso-8859-13', 'mi', 'mi' ],
#- 'mk'  => [ 'Macedonian (Cyrillic)','iso-8859-5', 'mk', 'mk' ],
'mk_MK.UTF-8' => [ 'Macedonian (Cyrillic)', 'cp1251',   'mk', 'mk', 'UTF-8' ],
  'ms'  => [ 'Malay',			'iso-8859-1', 'ms', 'ms' ],
#- 'mt'  => [ 'Maltese|ISO-8859-3',	'iso-8859-3', 'mt', 'mt' ],
'mt_MT.UTF-8' => [ 'Maltese',	'iso-8859-3',      'mt', 'mt', 'UTF-8' ],
'nl_BE' => [ 'Dutch|Belgium',	'iso-8859-15', 'nl', 'nl_BE:nl' ],
'nl_NL' => [ 'Dutch|Netherlands', 'iso-8859-15', 'nl', 'nl_NL:nl' ],
#- 'nb' is the new locale name in glibc 2.2
  'no'  => [ 'Norwegian|Bokmaal',	'iso-8859-1', 'no', 'no:nb:nn:no@nynorsk:no_NY' ],
#- no_NY is used by KDE (but not standard); 'nn' is the new locale in glibc 2.2
  'nn'	=> [ 'Norwegian|Nynorsk',	'iso-8859-1', 'no', 'nn:no@nynorsk:no_NY:no:nb' ],
#-'oc'  => [ 'Occitan',			'iso-8859-1', 'oc', 'oc:fr_FR' ],
#-'pd'	=> [ 'Plauttdietsch',		'iso-8859-1', 'pd', 'pd' ],
#-'ph'  => [ 'Pilipino',		'iso-8859-1', 'ph', 'ph:tl' ],
  'pl'  => [ 'Polish',			'iso-8859-2', 'pl', 'pl' ],
#-'pp'	=> [ 'Papiamento',		'iso-8859-1', 'pp', 'pp' ],
'pt_BR' => [ 'Portuguese|Brazil',	'iso-8859-1', 'pt_BR', 'pt_BR:pt_PT:pt' ],
'pt_PT' => [ 'Portuguese|Portugal', 'iso-8859-15', 'pt', 'pt_PT:pt:pt_BR' ],
  'ro'  => [ 'Romanian',  		'iso-8859-2', 'ro', 'ro' ],
'ru_RU.KOI8-R' => [ 'Russian|KOI8-R',	'koi8-r',     'ru', 'ru_RU:ru' ],
'ru_RU.CP1251' => [ 'Russian|CP1251',	'cp1251',     'ru', 'ru_RU:ru' ],
'ru_RU.UTF-8' => [ 'Russian|UTF-8',	'cp1251',   'ru', 'ru_RU:ru', 'UTF-8' ],
  'sk'  => [ 'Slovak',    		'iso-8859-2', 'sk', 'sk' ],
  'sl'  => [ 'Slovenian',		'iso-8859-2', 'sl', 'sl' ],
#-  'sp'  => [ 'Serbian|Cyrillic (ISO-8859-5)','iso-8859-5', 'sp', 'sp:sr' ],
#'sp_YU.CP1251' => [ 'Serbian|Cyrillic (CP1251)','cp1251',    'sp', 'sp:sr' ],
'sp_YU.UTF-8' => [ 'Serbian|Cyrillic', 'cp1251',   'sp', 'sp:sr', 'UTF-8' ],
  'sr'  => [ 'Serbian|Latin (ISO-8859-2)', 'iso-8859-2', 'sr', 'sr' ],
'sr_YU.UTF-8' => [ 'Serbian|Latin (UTF-8)',	'iso-8859-2',      'sr', 'sr', 'UTF-8' ],
  'sv'  => [ 'Swedish',			'iso-8859-1', 'sv', 'sv' ],
#- there is no tamil font curently; so set DrakX encoding to utf_1
#- note: most of the gnome translations for tamil are broken (using bad
#- encoding)
#-
#- Tamil currently works only with TSCII encoding; which identifies
#- itself as a fake iso-8859-1
#'ta_IN.UTF-8' => [ 'Tamil (UTF-8)',	'iso-8859-1',      'ta', 'ta', 'UTF-8' ],
'ta_IN' => [ 'Tamil (TSCII)',		'tscii',      'ta', 'ta' ],
'tg_TJ.UTF-8' => [ 'Tajik',		'utf_koi8-k',    'tg', 'tg', 'UTF-8' ],
  'th'  => [ 'Thai|TIS-620',            'tis620',     'th', 'th' ],
'th_TH.UTF-8' => [ 'Thai (UTF-8)',         'tis620',     'th', 'th', 'UTF-8' ],
  'tr'  => [ 'Turkish',	 		'iso-8859-9', 'tr', 'tr' ],
#-'tt_RU.UTF-8' => [ 'Tatar',		'koi8-k',  'tt', 'tt' ],
#-'ur'	=> [ 'Urdu',			'cp1256',     'ur', 'ur' ],  
'uk_UA' => [ 'Ukrainian|KOI8-U', 	'koi8-u',     'uk', 'uk_UA:uk' ],
'uk_UA.CP1251' => [ 'Ukrainian|CP1251',	'cp1251',     'uk', 'uk_UA:uk' ],
'uk_UA.UTF-8' => [ 'Ukrainian|UTF-8',	'cp1251',   'uk', 'uk_UA:uk', 'UTF-8' ],
  'uz'  => [ 'Uzbek',			'iso-8859-1', 'uz', 'uz' ],
#'vi_VN.TCVN'  => [ 'Vietnamese|TCVN',   'tcvn',     'vi', 'vi' ],
#'vi_VN.VISCII' => [ 'Vietnamese|VISCII','viscii',   'vi', 'vi' ],
'vi_VN.UTF-8' => [ 'Vietnamese',  'viscii',   'vi', 'vi', 'UTF-8' ],
  'wa'  => [ 'Walon',     		'iso-8859-15', 'wa', 'wa:fr_BE:fr' ],
#-'yi'	=> [ 'Yiddish',			'cp1255',     'yi', 'yi' ],
#- NOTE: 'zh' must be in the LANGUAGE list, it is not used for translations
#- themselves but is needed for our selection of locales-xx packages
#- and the language dependent packages resolution
#'zh_HK.Big5' => [ 'Chinese|Traditional|Hong Kong|Big5', 'Big5', 'zh_TW.Big5', 'zh_TW.Big5:zh_TW:zh_HK:zh' ],
#'zh_HK.UTF-8' => [ 'Chinese|Traditional|Hong Kong|UTF-8','Big5','zh_HK', 'zh_HK:zh_TW.Big5:zh_TW:zh', 'UTF-8' ],
'zh_TW.Big5'  => [ 'Chinese|Traditional|Big5',   'Big5',   'zh_TW.Big5', 'zh_TW.Big5:zh_TW:zh_HK:zh' ],
'zh_TW.UTF-8' => [ 'Chinese|Traditional|UTF-8',  'Big5', 'zh_TW',      'zh_TW.Big5:zh_TW.big5:zh_TW:zh_HK:zh', 'UTF-8' ],
'zh_CN.GB2312' => [ 'Chinese|Simplified|GB2312', 'gb2312', 'zh_CN.GB2312', 'zh_CN.GB2312:zh_CN:zh' ],
'zh_CN.UTF-8'  => [ 'Chinese|Simplified|UTF-8',  'gb2312', 'zh_CN',        'zh_CN.GB2312:zh_CN:zh', 'UTF-8' ],
#- does this one works? 
#'zh_CN.GB18030' => [ 'Chinese|Simplified|GB18030','gb2312','zh_CN', 'zh_CN.GB2312:zh_CN:zh' ],
);
@languages = map { $_->[0] } group_by2(@languages);

my %xim = (
  'zh_TW.Big5' => { 
 	ENC => 'big5',
 	XIM => 'xcin',
 	XIM_PROGRAM => 'xcin',
 	XMODIFIERS => '"@im=xcin"',
 	CONSOLE_NOT_LOCALIZED => 'yes',
  },
  'zh_TW.Big5@chinput' => {
	ENC => 'big5',
	XIM => 'Chinput',
	XIM_PROGRAM => 'chinput',
	XMODIFIERS => '"@im=Chinput"',
	CONSOLE_NOT_LOCALIZED => 'yes',
  },
  'zh_TW.UTF-8' => {
	ENC => 'utf8',
	XIM => 'Chinput',
	XIM_PROGRAM => 'chinput',
	XMODIFIERS => '"@im=Chinput"',
	CONSOLE_NOT_LOCALIZED => 'yes',
  },
  'zh_CN.GB2312' => {
	ENC => 'gb',
	XIM => 'Chinput',
	XIM_PROGRAM => 'chinput',
	XMODIFIERS => '"@im=Chinput"',
	CONSOLE_NOT_LOCALIZED => 'yes',
  },
  'zh_CN.UTF-8' => {
	ENC => 'utf8',
	XIM => 'Chinput',
	XIM_PROGRAM => 'chinput',
	XMODIFIERS => '"@im=Chinput"',
	CONSOLE_NOT_LOCALIZED => 'yes',
  },
  'ko' => {
	ENC => 'kr',
	XIM => 'Ami',
	#- NOTE: there are several possible versions of ami, for the different
	#- desktops (kde, gnome, etc). So XIM_PROGRAM isn't defined; it will
	#- be the xinitrc script, XIM section, that will choose the right one 
	#- XIM_PROGRAM => 'ami',
	XMODIFIERS => '"@im=Ami"',
	CONSOLE_NOT_LOCALIZED => 'yes',
  },
  'ko_KR.UTF-8' => {
	ENC => 'utf8',
	XIM => 'Ami',
	#- NOTE: there are several possible versions of ami, for the different
	#- desktops (kde, gnome, etc). So XIM_PROGRAM isn't defined; it will
	#- be the xinitrc script, XIM section, that will choose the right one 
	#- XIM_PROGRAM => 'ami',
	XMODIFIERS => '"@im=Ami"',
	CONSOLE_NOT_LOCALIZED => 'yes',
  },
  'ja' => {
	ENC => 'eucj',
	XIM => 'kinput2',
	XIM_PROGRAM => 'kinput2',
	XMODIFIERS => '"@im=kinput2"',
  },
  'ja_JP.UTF-8' => {
	ENC => 'utf8',
	XIM => 'kinput2',
	XIM_PROGRAM => 'kinput2',
	XMODIFIERS => '"@im=kinput2"',
  },
  #- XFree86 has an internal XIM for Thai that enables syntax checking etc.
  #- 'Passthroug' is no check at all, 'BasicCheck' accepts bad sequences
  #- and convert them to right ones, 'Strict' refuses bad sequences
  'th' => {
	XIM_PROGRAM => '/bin/true', #- it's an internal module
	XMODIFIERS => '"@im=BasicCheck"',
  },
  #- xvnkb is not an XIM input method; but an input method of another
  #- kind, only XIM_PROGRAM needs to be defined
  #- ! xvnkb doesn't work in UTF-8 !
#-  'vi_VN.VISCII' => {
#-	XIM_PROGRAM => 'xvnkb',
#-  },
);

sub std2 { "-*-*-medium-r-normal-*-$_[1]-*-*-*-*-*-$_[0]" }
sub std_ { std2($_[0], 10), std2($_[0], 10) }
sub std  { std2($_[0], $_[1] || 10), std2($_[0],  8) }

#- [0]: console font name
#- [1]: sfm map for console font (if needed)
#- [2]: acm file for console font (none if utf8)
#- [3]: iocharset param for mount (utf8 if utf8)
#- [4]: codepage parameter for mount (none if utf8)
#- [5]: X11 fontset (for DrakX)
my %charsets = (
  "armscii-8"  => [ "arm8",		undef,	"armscii-8",
	 undef,	undef, std_("armscii-8") ],
#- chinese needs special console driver for text mode
  "Big5"       => [ undef,		undef,		undef,
	"big5", "950", "-*-*-*-*-*-*-*-*-*-*-*-*-big5-0" ],
  "gb2312"     => [ undef,		undef,		undef,
	"gb2312", "936", "-*-*-*-*-*-*-*-*-*-*-*-*-gb2312.1980-0" ],
  "C" => [ "lat0-16",	undef,		"iso15",
	"iso8859-1", "850", sub { std("iso8859-1", @_) } ],
  "iso-8859-1" => [ "lat1-16",	undef,		"iso01",
	"iso8859-1", "850", sub { std("iso8859-15", @_) } ],
  "iso-8859-2" => [ "lat2-sun16",	undef,		"iso02",
	"iso8859-2", "852", sub { std("iso8859-2", @_) } ],
  "iso-8859-3" => [ "iso03.f16",	undef,		"iso03",
	"iso8859-3", undef, std_("iso8859-3") ],
#-  "iso-8859-4" => [ "lat4u-16",		undef,		"iso04",
#-	"iso8859-4", "775", std_("iso8859-4") ],
#-  "iso-8859-5" => [ "UniCyr_8x16",	undef,	"iso05",
#-  	"iso8859-5", "855", sub { std("microsoft-cp1251", @_) } ],
#-#- arabic needs special console driver for text mode [acon]
#-#- (and gtk support isn't done yet)
  "iso-8859-6" => [ "iso06.f16",	undef,	"iso06",
	"iso8859-6", "864", std_("iso8859-6") ],
  "iso-8859-7" => [ "iso07.f16",	undef,	"iso07",
	"iso8859-7", "869", std_("iso8859-7") ],
#-#- hebrew needs special console driver for text mode [acon]
#-#- (and gtk support isn't done yet)
   "iso-8859-8" => [ "iso08.f16",	undef,	"iso08",
#-	std_("iso8859-8") ],
	"iso8859-8", "862", std_("microsoft-cp1255") ],
  "iso-8859-9" => [ "lat5u-16",	undef,	"iso09",
	"iso8859-9", "857", sub { std("iso8859-9", @_) } ],
  "iso-8859-13" => [ "tlat7",		undef,	"iso13",
	"iso8859-13", "775", std_("iso8859-13") ],
  "iso-8859-14" => [ "iso14.f16",	undef,		"iso14",
	"iso8859-14", "850", std_("iso8859-14") ],
  "iso-8859-15" => [ "lat0-16",	undef,		"iso15",
	"iso8859-15", "850", sub { std("iso8859-15", @_) } ],
  "iso-8859-9e"      => [ "tiso09e",		undef,	"iso09e",
	undef, undef, std2("iso8859-9e",10) ],
#- japanese needs special console driver for text mode [kon2]
  "jisx0208"   => [ undef,		undef,		"trivial.trans",
	"euc-jp", "932", "-*-*-*-*-*-*-*-*-*-*-*-*-jisx*.*-0" ],
  "koi8-r"     => [ "UniCyr_8x16",	undef,		"koi8-r",
	"koi8-r", "866", sub { std("microsoft-cp1251", @_) } ],
  "koi8-u"     => [ "UniCyr_8x16",	undef,		"koi8-u",
	"koi8-u", "866", sub { std("microsoft-cp1251", @_) } ],
  "utf_ka"      => [ "t_geors",		undef,	undef,
	"utf8",  undef, "-*-*-*-*-*-*-*-*-*-*-*-*-georgian-academy" ],
  "utf_koi8-k"     => [ "koi8-k",		undef,	undef,
	"utf8", undef, std("koi8-k") ],
  "cp1251"     => [ "UniCyr_8x16",	undef,		"cp1251",
	"cp1251", "866", sub { std("microsoft-cp1251", @_) } ],
#- Yiddish needs special console driver for text mode [acon]
#- (and gtk support isn't done yet)
#-  "cp1255"     => [ "iso08.f16",        "iso08",        "trivial.trans",
#-	"cp1255", "862", std_("microsoft-cp1255") ],
#- Urdu needs special console driver for text mode [acon]
#- (and gtk support isn't done yet)
#-  "cp1256"     => [ undef,              undef,          "trivial.trans",
#-	undef, "864", std_("microsoft-cp1255") ],
#- korean needs special console driver for text mode
  "ksc5601"    => [ undef,		undef,		undef,
	"euc-kr", "949", "-*-*-*-*-*-*-*-*-*-*-*-*-ksc5601.1987-*" ],
#- I have no console font for Thai...
  "tis620"     => [ undef,		undef,		"trivial.trans",
	"tis-620", "874", std2("tis620.2533-1",12) ],
#-  "tcvn"       => [ "tcvn8x16",		undef,		"tcvn",
#-	undef, undef, std2("tcvn-5712", 13), std2("tcvn-5712", 10) ],
  "viscii"     => [ "tcvn8x16",	undef,	"viscii",
	undef, undef, std2("tcvn-5712", 13), std2("tcvn-5712", 10) ],
#- Tamil uses pseudo iso-8859-1 fonts
  "tscii" => [ "tamil",		undef,		"tscii-0",
	undef, undef, "-tamil-tscakaram-medium-r-normal--12-120-75-75-p-92-tscii-0" ],
  "unicode" => [ undef,			undef,		undef,
	"utf8", undef, "-*-*-*-*-*-*-*-*-*-*-*-*-iso10646-1" ],
);

my %bigfonts = (
    Big5     => 'taipei16.pcf.gz',
    gb2312   => 'gb16fs.pcf.gz',
    jisx0208 => 'k14.pcf.gz',
    ksc5601  => 'baekmuk_gulim_h_14.pcf.gz',
    unicode  => 'cu12.pcf.gz',
);

#- for special cases not handled magically
my %charset2kde_charset = (
    gb2312 => 'gb2312.1980-0',
    jisx0208 => 'jisx0208.1983-0',
    ksc5601 => 'ksc5601.1987-0',
    Big5 => 'big5-0',
    cp1251 => 'microsoft-cp1251',
    utf8 => 'iso10646-1',
    tis620 => 'tis620-0',
    #- TSCII works using a pseudo iso-8859-1 encoding
    tscii => 'iso8859-1',
);

#- for special cases not handled magically
my %lang2country = (
  ar => 'eg',
  be => 'by',
  bs => 'bh',
  cs => 'cz',
  da => 'dk',
  el => 'gr',
  et => 'ee',
  ko => 'kr',
  mi => 'nz',
  ms => 'my',
  nn => 'no',
  sl => 'si',
  sp => 'sr',
  sv => 'se',
  ta => 'in',
);


my @during_install__lang_having_their_LC_CTYPE = qw(ja ko th vi);

#-######################################################################################
#- Functions
#-######################################################################################

sub list { 
    my (%options) = @_;
    my @l = @languages;
    if ($options{exclude_non_necessary_utf8}) {
	my %LANGs_non_utf8 = map { lang2LANG($_) => 1 } grep { !/UTF-8/ } @languages;
	@l = grep { !/UTF-8/ || !$LANGs_non_utf8{lang2LANG($_)} } @l;
    }
    if ($options{exclude_non_installed_langs}) {
	@l = grep { -e "/usr/share/locale/" . lang2LANG($_) . "/LC_CTYPE" } @l;
    }
    @l;
}
sub lang2text     { exists $languages{$_[0]} && $languages{$_[0]}[0] }
sub lang2charset  { exists $languages{$_[0]} && $languages{$_[0]}[1] }
sub lang2LANG     { exists $languages{$_[0]} && $languages{$_[0]}[2] }
sub lang2LANGUAGE { exists $languages{$_[0]} && $languages{$_[0]}[3] }
sub lang2UTF8     { exists $languages{$_[0]} && $languages{$_[0]}[4] }
sub getxim { $xim{$_[0]} }

sub lang2console_font {
    my ($lang) = @_;
    my $c = $charsets{lang2charset($lang) || return} or return;
    my ($name, $sfm, $acm) = @$c;
    undef $acm if lang2UTF8($lang);
    ($name, $sfm, $acm);
}

sub lang2country {
    my ($lang, $prefix) = @_;

    my $dir = "$prefix/usr/share/locale/l10n";
    my @countries = grep { -d "$dir/$_" } all($dir);