summaryrefslogtreecommitdiffstats
path: root/po/nn.po
Commit message (Expand)AuthorAgeFilesLines
* sync with codeThierry Vignaud2007-08-071-8/+18
* Updated Norwegian Nynorsk translation.Karl Ove Hufthammer2007-07-201-2/+3
* Updated Norwegian Nynorsk translation.Karl Ove Hufthammer2007-07-111-18/+14
* really display which database is lockedThierry Vignaud2007-03-211-2/+2
* update log message regarding s/mdkupdate/MandrivaUpdate/Thierry Vignaud2007-03-201-2/+2
* add new strings for warning about missing media or disabled mediaThierry Vignaud2007-03-201-2/+24
* Updated POT file of mdkonline.Funda Wang2007-03-191-133/+156
* Updated Norwegian Nynorsk translation.Karl Ove Hufthammer2007-02-201-82/+96
* adapted to plural-formsPablo Saratxaga2007-01-231-0/+1
* better looking message (add EOLs around list items)Thierry Vignaud2006-12-051-0/+4
* updated pot file (with an explanation for "Greeting"),Pablo Saratxaga2006-09-011-155/+156
* updated po files; reused general copyright text from previous translationsPablo Saratxaga2006-05-121-2/+2
* add 2 new stringsThierry Vignaud2006-04-061-3/+13
* factorize yearsThierry Vignaud2006-04-061-1/+1
* sync with codeThierry Vignaud2006-04-061-12/+72
* translate a string from rpmdrakeThierry Vignaud2006-03-301-1/+1
* sync messages with codeThierry Vignaud2006-03-301-43/+58
* updated pot filePablo Saratxaga2006-03-161-40/+50
* sync with code (adding comment for translator)Thierry Vignaud2006-03-071-16/+17
* sync with codeThierry Vignaud2006-03-071-9/+16
* merge in translations from urpmiThierry Vignaud2006-03-071-1/+1
* sync with codeThierry Vignaud2006-03-071-35/+40
* updated Welsh po file; saved some old translationsPablo Saratxaga2006-03-061-5/+5
* merge in translations from DrakXThierry Vignaud2006-03-031-3/+3
* sync with codeThierry Vignaud2006-03-031-5/+29
* sync with codeThierry Vignaud2006-03-021-143/+159
* updated pot filePablo Saratxaga2005-09-161-134/+269
* updated pot filePablo Saratxaga2005-08-081-35/+35
* updated po filesPablo Saratxaga2005-07-181-5/+12
* Updated translation.Karl Ove Hufthammer2005-07-151-15/+15
* More s/Mandrake/Mandriva, fix mdk bug#16077.Funda Wang2005-07-061-35/+35
* made more explicit help line about text mode version;Pablo Saratxaga2005-05-111-2/+2
* updated pot filePablo Saratxaga2005-04-181-84/+104
* - switch to MandrivaDaouda Lo2005-04-141-39/+39
* typo fix (Arpad Biro)Thierry Vignaud2005-02-171-1/+1
* updated pot filePablo Saratxaga2005-02-151-1/+1
* typo fixes (Arpad Biro)Thierry Vignaud2005-02-141-2/+2
* updated po filePablo Saratxaga2005-02-081-4/+7
* Updated Norwegian Nynorsk translation.Karl Ove Hufthammer2005-02-031-8/+4
* updated pot filePablo Saratxaga2005-01-311-53/+73
* Updated Norwegian Nynorsk translation.Karl Ove Hufthammer2005-01-191-16/+45
* updated pot filePablo Saratxaga2005-01-031-56/+72
* Norwegian Nynorsk translation of mandrakeonline.Karl Ove Hufthammer2004-12-101-0/+536
='#n410'>410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603
package keyboard; # $Id$

use diagnostics;
use strict;

#-######################################################################################
#- misc imports
#-######################################################################################
use common;
use detect_devices;
use run_program;
use lang;
use log;
use c;


#-######################################################################################
#- Globals
#-######################################################################################
my $KMAP_MAGIC = 0x8B39C07F;

#- a best guess of the keyboard layout, based on the choosen locale
#- beware only the first 5 characters of the locale are used
my %lang2keyboard =
(
  'af'  => 'us_intl',
  'am'  => 'us:90',
  'ar'  => 'ar:90',
  'as'  => 'ben:90 dev:20 us_intl:5',
  'az'  => 'az:90 tr_q:10 us_intl:5',
  'be'  => 'by:90 ru:50 ru_yawerty:40',
  'bg'  => 'bg_phonetic:60 bg:50',
  'bn'  => 'ben:90 dev:20 us_intl:5',
  'br'  => 'fr:90',
  'bs'  => 'bs:90',
  'ca'  => 'es:90 fr:15',
  'cs'  => 'cz_qwerty:70 cz:50',
  'cy'  => 'uk:90',
  'da'  => 'dk:90',
  'de'  => 'de_nodeadkeys:70 de:50 be:50 ch_de:50',
  'el'  => 'gr:90',
  'en'  => 'us:89 us_intl:50 qc:50 uk:50',
'en_IE' => 'ie:80 uk:70',
'en_US' => 'us:90 us_intl:50',
'en_GB' => 'uk:89 us:60 us_intl:50',
  'eo'  => 'us_intl:89 dvorak_eo:30 dvorak:20',
  'es'  => 'es:85 la:80 us_intl:50',
  'et'  => 'ee:90',
  'eu'  => 'es:90 fr:15',
  'fa'  => 'ir:90',
  'fi'  => 'fi:90',
  'fo'  => 'dk:90',
  'fr'  => 'fr:89 qc:85 be:85 ch_fr:70',
  'fur' => 'it:90',
  'ga'  => 'ie:80 uk:70',
  'gd'  => 'uk:80 ie:70',
  'gl'  => 'es:90',
  'gn'  => 'la:85 es:80 us_intl:50',
  'gu'  => 'guj:90',
  'gv'  => 'uk:80 ie:70',
  'he'  => 'il:90 il_phonetic:10',
  'hi'  => 'dev:90',
  'hr'  => 'hr:90 si:50',
  'hu'  => 'hu:90',
  'hy'  => 'am:90 am_old:10 am_phonetic:5',
  'ia'  => 'us:90 us_intl:20',
  'id'  => 'us:90 us_intl:20',
  'is'  => 'is:90',
  'it'  => 'it:90 ch_fr:50 ch_de:50',
  'iu'  => 'iu:90',
  'ja'  => 'jp:90 us:50 us_intl:20',
  'ka'  => 'ge_la:90 ge_ru:50',
  'kl'  => 'dk:80 us_intl:30',
  'kn'  => 'kan:90',
  'ko'  => 'kr:90 us:60',
  'ku'  => 'tr_q:90 tr_f:30',
  'kw'  => 'uk:80 ie:70',
  'ky'  => 'ky:90 ru_yawerty:40',
  'li'  => 'us_intl:80 be:70 nl:10 us:5',
  'lo'  => 'lao:90',
  'lt'  => 'lt:80 lt_new:70 lt_b:60 lt_p:50',
  'ltg' => 'lv:90 lt:40 lt_new:30 lt_b:20 lt_p:10 ee:5',
  'lv'  => 'lv:90 lt:40 lt_new:30 lt_b:20 lt_p:10 ee:5',
  'mi'  => 'us_intl:90 uk:20 us:10',
  'mk'  => 'mk:90',
  'ml'  => 'mal:90',
  'mn'  => 'mng:90 ru:20 ru_yawerty:5',
  'mr'  => 'dev:90',
  'ms'  => 'us:90 us_intl:20',
  'mt'  => 'mt:90 mt_us:35 us_intl:10',
  'my'  => 'mm:90',
  'nb'  => 'no:90 dvorak_no:10',
  'nds' => 'de_nodeadkeys:70 de:50 us_intl:40 nl:10 us:5',
  'ne'  => 'dev:90',
  'nl'  => 'us_intl:80 be:70 nl:10 us:5',
  'nn'  => 'no:90 dvorak_no:10',
  'no'  => 'no:90 dvorak_no:10', # for compatiblity only
  'oc'  => 'fr:90',
  'or'  => 'ori:90',
  'pa'  => 'gur:90',
  'ph'  => 'us:90 us_intl:20',
  'pl'  => 'pl:90 pl2:60',
  'pp'  => 'br:80 la:20 pt:10 us_intl:30',
'pt_BR' => 'br:90 la:20 pt:10 us_intl:30',
  'pt'  => 'pt:90',
  'ro'  => 'ro2:80 ro:40 us_intl:10',
  'ru'  => 'ru:85 ru_yawerty:80 ua:50',
  'sc'  => 'it:90',
  'se'  => 'sapmi:70 sapmi_sefi:50',
  'sh'  => 'yu:80',
  'sk'  => 'sk_qwerty:80 sk:70',
  'sl'  => 'si:90 hr:50',
  'sq'  => 'al:90',
  'sr'  => 'sr:80',
  'ss'  => 'us_intl',
  'st'  => 'us_intl',
  'sv'  => 'se:90 fi:30 dvorak_se:10',
  'ta'  => 'tscii:80 tml:20',
  'te'  => 'tel:90',
  'tg'  => 'tj:90 ru_yawerty:40',
  'th'  => 'th:90',
  'tk'  => 'tr_q:50 tr_f:40', # proper Turkmen keyboard still to come
  'tl'  => 'us:90 us_intl:20',
  'tr'  => 'tr_q:90 tr_f:30',
  'tt'  => 'ru:50 ru_yawerty:40',
  'uk'  => 'ua:90 ru:50 ru_yawerty:40',
  'ur'  => 'ar:50 ir:40', # proper Urdu keyboard still to come
  'uz'  => 'uz:80 ru_yawerty:40',
  'uz\@Cyrl'  => 'uz:80 ru_yawerty:40',
  'uz\@Latn'  => 'us:80 uz:80',
  've'  => 'us_intl',
  'vi'  => 'vn:80 us:60 us_intl:50',
  'wa'  => 'be:90 fr:5',
  'xh'  => 'us_intl',
  'yi'  => 'il_phonetic:90 il:10 us_intl:10',
'zh_CN' => 'us:60',
'zh_TW' => 'us:60',
  'zu'  => 'us_intl',
);

# USB kbd table
# The numeric values are the bCountryCode field (5th byte)  of HID descriptor
# NOTE: we don't trust when the layout is declared as us layout (0x21)
# as most manufacturers just use that value when selling physical devices
# with different layouts printed on the keys.
my @usb2keyboard =
(
  qw(SKIP ar_SKIP be ca_SKIP qc cz dk fi fr de gr il hu us_intl it jp),
#- 0x10
  qw(kr la nl no ir pl pt ru sk es se ch_de ch_de ch_de tw_SKIP tr_q),
#- 0x20
  qw(uk us_SKIP yu tr_f),
#- higher codes not attribued as of 2002-02
);

#- key = extension for Xmodmap file, [0] = description of the keyboard,
#- [1] = name for loadkeys, [2] = name for XKB, [3] = "1" if it is
#- a multigroup layout (eg: one with latin/non-latin letters)
my %keyboards = (
arch() =~ /^sparc/ ? (
 "cz" => [ N_("Czech (QWERTZ)"), "sunt5-cz-us",	    "cz",    0 ],
 "de" => [ N_("German"),         "sunt5-de-latin1", "de",    0 ],
 "dvorak" => [ N_("Dvorak"),     "sundvorak",       "dvorak",0 ],
 "es" => [ N_("Spanish"),        "sunt5-es",        "es",    0 ],
 "fi" => [ N_("Finnish"),        "sunt5-fi-latin1", "fi",    0 ],
 "fr" => [ N_("French"),         "sunt5-fr-latin1", "fr",    0 ],
 "no" => [ N_("Norwegian"),      "sunt4-no-latin1", "no",    0 ],
 "pl" => [ N_("Polish"),         "sun-pl-altgraph", "pl",    0 ],
 "ru" => [ N_("Russian"),        "sunt5-ru",        "ru",    1 ],
# TODO: check the console map
 "se" => [ N_("Swedish"),        "sunt5-fi-latin1", "se",    0 ],
 "uk" => [ N_("UK keyboard"),    "sunt5-uk",        "gb",    0 ],
 "us" => [ N_("US keyboard"),    "sunkeymap",       "us",    0 ],
) : (
 "al" => [ N_("Albanian"),       "al",              "al",    0 ],
 "am_old" => [ N_("Armenian (old)"), "am_old",	    "am(old)", 1 ],
 "am" => [ N_("Armenian (typewriter)"), "am-armscii8", "am",   1 ],
 "am_phonetic" => [ N_("Armenian (phonetic)"), "am_phonetic", "am(phonetic)",1 ],
 "ar" => [ N_("Arabic"),          "us",              "ar(digits)",   1 ],
 "az" => [ N_("Azerbaidjani (latin)"), "az",         "az",    0 ],
#"a3" => [ N_("Azerbaidjani (cyrillic)"), "az-koi8k","az(cyrillic)",1 ],
 "be" => [ N_("Belgian"),        "be2-latin1",      "be",    0 ],
 "ben" => [ N_("Bengali"),        "us",              "ben",   1 ],
"bg_phonetic" => [ N_("Bulgarian (phonetic)"), "bg", "bg(phonetic)", 1 ],
 "bg" => [ N_("Bulgarian (BDS)"), "bg",             "bg",    1 ],
 "br" => [ N_("Brazilian (ABNT-2)"), "br-abnt2",     "br",    0 ],
#- Bosnia and Croatia use the same layout, but people are confused if there
#- isn't an antry for their country
 "bs" => [ N_("Bosnian"),	 "croat",           "hr",    0 ],
 "by" => [ N_("Belarusian"),     "by-cp1251",       "by",    1 ],
 "ch_de" => [ N_("Swiss (German layout)"), "sg-latin1", "de_CH", 0 ],
 "ch_fr" => [ N_("Swiss (French layout)"), "fr_CH-latin1", "fr_CH", 0 ],
 "cz" => [ N_("Czech (QWERTZ)"), "cz",              "cz",    0 ],
 "cz_qwerty" => [ N_("Czech (QWERTY)"), "cz-lat2", "cz_qwerty", 0 ],
 "de" => [ N_("German"),         "de-latin1",       "de",    0 ],
 "de_nodeadkeys" => [ N_("German (no dead keys)"), "de-latin1-nodeadkeys", "de(nodeadkeys)", 0 ],
 "dev" => [ N_("Devanagari"),     "us",              "dev",   0 ],
 "dk" => [ N_("Danish"),         "dk-latin1",       "dk",    0 ],
 "dvorak" => [ N_("Dvorak (US)"), "pc-dvorak-latin1", "dvorak", 0 ],
 "dvorak_eo" => [ N_("Dvorak (Esperanto)"), "us",   "dvorak(eo)", 0 ],
 "dvorak_no" => [ N_("Dvorak (Norwegian)"), "no-dvorak", "dvorak(no)", 0 ],
 "dvorak_se" => [ N_("Dvorak (Swedish)"), "se-dvorak", "dvorak(se)", 0 ],
 "ee" => [ N_("Estonian"),       "ee-latin9",       "ee",    0 ],
 "es" => [ N_("Spanish"),        "es-latin1",       "es",    0 ],
 "fi" => [ N_("Finnish"),        "fi-latin1",       "fi",    0 ],
 "fr" => [ N_("French"),         "fr-latin1",       "fr",    0 ],
 "ge_ru" => [N_("Georgian (\"Russian\" layout)"), "ge_ru-georgian_academy", "ge_ru",1],
 "ge_la" => [N_("Georgian (\"Latin\" layout)"), "ge_la-georgian_academy", "ge_la",1],
 "gr" => [ N_("Greek"),          "gr-8859_7",       "el(extended)",  1 ],
 "gr_pl" => [ N_("Greek (polytonic)"), "gr-8859_7", "el(polytonic)", 1 ],
 "guj" => [ N_("Gujarati"),       "us",              "guj",  1 ],
 "gur" => [ N_("Gurmukhi"),       "us",              "gur",  1 ],
 "hu" => [ N_("Hungarian"),      "hu-latin2",       "hu",    0 ],
 "hr" => [ N_("Croatian"),	 "croat",           "hr",    0 ],
 "ie" => [ N_("Irish"),          "uk",              "ie",    0 ],
 "il" => [ N_("Israeli"),        "il-8859_8",       "il",    1 ],
 "il_phonetic" => [ N_("Israeli (Phonetic)"), "hebrew", "il_phonetic", 1 ],
 "ir" => [ N_("Iranian"),        "ir-isiri_3342",   "ir",    1 ],
 "is" => [ N_("Icelandic"),      "is-latin1",       "is",    0 ],
 "it" => [ N_("Italian"),        "it-latin1",       "it",    0 ],
 "iu" => [ N_("Inuktitut"),      "us",              "iu",    1 ],
# Japanese keyboard is dual latin/kana; but telling it here shows a
# message to choose the switching key that is misleading, as input methods
# aren't automatically enabled when typing in kana
 "jp" => [ N_("Japanese 106 keys"), "jp106",        "jp",    0 ],
 "kan" => [ N_("Kannada"),        "us",              "kan",  1 ],
#There is no XKB korean file yet; but using xmodmap one disables
# some functioanlity; "us" used for XKB until this is fixed
 "kr" => [ N_("Korean keyboard"), "us",             "us",    1 ],
 "ky" => [ N_("Kyrgyz keyboard"), "ru",             "ky",    1 ],
 "la" => [ N_("Latin American"), "la-latin1",       "la",    0 ],
 "lao" => [ N_("Laotian"),	 "us",	            "lo",    1 ], 
 "lt" => [ N_("Lithuanian AZERTY (old)"), "lt-latin7", "lt_a", 0 ],
#- TODO: write a console kbd map for lt_new
 "lt_new" => [ N_("Lithuanian AZERTY (new)"), "lt-latin7", "lt_std", 0 ],
 "lt_b" => [ N_("Lithuanian \"number row\" QWERTY"), "ltb-latin7", "lt", 1 ],
 "lt_p" => [ N_("Lithuanian \"phonetic\" QWERTY"), "ltp-latin7", "lt_p", 0 ],
 "lv" => [ N_("Latvian"),	 "lv-latin7",       "lv",    0 ],
 "mal" => [ N_("Malayalam"),	 "us",              "ml(mlplusnum)", 1 ],
 "mk" => [ N_("Macedonian"),	 "mk",              "mk",    1 ],
 "mm" => [ N_("Myanmar (Burmese)"), "us",           "mm",    1 ],
 "mng" => [ N_("Mongolian (cyrillic)"), "us",       "mng",   1 ],
 "mt" => [ N_("Maltese (UK)"),   "uk",              "mt",    0 ],
 "mt_us" => [ N_("Maltese (US)"), "us",             "mt_us", 0 ],
 "nl" => [ N_("Dutch"),          "nl-latin1",       "nl",    0 ],
 "no" => [ N_("Norwegian"),      "no-latin1",       "no",    0 ],
 "ori" => [ N_("Oriya"),          "us",              "ori",  1 ],
 "pl" => [ N_("Polish (qwerty layout)"), "pl",      "pl",    0 ],
 "pl2" => [ N_("Polish (qwertz layout)"), "pl-latin2", "pl2", 0 ],
 "pt" => [ N_("Portuguese"),     "pt-latin1",       "pt",    0 ],
 "qc" => [ N_("Canadian (Quebec)"), "qc-latin1", "ca_enhanced", 0 ],
#- TODO: write a console kbd map for ro2
 "ro2" => [ N_("Romanian (qwertz)"), "ro2",         "ro2",   0 ],
 "ro" => [ N_("Romanian (qwerty)"), "ro",           "ro",    0 ],
 "ru" => [ N_("Russian"),        "ru4",             "ru(winkeys)", 1 ],
 "ru_yawerty" => [ N_("Russian (Phonetic)"), "ru-yawerty", "ru_yawerty", 1 ],
 "sapmi" => [ N_("Saami (norwegian)"), "no-latin1",  "sapmi", 0 ],
 "sapmi_sefi" => [ N_("Saami (swedish/finnish)"), "se-latin1", "sapmi(sefi)", 0 ],
 "se" => [ N_("Swedish"),        "se-latin1",       "se",    0 ],
 "si" => [ N_("Slovenian"),      "slovene",         "si",    0 ],
 "sk" => [ N_("Slovakian (QWERTZ)"), "sk-qwertz",   "sk",    0 ],
 "sk_qwerty" => [ N_("Slovakian (QWERTY)"), "sk-qwerty", "sk_qwerty", 0 ],
# TODO: console map
 "sr" => [ N_("Serbian (cyrillic)"), "sr",          "sr",    1 ],
 "syr" => [ N_("Syriac"),         "us",             "syr",  1 ],
 "syr_p" => [ N_("Syriac (phonetic)"), "us",        "syr_phonetic",  1 ],
 "tel" => [ N_("Telugu"),         "us",             "tel",  1 ],
# no console kbd that I'm aware of
 "tml" => [ N_("Tamil (ISCII-layout)"), "us",       "tml",   1 ],
 "tscii" => [ N_("Tamil (Typewriter-layout)"), "us", "ta(UNI)", 1 ],
 "th" => [ N_("Thai keyboard"),  "th",              "th",    1 ],
# TODO: console map
 "tj" => [ N_("Tajik keyboard"), "ru4",             "tj",    1 ],
 "tr_f" => [ N_("Turkish (traditional \"F\" model)"), "trf", "tr_f", 0 ],
 "tr_q" => [ N_("Turkish (modern \"Q\" model)"), "tr_q-latin5", "tr", 0 ],
#-"tw => [ N_("Chineses bopomofo"), "tw",           "tw",    1 ],
 "ua" => [ N_("Ukrainian"),      "ua",              "ua",    1 ],
 "uk" => [ N_("UK keyboard"),    "uk",              "gb",    0 ],
 "us" => [ N_("US keyboard"),    "us",              "en_US", 0 ],
 "us_intl" => [ N_("US keyboard (international)"), "us-latin1", "us_intl", 0 ],
 "uz" => [ N_("Uzbek (cyrillic)"), "uz.uni",         "uz",    1 ],
 "vn" => [ N_("Vietnamese \"numeric row\" QWERTY"), "vn-tcvn", "vn(toggle)", 0 ], 
 "yu" => [ N_("Yugoslavian (latin)"), "sr",         "yu",    0 ],
),
);

#- list of  possible choices for the key combinations to toggle XKB groups
#- (eg in X86Config file: XkbOptions "grp:toggle")
my %grp_toggles = (
    toggle => N_("Right Alt key"),
    shift_toggle => N_("Both Shift keys simultaneously"),
    ctrl_shift_toggle => N_("Control and Shift keys simultaneously"),
    caps_toggle => N_("CapsLock key"),
    ctrl_alt_toggle => N_("Ctrl and Alt keys simultaneously"),
    alt_shift_toggle => N_("Alt and Shift keys simultaneously"),
    menu_toggle => N_("\"Menu\" key"),
    lwin_toggle => N_("Left \"Windows\" key"),
    rwin_toggle => N_("Right \"Windows\" key"),
    ctrls_toggle => N_("Both Control keys simultaneously"),
    alts_toggle => N_("Both Alt keys simultaneously"),
    lshift_toggle => N_("Left Shift key"),
    rshift_toggle => N_("Right Shift key"),
    lalt_toggle => N_("Left Alt key"),
    lctrl_toggle => N_("Left Control key"),
    rctrl_toggle => N_("Right Control key"),
);


#-######################################################################################
#- Functions
#-######################################################################################
sub KEYBOARDs() { keys %keyboards }
sub KEYBOARD2text { $keyboards{$_[0]} && $keyboards{$_[0]}[0] }
sub keyboards() { map { { KEYBOARD => $_ } } keys %keyboards }
sub keyboard2one {
    my ($keyboard, $nb) = @_;
    ref $keyboard or internal_error();
    my $l = $keyboards{$keyboard->{KEYBOARD}} or return;
    $l->[$nb];
}
sub keyboard2text { keyboard2one($_[0], 0) }
sub keyboard2kmap { keyboard2one($_[0], 1) }
sub keyboard2xkb  { keyboard2one($_[0], 2) }

sub grp_toggles {
    my ($keyboard) = @_;
    keyboard2one($keyboard, 3) or return;
    \%grp_toggles;
}

sub group_toggle_choose {
    my ($in, $keyboard) = @_;

    if (my $grp_toggles = keyboard::grp_toggles($keyboard)) {
	my $GRP_TOGGLE = $keyboard->{GRP_TOGGLE} || 'caps_toggle';
	$GRP_TOGGLE = $in->ask_from_listf('', N("Here you can choose the key or key combination that will 
allow switching between the different keyboard layouts
(eg: latin and non latin)"), sub { translate($grp_toggles->{$_[0]}) }, [ sort keys %$grp_toggles ], $GRP_TOGGLE) or return;

        $GRP_TOGGLE ne 'rctrl_toggle' and $in->ask_warn(N("Warning"), formatAlaTeX(
N("This setting will be activated after the installation.
During installation, you will need to use the Right Control
key to switch between the different keyboard layouts.")));
        log::l("GRP_TOGGLE: $GRP_TOGGLE");
        $keyboard->{GRP_TOGGLE} = $GRP_TOGGLE;
    } else {
        $keyboard->{GRP_TOGGLE} = '';
    }
    1;
}

sub loadkeys_files {
    my ($err) = @_;
    my $archkbd = arch() =~ /^sparc/ ? "sun" : arch() =~ /i.86/ ? "i386" : arch() =~ /ppc/ ? "mac" : arch();
    my $p = "/usr/lib/kbd/keymaps/$archkbd";
    my $post = ".kmap.gz";
    my %trans = ("cz-latin2" => "cz-lat2");
    my %find_file;
    foreach my $dir (all($p)) {