package lang; # $Id$ use diagnostics; use strict; use common; use log; #- key: lang name (locale name for some (~5) special cases needing #- extra distinctions) #- [0]: lang name in english #- [1]: transliterated locale name in the locale name (used for sorting) #- [2]: default locale name to use for that language if there is not #- an existing locale for the combination language+country choosen #- [3]: geographic groups that this language belongs to (for displaying #- in the menu grouped in smaller lists), 1=Europe, 2=Asia, 3=Africa, #- 4=Oceania&Pacific, 5=America (if you wonder, it's the order #- used in the olympic flag) #- [4]: special value for LANGUAGE variable (if different of the default #- of 'll_CC:ll_DD:ll' (ll_CC: locale (if exist) resulting of the #- combination of chosen lang (ll) and country (CC), ll_DD: the #- default locale shown here (field [2]) and ll: the language (the key)) our %langs = ( 'af' => [ 'Afrikaans', 'Afrikaans', 'af_ZA', ' 3 ', 'iso-8859-1' ], 'am' => [ 'Amharic', 'ZZ emarNa', 'am_ET', ' 3 ', 'utf_am' ], 'ar' => [ 'Arabic', 'AA Arabic', 'ar_EG', ' 23 ', 'utf_ar' ], 'as' => [ 'Assamese', 'ZZ Assamese', 'as_IN', ' 2 ', 'utf_bn' ], 'az' => [ 'Azeri (Latin)', 'Azerbaycanca', 'az_AZ', ' 2 ', 'utf_az' ], 'be' => [ 'Belarussian', 'Belaruskaya', 'be_BY', '1 ', 'cp1251' ], #-'ber' => [ 'Berber', 'ZZ Tamazight', 'ber_MA',' 3 ', 'unicode' ], 'bg' => [ 'Bulgarian', 'Blgarski', 'bg_BG', '1 ', 'cp1251' ], 'bn' => [ 'Bengali', 'ZZ Bengali', 'bn_BD', ' 2 ', 'utf_bn' ], 'br' => [ 'Breton', 'Brezhoneg', 'br_FR', '1 ', 'iso-8859-15', 'br:fr_FR:fr' ], 'bs' => [ 'Bosnian', 'Bosanski', 'bs_BA', '1 ', 'iso-8859-2' ], 'ca' => [ 'Catalan', 'Catala', 'ca_ES', '1 ', 'iso-8859-15', 'ca:es_ES:es' ], 'cs' => [ 'Czech', 'Cestina', 'cs_CZ', '1 ', 'iso-8859-2' ], 'cy' => [ 'Welsh', 'Cymraeg', 'cy_GB', '1 ', 'utf_lat8', 'cy:en_GB:en' ], 'da' => [ 'Danish', 'Dansk', 'da_DK', '1 ', 'iso-8859-15' ], 'de' => [ 'German', 'Deutsch', 'de_DE', '1 ', 'iso-8859-15' ], #-'dz' => [ 'Buthanese', 'ZZ Dzhonka', 'dz_BT', ' 2 ', 'unicode' ], 'el' => [ 'Greek', 'Ellynika', 'el_GR', '1 ', 'iso-8859-7' ], 'en_GB' => [ 'English', 'English', 'en_GB', '12345', 'iso-8859-15' ], 'en_US' => [ 'English (American)', 'English (American)', 'en_US', ' 5', 'C' ], 'en_IE' => [ 'English (Ireland)', 'English (Ireland)', 'en_IE', '1 ', 'iso-8859-15', 'en_IE:en_GB:en' ], 'eo' => [ 'Esperanto', 'Esperanto', 'eo_XX', '12345', 'unicode' ], 'es' => [ 'Spanish', 'Espanol', 'es_ES', '1 3 5', 'iso-8859-15' ], 'et' => [ 'Estonian', 'Eesti', 'et_EE', '1 ', 'iso-8859-15' ], 'eu' => [ 'Euskara (Basque)', 'Euskara', 'eu_ES', '1 ', 'iso-8859-15' ], 'fa' => [ 'Farsi (Iranian)', 'AA Farsi', 'fa_IR', ' 2 ', 'utf_ar' ], 'fi' => [ 'Finnish (Suomi)', 'Suomi', 'fi_FI', '1 ', 'iso-8859-15' ], 'fo' => [ 'Faroese', 'Foroyskt', 'fo_FO', '1 ', 'iso-8859-1' ], 'fr' => [ 'French', 'Francais', 'fr_FR', '1 345', 'iso-8859-15' ], 'fur' => [ 'Furlan', 'Furlan', 'fur_IT', '1 ', 'iso-8859-15', 'fur:it_IT:it' ], 'fy' => [ 'Frisian', 'Frysk', 'fy_NL', '1 ', 'iso-8859-1' ], 'ga' => [ 'Gaelic (Irish)', 'Gaeilge', 'ga_IE', '1 ', 'iso-8859-15', 'ga:en_IE:en_GB:en' ], #'gd' => [ 'Gaelic (Scottish)', 'Gaidhlig', 'gd_GB', '1 ', 'utf_lat8', 'gd:en_GB:en' ], 'gl' => [ 'Galician', 'Galego', 'gl_ES', '1 ', 'iso-8859-15', 'gl:es_ES:es:pt:pt_BR' ], #'gn' => [ 'Guarani', 'Avane-e', 'gn_PY', ' 5', 'utf8', 'gn:es_PY:es' ], 'gu' => [ 'Gujarati', 'ZZ Gujarati', 'gu_IN', ' 2 ', 'unicode' ], #'gv' => [ 'Gaelic (Manx)', 'Gaelg', 'gv_GB', '1 ', 'utf_lat8', 'gv:en_GB:en' ], 'he' => [ 'Hebrew', 'AA Ivrit', 'he_IL', ' 2 ', 'utf_he' ], 'hi' => [ 'Hindi', 'ZZ Hindi', 'hi_IN', ' 2 ', 'utf_hi' ], 'hr' => [ 'Croatian', 'Hrvatski', 'hr_HR', '1 ', 'iso-8859-2' ], 'hu' => [ 'Hungarian', 'Magyar', 'hu_HU', '1 ', 'iso-8859-2' ], 'hy' => [ 'Armenian', 'ZZ Armenian', 'hy_AM', ' 2 ', 'utf_hy' ], # locale not done yet #'ia' => [ 'Interlingua', 'Interlingua', 'ia_XX', '1 5', 'utf8' ], 'id' => [ 'Indonesian', 'Bahasa Indonesia', 'id_ID', ' 2 ', 'iso-8859-1' ], 'is' => [ 'Icelandic', 'Islenska', 'is_IS', '1 ', 'iso-8859-1' ], 'it' => [ 'Italian', 'Italiano', 'it_IT', '1 ', 'iso-8859-15' ], 'iu' => [ 'Inuktitut', 'ZZ Inuktitut', 'iu_CA', ' 5', 'utf8iu' ], 'ja' => [ 'Japanese', 'ZZ Nihongo', 'ja_JP', ' 2 ', 'jisx0208' ], 'ka' => [ 'Georgian', 'ZZ Georgian', 'ka_GE', ' 2 ', 'utf_ka' ], 'kl' => [ 'Greenlandic (inuit)', 'Kalaallisut', 'kl_GL', ' 5', 'iso-8859-1' ], 'km' => [ 'Khmer', 'ZZ Khmer', 'km_KH', ' 2 ', 'utf_km' ], 'kn' => [ 'Kannada', 'ZZ Kannada', 'kn_IN', ' 2 ', 'utf_kn' ], 'ko' => [ 'Korean', 'ZZ Korea', 'ko_KR', ' 2 ', 'ksc5601' ], 'ku' => [ 'Kurdish', 'Kurdi', 'ku_TR', ' 2 ', 'iso-8859-9' ], #-'kw' => [ 'Cornish', 'Kernewek', 'kw_GB', '1 ', 'utf_lat8', 'kw:en_GB:en' ], 'ky' => [ 'Kyrgyz', 'Kyrgyz', 'ky_KG', ' 2 ', 'utf_cyr2' ], #- lb_LU not yet done, using de_LU locale instead 'lb' => [ 'Luxembourgish', 'Letzebuergesch', 'de_LU', '1 ', 'iso-8859-15', 'lb:de_LU' ], 'li' => [ 'Limbourgish', 'Limburgs', 'li_NL', '1 ', 'iso-8859-15' ], 'lo' => [ 'Laotian', 'Laotian', 'lo_LA', ' 2 ', 'utf_lo' ], 'lt' => [ 'Lithuanian', 'Lietuviskai', 'lt_LT', '1 ', 'iso-8859-13' ], #- ltg_LV locale not done yet, using lv_LV for now #- "ltg" is not a standard lang code, ISO-639 code was refused; #- LTG_LV should be used instead (uppercase is for non-standard #- langcodes, as defined by locale naming standard 'ltg' => [ 'Latgalian', 'Latgalisu', 'lv_LV', '1 ', 'iso-8859-13', 'ltg:LTG:lv' ], 'lv' => [ 'Latvian', 'Latviesu', 'lv_LV', '1 ', 'iso-8859-13' ], 'mi' => [ 'Maori', 'Maori', 'mi_NZ', ' 4 ', 'unicode' ], 'mk' => [ 'Macedonian', 'Makedonski', 'mk_MK', '1 ', 'utf_cyr1' ], 'ml' => [ 'Malayalam', 'ZZ Malayalam', 'ml_IN', ' 2 ', 'utf_ml' ], 'mn' => [ 'Mongolian', 'Mongol', 'mn_MN', ' 2 ', 'utf_cyr2' ], 'mr' => [ 'Marathi', 'ZZ Marathi', 'mr_IN', ' 2 ', 'utf_hi' ], 'ms' => [ 'Malay', 'Bahasa Melayu', 'ms_MY', ' 2 ', 'iso-8859-1' ], 'mt' => [ 'Maltese', 'Maltin', 'mt_MT', '1 3 ', 'unicode' ], 'nb' => [ 'Norwegian Bokmaal', 'Norsk, Bokmal', 'nb_NO', '1 ', 'iso-8859-1', 'nb:no' ], 'nds' => [ 'Low Saxon', 'Platduutsch', 'nds_DE', '1 ', 'iso-8859-1', 'nds_DE:nds' ], 'ne' => [ 'Nepali', 'ZZ Nepali', 'ne_NP', ' 2 ', 'unicode' ], 'nl' => [ 'Dutch', 'Nederlands', 'nl_NL', '1 ', 'iso-8859-15' ], 'nn' => [ 'Norwegian Nynorsk', 'Norsk, Nynorsk', 'nn_NO', '1 ', 'iso-8859-1', 'nn:no@nynorsk:no_NY:no:nb' ], 'oc' => [ 'Occitan', 'Occitan', 'oc_FR', '1 ', 'iso-8859-1', 'oc:fr_FR:fr' ], 'pa' => [ 'Punjabi', 'ZZ Punjabi', 'pa_IN', ' 2 ', 'unicode' ], #- 'tl' in priority position for now, as 'fil' is not much used. #- Monolingual window managers will not see the menus otherwise #- "ph_PH" should change to "fil_PH" in the future ("ph" is not #- standard lang code, "fil" is standard) 'ph' => [ 'Filipino', 'Filipino', 'ph_PH', ' 2 ', 'iso-8859-1', 'tl:fil' ], 'pl' => [ 'Polish', 'Polski', 'pl_PL', '1 ', 'iso-8859-2' ], 'pt' => [ 'Portuguese', 'Portugues', 'pt_PT', '1 3 ', 'iso-8859-15', 'pt_PT:pt:pt_BR' ], 'pt_BR' => [ 'Portuguese Brazil', 'Portugues do Brasil', 'pt_BR', ' 5', 'iso-8859-1', 'pt_BR:pt_PT:pt' ], 'ro' => [ 'Romanian', 'Romana', 'ro_RO', '1 ', 'iso-8859-2' ], 'ru' => [ 'Russian', 'Russkij', 'ru_RU', '12 ', 'koi8-u' ], 'sc' => [ 'Sardinian', 'Sardu', 'sc_IT', '1 ', 'iso-8859-15', 'sc:it_IT:it' ], 'se' => [ 'Saami', 'Samegiella', 'se_NO', '1 ', 'unicode' ], 'sk' => [ 'Slovak', 'Slovencina', 'sk_SK', '1 ', 'iso-8859-2' ], 'sl' => [ 'Slovenian', 'Slovenscina', 'sl_SI', '1 ', 'iso-8859-2' ], 'sq' => [ 'Albanian', 'Shqip', 'sq_AL', '1 ', 'iso-8859-1' ], 'sr' => [ 'Serbian Cyrillic', 'Srpska', 'sr_CS', '1 ', 'utf_cyr1', 'sp:sr' ], 'sr@Latn' => [ 'Serbian Latin', 'Srpska', 'sr_CS', '1 ', 'unicode', 'sh:sr@Latn' ], #- ss_ZA not yet done, using en_ZA locale instead 'ss' => [ 'Swati', 'SiSwati', 'en_ZA', ' 3 ', 'iso-8859-1', 'ss:en_ZA' ], 'st' => [ 'Sotho', 'Sesotho', 'st_ZA', ' 3 ', 'iso-8859-1', 'st:nso:en_ZA' ], 'sv' => [ 'Swedish', 'Svenska', 'sv_SE', '1 ', 'iso-8859-1' ], 'ta' => [ 'Tamil', 'ZZ Tamil', 'ta_IN', ' 2 ', 'utf_ta' ], 'te' => [ 'Telugu', 'ZZ Telugu', 'te_IN', ' 2 ', 'unicode' ], 'tg' => [ 'Tajik', 'Tojiki', 'tg_TJ', ' 2 ', 'utf_cyr2' ], 'th' => [ 'Thai', 'ZZ Thai', 'th_TH', ' 2 ', 'tis620' ], 'tk' => [ 'Turkmen', 'Turkmence', 'tk_TM', ' 2 ', 'utf8' ], 'tr' => [ 'Turkish', 'Turkce', 'tr_TR', '12 ', 'iso-8859-9' ], 'tt' => [ 'Tatar', 'Tatarca', 'tt_RU', ' 2 ', 'utf8' ], #- ug_CN locale not done yet, using ar_EG locale instead 'ug' => [ 'Uyghur', 'AA Uyghur', 'ar_EG', ' 2 ', 'utf_ar', 'ug' ], 'uk' => [ 'Ukrainian', 'Ukrayinska', 'uk_UA', '1 ', 'koi8-u' ], 'ur' => [ 'Urdu', 'AA Urdu', 'ur_PK', ' 2 ', 'utf_ar' ], 'uz@Latn' => [ 'Uzbek (latin)', 'Ozbekcha', 'uz_UZ', ' 2 ', 'utf_cyr2', 'uz@Latn:uz' ], 'uz' => [ 'Uzbek (cyrillic)', 'Ozbekcha', 'uz_UZ', ' 2 ', 'utf_cyr2', 'uz@Cyrl:uz' ], #- ve_ZA not yet done, using en_ZA locale instead 've' => [ 'Venda', 'Venda', 'en_ZA', ' 3 ', 'iso-8859-1', 've:ven:en_ZA' ], 'vi' => [ 'Vietnamese', 'Tieng Viet', 'vi_VN', ' 2 ', 'utf_vi' ], 'wa' => [ 'Walon', 'Walon', 'wa_BE', '1 ', 'iso-8859-15', 'wa:fr_BE:fr' ], #- locale not done yet #'wen' => [ 'Sorbian', 'XX Sorbian', 'wen_XX', '1 ', 'iso-8859-1' ], 'xh' => [ 'Xhosa', 'IsiXhosa', 'xh_ZA', ' 3 ', 'iso-8859-1', 'xh:en_ZA' ], 'yi' => [ 'Yiddish', 'AA Yidish', 'yi_US', '1 ', 'utf_he' ], 'zh_CN' => [ 'Chinese Simplified', 'ZZ ZhongWen', 'zh_CN', ' 2 ', 'gb2312', 'zh_CN.GBK:zh_CN.GB2312:zh_CN:zh' ], 'zh_TW' => [ 'Chinese Traditional', 'ZZ ZhongWen', 'zh_TW', ' 2 ', 'Big5', 'zh_TW.Big5:zh_TW:zh_HK:zh' ], 'zu' => [ 'Zulu', 'IsiZulu', 'zu_ZA', ' 3 ', 'iso-8859-1', 'xh:en_ZA' ], ); sub l2name { exists $langs{$_[0]} && $langs{$_[0]}[0] } sub l2transliterated { exists $langs{$_[0]} && $langs{$_[0]}[1] } sub l2locale { exists $langs{$_[0]} && $langs{$_[0]}[2] } sub l2location { my %geo = (1 => 'Europe', 2 => 'Asia', 3 => 'Africa', 4 => 'Oceania/Pacific', 5 => 'America'); map { if_($langs{$_[0]}[3] =~ $_, $geo{$_}) } 1..5; } sub l2charset { exists $langs{$_[0]} && $langs{$_[0]}[4] } sub l2language { exists $langs{$_[0]} && $langs{$_[0]}[5] } sub list_langs { my (%options) = @_; my @l = keys %langs; $options{exclude_non_installed} ? grep { -e "/usr/share/locale/" . l2locale($_) . "/LC_CTYPE" } @l : @l; } sub text_direction_rtl() { #-PO: the string "default:LTR" can be translated *ONLY* as "default:LTR" #-PO: or as "default:RTL", depending if your language is written from #-PO: left to right, or from right to left; any other string is wrong. N("default:LTR") eq "default:RTL"; } #- key: country name (that should be YY in xx_YY locale) #- [0]: country name in natural language #- [1]: default locale for that country #- [2]: geographic groups that this country belongs to (for displaying #- in the menu grouped in smaller lists), 1=Europe, 2=Asia, 3=Africa, #- 4=Oceania&Pacific, 5=America (if you wonder, it's the order #- used in the olympic flag) #- #- Note: for countries for which a glibc locale do not exist (yet) I tried to #- put a locale that makes sense; and a '#' at the end of the line to show #- the locale is not the "correct" one. 'en_US' is used when no good choice #- is available. my %countries = ( 'AD' => [ N_("Andorra"), 'ca_ES', '1' ], # 'AE' => [ N_("United Arab Emirates"), 'ar_AE', '2' ], 'AF' => [ N_("Afghanistan"), 'en_US', '2' ], # 'AG' => [ N_("Antigua and Barbuda"), 'en_US', '5' ], # 'AI' => [ N_("Anguilla"), 'en_US', '5' ], # 'AL' => [ N_("Albania"), 'sq_AL', '1' ], 'AM' => [ N_("Armenia"), 'hy_AM', '2' ], 'AN' => [ N_("Netherlands Antilles"), 'en_US', '5' ], # 'AO' => [ N_("Angola"), 'pt_PT', '3' ], # 'AQ' => [ N_("Antarctica"), 'en_US', '4' ], # 'AR' => [ N_("Argentina"), 'es_AR', '5' ], 'AS' => [ N_("American Samoa"), 'en_US', '4' ], # 'AT' => [ N_("Austria"), 'de_AT', '1' ], 'AU' => [ N_("Australia"), 'en_AU', '4' ], 'AW' => [ N_("Aruba"), 'en_US', '5' ], # 'AZ' => [ N_("Azerbaijan"), 'az_AZ', '1' ], 'BA' => [ N_("Bosnia and Herzegovina"), 'bs_BA', '1' ], 'BB' => [ N_("Barbados"), 'en_US', '5' ], # 'BD' => [ N_("Bangladesh"), 'bn_BD', '2' ], 'BE' => [ N_("Belgium"), 'fr_BE', '1' ], 'BF' => [ N_("Burkina Faso"), 'en_US', '3' ], # 'BG' => [ N_("Bulgaria"), 'bg_BG', '1' ], 'BH' => [ N_("Bahrain"), 'ar_BH', '2' ], 'BI' => [ N_("Burundi"), 'en_US', '3' ], # 'BJ' => [ N_("Benin"), 'fr_FR', '3' ], # 'BM' => [ N_("Bermuda"), 'en_US', '5' ], # 'BN' => [ N_("Brunei Darussalam"), 'ar_EG', '2' ], # 'BO' => [ N_("Bolivia"), 'es_BO', '5' ], 'BR' => [ N_("Brazil"), 'pt_BR', '5' ], 'BS' => [ N_("Bahamas"), 'en_US', '5' ], # 'BT' => [ N_("Bhutan"), 'en_IN', '2' ], # dz_BT 'BV' => [ N_("Bouvet Island"), 'en_US', '3' ], # 'BW' => [ N_("Botswana"), 'en_BW', '3' ], 'BY' => [ N_("Belarus"), 'be_BY', '1' ], 'BZ' => [ N_("Belize"), 'en_US', '5' ], # 'CA' => [ N_("Canada"), 'en_CA', '5' ], 'CC' => [ N_("Cocos (Keeling) Islands"), 'en_US', '4' ], # 'CD' => [ N_("Congo (Kinshasa)"), 'fr_FR', '3' ], # 'CF' => [ N_("Central African Republic"), 'fr_FR', '3' ], # 'CG' => [ N_("Congo (Brazzaville)"), 'fr_FR', '3' ], # 'CH' => [ N_("Switzerland"), 'de_CH', '1' ], 'CI' => [ N_("Cote d'Ivoire"), 'fr_FR', '3' ], # 'CK' => [ N_("Cook Islands"), 'en_US', '4' ], # 'CL' => [ N_("Chile"), 'es_CL', '5' ], 'CM' => [ N_("Cameroon"), 'fr_FR', '3' ], # 'CN' => [ N_("China"), 'zh_CN', '2' ], 'CO' => [ N_("Colombia"), 'es_CO', '5' ], 'CR' => [ N_("Costa Rica"), 'es_CR', '5' ], 'CS' => [ N_("Serbia & Montenegro"), 'sr_CS', '1' ], 'CU' => [ N_("Cuba"), 'es_DO', '5' ], # 'CV' => [ N_("Cape Verde"), 'pt_PT', '3' ], # 'CX' => [ N_("Christmas Island"), 'en_US', '4' ], # 'CY' => [ N_("Cyprus"), 'en_US', '1' ], # 'CZ' => [ N_("Czech Republic"), 'cs_CZ', '2' ], 'DE' => [ N_("Germany"), 'de_DE', '1' ], 'DJ' => [ N_("Djibouti"), 'en_US', '3' ], # 'DK' => [ N_("Denmark"), 'da_DK', '1' ], 'DM' => [ N_("Dominica"), 'en_US', '5' ], # 'DO' => [ N_("Dominican Republic"), 'es_DO', '5' ], 'DZ' => [ N_("Algeria"), 'ar_DZ', '3' ], 'EC' => [ N_("Ecuador"), 'es_EC', '5' ], 'EE' => [ N_("Estonia"), 'et_EE', '1' ], 'EG' => [ N_("Egypt"), 'ar_EG', '3' ], 'EH' => [ N_("Western Sahara"), 'ar_MA', '3' ], # 'ER' => [ N_("Eritrea"), 'ti_ER', '3' ], 'ES' => [ N_("Spain"), 'es_ES', '1' ], 'ET' => [ N_("Ethiopia"), 'am_ET', '3' ], 'FI' => [ N_("Finland"), 'fi_FI', '1' ], 'FJ' => [ N_("Fiji"), 'en_US', '4' ], # 'FK' => [ N_("Falkland Islands (Malvinas)"), 'en_GB', '5' ], # 'FM' => [ N_("Micronesia"), 'en_US', '4' ], # 'FO' => [ N_("Faroe Islands"), 'fo_FO', '1' ], 'FR' => [ N_("France"), 'fr_FR', '1' ], 'GA' => [ N_("Gabon"), 'fr_FR', '3' ], # 'GB' => [ N_("United Kingdom"), 'en_GB', '1' ], 'GD' => [ N_("Grenada"), 'en_US', '5' ], # 'GE' => [ N_("Georgia"), 'ka_GE', '2' ], 'GF' => [ N_("French Guiana"), 'fr_FR', '5' ], # 'GH' => [ N_("Ghana"), 'en_GB', '3' ], # 'GI' => [ N_("Gibraltar"), 'en_GB', '1' ], # 'GL' => [ N_("Greenland"), 'kl_GL', '5' ], 'GM' => [ N_("Gambia"), 'en_US', '3' ], # 'GN' => [ N_("Guinea"), 'en_US', '3' ], # 'GP' => [ N_("Guadeloupe"), 'fr_FR', '5' ], # 'GQ' => [ N_("Equatorial Guinea"), 'en_US', '3' ], # 'GR' => [ N_("Greece"), 'el_GR', '1' ], 'GS' => [ N_("South Georgia and the South Sandwich Islands"), 'en_US', '4' ], # 'GT' => [ N_("Guatemala"), 'es_GT', '5' ], 'GU' => [ N_("Guam"), 'en_US', '4' ], # 'GW' => [ N_("Guinea-Bissau"), 'pt_PT', '3' ], # 'GY' => [ N_("Guyana"), 'en_US', '5' ], # 'HK' => [ N_("Hong Kong SAR (China)"), 'zh_HK', '2' ], 'HM' => [ N_("Heard and McDonald Islands"), 'en_US', '4' ], # 'HN' => [ N_("Honduras"), 'es_HN', '5' ], 'HR' => [ N_("Croatia"), 'hr_HR', '1' ], 'HT' => [ N_("Haiti"), 'fr_FR', '5' ], # 'HU' => [ N_("Hungary"), 'hu_HU', '1' ], 'ID' => [ N_("Indonesia"), 'id_ID', '2' ], 'IE' => [ N_("Ireland"), 'en_IE', '1' ], 'IL' => [ N_("Israel"), 'he_IL', '2' ], 'IN' => [ N_("India"), 'hi_IN', '2' ], 'IO' => [ N_("British Indian Ocean Territory"), 'en_GB', '2' ], # 'IQ' => [ N_("Iraq"), 'ar_IQ', '2' ], 'IR' => [ N_("Iran"), 'fa_IR', '2' ], 'IS' => [ N_("Iceland"), 'is_IS', '1' ], 'IT' => [ N_("Italy"), 'it_IT', '1' ], 'JM' => [ N_("Jamaica"), 'en_US', '5' ], # 'JO' => [ N_("Jordan"), 'ar_JO', '2' ], 'JP' => [ N_("Japan"), 'ja_JP', '2' ], 'KE' => [ N_("Kenya"), 'en_ZW', '3' ], # 'KG' => [ N_("Kyrgyzstan"), 'ky_KG', '2' ], 'KH' => [ N_("Cambodia"), 'km_KH', '2' ], 'KI' => [ N_("Kiribati"), 'en_US', '3' ], # 'KM' => [ N_("Comoros"), 'en_US', '2' ], # 'KN' => [ N_("Saint Kitts and Nevis"), 'en_US', '5' ], # 'KP' => [ N_("Korea (North)"), 'ko_KR', '2' ], # 'KR' => [ N_("Korea"), 'ko_KR', '2' ], 'KW' => [ N_("Kuwait"), 'ar_KW', '2' ], 'KY' => [ N_("Cayman Islands"), 'en_US', '5' ], # 'KZ' => [ N_("Kazakhstan"), 'ru_RU', '2' ], # 'LA' => [ N_("Laos"), 'lo_LA', '2' ], 'LB' => [ N_("Lebanon"), 'ar_LB', '2' ], 'LC' => [ N_("Saint Lucia"), 'en_US', '5' ], # 'LI' => [ N_("Liechtenstein"), 'de_CH', '1' ], # 'LK' => [ N_("Sri Lanka"), 'en_IN', '2' ], # 'LR' => [ N_("Liberia"), 'en_US', '3' ], # 'LS' => [ N_("Lesotho"), 'en_BW', '3' ], # 'LT' => [ N_("Lithuania"), 'lt_LT', '1' ], 'LU' => [ N_("Luxembourg"), 'de_LU', '1' ], # lb_LU 'LV' => [ N_("Latvia"), 'lv_LV', '1' ], 'LY' => [ N_("Libya"), 'ar_LY', '3' ], 'MA' => [ N_("Morocco"), 'ar_MA', '3' ], 'MC' => [ N_("Monaco"), 'fr_FR', '1' ], # 'MD' => [ N_("Moldova"), 'ro_RO', '1' ], # 'MG' => [ N_("Madagascar"), 'fr_FR', '3' ], # 'MH' => [ N_("Marshall Islands"), 'en_US', '4' ], # 'MK' => [ N_("Macedonia"), 'mk_MK', '1' ], 'ML' => [ N_("Mali"), 'en_US', '3' ], # 'MM' => [ N_("Myanmar"), 'en_US', '2' ], # 'MN' => [ N_("Mongolia"), 'mn_MN', '2' ], 'MP' => [ N_("Northern Mariana Islands"), 'en_US', '2' ], # 'MQ' => [ N_("Martinique"), 'fr_FR', '5' ], # 'MR' => [ N_("Mauritania"), 'en_US', '3' ], # 'MS' => [ N_("Montserrat"), 'en_US', '5' ], # 'MT' => [ N_("Malta"), 'mt_MT', '1' ], 'MU' => [ N_("Mauritius"), 'en_US', '3' ], # 'MV' => [ N_("Maldives"), 'en_US', '4' ], # 'MW' => [ N_("Malawi"), 'en_US', '3' ], # 'MX' => [ N_("Mexico"), 'es_MX', '5' ], 'MY' => [ N_("Malaysia"), 'ms_MY', '2' ], 'MZ' => [ N_("Mozambique"), 'pt_PT', '3' ], # 'NA' => [ N_("Namibia"), 'en_US', '3' ], # 'NC' => [ N_("New Caledonia"), 'fr_FR', '4' ], # 'NE' => [ N_("Niger"), 'en_US', '3' ], # 'NF' => [ N_("Norfolk Island"), 'en_GB', '4' ], # 'NG' => [ N_("Nigeria"), 'en_US', '3' ], # 'NI' => [ N_("Nicaragua"), 'es_NI', '5' ], 'NL' => [ N_("Netherlands"), 'nl_NL', '1' ], 'NO' => [ N_("Norway"), 'nb_NO', '1' ], 'NP' => [ N_("Nepal"), 'ne_NP', '2' ], 'NR' => [ N_("Nauru"), 'en_US', '4' ], # 'NU' => [ N_("Niue"), 'en_US', '4' ], # 'NZ' => [ N_("New Zealand"), 'en_NZ', '4' ], 'OM' => [ N_("Oman"), 'ar_OM', '2' ], 'PA' => [ N_("Panama"), 'es_PA', '5' ], 'PE' => [ N_("Peru"), 'es_PE', '5' ], 'PF' => [ N_("French Polynesia"), 'fr_FR', '4' ], # 'PG' => [ N_("Papua New Guinea"), 'en_NZ', '4' ], # 'PH' => [ N_("Philippines"), 'ph_PH', '2' ], 'PK' => [ N_("Pakistan"), 'ur_PK', '2' ], 'PL' => [ N_("Poland"), 'pl_PL', '1' ], 'PM' => [ N_("Saint Pierre and Miquelon"), 'fr_CA', '5' ], # 'PN' => [ N_("Pitcairn"), 'en_US', '4' ], # 'PR' => [ N_("Puerto Rico"), 'es_PR', '5' ], 'PS' => [ N_("Palestine"), 'ar_JO', '2' ], # 'PT' => [ N_("Portugal"), 'pt_PT', '1' ], 'PY' => [ N_("Paraguay"), 'es_PY', '5' ], 'PW' => [ N_("Palau"), 'en_US', '2' ], # 'QA' => [ N_("Qatar"), 'ar_QA', '2' ], 'RE' => [ N_("Reunion"), 'fr_FR', '2' ], # 'RO' => [ N_("Romania"), 'ro_RO', '1' ], 'RU' => [ N_("Russia"), 'ru_RU', '1' ], 'RW' => [ N_("Rwanda"), 'fr_FR', '3' ], # rw_RW 'SA' => [ N_("Saudi Arabia"), 'ar_SA', '2' ], 'SB' => [ N_("Solomon Islands"), 'en_US', '4' ], # 'SC' => [ N_("Seychelles"), 'en_US', '4' ], # 'SD' => [ N_("Sudan"), 'ar_SD', '5' ], 'SE' => [ N_("Sweden"), 'sv_SE', '1' ], 'SG' => [ N_("Singapore"), 'en_SG', '2' ], 'SH' => [ N_("Saint Helena"), 'en_GB', '5' ], # 'SI' => [ N_("Slovenia"), 'sl_SI', '1' ], 'SJ' => [ N_("Svalbard and Jan Mayen Islands"), 'en_US', '1' ], # 'SK' => [ N_("Slovakia"), 'sk_SK', '1' ], 'SL' => [ N_("Sierra Leone"), 'en_US', '3' ], # 'SM' => [ N_("San Marino"), 'it_IT', '1' ], # 'SN' => [ N_("Senegal"), 'fr_FR', '3' ], # 'SO' => [ N_("Somalia"), 'en_US', '3' ], # so_SO 'SR' => [ N_("Suriname"), 'nl_NL', '5' ], # 'ST' => [ N_("Sao Tome and Principe"), 'en_US', '5' ], # 'SV' => [ N_("El Salvador"), 'es_SV', '5' ], 'SY' => [ N_("Syria"), 'ar_SY', '2' ], 'SZ' => [ N_("Swaziland"), 'en_BW', '3' ], # 'TC' => [ N_("Turks and Caicos Islands"), 'en_US', '5' ], # 'TD' => [ N_("Chad"), 'en_US', '3' ], # 'TF' => [ N_("French Southern Territories"), 'fr_FR', '4' ], # 'TG' => [ N_("Togo"), 'fr_FR', '3' ], # 'TH' => [ N_("Thailand"), 'th_TH', '2' ], 'TJ' => [ N_("Tajikistan"), 'tg_TJ', '2' ], 'TK' => [ N_("Tokelau"), 'en_US', '4' ], # 'TL' => [ N_("East Timor"), 'pt_PT', '4' ], # 'TM' => [ N_("Turkmenistan"), 'tk_TM', '2' ], 'TN' => [ N_("Tunisia"), 'ar_TN', '5' ], 'TO' => [ N_("Tonga"), 'en_US', '3' ], # 'TR' => [ N_("Turkey"), 'tr_TR', '2' ], 'TT' => [ N_("Trinidad and Tobago"), 'en_US', '5' ], # 'TV' => [ N_("Tuvalu"), 'en_US', '4' ], # 'TW' => [ N_("Taiwan"), 'zh_TW', '2' ], 'TZ' => [ N_("Tanzania"), 'en_US', '3' ], # 'UA' => [ N_("Ukraine"), 'uk_UA', '1' ], 'UG' => [ N_("Uganda"), 'en_US', '3' ], # lug_UG 'UM' => [ N_("United States Minor Outlying Islands"), 'en_US', '5' ], # 'US' => [ N_("United States"), 'en_US', '5' ], 'UY' => [ N_("Uruguay"), 'es_UY', '5' ], 'UZ' => [ N_("Uzbekistan"), 'uz_UZ', '2' ], 'VA' => [ N_("Vatican"), 'it_IT', '1' ], # 'VC' => [ N_("Saint Vincent and the Grenadines"), 'en_US', '5' ], 'VE' => [ N_("Venezuela"), 'es_VE', '5' ], 'VG' => [ N_("Virgin Islands (British)"), 'en_GB', '5' ], # 'VI' => [ N_("Virgin Islands (U.S.)"), 'en_US', '5' ], # 'VN' => [ N_("Vietnam"), 'vi_VN', '2' ], 'VU' => [ N_("Vanuatu"), 'en_US', '4' ], # 'WF' => [ N_("Wallis and Futuna"), 'fr_FR', '4' ], # 'WS' => [ N_("Samoa"), 'en_US', '4' ], # 'YE' => [ N_("Yemen"), 'ar_YE', '2' ], 'YT' => [ N_("Mayotte"), 'fr_FR', '3' ], # 'ZA' => [ N_("South Africa"), 'en_ZA', '5' ], 'ZM' => [ N_("Zambia"), 'en_US', '3' ], # 'ZW' => [ N_("Zimbabwe"), 'en_ZW', '5' ], ); sub c2name { exists $countries{$_[0]} && translate($countries{$_[0]}[0]) } sub c2locale { exists $countries{$_[0]} && $countries{$_[0]}[1] } sub list_countries { my (%options) = @_; my @l = keys %countries; $options{exclude_non_installed} ? grep { -e "/usr/share/locale/" . c2locale($_) . "/LC_CTYPE" } @l : @l; } #- this list is built with the following command on the compile cluster: #- rpm -qpl /RPMS/locales-* | grep LC_CTYPE | cut -d'/' -f5 | grep '_' | grep -v '\.' | sort | tr '\n' ' ' ; echo our @locales = qw(af_ZA am_ET an_ES ar_AE ar_BH ar_DZ ar_EG ar_IN ar_IQ ar_JO ar_KW ar_LB ar_LY ar_MA ar_OM ar_QA ar_SA ar_SD ar_SY ar_TN ar_YE as_IN az_AZ be_BY bg_BG bn_BD bn_IN br_FR bs_BA ca_ES cs_CZ cy_GB da_DK de_AT de_BE de_CH de_DE de_LU el_GR en_AU en_BE en_BW en_CA en_DK en_GB en_HK en_IE en_IN en_NZ en_PH en_SG en_US en_ZA en_ZW eo_XX es_AR es_BO es_CL es_CO es_CR es_DO es_EC es_ES es_GT es_HN es_MX es_NI es_PA es_PE es_PR es_PY es_SV es_US es_UY es_VE et_EE eu_ES fa_IR fi_FI fo_FO fr_BE fr_CA fr_CH fr_FR fr_LU fur_IT fy_DE fy_NL ga_IE gd_GB gez_ER gez_ER@abegede gez_ET gez_ET@abegede gl_ES gu_IN gv_GB he_IL hi_IN hr_HR hu_HU hy_AM id_ID ik_CA is_IS it_CH it_IT iu_CA ja_JP ka_GE kl_GL km_KH kn_IN ko_KR ku_TR kw_GB ky_KG li_BE li_NL lo_LA lt_LT lv_LV mi_NZ mk_MK ml_IN mn_MN mr_IN ms_MY mt_MT nb_NO nds_DE nds_DE@traditional nds_NL ne_NP nl_BE nl_NL nn_NO no_NO oc_FR om_ET om_KE pa_IN ph_PH pl_PL pt_BR pt_PT ro_RO ru_RU ru_UA sc_IT se_NO sid_ET sk_SK sl_SI sq_AL sr_CS sr_CS@Latn sr_YU sr_YU@Latn st_ZA sv_FI sv_SE sw_XX ta_IN te_IN tg_TJ th_TH ti_ER ti_ET tig_ER tk_TM tl_PH tr_TR tt_RU uk_UA ur_PK uz_UZ uz_UZ@Cyrl uz_UZ@Latn vi_VN wa_BE xh_ZA yi_US zh_CN zh_HK zh_SG zh_TW zu_ZA); sub standard_locale { my ($lang, $country, $prefer_lang) = @_; member("${lang}_${country}", @locales) and return "${lang}_${country}"; $prefer_lang && member($lang, @locales) and return $lang; my $main_locale = locale_to_main_locale($lang); if ($main_locale ne $lang) { standard_locale($main_locale, $country, $prefer_lang); } ''; } sub fix_variant { my ($locale) = @_; #- uz@Cyrl_UZ -> uz_UZ@Cyrl $locale =~ s/(.*)(\@\w+)(_.*)/$1$3$2/; $locale; } sub analyse_locale_name { my ($locale) = @_; $locale =~ /^(.*?) (?:_(.*?))? (?:\.(.*?))? (?:\@(.*?))? $/x && { main => $1, country => $2, charset => $3, variant => $4 }; } sub locale_to_main_locale { my ($locale) = @_; lc(analyse_locale_name($locale)->{main}); } sub getlocale_for_lang { my ($lang, $country, $o_utf8) = @_; fix_variant((standard_locale($lang, $country, 'prefer_lang') || l2locale($lang)) . ($o_utf8 ? '.UTF-8' : '')); } sub getlocale_for_country { my ($lang, $country, $o_utf8) = @_; fix_variant((standard_locale($lang, $country, '') || c2locale($country)) . ($o_utf8 ? '.UTF-8' : '')); } sub getLANGUAGE { my ($lang, $o_country, $o_utf8) = @_; l2language($lang) || join(':', uniq(getlocale_for_lang($lang, $o_country, $o_utf8), $lang, locale_to_main_locale($lang))); } #------------------------------------------------------------- # # IM configuration hash tables # # in order to configure an IM, one has to: # - put generic configuration in %IM_config # - put locale specific configuration in %IM_XIM_program # This set XIM_PROGRAM field for IM that needs a different value # depending on locale: my %IM_XIM_program = ( chinput => { 'zh_CN' => 'chinput -gb', 'zh_CN.UTF-8' => 'chinput -gb', 'zh_HK' => 'chinput -big5', 'zh_HK.UTF-8' => 'chinput -big5', 'en_SG' => 'chinput -gb', 'en_SG.UTF-8' => 'chinput -gb', 'zh_TW' => 'chinput -big5', 'zh_TW.UTF-8' => 'chinput -big5', }, xcin => { 'zh_TW' => 'xcin' }, ); # This set generic IM fields. # #- XMODIFIERS is the environnement variable used by the X11 XIM protocol #- it is of the form XIMODIFIERS="@im=foo" #- XIM is used by some programs, it usually is the like XIMODIFIERS #- with the "@im=" part stripped #- GTK_IM_MODULE the module to use for Gtk programs ("xim" to use an X11 #- XIM server; or a a native gtk module if exists) #- XIM_PROGRAM the program to run (usually the same as XIM value, but #- in some cases different, particularly if parameters are needed; #- If it is locale dependent it should be defined in %IM_XIM_program) my %IM_config = ( ami => { XIM => 'Ami', #- NOTE: there are several possible versions of ami, for the different #- desktops (kde, gnome, etc). So XIM_PROGRAM is not defined; it will #- be the xinitrc script, XIM section, that will choose the right one #- XIM_PROGRAM => 'ami', XMODIFIERS => '@im=Ami', GTK_IM_MODULE => 'xim', }, chinput => { GTK_IM_MODULE => 'xim', XIM => 'chinput', # bogus entry overwriten by %IM_XIM_program, just for read() XIM_PROGRAM => 'chinput', XMODIFIERS => '@im=Chinput', }, fcitx => { XIM => 'fcitx', XIM_PROGRAM => 'fcitx', XMODIFIERS => '@im=fcitx', }, 'im-ja' => { GTK_IM_MODULE => 'im-ja', XIM => 'im-ja-xim-server', XIM_PROGRAM => 'im-ja-xim-server', XMODIFIERS => '@im=im-ja-xim-server', }, kinput2 => { XIM => 'kinput2', XIM_PROGRAM => 'kinput2', XMODIFIERS => '@im=kinput2', }, nabi => { GTK_IM_MODULE => 'xim', XIM => 'nabi', XIM_PROGRAM => 'nabi', XMODIFIERS => '@im=nabi', }, scim => { GTK_IM_MODULE => 'scim', XIM_PROGRAM => 'scim -d', XMODIFIERS => '@im=SCIM', }, skim => { GTK_IM_MODULE => 'scim', XIM_PROGRAM => 'skim -d', XMODIFIERS => '@im=SCIM', }, uim => { GTK_IM_MODULE => 'uim', XIM => 'uim', XIM_PROGRAM => 'uim-xim', XMODIFIERS => '@im=uim', }, xcin => { XIM => 'xcin', XIM_PROGRAM => 'xcin', XMODIFIERS => '@im=xcin-zh_TW', GTK_IM_MODULE => 'xim', }, 'x-unikey' => { GTK_IM_MODULE => 'xim', XMODIFIERS => '@im=unikey' }, ); sub get_ims() { keys %IM_config } #------------------------------------------------------------- # # Locale configuration regarding encoding/IM #- ENC is used by some versions or rxvt my %locale2encoding = ( 'ja_JP' => 'eucj', 'ko_KR' => 'kr', 'zh_CN' => 'gb', # zh_SG zh_HK were reported as missing by make check: 'zh_HK' => 'big5', 'zh_SG' => 'gb', 'zh_TW' => 'big5', ); my %IM_locale_specific_config = ( #-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_TH' => { XIM_PROGRAM => '/bin/true', #- it's an internal module XMODIFIERS => '"@im=BasicCheck"', }, ); my %default_im; sub get_default_im { my ($lang) = @_; $default_im{$lang}{IM}; } sub set_default_im { my ($im, @langs) = @_; foreach (@langs) { $default_im{$_}{IM} = $im foreach $_, analyse_locale_name($_)->{main}; } } set_default_im('x-unikey', qw(vi_VN vi_VN.TCVN vi_VN.UTF-8 vi_VN.VISCII)); # CJK default input methods: set_default_im('scim', qw(am ja_JP ja_JP.UTF-8 ko_KR ko_KR.UTF-8 zh_CN zh_CN.UTF-8 zh_HK zh_HK.UTF-8 zh_SG zh_SG.UTF-8 zh_TW zh_TW.UTF-8)); # keep the following list in sync with share/rpmsrate: my %IM2packages = ( 'chinput' => { generic => [ 'miniChinput' ] }, 'scim' => { generic => [ qw(scim scim-m17n scim-tables) ], am => [ qw(scim scim-tables ) ], ja => [ qw(scim-anthy scim-uim) ], ko => [ qw(scim-hangul) ], zh => [ qw(scim-chinese scim-tables scim-chewing) ], }, 'scim+uim' => { generic => [ qw(scim-uim) ] }, 'uim' => { generic => [ qw(uim-applet) ] }, 'vi' => { generic => [ 'x-unikey' ] }, ); sub IM2packages { my ($locale) = @_; my $im = $locale->{IM}; return if $im eq "None"; my $lang = analyse_locale_name($locale->{lang})->{main}; my $packages = $IM2packages{$im}{$lang} || $IM2packages{$im}{generic}; return $packages ? @$packages : $im; } #- [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) my %charsets = ( #- chinese needs special console driver for text mode "Big5" => [ undef, undef, undef, "big5", "950" ], "gb2312" => [ undef, undef, undef, "gb2312", "936" ], "gbk" => [ undef, undef, undef, "gb2312", "936" ], "C" => [ "lat0-16", undef, "iso15", "iso8859-1", "850" ], "iso-8859-1" => [ "lat1-16", undef, "iso01", "iso8859-1", "850" ], "iso-8859-2" => [ "lat2-sun16", undef, "iso02", "iso8859-2", "852" ], "iso-8859-5" => [ "UniCyr_8x16", undef, "iso05", "iso8859-5", "866" ], "iso-8859-7" => [ "iso07.f16", undef, "iso07", "iso8859-7", "869" ], "iso-8859-9" => [ "lat5u-16", undef, "iso09", "iso8859-9", "857" ], "iso-8859-13" => [ "tlat7", undef, "iso13", "iso8859-13", "775" ], "iso-8859-15" => [ "lat0-16", undef, "iso15", "iso8859-15", "850" ], #- japanese needs special console driver for text mode [kon2] "jisx0208" => [ undef, undef, "trivial.trans", "euc-jp", "932" ], "koi8-r" => [ "UniCyr_8x16", undef, "koi8-r", "koi8-r", "866" ], "koi8-u" => [ "UniCyr_8x16", undef, "koi8-u", "koi8-u", "866" ], "cp1251" => [ "UniCyr_8x16", undef, "cp1251", "cp1251", "866" ], #- korean needs special console driver for text mode "ksc5601" => [ undef, undef, undef, "euc-kr", "949" ], #- I have no console font for Thai... "tis620" => [ undef, undef, "trivial.trans", "tis-620", "874" ], # UTF-8 encodings here; they differ in the console font mainly. "utf_am" => [ "Agafari-16", undef, undef, "utf8", undef ], "utf_ar" => [ "iso06.f16", undef, undef, "utf8", undef ], "utf_az" => [ "tiso09e", undef, undef, "utf8", undef ], "utf_bn" => [ undef, undef, undef, "utf8", undef ], "utf_cyr1" => [ "UniCyr_8x16", undef, undef, "utf8", undef ], "utf_cyr2" => [ "koi8-k", undef, undef, "utf8", undef ], "utf_he" => [ "iso08.f16", undef, undef, "utf8", undef ], "utf_hi" => [ undef, undef, undef, "utf8", undef ], "utf_hy" => [ "arm8", undef, undef, "utf8", undef ], "utf_iu" => [ undef, undef, undef, "utf8", undef ], "utf_ka" => [ "t_geors", undef, undef, "utf8", undef ], "utf_km" => [ undef, undef, undef, "utf8", undef ], "utf_kn" => [ undef, undef, undef, "utf8", undef ], "utf_ml" => [ undef, undef, undef, "utf8", undef ], "utf_lo" => [ undef, undef, undef, "utf8", undef ], "utf_ta" => [ "tamil", undef, undef, "utf8", undef ], "utf_vi" => [ "tcvn8x16", undef, undef, "utf8", undef ], "utf_lat8" => [ "iso14.f16", undef, undef, "utf8", undef ], # default for utf-8 encodings "unicode" => [ "LatArCyrHeb-16", undef, undef, "utf8", undef ], ); #- for special cases not handled magically my %charset2kde_charset = ( gb2312 => 'gb2312.1980-0', gbk => 'gb2312.1980-0', jisx0208 => 'jisx0208.1983-0', ksc5601 => 'ksc5601.1987-0', Big5 => 'big5-0', cp1251 => 'microsoft-cp1251', utf8 => 'iso10646-1', tis620 => 'tis620-0', #- Tamil KDE translations still use TSCII, and KDE know it as iso-8859-1 utf_ta => 'iso8859-1', ); my @during_install__lang_having_their_LC_CTYPE = qw(ja ko ta); #- ------------------- sub l2console_font { my ($locale, $during_install) = @_; my $c = $charsets{l2charset($locale->{lang}) || return} or return; my ($name, $sfm, $acm) = @$c; undef $acm if $locale->{utf8} && !$during_install; ($name, $sfm, $acm); } sub get_kde_lang { my ($locale, $o_default) = @_; #- get it using #- echo C $(rpm -qp --qf "%{name}\n" /RPMS/kde-i18n-* | sed 's/kde-i18n-//') my @valid_kde_langs = qw(C af ar az be bg bn br bs ca cs cy da de el en_GB eo es et eu fa fi fo fr ga gl he hi hr hsb hu id is it ja ko ku lo lt lv mi mk mn ms mt nb nds nl nn nso oc pl pt pt_BR ro ru se sk sl sr ss sv ta tg th tr uk uz ven vi wa wen xh zh_CN zh_TW zu); my %valid_kde_langs; @valid_kde_langs{@valid_kde_langs} = (); my $valid_lang = sub { my ($lang) = @_; #- fast & dirty solution to ensure bad entries do not happen my %fixlangs = (en => 'C', en_US => 'C', 'sr@Latn' => 'sr', st => 'nso', ve => 'ven', zh_CN => 'zh_CN', zh_SG => 'zh_CN', zh_TW => 'zh_TW', zh_HK => 'zh_TW'); exists $fixlangs{$lang} ? $fixlangs{$lang} : exists $valid_kde_langs{$lang} ? $lang : exists $valid_kde_langs{locale_to_main_locale($lang)} ? locale_to_main_locale($lang) : ''; }; my $r; $r ||= $valid_lang->($locale->{lang}); $r ||= find { $valid_lang->($_) } split(':', getlocale_for_lang($locale->{lang}, $locale->{country})); $r || $o_default || 'C'; } sub charset2kde_charset { my ($charset, $o_default) = @_; my $iocharset = ($charsets{$charset} || [])->[3]; my @valid_kde_charsets = qw(big5-0 gb2312.1980-0 iso10646-1 iso8859-1 iso8859-4 iso8859-6 iso8859-8 iso8859-13 iso8859-14 iso8859-15 iso8859-2 iso8859-3 iso8859-5 iso8859-7 iso8859-9 koi8-r koi8-u ksc5601.1987-0 jisx0208.1983-0 microsoft-cp1251 tis620-0); my %valid_kde_charsets; @valid_kde_charsets{@valid_kde_charsets} = (); my $valid_charset = sub { my ($charset) = @_; #- fast & dirty solution to ensure bad entries do not happen exists $valid_kde_charsets{$charset} && $charset; }; my $r; $r ||= $valid_charset->($charset2kde_charset{$charset}); $r ||= $valid_charset->($charset2kde_charset{$iocharset}); $r ||= $valid_charset->($iocharset); $r || $o_default || 'iso10646-1'; } #- font+size for different charsets; the field [0] is the default, #- others are overrridens for fixed(1), toolbar(2), menu(3) and taskbar(4) my %charset2kde_font = ( 'C' => [ "Sans,10", "Monospace,10" ], 'iso-8859-1' => [ "Sans,10", "Monospace,10" ], 'iso-8859-2' => [ "Sans,10", "Monospace,10" ], 'iso-8859-7' => [ "Helvetica,12", "courier,10", "Helvetica,11" ], 'iso-8859-9' => [ "Sans,10", "Monospace,10" ], 'iso-8859-15' => [ "Sans,10", "Monospace,10" ], 'iso-8859-13' => [ "Sans,10", "Monospace,10" ], 'jisx0208' => [ "Sazanami Gothic,13" ], 'ksc5601' => [ "Baekmuk Gulim,16" ], 'gb2312' => [ "Nimbus Sans L,12", "Monospace,12" ], 'Big5' => [ "AR PL New Sung,14" ], 'tis620' => [ "Norasi,16", "Norasi,15" ], 'utf_ar' => [ "Terafik,14", "Courier New,13", "Terafik,13" ], 'utf_am' => [ "GF Zemen Unicode,15" ], 'utf_az' => [ "Nimbus Sans L,12", "Nimbus Mono L,10", "Nimbus Sans L,11" ], 'utf_bn' => [ "Mukti Narrow,14", "Mitra Mono,12", "Mukti Narrow,14" ], 'utf_he' => [ "Nachlieli CLM,13", "Miriam Mono CLM,10", "Nachlieli CLM,11" ], 'utf_hi' => [ "Raghindi,14", ], 'utf_hy' => [ "Artsounk,12", "Monospace,10", "Artsounk,11" ], #-'utf_iu' => [ "????,14", ], #-'utf_km' => [ "????,14", ], 'utf_kn' => [ "Sampige,14", ], 'utf_ml' => [ "malayalam,14", ], 'utf_ta' => [ "TSCu_Paranar,14", "Tsc_avarangalfxd,10", "TSCu_Paranar,12", ], 'utf_vi' => [ "Nimbus Sans L,12", "Nimbus Mono L,10", "Nimbus Sans L,11" ], #- the following should be changed to better defaults when better fonts #- get available 'utf_ka' => [ "ClearlyU,15" ], 'utf_lo' => [ "ClearlyU,15" ], 'default' => [ "Sans,12", "Monospace,10", "Sans,11" ], ); sub charset2kde_font { my ($charset, $type) = @_; my $font = $charset2kde_font{$charset} || $charset2kde_font{default}; my $r = $font->[$type] || $font->[0]; #- the format is "font-name,size,-1,5,0,0,0,0,0,0" I have no idea of the #- meaning of that "5"... "$r,-1,5,0,0,0,0,0,0"; } # this define pango name fonts (like "NimbusSans L") depending # on the "charset" defined by language array. This allows to selecting # an appropriate font for each language for the installer only. my %charset2pango_font = ( 'tis620' => "Norasi 17", 'utf_ar' => "Roya 14", 'utf_cyr2' => "Nimbus Sans L 12", 'utf_he' => "Sans 12", 'utf_hy' => "Artsounk 14", 'utf_ka' => "Sans 14", 'utf_lo' => "Sans 14", 'utf_ta' => "TSCu_Paranar 14", 'utf_vi' => "Sans 14", 'iso-8859-7' => "Kerkis 14", 'jisx0208' => "Sans 14", #- Nimbus Sans L is missing some chars used by some cyrillic languages, #- but tose have not yet DrakX translations; it also misses vietnamese #- latin chars; all other latin and cyrillic are covered. 'default' => "Sans 12" ); sub charset2pango_font { my ($charset) = @_; $charset2pango_font{exists $charset2pango_font{$charset} ? $charset : 'default'}; } sub l2pango_font { my ($lang) = @_; my $charset = l2charset($lang) or log::l("no charset found for lang $lang!"), return; my $font = charset2pango_font($charset); log::l("lang:$lang charset:$charset font:$font sfm:$charsets{$charset}[0]"); return $font; } sub set { my ($locale, $b_translate_for_console) = @_; if ($::move) { move::handleI18NClp($locale->{lang}); put_in_hash(\%ENV, i18n_env($locale)); return; } my $lang = $locale->{lang}; exists $langs{$lang} or log::l("lang::set: trying to set to $lang but I do not know it!"), return; #- set all LC_* variables to a unique locale ("C"), and only redefine #- LC_COLLATE (for sorting) and LANGUAGE (for the po files) $ENV{$_} = 'C' foreach qw(LC_NUMERIC LC_TIME LC_MONETARY LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT LC_IDENTIFICATION); $ENV{LC_CTYPE} = $lang; $ENV{LC_MESSAGES} = $lang; $ENV{LC_COLLATE} = $lang; $ENV{LANG} = $lang; if ($b_translate_for_console && $lang =~ /^(ko|ja|zh|th)/) { log::l("not translating in console"); $ENV{LANGUAGE} = 'C'; } else { $ENV{LANGUAGE} = getLANGUAGE($lang); } load_mo(); $lang; } sub langs { my ($l) = @_; $l->{all} ? list_langs() : grep { $l->{$_} } keys %$l; } sub langsLANGUAGE { my ($l, $o_c) = @_; uniq(map { split ':', getLANGUAGE($_, $o_c) } langs($l)); } sub utf8_should_be_needed { my ($locale) = @_; my @l = uniq(grep { $_ ne 'C' } map { l2charset($_) } langs($locale->{langs})); @l > 1 || any { /utf|unicode/ } @l; } sub pack_langs { my ($l) = @_; my $s = $l->{all} ? 'all' : join ':', uniq(map { getLANGUAGE($_) } langs($l)); $ENV{RPM_INSTALL_LANG} = $s; $s; } sub system_locales_to_ourlocale { my ($locale_lang, $locale_country) = @_; my $locale = {}; my $h = analyse_locale_name($locale_lang); my $locale_lang_no_encoding = join('_', $h->{main}, if_($h->{country}, $h->{country})); $locale->{lang} = member($locale_lang_no_encoding, list_langs()) ? $locale_lang_no_encoding : #- special lang's such as en_US pt_BR $h->{main}; $locale->{lang} .= '@' . $h->{variant} if $h->{variant}; $locale->{country} = analyse_locale_name($locale_country)->{country}; $locale->{utf8} = $h->{charset} && $h->{charset} eq 'UTF-8'; #- safe fallbacks $locale->{lang} ||= 'en_US'; $locale->{country} ||= 'US'; $locale; } sub read { my ($b_user_only) = @_; my ($f1, $f2) = ("$::prefix$ENV{HOME}/.i18n", "$::prefix/etc/sysconfig/i18n"); my %h = getVarsFromSh($b_user_only && -e $f1 ? $f1 : $f2); my $locale = system_locales_to_ourlocale($h{LC_MESSAGES} || 'en_US', $h{LC_MONETARY} || 'en_US'); if ($h{XIM_PROGRAM}) { $locale->{IM} = find { $IM_config{$_}{XIM_PROGRAM} eq $h{XIM_PROGRAM} } keys %IM_config; $locale->{IM} ||= find { member($h{XIM_PROGRAM}, values %{$IM_XIM_program{$_}}) } keys %IM_XIM_program; } $locale; } sub write_langs { my ($langs) = @_; my $s = pack_langs($langs); symlink "$::prefix/etc/rpm", "/etc/rpm" if $::prefix; substInFile { s/%_install_langs.*//; $_ .= "%_install_langs $s\n" if eof && $s } "$::prefix/etc/rpm/macros"; } sub i18n_env { my ($locale) = @_; my $locale_lang = getlocale_for_lang($locale->{lang}, $locale->{country}, $locale->{utf8}); my $locale_country = getlocale_for_country($locale->{lang}, $locale->{country}, $locale->{utf8}); my $h = { XKB_IN_USE => '', (map { $_ => $locale_lang } qw(LANG LC_COLLATE LC_CTYPE LC_MESSAGES LC_TIME)), LANGUAGE => getLANGUAGE($locale->{lang}, $locale->{country}, $locale->{utf8}), (map { $_ => $locale_country } qw(LC_NUMERIC LC_MONETARY LC_ADDRESS LC_MEASUREMENT LC_NAME LC_PAPER LC_IDENTIFICATION LC_TELEPHONE)) }; log::l("lang::write: lang:$locale->{lang} country:$locale->{country} locale|lang:$locale_lang locale|country:$locale_country language:$h->{LANGUAGE}"); $h; } sub write { my ($locale, $b_user_only, $b_dont_touch_kde_files) = @_; $locale && $locale->{lang} or return; my $h = i18n_env($locale); my ($name, $sfm, $acm) = l2console_font($locale, 0); if ($name && !$b_user_only) { my $p = "$::prefix/usr/lib/kbd"; if ($name) { eval { log::explanations(qq(Set system font to "$name")); my $font = "$p/consolefonts/$name.psf"; $font .= ".gz" if ! -e $font; cp_af($font, "$::prefix/etc/sysconfig/console/consolefonts"); add2hash $h, { SYSFONT => $name }; }; $@ and log::explanations("missing console font $name"); } if ($sfm) { eval { log::explanations(qq(Set screen font map (Unicode mapping table) to "$name")); cp_af(glob_("$p/consoletrans/$sfm*"), "$::prefix/etc/sysconfig/console/consoletrans"); add2hash $h, { UNIMAP => $sfm }; }; $@ and log::explanations("missing console unimap file $sfm"); } if ($acm) { eval { log::explanations(qq(Set application-charset map (Unicode mapping table) to "$name")); cp_af(glob_("$p/consoletrans/$acm*"), "$::prefix/etc/sysconfig/console/consoletrans"); add2hash $h, { SYSFONTACM => $acm }; }; $@ and log::explanations("missing console acm file $acm"); } } add2hash($h, $IM_locale_specific_config{$h->{LANG}}); $h->{ENC} = $locale2encoding{$h->{LANG}}; $h->{ENC} = 'utf8' if member($h->{LANG}, qw(ja_JP.UTF-8 ko_KR.UTF-8 zh_CN.UTF-8 zh_HK.UTF-8 zh_SG.UTF-8 zh_TW.UTF-8)); my $im = $locale->{IM}; if ($im && $im ne 'None') { log::explanations(qq(Configuring "$im" IM)); delete @$h{qw(GTK_IM_MODULE QT_IM_MODULE XIM XIM_PROGRAM XMODIFIERS)}; add2hash($h, { XIM_PROGRAM => $IM_XIM_program{$im}{$h->{LC_NAME}} }); add2hash($h, $IM_config{$locale->{IM}}); $h->{QT_IM_MODULE} = $h->{GTK_IM_MODULE} if $h->{GTK_IM_MODULE}; my @packages = IM2packages($locale); if (@packages && $b_user_only) { require interactive; interactive->vnew->ask_warn(N("Warning"), N("You should install the following packages: %s", join( #-PO: the following is used to combine packages names. eg: "initscripts, harddrake, yudit" N(", "), @packages, ), ) ); } elsif (@packages) { log::explanations("Installing IM packages: ", join(', ', @packages)); do_pkgs_standalone->new->install(@packages); } } #- deactivate translations on console for most CJK, RTL and complex languages if (member($locale->{lang}, qw(ar bn fa he hi ja kn ko pa ug ur yi zh_TW zh_CN))) { #- CONSOLE_NOT_LOCALIZED if defined to yes, disables translations on console #- it is needed for languages not supported by the linux console log::explanations(qq(Disabling tranlsation on console since "$locale->{lang}" is not supported by the console)); add2hash($h, { CONSOLE_NOT_LOCALIZED => 'yes' }); } my $file = $b_user_only ? "$ENV{HOME}/.i18n" : '/etc/sysconfig/i18n'; log::explanations(qq(Setting l10n configuration in "$file")); setVarsInSh($::prefix . $file, $h); if (!$b_user_only) { log::explanations("Set default menu language"); substInFile { s!^function lang\b.*!function lang()="$h->{LANG}"!g; } "$::prefix/etc/menu-methods/lang.h" if !$b_user_only; } my $charset = l2charset($locale->{lang}); my $qtglobals = $b_user_only ? "$ENV{HOME}/.qt/qtrc" : "$::prefix/etc/qtrc"; update_gnomekderc($qtglobals, General => ( font => charset2kde_font($charset, 0), )); eval { my $confdir = $::prefix . ($b_user_only ? "$ENV{HOME}/.kde" : '/usr') . '/share/config'; -d $confdir or die 'not configuring kde config files since it is not installed/used'; configure_kdeglobals($locale, $confdir); my %qt_xim = (zh => 'Over The Spot', ko => 'On The Spot', ja => 'On The Spot'); if ($b_user_only && (my $qt_xim = $qt_xim{locale_to_main_locale($locale->{lang})})) { log::explanations(qq(Setting XIM input style to "$qt_xim")); update_gnomekderc("$ENV{HOME}/.qt/qtrc", General => (XIMInputStyle => $qt_xim)); } if (!$b_user_only) { my $kde_charset = charset2kde_charset(l2charset($locale->{lang})); my $welcome = c::to_utf8(N("Welcome to %s", '%n')); log::explanations(qq(Configuring KDM/MdkKDM)); substInFile { s/^(GreetString)=.*/$1=$welcome/; s/^(Language)=.*/$1=$locale->{lang}/; if (!member($kde_charset, 'iso8859-1', 'iso8859-15')) { #- do not keep the default for those my $font_list = $charset2kde_font{l2charset($locale->{lang})} || $charset2kde_font{default}; my $font_small = $font_list->[0]; my $font_huge = $font_small; $font_huge =~ s/(.*?),\d+/$1,24/; s/^(StdFont)=.*/$1=$font_small,5,$kde_charset,50,0/; s/^(FailFont)=.*/$1=$font_small,5,$kde_charset,75,0/; s/^(GreetFont)=.*/$1=$font_huge,5,$kde_charset,50,0/; } } "$::prefix/usr/share/config/kdm/kdmrc"; } } if !$b_dont_touch_kde_files; } sub configure_kdeglobals { my ($locale, $confdir) = @_; my $kdeglobals = "$confdir/kdeglobals"; my $charset = l2charset($locale->{lang}); my $kde_charset = charset2kde_charset($charset); my ($prev_kde_charset) = cat_($kdeglobals) =~ /^Charset=(.*)/mi; mkdir_p($confdir); my $lang = get_kde_lang($locale); log::explanations("Configuring KDE regarding charset ($kde_charset), language ($lang) and country ($locale->{country})"); update_gnomekderc($kdeglobals, Locale => ( Charset => $kde_charset, Country => lc($locale->{country}), Language => getLANGUAGE($locale->{lang}, $locale->{country}, $locale->{utf8}), )); if ($prev_kde_charset ne $kde_charset) { log::explanations("Configuring KDE regarding fonts"); update_gnomekderc($kdeglobals, WM => ( activeFont => charset2kde_font($charset,0), )); update_gnomekderc($kdeglobals, General => ( fixed => charset2kde_font($charset, 1), font => charset2kde_font($charset, 0), menuFont => charset2kde_font($charset, 3), taskbarFont => charset2kde_font($charset, 4), toolBarFont => charset2kde_font($charset, 2), )); update_gnomekderc("$confdir/konquerorrc", FMSettings => ( StandardFont => charset2kde_font($charset, 0), )); update_gnomekderc("$confdir/kdesktoprc", FMSettings => ( StandardFont => charset2kde_font($charset, 0), )); } } sub bindtextdomain() { #- if $::prefix is set, search for libDrakX.mo in locale_special #- NB: not using $::isInstall to make it work more easily at install and standalone my $localedir = "$ENV{SHARE_PATH}/locale" . ($::prefix ? "_special" : ''); c::setlocale(); c::bind_textdomain_codeset('libDrakX', 'UTF-8'); $::need_utf8_i18n = 1; c::bindtextdomain('libDrakX', $localedir); $localedir; } sub load_mo { my ($o_lang) = @_; my $localedir = bindtextdomain(); my $suffix = 'LC_MESSAGES/libDrakX.mo'; $o_lang ||= $ENV{LANGUAGE} || $ENV{LC_ALL} || $ENV{LC_MESSAGES} || $ENV{LANG}; my @possible_langs = map { { name => $_, mofile => "$localedir/$_/$suffix" } } split ':', $o_lang; -s $_->{mofile} and return $_->{name} foreach @possible_langs; ''; } #- used in Makefile during "make get_needed_files" sub console_font_files() { map { -e $_ ? $_ : "$_.gz" } (map { "/usr/lib/kbd/consolefonts/$_.psf" } uniq grep { $_ } map { $_->[0] } values %charsets), (map { -e $_ ? $_ : "$_.sfm" } map { "/usr/lib/kbd/consoletrans/$_" } uniq grep { $_ } map { $_->[1] } values %charsets), (map { -e $_ ? $_ : "$_.acm" } map { "/usr/lib/kbd/consoletrans/$_" } uniq grep { $_ } map { $_->[2] } values %charsets); } sub load_console_font { my ($locale) = @_; my ($name, $sfm, $acm) = l2console_font($locale, 1); require run_program; run_program::run(if_($ENV{LD_LOADER}, $ENV{LD_LOADER}), 'consolechars', '-v', '-f', $name || 'lat0-16', if_($sfm, '-u', $sfm), if_($acm, '-m', $acm)); } sub fs_options { my ($locale) = @_; if ($locale->{utf8}) { (iocharset => 'utf8', codepage => undef); } else { my $c = $charsets{l2charset($locale->{lang}) || return} or return; my ($iocharset, $codepage) = @$c[3..4]; (iocharset => $iocharset, codepage => $codepage); } } sub during_install__l2charset { my ($lang) = @_; return if member($lang, @during_install__lang_having_their_LC_CTYPE); my ($c) = l2charset($lang) or die "bad lang $lang\n"; $c = 'UTF-8' if member($c, 'tis620', 'C', 'unicode'); $c = 'UTF-8' if $c =~ /koi8-/; $c = 'UTF-8' if $c =~ /iso-8859/; $c = 'UTF-8' if $c =~ /cp125/; $c = 'UTF-8' if $c =~ /utf_/; uc($c); } #- used in Makefile sub png_lang_files() { print join(' ', map { "pixmaps/langs/lang-$_.png" } list_langs()); } sub check() { $^W = 0; my $ok = 1; my $warn = sub { print STDERR "$_[0]\n"; }; my $err = sub { &$warn; $ok = 0; }; my @wanted_charsets = uniq map { l2charset($_) } list_langs(); print "\tWarnings:\n"; $warn->("unused charset $_ (given in \%charsets, but not used in \%langs)") foreach difference2([ keys %charsets ], \@wanted_charsets); $warn->("unused entry $_ in \%xim") foreach grep { !/UTF-8/ } difference2([ keys %IM_locale_specific_config ], [ map { l2locale($_) } list_langs() ]); #- consolefonts are checked during build via console_font_files() if (my @l = difference2([ 'default', keys %charsets ], [ keys %charset2kde_font ])) { $warn->("no kde font for charset " . join(" ", @l)); } if (my @l = grep { get_kde_lang({ lang => $_, country => 'US' }, 'err') eq 'err' } list_langs()) { $warn->("no KDE lang for langs " . join(" ", @l)); } if (my @l = grep { charset2kde_charset($_, 'err') eq 'err' } keys %charsets) { $warn->("no KDE charset for charsets " . join(" ", @l)); } $warn->("no country corresponding to default locale $_->[1] of lang $_->[0]") foreach grep { $_->[1] =~ /.._(..)/ && !exists $countries{$1} } map { [ $_, l2locale($_) ] } list_langs(); print "\tErrors:\n"; $err->("invalid charset $_ ($_ does not exist in \%charsets)") foreach difference2(\@wanted_charsets, [ keys %charsets ]); $err->("invalid charset $_ in \%charset2kde_font ($_ does not exist in \%charsets)") foreach difference2([ keys %charset2kde_font ], [ 'default', keys %charsets ]); $err->("default locale $_->[1] of lang $_->[0] is not listed in \@locales") foreach grep { !member($_->[1], @locales) } map { [ $_, l2locale($_) ] } list_langs(); $err->("lang image for lang $_->[0] is missing (file $_->[1])") foreach grep { !(-e $_->[1]) } map { [ $_, "pixmaps/langs/lang-$_.png" ] } list_langs(); $err->("default locale $_->[1] of country $_->[0] is not listed in \@locales") foreach grep { !member($_->[1], @locales) } map { [ $_, c2locale($_) ] } list_countries(); exit($ok ? 0 : 1); } 1; 1528'>1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692
# translation of DrakX-ky.po to Kyrgyz
# Copyright (C) 2004,2003, 2005 Free Software Foundation, Inc.
# Timur Jamakeev <ztimur@mail.ru>, 2003,2004.
# Nurlan Borubaev <nurlan@tamga.info>, 2005.
# Ilyas Bakirov <just_ilyas@yahoo.com>, 2008.
#
msgid ""
msgstr ""
"Project-Id-Version: DrakX-ky\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2010-05-01 16:50+0200\n"
"PO-Revision-Date: 2009-04-18 19:08+0600\n"
"Last-Translator: Ilyas Bakirov <just_ilyas@yahoo.com>\n"
"Language-Team: Kyrgyz\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"X-Generator: KBabel 1.3\n"
"Plural-Forms: nplurals=1; plural=0;\n"

#: ../../advertising/IM_flash.pl:1
#, c-format
msgid "Your desktop on a USB key"
msgstr "Сиздин иш столуңуз USBде"

#: ../../advertising/IM_free.pl:1
#, c-format
msgid "The 100%% open source Mageia Linux distribution"
msgstr "100%% ачык кодду Mageia Linux дистрибутиви"

#: ../../advertising/IM_one.pl:1
#, c-format
msgid "Explore Linux easily with Mageia One"
msgstr "Linux'ту Mageia One менен аралап үйрөнүү"

#: ../../advertising/IM_pwp.pl:1
#, c-format
msgid "A full Mageia Linux desktop, with support"
msgstr "Толук Mageia Linux иш столу жардам менен"

#: ../../advertising/IM_range.pl:1
#, c-format
msgid "Mageia: distributions for everybody's needs"
msgstr "Mageia: ар бирдин керектеген дистрибутив"

#: any.pm:109
#, c-format
msgid "Do you have further supplementary media?"
msgstr "Сизде кийинки кезектеги кошумча алып жүрүүчү барбы?"

#. -PO: keep the double empty lines between sections, this is formatted a la LaTeX
#: any.pm:112
#, c-format
msgid ""
"The following media have been found and will be used during install: %s.\n"
"\n"
"\n"
"Do you have a supplementary installation medium to configure?"
msgstr ""
"Төмөнкү булак табылды жана ал орнотуу мезгилинде колдонулат: %s.\n"
"\n"
"\n"
"Ырастоолор үчүн кошумча булагы дагы барбы?"

#: any.pm:120
#, c-format
msgid "CD-ROM"
msgstr "CD-ROM"

#: any.pm:121
#, c-format
msgid "Network (HTTP)"
msgstr "Желе (HTTP)"

#: any.pm:122
#, c-format
msgid "Network (FTP)"
msgstr "Желе  (FTP)"

#: any.pm:123
#, c-format
msgid "Network (NFS)"
msgstr "Тармак (NFS)"

#: any.pm:165
#, c-format
msgid "URL of the mirror?"
msgstr "Күзгүсүнүн URL'и?"

#: any.pm:171
#, c-format
msgid "URL must start with ftp:// or http://"
msgstr "URL ftp:// же http:// менен башталышы керек"

#: any.pm:182
#, c-format
msgid ""
"Contacting Mageia Linux web site to get the list of available mirrors..."
msgstr "Бар болгон күзгүлөр тизмесин Mageia Linux веб сайтындан алынууда..."

#: any.pm:187
#, c-format
msgid ""
"Failed contacting Mageia Linux web site to get the list of available "
"mirrors"
msgstr ""
"Бар болгон күзгүлөр тизмесин Mageia Linux веб сайтындан алынууда "
"ийгиликсиз айяктады..."

#: any.pm:197
#, c-format
msgid "Choose a mirror from which to get the packages"
msgstr "Пакеттерди алуучу күзгүнү тандаңыз"

#: any.pm:227
#, c-format
msgid "NFS setup"
msgstr "NFS орнотуу"

#: any.pm:228
#, c-format
msgid "Please enter the hostname and directory of your NFS media"
msgstr "NFS топтомунун компьютер атын жана директориясын кириңиз"

#: any.pm:232
#, c-format
msgid "Hostname missing"
msgstr "Түйюндүн аты көрсөтүлгөн жок"

#: any.pm:233
#, c-format
msgid "Directory must begin with \"/\""
msgstr "Директория \"/\" белги менен башталышы керек"

#: any.pm:237
#, c-format
msgid "Hostname of the NFS mount ?"
msgstr "NFS туташуунун түйюн аты ?"

#: any.pm:238
#, c-format
msgid "Directory"
msgstr "Каталог"

#: any.pm:260
#, c-format
msgid "Supplementary"
msgstr "Кошумча"

#: any.pm:295
#, c-format
msgid ""
"Can't find a package list file on this mirror. Make sure the location is "
"correct."
msgstr ""
"Бул күзгүдө пакеттердин тизмеси атбылган жок. Жайгашуусунун тууралыгын "
"текшериңиз."

#: any.pm:334
#, c-format
msgid "Looking at packages already installed..."
msgstr "Орнотулган пакеттер изделип жатат..."

#: any.pm:369
#, c-format
msgid "Finding packages to upgrade..."
msgstr "Жаңыланычуу пакеттер изделип жатат..."

#: any.pm:388
#, c-format
msgid "Removing packages prior to upgrade..."
msgstr "Жаңылоодон мурда пакеттер өчүрүлүп жатат..."

#. -PO: keep the double empty lines between sections, this is formatted a la LaTeX
#: any.pm:594
#, c-format
msgid ""
"The following packages will be removed to allow upgrading your system: %s\n"
"\n"
"\n"
"Do you really want to remove these packages?\n"
msgstr ""
"Сиздин системага жаңылануу мүмкүнчүлүгүн берүү үчүн төмөнкү пакеттер\n"
"алынып ташталат: %s\n"
"\n"
"\n"
"Бул пакеттердин алынып ташталуусун каалайсызбы?\n"

#: any.pm:813
#, c-format
msgid "Error reading file %s"
msgstr "%s файлын окуудагы ката"

#: any.pm:1020
#, c-format
msgid "The following disk(s) were renamed:"
msgstr "Төмөнкү диск(тер)дин аты өзгөртүлдү:"

#: any.pm:1022
#, c-format
msgid "%s (previously named as %s)"
msgstr "%s (мурунку аты %s)"

#: any.pm:1079
#, c-format
msgid "HTTP"
msgstr "HTTP"

#: any.pm:1079
#, c-format
msgid "FTP"
msgstr "FTP"

#: any.pm:1079
#, c-format
msgid "NFS"
msgstr "NFS"

#: any.pm:1098 steps_interactive.pm:938
#, c-format
msgid "Network"
msgstr "Желе"

#: any.pm:1102
#, c-format
msgid "Please choose a media"
msgstr "Алып жүрүүчүнү тандаңыз"

#: any.pm:1118
#, c-format
msgid "File already exists. Overwrite it?"
msgstr "Файл алдагачан бар. Үстүнө кайра жазылсынбы?"

#: any.pm:1122
#, c-format
msgid "Permission denied"
msgstr "Кирүү укугу четке кагылды"

#: any.pm:1170
#, c-format
msgid "Bad NFS name"
msgstr "Жаман NFS аты"

#: any.pm:1191
#, c-format
msgid "Bad media %s"
msgstr "%s жараксыз алып жүрүүчү"

#: any.pm:1234
#, c-format
msgid "Can not make screenshots before partitioning"
msgstr "Бөлүмдөрдү жаратууга чейин скриншотторду түзүүгө болбойт"

#: any.pm:1242
#, c-format
msgid "Screenshots will be available after install in %s"
msgstr "Орнотуудан кийин скриншоттор %s ичинде болот"

#: gtk.pm:131
#, c-format
msgid "Installation"
msgstr "Орнотуу"

#: gtk.pm:135 share/meta-task/compssUsers.pl:43
#, c-format
msgid "Configuration"
msgstr "Конфигурациялоо"

#: install2.pm:168
#, c-format
msgid "You must also format %s"
msgstr "Сиз %s дагы форматташыңыз керек"

#: interactive.pm:16
#, c-format
msgid ""
"Some hardware on your computer needs ``proprietary'' drivers to work.\n"
"You can find some information about them at: %s"
msgstr ""
"Компьютериңизде кээбир жабдыктар иштөө үчүн эркин эмес драйверлерди талап "
"кылат.\n"
"Алар жөнүндө маалыматты көрсөтүлгөн жерден табып аласыз: %s"

#: interactive.pm:22
#, c-format
msgid "Bringing up the network"
msgstr "Тармак көтөрүлүүдө"

#: interactive.pm:27
#, c-format
msgid "Bringing down the network"
msgstr "Тармак өчүрүлүүдө"

#: media.pm:399
#, c-format
msgid "Please wait, retrieving file"
msgstr "Күтө туруңуз, файл жүктөлүп жатат"

#: media.pm:717
#, c-format
msgid "unable to add medium"
msgstr "булак кошулган жок"

#: media.pm:757
#, c-format
msgid "Copying some packages on disks for future use"
msgstr "Кээбир пакеттерди келечекте колдонуу үчүн дискке көчүрүп жатат"

#: media.pm:810
#, c-format
msgid "Copying in progress"
msgstr "Көчүрүү жүрүүдө"

#: pkgs.pm:32
#, c-format
msgid "must have"
msgstr "болушу керек"

#: pkgs.pm:33
#, c-format
msgid "important"
msgstr "керектүү"

#: pkgs.pm:34
#, c-format
msgid "very nice"
msgstr "өтө жакшы"

#: pkgs.pm:35
#, c-format
msgid "nice"
msgstr "жакшы"

#: pkgs.pm:36
#, c-format
msgid "maybe"
msgstr "болушу мүмкүн"

#: pkgs.pm:239
#, c-format
msgid ""
"Some packages requested by %s cannot be installed:\n"
"%s"
msgstr ""
"%s менен талап кылынган кээбир пакеттер орнотула алган жок:\n"
"%s"

#: pkgs.pm:327
#, c-format
msgid "An error occurred:"
msgstr "Жаңылыштык орун алды:"

#: pkgs.pm:814
#, c-format
msgid "%d installation transactions failed"
msgstr "%d орнотуу транзакциялары ишке ашпады"

#: pkgs.pm:815
#, c-format
msgid "Installation of packages failed:"
msgstr "Пакеттердин орнотулушу ийгиликсиз аяктады:"

#: share/meta-task/compssUsers.pl:13
#, c-format
msgid "Workstation"
msgstr "Иш станциясы"

#: share/meta-task/compssUsers.pl:15
#, c-format
msgid "Office Workstation"
msgstr "Офис станциясы"

#: share/meta-task/compssUsers.pl:17
#, c-format
msgid ""
"Office programs: wordprocessors (OpenOffice.org Writer, Kword), spreadsheets "
"(OpenOffice.org Calc, Kspread), PDF viewers, etc"
msgstr ""
"Офис программалары: текст процессорлору (OpenOffice.org Writer, Kword), "
"электрондук таблицалар  (OpenOffice.org Calc, Kspread), pdf файлдарын көрүү "
"программалары, ж.б."

#: share/meta-task/compssUsers.pl:22
#, c-format
msgid "Game station"
msgstr "Оюн станциясы"

#: share/meta-task/compssUsers.pl:23
#, c-format
msgid "Amusement programs: arcade, boards, strategy, etc"
msgstr ""
"Оюн-зоок программалары: аркада оюндары, тактай оюндары, стратегия оюндары, ж."
"б."

#: share/meta-task/compssUsers.pl:26
#, c-format
msgid "Multimedia station"
msgstr "Мультимедиа станциясы"

#: share/meta-task/compssUsers.pl:27
#, c-format
msgid "Sound and video playing/editing programs"
msgstr "Үн жана видео ойнотуу/терүү программалары"

#: share/meta-task/compssUsers.pl:32
#, c-format
msgid "Internet station"
msgstr "Интернет станциясы"

#: share/meta-task/compssUsers.pl:33
#, c-format
msgid ""
"Set of tools to read and send mail and news (mutt, tin..) and to browse the "
"Web"
msgstr ""
"Почтаны жана жаңылыктарды (mutt, tin..) окууга жана жөнөтүүгө, жана вебде "
"иштөөгө арналган куралдар тобу"

#: share/meta-task/compssUsers.pl:38
#, c-format
msgid "Network Computer (client)"
msgstr "Тармак компьютери (клиент)"

#: share/meta-task/compssUsers.pl:39
#, c-format
msgid "Clients for different protocols including ssh"
msgstr "Ар түрдүү протоколдор клиенттери, ssh да кошулган"

#: share/meta-task/compssUsers.pl:44
#, c-format
msgid "Tools to ease the configuration of your computer"
msgstr "Компьютериңизди жеңил конфигурациялоо куралдары"

#: share/meta-task/compssUsers.pl:48
#, c-format
msgid "Console Tools"
msgstr "Консоль куралдары"

#: share/meta-task/compssUsers.pl:49
#, c-format
msgid "Editors, shells, file tools, terminals"
msgstr "Редакторлор, шелдер, файл куралдары, терминалдар"

#: share/meta-task/compssUsers.pl:53 share/meta-task/compssUsers.pl:156
#: share/meta-task/compssUsers.pl:158
#, c-format
msgid "Development"
msgstr "Иштеп түзүү"

#: share/meta-task/compssUsers.pl:54 share/meta-task/compssUsers.pl:159
#, c-format
msgid "C and C++ development libraries, programs and include files"
msgstr ""
"C жана C++ иштеп чыгуу библиотекалары, программалар жана include файлдары"

#: share/meta-task/compssUsers.pl:57 share/meta-task/compssUsers.pl:163
#, c-format
msgid "Documentation"
msgstr "Документация"

#: share/meta-task/compssUsers.pl:58 share/meta-task/compssUsers.pl:164
#, c-format
msgid "Books and Howto's on Linux and Free Software"
msgstr "Linux жана Free Software жөнүндөгү китептер жана HOWTOлар"

#: share/meta-task/compssUsers.pl:62 share/meta-task/compssUsers.pl:167
#, c-format
msgid "LSB"
msgstr "LSB"

#: share/meta-task/compssUsers.pl:63 share/meta-task/compssUsers.pl:168
#, c-format
msgid "Linux Standard Base. Third party applications support"
msgstr ""
"Linux стандарттык базасы. Үчүнчү тараптык иштеп чыгуучулардын тиркемелерин "
"колдоо"

#: share/meta-task/compssUsers.pl:72
#, c-format
msgid "Web Server"
msgstr "Веб-сервери"

#: share/meta-task/compssUsers.pl:73
#, c-format
msgid "Apache"
msgstr "Apache"

#: share/meta-task/compssUsers.pl:76
#, c-format
msgid "Groupware"
msgstr "Groupware"

#: share/meta-task/compssUsers.pl:77
#, c-format
msgid "Kolab Server"
msgstr "Kolab сервери"

#: share/meta-task/compssUsers.pl:80 share/meta-task/compssUsers.pl:121
#, c-format
msgid "Firewall/Router"
msgstr "Файрволл/Маршруттагыч"

#: share/meta-task/compssUsers.pl:81 share/meta-task/compssUsers.pl:122
#, c-format
msgid "Internet gateway"
msgstr "Интернет дарбазасы"

#: share/meta-task/compssUsers.pl:84
#, c-format
msgid "Mail/News"
msgstr "Почта/Жаңылыктар"

#: share/meta-task/compssUsers.pl:85
#, c-format
msgid "Postfix mail server, Inn news server"
msgstr "Postfix почта сервери, Inn жаңылыктар сервери"

#: share/meta-task/compssUsers.pl:88
#, c-format
msgid "Directory Server"
msgstr "Каталогдор сервери"

#: share/meta-task/compssUsers.pl:92
#, c-format
msgid "FTP Server"
msgstr "FTP сервери"

#: share/meta-task/compssUsers.pl:93
#, c-format
msgid "ProFTPd"
msgstr "ProFTPd"

#: share/meta-task/compssUsers.pl:96
#, c-format
msgid "DNS/NIS"
msgstr "DNS/NIS"

#: share/meta-task/compssUsers.pl:97
#, c-format
msgid "Domain Name and Network Information Server"
msgstr "DNS жана NIS"

#: share/meta-task/compssUsers.pl:100
#, c-format
msgid "File and Printer Sharing Server"
msgstr "Файл жана принтер бөлүшүү сервери"

#: share/meta-task/compssUsers.pl:101
#, c-format
msgid "NFS Server, Samba server"
msgstr "NFS сервери, Samba сервери"

#: share/meta-task/compssUsers.pl:104 share/meta-task/compssUsers.pl:117
#, c-format
msgid "Database"
msgstr "Берилиштер базасы"

#: share/meta-task/compssUsers.pl:105
#, c-format
msgid "PostgreSQL and MySQL Database Server"
msgstr "PostgreSQL жана MySQL берилиштер базасынын сервери"

#: share/meta-task/compssUsers.pl:109
#, c-format
msgid "Web/FTP"
msgstr "Web/FTP"

#: share/meta-task/compssUsers.pl:110
#, c-format
msgid "Apache, Pro-ftpd"
msgstr "Apache, Pro-ftpd"

#: share/meta-task/compssUsers.pl:113
#, c-format
msgid "Mail"
msgstr "Почта"

#: share/meta-task/compssUsers.pl:114
#, c-format
msgid "Postfix mail server"
msgstr "Postfix почта сервери"

#: share/meta-task/compssUsers.pl:118
#, c-format
msgid "PostgreSQL or MySQL database server"
msgstr "PostgreSQL же MySQL берилиштер базасынын сервери"

#: share/meta-task/compssUsers.pl:125
#, c-format
msgid "Network Computer server"
msgstr "Тармак сервери"

#: share/meta-task/compssUsers.pl:126
#, c-format
msgid "NFS server, SMB server, Proxy server, ssh server"
msgstr "NFS сервери, SMB сервери, Proxy сервери, ssh сервери"

#: share/meta-task/compssUsers.pl:132
#, c-format
msgid "Graphical Environment"
msgstr "Графикалык чөйрө"

#: share/meta-task/compssUsers.pl:134
#, c-format
msgid "KDE Workstation"
msgstr "KDE иш станциясы"

#: share/meta-task/compssUsers.pl:135
#, c-format
msgid ""
"The K Desktop Environment, the basic graphical environment with a collection "
"of accompanying tools"
msgstr ""
"K Desktop Environment - негизги графикалык чөйрө, кошумча куралдар "
"коллекциясы менен"

#: share/meta-task/compssUsers.pl:139
#, c-format
msgid "GNOME Workstation"
msgstr "GNOME иш станциясы"

#: share/meta-task/compssUsers.pl:140
#, c-format
msgid ""
"A graphical environment with user-friendly set of applications and desktop "
"tools"
msgstr ""
"Колдонуучуга ыңгайлашкан тиркемелерин жана иш столунун кураларын камтыган "
"графикалык чөйрө"

#: share/meta-task/compssUsers.pl:144
#, c-format
msgid "LXDE Desktop"
msgstr "LXDE иш столу"

#: share/meta-task/compssUsers.pl:146
#, c-format
msgid ""
"A lightweight & fast graphical environment with user-friendly set of "
"applications and desktop tools"
msgstr ""
"Колдонуучуга ыңгайлашкан тиркемелерин жана иш столунун кураларын камтыган "
"графикалык чөйрө"

#: share/meta-task/compssUsers.pl:149
#, c-format
msgid "Other Graphical Desktops"
msgstr "Башка графикалык иш столдору"

#: share/meta-task/compssUsers.pl:150
#, c-format
msgid "Window Maker, Enlightenment, Fvwm, etc"
msgstr "Window Maker, Enlightenment, Fvwm, ж.б. "

#: share/meta-task/compssUsers.pl:173
#, c-format
msgid "Utilities"
msgstr "Утилиталар"

#: share/meta-task/compssUsers.pl:175 share/meta-task/compssUsers.pl:176
#, c-format
msgid "SSH Server"
msgstr "SSH сервери"

#: share/meta-task/compssUsers.pl:180
#, c-format
msgid "Webmin"
msgstr "Webmin"

#: share/meta-task/compssUsers.pl:181
#, c-format
msgid "Webmin Remote Configuration Server"
msgstr "Webmin узактан башкаруу сервери"

#: share/meta-task/compssUsers.pl:185
#, c-format
msgid "Network Utilities/Monitoring"
msgstr "Тармак аспаптары/Мониторинг"

#: share/meta-task/compssUsers.pl:186
#, c-format
msgid "Monitoring tools, processes accounting, tcpdump, nmap, ..."
msgstr "Мониторинг аспаптар, процесс эсептүүчүлөр, tcpdump, nmap, ..."

#: share/meta-task/compssUsers.pl:190
#, c-format
msgid "Mageia Wizards"
msgstr "Mageia Усталары"

#: share/meta-task/compssUsers.pl:191
#, c-format
msgid "Wizards to configure server"
msgstr "Серверди ырастоо усталары"

#: steps.pm:85
#, c-format
msgid ""
"An error occurred, but I do not know how to handle it nicely.\n"
"Continue at your own risk."
msgstr ""
"Жаңылыштык орун алды, бирок мен аны кантип туура иштетүүнү билбейм.\n"
"Мындан ары тобокелге салып өзүңүз улантыңыз."

#: steps.pm:443
#, c-format
msgid ""
"Some important packages did not get installed properly.\n"
"Either your cdrom drive or your cdrom is defective.\n"
"Check the cdrom on an installed computer using \"rpm -qpl media/main/*.rpm"
"\"\n"
msgstr ""
"Кээбир негизги пакеттер туура эмес орнотулду.\n"
"CDROM түзүлүшү же диск бузук болушу мүмкүн.\n"
"Киргизилген дискти \"rpm -qpl media/main/*.rpm\" коммандасы менен "
"текшериңиз\n"

#: steps_auto_install.pm:71 steps_stdio.pm:27
#, c-format
msgid "Entering step `%s'\n"
msgstr "`%s' кадамына өтүү аракети\n"

#: steps_curses.pm:22
#, c-format
msgid "Mageia Linux Installation %s"
msgstr "Mageia Linux %s орнотуу"

#: steps_curses.pm:32
#, c-format
msgid "<Tab>/<Alt-Tab> between elements"
msgstr "<Tab>/<Alt-Tab> элементтер ортосунда"

#: steps_gtk.pm:89
#, c-format
msgid "Xorg server is slow to start. Please wait..."
msgstr "Xorg жай башталып жатат. Күтө туруңуз..."

#: steps_gtk.pm:206
#, c-format
msgid ""
"Your system is low on resources. You may have some problem installing\n"
"Mageia Linux. If that occurs, you can try a text install instead. For "
"this,\n"
"press `F1' when booting on CDROM, then enter `text'."
msgstr ""
"Системага жетеринче ресурс жетпей жатат. Mageia Linux системасын\n"
"орнотууда проблемалар чыгышы мүмкүн. Андай болсо тексттик режимде\n"
"орнотууну текшерип көрүңүз. Ал үчүн, дисктен жүктөлүп жаткан учурда\n"
"`F1' клавишасын басып `text' сөзүн кириңиз."

#: steps_gtk.pm:239
#, c-format
msgid "Install Mageia KDE Desktop"
msgstr "Mageia KDE иш столун орнотуу"

#: steps_gtk.pm:240
#, c-format
msgid "Install Mageia GNOME Desktop"
msgstr "Mageia GNOME иш столун орнотуу"

#: steps_gtk.pm:241
#, c-format
msgid "Custom install"
msgstr "Менчик орнотуу"

#: steps_gtk.pm:262
#, c-format
msgid "KDE Desktop"
msgstr "KDE иш столу"

#: steps_gtk.pm:263
#, c-format
msgid "GNOME Desktop"
msgstr "GNOME иш столу"

#: steps_gtk.pm:264
#, c-format
msgid "Custom Desktop"
msgstr "Менчик иш столу"

#: steps_gtk.pm:270
#, c-format
msgid "Here's a preview of the '%s' desktop."
msgstr "Мына '%s' иш столдун алдын ала көрүнүшү."

#: steps_gtk.pm:298
#, c-format
msgid "Click on images in order to see a bigger preview"
msgstr "Чоң көрүнүштү көрүү үчүн сүрөткө басыңыз"

#: steps_gtk.pm:316 steps_interactive.pm:609 steps_list.pm:30
#, c-format
msgid "Package Group Selection"
msgstr "Пакеттердин группасын тандоо"

#: steps_gtk.pm:337 steps_interactive.pm:626
#, c-format
msgid "Individual package selection"
msgstr "Пакеттерди өз алдынча тандоо"

#: steps_gtk.pm:361 steps_interactive.pm:546
#, c-format
msgid "Total size: %d / %d MB"
msgstr "Жалпы көлөмү: %d / %d Мб"

#: steps_gtk.pm:403
#, c-format
msgid "Bad package"
msgstr "Туура эмес пакет"

#: steps_gtk.pm:405
#, c-format
msgid "Version: "
msgstr "Версиясы: "

#: steps_gtk.pm:406
#, c-format
msgid "Size: "
msgstr "Көлөмү: "

#: steps_gtk.pm:406
#, c-format
msgid "%d KB\n"
msgstr "%d Кб\n"

#: steps_gtk.pm:407
#, c-format
msgid "Importance: "
msgstr "Маанилүүлүгү:"

#: steps_gtk.pm:441
#, c-format
msgid "You can not select/unselect this package"
msgstr "Сиз бул пакетти тандап/тандабай албайсыз"

#: steps_gtk.pm:445
#, c-format
msgid "due to missing %s"
msgstr "%s жоктугунан"

#: steps_gtk.pm:446
#, c-format
msgid "due to unsatisfied %s"
msgstr "%s канаатанбагандыгынан"

#: steps_gtk.pm:447
#, c-format
msgid "trying to promote %s"
msgstr "%s активдештирүү аракети"

#: steps_gtk.pm:448
#, c-format
msgid "in order to keep %s"
msgstr "%s сактоо үчүн"

#: steps_gtk.pm:453
#, c-format
msgid ""
"You can not select this package as there is not enough space left to install "