From 7ec8c454bd61d4749abb64d0cccb061a3c4b01e7 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Fri, 30 Oct 2020 11:21:57 +0100 Subject: [PATCH 01/53] [keyboard] Ukranian needs a switcher, too --- CHANGES | 2 +- src/modules/keyboard/non-ascii-layouts | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index 73c99cf9b..37dd0612f 100644 --- a/CHANGES +++ b/CHANGES @@ -25,7 +25,7 @@ This release contains contributions from (alphabetically by first name): ## Modules ## - The *keyboard* and *keyboardq* modules now share backend code and handle non-ASCII layouts better (for setting passwords - and usernames). + and usernames). (thanks Artem) # 3.2.32.1 (2020-10-17) # diff --git a/src/modules/keyboard/non-ascii-layouts b/src/modules/keyboard/non-ascii-layouts index 83935c190..9bdfa34be 100644 --- a/src/modules/keyboard/non-ascii-layouts +++ b/src/modules/keyboard/non-ascii-layouts @@ -2,3 +2,4 @@ #layout additional-layout additional-variant vconsole-keymap ru us - ruwin_alt_sh-UTF-8 +ua us - ua-utf From 5a378090c20aac3140f1e23ed81241ca7a8ebe9d Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Fri, 30 Oct 2020 12:16:14 +0100 Subject: [PATCH 02/53] [keyboard] Do not munge keyboard model name The translation happens whenever this code is run, which may not match the language the user subsequently selects. It also causes general problems with the translation, since we end up with a possibly-partly-translated name. --- src/modules/keyboard/keyboardwidget/keyboardglobal.cpp | 6 ------ 1 file changed, 6 deletions(-) diff --git a/src/modules/keyboard/keyboardwidget/keyboardglobal.cpp b/src/modules/keyboard/keyboardwidget/keyboardglobal.cpp index 8099cb231..d01c8b591 100644 --- a/src/modules/keyboard/keyboardwidget/keyboardglobal.cpp +++ b/src/modules/keyboard/keyboardwidget/keyboardglobal.cpp @@ -84,12 +84,6 @@ parseKeyboardModels( const char* filepath ) { QString modelDesc = rx.cap( 2 ); QString model = rx.cap( 1 ); - - if ( model == "pc105" ) - { - modelDesc += " - " + QObject::tr( "Default Keyboard Model" ); - } - models.insert( modelDesc, model ); } } From 2e9a44269c89b3d8c10d8481b0c9d4f7f10c4852 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Fri, 30 Oct 2020 12:35:21 +0100 Subject: [PATCH 03/53] [keyboard] Extracted strings from keyboard list --- src/modules/keyboard/KeyboardData_p.cxxtr | 812 ++++++++++++++++++++++ src/modules/keyboard/layout-extractor.py | 94 +++ 2 files changed, 906 insertions(+) create mode 100644 src/modules/keyboard/KeyboardData_p.cxxtr create mode 100644 src/modules/keyboard/layout-extractor.py diff --git a/src/modules/keyboard/KeyboardData_p.cxxtr b/src/modules/keyboard/KeyboardData_p.cxxtr new file mode 100644 index 000000000..678bb9807 --- /dev/null +++ b/src/modules/keyboard/KeyboardData_p.cxxtr @@ -0,0 +1,812 @@ +/* GENERATED FILE DO NOT EDIT +* +* === This file is part of Calamares - === +* +* SPDX-FileCopyrightText: no +* SPDX-License-Identifier: CC0-1.0 +* +* This file is derived from base.lst in the Xorg distribution +* +*/ + +/** THIS FILE EXISTS ONLY FOR TRANSLATIONS PURPOSES **/ + +// *INDENT-OFF* +// clang-format off +/* This returns a reference to local, which is a terrible idea. + * Good thing it's not meant to be compiled. + */ +static const QStringList& kb_models_table() +{ + return QStringList { + QObject::tr("A4Tech KB-21", "kb_models"), + QObject::tr("A4Tech KBS-8", "kb_models"), + QObject::tr("A4Tech Wireless Desktop RFKB-23", "kb_models"), + QObject::tr("Acer AirKey V", "kb_models"), + QObject::tr("Acer C300", "kb_models"), + QObject::tr("Acer Ferrari 4000", "kb_models"), + QObject::tr("Acer laptop", "kb_models"), + QObject::tr("Advance Scorpius KI", "kb_models"), + QObject::tr("Apple", "kb_models"), + QObject::tr("Apple Aluminium (ANSI)", "kb_models"), + QObject::tr("Apple Aluminium (ISO)", "kb_models"), + QObject::tr("Apple Aluminium (JIS)", "kb_models"), + QObject::tr("Apple laptop", "kb_models"), + QObject::tr("Asus laptop", "kb_models"), + QObject::tr("Azona RF2300 wireless Internet", "kb_models"), + QObject::tr("BTC 5090", "kb_models"), + QObject::tr("BTC 5113RF Multimedia", "kb_models"), + QObject::tr("BTC 5126T", "kb_models"), + QObject::tr("BTC 6301URF", "kb_models"), + QObject::tr("BTC 9000", "kb_models"), + QObject::tr("BTC 9000A", "kb_models"), + QObject::tr("BTC 9001AH", "kb_models"), + QObject::tr("BTC 9019U", "kb_models"), + QObject::tr("BTC 9116U Mini Wireless Internet and Gaming", "kb_models"), + QObject::tr("BenQ X-Touch", "kb_models"), + QObject::tr("BenQ X-Touch 730", "kb_models"), + QObject::tr("BenQ X-Touch 800", "kb_models"), + QObject::tr("Brother Internet", "kb_models"), + QObject::tr("Cherry B.UNLIMITED", "kb_models"), + QObject::tr("Cherry Blue Line CyBo@rd", "kb_models"), + QObject::tr("Cherry Blue Line CyBo@rd (alt.)", "kb_models"), + QObject::tr("Cherry CyBo@rd USB-Hub", "kb_models"), + QObject::tr("Cherry CyMotion Expert", "kb_models"), + QObject::tr("Cherry CyMotion Master Linux", "kb_models"), + QObject::tr("Cherry CyMotion Master XPress", "kb_models"), + QObject::tr("Chicony Internet", "kb_models"), + QObject::tr("Chicony KB-9885", "kb_models"), + QObject::tr("Chicony KU-0108", "kb_models"), + QObject::tr("Chicony KU-0420", "kb_models"), + QObject::tr("Chromebook", "kb_models"), + QObject::tr("Classmate PC", "kb_models"), + QObject::tr("Compaq Armada laptop", "kb_models"), + QObject::tr("Compaq Easy Access", "kb_models"), + QObject::tr("Compaq Internet (13 keys)", "kb_models"), + QObject::tr("Compaq Internet (18 keys)", "kb_models"), + QObject::tr("Compaq Internet (7 keys)", "kb_models"), + QObject::tr("Compaq Presario laptop", "kb_models"), + QObject::tr("Compaq iPaq", "kb_models"), + QObject::tr("Creative Desktop Wireless 7000", "kb_models"), + QObject::tr("DTK2000", "kb_models"), + QObject::tr("Dell", "kb_models"), + QObject::tr("Dell 101-key PC", "kb_models"), + QObject::tr("Dell Inspiron 6000/8000 laptop", "kb_models"), + QObject::tr("Dell Latitude laptop", "kb_models"), + QObject::tr("Dell Precision M laptop", "kb_models"), + QObject::tr("Dell Precision M65 laptop", "kb_models"), + QObject::tr("Dell SK-8125", "kb_models"), + QObject::tr("Dell SK-8135", "kb_models"), + QObject::tr("Dell USB Multimedia", "kb_models"), + QObject::tr("Dexxa Wireless Desktop", "kb_models"), + QObject::tr("Diamond 9801/9802", "kb_models"), + QObject::tr("Ennyah DKB-1008", "kb_models"), + QObject::tr("Everex STEPnote", "kb_models"), + QObject::tr("FL90", "kb_models"), + QObject::tr("Fujitsu-Siemens Amilo laptop", "kb_models"), + QObject::tr("Generic 101-key PC", "kb_models"), + QObject::tr("Generic 102-key PC", "kb_models"), + QObject::tr("Generic 104-key PC", "kb_models"), + QObject::tr("Generic 104-key PC with L-shaped Enter key", "kb_models"), + QObject::tr("Generic 105-key PC", "kb_models"), + QObject::tr("Generic 86-key PC", "kb_models"), + QObject::tr("Genius Comfy KB-12e", "kb_models"), + QObject::tr("Genius Comfy KB-16M/Multimedia KWD-910", "kb_models"), + QObject::tr("Genius Comfy KB-21e-Scroll", "kb_models"), + QObject::tr("Genius KB-19e NB", "kb_models"), + QObject::tr("Genius KKB-2050HS", "kb_models"), + QObject::tr("Gyration", "kb_models"), + QObject::tr("Happy Hacking", "kb_models"), + QObject::tr("Happy Hacking for Mac", "kb_models"), + QObject::tr("Hewlett-Packard Internet", "kb_models"), + QObject::tr("Hewlett-Packard Mini 110 laptop", "kb_models"), + QObject::tr("Hewlett-Packard NEC SK-2500 Multimedia", "kb_models"), + QObject::tr("Hewlett-Packard Omnibook 500", "kb_models"), + QObject::tr("Hewlett-Packard Omnibook 500 FA", "kb_models"), + QObject::tr("Hewlett-Packard Omnibook 6000/6100", "kb_models"), + QObject::tr("Hewlett-Packard Omnibook XE3 GC", "kb_models"), + QObject::tr("Hewlett-Packard Omnibook XE3 GF", "kb_models"), + QObject::tr("Hewlett-Packard Omnibook XT1000", "kb_models"), + QObject::tr("Hewlett-Packard Pavilion ZT1100", "kb_models"), + QObject::tr("Hewlett-Packard Pavilion dv5", "kb_models"), + QObject::tr("Hewlett-Packard nx9020", "kb_models"), + QObject::tr("Honeywell Euroboard", "kb_models"), + QObject::tr("IBM Rapid Access", "kb_models"), + QObject::tr("IBM Rapid Access II", "kb_models"), + QObject::tr("IBM Space Saver", "kb_models"), + QObject::tr("IBM ThinkPad 560Z/600/600E/A22E", "kb_models"), + QObject::tr("IBM ThinkPad R60/T60/R61/T61", "kb_models"), + QObject::tr("IBM ThinkPad Z60m/Z60t/Z61m/Z61t", "kb_models"), + QObject::tr("Keytronic FlexPro", "kb_models"), + QObject::tr("Kinesis", "kb_models"), + QObject::tr("Logitech", "kb_models"), + QObject::tr("Logitech Access", "kb_models"), + QObject::tr("Logitech Cordless Desktop", "kb_models"), + QObject::tr("Logitech Cordless Desktop (alt.)", "kb_models"), + QObject::tr("Logitech Cordless Desktop EX110", "kb_models"), + QObject::tr("Logitech Cordless Desktop LX-300", "kb_models"), + QObject::tr("Logitech Cordless Desktop Navigator", "kb_models"), + QObject::tr("Logitech Cordless Desktop Optical", "kb_models"), + QObject::tr("Logitech Cordless Desktop Pro (2nd alt.)", "kb_models"), + QObject::tr("Logitech Cordless Desktop iTouch", "kb_models"), + QObject::tr("Logitech Cordless Freedom/Desktop Navigator", "kb_models"), + QObject::tr("Logitech G15 extra keys via G15daemon", "kb_models"), + QObject::tr("Logitech Internet", "kb_models"), + QObject::tr("Logitech Internet 350", "kb_models"), + QObject::tr("Logitech Internet Navigator", "kb_models"), + QObject::tr("Logitech Ultra-X", "kb_models"), + QObject::tr("Logitech Ultra-X Cordless Media Desktop", "kb_models"), + QObject::tr("Logitech diNovo", "kb_models"), + QObject::tr("Logitech diNovo Edge", "kb_models"), + QObject::tr("Logitech iTouch", "kb_models"), + QObject::tr("Logitech iTouch Cordless Y-RB6", "kb_models"), + QObject::tr("Logitech iTouch Internet Navigator SE", "kb_models"), + QObject::tr("Logitech iTouch Internet Navigator SE USB", "kb_models"), + QObject::tr("MacBook/MacBook Pro", "kb_models"), + QObject::tr("MacBook/MacBook Pro (intl.)", "kb_models"), + QObject::tr("Macintosh", "kb_models"), + QObject::tr("Macintosh Old", "kb_models"), + QObject::tr("Memorex MX1998", "kb_models"), + QObject::tr("Memorex MX2500 EZ-Access", "kb_models"), + QObject::tr("Memorex MX2750", "kb_models"), + QObject::tr("Microsoft Comfort Curve 2000", "kb_models"), + QObject::tr("Microsoft Internet", "kb_models"), + QObject::tr("Microsoft Internet Pro (Swedish)", "kb_models"), + QObject::tr("Microsoft Natural", "kb_models"), + QObject::tr("Microsoft Natural Elite", "kb_models"), + QObject::tr("Microsoft Natural Ergonomic 4000", "kb_models"), + QObject::tr("Microsoft Natural Pro OEM", "kb_models"), + QObject::tr("Microsoft Natural Pro USB/Internet Pro", "kb_models"), + QObject::tr("Microsoft Natural Pro/Internet Pro", "kb_models"), + QObject::tr("Microsoft Natural Wireless Ergonomic 7000", "kb_models"), + QObject::tr("Microsoft Office Keyboard", "kb_models"), + QObject::tr("Microsoft Surface", "kb_models"), + QObject::tr("Microsoft Wireless Multimedia 1.0A", "kb_models"), + QObject::tr("NEC SK-1300", "kb_models"), + QObject::tr("NEC SK-2500", "kb_models"), + QObject::tr("NEC SK-6200", "kb_models"), + QObject::tr("NEC SK-7100", "kb_models"), + QObject::tr("Northgate OmniKey 101", "kb_models"), + QObject::tr("OLPC", "kb_models"), + QObject::tr("Ortek Multimedia/Internet MCK-800", "kb_models"), + QObject::tr("PC-98", "kb_models"), + QObject::tr("Propeller Voyager KTEZ-1000", "kb_models"), + QObject::tr("QTronix Scorpius 98N+", "kb_models"), + QObject::tr("SVEN Ergonomic 2500", "kb_models"), + QObject::tr("SVEN Slim 303", "kb_models"), + QObject::tr("Samsung SDM 4500P", "kb_models"), + QObject::tr("Samsung SDM 4510P", "kb_models"), + QObject::tr("Sanwa Supply SKB-KG3", "kb_models"), + QObject::tr("Silvercrest Multimedia Wireless", "kb_models"), + QObject::tr("SteelSeries Apex 300 (Apex RAW)", "kb_models"), + QObject::tr("Sun Type 6 (Japanese)", "kb_models"), + QObject::tr("Sun Type 6 USB (Japanese)", "kb_models"), + QObject::tr("Sun Type 6 USB (Unix)", "kb_models"), + QObject::tr("Sun Type 6/7 USB", "kb_models"), + QObject::tr("Sun Type 6/7 USB (European)", "kb_models"), + QObject::tr("Sun Type 7 USB", "kb_models"), + QObject::tr("Sun Type 7 USB (European)", "kb_models"), + QObject::tr("Sun Type 7 USB (Japanese)/Japanese 106-key", "kb_models"), + QObject::tr("Sun Type 7 USB (Unix)", "kb_models"), + QObject::tr("Super Power Multimedia", "kb_models"), + QObject::tr("Symplon PaceBook tablet", "kb_models"), + QObject::tr("Targa Visionary 811", "kb_models"), + QObject::tr("Toshiba Satellite S3000", "kb_models"), + QObject::tr("Truly Ergonomic 227", "kb_models"), + QObject::tr("Truly Ergonomic 229", "kb_models"), + QObject::tr("Truly Ergonomic Computer Keyboard Model 227 (Wide Alt keys)", "kb_models"), + QObject::tr("Truly Ergonomic Computer Keyboard Model 229 (Standard sized Alt keys, additional Super and Menu key)", "kb_models"), + QObject::tr("Trust Direct Access", "kb_models"), + QObject::tr("Trust Slimline", "kb_models"), + QObject::tr("Trust Wireless Classic", "kb_models"), + QObject::tr("TypeMatrix EZ-Reach 2020", "kb_models"), + QObject::tr("TypeMatrix EZ-Reach 2030 PS2", "kb_models"), + QObject::tr("TypeMatrix EZ-Reach 2030 USB", "kb_models"), + QObject::tr("TypeMatrix EZ-Reach 2030 USB (102/105:EU mode)", "kb_models"), + QObject::tr("TypeMatrix EZ-Reach 2030 USB (106:JP mode)", "kb_models"), + QObject::tr("Unitek KB-1925", "kb_models"), + QObject::tr("ViewSonic KU-306 Internet", "kb_models"), + QObject::tr("Winbook Model XP5", "kb_models"), + QObject::tr("Yahoo! Internet", "kb_models"), + QObject::tr("eMachines m6800 laptop", "kb_models"), + QString() + }; +} + +/* This returns a reference to local, which is a terrible idea. + * Good thing it's not meant to be compiled. + */ +static const QStringList& kb_layouts_table() +{ + return QStringList { + QObject::tr("Afghani", "kb_layouts"), + QObject::tr("Albanian", "kb_layouts"), + QObject::tr("Amharic", "kb_layouts"), + QObject::tr("Arabic", "kb_layouts"), + QObject::tr("Arabic (Morocco)", "kb_layouts"), + QObject::tr("Arabic (Syria)", "kb_layouts"), + QObject::tr("Armenian", "kb_layouts"), + QObject::tr("Azerbaijani", "kb_layouts"), + QObject::tr("Bambara", "kb_layouts"), + QObject::tr("Bangla", "kb_layouts"), + QObject::tr("Belarusian", "kb_layouts"), + QObject::tr("Belgian", "kb_layouts"), + QObject::tr("Bosnian", "kb_layouts"), + QObject::tr("Braille", "kb_layouts"), + QObject::tr("Bulgarian", "kb_layouts"), + QObject::tr("Burmese", "kb_layouts"), + QObject::tr("Chinese", "kb_layouts"), + QObject::tr("Croatian", "kb_layouts"), + QObject::tr("Czech", "kb_layouts"), + QObject::tr("Danish", "kb_layouts"), + QObject::tr("Dhivehi", "kb_layouts"), + QObject::tr("Dutch", "kb_layouts"), + QObject::tr("Dzongkha", "kb_layouts"), + QObject::tr("English (Australian)", "kb_layouts"), + QObject::tr("English (Cameroon)", "kb_layouts"), + QObject::tr("English (Ghana)", "kb_layouts"), + QObject::tr("English (Nigeria)", "kb_layouts"), + QObject::tr("English (South Africa)", "kb_layouts"), + QObject::tr("English (UK)", "kb_layouts"), + QObject::tr("English (US)", "kb_layouts"), + QObject::tr("Esperanto", "kb_layouts"), + QObject::tr("Estonian", "kb_layouts"), + QObject::tr("Faroese", "kb_layouts"), + QObject::tr("Filipino", "kb_layouts"), + QObject::tr("Finnish", "kb_layouts"), + QObject::tr("French", "kb_layouts"), + QObject::tr("French (Canada)", "kb_layouts"), + QObject::tr("French (Democratic Republic of the Congo)", "kb_layouts"), + QObject::tr("French (Guinea)", "kb_layouts"), + QObject::tr("French (Togo)", "kb_layouts"), + QObject::tr("Georgian", "kb_layouts"), + QObject::tr("German", "kb_layouts"), + QObject::tr("German (Austria)", "kb_layouts"), + QObject::tr("German (Switzerland)", "kb_layouts"), + QObject::tr("Greek", "kb_layouts"), + QObject::tr("Hebrew", "kb_layouts"), + QObject::tr("Hungarian", "kb_layouts"), + QObject::tr("Icelandic", "kb_layouts"), + QObject::tr("Indian", "kb_layouts"), + QObject::tr("Indonesian (Arab Melayu, phonetic)", "kb_layouts"), + QObject::tr("Indonesian (Javanese)", "kb_layouts"), + QObject::tr("Iraqi", "kb_layouts"), + QObject::tr("Irish", "kb_layouts"), + QObject::tr("Italian", "kb_layouts"), + QObject::tr("Japanese", "kb_layouts"), + QObject::tr("Japanese (PC-98)", "kb_layouts"), + QObject::tr("Kabylian (azerty layout, no dead keys)", "kb_layouts"), + QObject::tr("Kazakh", "kb_layouts"), + QObject::tr("Khmer (Cambodia)", "kb_layouts"), + QObject::tr("Korean", "kb_layouts"), + QObject::tr("Kyrgyz", "kb_layouts"), + QObject::tr("Lao", "kb_layouts"), + QObject::tr("Latvian", "kb_layouts"), + QObject::tr("Lithuanian", "kb_layouts"), + QObject::tr("Macedonian", "kb_layouts"), + QObject::tr("Malay (Jawi, Arabic Keyboard)", "kb_layouts"), + QObject::tr("Maltese", "kb_layouts"), + QObject::tr("Maori", "kb_layouts"), + QObject::tr("Moldavian", "kb_layouts"), + QObject::tr("Mongolian", "kb_layouts"), + QObject::tr("Montenegrin", "kb_layouts"), + QObject::tr("Nepali", "kb_layouts"), + QObject::tr("Norwegian", "kb_layouts"), + QObject::tr("Persian", "kb_layouts"), + QObject::tr("Polish", "kb_layouts"), + QObject::tr("Portuguese", "kb_layouts"), + QObject::tr("Portuguese (Brazil)", "kb_layouts"), + QObject::tr("Romanian", "kb_layouts"), + QObject::tr("Russian", "kb_layouts"), + QObject::tr("Serbian", "kb_layouts"), + QObject::tr("Sinhala (phonetic)", "kb_layouts"), + QObject::tr("Slovak", "kb_layouts"), + QObject::tr("Slovenian", "kb_layouts"), + QObject::tr("Spanish", "kb_layouts"), + QObject::tr("Spanish (Latin American)", "kb_layouts"), + QObject::tr("Swahili (Kenya)", "kb_layouts"), + QObject::tr("Swahili (Tanzania)", "kb_layouts"), + QObject::tr("Swedish", "kb_layouts"), + QObject::tr("Taiwanese", "kb_layouts"), + QObject::tr("Tajik", "kb_layouts"), + QObject::tr("Thai", "kb_layouts"), + QObject::tr("Tswana", "kb_layouts"), + QObject::tr("Turkish", "kb_layouts"), + QObject::tr("Turkmen", "kb_layouts"), + QObject::tr("Ukrainian", "kb_layouts"), + QObject::tr("Urdu (Pakistan)", "kb_layouts"), + QObject::tr("Uzbek", "kb_layouts"), + QObject::tr("Vietnamese", "kb_layouts"), + QObject::tr("Wolof", "kb_layouts"), + QString() + }; +} + +/* This returns a reference to local, which is a terrible idea. + * Good thing it's not meant to be compiled. + */ +static const QStringList& kb_variants_table() +{ + return QStringList { + QObject::tr("Akan", "kb_variants"), + QObject::tr("Albanian (Plisi)", "kb_variants"), + QObject::tr("Albanian (Veqilharxhi)", "kb_variants"), + QObject::tr("Arabic (AZERTY)", "kb_variants"), + QObject::tr("Arabic (AZERTY, Eastern Arabic numerals)", "kb_variants"), + QObject::tr("Arabic (Algeria)", "kb_variants"), + QObject::tr("Arabic (Buckwalter)", "kb_variants"), + QObject::tr("Arabic (Eastern Arabic numerals)", "kb_variants"), + QObject::tr("Arabic (Macintosh)", "kb_variants"), + QObject::tr("Arabic (OLPC)", "kb_variants"), + QObject::tr("Arabic (Pakistan)", "kb_variants"), + QObject::tr("Arabic (QWERTY)", "kb_variants"), + QObject::tr("Arabic (QWERTY, Eastern Arabic numerals)", "kb_variants"), + QObject::tr("Armenian (alt. eastern)", "kb_variants"), + QObject::tr("Armenian (alt. phonetic)", "kb_variants"), + QObject::tr("Armenian (eastern)", "kb_variants"), + QObject::tr("Armenian (phonetic)", "kb_variants"), + QObject::tr("Armenian (western)", "kb_variants"), + QObject::tr("Asturian (Spain, with bottom-dot H and L)", "kb_variants"), + QObject::tr("Avatime", "kb_variants"), + QObject::tr("Azerbaijani (Cyrillic)", "kb_variants"), + QObject::tr("Bangla (India)", "kb_variants"), + QObject::tr("Bangla (India, Baishakhi Inscript)", "kb_variants"), + QObject::tr("Bangla (India, Baishakhi)", "kb_variants"), + QObject::tr("Bangla (India, Bornona)", "kb_variants"), + QObject::tr("Bangla (India, Gitanjali)", "kb_variants"), + QObject::tr("Bangla (India, Probhat)", "kb_variants"), + QObject::tr("Bangla (Probhat)", "kb_variants"), + QObject::tr("Bashkirian", "kb_variants"), + QObject::tr("Belarusian (Latin)", "kb_variants"), + QObject::tr("Belarusian (intl.)", "kb_variants"), + QObject::tr("Belarusian (legacy)", "kb_variants"), + QObject::tr("Belgian (ISO, alt.)", "kb_variants"), + QObject::tr("Belgian (Latin-9 only, alt.)", "kb_variants"), + QObject::tr("Belgian (Sun dead keys)", "kb_variants"), + QObject::tr("Belgian (Sun dead keys, alt.)", "kb_variants"), + QObject::tr("Belgian (Wang 724 AZERTY)", "kb_variants"), + QObject::tr("Belgian (alt.)", "kb_variants"), + QObject::tr("Belgian (no dead keys)", "kb_variants"), + QObject::tr("Berber (Morocco, Tifinagh alt.)", "kb_variants"), + QObject::tr("Berber (Morocco, Tifinagh extended phonetic)", "kb_variants"), + QObject::tr("Berber (Morocco, Tifinagh extended)", "kb_variants"), + QObject::tr("Berber (Morocco, Tifinagh phonetic)", "kb_variants"), + QObject::tr("Berber (Morocco, Tifinagh phonetic, alt.)", "kb_variants"), + QObject::tr("Berber (Morocco, Tifinagh)", "kb_variants"), + QObject::tr("Bosnian (US)", "kb_variants"), + QObject::tr("Bosnian (US, with Bosnian digraphs)", "kb_variants"), + QObject::tr("Bosnian (with Bosnian digraphs)", "kb_variants"), + QObject::tr("Bosnian (with guillemets)", "kb_variants"), + QObject::tr("Braille (left-handed inverted thumb)", "kb_variants"), + QObject::tr("Braille (left-handed)", "kb_variants"), + QObject::tr("Braille (right-handed inverted thumb)", "kb_variants"), + QObject::tr("Braille (right-handed)", "kb_variants"), + QObject::tr("Bulgarian (enhanced)", "kb_variants"), + QObject::tr("Bulgarian (new phonetic)", "kb_variants"), + QObject::tr("Bulgarian (traditional phonetic)", "kb_variants"), + QObject::tr("Burmese Zawgyi", "kb_variants"), + QObject::tr("Cameroon (AZERTY, intl.)", "kb_variants"), + QObject::tr("Cameroon (Dvorak, intl.)", "kb_variants"), + QObject::tr("Cameroon Multilingual (QWERTY, intl.)", "kb_variants"), + QObject::tr("Canadian (intl.)", "kb_variants"), + QObject::tr("Canadian (intl., 1st part)", "kb_variants"), + QObject::tr("Canadian (intl., 2nd part)", "kb_variants"), + QObject::tr("Catalan (Spain, with middle-dot L)", "kb_variants"), + QObject::tr("Cherokee", "kb_variants"), + QObject::tr("Chuvash", "kb_variants"), + QObject::tr("Chuvash (Latin)", "kb_variants"), + QObject::tr("CloGaelach", "kb_variants"), + QObject::tr("Crimean Tatar (Turkish Alt-Q)", "kb_variants"), + QObject::tr("Crimean Tatar (Turkish F)", "kb_variants"), + QObject::tr("Crimean Tatar (Turkish Q)", "kb_variants"), + QObject::tr("Croatian (US)", "kb_variants"), + QObject::tr("Croatian (US, with Croatian digraphs)", "kb_variants"), + QObject::tr("Croatian (with Croatian digraphs)", "kb_variants"), + QObject::tr("Croatian (with guillemets)", "kb_variants"), + QObject::tr("Czech (QWERTY)", "kb_variants"), + QObject::tr("Czech (QWERTY, Macintosh)", "kb_variants"), + QObject::tr("Czech (QWERTY, extended backslash)", "kb_variants"), + QObject::tr("Czech (UCW, only accented letters)", "kb_variants"), + QObject::tr("Czech (US, Dvorak, UCW support)", "kb_variants"), + QObject::tr("Czech (with <\|> key)", "kb_variants"), + QObject::tr("Danish (Dvorak)", "kb_variants"), + QObject::tr("Danish (Macintosh)", "kb_variants"), + QObject::tr("Danish (Macintosh, no dead keys)", "kb_variants"), + QObject::tr("Danish (Windows)", "kb_variants"), + QObject::tr("Danish (no dead keys)", "kb_variants"), + QObject::tr("Dutch (Macintosh)", "kb_variants"), + QObject::tr("Dutch (Sun dead keys)", "kb_variants"), + QObject::tr("Dutch (standard)", "kb_variants"), + QObject::tr("English (Canada)", "kb_variants"), + QObject::tr("English (Colemak)", "kb_variants"), + QObject::tr("English (Dvorak)", "kb_variants"), + QObject::tr("English (Dvorak, alt. intl.)", "kb_variants"), + QObject::tr("English (Dvorak, intl., with dead keys)", "kb_variants"), + QObject::tr("English (Dvorak, left-handed)", "kb_variants"), + QObject::tr("English (Dvorak, right-handed)", "kb_variants"), + QObject::tr("English (Ghana, GILLBT)", "kb_variants"), + QObject::tr("English (Ghana, multilingual)", "kb_variants"), + QObject::tr("English (India, with rupee)", "kb_variants"), + QObject::tr("English (Macintosh)", "kb_variants"), + QObject::tr("English (Mali, US, Macintosh)", "kb_variants"), + QObject::tr("English (Mali, US, intl.)", "kb_variants"), + QObject::tr("English (Norman)", "kb_variants"), + QObject::tr("English (UK, Colemak)", "kb_variants"), + QObject::tr("English (UK, Dvorak)", "kb_variants"), + QObject::tr("English (UK, Dvorak, with UK punctuation)", "kb_variants"), + QObject::tr("English (UK, Macintosh)", "kb_variants"), + QObject::tr("English (UK, Macintosh, intl.)", "kb_variants"), + QObject::tr("English (UK, extended, Windows)", "kb_variants"), + QObject::tr("English (UK, intl., with dead keys)", "kb_variants"), + QObject::tr("English (US, Symbolic)", "kb_variants"), + QObject::tr("English (US, alt. intl.)", "kb_variants"), + QObject::tr("English (US, euro on 5)", "kb_variants"), + QObject::tr("English (US, intl., with dead keys)", "kb_variants"), + QObject::tr("English (Workman)", "kb_variants"), + QObject::tr("English (Workman, intl., with dead keys)", "kb_variants"), + QObject::tr("English (classic Dvorak)", "kb_variants"), + QObject::tr("English (intl., with AltGr dead keys)", "kb_variants"), + QObject::tr("English (programmer Dvorak)", "kb_variants"), + QObject::tr("English (the divide/multiply toggle the layout)", "kb_variants"), + QObject::tr("Esperanto (Brazil, Nativo)", "kb_variants"), + QObject::tr("Esperanto (Portugal, Nativo)", "kb_variants"), + QObject::tr("Esperanto (legacy)", "kb_variants"), + QObject::tr("Estonian (Dvorak)", "kb_variants"), + QObject::tr("Estonian (US)", "kb_variants"), + QObject::tr("Estonian (no dead keys)", "kb_variants"), + QObject::tr("Ewe", "kb_variants"), + QObject::tr("Faroese (no dead keys)", "kb_variants"), + QObject::tr("Filipino (Capewell-Dvorak, Baybayin)", "kb_variants"), + QObject::tr("Filipino (Capewell-Dvorak, Latin)", "kb_variants"), + QObject::tr("Filipino (Capewell-QWERF 2006, Baybayin)", "kb_variants"), + QObject::tr("Filipino (Capewell-QWERF 2006, Latin)", "kb_variants"), + QObject::tr("Filipino (Colemak, Baybayin)", "kb_variants"), + QObject::tr("Filipino (Colemak, Latin)", "kb_variants"), + QObject::tr("Filipino (Dvorak, Baybayin)", "kb_variants"), + QObject::tr("Filipino (Dvorak, Latin)", "kb_variants"), + QObject::tr("Filipino (QWERTY, Baybayin)", "kb_variants"), + QObject::tr("Finnish (Macintosh)", "kb_variants"), + QObject::tr("Finnish (Windows)", "kb_variants"), + QObject::tr("Finnish (classic)", "kb_variants"), + QObject::tr("Finnish (classic, no dead keys)", "kb_variants"), + QObject::tr("French (AZERTY)", "kb_variants"), + QObject::tr("French (AZERTY, AFNOR)", "kb_variants"), + QObject::tr("French (BEPO)", "kb_variants"), + QObject::tr("French (BEPO, AFNOR)", "kb_variants"), + QObject::tr("French (BEPO, Latin-9 only)", "kb_variants"), + QObject::tr("French (Breton)", "kb_variants"), + QObject::tr("French (Cameroon)", "kb_variants"), + QObject::tr("French (Canada, Dvorak)", "kb_variants"), + QObject::tr("French (Canada, legacy)", "kb_variants"), + QObject::tr("French (Dvorak)", "kb_variants"), + QObject::tr("French (Macintosh)", "kb_variants"), + QObject::tr("French (Mali, alt.)", "kb_variants"), + QObject::tr("French (Morocco)", "kb_variants"), + QObject::tr("French (Sun dead keys)", "kb_variants"), + QObject::tr("French (Switzerland)", "kb_variants"), + QObject::tr("French (Switzerland, Macintosh)", "kb_variants"), + QObject::tr("French (Switzerland, Sun dead keys)", "kb_variants"), + QObject::tr("French (Switzerland, no dead keys)", "kb_variants"), + QObject::tr("French (US)", "kb_variants"), + QObject::tr("French (alt.)", "kb_variants"), + QObject::tr("French (alt., Latin-9 only)", "kb_variants"), + QObject::tr("French (alt., Sun dead keys)", "kb_variants"), + QObject::tr("French (alt., no dead keys)", "kb_variants"), + QObject::tr("French (legacy, alt.)", "kb_variants"), + QObject::tr("French (legacy, alt., Sun dead keys)", "kb_variants"), + QObject::tr("French (legacy, alt., no dead keys)", "kb_variants"), + QObject::tr("French (no dead keys)", "kb_variants"), + QObject::tr("Friulian (Italy)", "kb_variants"), + QObject::tr("Fula", "kb_variants"), + QObject::tr("Ga", "kb_variants"), + QObject::tr("Georgian (France, AZERTY Tskapo)", "kb_variants"), + QObject::tr("Georgian (Italy)", "kb_variants"), + QObject::tr("Georgian (MESS)", "kb_variants"), + QObject::tr("Georgian (ergonomic)", "kb_variants"), + QObject::tr("German (Austria, Macintosh)", "kb_variants"), + QObject::tr("German (Austria, Sun dead keys)", "kb_variants"), + QObject::tr("German (Austria, no dead keys)", "kb_variants"), + QObject::tr("German (Dvorak)", "kb_variants"), + QObject::tr("German (E1)", "kb_variants"), + QObject::tr("German (E2)", "kb_variants"), + QObject::tr("German (Macintosh)", "kb_variants"), + QObject::tr("German (Macintosh, no dead keys)", "kb_variants"), + QObject::tr("German (Neo 2)", "kb_variants"), + QObject::tr("German (QWERTY)", "kb_variants"), + QObject::tr("German (Sun dead keys)", "kb_variants"), + QObject::tr("German (Switzerland, Macintosh)", "kb_variants"), + QObject::tr("German (Switzerland, Sun dead keys)", "kb_variants"), + QObject::tr("German (Switzerland, legacy)", "kb_variants"), + QObject::tr("German (Switzerland, no dead keys)", "kb_variants"), + QObject::tr("German (T3)", "kb_variants"), + QObject::tr("German (US)", "kb_variants"), + QObject::tr("German (dead acute)", "kb_variants"), + QObject::tr("German (dead grave acute)", "kb_variants"), + QObject::tr("German (dead tilde)", "kb_variants"), + QObject::tr("German (no dead keys)", "kb_variants"), + QObject::tr("Greek (extended)", "kb_variants"), + QObject::tr("Greek (no dead keys)", "kb_variants"), + QObject::tr("Greek (polytonic)", "kb_variants"), + QObject::tr("Greek (simple)", "kb_variants"), + QObject::tr("Gujarati", "kb_variants"), + QObject::tr("Hanyu Pinyin (with AltGr dead keys)", "kb_variants"), + QObject::tr("Hausa (Ghana)", "kb_variants"), + QObject::tr("Hausa (Nigeria)", "kb_variants"), + QObject::tr("Hawaiian", "kb_variants"), + QObject::tr("Hebrew (Biblical, Tiro)", "kb_variants"), + QObject::tr("Hebrew (lyx)", "kb_variants"), + QObject::tr("Hebrew (phonetic)", "kb_variants"), + QObject::tr("Hindi (Bolnagri)", "kb_variants"), + QObject::tr("Hindi (KaGaPa, phonetic)", "kb_variants"), + QObject::tr("Hindi (Wx)", "kb_variants"), + QObject::tr("Hungarian (QWERTY)", "kb_variants"), + QObject::tr("Hungarian (QWERTY, 101-key, comma, dead keys)", "kb_variants"), + QObject::tr("Hungarian (QWERTY, 101-key, comma, no dead keys)", "kb_variants"), + QObject::tr("Hungarian (QWERTY, 101-key, dot, dead keys)", "kb_variants"), + QObject::tr("Hungarian (QWERTY, 101-key, dot, no dead keys)", "kb_variants"), + QObject::tr("Hungarian (QWERTY, 102-key, comma, dead keys)", "kb_variants"), + QObject::tr("Hungarian (QWERTY, 102-key, comma, no dead keys)", "kb_variants"), + QObject::tr("Hungarian (QWERTY, 102-key, dot, dead keys)", "kb_variants"), + QObject::tr("Hungarian (QWERTY, 102-key, dot, no dead keys)", "kb_variants"), + QObject::tr("Hungarian (QWERTZ, 101-key, comma, dead keys)", "kb_variants"), + QObject::tr("Hungarian (QWERTZ, 101-key, comma, no dead keys)", "kb_variants"), + QObject::tr("Hungarian (QWERTZ, 101-key, dot, dead keys)", "kb_variants"), + QObject::tr("Hungarian (QWERTZ, 101-key, dot, no dead keys)", "kb_variants"), + QObject::tr("Hungarian (QWERTZ, 102-key, comma, dead keys)", "kb_variants"), + QObject::tr("Hungarian (QWERTZ, 102-key, comma, no dead keys)", "kb_variants"), + QObject::tr("Hungarian (QWERTZ, 102-key, dot, dead keys)", "kb_variants"), + QObject::tr("Hungarian (QWERTZ, 102-key, dot, no dead keys)", "kb_variants"), + QObject::tr("Hungarian (no dead keys)", "kb_variants"), + QObject::tr("Hungarian (standard)", "kb_variants"), + QObject::tr("Icelandic (Dvorak)", "kb_variants"), + QObject::tr("Icelandic (Macintosh)", "kb_variants"), + QObject::tr("Icelandic (Macintosh, legacy)", "kb_variants"), + QObject::tr("Icelandic (Sun dead keys)", "kb_variants"), + QObject::tr("Icelandic (no dead keys)", "kb_variants"), + QObject::tr("Igbo", "kb_variants"), + QObject::tr("Indic (phonetic, IPA)", "kb_variants"), + QObject::tr("Indonesian (Arab Melayu, extended phonetic)", "kb_variants"), + QObject::tr("Inuktitut", "kb_variants"), + QObject::tr("Irish (UnicodeExpert)", "kb_variants"), + QObject::tr("Italian (IBM 142)", "kb_variants"), + QObject::tr("Italian (Macintosh)", "kb_variants"), + QObject::tr("Italian (US)", "kb_variants"), + QObject::tr("Italian (Windows)", "kb_variants"), + QObject::tr("Italian (intl., with dead keys)", "kb_variants"), + QObject::tr("Italian (no dead keys)", "kb_variants"), + QObject::tr("Japanese (Dvorak)", "kb_variants"), + QObject::tr("Japanese (Kana 86)", "kb_variants"), + QObject::tr("Japanese (Kana)", "kb_variants"), + QObject::tr("Japanese (Macintosh)", "kb_variants"), + QObject::tr("Japanese (OADG 109A)", "kb_variants"), + QObject::tr("Kabylian (Algeria, Tifinagh)", "kb_variants"), + QObject::tr("Kabylian (azerty layout, with dead keys)", "kb_variants"), + QObject::tr("Kabylian (qwerty-gb layout, with dead keys)", "kb_variants"), + QObject::tr("Kabylian (qwerty-us layout, with dead keys)", "kb_variants"), + QObject::tr("Kalmyk", "kb_variants"), + QObject::tr("Kannada", "kb_variants"), + QObject::tr("Kannada (KaGaPa, phonetic)", "kb_variants"), + QObject::tr("Kashubian", "kb_variants"), + QObject::tr("Kazakh (Latin)", "kb_variants"), + QObject::tr("Kazakh (extended)", "kb_variants"), + QObject::tr("Kazakh (with Russian)", "kb_variants"), + QObject::tr("Kikuyu", "kb_variants"), + QObject::tr("Komi", "kb_variants"), + QObject::tr("Korean (101/104-key compatible)", "kb_variants"), + QObject::tr("Kurdish (Iran, Arabic-Latin)", "kb_variants"), + QObject::tr("Kurdish (Iran, F)", "kb_variants"), + QObject::tr("Kurdish (Iran, Latin Alt-Q)", "kb_variants"), + QObject::tr("Kurdish (Iran, Latin Q)", "kb_variants"), + QObject::tr("Kurdish (Iraq, Arabic-Latin)", "kb_variants"), + QObject::tr("Kurdish (Iraq, F)", "kb_variants"), + QObject::tr("Kurdish (Iraq, Latin Alt-Q)", "kb_variants"), + QObject::tr("Kurdish (Iraq, Latin Q)", "kb_variants"), + QObject::tr("Kurdish (Syria, F)", "kb_variants"), + QObject::tr("Kurdish (Syria, Latin Alt-Q)", "kb_variants"), + QObject::tr("Kurdish (Syria, Latin Q)", "kb_variants"), + QObject::tr("Kurdish (Turkey, F)", "kb_variants"), + QObject::tr("Kurdish (Turkey, Latin Alt-Q)", "kb_variants"), + QObject::tr("Kurdish (Turkey, Latin Q)", "kb_variants"), + QObject::tr("Kyrgyz (phonetic)", "kb_variants"), + QObject::tr("Lao (STEA)", "kb_variants"), + QObject::tr("Latvian (F)", "kb_variants"), + QObject::tr("Latvian (adapted)", "kb_variants"), + QObject::tr("Latvian (apostrophe)", "kb_variants"), + QObject::tr("Latvian (ergonomic, ŪGJRMV)", "kb_variants"), + QObject::tr("Latvian (modern)", "kb_variants"), + QObject::tr("Latvian (tilde)", "kb_variants"), + QObject::tr("Lithuanian (IBM LST 1205-92)", "kb_variants"), + QObject::tr("Lithuanian (LEKP)", "kb_variants"), + QObject::tr("Lithuanian (LEKPa)", "kb_variants"), + QObject::tr("Lithuanian (US)", "kb_variants"), + QObject::tr("Lithuanian (standard)", "kb_variants"), + QObject::tr("Lower Sorbian", "kb_variants"), + QObject::tr("Lower Sorbian (QWERTZ)", "kb_variants"), + QObject::tr("Macedonian (no dead keys)", "kb_variants"), + QObject::tr("Malay (Jawi, phonetic)", "kb_variants"), + QObject::tr("Malayalam", "kb_variants"), + QObject::tr("Malayalam (Lalitha)", "kb_variants"), + QObject::tr("Malayalam (enhanced Inscript, with rupee)", "kb_variants"), + QObject::tr("Maltese (UK, with AltGr overrides)", "kb_variants"), + QObject::tr("Maltese (US layout with AltGr overrides)", "kb_variants"), + QObject::tr("Maltese (US)", "kb_variants"), + QObject::tr("Manipuri (Eeyek)", "kb_variants"), + QObject::tr("Marathi (KaGaPa, phonetic)", "kb_variants"), + QObject::tr("Marathi (enhanced Inscript)", "kb_variants"), + QObject::tr("Mari", "kb_variants"), + QObject::tr("Mmuock", "kb_variants"), + QObject::tr("Moldavian (Gagauz)", "kb_variants"), + QObject::tr("Mongolian (Bichig)", "kb_variants"), + QObject::tr("Mongolian (Galik)", "kb_variants"), + QObject::tr("Mongolian (Manchu Galik)", "kb_variants"), + QObject::tr("Mongolian (Manchu)", "kb_variants"), + QObject::tr("Mongolian (Todo Galik)", "kb_variants"), + QObject::tr("Mongolian (Todo)", "kb_variants"), + QObject::tr("Mongolian (Xibe)", "kb_variants"), + QObject::tr("Montenegrin (Cyrillic)", "kb_variants"), + QObject::tr("Montenegrin (Cyrillic, ZE and ZHE swapped)", "kb_variants"), + QObject::tr("Montenegrin (Cyrillic, with guillemets)", "kb_variants"), + QObject::tr("Montenegrin (Latin, QWERTY)", "kb_variants"), + QObject::tr("Montenegrin (Latin, Unicode)", "kb_variants"), + QObject::tr("Montenegrin (Latin, Unicode, QWERTY)", "kb_variants"), + QObject::tr("Montenegrin (Latin, with guillemets)", "kb_variants"), + QObject::tr("Northern Saami (Finland)", "kb_variants"), + QObject::tr("Northern Saami (Norway)", "kb_variants"), + QObject::tr("Northern Saami (Norway, no dead keys)", "kb_variants"), + QObject::tr("Northern Saami (Sweden)", "kb_variants"), + QObject::tr("Norwegian (Colemak)", "kb_variants"), + QObject::tr("Norwegian (Dvorak)", "kb_variants"), + QObject::tr("Norwegian (Macintosh)", "kb_variants"), + QObject::tr("Norwegian (Macintosh, no dead keys)", "kb_variants"), + QObject::tr("Norwegian (Windows)", "kb_variants"), + QObject::tr("Norwegian (no dead keys)", "kb_variants"), + QObject::tr("Occitan", "kb_variants"), + QObject::tr("Ogham", "kb_variants"), + QObject::tr("Ogham (IS434)", "kb_variants"), + QObject::tr("Ol Chiki", "kb_variants"), + QObject::tr("Oriya", "kb_variants"), + QObject::tr("Ossetian (Georgia)", "kb_variants"), + QObject::tr("Ossetian (Windows)", "kb_variants"), + QObject::tr("Ossetian (legacy)", "kb_variants"), + QObject::tr("Pannonian Rusyn", "kb_variants"), + QObject::tr("Pashto", "kb_variants"), + QObject::tr("Pashto (Afghanistan, OLPC)", "kb_variants"), + QObject::tr("Persian (Afghanistan, Dari OLPC)", "kb_variants"), + QObject::tr("Persian (with Persian keypad)", "kb_variants"), + QObject::tr("Polish (British keyboard)", "kb_variants"), + QObject::tr("Polish (Dvorak)", "kb_variants"), + QObject::tr("Polish (Dvorak, with Polish quotes on key 1)", "kb_variants"), + QObject::tr("Polish (Dvorak, with Polish quotes on quotemark key)", "kb_variants"), + QObject::tr("Polish (QWERTZ)", "kb_variants"), + QObject::tr("Polish (legacy)", "kb_variants"), + QObject::tr("Polish (programmer Dvorak)", "kb_variants"), + QObject::tr("Portuguese (Brazil, Dvorak)", "kb_variants"), + QObject::tr("Portuguese (Brazil, IBM/Lenovo ThinkPad)", "kb_variants"), + QObject::tr("Portuguese (Brazil, Nativo for US keyboards)", "kb_variants"), + QObject::tr("Portuguese (Brazil, Nativo)", "kb_variants"), + QObject::tr("Portuguese (Brazil, no dead keys)", "kb_variants"), + QObject::tr("Portuguese (Macintosh)", "kb_variants"), + QObject::tr("Portuguese (Macintosh, Sun dead keys)", "kb_variants"), + QObject::tr("Portuguese (Macintosh, no dead keys)", "kb_variants"), + QObject::tr("Portuguese (Nativo for US keyboards)", "kb_variants"), + QObject::tr("Portuguese (Nativo)", "kb_variants"), + QObject::tr("Portuguese (Sun dead keys)", "kb_variants"), + QObject::tr("Portuguese (no dead keys)", "kb_variants"), + QObject::tr("Punjabi (Gurmukhi Jhelum)", "kb_variants"), + QObject::tr("Punjabi (Gurmukhi)", "kb_variants"), + QObject::tr("Romanian (Germany)", "kb_variants"), + QObject::tr("Romanian (Germany, no dead keys)", "kb_variants"), + QObject::tr("Romanian (Windows)", "kb_variants"), + QObject::tr("Romanian (cedilla)", "kb_variants"), + QObject::tr("Romanian (standard cedilla)", "kb_variants"), + QObject::tr("Romanian (standard)", "kb_variants"), + QObject::tr("Russian (Belarus)", "kb_variants"), + QObject::tr("Russian (Czech, phonetic)", "kb_variants"), + QObject::tr("Russian (DOS)", "kb_variants"), + QObject::tr("Russian (Georgia)", "kb_variants"), + QObject::tr("Russian (Germany, phonetic)", "kb_variants"), + QObject::tr("Russian (Kazakhstan, with Kazakh)", "kb_variants"), + QObject::tr("Russian (Macintosh)", "kb_variants"), + QObject::tr("Russian (Poland, phonetic Dvorak)", "kb_variants"), + QObject::tr("Russian (Sweden, phonetic)", "kb_variants"), + QObject::tr("Russian (Sweden, phonetic, no dead keys)", "kb_variants"), + QObject::tr("Russian (US, phonetic)", "kb_variants"), + QObject::tr("Russian (Ukraine, standard RSTU)", "kb_variants"), + QObject::tr("Russian (legacy)", "kb_variants"), + QObject::tr("Russian (phonetic)", "kb_variants"), + QObject::tr("Russian (phonetic, AZERTY)", "kb_variants"), + QObject::tr("Russian (phonetic, Dvorak)", "kb_variants"), + QObject::tr("Russian (phonetic, French)", "kb_variants"), + QObject::tr("Russian (phonetic, Windows)", "kb_variants"), + QObject::tr("Russian (phonetic, YAZHERTY)", "kb_variants"), + QObject::tr("Russian (typewriter)", "kb_variants"), + QObject::tr("Russian (typewriter, legacy)", "kb_variants"), + QObject::tr("Saisiyat (Taiwan)", "kb_variants"), + QObject::tr("Samogitian", "kb_variants"), + QObject::tr("Sanskrit (KaGaPa, phonetic)", "kb_variants"), + QObject::tr("Serbian (Cyrillic, ZE and ZHE swapped)", "kb_variants"), + QObject::tr("Serbian (Cyrillic, with guillemets)", "kb_variants"), + QObject::tr("Serbian (Latin)", "kb_variants"), + QObject::tr("Serbian (Latin, QWERTY)", "kb_variants"), + QObject::tr("Serbian (Latin, Unicode)", "kb_variants"), + QObject::tr("Serbian (Latin, Unicode, QWERTY)", "kb_variants"), + QObject::tr("Serbian (Latin, with guillemets)", "kb_variants"), + QObject::tr("Serbian (Russia)", "kb_variants"), + QObject::tr("Serbo-Croatian (US)", "kb_variants"), + QObject::tr("Sicilian", "kb_variants"), + QObject::tr("Silesian", "kb_variants"), + QObject::tr("Sindhi", "kb_variants"), + QObject::tr("Sinhala (US)", "kb_variants"), + QObject::tr("Slovak (QWERTY)", "kb_variants"), + QObject::tr("Slovak (QWERTY, extended backslash)", "kb_variants"), + QObject::tr("Slovak (extended backslash)", "kb_variants"), + QObject::tr("Slovenian (US)", "kb_variants"), + QObject::tr("Slovenian (with guillemets)", "kb_variants"), + QObject::tr("Spanish (Dvorak)", "kb_variants"), + QObject::tr("Spanish (Latin American, Colemak for gaming)", "kb_variants"), + QObject::tr("Spanish (Latin American, Colemak)", "kb_variants"), + QObject::tr("Spanish (Latin American, Dvorak)", "kb_variants"), + QObject::tr("Spanish (Latin American, Sun dead keys)", "kb_variants"), + QObject::tr("Spanish (Latin American, dead tilde)", "kb_variants"), + QObject::tr("Spanish (Latin American, no dead keys)", "kb_variants"), + QObject::tr("Spanish (Macintosh)", "kb_variants"), + QObject::tr("Spanish (Sun dead keys)", "kb_variants"), + QObject::tr("Spanish (Windows)", "kb_variants"), + QObject::tr("Spanish (dead tilde)", "kb_variants"), + QObject::tr("Spanish (no dead keys)", "kb_variants"), + QObject::tr("Swedish (Dvorak)", "kb_variants"), + QObject::tr("Swedish (Dvorak, intl.)", "kb_variants"), + QObject::tr("Swedish (Macintosh)", "kb_variants"), + QObject::tr("Swedish (Svdvorak)", "kb_variants"), + QObject::tr("Swedish (US)", "kb_variants"), + QObject::tr("Swedish (no dead keys)", "kb_variants"), + QObject::tr("Swedish Sign Language", "kb_variants"), + QObject::tr("Syriac", "kb_variants"), + QObject::tr("Syriac (phonetic)", "kb_variants"), + QObject::tr("Taiwanese (indigenous)", "kb_variants"), + QObject::tr("Tajik (legacy)", "kb_variants"), + QObject::tr("Tamil (Inscript)", "kb_variants"), + QObject::tr("Tamil (Sri Lanka, TamilNet '99)", "kb_variants"), + QObject::tr("Tamil (Sri Lanka, TamilNet '99, TAB encoding)", "kb_variants"), + QObject::tr("Tamil (TamilNet '99 with Tamil numerals)", "kb_variants"), + QObject::tr("Tamil (TamilNet '99)", "kb_variants"), + QObject::tr("Tamil (TamilNet '99, TAB encoding)", "kb_variants"), + QObject::tr("Tamil (TamilNet '99, TSCII encoding)", "kb_variants"), + QObject::tr("Tatar", "kb_variants"), + QObject::tr("Telugu", "kb_variants"), + QObject::tr("Telugu (KaGaPa, phonetic)", "kb_variants"), + QObject::tr("Telugu (Sarala)", "kb_variants"), + QObject::tr("Thai (Pattachote)", "kb_variants"), + QObject::tr("Thai (TIS-820.2538)", "kb_variants"), + QObject::tr("Tibetan", "kb_variants"), + QObject::tr("Tibetan (with ASCII numerals)", "kb_variants"), + QObject::tr("Turkish (Alt-Q)", "kb_variants"), + QObject::tr("Turkish (F)", "kb_variants"), + QObject::tr("Turkish (Germany)", "kb_variants"), + QObject::tr("Turkish (Sun dead keys)", "kb_variants"), + QObject::tr("Turkish (intl., with dead keys)", "kb_variants"), + QObject::tr("Turkmen (Alt-Q)", "kb_variants"), + QObject::tr("Udmurt", "kb_variants"), + QObject::tr("Ukrainian (Windows)", "kb_variants"), + QObject::tr("Ukrainian (homophonic)", "kb_variants"), + QObject::tr("Ukrainian (legacy)", "kb_variants"), + QObject::tr("Ukrainian (phonetic)", "kb_variants"), + QObject::tr("Ukrainian (standard RSTU)", "kb_variants"), + QObject::tr("Ukrainian (typewriter)", "kb_variants"), + QObject::tr("Urdu (Pakistan, CRULP)", "kb_variants"), + QObject::tr("Urdu (Pakistan, NLA)", "kb_variants"), + QObject::tr("Urdu (Windows)", "kb_variants"), + QObject::tr("Urdu (alt. phonetic)", "kb_variants"), + QObject::tr("Urdu (phonetic)", "kb_variants"), + QObject::tr("Uyghur", "kb_variants"), + QObject::tr("Uzbek (Afghanistan)", "kb_variants"), + QObject::tr("Uzbek (Afghanistan, OLPC)", "kb_variants"), + QObject::tr("Uzbek (Latin)", "kb_variants"), + QObject::tr("Vietnamese (French)", "kb_variants"), + QObject::tr("Vietnamese (US)", "kb_variants"), + QObject::tr("Yakut", "kb_variants"), + QObject::tr("Yoruba", "kb_variants"), + QString() + }; +} + diff --git a/src/modules/keyboard/layout-extractor.py b/src/modules/keyboard/layout-extractor.py new file mode 100644 index 000000000..74b42ea07 --- /dev/null +++ b/src/modules/keyboard/layout-extractor.py @@ -0,0 +1,94 @@ +#! /usr/bin/env python3 +# +# === This file is part of Calamares - === +# +# SPDX-FileCopyrightText: 2020 Adriaan de Groot +# SPDX-License-Identifier: BSD-2-Clause +# +""" +Python3 script to scrape x keyboard layout file and produce translations. + +To use this script, you must have a base.lst in a standard location, +/usr/local/share/X11/xkb/rules/base.lst (this is usual on FreeBSD). + +Prints out a few tables of keyboard model, layout, variant names for +use in translations. +""" + +def scrape_file(file, modelsset, layoutsset, variantsset): + import re + # These RE's match what is in keyboardglobal.cpp + model_re = re.compile("^\\s+(\\S+)\\s+(\\w.*)\n$") + layout_re = re.compile("^\\s+(\\S+)\\s+(\\w.*)\n$") + variant_re = re.compile("^\\s+(\\S+)\\s+(\\S+): (\\w.*)\n$") + + MODEL, LAYOUT, VARIANT = range(3) + state = None + for line in file.readlines(): + # Handle changes in section + if line.startswith("! model"): + state = MODEL + continue + elif line.startswith("! layout"): + state = LAYOUT + continue + elif line.startswith("! variant"): + state = VARIANT + continue + elif not line.strip(): + state = None + # Unchanged from last blank + if state is None: + continue + + if state == MODEL: + m = model_re.match(line) + name = m.groups()[1] + modelsset.add(name) + if state == LAYOUT: + l = layout_re.match(line) + name = l.groups()[1] + layoutsset.add(name) + if state == VARIANT: + v = variant_re.match(line) + name = v.groups()[2] + variantsset.add(name) + + +def write_set(file, label, set): + file.write("/* This returns a reference to local, which is a terrible idea.\n * Good thing it's not meant to be compiled.\n */\n") + # Note {{ is an escaped { for Python string formatting + file.write("static const QStringList& {!s}_table()\n{{\n\treturn QStringList {{\n".format(label)) + for x in sorted(set): + file.write("""\t\tQObject::tr("{!s}", "{!s}"),\n""".format(x, label)) + file.write("\t\tQString()\n\t};\n}\n\n") + +cpp_header_comment = """/* GENERATED FILE DO NOT EDIT +* +* === This file is part of Calamares - === +* +* SPDX-FileCopyrightText: no +* SPDX-License-Identifier: CC0-1.0 +* +* This file is derived from base.lst in the Xorg distribution +* +*/ + +/** THIS FILE EXISTS ONLY FOR TRANSLATIONS PURPOSES **/ + +// *INDENT-OFF* +// clang-format off +""" + +if __name__ == "__main__": + models=set() + layouts=set() + variants=set() + with open("/usr/local/share/X11/xkb/rules/base.lst", "r") as f: + scrape_file(f, models, layouts, variants) + with open("KeyboardData_p.cxxtr", "w") as f: + f.write(cpp_header_comment) + write_set(f, "kb_models", models) + write_set(f, "kb_layouts", layouts) + write_set(f, "kb_variants", variants) + From 063fb24f3a0333886b96644da1c4ce8cfd72ae88 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Fri, 30 Oct 2020 12:43:03 +0100 Subject: [PATCH 04/53] i18n: add translations source for keyboards --- ci/txpush.sh | 11 +- lang/kb_en.ts | 4609 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 4618 insertions(+), 2 deletions(-) create mode 100644 lang/kb_en.ts diff --git a/ci/txpush.sh b/ci/txpush.sh index 363a234e8..ac806a2fa 100755 --- a/ci/txpush.sh +++ b/ci/txpush.sh @@ -92,9 +92,16 @@ done # those are done separately. _srcdirs="src/calamares src/libcalamares src/libcalamaresui src/modules src/qml" $LUPDATE -no-obsolete $_srcdirs -ts lang/calamares_en.ts -# Updating the TZ only needs to happen when the TZ themselves are updated, -# very-very-rarely. +# Non-Transifex special-cases +# +# - timezone names can be translated, but that's 700+ strings I don't want +# to inflict on translators normally +# - keyboard layouts can be translated, but that's 767 strings +# +# For both of these, the language / translation only needs to be updated +# when the source data is updated, which is very very rarely. # $LUPDATE -no-obsolete -extensions cxxtr src/libcalamares/locale -ts lang/tz_en.ts +# $LUPDATE -no-obsolete -extensions cxxtr src/modules/keyboard -ts lang/kb_en.ts if test -n "$XMLLINT" ; then TS_FILE="lang/calamares_en.ts" diff --git a/lang/kb_en.ts b/lang/kb_en.ts new file mode 100644 index 000000000..11e29c61a --- /dev/null +++ b/lang/kb_en.ts @@ -0,0 +1,4609 @@ + + + + + QObject + + + A4Tech KB-21 + kb_models + + + + + A4Tech KBS-8 + kb_models + + + + + A4Tech Wireless Desktop RFKB-23 + kb_models + + + + + Acer AirKey V + kb_models + + + + + Acer C300 + kb_models + + + + + Acer Ferrari 4000 + kb_models + + + + + Acer laptop + kb_models + + + + + Advance Scorpius KI + kb_models + + + + + Apple + kb_models + + + + + Apple Aluminium (ANSI) + kb_models + + + + + Apple Aluminium (ISO) + kb_models + + + + + Apple Aluminium (JIS) + kb_models + + + + + Apple laptop + kb_models + + + + + Asus laptop + kb_models + + + + + Azona RF2300 wireless Internet + kb_models + + + + + BTC 5090 + kb_models + + + + + BTC 5113RF Multimedia + kb_models + + + + + BTC 5126T + kb_models + + + + + BTC 6301URF + kb_models + + + + + BTC 9000 + kb_models + + + + + BTC 9000A + kb_models + + + + + BTC 9001AH + kb_models + + + + + BTC 9019U + kb_models + + + + + BTC 9116U Mini Wireless Internet and Gaming + kb_models + + + + + BenQ X-Touch + kb_models + + + + + BenQ X-Touch 730 + kb_models + + + + + BenQ X-Touch 800 + kb_models + + + + + Brother Internet + kb_models + + + + + Cherry B.UNLIMITED + kb_models + + + + + Cherry Blue Line CyBo@rd + kb_models + + + + + Cherry Blue Line CyBo@rd (alt.) + kb_models + + + + + Cherry CyBo@rd USB-Hub + kb_models + + + + + Cherry CyMotion Expert + kb_models + + + + + Cherry CyMotion Master Linux + kb_models + + + + + Cherry CyMotion Master XPress + kb_models + + + + + Chicony Internet + kb_models + + + + + Chicony KB-9885 + kb_models + + + + + Chicony KU-0108 + kb_models + + + + + Chicony KU-0420 + kb_models + + + + + Chromebook + kb_models + + + + + Classmate PC + kb_models + + + + + Compaq Armada laptop + kb_models + + + + + Compaq Easy Access + kb_models + + + + + Compaq Internet (13 keys) + kb_models + + + + + Compaq Internet (18 keys) + kb_models + + + + + Compaq Internet (7 keys) + kb_models + + + + + Compaq Presario laptop + kb_models + + + + + Compaq iPaq + kb_models + + + + + Creative Desktop Wireless 7000 + kb_models + + + + + DTK2000 + kb_models + + + + + Dell + kb_models + + + + + Dell 101-key PC + kb_models + + + + + Dell Inspiron 6000/8000 laptop + kb_models + + + + + Dell Latitude laptop + kb_models + + + + + Dell Precision M laptop + kb_models + + + + + Dell Precision M65 laptop + kb_models + + + + + Dell SK-8125 + kb_models + + + + + Dell SK-8135 + kb_models + + + + + Dell USB Multimedia + kb_models + + + + + Dexxa Wireless Desktop + kb_models + + + + + Diamond 9801/9802 + kb_models + + + + + Ennyah DKB-1008 + kb_models + + + + + Everex STEPnote + kb_models + + + + + FL90 + kb_models + + + + + Fujitsu-Siemens Amilo laptop + kb_models + + + + + Generic 101-key PC + kb_models + + + + + Generic 102-key PC + kb_models + + + + + Generic 104-key PC + kb_models + + + + + Generic 104-key PC with L-shaped Enter key + kb_models + + + + + Generic 105-key PC + kb_models + + + + + Generic 86-key PC + kb_models + + + + + Genius Comfy KB-12e + kb_models + + + + + Genius Comfy KB-16M/Multimedia KWD-910 + kb_models + + + + + Genius Comfy KB-21e-Scroll + kb_models + + + + + Genius KB-19e NB + kb_models + + + + + Genius KKB-2050HS + kb_models + + + + + Gyration + kb_models + + + + + Happy Hacking + kb_models + + + + + Happy Hacking for Mac + kb_models + + + + + Hewlett-Packard Internet + kb_models + + + + + Hewlett-Packard Mini 110 laptop + kb_models + + + + + Hewlett-Packard NEC SK-2500 Multimedia + kb_models + + + + + Hewlett-Packard Omnibook 500 + kb_models + + + + + Hewlett-Packard Omnibook 500 FA + kb_models + + + + + Hewlett-Packard Omnibook 6000/6100 + kb_models + + + + + Hewlett-Packard Omnibook XE3 GC + kb_models + + + + + Hewlett-Packard Omnibook XE3 GF + kb_models + + + + + Hewlett-Packard Omnibook XT1000 + kb_models + + + + + Hewlett-Packard Pavilion ZT1100 + kb_models + + + + + Hewlett-Packard Pavilion dv5 + kb_models + + + + + Hewlett-Packard nx9020 + kb_models + + + + + Honeywell Euroboard + kb_models + + + + + IBM Rapid Access + kb_models + + + + + IBM Rapid Access II + kb_models + + + + + IBM Space Saver + kb_models + + + + + IBM ThinkPad 560Z/600/600E/A22E + kb_models + + + + + IBM ThinkPad R60/T60/R61/T61 + kb_models + + + + + IBM ThinkPad Z60m/Z60t/Z61m/Z61t + kb_models + + + + + Keytronic FlexPro + kb_models + + + + + Kinesis + kb_models + + + + + Logitech + kb_models + + + + + Logitech Access + kb_models + + + + + Logitech Cordless Desktop + kb_models + + + + + Logitech Cordless Desktop (alt.) + kb_models + + + + + Logitech Cordless Desktop EX110 + kb_models + + + + + Logitech Cordless Desktop LX-300 + kb_models + + + + + Logitech Cordless Desktop Navigator + kb_models + + + + + Logitech Cordless Desktop Optical + kb_models + + + + + Logitech Cordless Desktop Pro (2nd alt.) + kb_models + + + + + Logitech Cordless Desktop iTouch + kb_models + + + + + Logitech Cordless Freedom/Desktop Navigator + kb_models + + + + + Logitech G15 extra keys via G15daemon + kb_models + + + + + Logitech Internet + kb_models + + + + + Logitech Internet 350 + kb_models + + + + + Logitech Internet Navigator + kb_models + + + + + Logitech Ultra-X + kb_models + + + + + Logitech Ultra-X Cordless Media Desktop + kb_models + + + + + Logitech diNovo + kb_models + + + + + Logitech diNovo Edge + kb_models + + + + + Logitech iTouch + kb_models + + + + + Logitech iTouch Cordless Y-RB6 + kb_models + + + + + Logitech iTouch Internet Navigator SE + kb_models + + + + + Logitech iTouch Internet Navigator SE USB + kb_models + + + + + MacBook/MacBook Pro + kb_models + + + + + MacBook/MacBook Pro (intl.) + kb_models + + + + + Macintosh + kb_models + + + + + Macintosh Old + kb_models + + + + + Memorex MX1998 + kb_models + + + + + Memorex MX2500 EZ-Access + kb_models + + + + + Memorex MX2750 + kb_models + + + + + Microsoft Comfort Curve 2000 + kb_models + + + + + Microsoft Internet + kb_models + + + + + Microsoft Internet Pro (Swedish) + kb_models + + + + + Microsoft Natural + kb_models + + + + + Microsoft Natural Elite + kb_models + + + + + Microsoft Natural Ergonomic 4000 + kb_models + + + + + Microsoft Natural Pro OEM + kb_models + + + + + Microsoft Natural Pro USB/Internet Pro + kb_models + + + + + Microsoft Natural Pro/Internet Pro + kb_models + + + + + Microsoft Natural Wireless Ergonomic 7000 + kb_models + + + + + Microsoft Office Keyboard + kb_models + + + + + Microsoft Surface + kb_models + + + + + Microsoft Wireless Multimedia 1.0A + kb_models + + + + + NEC SK-1300 + kb_models + + + + + NEC SK-2500 + kb_models + + + + + NEC SK-6200 + kb_models + + + + + NEC SK-7100 + kb_models + + + + + Northgate OmniKey 101 + kb_models + + + + + OLPC + kb_models + + + + + Ortek Multimedia/Internet MCK-800 + kb_models + + + + + PC-98 + kb_models + + + + + Propeller Voyager KTEZ-1000 + kb_models + + + + + QTronix Scorpius 98N+ + kb_models + + + + + SVEN Ergonomic 2500 + kb_models + + + + + SVEN Slim 303 + kb_models + + + + + Samsung SDM 4500P + kb_models + + + + + Samsung SDM 4510P + kb_models + + + + + Sanwa Supply SKB-KG3 + kb_models + + + + + Silvercrest Multimedia Wireless + kb_models + + + + + SteelSeries Apex 300 (Apex RAW) + kb_models + + + + + Sun Type 6 (Japanese) + kb_models + + + + + Sun Type 6 USB (Japanese) + kb_models + + + + + Sun Type 6 USB (Unix) + kb_models + + + + + Sun Type 6/7 USB + kb_models + + + + + Sun Type 6/7 USB (European) + kb_models + + + + + Sun Type 7 USB + kb_models + + + + + Sun Type 7 USB (European) + kb_models + + + + + Sun Type 7 USB (Japanese)/Japanese 106-key + kb_models + + + + + Sun Type 7 USB (Unix) + kb_models + + + + + Super Power Multimedia + kb_models + + + + + Symplon PaceBook tablet + kb_models + + + + + Targa Visionary 811 + kb_models + + + + + Toshiba Satellite S3000 + kb_models + + + + + Truly Ergonomic 227 + kb_models + + + + + Truly Ergonomic 229 + kb_models + + + + + Truly Ergonomic Computer Keyboard Model 227 (Wide Alt keys) + kb_models + + + + + Truly Ergonomic Computer Keyboard Model 229 (Standard sized Alt keys, additional Super and Menu key) + kb_models + + + + + Trust Direct Access + kb_models + + + + + Trust Slimline + kb_models + + + + + Trust Wireless Classic + kb_models + + + + + TypeMatrix EZ-Reach 2020 + kb_models + + + + + TypeMatrix EZ-Reach 2030 PS2 + kb_models + + + + + TypeMatrix EZ-Reach 2030 USB + kb_models + + + + + TypeMatrix EZ-Reach 2030 USB (102/105:EU mode) + kb_models + + + + + TypeMatrix EZ-Reach 2030 USB (106:JP mode) + kb_models + + + + + Unitek KB-1925 + kb_models + + + + + ViewSonic KU-306 Internet + kb_models + + + + + Winbook Model XP5 + kb_models + + + + + Yahoo! Internet + kb_models + + + + + eMachines m6800 laptop + kb_models + + + + + Afghani + kb_layouts + + + + + Albanian + kb_layouts + + + + + Amharic + kb_layouts + + + + + Arabic + kb_layouts + + + + + Arabic (Morocco) + kb_layouts + + + + + Arabic (Syria) + kb_layouts + + + + + Armenian + kb_layouts + + + + + Azerbaijani + kb_layouts + + + + + Bambara + kb_layouts + + + + + Bangla + kb_layouts + + + + + Belarusian + kb_layouts + + + + + Belgian + kb_layouts + + + + + Bosnian + kb_layouts + + + + + Braille + kb_layouts + + + + + Bulgarian + kb_layouts + + + + + Burmese + kb_layouts + + + + + Chinese + kb_layouts + + + + + Croatian + kb_layouts + + + + + Czech + kb_layouts + + + + + Danish + kb_layouts + + + + + Dhivehi + kb_layouts + + + + + Dutch + kb_layouts + + + + + Dzongkha + kb_layouts + + + + + English (Australian) + kb_layouts + + + + + English (Cameroon) + kb_layouts + + + + + English (Ghana) + kb_layouts + + + + + English (Nigeria) + kb_layouts + + + + + English (South Africa) + kb_layouts + + + + + English (UK) + kb_layouts + + + + + English (US) + kb_layouts + + + + + Esperanto + kb_layouts + + + + + Estonian + kb_layouts + + + + + Faroese + kb_layouts + + + + + Filipino + kb_layouts + + + + + Finnish + kb_layouts + + + + + French + kb_layouts + + + + + French (Canada) + kb_layouts + + + + + French (Democratic Republic of the Congo) + kb_layouts + + + + + French (Guinea) + kb_layouts + + + + + French (Togo) + kb_layouts + + + + + Georgian + kb_layouts + + + + + German + kb_layouts + + + + + German (Austria) + kb_layouts + + + + + German (Switzerland) + kb_layouts + + + + + Greek + kb_layouts + + + + + Hebrew + kb_layouts + + + + + Hungarian + kb_layouts + + + + + Icelandic + kb_layouts + + + + + Indian + kb_layouts + + + + + Indonesian (Arab Melayu, phonetic) + kb_layouts + + + + + Indonesian (Javanese) + kb_layouts + + + + + Iraqi + kb_layouts + + + + + Irish + kb_layouts + + + + + Italian + kb_layouts + + + + + Japanese + kb_layouts + + + + + Japanese (PC-98) + kb_layouts + + + + + Kabylian (azerty layout, no dead keys) + kb_layouts + + + + + Kazakh + kb_layouts + + + + + Khmer (Cambodia) + kb_layouts + + + + + Korean + kb_layouts + + + + + Kyrgyz + kb_layouts + + + + + Lao + kb_layouts + + + + + Latvian + kb_layouts + + + + + Lithuanian + kb_layouts + + + + + Macedonian + kb_layouts + + + + + Malay (Jawi, Arabic Keyboard) + kb_layouts + + + + + Maltese + kb_layouts + + + + + Maori + kb_layouts + + + + + Moldavian + kb_layouts + + + + + Mongolian + kb_layouts + + + + + Montenegrin + kb_layouts + + + + + Nepali + kb_layouts + + + + + Norwegian + kb_layouts + + + + + Persian + kb_layouts + + + + + Polish + kb_layouts + + + + + Portuguese + kb_layouts + + + + + Portuguese (Brazil) + kb_layouts + + + + + Romanian + kb_layouts + + + + + Russian + kb_layouts + + + + + Serbian + kb_layouts + + + + + Sinhala (phonetic) + kb_layouts + + + + + Slovak + kb_layouts + + + + + Slovenian + kb_layouts + + + + + Spanish + kb_layouts + + + + + Spanish (Latin American) + kb_layouts + + + + + Swahili (Kenya) + kb_layouts + + + + + Swahili (Tanzania) + kb_layouts + + + + + Swedish + kb_layouts + + + + + Taiwanese + kb_layouts + + + + + Tajik + kb_layouts + + + + + Thai + kb_layouts + + + + + Tswana + kb_layouts + + + + + Turkish + kb_layouts + + + + + Turkmen + kb_layouts + + + + + Ukrainian + kb_layouts + + + + + Urdu (Pakistan) + kb_layouts + + + + + Uzbek + kb_layouts + + + + + Vietnamese + kb_layouts + + + + + Wolof + kb_layouts + + + + + Akan + kb_variants + + + + + Albanian (Plisi) + kb_variants + + + + + Albanian (Veqilharxhi) + kb_variants + + + + + Arabic (AZERTY) + kb_variants + + + + + Arabic (AZERTY, Eastern Arabic numerals) + kb_variants + + + + + Arabic (Algeria) + kb_variants + + + + + Arabic (Buckwalter) + kb_variants + + + + + Arabic (Eastern Arabic numerals) + kb_variants + + + + + Arabic (Macintosh) + kb_variants + + + + + Arabic (OLPC) + kb_variants + + + + + Arabic (Pakistan) + kb_variants + + + + + Arabic (QWERTY) + kb_variants + + + + + Arabic (QWERTY, Eastern Arabic numerals) + kb_variants + + + + + Armenian (alt. eastern) + kb_variants + + + + + Armenian (alt. phonetic) + kb_variants + + + + + Armenian (eastern) + kb_variants + + + + + Armenian (phonetic) + kb_variants + + + + + Armenian (western) + kb_variants + + + + + Asturian (Spain, with bottom-dot H and L) + kb_variants + + + + + Avatime + kb_variants + + + + + Azerbaijani (Cyrillic) + kb_variants + + + + + Bangla (India) + kb_variants + + + + + Bangla (India, Baishakhi Inscript) + kb_variants + + + + + Bangla (India, Baishakhi) + kb_variants + + + + + Bangla (India, Bornona) + kb_variants + + + + + Bangla (India, Gitanjali) + kb_variants + + + + + Bangla (India, Probhat) + kb_variants + + + + + Bangla (Probhat) + kb_variants + + + + + Bashkirian + kb_variants + + + + + Belarusian (Latin) + kb_variants + + + + + Belarusian (intl.) + kb_variants + + + + + Belarusian (legacy) + kb_variants + + + + + Belgian (ISO, alt.) + kb_variants + + + + + Belgian (Latin-9 only, alt.) + kb_variants + + + + + Belgian (Sun dead keys) + kb_variants + + + + + Belgian (Sun dead keys, alt.) + kb_variants + + + + + Belgian (Wang 724 AZERTY) + kb_variants + + + + + Belgian (alt.) + kb_variants + + + + + Belgian (no dead keys) + kb_variants + + + + + Berber (Morocco, Tifinagh alt.) + kb_variants + + + + + Berber (Morocco, Tifinagh extended phonetic) + kb_variants + + + + + Berber (Morocco, Tifinagh extended) + kb_variants + + + + + Berber (Morocco, Tifinagh phonetic) + kb_variants + + + + + Berber (Morocco, Tifinagh phonetic, alt.) + kb_variants + + + + + Berber (Morocco, Tifinagh) + kb_variants + + + + + Bosnian (US) + kb_variants + + + + + Bosnian (US, with Bosnian digraphs) + kb_variants + + + + + Bosnian (with Bosnian digraphs) + kb_variants + + + + + Bosnian (with guillemets) + kb_variants + + + + + Braille (left-handed inverted thumb) + kb_variants + + + + + Braille (left-handed) + kb_variants + + + + + Braille (right-handed inverted thumb) + kb_variants + + + + + Braille (right-handed) + kb_variants + + + + + Bulgarian (enhanced) + kb_variants + + + + + Bulgarian (new phonetic) + kb_variants + + + + + Bulgarian (traditional phonetic) + kb_variants + + + + + Burmese Zawgyi + kb_variants + + + + + Cameroon (AZERTY, intl.) + kb_variants + + + + + Cameroon (Dvorak, intl.) + kb_variants + + + + + Cameroon Multilingual (QWERTY, intl.) + kb_variants + + + + + Canadian (intl.) + kb_variants + + + + + Canadian (intl., 1st part) + kb_variants + + + + + Canadian (intl., 2nd part) + kb_variants + + + + + Catalan (Spain, with middle-dot L) + kb_variants + + + + + Cherokee + kb_variants + + + + + Chuvash + kb_variants + + + + + Chuvash (Latin) + kb_variants + + + + + CloGaelach + kb_variants + + + + + Crimean Tatar (Turkish Alt-Q) + kb_variants + + + + + Crimean Tatar (Turkish F) + kb_variants + + + + + Crimean Tatar (Turkish Q) + kb_variants + + + + + Croatian (US) + kb_variants + + + + + Croatian (US, with Croatian digraphs) + kb_variants + + + + + Croatian (with Croatian digraphs) + kb_variants + + + + + Croatian (with guillemets) + kb_variants + + + + + Czech (QWERTY) + kb_variants + + + + + Czech (QWERTY, Macintosh) + kb_variants + + + + + Czech (QWERTY, extended backslash) + kb_variants + + + + + Czech (UCW, only accented letters) + kb_variants + + + + + Czech (US, Dvorak, UCW support) + kb_variants + + + + + Czech (with &lt;|&gt; key) + kb_variants + + + + + Danish (Dvorak) + kb_variants + + + + + Danish (Macintosh) + kb_variants + + + + + Danish (Macintosh, no dead keys) + kb_variants + + + + + Danish (Windows) + kb_variants + + + + + Danish (no dead keys) + kb_variants + + + + + Dutch (Macintosh) + kb_variants + + + + + Dutch (Sun dead keys) + kb_variants + + + + + Dutch (standard) + kb_variants + + + + + English (Canada) + kb_variants + + + + + English (Colemak) + kb_variants + + + + + English (Dvorak) + kb_variants + + + + + English (Dvorak, alt. intl.) + kb_variants + + + + + English (Dvorak, intl., with dead keys) + kb_variants + + + + + English (Dvorak, left-handed) + kb_variants + + + + + English (Dvorak, right-handed) + kb_variants + + + + + English (Ghana, GILLBT) + kb_variants + + + + + English (Ghana, multilingual) + kb_variants + + + + + English (India, with rupee) + kb_variants + + + + + English (Macintosh) + kb_variants + + + + + English (Mali, US, Macintosh) + kb_variants + + + + + English (Mali, US, intl.) + kb_variants + + + + + English (Norman) + kb_variants + + + + + English (UK, Colemak) + kb_variants + + + + + English (UK, Dvorak) + kb_variants + + + + + English (UK, Dvorak, with UK punctuation) + kb_variants + + + + + English (UK, Macintosh) + kb_variants + + + + + English (UK, Macintosh, intl.) + kb_variants + + + + + English (UK, extended, Windows) + kb_variants + + + + + English (UK, intl., with dead keys) + kb_variants + + + + + English (US, Symbolic) + kb_variants + + + + + English (US, alt. intl.) + kb_variants + + + + + English (US, euro on 5) + kb_variants + + + + + English (US, intl., with dead keys) + kb_variants + + + + + English (Workman) + kb_variants + + + + + English (Workman, intl., with dead keys) + kb_variants + + + + + English (classic Dvorak) + kb_variants + + + + + English (intl., with AltGr dead keys) + kb_variants + + + + + English (programmer Dvorak) + kb_variants + + + + + English (the divide/multiply toggle the layout) + kb_variants + + + + + Esperanto (Brazil, Nativo) + kb_variants + + + + + Esperanto (Portugal, Nativo) + kb_variants + + + + + Esperanto (legacy) + kb_variants + + + + + Estonian (Dvorak) + kb_variants + + + + + Estonian (US) + kb_variants + + + + + Estonian (no dead keys) + kb_variants + + + + + Ewe + kb_variants + + + + + Faroese (no dead keys) + kb_variants + + + + + Filipino (Capewell-Dvorak, Baybayin) + kb_variants + + + + + Filipino (Capewell-Dvorak, Latin) + kb_variants + + + + + Filipino (Capewell-QWERF 2006, Baybayin) + kb_variants + + + + + Filipino (Capewell-QWERF 2006, Latin) + kb_variants + + + + + Filipino (Colemak, Baybayin) + kb_variants + + + + + Filipino (Colemak, Latin) + kb_variants + + + + + Filipino (Dvorak, Baybayin) + kb_variants + + + + + Filipino (Dvorak, Latin) + kb_variants + + + + + Filipino (QWERTY, Baybayin) + kb_variants + + + + + Finnish (Macintosh) + kb_variants + + + + + Finnish (Windows) + kb_variants + + + + + Finnish (classic) + kb_variants + + + + + Finnish (classic, no dead keys) + kb_variants + + + + + French (AZERTY) + kb_variants + + + + + French (AZERTY, AFNOR) + kb_variants + + + + + French (BEPO) + kb_variants + + + + + French (BEPO, AFNOR) + kb_variants + + + + + French (BEPO, Latin-9 only) + kb_variants + + + + + French (Breton) + kb_variants + + + + + French (Cameroon) + kb_variants + + + + + French (Canada, Dvorak) + kb_variants + + + + + French (Canada, legacy) + kb_variants + + + + + French (Dvorak) + kb_variants + + + + + French (Macintosh) + kb_variants + + + + + French (Mali, alt.) + kb_variants + + + + + French (Morocco) + kb_variants + + + + + French (Sun dead keys) + kb_variants + + + + + French (Switzerland) + kb_variants + + + + + French (Switzerland, Macintosh) + kb_variants + + + + + French (Switzerland, Sun dead keys) + kb_variants + + + + + French (Switzerland, no dead keys) + kb_variants + + + + + French (US) + kb_variants + + + + + French (alt.) + kb_variants + + + + + French (alt., Latin-9 only) + kb_variants + + + + + French (alt., Sun dead keys) + kb_variants + + + + + French (alt., no dead keys) + kb_variants + + + + + French (legacy, alt.) + kb_variants + + + + + French (legacy, alt., Sun dead keys) + kb_variants + + + + + French (legacy, alt., no dead keys) + kb_variants + + + + + French (no dead keys) + kb_variants + + + + + Friulian (Italy) + kb_variants + + + + + Fula + kb_variants + + + + + Ga + kb_variants + + + + + Georgian (France, AZERTY Tskapo) + kb_variants + + + + + Georgian (Italy) + kb_variants + + + + + Georgian (MESS) + kb_variants + + + + + Georgian (ergonomic) + kb_variants + + + + + German (Austria, Macintosh) + kb_variants + + + + + German (Austria, Sun dead keys) + kb_variants + + + + + German (Austria, no dead keys) + kb_variants + + + + + German (Dvorak) + kb_variants + + + + + German (E1) + kb_variants + + + + + German (E2) + kb_variants + + + + + German (Macintosh) + kb_variants + + + + + German (Macintosh, no dead keys) + kb_variants + + + + + German (Neo 2) + kb_variants + + + + + German (QWERTY) + kb_variants + + + + + German (Sun dead keys) + kb_variants + + + + + German (Switzerland, Macintosh) + kb_variants + + + + + German (Switzerland, Sun dead keys) + kb_variants + + + + + German (Switzerland, legacy) + kb_variants + + + + + German (Switzerland, no dead keys) + kb_variants + + + + + German (T3) + kb_variants + + + + + German (US) + kb_variants + + + + + German (dead acute) + kb_variants + + + + + German (dead grave acute) + kb_variants + + + + + German (dead tilde) + kb_variants + + + + + German (no dead keys) + kb_variants + + + + + Greek (extended) + kb_variants + + + + + Greek (no dead keys) + kb_variants + + + + + Greek (polytonic) + kb_variants + + + + + Greek (simple) + kb_variants + + + + + Gujarati + kb_variants + + + + + Hanyu Pinyin (with AltGr dead keys) + kb_variants + + + + + Hausa (Ghana) + kb_variants + + + + + Hausa (Nigeria) + kb_variants + + + + + Hawaiian + kb_variants + + + + + Hebrew (Biblical, Tiro) + kb_variants + + + + + Hebrew (lyx) + kb_variants + + + + + Hebrew (phonetic) + kb_variants + + + + + Hindi (Bolnagri) + kb_variants + + + + + Hindi (KaGaPa, phonetic) + kb_variants + + + + + Hindi (Wx) + kb_variants + + + + + Hungarian (QWERTY) + kb_variants + + + + + Hungarian (QWERTY, 101-key, comma, dead keys) + kb_variants + + + + + Hungarian (QWERTY, 101-key, comma, no dead keys) + kb_variants + + + + + Hungarian (QWERTY, 101-key, dot, dead keys) + kb_variants + + + + + Hungarian (QWERTY, 101-key, dot, no dead keys) + kb_variants + + + + + Hungarian (QWERTY, 102-key, comma, dead keys) + kb_variants + + + + + Hungarian (QWERTY, 102-key, comma, no dead keys) + kb_variants + + + + + Hungarian (QWERTY, 102-key, dot, dead keys) + kb_variants + + + + + Hungarian (QWERTY, 102-key, dot, no dead keys) + kb_variants + + + + + Hungarian (QWERTZ, 101-key, comma, dead keys) + kb_variants + + + + + Hungarian (QWERTZ, 101-key, comma, no dead keys) + kb_variants + + + + + Hungarian (QWERTZ, 101-key, dot, dead keys) + kb_variants + + + + + Hungarian (QWERTZ, 101-key, dot, no dead keys) + kb_variants + + + + + Hungarian (QWERTZ, 102-key, comma, dead keys) + kb_variants + + + + + Hungarian (QWERTZ, 102-key, comma, no dead keys) + kb_variants + + + + + Hungarian (QWERTZ, 102-key, dot, dead keys) + kb_variants + + + + + Hungarian (QWERTZ, 102-key, dot, no dead keys) + kb_variants + + + + + Hungarian (no dead keys) + kb_variants + + + + + Hungarian (standard) + kb_variants + + + + + Icelandic (Dvorak) + kb_variants + + + + + Icelandic (Macintosh) + kb_variants + + + + + Icelandic (Macintosh, legacy) + kb_variants + + + + + Icelandic (Sun dead keys) + kb_variants + + + + + Icelandic (no dead keys) + kb_variants + + + + + Igbo + kb_variants + + + + + Indic (phonetic, IPA) + kb_variants + + + + + Indonesian (Arab Melayu, extended phonetic) + kb_variants + + + + + Inuktitut + kb_variants + + + + + Irish (UnicodeExpert) + kb_variants + + + + + Italian (IBM 142) + kb_variants + + + + + Italian (Macintosh) + kb_variants + + + + + Italian (US) + kb_variants + + + + + Italian (Windows) + kb_variants + + + + + Italian (intl., with dead keys) + kb_variants + + + + + Italian (no dead keys) + kb_variants + + + + + Japanese (Dvorak) + kb_variants + + + + + Japanese (Kana 86) + kb_variants + + + + + Japanese (Kana) + kb_variants + + + + + Japanese (Macintosh) + kb_variants + + + + + Japanese (OADG 109A) + kb_variants + + + + + Kabylian (Algeria, Tifinagh) + kb_variants + + + + + Kabylian (azerty layout, with dead keys) + kb_variants + + + + + Kabylian (qwerty-gb layout, with dead keys) + kb_variants + + + + + Kabylian (qwerty-us layout, with dead keys) + kb_variants + + + + + Kalmyk + kb_variants + + + + + Kannada + kb_variants + + + + + Kannada (KaGaPa, phonetic) + kb_variants + + + + + Kashubian + kb_variants + + + + + Kazakh (Latin) + kb_variants + + + + + Kazakh (extended) + kb_variants + + + + + Kazakh (with Russian) + kb_variants + + + + + Kikuyu + kb_variants + + + + + Komi + kb_variants + + + + + Korean (101/104-key compatible) + kb_variants + + + + + Kurdish (Iran, Arabic-Latin) + kb_variants + + + + + Kurdish (Iran, F) + kb_variants + + + + + Kurdish (Iran, Latin Alt-Q) + kb_variants + + + + + Kurdish (Iran, Latin Q) + kb_variants + + + + + Kurdish (Iraq, Arabic-Latin) + kb_variants + + + + + Kurdish (Iraq, F) + kb_variants + + + + + Kurdish (Iraq, Latin Alt-Q) + kb_variants + + + + + Kurdish (Iraq, Latin Q) + kb_variants + + + + + Kurdish (Syria, F) + kb_variants + + + + + Kurdish (Syria, Latin Alt-Q) + kb_variants + + + + + Kurdish (Syria, Latin Q) + kb_variants + + + + + Kurdish (Turkey, F) + kb_variants + + + + + Kurdish (Turkey, Latin Alt-Q) + kb_variants + + + + + Kurdish (Turkey, Latin Q) + kb_variants + + + + + Kyrgyz (phonetic) + kb_variants + + + + + Lao (STEA) + kb_variants + + + + + Latvian (F) + kb_variants + + + + + Latvian (adapted) + kb_variants + + + + + Latvian (apostrophe) + kb_variants + + + + + Latvian (ergonomic, ŪGJRMV) + kb_variants + + + + + Latvian (modern) + kb_variants + + + + + Latvian (tilde) + kb_variants + + + + + Lithuanian (IBM LST 1205-92) + kb_variants + + + + + Lithuanian (LEKP) + kb_variants + + + + + Lithuanian (LEKPa) + kb_variants + + + + + Lithuanian (US) + kb_variants + + + + + Lithuanian (standard) + kb_variants + + + + + Lower Sorbian + kb_variants + + + + + Lower Sorbian (QWERTZ) + kb_variants + + + + + Macedonian (no dead keys) + kb_variants + + + + + Malay (Jawi, phonetic) + kb_variants + + + + + Malayalam + kb_variants + + + + + Malayalam (Lalitha) + kb_variants + + + + + Malayalam (enhanced Inscript, with rupee) + kb_variants + + + + + Maltese (UK, with AltGr overrides) + kb_variants + + + + + Maltese (US layout with AltGr overrides) + kb_variants + + + + + Maltese (US) + kb_variants + + + + + Manipuri (Eeyek) + kb_variants + + + + + Marathi (KaGaPa, phonetic) + kb_variants + + + + + Marathi (enhanced Inscript) + kb_variants + + + + + Mari + kb_variants + + + + + Mmuock + kb_variants + + + + + Moldavian (Gagauz) + kb_variants + + + + + Mongolian (Bichig) + kb_variants + + + + + Mongolian (Galik) + kb_variants + + + + + Mongolian (Manchu Galik) + kb_variants + + + + + Mongolian (Manchu) + kb_variants + + + + + Mongolian (Todo Galik) + kb_variants + + + + + Mongolian (Todo) + kb_variants + + + + + Mongolian (Xibe) + kb_variants + + + + + Montenegrin (Cyrillic) + kb_variants + + + + + Montenegrin (Cyrillic, ZE and ZHE swapped) + kb_variants + + + + + Montenegrin (Cyrillic, with guillemets) + kb_variants + + + + + Montenegrin (Latin, QWERTY) + kb_variants + + + + + Montenegrin (Latin, Unicode) + kb_variants + + + + + Montenegrin (Latin, Unicode, QWERTY) + kb_variants + + + + + Montenegrin (Latin, with guillemets) + kb_variants + + + + + Northern Saami (Finland) + kb_variants + + + + + Northern Saami (Norway) + kb_variants + + + + + Northern Saami (Norway, no dead keys) + kb_variants + + + + + Northern Saami (Sweden) + kb_variants + + + + + Norwegian (Colemak) + kb_variants + + + + + Norwegian (Dvorak) + kb_variants + + + + + Norwegian (Macintosh) + kb_variants + + + + + Norwegian (Macintosh, no dead keys) + kb_variants + + + + + Norwegian (Windows) + kb_variants + + + + + Norwegian (no dead keys) + kb_variants + + + + + Occitan + kb_variants + + + + + Ogham + kb_variants + + + + + Ogham (IS434) + kb_variants + + + + + Ol Chiki + kb_variants + + + + + Oriya + kb_variants + + + + + Ossetian (Georgia) + kb_variants + + + + + Ossetian (Windows) + kb_variants + + + + + Ossetian (legacy) + kb_variants + + + + + Pannonian Rusyn + kb_variants + + + + + Pashto + kb_variants + + + + + Pashto (Afghanistan, OLPC) + kb_variants + + + + + Persian (Afghanistan, Dari OLPC) + kb_variants + + + + + Persian (with Persian keypad) + kb_variants + + + + + Polish (British keyboard) + kb_variants + + + + + Polish (Dvorak) + kb_variants + + + + + Polish (Dvorak, with Polish quotes on key 1) + kb_variants + + + + + Polish (Dvorak, with Polish quotes on quotemark key) + kb_variants + + + + + Polish (QWERTZ) + kb_variants + + + + + Polish (legacy) + kb_variants + + + + + Polish (programmer Dvorak) + kb_variants + + + + + Portuguese (Brazil, Dvorak) + kb_variants + + + + + Portuguese (Brazil, IBM/Lenovo ThinkPad) + kb_variants + + + + + Portuguese (Brazil, Nativo for US keyboards) + kb_variants + + + + + Portuguese (Brazil, Nativo) + kb_variants + + + + + Portuguese (Brazil, no dead keys) + kb_variants + + + + + Portuguese (Macintosh) + kb_variants + + + + + Portuguese (Macintosh, Sun dead keys) + kb_variants + + + + + Portuguese (Macintosh, no dead keys) + kb_variants + + + + + Portuguese (Nativo for US keyboards) + kb_variants + + + + + Portuguese (Nativo) + kb_variants + + + + + Portuguese (Sun dead keys) + kb_variants + + + + + Portuguese (no dead keys) + kb_variants + + + + + Punjabi (Gurmukhi Jhelum) + kb_variants + + + + + Punjabi (Gurmukhi) + kb_variants + + + + + Romanian (Germany) + kb_variants + + + + + Romanian (Germany, no dead keys) + kb_variants + + + + + Romanian (Windows) + kb_variants + + + + + Romanian (cedilla) + kb_variants + + + + + Romanian (standard cedilla) + kb_variants + + + + + Romanian (standard) + kb_variants + + + + + Russian (Belarus) + kb_variants + + + + + Russian (Czech, phonetic) + kb_variants + + + + + Russian (DOS) + kb_variants + + + + + Russian (Georgia) + kb_variants + + + + + Russian (Germany, phonetic) + kb_variants + + + + + Russian (Kazakhstan, with Kazakh) + kb_variants + + + + + Russian (Macintosh) + kb_variants + + + + + Russian (Poland, phonetic Dvorak) + kb_variants + + + + + Russian (Sweden, phonetic) + kb_variants + + + + + Russian (Sweden, phonetic, no dead keys) + kb_variants + + + + + Russian (US, phonetic) + kb_variants + + + + + Russian (Ukraine, standard RSTU) + kb_variants + + + + + Russian (legacy) + kb_variants + + + + + Russian (phonetic) + kb_variants + + + + + Russian (phonetic, AZERTY) + kb_variants + + + + + Russian (phonetic, Dvorak) + kb_variants + + + + + Russian (phonetic, French) + kb_variants + + + + + Russian (phonetic, Windows) + kb_variants + + + + + Russian (phonetic, YAZHERTY) + kb_variants + + + + + Russian (typewriter) + kb_variants + + + + + Russian (typewriter, legacy) + kb_variants + + + + + Saisiyat (Taiwan) + kb_variants + + + + + Samogitian + kb_variants + + + + + Sanskrit (KaGaPa, phonetic) + kb_variants + + + + + Serbian (Cyrillic, ZE and ZHE swapped) + kb_variants + + + + + Serbian (Cyrillic, with guillemets) + kb_variants + + + + + Serbian (Latin) + kb_variants + + + + + Serbian (Latin, QWERTY) + kb_variants + + + + + Serbian (Latin, Unicode) + kb_variants + + + + + Serbian (Latin, Unicode, QWERTY) + kb_variants + + + + + Serbian (Latin, with guillemets) + kb_variants + + + + + Serbian (Russia) + kb_variants + + + + + Serbo-Croatian (US) + kb_variants + + + + + Sicilian + kb_variants + + + + + Silesian + kb_variants + + + + + Sindhi + kb_variants + + + + + Sinhala (US) + kb_variants + + + + + Slovak (QWERTY) + kb_variants + + + + + Slovak (QWERTY, extended backslash) + kb_variants + + + + + Slovak (extended backslash) + kb_variants + + + + + Slovenian (US) + kb_variants + + + + + Slovenian (with guillemets) + kb_variants + + + + + Spanish (Dvorak) + kb_variants + + + + + Spanish (Latin American, Colemak for gaming) + kb_variants + + + + + Spanish (Latin American, Colemak) + kb_variants + + + + + Spanish (Latin American, Dvorak) + kb_variants + + + + + Spanish (Latin American, Sun dead keys) + kb_variants + + + + + Spanish (Latin American, dead tilde) + kb_variants + + + + + Spanish (Latin American, no dead keys) + kb_variants + + + + + Spanish (Macintosh) + kb_variants + + + + + Spanish (Sun dead keys) + kb_variants + + + + + Spanish (Windows) + kb_variants + + + + + Spanish (dead tilde) + kb_variants + + + + + Spanish (no dead keys) + kb_variants + + + + + Swedish (Dvorak) + kb_variants + + + + + Swedish (Dvorak, intl.) + kb_variants + + + + + Swedish (Macintosh) + kb_variants + + + + + Swedish (Svdvorak) + kb_variants + + + + + Swedish (US) + kb_variants + + + + + Swedish (no dead keys) + kb_variants + + + + + Swedish Sign Language + kb_variants + + + + + Syriac + kb_variants + + + + + Syriac (phonetic) + kb_variants + + + + + Taiwanese (indigenous) + kb_variants + + + + + Tajik (legacy) + kb_variants + + + + + Tamil (Inscript) + kb_variants + + + + + Tamil (Sri Lanka, TamilNet '99) + kb_variants + + + + + Tamil (Sri Lanka, TamilNet '99, TAB encoding) + kb_variants + + + + + Tamil (TamilNet '99 with Tamil numerals) + kb_variants + + + + + Tamil (TamilNet '99) + kb_variants + + + + + Tamil (TamilNet '99, TAB encoding) + kb_variants + + + + + Tamil (TamilNet '99, TSCII encoding) + kb_variants + + + + + Tatar + kb_variants + + + + + Telugu + kb_variants + + + + + Telugu (KaGaPa, phonetic) + kb_variants + + + + + Telugu (Sarala) + kb_variants + + + + + Thai (Pattachote) + kb_variants + + + + + Thai (TIS-820.2538) + kb_variants + + + + + Tibetan + kb_variants + + + + + Tibetan (with ASCII numerals) + kb_variants + + + + + Turkish (Alt-Q) + kb_variants + + + + + Turkish (F) + kb_variants + + + + + Turkish (Germany) + kb_variants + + + + + Turkish (Sun dead keys) + kb_variants + + + + + Turkish (intl., with dead keys) + kb_variants + + + + + Turkmen (Alt-Q) + kb_variants + + + + + Udmurt + kb_variants + + + + + Ukrainian (Windows) + kb_variants + + + + + Ukrainian (homophonic) + kb_variants + + + + + Ukrainian (legacy) + kb_variants + + + + + Ukrainian (phonetic) + kb_variants + + + + + Ukrainian (standard RSTU) + kb_variants + + + + + Ukrainian (typewriter) + kb_variants + + + + + Urdu (Pakistan, CRULP) + kb_variants + + + + + Urdu (Pakistan, NLA) + kb_variants + + + + + Urdu (Windows) + kb_variants + + + + + Urdu (alt. phonetic) + kb_variants + + + + + Urdu (phonetic) + kb_variants + + + + + Uyghur + kb_variants + + + + + Uzbek (Afghanistan) + kb_variants + + + + + Uzbek (Afghanistan, OLPC) + kb_variants + + + + + Uzbek (Latin) + kb_variants + + + + + Vietnamese (French) + kb_variants + + + + + Vietnamese (US) + kb_variants + + + + + Yakut + kb_variants + + + + + Yoruba + kb_variants + + + + From ac6c9fae4aab843d43aa9882610b4542fd0b387a Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Fri, 30 Oct 2020 13:51:53 +0100 Subject: [PATCH 05/53] [libcalamares] Do not use moved-from object --- src/libcalamares/utils/Retranslator.cpp | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/libcalamares/utils/Retranslator.cpp b/src/libcalamares/utils/Retranslator.cpp index a03ae9a3b..668da81dd 100644 --- a/src/libcalamares/utils/Retranslator.cpp +++ b/src/libcalamares/utils/Retranslator.cpp @@ -193,10 +193,9 @@ installTranslator( const QLocale& locale, const QString& brandingTranslationsPre { loadSingletonTranslator( BrandingLoader( locale, brandingTranslationsPrefix ), s_brandingTranslator ); loadSingletonTranslator( TZLoader( locale ), s_tztranslator ); + loadSingletonTranslator( CalamaresLoader( locale ), s_translator ); - CalamaresLoader l( locale ); // because we want the extracted localeName - loadSingletonTranslator( std::move( l ), s_translator ); - s_translatorLocaleName = l.m_localeName; + s_translatorLocaleName = CalamaresLoader::mungeLocaleName( locale ); } From 7659dfdb9d9efa7687cd1604d34fbf44a2fb69d2 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Fri, 30 Oct 2020 13:58:17 +0100 Subject: [PATCH 06/53] [libcalamares] Expose a translations-loading function --- src/libcalamares/utils/Retranslator.cpp | 8 +++++++- src/libcalamares/utils/Retranslator.h | 22 ++++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/libcalamares/utils/Retranslator.cpp b/src/libcalamares/utils/Retranslator.cpp index 668da81dd..7781ecf51 100644 --- a/src/libcalamares/utils/Retranslator.cpp +++ b/src/libcalamares/utils/Retranslator.cpp @@ -195,7 +195,7 @@ installTranslator( const QLocale& locale, const QString& brandingTranslationsPre loadSingletonTranslator( TZLoader( locale ), s_tztranslator ); loadSingletonTranslator( CalamaresLoader( locale ), s_translator ); - s_translatorLocaleName = CalamaresLoader::mungeLocaleName( locale ); + s_translatorLocaleName = CalamaresLoader::mungeLocaleName(locale); } @@ -205,6 +205,12 @@ translatorLocaleName() return s_translatorLocaleName; } +bool +loadTranslator( const QLocale& locale, const QString& prefix, QTranslator *translator ) +{ + return ::tryLoad( translator, prefix, locale.name() ); +} + Retranslator* Retranslator::retranslatorFor( QObject* parent ) { diff --git a/src/libcalamares/utils/Retranslator.h b/src/libcalamares/utils/Retranslator.h index 476c0b184..df38fa4d8 100644 --- a/src/libcalamares/utils/Retranslator.h +++ b/src/libcalamares/utils/Retranslator.h @@ -21,6 +21,7 @@ class QEvent; class QLocale; +class QTranslator; namespace CalamaresUtils { @@ -31,8 +32,29 @@ namespace CalamaresUtils */ DLLEXPORT void installTranslator( const QLocale& locale, const QString& brandingTranslationsPrefix ); +/** @brief The name of the (locale of the) most recently installed translator + * + * May return something different from the locale.name() of the + * QLocale passed in, because Calamares will munge some names and + * may remap translations. + */ DLLEXPORT QString translatorLocaleName(); +/** @brief Loads translations into the given @p translator + * + * This function is not intended for general use: it is for those special + * cases where modules need their own translator / translations for data + * that is locale to the module. Tries to load a .qm from "sensible" + * locations, which are the same ones that installTranslator() would use. + * Takes local-translations into account. + * + * Note that @p prefix should end with an underscore '_' -- this function + * does not introduce one by itself. + * + * @returns @c true on success + */ +DLLEXPORT bool loadTranslator( const QLocale& locale, const QString& prefix, QTranslator* translator ); + /** @brief Set @p allow to true to load translations from current dir. * * If false, (or never called) the translations are loaded only from From b72eba81576c925a676971e7246a0a6c99617d6e Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Fri, 30 Oct 2020 14:47:30 +0100 Subject: [PATCH 07/53] [libcalamares] Extend the Deleter-helper with "preserve" Sometimes you want to keep the thing around after all. --- src/libcalamares/utils/RAII.h | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/libcalamares/utils/RAII.h b/src/libcalamares/utils/RAII.h index d6f8fe94d..1cbead4a2 100644 --- a/src/libcalamares/utils/RAII.h +++ b/src/libcalamares/utils/RAII.h @@ -16,20 +16,28 @@ #include -/// @brief Convenience to zero out and deleteLater of any QObject-derived-class +/** @brief Convenience to zero out and deleteLater of any QObject-derived-class + * + * If, before destruction, preserve is set to @c true, then + * the object is "preserved", and not deleted at all. + */ template < typename T > struct cqDeleter { T*& p; + bool preserve = false; ~cqDeleter() { static_assert( std::is_base_of< QObject, T >::value, "Not a QObject-class" ); - if ( p ) + if ( !preserve ) { - p->deleteLater(); + if ( p ) + { + p->deleteLater(); + } + p = nullptr; } - p = nullptr; } }; From 89a180ee5850733f25d18529bf3d65ce00eac91f Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Fri, 30 Oct 2020 14:38:11 +0100 Subject: [PATCH 08/53] [keyboard] Initial support for translated keyboard names --- src/modules/keyboard/KeyboardLayoutModel.cpp | 18 ++++++++++++++++++ src/modules/keyboard/KeyboardLayoutModel.h | 2 +- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/modules/keyboard/KeyboardLayoutModel.cpp b/src/modules/keyboard/KeyboardLayoutModel.cpp index b8cb892f4..9be9c8ef9 100644 --- a/src/modules/keyboard/KeyboardLayoutModel.cpp +++ b/src/modules/keyboard/KeyboardLayoutModel.cpp @@ -11,9 +11,15 @@ #include "KeyboardLayoutModel.h" #include "utils/Logger.h" +#include "utils/RAII.h" +#include "utils/Retranslator.h" + +#include #include +static QTranslator* s_kbtranslator = nullptr; + XKBListModel::XKBListModel( QObject* parent ) : QAbstractListModel( parent ) { @@ -41,6 +47,11 @@ XKBListModel::data( const QModelIndex& index, int role ) const switch ( role ) { case LabelRole: + if ( s_kbtranslator && m_contextname ) + { + auto s = s_kbtranslator->translate( m_contextname, item.label.toUtf8().data() ); + cDebug() << "Translated" << item.label << "to" << s; + } return item.label; case KeyRole: return item.key; @@ -93,6 +104,8 @@ XKBListModel::setCurrentIndex( int index ) KeyboardModelsModel::KeyboardModelsModel( QObject* parent ) : XKBListModel( parent ) { + m_contextname = "kb_models"; + // The models map is from human-readable names (!) to xkb identifier const auto models = KeyboardGlobal::getKeyboardModels(); m_list.reserve( models.count() ); @@ -110,6 +123,10 @@ KeyboardModelsModel::KeyboardModelsModel( QObject* parent ) } cDebug() << "Loaded" << m_list.count() << "keyboard models"; + + CALAMARES_RETRANSLATE( if ( !s_kbtranslator ) { s_kbtranslator = new QTranslator; } cqDeleter d { s_kbtranslator }; + d.preserve + = CalamaresUtils::loadTranslator( QLocale(), QStringLiteral( "kb_" ), s_kbtranslator ); ) } @@ -207,6 +224,7 @@ KeyboardLayoutModel::currentIndex() const KeyboardVariantsModel::KeyboardVariantsModel( QObject* parent ) : XKBListModel( parent ) { + m_contextname = "kb_variants"; } void diff --git a/src/modules/keyboard/KeyboardLayoutModel.h b/src/modules/keyboard/KeyboardLayoutModel.h index 60747da55..9c83e41d8 100644 --- a/src/modules/keyboard/KeyboardLayoutModel.h +++ b/src/modules/keyboard/KeyboardLayoutModel.h @@ -21,7 +21,6 @@ * * This model acts like it has a single selection, as well. */ - class XKBListModel : public QAbstractListModel { Q_OBJECT @@ -70,6 +69,7 @@ protected: }; QVector< ModelInfo > m_list; int m_currentIndex = -1; + const char* m_contextname = nullptr; }; From 4387b8061e88a635e9d9a885d4ce261d7be6976a Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Sat, 31 Oct 2020 20:02:21 +0100 Subject: [PATCH 09/53] [keyboard] Move responsibility for retranslation to Config - only widgets get language change events, so we need to hook that up to the ViewSteps and inform the Config object so that it can (re)load translations for the keyboard data. --- src/modules/keyboard/Config.cpp | 5 +++++ src/modules/keyboard/Config.h | 11 +++++++++++ src/modules/keyboard/KeyboardLayoutModel.cpp | 4 ---- src/modules/keyboard/KeyboardPage.cpp | 9 ++++++++- src/modules/keyboard/KeyboardPage.h | 2 ++ 5 files changed, 26 insertions(+), 5 deletions(-) diff --git a/src/modules/keyboard/Config.cpp b/src/modules/keyboard/Config.cpp index 5d5e80d5f..85bb2e9d6 100644 --- a/src/modules/keyboard/Config.cpp +++ b/src/modules/keyboard/Config.cpp @@ -560,3 +560,8 @@ Config::setConfigurationMap( const QVariantMap& configurationMap ) m_writeEtcDefaultKeyboard = true; } } + +void +Config::retranslate() +{ +} diff --git a/src/modules/keyboard/Config.h b/src/modules/keyboard/Config.h index e35193484..90eeb0e7b 100644 --- a/src/modules/keyboard/Config.h +++ b/src/modules/keyboard/Config.h @@ -58,6 +58,17 @@ public: */ KeyboardVariantsModel* keyboardVariants() const; + /** @brief Call this to change application language + * + * The models (for keyboard model, layouts and variants) provide + * translations of strings in the xkb table, so need to be + * notified of language changes as well. + * + * Only widgets get LanguageChange events, so one of them will + * need to call this. + */ + void retranslate(); + signals: void prettyStatusChanged(); diff --git a/src/modules/keyboard/KeyboardLayoutModel.cpp b/src/modules/keyboard/KeyboardLayoutModel.cpp index 9be9c8ef9..f1e6a66c6 100644 --- a/src/modules/keyboard/KeyboardLayoutModel.cpp +++ b/src/modules/keyboard/KeyboardLayoutModel.cpp @@ -123,10 +123,6 @@ KeyboardModelsModel::KeyboardModelsModel( QObject* parent ) } cDebug() << "Loaded" << m_list.count() << "keyboard models"; - - CALAMARES_RETRANSLATE( if ( !s_kbtranslator ) { s_kbtranslator = new QTranslator; } cqDeleter d { s_kbtranslator }; - d.preserve - = CalamaresUtils::loadTranslator( QLocale(), QStringLiteral( "kb_" ), s_kbtranslator ); ) } diff --git a/src/modules/keyboard/KeyboardPage.cpp b/src/modules/keyboard/KeyboardPage.cpp index 2be897e58..7522056a3 100644 --- a/src/modules/keyboard/KeyboardPage.cpp +++ b/src/modules/keyboard/KeyboardPage.cpp @@ -95,10 +95,17 @@ KeyboardPage::KeyboardPage( Config* config, QWidget* parent ) connect( config->keyboardVariants(), &KeyboardVariantsModel::currentIndexChanged, [this]( int index ) { ui->variantSelector->setCurrentIndex( m_config->keyboardVariants()->index( index ) ); } ); - CALAMARES_RETRANSLATE( ui->retranslateUi( this ); ) + CALAMARES_RETRANSLATE_SLOT( &KeyboardPage::retranslate ) } KeyboardPage::~KeyboardPage() { delete ui; } + +void +KeyboardPage::retranslate() +{ + ui->retranslateUi( this ); + m_config->retranslate(); +} diff --git a/src/modules/keyboard/KeyboardPage.h b/src/modules/keyboard/KeyboardPage.h index 98925fcad..1c644cc08 100644 --- a/src/modules/keyboard/KeyboardPage.h +++ b/src/modules/keyboard/KeyboardPage.h @@ -37,6 +37,8 @@ public: explicit KeyboardPage( Config* config, QWidget* parent = nullptr ); ~KeyboardPage() override; + void retranslate(); + private: Ui::Page_Keyboard* ui; KeyBoardPreview* m_keyboardPreview; From b15a76804c53da0d2d1fe39c025c421e60c354a0 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Sun, 1 Nov 2020 12:41:21 +0100 Subject: [PATCH 10/53] i18n: bogus Tajik keyboard translations --- lang/kb_tg.ts | 4609 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 4609 insertions(+) create mode 100644 lang/kb_tg.ts diff --git a/lang/kb_tg.ts b/lang/kb_tg.ts new file mode 100644 index 000000000..10b48e701 --- /dev/null +++ b/lang/kb_tg.ts @@ -0,0 +1,4609 @@ + + + + + QObject + + + A4Tech KB-21 + kb_models + + + + + A4Tech KBS-8 + kb_models + + + + + A4Tech Wireless Desktop RFKB-23 + kb_models + + + + + Acer AirKey V + kb_models + + + + + Acer C300 + kb_models + + + + + Acer Ferrari 4000 + kb_models + + + + + Acer laptop + kb_models + + + + + Advance Scorpius KI + kb_models + + + + + Apple + kb_models + + + + + Apple Aluminium (ANSI) + kb_models + + + + + Apple Aluminium (ISO) + kb_models + + + + + Apple Aluminium (JIS) + kb_models + + + + + Apple laptop + kb_models + + + + + Asus laptop + kb_models + + + + + Azona RF2300 wireless Internet + kb_models + + + + + BTC 5090 + kb_models + + + + + BTC 5113RF Multimedia + kb_models + + + + + BTC 5126T + kb_models + + + + + BTC 6301URF + kb_models + + + + + BTC 9000 + kb_models + + + + + BTC 9000A + kb_models + + + + + BTC 9001AH + kb_models + + + + + BTC 9019U + kb_models + + + + + BTC 9116U Mini Wireless Internet and Gaming + kb_models + + + + + BenQ X-Touch + kb_models + + + + + BenQ X-Touch 730 + kb_models + + + + + BenQ X-Touch 800 + kb_models + + + + + Brother Internet + kb_models + + + + + Cherry B.UNLIMITED + kb_models + + + + + Cherry Blue Line CyBo@rd + kb_models + + + + + Cherry Blue Line CyBo@rd (alt.) + kb_models + + + + + Cherry CyBo@rd USB-Hub + kb_models + + + + + Cherry CyMotion Expert + kb_models + + + + + Cherry CyMotion Master Linux + kb_models + + + + + Cherry CyMotion Master XPress + kb_models + + + + + Chicony Internet + kb_models + + + + + Chicony KB-9885 + kb_models + + + + + Chicony KU-0108 + kb_models + + + + + Chicony KU-0420 + kb_models + + + + + Chromebook + kb_models + + + + + Classmate PC + kb_models + + + + + Compaq Armada laptop + kb_models + + + + + Compaq Easy Access + kb_models + + + + + Compaq Internet (13 keys) + kb_models + + + + + Compaq Internet (18 keys) + kb_models + + + + + Compaq Internet (7 keys) + kb_models + + + + + Compaq Presario laptop + kb_models + + + + + Compaq iPaq + kb_models + + + + + Creative Desktop Wireless 7000 + kb_models + + + + + DTK2000 + kb_models + + + + + Dell + kb_models + + + + + Dell 101-key PC + kb_models + + + + + Dell Inspiron 6000/8000 laptop + kb_models + + + + + Dell Latitude laptop + kb_models + + + + + Dell Precision M laptop + kb_models + + + + + Dell Precision M65 laptop + kb_models + + + + + Dell SK-8125 + kb_models + + + + + Dell SK-8135 + kb_models + + + + + Dell USB Multimedia + kb_models + + + + + Dexxa Wireless Desktop + kb_models + + + + + Diamond 9801/9802 + kb_models + + + + + Ennyah DKB-1008 + kb_models + + + + + Everex STEPnote + kb_models + + + + + FL90 + kb_models + + + + + Fujitsu-Siemens Amilo laptop + kb_models + + + + + Generic 101-key PC + kb_models + Общий 101-ключ + + + + Generic 102-key PC + kb_models + Общий 102-ключ + + + + Generic 104-key PC + kb_models + Общий 104-ключ + + + + Generic 104-key PC with L-shaped Enter key + kb_models + + + + + Generic 105-key PC + kb_models + Общий 105-ключ + + + + Generic 86-key PC + kb_models + Общий 86-ключ + + + + Genius Comfy KB-12e + kb_models + + + + + Genius Comfy KB-16M/Multimedia KWD-910 + kb_models + + + + + Genius Comfy KB-21e-Scroll + kb_models + + + + + Genius KB-19e NB + kb_models + + + + + Genius KKB-2050HS + kb_models + + + + + Gyration + kb_models + + + + + Happy Hacking + kb_models + + + + + Happy Hacking for Mac + kb_models + + + + + Hewlett-Packard Internet + kb_models + + + + + Hewlett-Packard Mini 110 laptop + kb_models + + + + + Hewlett-Packard NEC SK-2500 Multimedia + kb_models + + + + + Hewlett-Packard Omnibook 500 + kb_models + + + + + Hewlett-Packard Omnibook 500 FA + kb_models + + + + + Hewlett-Packard Omnibook 6000/6100 + kb_models + + + + + Hewlett-Packard Omnibook XE3 GC + kb_models + + + + + Hewlett-Packard Omnibook XE3 GF + kb_models + + + + + Hewlett-Packard Omnibook XT1000 + kb_models + + + + + Hewlett-Packard Pavilion ZT1100 + kb_models + + + + + Hewlett-Packard Pavilion dv5 + kb_models + + + + + Hewlett-Packard nx9020 + kb_models + + + + + Honeywell Euroboard + kb_models + + + + + IBM Rapid Access + kb_models + + + + + IBM Rapid Access II + kb_models + + + + + IBM Space Saver + kb_models + + + + + IBM ThinkPad 560Z/600/600E/A22E + kb_models + + + + + IBM ThinkPad R60/T60/R61/T61 + kb_models + + + + + IBM ThinkPad Z60m/Z60t/Z61m/Z61t + kb_models + + + + + Keytronic FlexPro + kb_models + + + + + Kinesis + kb_models + + + + + Logitech + kb_models + + + + + Logitech Access + kb_models + + + + + Logitech Cordless Desktop + kb_models + + + + + Logitech Cordless Desktop (alt.) + kb_models + + + + + Logitech Cordless Desktop EX110 + kb_models + + + + + Logitech Cordless Desktop LX-300 + kb_models + + + + + Logitech Cordless Desktop Navigator + kb_models + + + + + Logitech Cordless Desktop Optical + kb_models + + + + + Logitech Cordless Desktop Pro (2nd alt.) + kb_models + + + + + Logitech Cordless Desktop iTouch + kb_models + + + + + Logitech Cordless Freedom/Desktop Navigator + kb_models + + + + + Logitech G15 extra keys via G15daemon + kb_models + + + + + Logitech Internet + kb_models + + + + + Logitech Internet 350 + kb_models + + + + + Logitech Internet Navigator + kb_models + + + + + Logitech Ultra-X + kb_models + + + + + Logitech Ultra-X Cordless Media Desktop + kb_models + + + + + Logitech diNovo + kb_models + + + + + Logitech diNovo Edge + kb_models + + + + + Logitech iTouch + kb_models + + + + + Logitech iTouch Cordless Y-RB6 + kb_models + + + + + Logitech iTouch Internet Navigator SE + kb_models + + + + + Logitech iTouch Internet Navigator SE USB + kb_models + + + + + MacBook/MacBook Pro + kb_models + + + + + MacBook/MacBook Pro (intl.) + kb_models + + + + + Macintosh + kb_models + + + + + Macintosh Old + kb_models + + + + + Memorex MX1998 + kb_models + + + + + Memorex MX2500 EZ-Access + kb_models + + + + + Memorex MX2750 + kb_models + + + + + Microsoft Comfort Curve 2000 + kb_models + + + + + Microsoft Internet + kb_models + + + + + Microsoft Internet Pro (Swedish) + kb_models + + + + + Microsoft Natural + kb_models + + + + + Microsoft Natural Elite + kb_models + + + + + Microsoft Natural Ergonomic 4000 + kb_models + + + + + Microsoft Natural Pro OEM + kb_models + + + + + Microsoft Natural Pro USB/Internet Pro + kb_models + + + + + Microsoft Natural Pro/Internet Pro + kb_models + + + + + Microsoft Natural Wireless Ergonomic 7000 + kb_models + + + + + Microsoft Office Keyboard + kb_models + + + + + Microsoft Surface + kb_models + + + + + Microsoft Wireless Multimedia 1.0A + kb_models + + + + + NEC SK-1300 + kb_models + + + + + NEC SK-2500 + kb_models + + + + + NEC SK-6200 + kb_models + + + + + NEC SK-7100 + kb_models + + + + + Northgate OmniKey 101 + kb_models + + + + + OLPC + kb_models + + + + + Ortek Multimedia/Internet MCK-800 + kb_models + + + + + PC-98 + kb_models + + + + + Propeller Voyager KTEZ-1000 + kb_models + + + + + QTronix Scorpius 98N+ + kb_models + + + + + SVEN Ergonomic 2500 + kb_models + + + + + SVEN Slim 303 + kb_models + + + + + Samsung SDM 4500P + kb_models + + + + + Samsung SDM 4510P + kb_models + + + + + Sanwa Supply SKB-KG3 + kb_models + + + + + Silvercrest Multimedia Wireless + kb_models + + + + + SteelSeries Apex 300 (Apex RAW) + kb_models + + + + + Sun Type 6 (Japanese) + kb_models + + + + + Sun Type 6 USB (Japanese) + kb_models + + + + + Sun Type 6 USB (Unix) + kb_models + + + + + Sun Type 6/7 USB + kb_models + + + + + Sun Type 6/7 USB (European) + kb_models + + + + + Sun Type 7 USB + kb_models + + + + + Sun Type 7 USB (European) + kb_models + + + + + Sun Type 7 USB (Japanese)/Japanese 106-key + kb_models + + + + + Sun Type 7 USB (Unix) + kb_models + + + + + Super Power Multimedia + kb_models + + + + + Symplon PaceBook tablet + kb_models + + + + + Targa Visionary 811 + kb_models + + + + + Toshiba Satellite S3000 + kb_models + + + + + Truly Ergonomic 227 + kb_models + + + + + Truly Ergonomic 229 + kb_models + + + + + Truly Ergonomic Computer Keyboard Model 227 (Wide Alt keys) + kb_models + + + + + Truly Ergonomic Computer Keyboard Model 229 (Standard sized Alt keys, additional Super and Menu key) + kb_models + + + + + Trust Direct Access + kb_models + + + + + Trust Slimline + kb_models + + + + + Trust Wireless Classic + kb_models + + + + + TypeMatrix EZ-Reach 2020 + kb_models + + + + + TypeMatrix EZ-Reach 2030 PS2 + kb_models + + + + + TypeMatrix EZ-Reach 2030 USB + kb_models + + + + + TypeMatrix EZ-Reach 2030 USB (102/105:EU mode) + kb_models + + + + + TypeMatrix EZ-Reach 2030 USB (106:JP mode) + kb_models + + + + + Unitek KB-1925 + kb_models + + + + + ViewSonic KU-306 Internet + kb_models + + + + + Winbook Model XP5 + kb_models + + + + + Yahoo! Internet + kb_models + + + + + eMachines m6800 laptop + kb_models + + + + + Afghani + kb_layouts + + + + + Albanian + kb_layouts + + + + + Amharic + kb_layouts + + + + + Arabic + kb_layouts + + + + + Arabic (Morocco) + kb_layouts + + + + + Arabic (Syria) + kb_layouts + + + + + Armenian + kb_layouts + + + + + Azerbaijani + kb_layouts + + + + + Bambara + kb_layouts + + + + + Bangla + kb_layouts + + + + + Belarusian + kb_layouts + + + + + Belgian + kb_layouts + + + + + Bosnian + kb_layouts + + + + + Braille + kb_layouts + + + + + Bulgarian + kb_layouts + + + + + Burmese + kb_layouts + + + + + Chinese + kb_layouts + + + + + Croatian + kb_layouts + + + + + Czech + kb_layouts + + + + + Danish + kb_layouts + + + + + Dhivehi + kb_layouts + + + + + Dutch + kb_layouts + + + + + Dzongkha + kb_layouts + + + + + English (Australian) + kb_layouts + + + + + English (Cameroon) + kb_layouts + + + + + English (Ghana) + kb_layouts + + + + + English (Nigeria) + kb_layouts + + + + + English (South Africa) + kb_layouts + + + + + English (UK) + kb_layouts + + + + + English (US) + kb_layouts + + + + + Esperanto + kb_layouts + + + + + Estonian + kb_layouts + + + + + Faroese + kb_layouts + + + + + Filipino + kb_layouts + + + + + Finnish + kb_layouts + + + + + French + kb_layouts + + + + + French (Canada) + kb_layouts + + + + + French (Democratic Republic of the Congo) + kb_layouts + + + + + French (Guinea) + kb_layouts + + + + + French (Togo) + kb_layouts + + + + + Georgian + kb_layouts + + + + + German + kb_layouts + + + + + German (Austria) + kb_layouts + + + + + German (Switzerland) + kb_layouts + + + + + Greek + kb_layouts + + + + + Hebrew + kb_layouts + + + + + Hungarian + kb_layouts + + + + + Icelandic + kb_layouts + + + + + Indian + kb_layouts + + + + + Indonesian (Arab Melayu, phonetic) + kb_layouts + + + + + Indonesian (Javanese) + kb_layouts + + + + + Iraqi + kb_layouts + + + + + Irish + kb_layouts + + + + + Italian + kb_layouts + + + + + Japanese + kb_layouts + + + + + Japanese (PC-98) + kb_layouts + + + + + Kabylian (azerty layout, no dead keys) + kb_layouts + + + + + Kazakh + kb_layouts + + + + + Khmer (Cambodia) + kb_layouts + + + + + Korean + kb_layouts + + + + + Kyrgyz + kb_layouts + + + + + Lao + kb_layouts + + + + + Latvian + kb_layouts + + + + + Lithuanian + kb_layouts + + + + + Macedonian + kb_layouts + + + + + Malay (Jawi, Arabic Keyboard) + kb_layouts + + + + + Maltese + kb_layouts + + + + + Maori + kb_layouts + + + + + Moldavian + kb_layouts + + + + + Mongolian + kb_layouts + + + + + Montenegrin + kb_layouts + + + + + Nepali + kb_layouts + + + + + Norwegian + kb_layouts + + + + + Persian + kb_layouts + + + + + Polish + kb_layouts + + + + + Portuguese + kb_layouts + + + + + Portuguese (Brazil) + kb_layouts + + + + + Romanian + kb_layouts + + + + + Russian + kb_layouts + + + + + Serbian + kb_layouts + + + + + Sinhala (phonetic) + kb_layouts + + + + + Slovak + kb_layouts + + + + + Slovenian + kb_layouts + + + + + Spanish + kb_layouts + + + + + Spanish (Latin American) + kb_layouts + + + + + Swahili (Kenya) + kb_layouts + + + + + Swahili (Tanzania) + kb_layouts + + + + + Swedish + kb_layouts + + + + + Taiwanese + kb_layouts + + + + + Tajik + kb_layouts + + + + + Thai + kb_layouts + + + + + Tswana + kb_layouts + + + + + Turkish + kb_layouts + + + + + Turkmen + kb_layouts + + + + + Ukrainian + kb_layouts + + + + + Urdu (Pakistan) + kb_layouts + + + + + Uzbek + kb_layouts + + + + + Vietnamese + kb_layouts + + + + + Wolof + kb_layouts + + + + + Akan + kb_variants + + + + + Albanian (Plisi) + kb_variants + + + + + Albanian (Veqilharxhi) + kb_variants + + + + + Arabic (AZERTY) + kb_variants + + + + + Arabic (AZERTY, Eastern Arabic numerals) + kb_variants + + + + + Arabic (Algeria) + kb_variants + + + + + Arabic (Buckwalter) + kb_variants + + + + + Arabic (Eastern Arabic numerals) + kb_variants + + + + + Arabic (Macintosh) + kb_variants + + + + + Arabic (OLPC) + kb_variants + + + + + Arabic (Pakistan) + kb_variants + + + + + Arabic (QWERTY) + kb_variants + + + + + Arabic (QWERTY, Eastern Arabic numerals) + kb_variants + + + + + Armenian (alt. eastern) + kb_variants + + + + + Armenian (alt. phonetic) + kb_variants + + + + + Armenian (eastern) + kb_variants + + + + + Armenian (phonetic) + kb_variants + + + + + Armenian (western) + kb_variants + + + + + Asturian (Spain, with bottom-dot H and L) + kb_variants + + + + + Avatime + kb_variants + + + + + Azerbaijani (Cyrillic) + kb_variants + + + + + Bangla (India) + kb_variants + + + + + Bangla (India, Baishakhi Inscript) + kb_variants + + + + + Bangla (India, Baishakhi) + kb_variants + + + + + Bangla (India, Bornona) + kb_variants + + + + + Bangla (India, Gitanjali) + kb_variants + + + + + Bangla (India, Probhat) + kb_variants + + + + + Bangla (Probhat) + kb_variants + + + + + Bashkirian + kb_variants + + + + + Belarusian (Latin) + kb_variants + + + + + Belarusian (intl.) + kb_variants + + + + + Belarusian (legacy) + kb_variants + + + + + Belgian (ISO, alt.) + kb_variants + + + + + Belgian (Latin-9 only, alt.) + kb_variants + + + + + Belgian (Sun dead keys) + kb_variants + + + + + Belgian (Sun dead keys, alt.) + kb_variants + + + + + Belgian (Wang 724 AZERTY) + kb_variants + + + + + Belgian (alt.) + kb_variants + + + + + Belgian (no dead keys) + kb_variants + + + + + Berber (Morocco, Tifinagh alt.) + kb_variants + + + + + Berber (Morocco, Tifinagh extended phonetic) + kb_variants + + + + + Berber (Morocco, Tifinagh extended) + kb_variants + + + + + Berber (Morocco, Tifinagh phonetic) + kb_variants + + + + + Berber (Morocco, Tifinagh phonetic, alt.) + kb_variants + + + + + Berber (Morocco, Tifinagh) + kb_variants + + + + + Bosnian (US) + kb_variants + + + + + Bosnian (US, with Bosnian digraphs) + kb_variants + + + + + Bosnian (with Bosnian digraphs) + kb_variants + + + + + Bosnian (with guillemets) + kb_variants + + + + + Braille (left-handed inverted thumb) + kb_variants + + + + + Braille (left-handed) + kb_variants + + + + + Braille (right-handed inverted thumb) + kb_variants + + + + + Braille (right-handed) + kb_variants + + + + + Bulgarian (enhanced) + kb_variants + + + + + Bulgarian (new phonetic) + kb_variants + + + + + Bulgarian (traditional phonetic) + kb_variants + + + + + Burmese Zawgyi + kb_variants + + + + + Cameroon (AZERTY, intl.) + kb_variants + + + + + Cameroon (Dvorak, intl.) + kb_variants + + + + + Cameroon Multilingual (QWERTY, intl.) + kb_variants + + + + + Canadian (intl.) + kb_variants + + + + + Canadian (intl., 1st part) + kb_variants + + + + + Canadian (intl., 2nd part) + kb_variants + + + + + Catalan (Spain, with middle-dot L) + kb_variants + + + + + Cherokee + kb_variants + + + + + Chuvash + kb_variants + + + + + Chuvash (Latin) + kb_variants + + + + + CloGaelach + kb_variants + + + + + Crimean Tatar (Turkish Alt-Q) + kb_variants + + + + + Crimean Tatar (Turkish F) + kb_variants + + + + + Crimean Tatar (Turkish Q) + kb_variants + + + + + Croatian (US) + kb_variants + + + + + Croatian (US, with Croatian digraphs) + kb_variants + + + + + Croatian (with Croatian digraphs) + kb_variants + + + + + Croatian (with guillemets) + kb_variants + + + + + Czech (QWERTY) + kb_variants + + + + + Czech (QWERTY, Macintosh) + kb_variants + + + + + Czech (QWERTY, extended backslash) + kb_variants + + + + + Czech (UCW, only accented letters) + kb_variants + + + + + Czech (US, Dvorak, UCW support) + kb_variants + + + + + Czech (with &lt;|&gt; key) + kb_variants + + + + + Danish (Dvorak) + kb_variants + + + + + Danish (Macintosh) + kb_variants + + + + + Danish (Macintosh, no dead keys) + kb_variants + + + + + Danish (Windows) + kb_variants + + + + + Danish (no dead keys) + kb_variants + + + + + Dutch (Macintosh) + kb_variants + + + + + Dutch (Sun dead keys) + kb_variants + + + + + Dutch (standard) + kb_variants + + + + + English (Canada) + kb_variants + + + + + English (Colemak) + kb_variants + + + + + English (Dvorak) + kb_variants + + + + + English (Dvorak, alt. intl.) + kb_variants + + + + + English (Dvorak, intl., with dead keys) + kb_variants + + + + + English (Dvorak, left-handed) + kb_variants + + + + + English (Dvorak, right-handed) + kb_variants + + + + + English (Ghana, GILLBT) + kb_variants + + + + + English (Ghana, multilingual) + kb_variants + + + + + English (India, with rupee) + kb_variants + + + + + English (Macintosh) + kb_variants + + + + + English (Mali, US, Macintosh) + kb_variants + + + + + English (Mali, US, intl.) + kb_variants + + + + + English (Norman) + kb_variants + + + + + English (UK, Colemak) + kb_variants + + + + + English (UK, Dvorak) + kb_variants + + + + + English (UK, Dvorak, with UK punctuation) + kb_variants + + + + + English (UK, Macintosh) + kb_variants + + + + + English (UK, Macintosh, intl.) + kb_variants + + + + + English (UK, extended, Windows) + kb_variants + + + + + English (UK, intl., with dead keys) + kb_variants + + + + + English (US, Symbolic) + kb_variants + + + + + English (US, alt. intl.) + kb_variants + + + + + English (US, euro on 5) + kb_variants + + + + + English (US, intl., with dead keys) + kb_variants + + + + + English (Workman) + kb_variants + + + + + English (Workman, intl., with dead keys) + kb_variants + + + + + English (classic Dvorak) + kb_variants + + + + + English (intl., with AltGr dead keys) + kb_variants + + + + + English (programmer Dvorak) + kb_variants + + + + + English (the divide/multiply toggle the layout) + kb_variants + + + + + Esperanto (Brazil, Nativo) + kb_variants + + + + + Esperanto (Portugal, Nativo) + kb_variants + + + + + Esperanto (legacy) + kb_variants + + + + + Estonian (Dvorak) + kb_variants + + + + + Estonian (US) + kb_variants + + + + + Estonian (no dead keys) + kb_variants + + + + + Ewe + kb_variants + + + + + Faroese (no dead keys) + kb_variants + + + + + Filipino (Capewell-Dvorak, Baybayin) + kb_variants + + + + + Filipino (Capewell-Dvorak, Latin) + kb_variants + + + + + Filipino (Capewell-QWERF 2006, Baybayin) + kb_variants + + + + + Filipino (Capewell-QWERF 2006, Latin) + kb_variants + + + + + Filipino (Colemak, Baybayin) + kb_variants + + + + + Filipino (Colemak, Latin) + kb_variants + + + + + Filipino (Dvorak, Baybayin) + kb_variants + + + + + Filipino (Dvorak, Latin) + kb_variants + + + + + Filipino (QWERTY, Baybayin) + kb_variants + + + + + Finnish (Macintosh) + kb_variants + + + + + Finnish (Windows) + kb_variants + + + + + Finnish (classic) + kb_variants + + + + + Finnish (classic, no dead keys) + kb_variants + + + + + French (AZERTY) + kb_variants + + + + + French (AZERTY, AFNOR) + kb_variants + + + + + French (BEPO) + kb_variants + + + + + French (BEPO, AFNOR) + kb_variants + + + + + French (BEPO, Latin-9 only) + kb_variants + + + + + French (Breton) + kb_variants + + + + + French (Cameroon) + kb_variants + + + + + French (Canada, Dvorak) + kb_variants + + + + + French (Canada, legacy) + kb_variants + + + + + French (Dvorak) + kb_variants + + + + + French (Macintosh) + kb_variants + + + + + French (Mali, alt.) + kb_variants + + + + + French (Morocco) + kb_variants + + + + + French (Sun dead keys) + kb_variants + + + + + French (Switzerland) + kb_variants + + + + + French (Switzerland, Macintosh) + kb_variants + + + + + French (Switzerland, Sun dead keys) + kb_variants + + + + + French (Switzerland, no dead keys) + kb_variants + + + + + French (US) + kb_variants + + + + + French (alt.) + kb_variants + + + + + French (alt., Latin-9 only) + kb_variants + + + + + French (alt., Sun dead keys) + kb_variants + + + + + French (alt., no dead keys) + kb_variants + + + + + French (legacy, alt.) + kb_variants + + + + + French (legacy, alt., Sun dead keys) + kb_variants + + + + + French (legacy, alt., no dead keys) + kb_variants + + + + + French (no dead keys) + kb_variants + + + + + Friulian (Italy) + kb_variants + + + + + Fula + kb_variants + + + + + Ga + kb_variants + + + + + Georgian (France, AZERTY Tskapo) + kb_variants + + + + + Georgian (Italy) + kb_variants + + + + + Georgian (MESS) + kb_variants + + + + + Georgian (ergonomic) + kb_variants + + + + + German (Austria, Macintosh) + kb_variants + + + + + German (Austria, Sun dead keys) + kb_variants + + + + + German (Austria, no dead keys) + kb_variants + + + + + German (Dvorak) + kb_variants + + + + + German (E1) + kb_variants + + + + + German (E2) + kb_variants + + + + + German (Macintosh) + kb_variants + + + + + German (Macintosh, no dead keys) + kb_variants + + + + + German (Neo 2) + kb_variants + + + + + German (QWERTY) + kb_variants + + + + + German (Sun dead keys) + kb_variants + + + + + German (Switzerland, Macintosh) + kb_variants + + + + + German (Switzerland, Sun dead keys) + kb_variants + + + + + German (Switzerland, legacy) + kb_variants + + + + + German (Switzerland, no dead keys) + kb_variants + + + + + German (T3) + kb_variants + + + + + German (US) + kb_variants + + + + + German (dead acute) + kb_variants + + + + + German (dead grave acute) + kb_variants + + + + + German (dead tilde) + kb_variants + + + + + German (no dead keys) + kb_variants + + + + + Greek (extended) + kb_variants + + + + + Greek (no dead keys) + kb_variants + + + + + Greek (polytonic) + kb_variants + + + + + Greek (simple) + kb_variants + + + + + Gujarati + kb_variants + + + + + Hanyu Pinyin (with AltGr dead keys) + kb_variants + + + + + Hausa (Ghana) + kb_variants + + + + + Hausa (Nigeria) + kb_variants + + + + + Hawaiian + kb_variants + + + + + Hebrew (Biblical, Tiro) + kb_variants + + + + + Hebrew (lyx) + kb_variants + + + + + Hebrew (phonetic) + kb_variants + + + + + Hindi (Bolnagri) + kb_variants + + + + + Hindi (KaGaPa, phonetic) + kb_variants + + + + + Hindi (Wx) + kb_variants + + + + + Hungarian (QWERTY) + kb_variants + + + + + Hungarian (QWERTY, 101-key, comma, dead keys) + kb_variants + + + + + Hungarian (QWERTY, 101-key, comma, no dead keys) + kb_variants + + + + + Hungarian (QWERTY, 101-key, dot, dead keys) + kb_variants + + + + + Hungarian (QWERTY, 101-key, dot, no dead keys) + kb_variants + + + + + Hungarian (QWERTY, 102-key, comma, dead keys) + kb_variants + + + + + Hungarian (QWERTY, 102-key, comma, no dead keys) + kb_variants + + + + + Hungarian (QWERTY, 102-key, dot, dead keys) + kb_variants + + + + + Hungarian (QWERTY, 102-key, dot, no dead keys) + kb_variants + + + + + Hungarian (QWERTZ, 101-key, comma, dead keys) + kb_variants + + + + + Hungarian (QWERTZ, 101-key, comma, no dead keys) + kb_variants + + + + + Hungarian (QWERTZ, 101-key, dot, dead keys) + kb_variants + + + + + Hungarian (QWERTZ, 101-key, dot, no dead keys) + kb_variants + + + + + Hungarian (QWERTZ, 102-key, comma, dead keys) + kb_variants + + + + + Hungarian (QWERTZ, 102-key, comma, no dead keys) + kb_variants + + + + + Hungarian (QWERTZ, 102-key, dot, dead keys) + kb_variants + + + + + Hungarian (QWERTZ, 102-key, dot, no dead keys) + kb_variants + + + + + Hungarian (no dead keys) + kb_variants + + + + + Hungarian (standard) + kb_variants + + + + + Icelandic (Dvorak) + kb_variants + + + + + Icelandic (Macintosh) + kb_variants + + + + + Icelandic (Macintosh, legacy) + kb_variants + + + + + Icelandic (Sun dead keys) + kb_variants + + + + + Icelandic (no dead keys) + kb_variants + + + + + Igbo + kb_variants + + + + + Indic (phonetic, IPA) + kb_variants + + + + + Indonesian (Arab Melayu, extended phonetic) + kb_variants + + + + + Inuktitut + kb_variants + + + + + Irish (UnicodeExpert) + kb_variants + + + + + Italian (IBM 142) + kb_variants + + + + + Italian (Macintosh) + kb_variants + + + + + Italian (US) + kb_variants + + + + + Italian (Windows) + kb_variants + + + + + Italian (intl., with dead keys) + kb_variants + + + + + Italian (no dead keys) + kb_variants + + + + + Japanese (Dvorak) + kb_variants + + + + + Japanese (Kana 86) + kb_variants + + + + + Japanese (Kana) + kb_variants + + + + + Japanese (Macintosh) + kb_variants + + + + + Japanese (OADG 109A) + kb_variants + + + + + Kabylian (Algeria, Tifinagh) + kb_variants + + + + + Kabylian (azerty layout, with dead keys) + kb_variants + + + + + Kabylian (qwerty-gb layout, with dead keys) + kb_variants + + + + + Kabylian (qwerty-us layout, with dead keys) + kb_variants + + + + + Kalmyk + kb_variants + + + + + Kannada + kb_variants + + + + + Kannada (KaGaPa, phonetic) + kb_variants + + + + + Kashubian + kb_variants + + + + + Kazakh (Latin) + kb_variants + + + + + Kazakh (extended) + kb_variants + + + + + Kazakh (with Russian) + kb_variants + + + + + Kikuyu + kb_variants + + + + + Komi + kb_variants + + + + + Korean (101/104-key compatible) + kb_variants + + + + + Kurdish (Iran, Arabic-Latin) + kb_variants + + + + + Kurdish (Iran, F) + kb_variants + + + + + Kurdish (Iran, Latin Alt-Q) + kb_variants + + + + + Kurdish (Iran, Latin Q) + kb_variants + + + + + Kurdish (Iraq, Arabic-Latin) + kb_variants + + + + + Kurdish (Iraq, F) + kb_variants + + + + + Kurdish (Iraq, Latin Alt-Q) + kb_variants + + + + + Kurdish (Iraq, Latin Q) + kb_variants + + + + + Kurdish (Syria, F) + kb_variants + + + + + Kurdish (Syria, Latin Alt-Q) + kb_variants + + + + + Kurdish (Syria, Latin Q) + kb_variants + + + + + Kurdish (Turkey, F) + kb_variants + + + + + Kurdish (Turkey, Latin Alt-Q) + kb_variants + + + + + Kurdish (Turkey, Latin Q) + kb_variants + + + + + Kyrgyz (phonetic) + kb_variants + + + + + Lao (STEA) + kb_variants + + + + + Latvian (F) + kb_variants + + + + + Latvian (adapted) + kb_variants + + + + + Latvian (apostrophe) + kb_variants + + + + + Latvian (ergonomic, ŪGJRMV) + kb_variants + + + + + Latvian (modern) + kb_variants + + + + + Latvian (tilde) + kb_variants + + + + + Lithuanian (IBM LST 1205-92) + kb_variants + + + + + Lithuanian (LEKP) + kb_variants + + + + + Lithuanian (LEKPa) + kb_variants + + + + + Lithuanian (US) + kb_variants + + + + + Lithuanian (standard) + kb_variants + + + + + Lower Sorbian + kb_variants + + + + + Lower Sorbian (QWERTZ) + kb_variants + + + + + Macedonian (no dead keys) + kb_variants + + + + + Malay (Jawi, phonetic) + kb_variants + + + + + Malayalam + kb_variants + + + + + Malayalam (Lalitha) + kb_variants + + + + + Malayalam (enhanced Inscript, with rupee) + kb_variants + + + + + Maltese (UK, with AltGr overrides) + kb_variants + + + + + Maltese (US layout with AltGr overrides) + kb_variants + + + + + Maltese (US) + kb_variants + + + + + Manipuri (Eeyek) + kb_variants + + + + + Marathi (KaGaPa, phonetic) + kb_variants + + + + + Marathi (enhanced Inscript) + kb_variants + + + + + Mari + kb_variants + + + + + Mmuock + kb_variants + + + + + Moldavian (Gagauz) + kb_variants + + + + + Mongolian (Bichig) + kb_variants + + + + + Mongolian (Galik) + kb_variants + + + + + Mongolian (Manchu Galik) + kb_variants + + + + + Mongolian (Manchu) + kb_variants + + + + + Mongolian (Todo Galik) + kb_variants + + + + + Mongolian (Todo) + kb_variants + + + + + Mongolian (Xibe) + kb_variants + + + + + Montenegrin (Cyrillic) + kb_variants + + + + + Montenegrin (Cyrillic, ZE and ZHE swapped) + kb_variants + + + + + Montenegrin (Cyrillic, with guillemets) + kb_variants + + + + + Montenegrin (Latin, QWERTY) + kb_variants + + + + + Montenegrin (Latin, Unicode) + kb_variants + + + + + Montenegrin (Latin, Unicode, QWERTY) + kb_variants + + + + + Montenegrin (Latin, with guillemets) + kb_variants + + + + + Northern Saami (Finland) + kb_variants + + + + + Northern Saami (Norway) + kb_variants + + + + + Northern Saami (Norway, no dead keys) + kb_variants + + + + + Northern Saami (Sweden) + kb_variants + + + + + Norwegian (Colemak) + kb_variants + + + + + Norwegian (Dvorak) + kb_variants + + + + + Norwegian (Macintosh) + kb_variants + + + + + Norwegian (Macintosh, no dead keys) + kb_variants + + + + + Norwegian (Windows) + kb_variants + + + + + Norwegian (no dead keys) + kb_variants + + + + + Occitan + kb_variants + + + + + Ogham + kb_variants + + + + + Ogham (IS434) + kb_variants + + + + + Ol Chiki + kb_variants + + + + + Oriya + kb_variants + + + + + Ossetian (Georgia) + kb_variants + + + + + Ossetian (Windows) + kb_variants + + + + + Ossetian (legacy) + kb_variants + + + + + Pannonian Rusyn + kb_variants + + + + + Pashto + kb_variants + + + + + Pashto (Afghanistan, OLPC) + kb_variants + + + + + Persian (Afghanistan, Dari OLPC) + kb_variants + + + + + Persian (with Persian keypad) + kb_variants + + + + + Polish (British keyboard) + kb_variants + + + + + Polish (Dvorak) + kb_variants + + + + + Polish (Dvorak, with Polish quotes on key 1) + kb_variants + + + + + Polish (Dvorak, with Polish quotes on quotemark key) + kb_variants + + + + + Polish (QWERTZ) + kb_variants + + + + + Polish (legacy) + kb_variants + + + + + Polish (programmer Dvorak) + kb_variants + + + + + Portuguese (Brazil, Dvorak) + kb_variants + + + + + Portuguese (Brazil, IBM/Lenovo ThinkPad) + kb_variants + + + + + Portuguese (Brazil, Nativo for US keyboards) + kb_variants + + + + + Portuguese (Brazil, Nativo) + kb_variants + + + + + Portuguese (Brazil, no dead keys) + kb_variants + + + + + Portuguese (Macintosh) + kb_variants + + + + + Portuguese (Macintosh, Sun dead keys) + kb_variants + + + + + Portuguese (Macintosh, no dead keys) + kb_variants + + + + + Portuguese (Nativo for US keyboards) + kb_variants + + + + + Portuguese (Nativo) + kb_variants + + + + + Portuguese (Sun dead keys) + kb_variants + + + + + Portuguese (no dead keys) + kb_variants + + + + + Punjabi (Gurmukhi Jhelum) + kb_variants + + + + + Punjabi (Gurmukhi) + kb_variants + + + + + Romanian (Germany) + kb_variants + + + + + Romanian (Germany, no dead keys) + kb_variants + + + + + Romanian (Windows) + kb_variants + + + + + Romanian (cedilla) + kb_variants + + + + + Romanian (standard cedilla) + kb_variants + + + + + Romanian (standard) + kb_variants + + + + + Russian (Belarus) + kb_variants + + + + + Russian (Czech, phonetic) + kb_variants + + + + + Russian (DOS) + kb_variants + + + + + Russian (Georgia) + kb_variants + + + + + Russian (Germany, phonetic) + kb_variants + + + + + Russian (Kazakhstan, with Kazakh) + kb_variants + + + + + Russian (Macintosh) + kb_variants + + + + + Russian (Poland, phonetic Dvorak) + kb_variants + + + + + Russian (Sweden, phonetic) + kb_variants + + + + + Russian (Sweden, phonetic, no dead keys) + kb_variants + + + + + Russian (US, phonetic) + kb_variants + + + + + Russian (Ukraine, standard RSTU) + kb_variants + + + + + Russian (legacy) + kb_variants + + + + + Russian (phonetic) + kb_variants + + + + + Russian (phonetic, AZERTY) + kb_variants + + + + + Russian (phonetic, Dvorak) + kb_variants + + + + + Russian (phonetic, French) + kb_variants + + + + + Russian (phonetic, Windows) + kb_variants + + + + + Russian (phonetic, YAZHERTY) + kb_variants + + + + + Russian (typewriter) + kb_variants + + + + + Russian (typewriter, legacy) + kb_variants + + + + + Saisiyat (Taiwan) + kb_variants + + + + + Samogitian + kb_variants + + + + + Sanskrit (KaGaPa, phonetic) + kb_variants + + + + + Serbian (Cyrillic, ZE and ZHE swapped) + kb_variants + + + + + Serbian (Cyrillic, with guillemets) + kb_variants + + + + + Serbian (Latin) + kb_variants + + + + + Serbian (Latin, QWERTY) + kb_variants + + + + + Serbian (Latin, Unicode) + kb_variants + + + + + Serbian (Latin, Unicode, QWERTY) + kb_variants + + + + + Serbian (Latin, with guillemets) + kb_variants + + + + + Serbian (Russia) + kb_variants + + + + + Serbo-Croatian (US) + kb_variants + + + + + Sicilian + kb_variants + + + + + Silesian + kb_variants + + + + + Sindhi + kb_variants + + + + + Sinhala (US) + kb_variants + + + + + Slovak (QWERTY) + kb_variants + + + + + Slovak (QWERTY, extended backslash) + kb_variants + + + + + Slovak (extended backslash) + kb_variants + + + + + Slovenian (US) + kb_variants + + + + + Slovenian (with guillemets) + kb_variants + + + + + Spanish (Dvorak) + kb_variants + + + + + Spanish (Latin American, Colemak for gaming) + kb_variants + + + + + Spanish (Latin American, Colemak) + kb_variants + + + + + Spanish (Latin American, Dvorak) + kb_variants + + + + + Spanish (Latin American, Sun dead keys) + kb_variants + + + + + Spanish (Latin American, dead tilde) + kb_variants + + + + + Spanish (Latin American, no dead keys) + kb_variants + + + + + Spanish (Macintosh) + kb_variants + + + + + Spanish (Sun dead keys) + kb_variants + + + + + Spanish (Windows) + kb_variants + + + + + Spanish (dead tilde) + kb_variants + + + + + Spanish (no dead keys) + kb_variants + + + + + Swedish (Dvorak) + kb_variants + + + + + Swedish (Dvorak, intl.) + kb_variants + + + + + Swedish (Macintosh) + kb_variants + + + + + Swedish (Svdvorak) + kb_variants + + + + + Swedish (US) + kb_variants + + + + + Swedish (no dead keys) + kb_variants + + + + + Swedish Sign Language + kb_variants + + + + + Syriac + kb_variants + + + + + Syriac (phonetic) + kb_variants + + + + + Taiwanese (indigenous) + kb_variants + + + + + Tajik (legacy) + kb_variants + Тоҷикӣ (красіво) + + + + Tamil (Inscript) + kb_variants + + + + + Tamil (Sri Lanka, TamilNet '99) + kb_variants + + + + + Tamil (Sri Lanka, TamilNet '99, TAB encoding) + kb_variants + + + + + Tamil (TamilNet '99 with Tamil numerals) + kb_variants + + + + + Tamil (TamilNet '99) + kb_variants + + + + + Tamil (TamilNet '99, TAB encoding) + kb_variants + + + + + Tamil (TamilNet '99, TSCII encoding) + kb_variants + + + + + Tatar + kb_variants + + + + + Telugu + kb_variants + + + + + Telugu (KaGaPa, phonetic) + kb_variants + + + + + Telugu (Sarala) + kb_variants + + + + + Thai (Pattachote) + kb_variants + + + + + Thai (TIS-820.2538) + kb_variants + + + + + Tibetan + kb_variants + + + + + Tibetan (with ASCII numerals) + kb_variants + + + + + Turkish (Alt-Q) + kb_variants + + + + + Turkish (F) + kb_variants + + + + + Turkish (Germany) + kb_variants + + + + + Turkish (Sun dead keys) + kb_variants + + + + + Turkish (intl., with dead keys) + kb_variants + + + + + Turkmen (Alt-Q) + kb_variants + + + + + Udmurt + kb_variants + + + + + Ukrainian (Windows) + kb_variants + + + + + Ukrainian (homophonic) + kb_variants + + + + + Ukrainian (legacy) + kb_variants + + + + + Ukrainian (phonetic) + kb_variants + + + + + Ukrainian (standard RSTU) + kb_variants + + + + + Ukrainian (typewriter) + kb_variants + + + + + Urdu (Pakistan, CRULP) + kb_variants + + + + + Urdu (Pakistan, NLA) + kb_variants + + + + + Urdu (Windows) + kb_variants + + + + + Urdu (alt. phonetic) + kb_variants + + + + + Urdu (phonetic) + kb_variants + + + + + Uyghur + kb_variants + + + + + Uzbek (Afghanistan) + kb_variants + + + + + Uzbek (Afghanistan, OLPC) + kb_variants + + + + + Uzbek (Latin) + kb_variants + + + + + Vietnamese (French) + kb_variants + + + + + Vietnamese (US) + kb_variants + + + + + Yakut + kb_variants + + + + + Yoruba + kb_variants + + + + From 1a5fa36fb68441ecc797410937c60c4cdbdd1e9b Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Sun, 1 Nov 2020 12:42:58 +0100 Subject: [PATCH 11/53] i18n: build keyboard translations This is the Wrong Thing To Do, but we'll do it for now: build the keyboard translations into the executable. In the medium term they should move to the modules that use them, with the re-vamp of how translation changes are signalled. --- src/calamares/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/calamares/CMakeLists.txt b/src/calamares/CMakeLists.txt index 94abb9f54..abea69a26 100644 --- a/src/calamares/CMakeLists.txt +++ b/src/calamares/CMakeLists.txt @@ -42,7 +42,7 @@ set( calamares_i18n_qrc_content "" ) # calamares and qt language files foreach( lang ${CALAMARES_TRANSLATION_LANGUAGES} ) - foreach( tlsource "calamares_${lang}" "tz_${lang}" ) + foreach( tlsource "calamares_${lang}" "tz_${lang}" "kb_${lang}" ) if( EXISTS "${CMAKE_SOURCE_DIR}/lang/${tlsource}.ts" ) set( calamares_i18n_qrc_content "${calamares_i18n_qrc_content}${tlsource}.qm\n" ) list( APPEND TS_FILES "${CMAKE_SOURCE_DIR}/lang/${tlsource}.ts" ) From f088efdf848fd986a1f803e9554c804721ecf777 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Sun, 1 Nov 2020 13:46:32 +0100 Subject: [PATCH 12/53] [keyboard] Re-jig translation extraction - Use classes to prompt lupdate to extract with a better context (e.g. the class name, rather than plain "QObject") so that the translation-lookup can use the named context. - Add hard-coded "default" variant - Add totally bogus Tajik translations, for testing purposes --- lang/kb_en.ts | 3556 ++++++++--------- lang/kb_tg.ts | 3562 +++++++++--------- src/modules/keyboard/Config.cpp | 1 + src/modules/keyboard/KeyboardData_p.cxxtr | 1559 ++++---- src/modules/keyboard/KeyboardLayoutModel.cpp | 12 + src/modules/keyboard/KeyboardLayoutModel.h | 4 + src/modules/keyboard/layout-extractor.py | 8 +- 7 files changed, 4379 insertions(+), 4323 deletions(-) diff --git a/lang/kb_en.ts b/lang/kb_en.ts index 11e29c61a..08dc54905 100644 --- a/lang/kb_en.ts +++ b/lang/kb_en.ts @@ -2,4605 +2,4617 @@ - QObject + kb_layouts - - A4Tech KB-21 - kb_models - - - - - A4Tech KBS-8 - kb_models - - - - - A4Tech Wireless Desktop RFKB-23 - kb_models - - - - - Acer AirKey V - kb_models - - - - - Acer C300 - kb_models - - - - - Acer Ferrari 4000 - kb_models - - - - - Acer laptop - kb_models - - - - - Advance Scorpius KI - kb_models - - - - - Apple - kb_models - - - - - Apple Aluminium (ANSI) - kb_models - - - - - Apple Aluminium (ISO) - kb_models - - - - - Apple Aluminium (JIS) - kb_models - - - - - Apple laptop - kb_models - - - - - Asus laptop - kb_models - - - - - Azona RF2300 wireless Internet - kb_models - - - - - BTC 5090 - kb_models - - - - - BTC 5113RF Multimedia - kb_models - - - - - BTC 5126T - kb_models - - - - - BTC 6301URF - kb_models - - - - - BTC 9000 - kb_models - - - - - BTC 9000A - kb_models - - - - - BTC 9001AH - kb_models - - - - - BTC 9019U - kb_models - - - - - BTC 9116U Mini Wireless Internet and Gaming - kb_models - - - - - BenQ X-Touch - kb_models - - - - - BenQ X-Touch 730 - kb_models - - - - - BenQ X-Touch 800 - kb_models - - - - - Brother Internet - kb_models - - - - - Cherry B.UNLIMITED - kb_models - - - - - Cherry Blue Line CyBo@rd - kb_models - - - - - Cherry Blue Line CyBo@rd (alt.) - kb_models - - - - - Cherry CyBo@rd USB-Hub - kb_models - - - - - Cherry CyMotion Expert - kb_models - - - - - Cherry CyMotion Master Linux - kb_models - - - - - Cherry CyMotion Master XPress - kb_models - - - - - Chicony Internet - kb_models - - - - - Chicony KB-9885 - kb_models - - - - - Chicony KU-0108 - kb_models - - - - - Chicony KU-0420 - kb_models - - - - - Chromebook - kb_models - - - - - Classmate PC - kb_models - - - - - Compaq Armada laptop - kb_models - - - - - Compaq Easy Access - kb_models - - - - - Compaq Internet (13 keys) - kb_models - - - - - Compaq Internet (18 keys) - kb_models - - - - - Compaq Internet (7 keys) - kb_models - - - - - Compaq Presario laptop - kb_models - - - - - Compaq iPaq - kb_models - - - - - Creative Desktop Wireless 7000 - kb_models - - - - - DTK2000 - kb_models - - - - - Dell - kb_models - - - - - Dell 101-key PC - kb_models - - - - - Dell Inspiron 6000/8000 laptop - kb_models - - - - - Dell Latitude laptop - kb_models - - - - - Dell Precision M laptop - kb_models - - - - - Dell Precision M65 laptop - kb_models - - - - - Dell SK-8125 - kb_models - - - - - Dell SK-8135 - kb_models - - - - - Dell USB Multimedia - kb_models - - - - - Dexxa Wireless Desktop - kb_models - - - - - Diamond 9801/9802 - kb_models - - - - - Ennyah DKB-1008 - kb_models - - - - - Everex STEPnote - kb_models - - - - - FL90 - kb_models - - - - - Fujitsu-Siemens Amilo laptop - kb_models - - - - - Generic 101-key PC - kb_models - - - - - Generic 102-key PC - kb_models - - - - - Generic 104-key PC - kb_models - - - - - Generic 104-key PC with L-shaped Enter key - kb_models - - - - - Generic 105-key PC - kb_models - - - - - Generic 86-key PC - kb_models - - - - - Genius Comfy KB-12e - kb_models - - - - - Genius Comfy KB-16M/Multimedia KWD-910 - kb_models - - - - - Genius Comfy KB-21e-Scroll - kb_models - - - - - Genius KB-19e NB - kb_models - - - - - Genius KKB-2050HS - kb_models - - - - - Gyration - kb_models - - - - - Happy Hacking - kb_models - - - - - Happy Hacking for Mac - kb_models - - - - - Hewlett-Packard Internet - kb_models - - - - - Hewlett-Packard Mini 110 laptop - kb_models - - - - - Hewlett-Packard NEC SK-2500 Multimedia - kb_models - - - - - Hewlett-Packard Omnibook 500 - kb_models - - - - - Hewlett-Packard Omnibook 500 FA - kb_models - - - - - Hewlett-Packard Omnibook 6000/6100 - kb_models - - - - - Hewlett-Packard Omnibook XE3 GC - kb_models - - - - - Hewlett-Packard Omnibook XE3 GF - kb_models - - - - - Hewlett-Packard Omnibook XT1000 - kb_models - - - - - Hewlett-Packard Pavilion ZT1100 - kb_models - - - - - Hewlett-Packard Pavilion dv5 - kb_models - - - - - Hewlett-Packard nx9020 - kb_models - - - - - Honeywell Euroboard - kb_models - - - - - IBM Rapid Access - kb_models - - - - - IBM Rapid Access II - kb_models - - - - - IBM Space Saver - kb_models - - - - - IBM ThinkPad 560Z/600/600E/A22E - kb_models - - - - - IBM ThinkPad R60/T60/R61/T61 - kb_models - - - - - IBM ThinkPad Z60m/Z60t/Z61m/Z61t - kb_models - - - - - Keytronic FlexPro - kb_models - - - - - Kinesis - kb_models - - - - - Logitech - kb_models - - - - - Logitech Access - kb_models - - - - - Logitech Cordless Desktop - kb_models - - - - - Logitech Cordless Desktop (alt.) - kb_models - - - - - Logitech Cordless Desktop EX110 - kb_models - - - - - Logitech Cordless Desktop LX-300 - kb_models - - - - - Logitech Cordless Desktop Navigator - kb_models - - - - - Logitech Cordless Desktop Optical - kb_models - - - - - Logitech Cordless Desktop Pro (2nd alt.) - kb_models - - - - - Logitech Cordless Desktop iTouch - kb_models - - - - - Logitech Cordless Freedom/Desktop Navigator - kb_models - - - - - Logitech G15 extra keys via G15daemon - kb_models - - - - - Logitech Internet - kb_models - - - - - Logitech Internet 350 - kb_models - - - - - Logitech Internet Navigator - kb_models - - - - - Logitech Ultra-X - kb_models - - - - - Logitech Ultra-X Cordless Media Desktop - kb_models - - - - - Logitech diNovo - kb_models - - - - - Logitech diNovo Edge - kb_models - - - - - Logitech iTouch - kb_models - - - - - Logitech iTouch Cordless Y-RB6 - kb_models - - - - - Logitech iTouch Internet Navigator SE - kb_models - - - - - Logitech iTouch Internet Navigator SE USB - kb_models - - - - - MacBook/MacBook Pro - kb_models - - - - - MacBook/MacBook Pro (intl.) - kb_models - - - - - Macintosh - kb_models - - - - - Macintosh Old - kb_models - - - - - Memorex MX1998 - kb_models - - - - - Memorex MX2500 EZ-Access - kb_models - - - - - Memorex MX2750 - kb_models - - - - - Microsoft Comfort Curve 2000 - kb_models - - - - - Microsoft Internet - kb_models - - - - - Microsoft Internet Pro (Swedish) - kb_models - - - - - Microsoft Natural - kb_models - - - - - Microsoft Natural Elite - kb_models - - - - - Microsoft Natural Ergonomic 4000 - kb_models - - - - - Microsoft Natural Pro OEM - kb_models - - - - - Microsoft Natural Pro USB/Internet Pro - kb_models - - - - - Microsoft Natural Pro/Internet Pro - kb_models - - - - - Microsoft Natural Wireless Ergonomic 7000 - kb_models - - - - - Microsoft Office Keyboard - kb_models - - - - - Microsoft Surface - kb_models - - - - - Microsoft Wireless Multimedia 1.0A - kb_models - - - - - NEC SK-1300 - kb_models - - - - - NEC SK-2500 - kb_models - - - - - NEC SK-6200 - kb_models - - - - - NEC SK-7100 - kb_models - - - - - Northgate OmniKey 101 - kb_models - - - - - OLPC - kb_models - - - - - Ortek Multimedia/Internet MCK-800 - kb_models - - - - - PC-98 - kb_models - - - - - Propeller Voyager KTEZ-1000 - kb_models - - - - - QTronix Scorpius 98N+ - kb_models - - - - - SVEN Ergonomic 2500 - kb_models - - - - - SVEN Slim 303 - kb_models - - - - - Samsung SDM 4500P - kb_models - - - - - Samsung SDM 4510P - kb_models - - - - - Sanwa Supply SKB-KG3 - kb_models - - - - - Silvercrest Multimedia Wireless - kb_models - - - - - SteelSeries Apex 300 (Apex RAW) - kb_models - - - - - Sun Type 6 (Japanese) - kb_models - - - - - Sun Type 6 USB (Japanese) - kb_models - - - - - Sun Type 6 USB (Unix) - kb_models - - - - - Sun Type 6/7 USB - kb_models - - - - - Sun Type 6/7 USB (European) - kb_models - - - - - Sun Type 7 USB - kb_models - - - - - Sun Type 7 USB (European) - kb_models - - - - - Sun Type 7 USB (Japanese)/Japanese 106-key - kb_models - - - - - Sun Type 7 USB (Unix) - kb_models - - - - - Super Power Multimedia - kb_models - - - - - Symplon PaceBook tablet - kb_models - - - - - Targa Visionary 811 - kb_models - - - - - Toshiba Satellite S3000 - kb_models - - - - - Truly Ergonomic 227 - kb_models - - - - - Truly Ergonomic 229 - kb_models - - - - - Truly Ergonomic Computer Keyboard Model 227 (Wide Alt keys) - kb_models - - - - - Truly Ergonomic Computer Keyboard Model 229 (Standard sized Alt keys, additional Super and Menu key) - kb_models - - - - - Trust Direct Access - kb_models - - - - - Trust Slimline - kb_models - - - - - Trust Wireless Classic - kb_models - - - - - TypeMatrix EZ-Reach 2020 - kb_models - - - - - TypeMatrix EZ-Reach 2030 PS2 - kb_models - - - - - TypeMatrix EZ-Reach 2030 USB - kb_models - - - - - TypeMatrix EZ-Reach 2030 USB (102/105:EU mode) - kb_models - - - - - TypeMatrix EZ-Reach 2030 USB (106:JP mode) - kb_models - - - - - Unitek KB-1925 - kb_models - - - - - ViewSonic KU-306 Internet - kb_models - - - - - Winbook Model XP5 - kb_models - - - - - Yahoo! Internet - kb_models - - - - - eMachines m6800 laptop - kb_models - - - - + Afghani kb_layouts - + Albanian kb_layouts - + Amharic kb_layouts - + Arabic kb_layouts - + Arabic (Morocco) kb_layouts - + Arabic (Syria) kb_layouts - + Armenian kb_layouts - + Azerbaijani kb_layouts - + Bambara kb_layouts - + Bangla kb_layouts - + Belarusian kb_layouts - + Belgian kb_layouts - + Bosnian kb_layouts - + Braille kb_layouts - + Bulgarian kb_layouts - + Burmese kb_layouts - + Chinese kb_layouts - + Croatian kb_layouts - + Czech kb_layouts - + Danish kb_layouts - + Dhivehi kb_layouts - + Dutch kb_layouts - + Dzongkha kb_layouts - + English (Australian) kb_layouts - + English (Cameroon) kb_layouts - + English (Ghana) kb_layouts - + English (Nigeria) kb_layouts - + English (South Africa) kb_layouts - + English (UK) kb_layouts - + English (US) kb_layouts - + Esperanto kb_layouts - + Estonian kb_layouts - + Faroese kb_layouts - + Filipino kb_layouts - + Finnish kb_layouts - + French kb_layouts - + French (Canada) kb_layouts - + French (Democratic Republic of the Congo) kb_layouts - + French (Guinea) kb_layouts - + French (Togo) kb_layouts - + Georgian kb_layouts - + German kb_layouts - + German (Austria) kb_layouts - + German (Switzerland) kb_layouts - + Greek kb_layouts - + Hebrew kb_layouts - + Hungarian kb_layouts - + Icelandic kb_layouts - + Indian kb_layouts - + Indonesian (Arab Melayu, phonetic) kb_layouts - + Indonesian (Javanese) kb_layouts - + Iraqi kb_layouts - + Irish kb_layouts - + Italian kb_layouts - + Japanese kb_layouts - + Japanese (PC-98) kb_layouts - + Kabylian (azerty layout, no dead keys) kb_layouts - + Kazakh kb_layouts - + Khmer (Cambodia) kb_layouts - + Korean kb_layouts - + Kyrgyz kb_layouts - + Lao kb_layouts - + Latvian kb_layouts - + Lithuanian kb_layouts - + Macedonian kb_layouts - + Malay (Jawi, Arabic Keyboard) kb_layouts - + Maltese kb_layouts - + Maori kb_layouts - + Moldavian kb_layouts - + Mongolian kb_layouts - + Montenegrin kb_layouts - + Nepali kb_layouts - + Norwegian kb_layouts - + Persian kb_layouts - + Polish kb_layouts - + Portuguese kb_layouts - + Portuguese (Brazil) kb_layouts - + Romanian kb_layouts - + Russian kb_layouts - + Serbian kb_layouts - + Sinhala (phonetic) kb_layouts - + Slovak kb_layouts - + Slovenian kb_layouts - + Spanish kb_layouts - + Spanish (Latin American) kb_layouts - + Swahili (Kenya) kb_layouts - + Swahili (Tanzania) kb_layouts - + Swedish kb_layouts - + Taiwanese kb_layouts - + Tajik kb_layouts - + Thai kb_layouts - + Tswana kb_layouts - + Turkish kb_layouts - + Turkmen kb_layouts - + Ukrainian kb_layouts - + Urdu (Pakistan) kb_layouts - + Uzbek kb_layouts - + Vietnamese kb_layouts - + Wolof kb_layouts + + + kb_models - + + A4Tech KB-21 + kb_models + + + + + A4Tech KBS-8 + kb_models + + + + + A4Tech Wireless Desktop RFKB-23 + kb_models + + + + + Acer AirKey V + kb_models + + + + + Acer C300 + kb_models + + + + + Acer Ferrari 4000 + kb_models + + + + + Acer laptop + kb_models + + + + + Advance Scorpius KI + kb_models + + + + + Apple + kb_models + + + + + Apple Aluminium (ANSI) + kb_models + + + + + Apple Aluminium (ISO) + kb_models + + + + + Apple Aluminium (JIS) + kb_models + + + + + Apple laptop + kb_models + + + + + Asus laptop + kb_models + + + + + Azona RF2300 wireless Internet + kb_models + + + + + BTC 5090 + kb_models + + + + + BTC 5113RF Multimedia + kb_models + + + + + BTC 5126T + kb_models + + + + + BTC 6301URF + kb_models + + + + + BTC 9000 + kb_models + + + + + BTC 9000A + kb_models + + + + + BTC 9001AH + kb_models + + + + + BTC 9019U + kb_models + + + + + BTC 9116U Mini Wireless Internet and Gaming + kb_models + + + + + BenQ X-Touch + kb_models + + + + + BenQ X-Touch 730 + kb_models + + + + + BenQ X-Touch 800 + kb_models + + + + + Brother Internet + kb_models + + + + + Cherry B.UNLIMITED + kb_models + + + + + Cherry Blue Line CyBo@rd + kb_models + + + + + Cherry Blue Line CyBo@rd (alt.) + kb_models + + + + + Cherry CyBo@rd USB-Hub + kb_models + + + + + Cherry CyMotion Expert + kb_models + + + + + Cherry CyMotion Master Linux + kb_models + + + + + Cherry CyMotion Master XPress + kb_models + + + + + Chicony Internet + kb_models + + + + + Chicony KB-9885 + kb_models + + + + + Chicony KU-0108 + kb_models + + + + + Chicony KU-0420 + kb_models + + + + + Chromebook + kb_models + + + + + Classmate PC + kb_models + + + + + Compaq Armada laptop + kb_models + + + + + Compaq Easy Access + kb_models + + + + + Compaq Internet (13 keys) + kb_models + + + + + Compaq Internet (18 keys) + kb_models + + + + + Compaq Internet (7 keys) + kb_models + + + + + Compaq Presario laptop + kb_models + + + + + Compaq iPaq + kb_models + + + + + Creative Desktop Wireless 7000 + kb_models + + + + + DTK2000 + kb_models + + + + + Dell + kb_models + + + + + Dell 101-key PC + kb_models + + + + + Dell Inspiron 6000/8000 laptop + kb_models + + + + + Dell Latitude laptop + kb_models + + + + + Dell Precision M laptop + kb_models + + + + + Dell Precision M65 laptop + kb_models + + + + + Dell SK-8125 + kb_models + + + + + Dell SK-8135 + kb_models + + + + + Dell USB Multimedia + kb_models + + + + + Dexxa Wireless Desktop + kb_models + + + + + Diamond 9801/9802 + kb_models + + + + + Ennyah DKB-1008 + kb_models + + + + + Everex STEPnote + kb_models + + + + + FL90 + kb_models + + + + + Fujitsu-Siemens Amilo laptop + kb_models + + + + + Generic 101-key PC + kb_models + + + + + Generic 102-key PC + kb_models + + + + + Generic 104-key PC + kb_models + + + + + Generic 104-key PC with L-shaped Enter key + kb_models + + + + + Generic 105-key PC + kb_models + + + + + Generic 86-key PC + kb_models + + + + + Genius Comfy KB-12e + kb_models + + + + + Genius Comfy KB-16M/Multimedia KWD-910 + kb_models + + + + + Genius Comfy KB-21e-Scroll + kb_models + + + + + Genius KB-19e NB + kb_models + + + + + Genius KKB-2050HS + kb_models + + + + + Gyration + kb_models + + + + + Happy Hacking + kb_models + + + + + Happy Hacking for Mac + kb_models + + + + + Hewlett-Packard Internet + kb_models + + + + + Hewlett-Packard Mini 110 laptop + kb_models + + + + + Hewlett-Packard NEC SK-2500 Multimedia + kb_models + + + + + Hewlett-Packard Omnibook 500 + kb_models + + + + + Hewlett-Packard Omnibook 500 FA + kb_models + + + + + Hewlett-Packard Omnibook 6000/6100 + kb_models + + + + + Hewlett-Packard Omnibook XE3 GC + kb_models + + + + + Hewlett-Packard Omnibook XE3 GF + kb_models + + + + + Hewlett-Packard Omnibook XT1000 + kb_models + + + + + Hewlett-Packard Pavilion ZT1100 + kb_models + + + + + Hewlett-Packard Pavilion dv5 + kb_models + + + + + Hewlett-Packard nx9020 + kb_models + + + + + Honeywell Euroboard + kb_models + + + + + IBM Rapid Access + kb_models + + + + + IBM Rapid Access II + kb_models + + + + + IBM Space Saver + kb_models + + + + + IBM ThinkPad 560Z/600/600E/A22E + kb_models + + + + + IBM ThinkPad R60/T60/R61/T61 + kb_models + + + + + IBM ThinkPad Z60m/Z60t/Z61m/Z61t + kb_models + + + + + Keytronic FlexPro + kb_models + + + + + Kinesis + kb_models + + + + + Logitech + kb_models + + + + + Logitech Access + kb_models + + + + + Logitech Cordless Desktop + kb_models + + + + + Logitech Cordless Desktop (alt.) + kb_models + + + + + Logitech Cordless Desktop EX110 + kb_models + + + + + Logitech Cordless Desktop LX-300 + kb_models + + + + + Logitech Cordless Desktop Navigator + kb_models + + + + + Logitech Cordless Desktop Optical + kb_models + + + + + Logitech Cordless Desktop Pro (2nd alt.) + kb_models + + + + + Logitech Cordless Desktop iTouch + kb_models + + + + + Logitech Cordless Freedom/Desktop Navigator + kb_models + + + + + Logitech G15 extra keys via G15daemon + kb_models + + + + + Logitech Internet + kb_models + + + + + Logitech Internet 350 + kb_models + + + + + Logitech Internet Navigator + kb_models + + + + + Logitech Ultra-X + kb_models + + + + + Logitech Ultra-X Cordless Media Desktop + kb_models + + + + + Logitech diNovo + kb_models + + + + + Logitech diNovo Edge + kb_models + + + + + Logitech iTouch + kb_models + + + + + Logitech iTouch Cordless Y-RB6 + kb_models + + + + + Logitech iTouch Internet Navigator SE + kb_models + + + + + Logitech iTouch Internet Navigator SE USB + kb_models + + + + + MacBook/MacBook Pro + kb_models + + + + + MacBook/MacBook Pro (intl.) + kb_models + + + + + Macintosh + kb_models + + + + + Macintosh Old + kb_models + + + + + Memorex MX1998 + kb_models + + + + + Memorex MX2500 EZ-Access + kb_models + + + + + Memorex MX2750 + kb_models + + + + + Microsoft Comfort Curve 2000 + kb_models + + + + + Microsoft Internet + kb_models + + + + + Microsoft Internet Pro (Swedish) + kb_models + + + + + Microsoft Natural + kb_models + + + + + Microsoft Natural Elite + kb_models + + + + + Microsoft Natural Ergonomic 4000 + kb_models + + + + + Microsoft Natural Pro OEM + kb_models + + + + + Microsoft Natural Pro USB/Internet Pro + kb_models + + + + + Microsoft Natural Pro/Internet Pro + kb_models + + + + + Microsoft Natural Wireless Ergonomic 7000 + kb_models + + + + + Microsoft Office Keyboard + kb_models + + + + + Microsoft Surface + kb_models + + + + + Microsoft Wireless Multimedia 1.0A + kb_models + + + + + NEC SK-1300 + kb_models + + + + + NEC SK-2500 + kb_models + + + + + NEC SK-6200 + kb_models + + + + + NEC SK-7100 + kb_models + + + + + Northgate OmniKey 101 + kb_models + + + + + OLPC + kb_models + + + + + Ortek Multimedia/Internet MCK-800 + kb_models + + + + + PC-98 + kb_models + + + + + Propeller Voyager KTEZ-1000 + kb_models + + + + + QTronix Scorpius 98N+ + kb_models + + + + + SVEN Ergonomic 2500 + kb_models + + + + + SVEN Slim 303 + kb_models + + + + + Samsung SDM 4500P + kb_models + + + + + Samsung SDM 4510P + kb_models + + + + + Sanwa Supply SKB-KG3 + kb_models + + + + + Silvercrest Multimedia Wireless + kb_models + + + + + SteelSeries Apex 300 (Apex RAW) + kb_models + + + + + Sun Type 6 (Japanese) + kb_models + + + + + Sun Type 6 USB (Japanese) + kb_models + + + + + Sun Type 6 USB (Unix) + kb_models + + + + + Sun Type 6/7 USB + kb_models + + + + + Sun Type 6/7 USB (European) + kb_models + + + + + Sun Type 7 USB + kb_models + + + + + Sun Type 7 USB (European) + kb_models + + + + + Sun Type 7 USB (Japanese)/Japanese 106-key + kb_models + + + + + Sun Type 7 USB (Unix) + kb_models + + + + + Super Power Multimedia + kb_models + + + + + Symplon PaceBook tablet + kb_models + + + + + Targa Visionary 811 + kb_models + + + + + Toshiba Satellite S3000 + kb_models + + + + + Truly Ergonomic 227 + kb_models + + + + + Truly Ergonomic 229 + kb_models + + + + + Truly Ergonomic Computer Keyboard Model 227 (Wide Alt keys) + kb_models + + + + + Truly Ergonomic Computer Keyboard Model 229 (Standard sized Alt keys, additional Super and Menu key) + kb_models + + + + + Trust Direct Access + kb_models + + + + + Trust Slimline + kb_models + + + + + Trust Wireless Classic + kb_models + + + + + TypeMatrix EZ-Reach 2020 + kb_models + + + + + TypeMatrix EZ-Reach 2030 PS2 + kb_models + + + + + TypeMatrix EZ-Reach 2030 USB + kb_models + + + + + TypeMatrix EZ-Reach 2030 USB (102/105:EU mode) + kb_models + + + + + TypeMatrix EZ-Reach 2030 USB (106:JP mode) + kb_models + + + + + Unitek KB-1925 + kb_models + + + + + ViewSonic KU-306 Internet + kb_models + + + + + Winbook Model XP5 + kb_models + + + + + Yahoo! Internet + kb_models + + + + + eMachines m6800 laptop + kb_models + + + + + kb_variants + + Akan kb_variants - + Albanian (Plisi) kb_variants - + Albanian (Veqilharxhi) kb_variants - + Arabic (AZERTY) kb_variants - + Arabic (AZERTY, Eastern Arabic numerals) kb_variants - + Arabic (Algeria) kb_variants - + Arabic (Buckwalter) kb_variants - + Arabic (Eastern Arabic numerals) kb_variants - + Arabic (Macintosh) kb_variants - + Arabic (OLPC) kb_variants - + Arabic (Pakistan) kb_variants - + Arabic (QWERTY) kb_variants - + Arabic (QWERTY, Eastern Arabic numerals) kb_variants - + Armenian (alt. eastern) kb_variants - + Armenian (alt. phonetic) kb_variants - + Armenian (eastern) kb_variants - + Armenian (phonetic) kb_variants - + Armenian (western) kb_variants - + Asturian (Spain, with bottom-dot H and L) kb_variants - + Avatime kb_variants - + Azerbaijani (Cyrillic) kb_variants - + Bangla (India) kb_variants - + Bangla (India, Baishakhi Inscript) kb_variants - + Bangla (India, Baishakhi) kb_variants - + Bangla (India, Bornona) kb_variants - + Bangla (India, Gitanjali) kb_variants - + Bangla (India, Probhat) kb_variants - + Bangla (Probhat) kb_variants - + Bashkirian kb_variants - + Belarusian (Latin) kb_variants - + Belarusian (intl.) kb_variants - + Belarusian (legacy) kb_variants - + Belgian (ISO, alt.) kb_variants - + Belgian (Latin-9 only, alt.) kb_variants - + Belgian (Sun dead keys) kb_variants - + Belgian (Sun dead keys, alt.) kb_variants - + Belgian (Wang 724 AZERTY) kb_variants - + Belgian (alt.) kb_variants - + Belgian (no dead keys) kb_variants - + Berber (Morocco, Tifinagh alt.) kb_variants - + Berber (Morocco, Tifinagh extended phonetic) kb_variants - + Berber (Morocco, Tifinagh extended) kb_variants - + Berber (Morocco, Tifinagh phonetic) kb_variants - + Berber (Morocco, Tifinagh phonetic, alt.) kb_variants - + Berber (Morocco, Tifinagh) kb_variants - + Bosnian (US) kb_variants - + Bosnian (US, with Bosnian digraphs) kb_variants - + Bosnian (with Bosnian digraphs) kb_variants - + Bosnian (with guillemets) kb_variants - + Braille (left-handed inverted thumb) kb_variants - + Braille (left-handed) kb_variants - + Braille (right-handed inverted thumb) kb_variants - + Braille (right-handed) kb_variants - + Bulgarian (enhanced) kb_variants - + Bulgarian (new phonetic) kb_variants - + Bulgarian (traditional phonetic) kb_variants - + Burmese Zawgyi kb_variants - + Cameroon (AZERTY, intl.) kb_variants - + Cameroon (Dvorak, intl.) kb_variants - + Cameroon Multilingual (QWERTY, intl.) kb_variants - + Canadian (intl.) kb_variants - + Canadian (intl., 1st part) kb_variants - + Canadian (intl., 2nd part) kb_variants - + Catalan (Spain, with middle-dot L) kb_variants - + Cherokee kb_variants - + Chuvash kb_variants - + Chuvash (Latin) kb_variants - + CloGaelach kb_variants - + Crimean Tatar (Turkish Alt-Q) kb_variants - + Crimean Tatar (Turkish F) kb_variants - + Crimean Tatar (Turkish Q) kb_variants - + Croatian (US) kb_variants - + Croatian (US, with Croatian digraphs) kb_variants - + Croatian (with Croatian digraphs) kb_variants - + Croatian (with guillemets) kb_variants - + Czech (QWERTY) kb_variants - + Czech (QWERTY, Macintosh) kb_variants - + Czech (QWERTY, extended backslash) kb_variants - + Czech (UCW, only accented letters) kb_variants - + Czech (US, Dvorak, UCW support) kb_variants - + Czech (with &lt;|&gt; key) kb_variants - + Danish (Dvorak) kb_variants - + Danish (Macintosh) kb_variants - + Danish (Macintosh, no dead keys) kb_variants - + Danish (Windows) kb_variants - + Danish (no dead keys) kb_variants - - - Dutch (Macintosh) - kb_variants - - - - - Dutch (Sun dead keys) - kb_variants - - - - - Dutch (standard) - kb_variants - - - - - English (Canada) - kb_variants - - - - - English (Colemak) - kb_variants - - - - - English (Dvorak) - kb_variants - - - - - English (Dvorak, alt. intl.) - kb_variants - - - - - English (Dvorak, intl., with dead keys) - kb_variants - - - - - English (Dvorak, left-handed) - kb_variants - - - - - English (Dvorak, right-handed) - kb_variants - - - - - English (Ghana, GILLBT) - kb_variants - - - English (Ghana, multilingual) + Default kb_variants - English (India, with rupee) + Dutch (Macintosh) kb_variants - English (Macintosh) + Dutch (Sun dead keys) kb_variants - English (Mali, US, Macintosh) + Dutch (standard) kb_variants - English (Mali, US, intl.) + English (Canada) kb_variants - English (Norman) + English (Colemak) kb_variants - English (UK, Colemak) + English (Dvorak) kb_variants - English (UK, Dvorak) + English (Dvorak, alt. intl.) kb_variants - English (UK, Dvorak, with UK punctuation) + English (Dvorak, intl., with dead keys) kb_variants - English (UK, Macintosh) + English (Dvorak, left-handed) kb_variants - English (UK, Macintosh, intl.) + English (Dvorak, right-handed) kb_variants - English (UK, extended, Windows) + English (Ghana, GILLBT) kb_variants - English (UK, intl., with dead keys) + English (Ghana, multilingual) kb_variants - English (US, Symbolic) + English (India, with rupee) kb_variants - English (US, alt. intl.) + English (Macintosh) kb_variants - English (US, euro on 5) + English (Mali, US, Macintosh) kb_variants - English (US, intl., with dead keys) + English (Mali, US, intl.) kb_variants - English (Workman) + English (Norman) kb_variants - English (Workman, intl., with dead keys) + English (UK, Colemak) kb_variants - English (classic Dvorak) + English (UK, Dvorak) kb_variants - English (intl., with AltGr dead keys) + English (UK, Dvorak, with UK punctuation) kb_variants - English (programmer Dvorak) + English (UK, Macintosh) kb_variants - English (the divide/multiply toggle the layout) + English (UK, Macintosh, intl.) kb_variants - Esperanto (Brazil, Nativo) + English (UK, extended, Windows) kb_variants - Esperanto (Portugal, Nativo) + English (UK, intl., with dead keys) kb_variants - Esperanto (legacy) + English (US, Symbolic) kb_variants - Estonian (Dvorak) + English (US, alt. intl.) kb_variants - Estonian (US) + English (US, euro on 5) kb_variants - Estonian (no dead keys) + English (US, intl., with dead keys) kb_variants - Ewe + English (Workman) kb_variants - Faroese (no dead keys) + English (Workman, intl., with dead keys) kb_variants - Filipino (Capewell-Dvorak, Baybayin) + English (classic Dvorak) kb_variants - Filipino (Capewell-Dvorak, Latin) + English (intl., with AltGr dead keys) kb_variants - Filipino (Capewell-QWERF 2006, Baybayin) + English (programmer Dvorak) kb_variants - Filipino (Capewell-QWERF 2006, Latin) + English (the divide/multiply toggle the layout) kb_variants - Filipino (Colemak, Baybayin) + Esperanto (Brazil, Nativo) kb_variants - Filipino (Colemak, Latin) + Esperanto (Portugal, Nativo) kb_variants - Filipino (Dvorak, Baybayin) + Esperanto (legacy) kb_variants - Filipino (Dvorak, Latin) + Estonian (Dvorak) kb_variants - Filipino (QWERTY, Baybayin) + Estonian (US) kb_variants - Finnish (Macintosh) + Estonian (no dead keys) kb_variants - Finnish (Windows) + Ewe kb_variants - Finnish (classic) + Faroese (no dead keys) kb_variants - Finnish (classic, no dead keys) + Filipino (Capewell-Dvorak, Baybayin) kb_variants - French (AZERTY) + Filipino (Capewell-Dvorak, Latin) kb_variants - French (AZERTY, AFNOR) + Filipino (Capewell-QWERF 2006, Baybayin) kb_variants - French (BEPO) + Filipino (Capewell-QWERF 2006, Latin) kb_variants - French (BEPO, AFNOR) + Filipino (Colemak, Baybayin) kb_variants - French (BEPO, Latin-9 only) + Filipino (Colemak, Latin) kb_variants - French (Breton) + Filipino (Dvorak, Baybayin) kb_variants - French (Cameroon) + Filipino (Dvorak, Latin) kb_variants - French (Canada, Dvorak) + Filipino (QWERTY, Baybayin) kb_variants - French (Canada, legacy) + Finnish (Macintosh) kb_variants - French (Dvorak) + Finnish (Windows) kb_variants - French (Macintosh) + Finnish (classic) kb_variants - French (Mali, alt.) + Finnish (classic, no dead keys) kb_variants - French (Morocco) + French (AZERTY) kb_variants - French (Sun dead keys) + French (AZERTY, AFNOR) kb_variants - French (Switzerland) + French (BEPO) kb_variants - French (Switzerland, Macintosh) + French (BEPO, AFNOR) kb_variants - French (Switzerland, Sun dead keys) + French (BEPO, Latin-9 only) kb_variants - French (Switzerland, no dead keys) + French (Breton) kb_variants - French (US) + French (Cameroon) kb_variants - French (alt.) + French (Canada, Dvorak) kb_variants - French (alt., Latin-9 only) + French (Canada, legacy) kb_variants - French (alt., Sun dead keys) + French (Dvorak) kb_variants - French (alt., no dead keys) + French (Macintosh) kb_variants - French (legacy, alt.) + French (Mali, alt.) kb_variants - French (legacy, alt., Sun dead keys) + French (Morocco) kb_variants - French (legacy, alt., no dead keys) + French (Sun dead keys) kb_variants - French (no dead keys) + French (Switzerland) kb_variants - Friulian (Italy) + French (Switzerland, Macintosh) kb_variants - Fula + French (Switzerland, Sun dead keys) kb_variants - Ga + French (Switzerland, no dead keys) kb_variants - Georgian (France, AZERTY Tskapo) + French (US) kb_variants - Georgian (Italy) + French (alt.) kb_variants - Georgian (MESS) + French (alt., Latin-9 only) kb_variants - Georgian (ergonomic) + French (alt., Sun dead keys) kb_variants - German (Austria, Macintosh) + French (alt., no dead keys) kb_variants - German (Austria, Sun dead keys) + French (legacy, alt.) kb_variants - German (Austria, no dead keys) + French (legacy, alt., Sun dead keys) kb_variants - German (Dvorak) + French (legacy, alt., no dead keys) kb_variants - German (E1) + French (no dead keys) kb_variants - German (E2) + Friulian (Italy) kb_variants - German (Macintosh) + Fula kb_variants - German (Macintosh, no dead keys) + Ga kb_variants - German (Neo 2) + Georgian (France, AZERTY Tskapo) kb_variants - German (QWERTY) + Georgian (Italy) kb_variants - German (Sun dead keys) + Georgian (MESS) kb_variants - German (Switzerland, Macintosh) + Georgian (ergonomic) kb_variants - German (Switzerland, Sun dead keys) + German (Austria, Macintosh) kb_variants - German (Switzerland, legacy) + German (Austria, Sun dead keys) kb_variants - German (Switzerland, no dead keys) + German (Austria, no dead keys) kb_variants - German (T3) + German (Dvorak) kb_variants - German (US) + German (E1) kb_variants - German (dead acute) + German (E2) kb_variants - German (dead grave acute) + German (Macintosh) kb_variants - German (dead tilde) + German (Macintosh, no dead keys) kb_variants - German (no dead keys) + German (Neo 2) kb_variants - Greek (extended) + German (QWERTY) kb_variants - Greek (no dead keys) + German (Sun dead keys) kb_variants - Greek (polytonic) + German (Switzerland, Macintosh) kb_variants - Greek (simple) + German (Switzerland, Sun dead keys) kb_variants - Gujarati + German (Switzerland, legacy) kb_variants - Hanyu Pinyin (with AltGr dead keys) + German (Switzerland, no dead keys) kb_variants - Hausa (Ghana) + German (T3) kb_variants - Hausa (Nigeria) + German (US) kb_variants - Hawaiian + German (dead acute) kb_variants - Hebrew (Biblical, Tiro) + German (dead grave acute) kb_variants - Hebrew (lyx) + German (dead tilde) kb_variants - Hebrew (phonetic) + German (no dead keys) kb_variants - Hindi (Bolnagri) + Greek (extended) kb_variants - Hindi (KaGaPa, phonetic) + Greek (no dead keys) kb_variants - Hindi (Wx) + Greek (polytonic) kb_variants - Hungarian (QWERTY) + Greek (simple) kb_variants - Hungarian (QWERTY, 101-key, comma, dead keys) + Gujarati kb_variants - Hungarian (QWERTY, 101-key, comma, no dead keys) + Hanyu Pinyin (with AltGr dead keys) kb_variants - Hungarian (QWERTY, 101-key, dot, dead keys) + Hausa (Ghana) kb_variants - Hungarian (QWERTY, 101-key, dot, no dead keys) + Hausa (Nigeria) kb_variants - Hungarian (QWERTY, 102-key, comma, dead keys) + Hawaiian kb_variants - Hungarian (QWERTY, 102-key, comma, no dead keys) + Hebrew (Biblical, Tiro) kb_variants - Hungarian (QWERTY, 102-key, dot, dead keys) + Hebrew (lyx) kb_variants - Hungarian (QWERTY, 102-key, dot, no dead keys) + Hebrew (phonetic) kb_variants - Hungarian (QWERTZ, 101-key, comma, dead keys) + Hindi (Bolnagri) kb_variants - Hungarian (QWERTZ, 101-key, comma, no dead keys) + Hindi (KaGaPa, phonetic) kb_variants - Hungarian (QWERTZ, 101-key, dot, dead keys) + Hindi (Wx) kb_variants - Hungarian (QWERTZ, 101-key, dot, no dead keys) + Hungarian (QWERTY) kb_variants - Hungarian (QWERTZ, 102-key, comma, dead keys) + Hungarian (QWERTY, 101-key, comma, dead keys) kb_variants - Hungarian (QWERTZ, 102-key, comma, no dead keys) + Hungarian (QWERTY, 101-key, comma, no dead keys) kb_variants - Hungarian (QWERTZ, 102-key, dot, dead keys) + Hungarian (QWERTY, 101-key, dot, dead keys) kb_variants - Hungarian (QWERTZ, 102-key, dot, no dead keys) + Hungarian (QWERTY, 101-key, dot, no dead keys) kb_variants - Hungarian (no dead keys) + Hungarian (QWERTY, 102-key, comma, dead keys) kb_variants - Hungarian (standard) + Hungarian (QWERTY, 102-key, comma, no dead keys) kb_variants - Icelandic (Dvorak) + Hungarian (QWERTY, 102-key, dot, dead keys) kb_variants - Icelandic (Macintosh) + Hungarian (QWERTY, 102-key, dot, no dead keys) kb_variants - Icelandic (Macintosh, legacy) + Hungarian (QWERTZ, 101-key, comma, dead keys) kb_variants - Icelandic (Sun dead keys) + Hungarian (QWERTZ, 101-key, comma, no dead keys) kb_variants - Icelandic (no dead keys) + Hungarian (QWERTZ, 101-key, dot, dead keys) kb_variants - Igbo + Hungarian (QWERTZ, 101-key, dot, no dead keys) kb_variants - Indic (phonetic, IPA) + Hungarian (QWERTZ, 102-key, comma, dead keys) kb_variants - Indonesian (Arab Melayu, extended phonetic) + Hungarian (QWERTZ, 102-key, comma, no dead keys) kb_variants - Inuktitut + Hungarian (QWERTZ, 102-key, dot, dead keys) kb_variants - Irish (UnicodeExpert) + Hungarian (QWERTZ, 102-key, dot, no dead keys) kb_variants - Italian (IBM 142) + Hungarian (no dead keys) kb_variants - Italian (Macintosh) + Hungarian (standard) kb_variants - Italian (US) + Icelandic (Dvorak) kb_variants - Italian (Windows) + Icelandic (Macintosh) kb_variants - Italian (intl., with dead keys) + Icelandic (Macintosh, legacy) kb_variants - Italian (no dead keys) + Icelandic (Sun dead keys) kb_variants - Japanese (Dvorak) + Icelandic (no dead keys) kb_variants - Japanese (Kana 86) + Igbo kb_variants - Japanese (Kana) + Indic (phonetic, IPA) kb_variants - Japanese (Macintosh) + Indonesian (Arab Melayu, extended phonetic) kb_variants - Japanese (OADG 109A) + Inuktitut kb_variants - Kabylian (Algeria, Tifinagh) + Irish (UnicodeExpert) kb_variants - Kabylian (azerty layout, with dead keys) + Italian (IBM 142) kb_variants - Kabylian (qwerty-gb layout, with dead keys) + Italian (Macintosh) kb_variants - Kabylian (qwerty-us layout, with dead keys) + Italian (US) kb_variants - Kalmyk + Italian (Windows) kb_variants - Kannada + Italian (intl., with dead keys) kb_variants - Kannada (KaGaPa, phonetic) + Italian (no dead keys) kb_variants - Kashubian + Japanese (Dvorak) kb_variants - Kazakh (Latin) + Japanese (Kana 86) kb_variants - Kazakh (extended) + Japanese (Kana) kb_variants - Kazakh (with Russian) + Japanese (Macintosh) kb_variants - Kikuyu + Japanese (OADG 109A) kb_variants - Komi + Kabylian (Algeria, Tifinagh) kb_variants - Korean (101/104-key compatible) + Kabylian (azerty layout, with dead keys) kb_variants - Kurdish (Iran, Arabic-Latin) + Kabylian (qwerty-gb layout, with dead keys) kb_variants - Kurdish (Iran, F) + Kabylian (qwerty-us layout, with dead keys) kb_variants - Kurdish (Iran, Latin Alt-Q) + Kalmyk kb_variants - Kurdish (Iran, Latin Q) + Kannada kb_variants - Kurdish (Iraq, Arabic-Latin) + Kannada (KaGaPa, phonetic) kb_variants - Kurdish (Iraq, F) + Kashubian kb_variants - Kurdish (Iraq, Latin Alt-Q) + Kazakh (Latin) kb_variants - Kurdish (Iraq, Latin Q) + Kazakh (extended) kb_variants - Kurdish (Syria, F) + Kazakh (with Russian) kb_variants - Kurdish (Syria, Latin Alt-Q) + Kikuyu kb_variants - Kurdish (Syria, Latin Q) + Komi kb_variants - Kurdish (Turkey, F) + Korean (101/104-key compatible) kb_variants - Kurdish (Turkey, Latin Alt-Q) + Kurdish (Iran, Arabic-Latin) kb_variants - Kurdish (Turkey, Latin Q) + Kurdish (Iran, F) kb_variants - Kyrgyz (phonetic) + Kurdish (Iran, Latin Alt-Q) kb_variants - Lao (STEA) + Kurdish (Iran, Latin Q) kb_variants - Latvian (F) + Kurdish (Iraq, Arabic-Latin) kb_variants - Latvian (adapted) + Kurdish (Iraq, F) kb_variants - Latvian (apostrophe) + Kurdish (Iraq, Latin Alt-Q) kb_variants - Latvian (ergonomic, ŪGJRMV) + Kurdish (Iraq, Latin Q) kb_variants - Latvian (modern) + Kurdish (Syria, F) kb_variants - Latvian (tilde) + Kurdish (Syria, Latin Alt-Q) kb_variants - Lithuanian (IBM LST 1205-92) + Kurdish (Syria, Latin Q) kb_variants - Lithuanian (LEKP) + Kurdish (Turkey, F) kb_variants - Lithuanian (LEKPa) + Kurdish (Turkey, Latin Alt-Q) kb_variants - Lithuanian (US) + Kurdish (Turkey, Latin Q) kb_variants - Lithuanian (standard) + Kyrgyz (phonetic) kb_variants - Lower Sorbian + Lao (STEA) kb_variants - Lower Sorbian (QWERTZ) + Latvian (F) kb_variants - Macedonian (no dead keys) + Latvian (adapted) kb_variants - Malay (Jawi, phonetic) + Latvian (apostrophe) kb_variants - Malayalam + Latvian (ergonomic, ŪGJRMV) kb_variants - Malayalam (Lalitha) + Latvian (modern) kb_variants - Malayalam (enhanced Inscript, with rupee) + Latvian (tilde) kb_variants - Maltese (UK, with AltGr overrides) + Lithuanian (IBM LST 1205-92) kb_variants - Maltese (US layout with AltGr overrides) + Lithuanian (LEKP) kb_variants - Maltese (US) + Lithuanian (LEKPa) kb_variants - Manipuri (Eeyek) + Lithuanian (US) kb_variants - Marathi (KaGaPa, phonetic) + Lithuanian (standard) kb_variants - Marathi (enhanced Inscript) + Lower Sorbian kb_variants - Mari + Lower Sorbian (QWERTZ) kb_variants - Mmuock + Macedonian (no dead keys) kb_variants - Moldavian (Gagauz) + Malay (Jawi, phonetic) kb_variants - Mongolian (Bichig) + Malayalam kb_variants - Mongolian (Galik) + Malayalam (Lalitha) kb_variants - Mongolian (Manchu Galik) + Malayalam (enhanced Inscript, with rupee) kb_variants - Mongolian (Manchu) + Maltese (UK, with AltGr overrides) kb_variants - Mongolian (Todo Galik) + Maltese (US layout with AltGr overrides) kb_variants - Mongolian (Todo) + Maltese (US) kb_variants - Mongolian (Xibe) + Manipuri (Eeyek) kb_variants - Montenegrin (Cyrillic) + Marathi (KaGaPa, phonetic) kb_variants - Montenegrin (Cyrillic, ZE and ZHE swapped) + Marathi (enhanced Inscript) kb_variants - Montenegrin (Cyrillic, with guillemets) + Mari kb_variants - Montenegrin (Latin, QWERTY) + Mmuock kb_variants - Montenegrin (Latin, Unicode) + Moldavian (Gagauz) kb_variants - Montenegrin (Latin, Unicode, QWERTY) + Mongolian (Bichig) kb_variants - Montenegrin (Latin, with guillemets) + Mongolian (Galik) kb_variants - Northern Saami (Finland) + Mongolian (Manchu Galik) kb_variants - Northern Saami (Norway) + Mongolian (Manchu) kb_variants - Northern Saami (Norway, no dead keys) + Mongolian (Todo Galik) kb_variants - Northern Saami (Sweden) + Mongolian (Todo) kb_variants - Norwegian (Colemak) + Mongolian (Xibe) kb_variants - Norwegian (Dvorak) + Montenegrin (Cyrillic) kb_variants - Norwegian (Macintosh) + Montenegrin (Cyrillic, ZE and ZHE swapped) kb_variants - Norwegian (Macintosh, no dead keys) + Montenegrin (Cyrillic, with guillemets) kb_variants - Norwegian (Windows) + Montenegrin (Latin, QWERTY) kb_variants - Norwegian (no dead keys) + Montenegrin (Latin, Unicode) kb_variants - Occitan + Montenegrin (Latin, Unicode, QWERTY) kb_variants - Ogham + Montenegrin (Latin, with guillemets) kb_variants - Ogham (IS434) + Northern Saami (Finland) kb_variants - Ol Chiki + Northern Saami (Norway) kb_variants - Oriya + Northern Saami (Norway, no dead keys) kb_variants - Ossetian (Georgia) + Northern Saami (Sweden) kb_variants - Ossetian (Windows) + Norwegian (Colemak) kb_variants - Ossetian (legacy) + Norwegian (Dvorak) kb_variants - Pannonian Rusyn + Norwegian (Macintosh) kb_variants - Pashto + Norwegian (Macintosh, no dead keys) kb_variants - Pashto (Afghanistan, OLPC) + Norwegian (Windows) kb_variants - Persian (Afghanistan, Dari OLPC) + Norwegian (no dead keys) kb_variants - Persian (with Persian keypad) + Occitan kb_variants - Polish (British keyboard) + Ogham kb_variants - Polish (Dvorak) + Ogham (IS434) kb_variants - Polish (Dvorak, with Polish quotes on key 1) + Ol Chiki kb_variants - Polish (Dvorak, with Polish quotes on quotemark key) + Oriya kb_variants - Polish (QWERTZ) + Ossetian (Georgia) kb_variants - Polish (legacy) + Ossetian (Windows) kb_variants - Polish (programmer Dvorak) + Ossetian (legacy) kb_variants - Portuguese (Brazil, Dvorak) + Pannonian Rusyn kb_variants - Portuguese (Brazil, IBM/Lenovo ThinkPad) + Pashto kb_variants - Portuguese (Brazil, Nativo for US keyboards) + Pashto (Afghanistan, OLPC) kb_variants - Portuguese (Brazil, Nativo) + Persian (Afghanistan, Dari OLPC) kb_variants - Portuguese (Brazil, no dead keys) + Persian (with Persian keypad) kb_variants - Portuguese (Macintosh) + Polish (British keyboard) kb_variants - Portuguese (Macintosh, Sun dead keys) + Polish (Dvorak) kb_variants - Portuguese (Macintosh, no dead keys) + Polish (Dvorak, with Polish quotes on key 1) kb_variants - Portuguese (Nativo for US keyboards) + Polish (Dvorak, with Polish quotes on quotemark key) kb_variants - Portuguese (Nativo) + Polish (QWERTZ) kb_variants - Portuguese (Sun dead keys) + Polish (legacy) kb_variants - Portuguese (no dead keys) + Polish (programmer Dvorak) kb_variants - Punjabi (Gurmukhi Jhelum) + Portuguese (Brazil, Dvorak) kb_variants - Punjabi (Gurmukhi) + Portuguese (Brazil, IBM/Lenovo ThinkPad) kb_variants - Romanian (Germany) + Portuguese (Brazil, Nativo for US keyboards) kb_variants - Romanian (Germany, no dead keys) + Portuguese (Brazil, Nativo) kb_variants - Romanian (Windows) + Portuguese (Brazil, no dead keys) kb_variants - Romanian (cedilla) + Portuguese (Macintosh) kb_variants - Romanian (standard cedilla) + Portuguese (Macintosh, Sun dead keys) kb_variants - Romanian (standard) + Portuguese (Macintosh, no dead keys) kb_variants - Russian (Belarus) + Portuguese (Nativo for US keyboards) kb_variants - Russian (Czech, phonetic) + Portuguese (Nativo) kb_variants - Russian (DOS) + Portuguese (Sun dead keys) kb_variants - Russian (Georgia) + Portuguese (no dead keys) kb_variants - Russian (Germany, phonetic) + Punjabi (Gurmukhi Jhelum) kb_variants - Russian (Kazakhstan, with Kazakh) + Punjabi (Gurmukhi) kb_variants - Russian (Macintosh) + Romanian (Germany) kb_variants - Russian (Poland, phonetic Dvorak) + Romanian (Germany, no dead keys) kb_variants - Russian (Sweden, phonetic) + Romanian (Windows) kb_variants - Russian (Sweden, phonetic, no dead keys) + Romanian (cedilla) kb_variants - Russian (US, phonetic) + Romanian (standard cedilla) kb_variants - Russian (Ukraine, standard RSTU) + Romanian (standard) kb_variants - Russian (legacy) + Russian (Belarus) kb_variants - Russian (phonetic) + Russian (Czech, phonetic) kb_variants - Russian (phonetic, AZERTY) + Russian (DOS) kb_variants - Russian (phonetic, Dvorak) + Russian (Georgia) kb_variants - Russian (phonetic, French) + Russian (Germany, phonetic) kb_variants - Russian (phonetic, Windows) + Russian (Kazakhstan, with Kazakh) kb_variants - Russian (phonetic, YAZHERTY) + Russian (Macintosh) kb_variants - Russian (typewriter) + Russian (Poland, phonetic Dvorak) kb_variants - Russian (typewriter, legacy) + Russian (Sweden, phonetic) kb_variants - Saisiyat (Taiwan) + Russian (Sweden, phonetic, no dead keys) kb_variants - Samogitian + Russian (US, phonetic) kb_variants - Sanskrit (KaGaPa, phonetic) + Russian (Ukraine, standard RSTU) kb_variants - Serbian (Cyrillic, ZE and ZHE swapped) + Russian (legacy) kb_variants - Serbian (Cyrillic, with guillemets) + Russian (phonetic) kb_variants - Serbian (Latin) + Russian (phonetic, AZERTY) kb_variants - Serbian (Latin, QWERTY) + Russian (phonetic, Dvorak) kb_variants - Serbian (Latin, Unicode) + Russian (phonetic, French) kb_variants - Serbian (Latin, Unicode, QWERTY) + Russian (phonetic, Windows) kb_variants - Serbian (Latin, with guillemets) + Russian (phonetic, YAZHERTY) kb_variants - Serbian (Russia) + Russian (typewriter) kb_variants - Serbo-Croatian (US) + Russian (typewriter, legacy) kb_variants - Sicilian + Saisiyat (Taiwan) kb_variants - Silesian + Samogitian kb_variants - Sindhi + Sanskrit (KaGaPa, phonetic) kb_variants - Sinhala (US) + Serbian (Cyrillic, ZE and ZHE swapped) kb_variants - Slovak (QWERTY) + Serbian (Cyrillic, with guillemets) kb_variants - Slovak (QWERTY, extended backslash) + Serbian (Latin) kb_variants - Slovak (extended backslash) + Serbian (Latin, QWERTY) kb_variants - Slovenian (US) + Serbian (Latin, Unicode) kb_variants - Slovenian (with guillemets) + Serbian (Latin, Unicode, QWERTY) kb_variants - Spanish (Dvorak) + Serbian (Latin, with guillemets) kb_variants - Spanish (Latin American, Colemak for gaming) + Serbian (Russia) kb_variants - Spanish (Latin American, Colemak) + Serbo-Croatian (US) kb_variants - Spanish (Latin American, Dvorak) + Sicilian kb_variants - Spanish (Latin American, Sun dead keys) + Silesian kb_variants - Spanish (Latin American, dead tilde) + Sindhi kb_variants - Spanish (Latin American, no dead keys) + Sinhala (US) kb_variants - Spanish (Macintosh) + Slovak (QWERTY) kb_variants - Spanish (Sun dead keys) + Slovak (QWERTY, extended backslash) kb_variants - Spanish (Windows) + Slovak (extended backslash) kb_variants - Spanish (dead tilde) + Slovenian (US) kb_variants - Spanish (no dead keys) + Slovenian (with guillemets) kb_variants - Swedish (Dvorak) + Spanish (Dvorak) kb_variants - Swedish (Dvorak, intl.) + Spanish (Latin American, Colemak for gaming) kb_variants - Swedish (Macintosh) + Spanish (Latin American, Colemak) kb_variants - Swedish (Svdvorak) + Spanish (Latin American, Dvorak) kb_variants - Swedish (US) + Spanish (Latin American, Sun dead keys) kb_variants - Swedish (no dead keys) + Spanish (Latin American, dead tilde) kb_variants - Swedish Sign Language + Spanish (Latin American, no dead keys) kb_variants - Syriac + Spanish (Macintosh) kb_variants - Syriac (phonetic) + Spanish (Sun dead keys) kb_variants - Taiwanese (indigenous) + Spanish (Windows) kb_variants - Tajik (legacy) + Spanish (dead tilde) kb_variants - Tamil (Inscript) + Spanish (no dead keys) kb_variants - Tamil (Sri Lanka, TamilNet '99) + Swedish (Dvorak) kb_variants - Tamil (Sri Lanka, TamilNet '99, TAB encoding) + Swedish (Dvorak, intl.) kb_variants - Tamil (TamilNet '99 with Tamil numerals) + Swedish (Macintosh) kb_variants - Tamil (TamilNet '99) + Swedish (Svdvorak) kb_variants - Tamil (TamilNet '99, TAB encoding) + Swedish (US) kb_variants - Tamil (TamilNet '99, TSCII encoding) + Swedish (no dead keys) kb_variants - Tatar + Swedish Sign Language kb_variants - Telugu + Syriac kb_variants - Telugu (KaGaPa, phonetic) + Syriac (phonetic) kb_variants - Telugu (Sarala) + Taiwanese (indigenous) kb_variants - Thai (Pattachote) + Tajik (legacy) kb_variants - Thai (TIS-820.2538) + Tamil (Inscript) kb_variants - Tibetan + Tamil (Sri Lanka, TamilNet '99) kb_variants - Tibetan (with ASCII numerals) + Tamil (Sri Lanka, TamilNet '99, TAB encoding) kb_variants - Turkish (Alt-Q) + Tamil (TamilNet '99 with Tamil numerals) kb_variants - Turkish (F) + Tamil (TamilNet '99) kb_variants - Turkish (Germany) + Tamil (TamilNet '99, TAB encoding) kb_variants - Turkish (Sun dead keys) + Tamil (TamilNet '99, TSCII encoding) kb_variants - Turkish (intl., with dead keys) + Tatar kb_variants - Turkmen (Alt-Q) + Telugu kb_variants - Udmurt + Telugu (KaGaPa, phonetic) kb_variants - Ukrainian (Windows) + Telugu (Sarala) kb_variants - Ukrainian (homophonic) + Thai (Pattachote) kb_variants - Ukrainian (legacy) + Thai (TIS-820.2538) kb_variants - Ukrainian (phonetic) + Tibetan kb_variants - Ukrainian (standard RSTU) + Tibetan (with ASCII numerals) kb_variants - Ukrainian (typewriter) + Turkish (Alt-Q) kb_variants - Urdu (Pakistan, CRULP) + Turkish (F) kb_variants - Urdu (Pakistan, NLA) + Turkish (Germany) kb_variants - Urdu (Windows) + Turkish (Sun dead keys) kb_variants - Urdu (alt. phonetic) + Turkish (intl., with dead keys) kb_variants - Urdu (phonetic) + Turkmen (Alt-Q) kb_variants - Uyghur + Udmurt kb_variants - Uzbek (Afghanistan) + Ukrainian (Windows) kb_variants - Uzbek (Afghanistan, OLPC) + Ukrainian (homophonic) kb_variants - Uzbek (Latin) + Ukrainian (legacy) kb_variants - Vietnamese (French) + Ukrainian (phonetic) kb_variants - Vietnamese (US) + Ukrainian (standard RSTU) kb_variants - Yakut + Ukrainian (typewriter) kb_variants + Urdu (Pakistan, CRULP) + kb_variants + + + + + Urdu (Pakistan, NLA) + kb_variants + + + + + Urdu (Windows) + kb_variants + + + + + Urdu (alt. phonetic) + kb_variants + + + + + Urdu (phonetic) + kb_variants + + + + + Uyghur + kb_variants + + + + + Uzbek (Afghanistan) + kb_variants + + + + + Uzbek (Afghanistan, OLPC) + kb_variants + + + + + Uzbek (Latin) + kb_variants + + + + + Vietnamese (French) + kb_variants + + + + + Vietnamese (US) + kb_variants + + + + + Yakut + kb_variants + + + + Yoruba kb_variants diff --git a/lang/kb_tg.ts b/lang/kb_tg.ts index 10b48e701..fb18f9995 100644 --- a/lang/kb_tg.ts +++ b/lang/kb_tg.ts @@ -2,4605 +2,4617 @@ - QObject + kb_layouts - - A4Tech KB-21 - kb_models - - - - - A4Tech KBS-8 - kb_models - - - - - A4Tech Wireless Desktop RFKB-23 - kb_models - - - - - Acer AirKey V - kb_models - - - - - Acer C300 - kb_models - - - - - Acer Ferrari 4000 - kb_models - - - - - Acer laptop - kb_models - - - - - Advance Scorpius KI - kb_models - - - - - Apple - kb_models - - - - - Apple Aluminium (ANSI) - kb_models - - - - - Apple Aluminium (ISO) - kb_models - - - - - Apple Aluminium (JIS) - kb_models - - - - - Apple laptop - kb_models - - - - - Asus laptop - kb_models - - - - - Azona RF2300 wireless Internet - kb_models - - - - - BTC 5090 - kb_models - - - - - BTC 5113RF Multimedia - kb_models - - - - - BTC 5126T - kb_models - - - - - BTC 6301URF - kb_models - - - - - BTC 9000 - kb_models - - - - - BTC 9000A - kb_models - - - - - BTC 9001AH - kb_models - - - - - BTC 9019U - kb_models - - - - - BTC 9116U Mini Wireless Internet and Gaming - kb_models - - - - - BenQ X-Touch - kb_models - - - - - BenQ X-Touch 730 - kb_models - - - - - BenQ X-Touch 800 - kb_models - - - - - Brother Internet - kb_models - - - - - Cherry B.UNLIMITED - kb_models - - - - - Cherry Blue Line CyBo@rd - kb_models - - - - - Cherry Blue Line CyBo@rd (alt.) - kb_models - - - - - Cherry CyBo@rd USB-Hub - kb_models - - - - - Cherry CyMotion Expert - kb_models - - - - - Cherry CyMotion Master Linux - kb_models - - - - - Cherry CyMotion Master XPress - kb_models - - - - - Chicony Internet - kb_models - - - - - Chicony KB-9885 - kb_models - - - - - Chicony KU-0108 - kb_models - - - - - Chicony KU-0420 - kb_models - - - - - Chromebook - kb_models - - - - - Classmate PC - kb_models - - - - - Compaq Armada laptop - kb_models - - - - - Compaq Easy Access - kb_models - - - - - Compaq Internet (13 keys) - kb_models - - - - - Compaq Internet (18 keys) - kb_models - - - - - Compaq Internet (7 keys) - kb_models - - - - - Compaq Presario laptop - kb_models - - - - - Compaq iPaq - kb_models - - - - - Creative Desktop Wireless 7000 - kb_models - - - - - DTK2000 - kb_models - - - - - Dell - kb_models - - - - - Dell 101-key PC - kb_models - - - - - Dell Inspiron 6000/8000 laptop - kb_models - - - - - Dell Latitude laptop - kb_models - - - - - Dell Precision M laptop - kb_models - - - - - Dell Precision M65 laptop - kb_models - - - - - Dell SK-8125 - kb_models - - - - - Dell SK-8135 - kb_models - - - - - Dell USB Multimedia - kb_models - - - - - Dexxa Wireless Desktop - kb_models - - - - - Diamond 9801/9802 - kb_models - - - - - Ennyah DKB-1008 - kb_models - - - - - Everex STEPnote - kb_models - - - - - FL90 - kb_models - - - - - Fujitsu-Siemens Amilo laptop - kb_models - - - - - Generic 101-key PC - kb_models - Общий 101-ключ - - - - Generic 102-key PC - kb_models - Общий 102-ключ - - - - Generic 104-key PC - kb_models - Общий 104-ключ - - - - Generic 104-key PC with L-shaped Enter key - kb_models - - - - - Generic 105-key PC - kb_models - Общий 105-ключ - - - - Generic 86-key PC - kb_models - Общий 86-ключ - - - - Genius Comfy KB-12e - kb_models - - - - - Genius Comfy KB-16M/Multimedia KWD-910 - kb_models - - - - - Genius Comfy KB-21e-Scroll - kb_models - - - - - Genius KB-19e NB - kb_models - - - - - Genius KKB-2050HS - kb_models - - - - - Gyration - kb_models - - - - - Happy Hacking - kb_models - - - - - Happy Hacking for Mac - kb_models - - - - - Hewlett-Packard Internet - kb_models - - - - - Hewlett-Packard Mini 110 laptop - kb_models - - - - - Hewlett-Packard NEC SK-2500 Multimedia - kb_models - - - - - Hewlett-Packard Omnibook 500 - kb_models - - - - - Hewlett-Packard Omnibook 500 FA - kb_models - - - - - Hewlett-Packard Omnibook 6000/6100 - kb_models - - - - - Hewlett-Packard Omnibook XE3 GC - kb_models - - - - - Hewlett-Packard Omnibook XE3 GF - kb_models - - - - - Hewlett-Packard Omnibook XT1000 - kb_models - - - - - Hewlett-Packard Pavilion ZT1100 - kb_models - - - - - Hewlett-Packard Pavilion dv5 - kb_models - - - - - Hewlett-Packard nx9020 - kb_models - - - - - Honeywell Euroboard - kb_models - - - - - IBM Rapid Access - kb_models - - - - - IBM Rapid Access II - kb_models - - - - - IBM Space Saver - kb_models - - - - - IBM ThinkPad 560Z/600/600E/A22E - kb_models - - - - - IBM ThinkPad R60/T60/R61/T61 - kb_models - - - - - IBM ThinkPad Z60m/Z60t/Z61m/Z61t - kb_models - - - - - Keytronic FlexPro - kb_models - - - - - Kinesis - kb_models - - - - - Logitech - kb_models - - - - - Logitech Access - kb_models - - - - - Logitech Cordless Desktop - kb_models - - - - - Logitech Cordless Desktop (alt.) - kb_models - - - - - Logitech Cordless Desktop EX110 - kb_models - - - - - Logitech Cordless Desktop LX-300 - kb_models - - - - - Logitech Cordless Desktop Navigator - kb_models - - - - - Logitech Cordless Desktop Optical - kb_models - - - - - Logitech Cordless Desktop Pro (2nd alt.) - kb_models - - - - - Logitech Cordless Desktop iTouch - kb_models - - - - - Logitech Cordless Freedom/Desktop Navigator - kb_models - - - - - Logitech G15 extra keys via G15daemon - kb_models - - - - - Logitech Internet - kb_models - - - - - Logitech Internet 350 - kb_models - - - - - Logitech Internet Navigator - kb_models - - - - - Logitech Ultra-X - kb_models - - - - - Logitech Ultra-X Cordless Media Desktop - kb_models - - - - - Logitech diNovo - kb_models - - - - - Logitech diNovo Edge - kb_models - - - - - Logitech iTouch - kb_models - - - - - Logitech iTouch Cordless Y-RB6 - kb_models - - - - - Logitech iTouch Internet Navigator SE - kb_models - - - - - Logitech iTouch Internet Navigator SE USB - kb_models - - - - - MacBook/MacBook Pro - kb_models - - - - - MacBook/MacBook Pro (intl.) - kb_models - - - - - Macintosh - kb_models - - - - - Macintosh Old - kb_models - - - - - Memorex MX1998 - kb_models - - - - - Memorex MX2500 EZ-Access - kb_models - - - - - Memorex MX2750 - kb_models - - - - - Microsoft Comfort Curve 2000 - kb_models - - - - - Microsoft Internet - kb_models - - - - - Microsoft Internet Pro (Swedish) - kb_models - - - - - Microsoft Natural - kb_models - - - - - Microsoft Natural Elite - kb_models - - - - - Microsoft Natural Ergonomic 4000 - kb_models - - - - - Microsoft Natural Pro OEM - kb_models - - - - - Microsoft Natural Pro USB/Internet Pro - kb_models - - - - - Microsoft Natural Pro/Internet Pro - kb_models - - - - - Microsoft Natural Wireless Ergonomic 7000 - kb_models - - - - - Microsoft Office Keyboard - kb_models - - - - - Microsoft Surface - kb_models - - - - - Microsoft Wireless Multimedia 1.0A - kb_models - - - - - NEC SK-1300 - kb_models - - - - - NEC SK-2500 - kb_models - - - - - NEC SK-6200 - kb_models - - - - - NEC SK-7100 - kb_models - - - - - Northgate OmniKey 101 - kb_models - - - - - OLPC - kb_models - - - - - Ortek Multimedia/Internet MCK-800 - kb_models - - - - - PC-98 - kb_models - - - - - Propeller Voyager KTEZ-1000 - kb_models - - - - - QTronix Scorpius 98N+ - kb_models - - - - - SVEN Ergonomic 2500 - kb_models - - - - - SVEN Slim 303 - kb_models - - - - - Samsung SDM 4500P - kb_models - - - - - Samsung SDM 4510P - kb_models - - - - - Sanwa Supply SKB-KG3 - kb_models - - - - - Silvercrest Multimedia Wireless - kb_models - - - - - SteelSeries Apex 300 (Apex RAW) - kb_models - - - - - Sun Type 6 (Japanese) - kb_models - - - - - Sun Type 6 USB (Japanese) - kb_models - - - - - Sun Type 6 USB (Unix) - kb_models - - - - - Sun Type 6/7 USB - kb_models - - - - - Sun Type 6/7 USB (European) - kb_models - - - - - Sun Type 7 USB - kb_models - - - - - Sun Type 7 USB (European) - kb_models - - - - - Sun Type 7 USB (Japanese)/Japanese 106-key - kb_models - - - - - Sun Type 7 USB (Unix) - kb_models - - - - - Super Power Multimedia - kb_models - - - - - Symplon PaceBook tablet - kb_models - - - - - Targa Visionary 811 - kb_models - - - - - Toshiba Satellite S3000 - kb_models - - - - - Truly Ergonomic 227 - kb_models - - - - - Truly Ergonomic 229 - kb_models - - - - - Truly Ergonomic Computer Keyboard Model 227 (Wide Alt keys) - kb_models - - - - - Truly Ergonomic Computer Keyboard Model 229 (Standard sized Alt keys, additional Super and Menu key) - kb_models - - - - - Trust Direct Access - kb_models - - - - - Trust Slimline - kb_models - - - - - Trust Wireless Classic - kb_models - - - - - TypeMatrix EZ-Reach 2020 - kb_models - - - - - TypeMatrix EZ-Reach 2030 PS2 - kb_models - - - - - TypeMatrix EZ-Reach 2030 USB - kb_models - - - - - TypeMatrix EZ-Reach 2030 USB (102/105:EU mode) - kb_models - - - - - TypeMatrix EZ-Reach 2030 USB (106:JP mode) - kb_models - - - - - Unitek KB-1925 - kb_models - - - - - ViewSonic KU-306 Internet - kb_models - - - - - Winbook Model XP5 - kb_models - - - - - Yahoo! Internet - kb_models - - - - - eMachines m6800 laptop - kb_models - - - - + Afghani kb_layouts - + Albanian kb_layouts - + Amharic kb_layouts - + Arabic kb_layouts - + Arabic (Morocco) kb_layouts - + Arabic (Syria) kb_layouts - + Armenian kb_layouts - + Azerbaijani kb_layouts - + Bambara kb_layouts - + Bangla kb_layouts - + Belarusian kb_layouts - + Belgian kb_layouts - + Bosnian kb_layouts - + Braille kb_layouts - + Bulgarian kb_layouts - + Burmese kb_layouts - + Chinese kb_layouts - + Croatian kb_layouts - + Czech kb_layouts - + Danish kb_layouts - + Dhivehi kb_layouts - + Dutch kb_layouts - + Dzongkha kb_layouts - + English (Australian) kb_layouts - + English (Cameroon) kb_layouts - + English (Ghana) kb_layouts - + English (Nigeria) kb_layouts - + English (South Africa) kb_layouts - + English (UK) kb_layouts - + English (US) kb_layouts - + Esperanto kb_layouts - + Estonian kb_layouts - + Faroese kb_layouts - + Filipino kb_layouts - + Finnish kb_layouts - + French kb_layouts - + French (Canada) kb_layouts - + French (Democratic Republic of the Congo) kb_layouts - + French (Guinea) kb_layouts - + French (Togo) kb_layouts - + Georgian kb_layouts - + German kb_layouts - + German (Austria) kb_layouts - + German (Switzerland) kb_layouts - + Greek kb_layouts - + Hebrew kb_layouts - + Hungarian kb_layouts - + Icelandic kb_layouts - + Indian kb_layouts - + Indonesian (Arab Melayu, phonetic) kb_layouts - + Indonesian (Javanese) kb_layouts - + Iraqi kb_layouts - + Irish kb_layouts - + Italian kb_layouts - + Japanese kb_layouts - + Japanese (PC-98) kb_layouts - + Kabylian (azerty layout, no dead keys) kb_layouts - + Kazakh kb_layouts - + Khmer (Cambodia) kb_layouts - + Korean kb_layouts - + Kyrgyz kb_layouts - + Lao kb_layouts - + Latvian kb_layouts - + Lithuanian kb_layouts - + Macedonian kb_layouts - + Malay (Jawi, Arabic Keyboard) kb_layouts - + Maltese kb_layouts - + Maori kb_layouts - + Moldavian kb_layouts - + Mongolian kb_layouts - + Montenegrin kb_layouts - + Nepali kb_layouts - + Norwegian kb_layouts - + Persian kb_layouts - + Polish kb_layouts - + Portuguese kb_layouts - + Portuguese (Brazil) kb_layouts - + Romanian kb_layouts - + Russian kb_layouts - + Serbian kb_layouts - + Sinhala (phonetic) kb_layouts - + Slovak kb_layouts - + Slovenian kb_layouts - + Spanish kb_layouts - + Spanish (Latin American) kb_layouts - + Swahili (Kenya) kb_layouts - + Swahili (Tanzania) kb_layouts - + Swedish kb_layouts - + Taiwanese kb_layouts - + Tajik kb_layouts - + Тоҷикӣ - + Thai kb_layouts - + Tswana kb_layouts - + Turkish kb_layouts - + Turkmen kb_layouts - + Ukrainian kb_layouts - + Urdu (Pakistan) kb_layouts - + Uzbek kb_layouts - + Vietnamese kb_layouts - + Wolof kb_layouts + + + kb_models - + + A4Tech KB-21 + kb_models + + + + + A4Tech KBS-8 + kb_models + + + + + A4Tech Wireless Desktop RFKB-23 + kb_models + + + + + Acer AirKey V + kb_models + + + + + Acer C300 + kb_models + + + + + Acer Ferrari 4000 + kb_models + + + + + Acer laptop + kb_models + + + + + Advance Scorpius KI + kb_models + + + + + Apple + kb_models + + + + + Apple Aluminium (ANSI) + kb_models + + + + + Apple Aluminium (ISO) + kb_models + + + + + Apple Aluminium (JIS) + kb_models + + + + + Apple laptop + kb_models + + + + + Asus laptop + kb_models + + + + + Azona RF2300 wireless Internet + kb_models + + + + + BTC 5090 + kb_models + + + + + BTC 5113RF Multimedia + kb_models + + + + + BTC 5126T + kb_models + + + + + BTC 6301URF + kb_models + + + + + BTC 9000 + kb_models + + + + + BTC 9000A + kb_models + + + + + BTC 9001AH + kb_models + + + + + BTC 9019U + kb_models + + + + + BTC 9116U Mini Wireless Internet and Gaming + kb_models + + + + + BenQ X-Touch + kb_models + + + + + BenQ X-Touch 730 + kb_models + + + + + BenQ X-Touch 800 + kb_models + + + + + Brother Internet + kb_models + + + + + Cherry B.UNLIMITED + kb_models + + + + + Cherry Blue Line CyBo@rd + kb_models + + + + + Cherry Blue Line CyBo@rd (alt.) + kb_models + + + + + Cherry CyBo@rd USB-Hub + kb_models + + + + + Cherry CyMotion Expert + kb_models + + + + + Cherry CyMotion Master Linux + kb_models + + + + + Cherry CyMotion Master XPress + kb_models + + + + + Chicony Internet + kb_models + + + + + Chicony KB-9885 + kb_models + + + + + Chicony KU-0108 + kb_models + + + + + Chicony KU-0420 + kb_models + + + + + Chromebook + kb_models + + + + + Classmate PC + kb_models + + + + + Compaq Armada laptop + kb_models + + + + + Compaq Easy Access + kb_models + + + + + Compaq Internet (13 keys) + kb_models + + + + + Compaq Internet (18 keys) + kb_models + + + + + Compaq Internet (7 keys) + kb_models + + + + + Compaq Presario laptop + kb_models + + + + + Compaq iPaq + kb_models + + + + + Creative Desktop Wireless 7000 + kb_models + + + + + DTK2000 + kb_models + + + + + Dell + kb_models + + + + + Dell 101-key PC + kb_models + + + + + Dell Inspiron 6000/8000 laptop + kb_models + + + + + Dell Latitude laptop + kb_models + + + + + Dell Precision M laptop + kb_models + + + + + Dell Precision M65 laptop + kb_models + + + + + Dell SK-8125 + kb_models + + + + + Dell SK-8135 + kb_models + + + + + Dell USB Multimedia + kb_models + + + + + Dexxa Wireless Desktop + kb_models + + + + + Diamond 9801/9802 + kb_models + + + + + Ennyah DKB-1008 + kb_models + + + + + Everex STEPnote + kb_models + + + + + FL90 + kb_models + + + + + Fujitsu-Siemens Amilo laptop + kb_models + + + + + Generic 101-key PC + kb_models + Общий 101-ключ + + + + Generic 102-key PC + kb_models + Общий 102-ключ + + + + Generic 104-key PC + kb_models + Общий 104-ключ + + + + Generic 104-key PC with L-shaped Enter key + kb_models + + + + + Generic 105-key PC + kb_models + Общий 105-ключ + + + + Generic 86-key PC + kb_models + Общий 86-ключ + + + + Genius Comfy KB-12e + kb_models + + + + + Genius Comfy KB-16M/Multimedia KWD-910 + kb_models + + + + + Genius Comfy KB-21e-Scroll + kb_models + + + + + Genius KB-19e NB + kb_models + + + + + Genius KKB-2050HS + kb_models + + + + + Gyration + kb_models + + + + + Happy Hacking + kb_models + + + + + Happy Hacking for Mac + kb_models + + + + + Hewlett-Packard Internet + kb_models + + + + + Hewlett-Packard Mini 110 laptop + kb_models + + + + + Hewlett-Packard NEC SK-2500 Multimedia + kb_models + + + + + Hewlett-Packard Omnibook 500 + kb_models + + + + + Hewlett-Packard Omnibook 500 FA + kb_models + + + + + Hewlett-Packard Omnibook 6000/6100 + kb_models + + + + + Hewlett-Packard Omnibook XE3 GC + kb_models + + + + + Hewlett-Packard Omnibook XE3 GF + kb_models + + + + + Hewlett-Packard Omnibook XT1000 + kb_models + + + + + Hewlett-Packard Pavilion ZT1100 + kb_models + + + + + Hewlett-Packard Pavilion dv5 + kb_models + + + + + Hewlett-Packard nx9020 + kb_models + + + + + Honeywell Euroboard + kb_models + + + + + IBM Rapid Access + kb_models + + + + + IBM Rapid Access II + kb_models + + + + + IBM Space Saver + kb_models + + + + + IBM ThinkPad 560Z/600/600E/A22E + kb_models + + + + + IBM ThinkPad R60/T60/R61/T61 + kb_models + + + + + IBM ThinkPad Z60m/Z60t/Z61m/Z61t + kb_models + + + + + Keytronic FlexPro + kb_models + + + + + Kinesis + kb_models + + + + + Logitech + kb_models + + + + + Logitech Access + kb_models + + + + + Logitech Cordless Desktop + kb_models + + + + + Logitech Cordless Desktop (alt.) + kb_models + + + + + Logitech Cordless Desktop EX110 + kb_models + + + + + Logitech Cordless Desktop LX-300 + kb_models + + + + + Logitech Cordless Desktop Navigator + kb_models + + + + + Logitech Cordless Desktop Optical + kb_models + + + + + Logitech Cordless Desktop Pro (2nd alt.) + kb_models + + + + + Logitech Cordless Desktop iTouch + kb_models + + + + + Logitech Cordless Freedom/Desktop Navigator + kb_models + + + + + Logitech G15 extra keys via G15daemon + kb_models + + + + + Logitech Internet + kb_models + + + + + Logitech Internet 350 + kb_models + + + + + Logitech Internet Navigator + kb_models + + + + + Logitech Ultra-X + kb_models + + + + + Logitech Ultra-X Cordless Media Desktop + kb_models + + + + + Logitech diNovo + kb_models + + + + + Logitech diNovo Edge + kb_models + + + + + Logitech iTouch + kb_models + + + + + Logitech iTouch Cordless Y-RB6 + kb_models + + + + + Logitech iTouch Internet Navigator SE + kb_models + + + + + Logitech iTouch Internet Navigator SE USB + kb_models + + + + + MacBook/MacBook Pro + kb_models + + + + + MacBook/MacBook Pro (intl.) + kb_models + + + + + Macintosh + kb_models + + + + + Macintosh Old + kb_models + + + + + Memorex MX1998 + kb_models + + + + + Memorex MX2500 EZ-Access + kb_models + + + + + Memorex MX2750 + kb_models + + + + + Microsoft Comfort Curve 2000 + kb_models + + + + + Microsoft Internet + kb_models + + + + + Microsoft Internet Pro (Swedish) + kb_models + + + + + Microsoft Natural + kb_models + + + + + Microsoft Natural Elite + kb_models + + + + + Microsoft Natural Ergonomic 4000 + kb_models + + + + + Microsoft Natural Pro OEM + kb_models + + + + + Microsoft Natural Pro USB/Internet Pro + kb_models + + + + + Microsoft Natural Pro/Internet Pro + kb_models + + + + + Microsoft Natural Wireless Ergonomic 7000 + kb_models + + + + + Microsoft Office Keyboard + kb_models + + + + + Microsoft Surface + kb_models + + + + + Microsoft Wireless Multimedia 1.0A + kb_models + + + + + NEC SK-1300 + kb_models + + + + + NEC SK-2500 + kb_models + + + + + NEC SK-6200 + kb_models + + + + + NEC SK-7100 + kb_models + + + + + Northgate OmniKey 101 + kb_models + + + + + OLPC + kb_models + + + + + Ortek Multimedia/Internet MCK-800 + kb_models + + + + + PC-98 + kb_models + + + + + Propeller Voyager KTEZ-1000 + kb_models + + + + + QTronix Scorpius 98N+ + kb_models + + + + + SVEN Ergonomic 2500 + kb_models + + + + + SVEN Slim 303 + kb_models + + + + + Samsung SDM 4500P + kb_models + + + + + Samsung SDM 4510P + kb_models + + + + + Sanwa Supply SKB-KG3 + kb_models + + + + + Silvercrest Multimedia Wireless + kb_models + + + + + SteelSeries Apex 300 (Apex RAW) + kb_models + + + + + Sun Type 6 (Japanese) + kb_models + + + + + Sun Type 6 USB (Japanese) + kb_models + + + + + Sun Type 6 USB (Unix) + kb_models + + + + + Sun Type 6/7 USB + kb_models + + + + + Sun Type 6/7 USB (European) + kb_models + + + + + Sun Type 7 USB + kb_models + + + + + Sun Type 7 USB (European) + kb_models + + + + + Sun Type 7 USB (Japanese)/Japanese 106-key + kb_models + + + + + Sun Type 7 USB (Unix) + kb_models + + + + + Super Power Multimedia + kb_models + + + + + Symplon PaceBook tablet + kb_models + + + + + Targa Visionary 811 + kb_models + + + + + Toshiba Satellite S3000 + kb_models + + + + + Truly Ergonomic 227 + kb_models + + + + + Truly Ergonomic 229 + kb_models + + + + + Truly Ergonomic Computer Keyboard Model 227 (Wide Alt keys) + kb_models + + + + + Truly Ergonomic Computer Keyboard Model 229 (Standard sized Alt keys, additional Super and Menu key) + kb_models + + + + + Trust Direct Access + kb_models + + + + + Trust Slimline + kb_models + + + + + Trust Wireless Classic + kb_models + + + + + TypeMatrix EZ-Reach 2020 + kb_models + + + + + TypeMatrix EZ-Reach 2030 PS2 + kb_models + + + + + TypeMatrix EZ-Reach 2030 USB + kb_models + + + + + TypeMatrix EZ-Reach 2030 USB (102/105:EU mode) + kb_models + + + + + TypeMatrix EZ-Reach 2030 USB (106:JP mode) + kb_models + + + + + Unitek KB-1925 + kb_models + + + + + ViewSonic KU-306 Internet + kb_models + + + + + Winbook Model XP5 + kb_models + + + + + Yahoo! Internet + kb_models + + + + + eMachines m6800 laptop + kb_models + + + + + kb_variants + + Akan kb_variants - + Albanian (Plisi) kb_variants - + Albanian (Veqilharxhi) kb_variants - + Arabic (AZERTY) kb_variants - + Arabic (AZERTY, Eastern Arabic numerals) kb_variants - + Arabic (Algeria) kb_variants - + Arabic (Buckwalter) kb_variants - + Arabic (Eastern Arabic numerals) kb_variants - + Arabic (Macintosh) kb_variants - + Arabic (OLPC) kb_variants - + Arabic (Pakistan) kb_variants - + Arabic (QWERTY) kb_variants - + Arabic (QWERTY, Eastern Arabic numerals) kb_variants - + Armenian (alt. eastern) kb_variants - + Armenian (alt. phonetic) kb_variants - + Armenian (eastern) kb_variants - + Armenian (phonetic) kb_variants - + Armenian (western) kb_variants - + Asturian (Spain, with bottom-dot H and L) kb_variants - + Avatime kb_variants - + Azerbaijani (Cyrillic) kb_variants - + Bangla (India) kb_variants - + Bangla (India, Baishakhi Inscript) kb_variants - + Bangla (India, Baishakhi) kb_variants - + Bangla (India, Bornona) kb_variants - + Bangla (India, Gitanjali) kb_variants - + Bangla (India, Probhat) kb_variants - + Bangla (Probhat) kb_variants - + Bashkirian kb_variants - + Belarusian (Latin) kb_variants - + Belarusian (intl.) kb_variants - + Belarusian (legacy) kb_variants - + Belgian (ISO, alt.) kb_variants - + Belgian (Latin-9 only, alt.) kb_variants - + Belgian (Sun dead keys) kb_variants - + Belgian (Sun dead keys, alt.) kb_variants - + Belgian (Wang 724 AZERTY) kb_variants - + Belgian (alt.) kb_variants - + Belgian (no dead keys) kb_variants - + Berber (Morocco, Tifinagh alt.) kb_variants - + Berber (Morocco, Tifinagh extended phonetic) kb_variants - + Berber (Morocco, Tifinagh extended) kb_variants - + Berber (Morocco, Tifinagh phonetic) kb_variants - + Berber (Morocco, Tifinagh phonetic, alt.) kb_variants - + Berber (Morocco, Tifinagh) kb_variants - + Bosnian (US) kb_variants - + Bosnian (US, with Bosnian digraphs) kb_variants - + Bosnian (with Bosnian digraphs) kb_variants - + Bosnian (with guillemets) kb_variants - + Braille (left-handed inverted thumb) kb_variants - + Braille (left-handed) kb_variants - + Braille (right-handed inverted thumb) kb_variants - + Braille (right-handed) kb_variants - + Bulgarian (enhanced) kb_variants - + Bulgarian (new phonetic) kb_variants - + Bulgarian (traditional phonetic) kb_variants - + Burmese Zawgyi kb_variants - + Cameroon (AZERTY, intl.) kb_variants - + Cameroon (Dvorak, intl.) kb_variants - + Cameroon Multilingual (QWERTY, intl.) kb_variants - + Canadian (intl.) kb_variants - + Canadian (intl., 1st part) kb_variants - + Canadian (intl., 2nd part) kb_variants - + Catalan (Spain, with middle-dot L) kb_variants - + Cherokee kb_variants - + Chuvash kb_variants - + Chuvash (Latin) kb_variants - + CloGaelach kb_variants - + Crimean Tatar (Turkish Alt-Q) kb_variants - + Crimean Tatar (Turkish F) kb_variants - + Crimean Tatar (Turkish Q) kb_variants - + Croatian (US) kb_variants - + Croatian (US, with Croatian digraphs) kb_variants - + Croatian (with Croatian digraphs) kb_variants - + Croatian (with guillemets) kb_variants - + Czech (QWERTY) kb_variants - + Czech (QWERTY, Macintosh) kb_variants - + Czech (QWERTY, extended backslash) kb_variants - + Czech (UCW, only accented letters) kb_variants - + Czech (US, Dvorak, UCW support) kb_variants - + Czech (with &lt;|&gt; key) kb_variants - + Danish (Dvorak) kb_variants - + Danish (Macintosh) kb_variants - + Danish (Macintosh, no dead keys) kb_variants - + Danish (Windows) kb_variants - + Danish (no dead keys) kb_variants - - - Dutch (Macintosh) - kb_variants - - - - - Dutch (Sun dead keys) - kb_variants - - - - - Dutch (standard) - kb_variants - - - - - English (Canada) - kb_variants - - - - - English (Colemak) - kb_variants - - - - - English (Dvorak) - kb_variants - - - - - English (Dvorak, alt. intl.) - kb_variants - - - - - English (Dvorak, intl., with dead keys) - kb_variants - - - - - English (Dvorak, left-handed) - kb_variants - - - - - English (Dvorak, right-handed) - kb_variants - - - - - English (Ghana, GILLBT) - kb_variants - - - English (Ghana, multilingual) + Default kb_variants - English (India, with rupee) + Dutch (Macintosh) kb_variants - English (Macintosh) + Dutch (Sun dead keys) kb_variants - English (Mali, US, Macintosh) + Dutch (standard) kb_variants - English (Mali, US, intl.) + English (Canada) kb_variants - English (Norman) + English (Colemak) kb_variants - English (UK, Colemak) + English (Dvorak) kb_variants - English (UK, Dvorak) + English (Dvorak, alt. intl.) kb_variants - English (UK, Dvorak, with UK punctuation) + English (Dvorak, intl., with dead keys) kb_variants - English (UK, Macintosh) + English (Dvorak, left-handed) kb_variants - English (UK, Macintosh, intl.) + English (Dvorak, right-handed) kb_variants - English (UK, extended, Windows) + English (Ghana, GILLBT) kb_variants - English (UK, intl., with dead keys) + English (Ghana, multilingual) kb_variants - English (US, Symbolic) + English (India, with rupee) kb_variants - English (US, alt. intl.) + English (Macintosh) kb_variants - English (US, euro on 5) + English (Mali, US, Macintosh) kb_variants - English (US, intl., with dead keys) + English (Mali, US, intl.) kb_variants - English (Workman) + English (Norman) kb_variants - English (Workman, intl., with dead keys) + English (UK, Colemak) kb_variants - English (classic Dvorak) + English (UK, Dvorak) kb_variants - English (intl., with AltGr dead keys) + English (UK, Dvorak, with UK punctuation) kb_variants - English (programmer Dvorak) + English (UK, Macintosh) kb_variants - English (the divide/multiply toggle the layout) + English (UK, Macintosh, intl.) kb_variants - Esperanto (Brazil, Nativo) + English (UK, extended, Windows) kb_variants - Esperanto (Portugal, Nativo) + English (UK, intl., with dead keys) kb_variants - Esperanto (legacy) + English (US, Symbolic) kb_variants - Estonian (Dvorak) + English (US, alt. intl.) kb_variants - Estonian (US) + English (US, euro on 5) kb_variants - Estonian (no dead keys) + English (US, intl., with dead keys) kb_variants - Ewe + English (Workman) kb_variants - Faroese (no dead keys) + English (Workman, intl., with dead keys) kb_variants - Filipino (Capewell-Dvorak, Baybayin) + English (classic Dvorak) kb_variants - Filipino (Capewell-Dvorak, Latin) + English (intl., with AltGr dead keys) kb_variants - Filipino (Capewell-QWERF 2006, Baybayin) + English (programmer Dvorak) kb_variants - Filipino (Capewell-QWERF 2006, Latin) + English (the divide/multiply toggle the layout) kb_variants - Filipino (Colemak, Baybayin) + Esperanto (Brazil, Nativo) kb_variants - Filipino (Colemak, Latin) + Esperanto (Portugal, Nativo) kb_variants - Filipino (Dvorak, Baybayin) + Esperanto (legacy) kb_variants - Filipino (Dvorak, Latin) + Estonian (Dvorak) kb_variants - Filipino (QWERTY, Baybayin) + Estonian (US) kb_variants - Finnish (Macintosh) + Estonian (no dead keys) kb_variants - Finnish (Windows) + Ewe kb_variants - Finnish (classic) + Faroese (no dead keys) kb_variants - Finnish (classic, no dead keys) + Filipino (Capewell-Dvorak, Baybayin) kb_variants - French (AZERTY) + Filipino (Capewell-Dvorak, Latin) kb_variants - French (AZERTY, AFNOR) + Filipino (Capewell-QWERF 2006, Baybayin) kb_variants - French (BEPO) + Filipino (Capewell-QWERF 2006, Latin) kb_variants - French (BEPO, AFNOR) + Filipino (Colemak, Baybayin) kb_variants - French (BEPO, Latin-9 only) + Filipino (Colemak, Latin) kb_variants - French (Breton) + Filipino (Dvorak, Baybayin) kb_variants - French (Cameroon) + Filipino (Dvorak, Latin) kb_variants - French (Canada, Dvorak) + Filipino (QWERTY, Baybayin) kb_variants - French (Canada, legacy) + Finnish (Macintosh) kb_variants - French (Dvorak) + Finnish (Windows) kb_variants - French (Macintosh) + Finnish (classic) kb_variants - French (Mali, alt.) + Finnish (classic, no dead keys) kb_variants - French (Morocco) + French (AZERTY) kb_variants - French (Sun dead keys) + French (AZERTY, AFNOR) kb_variants - French (Switzerland) + French (BEPO) kb_variants - French (Switzerland, Macintosh) + French (BEPO, AFNOR) kb_variants - French (Switzerland, Sun dead keys) + French (BEPO, Latin-9 only) kb_variants - French (Switzerland, no dead keys) + French (Breton) kb_variants - French (US) + French (Cameroon) kb_variants - French (alt.) + French (Canada, Dvorak) kb_variants - French (alt., Latin-9 only) + French (Canada, legacy) kb_variants - French (alt., Sun dead keys) + French (Dvorak) kb_variants - French (alt., no dead keys) + French (Macintosh) kb_variants - French (legacy, alt.) + French (Mali, alt.) kb_variants - French (legacy, alt., Sun dead keys) + French (Morocco) kb_variants - French (legacy, alt., no dead keys) + French (Sun dead keys) kb_variants - French (no dead keys) + French (Switzerland) kb_variants - Friulian (Italy) + French (Switzerland, Macintosh) kb_variants - Fula + French (Switzerland, Sun dead keys) kb_variants - Ga + French (Switzerland, no dead keys) kb_variants - Georgian (France, AZERTY Tskapo) + French (US) kb_variants - Georgian (Italy) + French (alt.) kb_variants - Georgian (MESS) + French (alt., Latin-9 only) kb_variants - Georgian (ergonomic) + French (alt., Sun dead keys) kb_variants - German (Austria, Macintosh) + French (alt., no dead keys) kb_variants - German (Austria, Sun dead keys) + French (legacy, alt.) kb_variants - German (Austria, no dead keys) + French (legacy, alt., Sun dead keys) kb_variants - German (Dvorak) + French (legacy, alt., no dead keys) kb_variants - German (E1) + French (no dead keys) kb_variants - German (E2) + Friulian (Italy) kb_variants - German (Macintosh) + Fula kb_variants - German (Macintosh, no dead keys) + Ga kb_variants - German (Neo 2) + Georgian (France, AZERTY Tskapo) kb_variants - German (QWERTY) + Georgian (Italy) kb_variants - German (Sun dead keys) + Georgian (MESS) kb_variants - German (Switzerland, Macintosh) + Georgian (ergonomic) kb_variants - German (Switzerland, Sun dead keys) + German (Austria, Macintosh) kb_variants - German (Switzerland, legacy) + German (Austria, Sun dead keys) kb_variants - German (Switzerland, no dead keys) + German (Austria, no dead keys) kb_variants - German (T3) + German (Dvorak) kb_variants - German (US) + German (E1) kb_variants - German (dead acute) + German (E2) kb_variants - German (dead grave acute) + German (Macintosh) kb_variants - German (dead tilde) + German (Macintosh, no dead keys) kb_variants - German (no dead keys) + German (Neo 2) kb_variants - Greek (extended) + German (QWERTY) kb_variants - Greek (no dead keys) + German (Sun dead keys) kb_variants - Greek (polytonic) + German (Switzerland, Macintosh) kb_variants - Greek (simple) + German (Switzerland, Sun dead keys) kb_variants - Gujarati + German (Switzerland, legacy) kb_variants - Hanyu Pinyin (with AltGr dead keys) + German (Switzerland, no dead keys) kb_variants - Hausa (Ghana) + German (T3) kb_variants - Hausa (Nigeria) + German (US) kb_variants - Hawaiian + German (dead acute) kb_variants - Hebrew (Biblical, Tiro) + German (dead grave acute) kb_variants - Hebrew (lyx) + German (dead tilde) kb_variants - Hebrew (phonetic) + German (no dead keys) kb_variants - Hindi (Bolnagri) + Greek (extended) kb_variants - Hindi (KaGaPa, phonetic) + Greek (no dead keys) kb_variants - Hindi (Wx) + Greek (polytonic) kb_variants - Hungarian (QWERTY) + Greek (simple) kb_variants - Hungarian (QWERTY, 101-key, comma, dead keys) + Gujarati kb_variants - Hungarian (QWERTY, 101-key, comma, no dead keys) + Hanyu Pinyin (with AltGr dead keys) kb_variants - Hungarian (QWERTY, 101-key, dot, dead keys) + Hausa (Ghana) kb_variants - Hungarian (QWERTY, 101-key, dot, no dead keys) + Hausa (Nigeria) kb_variants - Hungarian (QWERTY, 102-key, comma, dead keys) + Hawaiian kb_variants - Hungarian (QWERTY, 102-key, comma, no dead keys) + Hebrew (Biblical, Tiro) kb_variants - Hungarian (QWERTY, 102-key, dot, dead keys) + Hebrew (lyx) kb_variants - Hungarian (QWERTY, 102-key, dot, no dead keys) + Hebrew (phonetic) kb_variants - Hungarian (QWERTZ, 101-key, comma, dead keys) + Hindi (Bolnagri) kb_variants - Hungarian (QWERTZ, 101-key, comma, no dead keys) + Hindi (KaGaPa, phonetic) kb_variants - Hungarian (QWERTZ, 101-key, dot, dead keys) + Hindi (Wx) kb_variants - Hungarian (QWERTZ, 101-key, dot, no dead keys) + Hungarian (QWERTY) kb_variants - Hungarian (QWERTZ, 102-key, comma, dead keys) + Hungarian (QWERTY, 101-key, comma, dead keys) kb_variants - Hungarian (QWERTZ, 102-key, comma, no dead keys) + Hungarian (QWERTY, 101-key, comma, no dead keys) kb_variants - Hungarian (QWERTZ, 102-key, dot, dead keys) + Hungarian (QWERTY, 101-key, dot, dead keys) kb_variants - Hungarian (QWERTZ, 102-key, dot, no dead keys) + Hungarian (QWERTY, 101-key, dot, no dead keys) kb_variants - Hungarian (no dead keys) + Hungarian (QWERTY, 102-key, comma, dead keys) kb_variants - Hungarian (standard) + Hungarian (QWERTY, 102-key, comma, no dead keys) kb_variants - Icelandic (Dvorak) + Hungarian (QWERTY, 102-key, dot, dead keys) kb_variants - Icelandic (Macintosh) + Hungarian (QWERTY, 102-key, dot, no dead keys) kb_variants - Icelandic (Macintosh, legacy) + Hungarian (QWERTZ, 101-key, comma, dead keys) kb_variants - Icelandic (Sun dead keys) + Hungarian (QWERTZ, 101-key, comma, no dead keys) kb_variants - Icelandic (no dead keys) + Hungarian (QWERTZ, 101-key, dot, dead keys) kb_variants - Igbo + Hungarian (QWERTZ, 101-key, dot, no dead keys) kb_variants - Indic (phonetic, IPA) + Hungarian (QWERTZ, 102-key, comma, dead keys) kb_variants - Indonesian (Arab Melayu, extended phonetic) + Hungarian (QWERTZ, 102-key, comma, no dead keys) kb_variants - Inuktitut + Hungarian (QWERTZ, 102-key, dot, dead keys) kb_variants - Irish (UnicodeExpert) + Hungarian (QWERTZ, 102-key, dot, no dead keys) kb_variants - Italian (IBM 142) + Hungarian (no dead keys) kb_variants - Italian (Macintosh) + Hungarian (standard) kb_variants - Italian (US) + Icelandic (Dvorak) kb_variants - Italian (Windows) + Icelandic (Macintosh) kb_variants - Italian (intl., with dead keys) + Icelandic (Macintosh, legacy) kb_variants - Italian (no dead keys) + Icelandic (Sun dead keys) kb_variants - Japanese (Dvorak) + Icelandic (no dead keys) kb_variants - Japanese (Kana 86) + Igbo kb_variants - Japanese (Kana) + Indic (phonetic, IPA) kb_variants - Japanese (Macintosh) + Indonesian (Arab Melayu, extended phonetic) kb_variants - Japanese (OADG 109A) + Inuktitut kb_variants - Kabylian (Algeria, Tifinagh) + Irish (UnicodeExpert) kb_variants - Kabylian (azerty layout, with dead keys) + Italian (IBM 142) kb_variants - Kabylian (qwerty-gb layout, with dead keys) + Italian (Macintosh) kb_variants - Kabylian (qwerty-us layout, with dead keys) + Italian (US) kb_variants - Kalmyk + Italian (Windows) kb_variants - Kannada + Italian (intl., with dead keys) kb_variants - Kannada (KaGaPa, phonetic) + Italian (no dead keys) kb_variants - Kashubian + Japanese (Dvorak) kb_variants - Kazakh (Latin) + Japanese (Kana 86) kb_variants - Kazakh (extended) + Japanese (Kana) kb_variants - Kazakh (with Russian) + Japanese (Macintosh) kb_variants - Kikuyu + Japanese (OADG 109A) kb_variants - Komi + Kabylian (Algeria, Tifinagh) kb_variants - Korean (101/104-key compatible) + Kabylian (azerty layout, with dead keys) kb_variants - Kurdish (Iran, Arabic-Latin) + Kabylian (qwerty-gb layout, with dead keys) kb_variants - Kurdish (Iran, F) + Kabylian (qwerty-us layout, with dead keys) kb_variants - Kurdish (Iran, Latin Alt-Q) + Kalmyk kb_variants - Kurdish (Iran, Latin Q) + Kannada kb_variants - Kurdish (Iraq, Arabic-Latin) + Kannada (KaGaPa, phonetic) kb_variants - Kurdish (Iraq, F) + Kashubian kb_variants - Kurdish (Iraq, Latin Alt-Q) + Kazakh (Latin) kb_variants - Kurdish (Iraq, Latin Q) + Kazakh (extended) kb_variants - Kurdish (Syria, F) + Kazakh (with Russian) kb_variants - Kurdish (Syria, Latin Alt-Q) + Kikuyu kb_variants - Kurdish (Syria, Latin Q) + Komi kb_variants - Kurdish (Turkey, F) + Korean (101/104-key compatible) kb_variants - Kurdish (Turkey, Latin Alt-Q) + Kurdish (Iran, Arabic-Latin) kb_variants - Kurdish (Turkey, Latin Q) + Kurdish (Iran, F) kb_variants - Kyrgyz (phonetic) + Kurdish (Iran, Latin Alt-Q) kb_variants - Lao (STEA) + Kurdish (Iran, Latin Q) kb_variants - Latvian (F) + Kurdish (Iraq, Arabic-Latin) kb_variants - Latvian (adapted) + Kurdish (Iraq, F) kb_variants - Latvian (apostrophe) + Kurdish (Iraq, Latin Alt-Q) kb_variants - Latvian (ergonomic, ŪGJRMV) + Kurdish (Iraq, Latin Q) kb_variants - Latvian (modern) + Kurdish (Syria, F) kb_variants - Latvian (tilde) + Kurdish (Syria, Latin Alt-Q) kb_variants - Lithuanian (IBM LST 1205-92) + Kurdish (Syria, Latin Q) kb_variants - Lithuanian (LEKP) + Kurdish (Turkey, F) kb_variants - Lithuanian (LEKPa) + Kurdish (Turkey, Latin Alt-Q) kb_variants - Lithuanian (US) + Kurdish (Turkey, Latin Q) kb_variants - Lithuanian (standard) + Kyrgyz (phonetic) kb_variants - Lower Sorbian + Lao (STEA) kb_variants - Lower Sorbian (QWERTZ) + Latvian (F) kb_variants - Macedonian (no dead keys) + Latvian (adapted) kb_variants - Malay (Jawi, phonetic) + Latvian (apostrophe) kb_variants - Malayalam + Latvian (ergonomic, ŪGJRMV) kb_variants - Malayalam (Lalitha) + Latvian (modern) kb_variants - Malayalam (enhanced Inscript, with rupee) + Latvian (tilde) kb_variants - Maltese (UK, with AltGr overrides) + Lithuanian (IBM LST 1205-92) kb_variants - Maltese (US layout with AltGr overrides) + Lithuanian (LEKP) kb_variants - Maltese (US) + Lithuanian (LEKPa) kb_variants - Manipuri (Eeyek) + Lithuanian (US) kb_variants - Marathi (KaGaPa, phonetic) + Lithuanian (standard) kb_variants - Marathi (enhanced Inscript) + Lower Sorbian kb_variants - Mari + Lower Sorbian (QWERTZ) kb_variants - Mmuock + Macedonian (no dead keys) kb_variants - Moldavian (Gagauz) + Malay (Jawi, phonetic) kb_variants - Mongolian (Bichig) + Malayalam kb_variants - Mongolian (Galik) + Malayalam (Lalitha) kb_variants - Mongolian (Manchu Galik) + Malayalam (enhanced Inscript, with rupee) kb_variants - Mongolian (Manchu) + Maltese (UK, with AltGr overrides) kb_variants - Mongolian (Todo Galik) + Maltese (US layout with AltGr overrides) kb_variants - Mongolian (Todo) + Maltese (US) kb_variants - Mongolian (Xibe) + Manipuri (Eeyek) kb_variants - Montenegrin (Cyrillic) + Marathi (KaGaPa, phonetic) kb_variants - Montenegrin (Cyrillic, ZE and ZHE swapped) + Marathi (enhanced Inscript) kb_variants - Montenegrin (Cyrillic, with guillemets) + Mari kb_variants - Montenegrin (Latin, QWERTY) + Mmuock kb_variants - Montenegrin (Latin, Unicode) + Moldavian (Gagauz) kb_variants - Montenegrin (Latin, Unicode, QWERTY) + Mongolian (Bichig) kb_variants - Montenegrin (Latin, with guillemets) + Mongolian (Galik) kb_variants - Northern Saami (Finland) + Mongolian (Manchu Galik) kb_variants - Northern Saami (Norway) + Mongolian (Manchu) kb_variants - Northern Saami (Norway, no dead keys) + Mongolian (Todo Galik) kb_variants - Northern Saami (Sweden) + Mongolian (Todo) kb_variants - Norwegian (Colemak) + Mongolian (Xibe) kb_variants - Norwegian (Dvorak) + Montenegrin (Cyrillic) kb_variants - Norwegian (Macintosh) + Montenegrin (Cyrillic, ZE and ZHE swapped) kb_variants - Norwegian (Macintosh, no dead keys) + Montenegrin (Cyrillic, with guillemets) kb_variants - Norwegian (Windows) + Montenegrin (Latin, QWERTY) kb_variants - Norwegian (no dead keys) + Montenegrin (Latin, Unicode) kb_variants - Occitan + Montenegrin (Latin, Unicode, QWERTY) kb_variants - Ogham + Montenegrin (Latin, with guillemets) kb_variants - Ogham (IS434) + Northern Saami (Finland) kb_variants - Ol Chiki + Northern Saami (Norway) kb_variants - Oriya + Northern Saami (Norway, no dead keys) kb_variants - Ossetian (Georgia) + Northern Saami (Sweden) kb_variants - Ossetian (Windows) + Norwegian (Colemak) kb_variants - Ossetian (legacy) + Norwegian (Dvorak) kb_variants - Pannonian Rusyn + Norwegian (Macintosh) kb_variants - Pashto + Norwegian (Macintosh, no dead keys) kb_variants - Pashto (Afghanistan, OLPC) + Norwegian (Windows) kb_variants - Persian (Afghanistan, Dari OLPC) + Norwegian (no dead keys) kb_variants - Persian (with Persian keypad) + Occitan kb_variants - Polish (British keyboard) + Ogham kb_variants - Polish (Dvorak) + Ogham (IS434) kb_variants - Polish (Dvorak, with Polish quotes on key 1) + Ol Chiki kb_variants - Polish (Dvorak, with Polish quotes on quotemark key) + Oriya kb_variants - Polish (QWERTZ) + Ossetian (Georgia) kb_variants - Polish (legacy) + Ossetian (Windows) kb_variants - Polish (programmer Dvorak) + Ossetian (legacy) kb_variants - Portuguese (Brazil, Dvorak) + Pannonian Rusyn kb_variants - Portuguese (Brazil, IBM/Lenovo ThinkPad) + Pashto kb_variants - Portuguese (Brazil, Nativo for US keyboards) + Pashto (Afghanistan, OLPC) kb_variants - Portuguese (Brazil, Nativo) + Persian (Afghanistan, Dari OLPC) kb_variants - Portuguese (Brazil, no dead keys) + Persian (with Persian keypad) kb_variants - Portuguese (Macintosh) + Polish (British keyboard) kb_variants - Portuguese (Macintosh, Sun dead keys) + Polish (Dvorak) kb_variants - Portuguese (Macintosh, no dead keys) + Polish (Dvorak, with Polish quotes on key 1) kb_variants - Portuguese (Nativo for US keyboards) + Polish (Dvorak, with Polish quotes on quotemark key) kb_variants - Portuguese (Nativo) + Polish (QWERTZ) kb_variants - Portuguese (Sun dead keys) + Polish (legacy) kb_variants - Portuguese (no dead keys) + Polish (programmer Dvorak) kb_variants - Punjabi (Gurmukhi Jhelum) + Portuguese (Brazil, Dvorak) kb_variants - Punjabi (Gurmukhi) + Portuguese (Brazil, IBM/Lenovo ThinkPad) kb_variants - Romanian (Germany) + Portuguese (Brazil, Nativo for US keyboards) kb_variants - Romanian (Germany, no dead keys) + Portuguese (Brazil, Nativo) kb_variants - Romanian (Windows) + Portuguese (Brazil, no dead keys) kb_variants - Romanian (cedilla) + Portuguese (Macintosh) kb_variants - Romanian (standard cedilla) + Portuguese (Macintosh, Sun dead keys) kb_variants - Romanian (standard) + Portuguese (Macintosh, no dead keys) kb_variants - Russian (Belarus) + Portuguese (Nativo for US keyboards) kb_variants - Russian (Czech, phonetic) + Portuguese (Nativo) kb_variants - Russian (DOS) + Portuguese (Sun dead keys) kb_variants - Russian (Georgia) + Portuguese (no dead keys) kb_variants - Russian (Germany, phonetic) + Punjabi (Gurmukhi Jhelum) kb_variants - Russian (Kazakhstan, with Kazakh) + Punjabi (Gurmukhi) kb_variants - Russian (Macintosh) + Romanian (Germany) kb_variants - Russian (Poland, phonetic Dvorak) + Romanian (Germany, no dead keys) kb_variants - Russian (Sweden, phonetic) + Romanian (Windows) kb_variants - Russian (Sweden, phonetic, no dead keys) + Romanian (cedilla) kb_variants - Russian (US, phonetic) + Romanian (standard cedilla) kb_variants - Russian (Ukraine, standard RSTU) + Romanian (standard) kb_variants - Russian (legacy) + Russian (Belarus) kb_variants - Russian (phonetic) + Russian (Czech, phonetic) kb_variants - Russian (phonetic, AZERTY) + Russian (DOS) kb_variants - Russian (phonetic, Dvorak) + Russian (Georgia) kb_variants - Russian (phonetic, French) + Russian (Germany, phonetic) kb_variants - Russian (phonetic, Windows) + Russian (Kazakhstan, with Kazakh) kb_variants - Russian (phonetic, YAZHERTY) + Russian (Macintosh) kb_variants - Russian (typewriter) + Russian (Poland, phonetic Dvorak) kb_variants - Russian (typewriter, legacy) + Russian (Sweden, phonetic) kb_variants - Saisiyat (Taiwan) + Russian (Sweden, phonetic, no dead keys) kb_variants - Samogitian + Russian (US, phonetic) kb_variants - Sanskrit (KaGaPa, phonetic) + Russian (Ukraine, standard RSTU) kb_variants - Serbian (Cyrillic, ZE and ZHE swapped) + Russian (legacy) kb_variants - Serbian (Cyrillic, with guillemets) + Russian (phonetic) kb_variants - Serbian (Latin) + Russian (phonetic, AZERTY) kb_variants - Serbian (Latin, QWERTY) + Russian (phonetic, Dvorak) kb_variants - Serbian (Latin, Unicode) + Russian (phonetic, French) kb_variants - Serbian (Latin, Unicode, QWERTY) + Russian (phonetic, Windows) kb_variants - Serbian (Latin, with guillemets) + Russian (phonetic, YAZHERTY) kb_variants - Serbian (Russia) + Russian (typewriter) kb_variants - Serbo-Croatian (US) + Russian (typewriter, legacy) kb_variants - Sicilian + Saisiyat (Taiwan) kb_variants - Silesian + Samogitian kb_variants - Sindhi + Sanskrit (KaGaPa, phonetic) kb_variants - Sinhala (US) + Serbian (Cyrillic, ZE and ZHE swapped) kb_variants - Slovak (QWERTY) + Serbian (Cyrillic, with guillemets) kb_variants - Slovak (QWERTY, extended backslash) + Serbian (Latin) kb_variants - Slovak (extended backslash) + Serbian (Latin, QWERTY) kb_variants - Slovenian (US) + Serbian (Latin, Unicode) kb_variants - Slovenian (with guillemets) + Serbian (Latin, Unicode, QWERTY) kb_variants - Spanish (Dvorak) + Serbian (Latin, with guillemets) kb_variants - Spanish (Latin American, Colemak for gaming) + Serbian (Russia) kb_variants - Spanish (Latin American, Colemak) + Serbo-Croatian (US) kb_variants - Spanish (Latin American, Dvorak) + Sicilian kb_variants - Spanish (Latin American, Sun dead keys) + Silesian kb_variants - Spanish (Latin American, dead tilde) + Sindhi kb_variants - Spanish (Latin American, no dead keys) + Sinhala (US) kb_variants - Spanish (Macintosh) + Slovak (QWERTY) kb_variants - Spanish (Sun dead keys) + Slovak (QWERTY, extended backslash) kb_variants - Spanish (Windows) + Slovak (extended backslash) kb_variants - Spanish (dead tilde) + Slovenian (US) kb_variants - Spanish (no dead keys) + Slovenian (with guillemets) kb_variants - Swedish (Dvorak) + Spanish (Dvorak) kb_variants - Swedish (Dvorak, intl.) + Spanish (Latin American, Colemak for gaming) kb_variants - Swedish (Macintosh) + Spanish (Latin American, Colemak) kb_variants - Swedish (Svdvorak) + Spanish (Latin American, Dvorak) kb_variants - Swedish (US) + Spanish (Latin American, Sun dead keys) kb_variants - Swedish (no dead keys) + Spanish (Latin American, dead tilde) kb_variants - Swedish Sign Language + Spanish (Latin American, no dead keys) kb_variants - Syriac + Spanish (Macintosh) kb_variants - Syriac (phonetic) + Spanish (Sun dead keys) kb_variants - Taiwanese (indigenous) + Spanish (Windows) kb_variants - Tajik (legacy) + Spanish (dead tilde) kb_variants - Тоҷикӣ (красіво) + - Tamil (Inscript) + Spanish (no dead keys) kb_variants - Tamil (Sri Lanka, TamilNet '99) + Swedish (Dvorak) kb_variants - Tamil (Sri Lanka, TamilNet '99, TAB encoding) + Swedish (Dvorak, intl.) kb_variants - Tamil (TamilNet '99 with Tamil numerals) + Swedish (Macintosh) kb_variants - Tamil (TamilNet '99) + Swedish (Svdvorak) kb_variants - Tamil (TamilNet '99, TAB encoding) + Swedish (US) kb_variants - Tamil (TamilNet '99, TSCII encoding) + Swedish (no dead keys) kb_variants - Tatar + Swedish Sign Language kb_variants - Telugu + Syriac kb_variants - Telugu (KaGaPa, phonetic) + Syriac (phonetic) kb_variants - Telugu (Sarala) + Taiwanese (indigenous) kb_variants - Thai (Pattachote) + Tajik (legacy) kb_variants - + Тоҷикӣ (красіво) - Thai (TIS-820.2538) + Tamil (Inscript) kb_variants - Tibetan + Tamil (Sri Lanka, TamilNet '99) kb_variants - Tibetan (with ASCII numerals) + Tamil (Sri Lanka, TamilNet '99, TAB encoding) kb_variants - Turkish (Alt-Q) + Tamil (TamilNet '99 with Tamil numerals) kb_variants - Turkish (F) + Tamil (TamilNet '99) kb_variants - Turkish (Germany) + Tamil (TamilNet '99, TAB encoding) kb_variants - Turkish (Sun dead keys) + Tamil (TamilNet '99, TSCII encoding) kb_variants - Turkish (intl., with dead keys) + Tatar kb_variants - Turkmen (Alt-Q) + Telugu kb_variants - Udmurt + Telugu (KaGaPa, phonetic) kb_variants - Ukrainian (Windows) + Telugu (Sarala) kb_variants - Ukrainian (homophonic) + Thai (Pattachote) kb_variants - Ukrainian (legacy) + Thai (TIS-820.2538) kb_variants - Ukrainian (phonetic) + Tibetan kb_variants - Ukrainian (standard RSTU) + Tibetan (with ASCII numerals) kb_variants - Ukrainian (typewriter) + Turkish (Alt-Q) kb_variants - Urdu (Pakistan, CRULP) + Turkish (F) kb_variants - Urdu (Pakistan, NLA) + Turkish (Germany) kb_variants - Urdu (Windows) + Turkish (Sun dead keys) kb_variants - Urdu (alt. phonetic) + Turkish (intl., with dead keys) kb_variants - Urdu (phonetic) + Turkmen (Alt-Q) kb_variants - Uyghur + Udmurt kb_variants - Uzbek (Afghanistan) + Ukrainian (Windows) kb_variants - Uzbek (Afghanistan, OLPC) + Ukrainian (homophonic) kb_variants - Uzbek (Latin) + Ukrainian (legacy) kb_variants - Vietnamese (French) + Ukrainian (phonetic) kb_variants - Vietnamese (US) + Ukrainian (standard RSTU) kb_variants - Yakut + Ukrainian (typewriter) kb_variants + Urdu (Pakistan, CRULP) + kb_variants + + + + + Urdu (Pakistan, NLA) + kb_variants + + + + + Urdu (Windows) + kb_variants + + + + + Urdu (alt. phonetic) + kb_variants + + + + + Urdu (phonetic) + kb_variants + + + + + Uyghur + kb_variants + + + + + Uzbek (Afghanistan) + kb_variants + + + + + Uzbek (Afghanistan, OLPC) + kb_variants + + + + + Uzbek (Latin) + kb_variants + + + + + Vietnamese (French) + kb_variants + + + + + Vietnamese (US) + kb_variants + + + + + Yakut + kb_variants + + + + Yoruba kb_variants diff --git a/src/modules/keyboard/Config.cpp b/src/modules/keyboard/Config.cpp index 85bb2e9d6..a2f200a52 100644 --- a/src/modules/keyboard/Config.cpp +++ b/src/modules/keyboard/Config.cpp @@ -564,4 +564,5 @@ Config::setConfigurationMap( const QVariantMap& configurationMap ) void Config::retranslate() { + retranslateKeyboardModels(); } diff --git a/src/modules/keyboard/KeyboardData_p.cxxtr b/src/modules/keyboard/KeyboardData_p.cxxtr index 678bb9807..39783035a 100644 --- a/src/modules/keyboard/KeyboardData_p.cxxtr +++ b/src/modules/keyboard/KeyboardData_p.cxxtr @@ -16,797 +16,810 @@ /* This returns a reference to local, which is a terrible idea. * Good thing it's not meant to be compiled. */ -static const QStringList& kb_models_table() -{ +class kb_models : public QObject { +Q_OBJECT +public: + const QStringList& table() + { return QStringList { - QObject::tr("A4Tech KB-21", "kb_models"), - QObject::tr("A4Tech KBS-8", "kb_models"), - QObject::tr("A4Tech Wireless Desktop RFKB-23", "kb_models"), - QObject::tr("Acer AirKey V", "kb_models"), - QObject::tr("Acer C300", "kb_models"), - QObject::tr("Acer Ferrari 4000", "kb_models"), - QObject::tr("Acer laptop", "kb_models"), - QObject::tr("Advance Scorpius KI", "kb_models"), - QObject::tr("Apple", "kb_models"), - QObject::tr("Apple Aluminium (ANSI)", "kb_models"), - QObject::tr("Apple Aluminium (ISO)", "kb_models"), - QObject::tr("Apple Aluminium (JIS)", "kb_models"), - QObject::tr("Apple laptop", "kb_models"), - QObject::tr("Asus laptop", "kb_models"), - QObject::tr("Azona RF2300 wireless Internet", "kb_models"), - QObject::tr("BTC 5090", "kb_models"), - QObject::tr("BTC 5113RF Multimedia", "kb_models"), - QObject::tr("BTC 5126T", "kb_models"), - QObject::tr("BTC 6301URF", "kb_models"), - QObject::tr("BTC 9000", "kb_models"), - QObject::tr("BTC 9000A", "kb_models"), - QObject::tr("BTC 9001AH", "kb_models"), - QObject::tr("BTC 9019U", "kb_models"), - QObject::tr("BTC 9116U Mini Wireless Internet and Gaming", "kb_models"), - QObject::tr("BenQ X-Touch", "kb_models"), - QObject::tr("BenQ X-Touch 730", "kb_models"), - QObject::tr("BenQ X-Touch 800", "kb_models"), - QObject::tr("Brother Internet", "kb_models"), - QObject::tr("Cherry B.UNLIMITED", "kb_models"), - QObject::tr("Cherry Blue Line CyBo@rd", "kb_models"), - QObject::tr("Cherry Blue Line CyBo@rd (alt.)", "kb_models"), - QObject::tr("Cherry CyBo@rd USB-Hub", "kb_models"), - QObject::tr("Cherry CyMotion Expert", "kb_models"), - QObject::tr("Cherry CyMotion Master Linux", "kb_models"), - QObject::tr("Cherry CyMotion Master XPress", "kb_models"), - QObject::tr("Chicony Internet", "kb_models"), - QObject::tr("Chicony KB-9885", "kb_models"), - QObject::tr("Chicony KU-0108", "kb_models"), - QObject::tr("Chicony KU-0420", "kb_models"), - QObject::tr("Chromebook", "kb_models"), - QObject::tr("Classmate PC", "kb_models"), - QObject::tr("Compaq Armada laptop", "kb_models"), - QObject::tr("Compaq Easy Access", "kb_models"), - QObject::tr("Compaq Internet (13 keys)", "kb_models"), - QObject::tr("Compaq Internet (18 keys)", "kb_models"), - QObject::tr("Compaq Internet (7 keys)", "kb_models"), - QObject::tr("Compaq Presario laptop", "kb_models"), - QObject::tr("Compaq iPaq", "kb_models"), - QObject::tr("Creative Desktop Wireless 7000", "kb_models"), - QObject::tr("DTK2000", "kb_models"), - QObject::tr("Dell", "kb_models"), - QObject::tr("Dell 101-key PC", "kb_models"), - QObject::tr("Dell Inspiron 6000/8000 laptop", "kb_models"), - QObject::tr("Dell Latitude laptop", "kb_models"), - QObject::tr("Dell Precision M laptop", "kb_models"), - QObject::tr("Dell Precision M65 laptop", "kb_models"), - QObject::tr("Dell SK-8125", "kb_models"), - QObject::tr("Dell SK-8135", "kb_models"), - QObject::tr("Dell USB Multimedia", "kb_models"), - QObject::tr("Dexxa Wireless Desktop", "kb_models"), - QObject::tr("Diamond 9801/9802", "kb_models"), - QObject::tr("Ennyah DKB-1008", "kb_models"), - QObject::tr("Everex STEPnote", "kb_models"), - QObject::tr("FL90", "kb_models"), - QObject::tr("Fujitsu-Siemens Amilo laptop", "kb_models"), - QObject::tr("Generic 101-key PC", "kb_models"), - QObject::tr("Generic 102-key PC", "kb_models"), - QObject::tr("Generic 104-key PC", "kb_models"), - QObject::tr("Generic 104-key PC with L-shaped Enter key", "kb_models"), - QObject::tr("Generic 105-key PC", "kb_models"), - QObject::tr("Generic 86-key PC", "kb_models"), - QObject::tr("Genius Comfy KB-12e", "kb_models"), - QObject::tr("Genius Comfy KB-16M/Multimedia KWD-910", "kb_models"), - QObject::tr("Genius Comfy KB-21e-Scroll", "kb_models"), - QObject::tr("Genius KB-19e NB", "kb_models"), - QObject::tr("Genius KKB-2050HS", "kb_models"), - QObject::tr("Gyration", "kb_models"), - QObject::tr("Happy Hacking", "kb_models"), - QObject::tr("Happy Hacking for Mac", "kb_models"), - QObject::tr("Hewlett-Packard Internet", "kb_models"), - QObject::tr("Hewlett-Packard Mini 110 laptop", "kb_models"), - QObject::tr("Hewlett-Packard NEC SK-2500 Multimedia", "kb_models"), - QObject::tr("Hewlett-Packard Omnibook 500", "kb_models"), - QObject::tr("Hewlett-Packard Omnibook 500 FA", "kb_models"), - QObject::tr("Hewlett-Packard Omnibook 6000/6100", "kb_models"), - QObject::tr("Hewlett-Packard Omnibook XE3 GC", "kb_models"), - QObject::tr("Hewlett-Packard Omnibook XE3 GF", "kb_models"), - QObject::tr("Hewlett-Packard Omnibook XT1000", "kb_models"), - QObject::tr("Hewlett-Packard Pavilion ZT1100", "kb_models"), - QObject::tr("Hewlett-Packard Pavilion dv5", "kb_models"), - QObject::tr("Hewlett-Packard nx9020", "kb_models"), - QObject::tr("Honeywell Euroboard", "kb_models"), - QObject::tr("IBM Rapid Access", "kb_models"), - QObject::tr("IBM Rapid Access II", "kb_models"), - QObject::tr("IBM Space Saver", "kb_models"), - QObject::tr("IBM ThinkPad 560Z/600/600E/A22E", "kb_models"), - QObject::tr("IBM ThinkPad R60/T60/R61/T61", "kb_models"), - QObject::tr("IBM ThinkPad Z60m/Z60t/Z61m/Z61t", "kb_models"), - QObject::tr("Keytronic FlexPro", "kb_models"), - QObject::tr("Kinesis", "kb_models"), - QObject::tr("Logitech", "kb_models"), - QObject::tr("Logitech Access", "kb_models"), - QObject::tr("Logitech Cordless Desktop", "kb_models"), - QObject::tr("Logitech Cordless Desktop (alt.)", "kb_models"), - QObject::tr("Logitech Cordless Desktop EX110", "kb_models"), - QObject::tr("Logitech Cordless Desktop LX-300", "kb_models"), - QObject::tr("Logitech Cordless Desktop Navigator", "kb_models"), - QObject::tr("Logitech Cordless Desktop Optical", "kb_models"), - QObject::tr("Logitech Cordless Desktop Pro (2nd alt.)", "kb_models"), - QObject::tr("Logitech Cordless Desktop iTouch", "kb_models"), - QObject::tr("Logitech Cordless Freedom/Desktop Navigator", "kb_models"), - QObject::tr("Logitech G15 extra keys via G15daemon", "kb_models"), - QObject::tr("Logitech Internet", "kb_models"), - QObject::tr("Logitech Internet 350", "kb_models"), - QObject::tr("Logitech Internet Navigator", "kb_models"), - QObject::tr("Logitech Ultra-X", "kb_models"), - QObject::tr("Logitech Ultra-X Cordless Media Desktop", "kb_models"), - QObject::tr("Logitech diNovo", "kb_models"), - QObject::tr("Logitech diNovo Edge", "kb_models"), - QObject::tr("Logitech iTouch", "kb_models"), - QObject::tr("Logitech iTouch Cordless Y-RB6", "kb_models"), - QObject::tr("Logitech iTouch Internet Navigator SE", "kb_models"), - QObject::tr("Logitech iTouch Internet Navigator SE USB", "kb_models"), - QObject::tr("MacBook/MacBook Pro", "kb_models"), - QObject::tr("MacBook/MacBook Pro (intl.)", "kb_models"), - QObject::tr("Macintosh", "kb_models"), - QObject::tr("Macintosh Old", "kb_models"), - QObject::tr("Memorex MX1998", "kb_models"), - QObject::tr("Memorex MX2500 EZ-Access", "kb_models"), - QObject::tr("Memorex MX2750", "kb_models"), - QObject::tr("Microsoft Comfort Curve 2000", "kb_models"), - QObject::tr("Microsoft Internet", "kb_models"), - QObject::tr("Microsoft Internet Pro (Swedish)", "kb_models"), - QObject::tr("Microsoft Natural", "kb_models"), - QObject::tr("Microsoft Natural Elite", "kb_models"), - QObject::tr("Microsoft Natural Ergonomic 4000", "kb_models"), - QObject::tr("Microsoft Natural Pro OEM", "kb_models"), - QObject::tr("Microsoft Natural Pro USB/Internet Pro", "kb_models"), - QObject::tr("Microsoft Natural Pro/Internet Pro", "kb_models"), - QObject::tr("Microsoft Natural Wireless Ergonomic 7000", "kb_models"), - QObject::tr("Microsoft Office Keyboard", "kb_models"), - QObject::tr("Microsoft Surface", "kb_models"), - QObject::tr("Microsoft Wireless Multimedia 1.0A", "kb_models"), - QObject::tr("NEC SK-1300", "kb_models"), - QObject::tr("NEC SK-2500", "kb_models"), - QObject::tr("NEC SK-6200", "kb_models"), - QObject::tr("NEC SK-7100", "kb_models"), - QObject::tr("Northgate OmniKey 101", "kb_models"), - QObject::tr("OLPC", "kb_models"), - QObject::tr("Ortek Multimedia/Internet MCK-800", "kb_models"), - QObject::tr("PC-98", "kb_models"), - QObject::tr("Propeller Voyager KTEZ-1000", "kb_models"), - QObject::tr("QTronix Scorpius 98N+", "kb_models"), - QObject::tr("SVEN Ergonomic 2500", "kb_models"), - QObject::tr("SVEN Slim 303", "kb_models"), - QObject::tr("Samsung SDM 4500P", "kb_models"), - QObject::tr("Samsung SDM 4510P", "kb_models"), - QObject::tr("Sanwa Supply SKB-KG3", "kb_models"), - QObject::tr("Silvercrest Multimedia Wireless", "kb_models"), - QObject::tr("SteelSeries Apex 300 (Apex RAW)", "kb_models"), - QObject::tr("Sun Type 6 (Japanese)", "kb_models"), - QObject::tr("Sun Type 6 USB (Japanese)", "kb_models"), - QObject::tr("Sun Type 6 USB (Unix)", "kb_models"), - QObject::tr("Sun Type 6/7 USB", "kb_models"), - QObject::tr("Sun Type 6/7 USB (European)", "kb_models"), - QObject::tr("Sun Type 7 USB", "kb_models"), - QObject::tr("Sun Type 7 USB (European)", "kb_models"), - QObject::tr("Sun Type 7 USB (Japanese)/Japanese 106-key", "kb_models"), - QObject::tr("Sun Type 7 USB (Unix)", "kb_models"), - QObject::tr("Super Power Multimedia", "kb_models"), - QObject::tr("Symplon PaceBook tablet", "kb_models"), - QObject::tr("Targa Visionary 811", "kb_models"), - QObject::tr("Toshiba Satellite S3000", "kb_models"), - QObject::tr("Truly Ergonomic 227", "kb_models"), - QObject::tr("Truly Ergonomic 229", "kb_models"), - QObject::tr("Truly Ergonomic Computer Keyboard Model 227 (Wide Alt keys)", "kb_models"), - QObject::tr("Truly Ergonomic Computer Keyboard Model 229 (Standard sized Alt keys, additional Super and Menu key)", "kb_models"), - QObject::tr("Trust Direct Access", "kb_models"), - QObject::tr("Trust Slimline", "kb_models"), - QObject::tr("Trust Wireless Classic", "kb_models"), - QObject::tr("TypeMatrix EZ-Reach 2020", "kb_models"), - QObject::tr("TypeMatrix EZ-Reach 2030 PS2", "kb_models"), - QObject::tr("TypeMatrix EZ-Reach 2030 USB", "kb_models"), - QObject::tr("TypeMatrix EZ-Reach 2030 USB (102/105:EU mode)", "kb_models"), - QObject::tr("TypeMatrix EZ-Reach 2030 USB (106:JP mode)", "kb_models"), - QObject::tr("Unitek KB-1925", "kb_models"), - QObject::tr("ViewSonic KU-306 Internet", "kb_models"), - QObject::tr("Winbook Model XP5", "kb_models"), - QObject::tr("Yahoo! Internet", "kb_models"), - QObject::tr("eMachines m6800 laptop", "kb_models"), + tr("A4Tech KB-21", "kb_models"), + tr("A4Tech KBS-8", "kb_models"), + tr("A4Tech Wireless Desktop RFKB-23", "kb_models"), + tr("Acer AirKey V", "kb_models"), + tr("Acer C300", "kb_models"), + tr("Acer Ferrari 4000", "kb_models"), + tr("Acer laptop", "kb_models"), + tr("Advance Scorpius KI", "kb_models"), + tr("Apple", "kb_models"), + tr("Apple Aluminium (ANSI)", "kb_models"), + tr("Apple Aluminium (ISO)", "kb_models"), + tr("Apple Aluminium (JIS)", "kb_models"), + tr("Apple laptop", "kb_models"), + tr("Asus laptop", "kb_models"), + tr("Azona RF2300 wireless Internet", "kb_models"), + tr("BTC 5090", "kb_models"), + tr("BTC 5113RF Multimedia", "kb_models"), + tr("BTC 5126T", "kb_models"), + tr("BTC 6301URF", "kb_models"), + tr("BTC 9000", "kb_models"), + tr("BTC 9000A", "kb_models"), + tr("BTC 9001AH", "kb_models"), + tr("BTC 9019U", "kb_models"), + tr("BTC 9116U Mini Wireless Internet and Gaming", "kb_models"), + tr("BenQ X-Touch", "kb_models"), + tr("BenQ X-Touch 730", "kb_models"), + tr("BenQ X-Touch 800", "kb_models"), + tr("Brother Internet", "kb_models"), + tr("Cherry B.UNLIMITED", "kb_models"), + tr("Cherry Blue Line CyBo@rd", "kb_models"), + tr("Cherry Blue Line CyBo@rd (alt.)", "kb_models"), + tr("Cherry CyBo@rd USB-Hub", "kb_models"), + tr("Cherry CyMotion Expert", "kb_models"), + tr("Cherry CyMotion Master Linux", "kb_models"), + tr("Cherry CyMotion Master XPress", "kb_models"), + tr("Chicony Internet", "kb_models"), + tr("Chicony KB-9885", "kb_models"), + tr("Chicony KU-0108", "kb_models"), + tr("Chicony KU-0420", "kb_models"), + tr("Chromebook", "kb_models"), + tr("Classmate PC", "kb_models"), + tr("Compaq Armada laptop", "kb_models"), + tr("Compaq Easy Access", "kb_models"), + tr("Compaq Internet (13 keys)", "kb_models"), + tr("Compaq Internet (18 keys)", "kb_models"), + tr("Compaq Internet (7 keys)", "kb_models"), + tr("Compaq Presario laptop", "kb_models"), + tr("Compaq iPaq", "kb_models"), + tr("Creative Desktop Wireless 7000", "kb_models"), + tr("DTK2000", "kb_models"), + tr("Dell", "kb_models"), + tr("Dell 101-key PC", "kb_models"), + tr("Dell Inspiron 6000/8000 laptop", "kb_models"), + tr("Dell Latitude laptop", "kb_models"), + tr("Dell Precision M laptop", "kb_models"), + tr("Dell Precision M65 laptop", "kb_models"), + tr("Dell SK-8125", "kb_models"), + tr("Dell SK-8135", "kb_models"), + tr("Dell USB Multimedia", "kb_models"), + tr("Dexxa Wireless Desktop", "kb_models"), + tr("Diamond 9801/9802", "kb_models"), + tr("Ennyah DKB-1008", "kb_models"), + tr("Everex STEPnote", "kb_models"), + tr("FL90", "kb_models"), + tr("Fujitsu-Siemens Amilo laptop", "kb_models"), + tr("Generic 101-key PC", "kb_models"), + tr("Generic 102-key PC", "kb_models"), + tr("Generic 104-key PC", "kb_models"), + tr("Generic 104-key PC with L-shaped Enter key", "kb_models"), + tr("Generic 105-key PC", "kb_models"), + tr("Generic 86-key PC", "kb_models"), + tr("Genius Comfy KB-12e", "kb_models"), + tr("Genius Comfy KB-16M/Multimedia KWD-910", "kb_models"), + tr("Genius Comfy KB-21e-Scroll", "kb_models"), + tr("Genius KB-19e NB", "kb_models"), + tr("Genius KKB-2050HS", "kb_models"), + tr("Gyration", "kb_models"), + tr("Happy Hacking", "kb_models"), + tr("Happy Hacking for Mac", "kb_models"), + tr("Hewlett-Packard Internet", "kb_models"), + tr("Hewlett-Packard Mini 110 laptop", "kb_models"), + tr("Hewlett-Packard NEC SK-2500 Multimedia", "kb_models"), + tr("Hewlett-Packard Omnibook 500", "kb_models"), + tr("Hewlett-Packard Omnibook 500 FA", "kb_models"), + tr("Hewlett-Packard Omnibook 6000/6100", "kb_models"), + tr("Hewlett-Packard Omnibook XE3 GC", "kb_models"), + tr("Hewlett-Packard Omnibook XE3 GF", "kb_models"), + tr("Hewlett-Packard Omnibook XT1000", "kb_models"), + tr("Hewlett-Packard Pavilion ZT1100", "kb_models"), + tr("Hewlett-Packard Pavilion dv5", "kb_models"), + tr("Hewlett-Packard nx9020", "kb_models"), + tr("Honeywell Euroboard", "kb_models"), + tr("IBM Rapid Access", "kb_models"), + tr("IBM Rapid Access II", "kb_models"), + tr("IBM Space Saver", "kb_models"), + tr("IBM ThinkPad 560Z/600/600E/A22E", "kb_models"), + tr("IBM ThinkPad R60/T60/R61/T61", "kb_models"), + tr("IBM ThinkPad Z60m/Z60t/Z61m/Z61t", "kb_models"), + tr("Keytronic FlexPro", "kb_models"), + tr("Kinesis", "kb_models"), + tr("Logitech", "kb_models"), + tr("Logitech Access", "kb_models"), + tr("Logitech Cordless Desktop", "kb_models"), + tr("Logitech Cordless Desktop (alt.)", "kb_models"), + tr("Logitech Cordless Desktop EX110", "kb_models"), + tr("Logitech Cordless Desktop LX-300", "kb_models"), + tr("Logitech Cordless Desktop Navigator", "kb_models"), + tr("Logitech Cordless Desktop Optical", "kb_models"), + tr("Logitech Cordless Desktop Pro (2nd alt.)", "kb_models"), + tr("Logitech Cordless Desktop iTouch", "kb_models"), + tr("Logitech Cordless Freedom/Desktop Navigator", "kb_models"), + tr("Logitech G15 extra keys via G15daemon", "kb_models"), + tr("Logitech Internet", "kb_models"), + tr("Logitech Internet 350", "kb_models"), + tr("Logitech Internet Navigator", "kb_models"), + tr("Logitech Ultra-X", "kb_models"), + tr("Logitech Ultra-X Cordless Media Desktop", "kb_models"), + tr("Logitech diNovo", "kb_models"), + tr("Logitech diNovo Edge", "kb_models"), + tr("Logitech iTouch", "kb_models"), + tr("Logitech iTouch Cordless Y-RB6", "kb_models"), + tr("Logitech iTouch Internet Navigator SE", "kb_models"), + tr("Logitech iTouch Internet Navigator SE USB", "kb_models"), + tr("MacBook/MacBook Pro", "kb_models"), + tr("MacBook/MacBook Pro (intl.)", "kb_models"), + tr("Macintosh", "kb_models"), + tr("Macintosh Old", "kb_models"), + tr("Memorex MX1998", "kb_models"), + tr("Memorex MX2500 EZ-Access", "kb_models"), + tr("Memorex MX2750", "kb_models"), + tr("Microsoft Comfort Curve 2000", "kb_models"), + tr("Microsoft Internet", "kb_models"), + tr("Microsoft Internet Pro (Swedish)", "kb_models"), + tr("Microsoft Natural", "kb_models"), + tr("Microsoft Natural Elite", "kb_models"), + tr("Microsoft Natural Ergonomic 4000", "kb_models"), + tr("Microsoft Natural Pro OEM", "kb_models"), + tr("Microsoft Natural Pro USB/Internet Pro", "kb_models"), + tr("Microsoft Natural Pro/Internet Pro", "kb_models"), + tr("Microsoft Natural Wireless Ergonomic 7000", "kb_models"), + tr("Microsoft Office Keyboard", "kb_models"), + tr("Microsoft Surface", "kb_models"), + tr("Microsoft Wireless Multimedia 1.0A", "kb_models"), + tr("NEC SK-1300", "kb_models"), + tr("NEC SK-2500", "kb_models"), + tr("NEC SK-6200", "kb_models"), + tr("NEC SK-7100", "kb_models"), + tr("Northgate OmniKey 101", "kb_models"), + tr("OLPC", "kb_models"), + tr("Ortek Multimedia/Internet MCK-800", "kb_models"), + tr("PC-98", "kb_models"), + tr("Propeller Voyager KTEZ-1000", "kb_models"), + tr("QTronix Scorpius 98N+", "kb_models"), + tr("SVEN Ergonomic 2500", "kb_models"), + tr("SVEN Slim 303", "kb_models"), + tr("Samsung SDM 4500P", "kb_models"), + tr("Samsung SDM 4510P", "kb_models"), + tr("Sanwa Supply SKB-KG3", "kb_models"), + tr("Silvercrest Multimedia Wireless", "kb_models"), + tr("SteelSeries Apex 300 (Apex RAW)", "kb_models"), + tr("Sun Type 6 (Japanese)", "kb_models"), + tr("Sun Type 6 USB (Japanese)", "kb_models"), + tr("Sun Type 6 USB (Unix)", "kb_models"), + tr("Sun Type 6/7 USB", "kb_models"), + tr("Sun Type 6/7 USB (European)", "kb_models"), + tr("Sun Type 7 USB", "kb_models"), + tr("Sun Type 7 USB (European)", "kb_models"), + tr("Sun Type 7 USB (Japanese)/Japanese 106-key", "kb_models"), + tr("Sun Type 7 USB (Unix)", "kb_models"), + tr("Super Power Multimedia", "kb_models"), + tr("Symplon PaceBook tablet", "kb_models"), + tr("Targa Visionary 811", "kb_models"), + tr("Toshiba Satellite S3000", "kb_models"), + tr("Truly Ergonomic 227", "kb_models"), + tr("Truly Ergonomic 229", "kb_models"), + tr("Truly Ergonomic Computer Keyboard Model 227 (Wide Alt keys)", "kb_models"), + tr("Truly Ergonomic Computer Keyboard Model 229 (Standard sized Alt keys, additional Super and Menu key)", "kb_models"), + tr("Trust Direct Access", "kb_models"), + tr("Trust Slimline", "kb_models"), + tr("Trust Wireless Classic", "kb_models"), + tr("TypeMatrix EZ-Reach 2020", "kb_models"), + tr("TypeMatrix EZ-Reach 2030 PS2", "kb_models"), + tr("TypeMatrix EZ-Reach 2030 USB", "kb_models"), + tr("TypeMatrix EZ-Reach 2030 USB (102/105:EU mode)", "kb_models"), + tr("TypeMatrix EZ-Reach 2030 USB (106:JP mode)", "kb_models"), + tr("Unitek KB-1925", "kb_models"), + tr("ViewSonic KU-306 Internet", "kb_models"), + tr("Winbook Model XP5", "kb_models"), + tr("Yahoo! Internet", "kb_models"), + tr("eMachines m6800 laptop", "kb_models"), QString() }; } +} /* This returns a reference to local, which is a terrible idea. * Good thing it's not meant to be compiled. */ -static const QStringList& kb_layouts_table() -{ +class kb_layouts : public QObject { +Q_OBJECT +public: + const QStringList& table() + { return QStringList { - QObject::tr("Afghani", "kb_layouts"), - QObject::tr("Albanian", "kb_layouts"), - QObject::tr("Amharic", "kb_layouts"), - QObject::tr("Arabic", "kb_layouts"), - QObject::tr("Arabic (Morocco)", "kb_layouts"), - QObject::tr("Arabic (Syria)", "kb_layouts"), - QObject::tr("Armenian", "kb_layouts"), - QObject::tr("Azerbaijani", "kb_layouts"), - QObject::tr("Bambara", "kb_layouts"), - QObject::tr("Bangla", "kb_layouts"), - QObject::tr("Belarusian", "kb_layouts"), - QObject::tr("Belgian", "kb_layouts"), - QObject::tr("Bosnian", "kb_layouts"), - QObject::tr("Braille", "kb_layouts"), - QObject::tr("Bulgarian", "kb_layouts"), - QObject::tr("Burmese", "kb_layouts"), - QObject::tr("Chinese", "kb_layouts"), - QObject::tr("Croatian", "kb_layouts"), - QObject::tr("Czech", "kb_layouts"), - QObject::tr("Danish", "kb_layouts"), - QObject::tr("Dhivehi", "kb_layouts"), - QObject::tr("Dutch", "kb_layouts"), - QObject::tr("Dzongkha", "kb_layouts"), - QObject::tr("English (Australian)", "kb_layouts"), - QObject::tr("English (Cameroon)", "kb_layouts"), - QObject::tr("English (Ghana)", "kb_layouts"), - QObject::tr("English (Nigeria)", "kb_layouts"), - QObject::tr("English (South Africa)", "kb_layouts"), - QObject::tr("English (UK)", "kb_layouts"), - QObject::tr("English (US)", "kb_layouts"), - QObject::tr("Esperanto", "kb_layouts"), - QObject::tr("Estonian", "kb_layouts"), - QObject::tr("Faroese", "kb_layouts"), - QObject::tr("Filipino", "kb_layouts"), - QObject::tr("Finnish", "kb_layouts"), - QObject::tr("French", "kb_layouts"), - QObject::tr("French (Canada)", "kb_layouts"), - QObject::tr("French (Democratic Republic of the Congo)", "kb_layouts"), - QObject::tr("French (Guinea)", "kb_layouts"), - QObject::tr("French (Togo)", "kb_layouts"), - QObject::tr("Georgian", "kb_layouts"), - QObject::tr("German", "kb_layouts"), - QObject::tr("German (Austria)", "kb_layouts"), - QObject::tr("German (Switzerland)", "kb_layouts"), - QObject::tr("Greek", "kb_layouts"), - QObject::tr("Hebrew", "kb_layouts"), - QObject::tr("Hungarian", "kb_layouts"), - QObject::tr("Icelandic", "kb_layouts"), - QObject::tr("Indian", "kb_layouts"), - QObject::tr("Indonesian (Arab Melayu, phonetic)", "kb_layouts"), - QObject::tr("Indonesian (Javanese)", "kb_layouts"), - QObject::tr("Iraqi", "kb_layouts"), - QObject::tr("Irish", "kb_layouts"), - QObject::tr("Italian", "kb_layouts"), - QObject::tr("Japanese", "kb_layouts"), - QObject::tr("Japanese (PC-98)", "kb_layouts"), - QObject::tr("Kabylian (azerty layout, no dead keys)", "kb_layouts"), - QObject::tr("Kazakh", "kb_layouts"), - QObject::tr("Khmer (Cambodia)", "kb_layouts"), - QObject::tr("Korean", "kb_layouts"), - QObject::tr("Kyrgyz", "kb_layouts"), - QObject::tr("Lao", "kb_layouts"), - QObject::tr("Latvian", "kb_layouts"), - QObject::tr("Lithuanian", "kb_layouts"), - QObject::tr("Macedonian", "kb_layouts"), - QObject::tr("Malay (Jawi, Arabic Keyboard)", "kb_layouts"), - QObject::tr("Maltese", "kb_layouts"), - QObject::tr("Maori", "kb_layouts"), - QObject::tr("Moldavian", "kb_layouts"), - QObject::tr("Mongolian", "kb_layouts"), - QObject::tr("Montenegrin", "kb_layouts"), - QObject::tr("Nepali", "kb_layouts"), - QObject::tr("Norwegian", "kb_layouts"), - QObject::tr("Persian", "kb_layouts"), - QObject::tr("Polish", "kb_layouts"), - QObject::tr("Portuguese", "kb_layouts"), - QObject::tr("Portuguese (Brazil)", "kb_layouts"), - QObject::tr("Romanian", "kb_layouts"), - QObject::tr("Russian", "kb_layouts"), - QObject::tr("Serbian", "kb_layouts"), - QObject::tr("Sinhala (phonetic)", "kb_layouts"), - QObject::tr("Slovak", "kb_layouts"), - QObject::tr("Slovenian", "kb_layouts"), - QObject::tr("Spanish", "kb_layouts"), - QObject::tr("Spanish (Latin American)", "kb_layouts"), - QObject::tr("Swahili (Kenya)", "kb_layouts"), - QObject::tr("Swahili (Tanzania)", "kb_layouts"), - QObject::tr("Swedish", "kb_layouts"), - QObject::tr("Taiwanese", "kb_layouts"), - QObject::tr("Tajik", "kb_layouts"), - QObject::tr("Thai", "kb_layouts"), - QObject::tr("Tswana", "kb_layouts"), - QObject::tr("Turkish", "kb_layouts"), - QObject::tr("Turkmen", "kb_layouts"), - QObject::tr("Ukrainian", "kb_layouts"), - QObject::tr("Urdu (Pakistan)", "kb_layouts"), - QObject::tr("Uzbek", "kb_layouts"), - QObject::tr("Vietnamese", "kb_layouts"), - QObject::tr("Wolof", "kb_layouts"), + tr("Afghani", "kb_layouts"), + tr("Albanian", "kb_layouts"), + tr("Amharic", "kb_layouts"), + tr("Arabic", "kb_layouts"), + tr("Arabic (Morocco)", "kb_layouts"), + tr("Arabic (Syria)", "kb_layouts"), + tr("Armenian", "kb_layouts"), + tr("Azerbaijani", "kb_layouts"), + tr("Bambara", "kb_layouts"), + tr("Bangla", "kb_layouts"), + tr("Belarusian", "kb_layouts"), + tr("Belgian", "kb_layouts"), + tr("Bosnian", "kb_layouts"), + tr("Braille", "kb_layouts"), + tr("Bulgarian", "kb_layouts"), + tr("Burmese", "kb_layouts"), + tr("Chinese", "kb_layouts"), + tr("Croatian", "kb_layouts"), + tr("Czech", "kb_layouts"), + tr("Danish", "kb_layouts"), + tr("Dhivehi", "kb_layouts"), + tr("Dutch", "kb_layouts"), + tr("Dzongkha", "kb_layouts"), + tr("English (Australian)", "kb_layouts"), + tr("English (Cameroon)", "kb_layouts"), + tr("English (Ghana)", "kb_layouts"), + tr("English (Nigeria)", "kb_layouts"), + tr("English (South Africa)", "kb_layouts"), + tr("English (UK)", "kb_layouts"), + tr("English (US)", "kb_layouts"), + tr("Esperanto", "kb_layouts"), + tr("Estonian", "kb_layouts"), + tr("Faroese", "kb_layouts"), + tr("Filipino", "kb_layouts"), + tr("Finnish", "kb_layouts"), + tr("French", "kb_layouts"), + tr("French (Canada)", "kb_layouts"), + tr("French (Democratic Republic of the Congo)", "kb_layouts"), + tr("French (Guinea)", "kb_layouts"), + tr("French (Togo)", "kb_layouts"), + tr("Georgian", "kb_layouts"), + tr("German", "kb_layouts"), + tr("German (Austria)", "kb_layouts"), + tr("German (Switzerland)", "kb_layouts"), + tr("Greek", "kb_layouts"), + tr("Hebrew", "kb_layouts"), + tr("Hungarian", "kb_layouts"), + tr("Icelandic", "kb_layouts"), + tr("Indian", "kb_layouts"), + tr("Indonesian (Arab Melayu, phonetic)", "kb_layouts"), + tr("Indonesian (Javanese)", "kb_layouts"), + tr("Iraqi", "kb_layouts"), + tr("Irish", "kb_layouts"), + tr("Italian", "kb_layouts"), + tr("Japanese", "kb_layouts"), + tr("Japanese (PC-98)", "kb_layouts"), + tr("Kabylian (azerty layout, no dead keys)", "kb_layouts"), + tr("Kazakh", "kb_layouts"), + tr("Khmer (Cambodia)", "kb_layouts"), + tr("Korean", "kb_layouts"), + tr("Kyrgyz", "kb_layouts"), + tr("Lao", "kb_layouts"), + tr("Latvian", "kb_layouts"), + tr("Lithuanian", "kb_layouts"), + tr("Macedonian", "kb_layouts"), + tr("Malay (Jawi, Arabic Keyboard)", "kb_layouts"), + tr("Maltese", "kb_layouts"), + tr("Maori", "kb_layouts"), + tr("Moldavian", "kb_layouts"), + tr("Mongolian", "kb_layouts"), + tr("Montenegrin", "kb_layouts"), + tr("Nepali", "kb_layouts"), + tr("Norwegian", "kb_layouts"), + tr("Persian", "kb_layouts"), + tr("Polish", "kb_layouts"), + tr("Portuguese", "kb_layouts"), + tr("Portuguese (Brazil)", "kb_layouts"), + tr("Romanian", "kb_layouts"), + tr("Russian", "kb_layouts"), + tr("Serbian", "kb_layouts"), + tr("Sinhala (phonetic)", "kb_layouts"), + tr("Slovak", "kb_layouts"), + tr("Slovenian", "kb_layouts"), + tr("Spanish", "kb_layouts"), + tr("Spanish (Latin American)", "kb_layouts"), + tr("Swahili (Kenya)", "kb_layouts"), + tr("Swahili (Tanzania)", "kb_layouts"), + tr("Swedish", "kb_layouts"), + tr("Taiwanese", "kb_layouts"), + tr("Tajik", "kb_layouts"), + tr("Thai", "kb_layouts"), + tr("Tswana", "kb_layouts"), + tr("Turkish", "kb_layouts"), + tr("Turkmen", "kb_layouts"), + tr("Ukrainian", "kb_layouts"), + tr("Urdu (Pakistan)", "kb_layouts"), + tr("Uzbek", "kb_layouts"), + tr("Vietnamese", "kb_layouts"), + tr("Wolof", "kb_layouts"), QString() }; } +} /* This returns a reference to local, which is a terrible idea. * Good thing it's not meant to be compiled. */ -static const QStringList& kb_variants_table() -{ +class kb_variants : public QObject { +Q_OBJECT +public: + const QStringList& table() + { return QStringList { - QObject::tr("Akan", "kb_variants"), - QObject::tr("Albanian (Plisi)", "kb_variants"), - QObject::tr("Albanian (Veqilharxhi)", "kb_variants"), - QObject::tr("Arabic (AZERTY)", "kb_variants"), - QObject::tr("Arabic (AZERTY, Eastern Arabic numerals)", "kb_variants"), - QObject::tr("Arabic (Algeria)", "kb_variants"), - QObject::tr("Arabic (Buckwalter)", "kb_variants"), - QObject::tr("Arabic (Eastern Arabic numerals)", "kb_variants"), - QObject::tr("Arabic (Macintosh)", "kb_variants"), - QObject::tr("Arabic (OLPC)", "kb_variants"), - QObject::tr("Arabic (Pakistan)", "kb_variants"), - QObject::tr("Arabic (QWERTY)", "kb_variants"), - QObject::tr("Arabic (QWERTY, Eastern Arabic numerals)", "kb_variants"), - QObject::tr("Armenian (alt. eastern)", "kb_variants"), - QObject::tr("Armenian (alt. phonetic)", "kb_variants"), - QObject::tr("Armenian (eastern)", "kb_variants"), - QObject::tr("Armenian (phonetic)", "kb_variants"), - QObject::tr("Armenian (western)", "kb_variants"), - QObject::tr("Asturian (Spain, with bottom-dot H and L)", "kb_variants"), - QObject::tr("Avatime", "kb_variants"), - QObject::tr("Azerbaijani (Cyrillic)", "kb_variants"), - QObject::tr("Bangla (India)", "kb_variants"), - QObject::tr("Bangla (India, Baishakhi Inscript)", "kb_variants"), - QObject::tr("Bangla (India, Baishakhi)", "kb_variants"), - QObject::tr("Bangla (India, Bornona)", "kb_variants"), - QObject::tr("Bangla (India, Gitanjali)", "kb_variants"), - QObject::tr("Bangla (India, Probhat)", "kb_variants"), - QObject::tr("Bangla (Probhat)", "kb_variants"), - QObject::tr("Bashkirian", "kb_variants"), - QObject::tr("Belarusian (Latin)", "kb_variants"), - QObject::tr("Belarusian (intl.)", "kb_variants"), - QObject::tr("Belarusian (legacy)", "kb_variants"), - QObject::tr("Belgian (ISO, alt.)", "kb_variants"), - QObject::tr("Belgian (Latin-9 only, alt.)", "kb_variants"), - QObject::tr("Belgian (Sun dead keys)", "kb_variants"), - QObject::tr("Belgian (Sun dead keys, alt.)", "kb_variants"), - QObject::tr("Belgian (Wang 724 AZERTY)", "kb_variants"), - QObject::tr("Belgian (alt.)", "kb_variants"), - QObject::tr("Belgian (no dead keys)", "kb_variants"), - QObject::tr("Berber (Morocco, Tifinagh alt.)", "kb_variants"), - QObject::tr("Berber (Morocco, Tifinagh extended phonetic)", "kb_variants"), - QObject::tr("Berber (Morocco, Tifinagh extended)", "kb_variants"), - QObject::tr("Berber (Morocco, Tifinagh phonetic)", "kb_variants"), - QObject::tr("Berber (Morocco, Tifinagh phonetic, alt.)", "kb_variants"), - QObject::tr("Berber (Morocco, Tifinagh)", "kb_variants"), - QObject::tr("Bosnian (US)", "kb_variants"), - QObject::tr("Bosnian (US, with Bosnian digraphs)", "kb_variants"), - QObject::tr("Bosnian (with Bosnian digraphs)", "kb_variants"), - QObject::tr("Bosnian (with guillemets)", "kb_variants"), - QObject::tr("Braille (left-handed inverted thumb)", "kb_variants"), - QObject::tr("Braille (left-handed)", "kb_variants"), - QObject::tr("Braille (right-handed inverted thumb)", "kb_variants"), - QObject::tr("Braille (right-handed)", "kb_variants"), - QObject::tr("Bulgarian (enhanced)", "kb_variants"), - QObject::tr("Bulgarian (new phonetic)", "kb_variants"), - QObject::tr("Bulgarian (traditional phonetic)", "kb_variants"), - QObject::tr("Burmese Zawgyi", "kb_variants"), - QObject::tr("Cameroon (AZERTY, intl.)", "kb_variants"), - QObject::tr("Cameroon (Dvorak, intl.)", "kb_variants"), - QObject::tr("Cameroon Multilingual (QWERTY, intl.)", "kb_variants"), - QObject::tr("Canadian (intl.)", "kb_variants"), - QObject::tr("Canadian (intl., 1st part)", "kb_variants"), - QObject::tr("Canadian (intl., 2nd part)", "kb_variants"), - QObject::tr("Catalan (Spain, with middle-dot L)", "kb_variants"), - QObject::tr("Cherokee", "kb_variants"), - QObject::tr("Chuvash", "kb_variants"), - QObject::tr("Chuvash (Latin)", "kb_variants"), - QObject::tr("CloGaelach", "kb_variants"), - QObject::tr("Crimean Tatar (Turkish Alt-Q)", "kb_variants"), - QObject::tr("Crimean Tatar (Turkish F)", "kb_variants"), - QObject::tr("Crimean Tatar (Turkish Q)", "kb_variants"), - QObject::tr("Croatian (US)", "kb_variants"), - QObject::tr("Croatian (US, with Croatian digraphs)", "kb_variants"), - QObject::tr("Croatian (with Croatian digraphs)", "kb_variants"), - QObject::tr("Croatian (with guillemets)", "kb_variants"), - QObject::tr("Czech (QWERTY)", "kb_variants"), - QObject::tr("Czech (QWERTY, Macintosh)", "kb_variants"), - QObject::tr("Czech (QWERTY, extended backslash)", "kb_variants"), - QObject::tr("Czech (UCW, only accented letters)", "kb_variants"), - QObject::tr("Czech (US, Dvorak, UCW support)", "kb_variants"), - QObject::tr("Czech (with <\|> key)", "kb_variants"), - QObject::tr("Danish (Dvorak)", "kb_variants"), - QObject::tr("Danish (Macintosh)", "kb_variants"), - QObject::tr("Danish (Macintosh, no dead keys)", "kb_variants"), - QObject::tr("Danish (Windows)", "kb_variants"), - QObject::tr("Danish (no dead keys)", "kb_variants"), - QObject::tr("Dutch (Macintosh)", "kb_variants"), - QObject::tr("Dutch (Sun dead keys)", "kb_variants"), - QObject::tr("Dutch (standard)", "kb_variants"), - QObject::tr("English (Canada)", "kb_variants"), - QObject::tr("English (Colemak)", "kb_variants"), - QObject::tr("English (Dvorak)", "kb_variants"), - QObject::tr("English (Dvorak, alt. intl.)", "kb_variants"), - QObject::tr("English (Dvorak, intl., with dead keys)", "kb_variants"), - QObject::tr("English (Dvorak, left-handed)", "kb_variants"), - QObject::tr("English (Dvorak, right-handed)", "kb_variants"), - QObject::tr("English (Ghana, GILLBT)", "kb_variants"), - QObject::tr("English (Ghana, multilingual)", "kb_variants"), - QObject::tr("English (India, with rupee)", "kb_variants"), - QObject::tr("English (Macintosh)", "kb_variants"), - QObject::tr("English (Mali, US, Macintosh)", "kb_variants"), - QObject::tr("English (Mali, US, intl.)", "kb_variants"), - QObject::tr("English (Norman)", "kb_variants"), - QObject::tr("English (UK, Colemak)", "kb_variants"), - QObject::tr("English (UK, Dvorak)", "kb_variants"), - QObject::tr("English (UK, Dvorak, with UK punctuation)", "kb_variants"), - QObject::tr("English (UK, Macintosh)", "kb_variants"), - QObject::tr("English (UK, Macintosh, intl.)", "kb_variants"), - QObject::tr("English (UK, extended, Windows)", "kb_variants"), - QObject::tr("English (UK, intl., with dead keys)", "kb_variants"), - QObject::tr("English (US, Symbolic)", "kb_variants"), - QObject::tr("English (US, alt. intl.)", "kb_variants"), - QObject::tr("English (US, euro on 5)", "kb_variants"), - QObject::tr("English (US, intl., with dead keys)", "kb_variants"), - QObject::tr("English (Workman)", "kb_variants"), - QObject::tr("English (Workman, intl., with dead keys)", "kb_variants"), - QObject::tr("English (classic Dvorak)", "kb_variants"), - QObject::tr("English (intl., with AltGr dead keys)", "kb_variants"), - QObject::tr("English (programmer Dvorak)", "kb_variants"), - QObject::tr("English (the divide/multiply toggle the layout)", "kb_variants"), - QObject::tr("Esperanto (Brazil, Nativo)", "kb_variants"), - QObject::tr("Esperanto (Portugal, Nativo)", "kb_variants"), - QObject::tr("Esperanto (legacy)", "kb_variants"), - QObject::tr("Estonian (Dvorak)", "kb_variants"), - QObject::tr("Estonian (US)", "kb_variants"), - QObject::tr("Estonian (no dead keys)", "kb_variants"), - QObject::tr("Ewe", "kb_variants"), - QObject::tr("Faroese (no dead keys)", "kb_variants"), - QObject::tr("Filipino (Capewell-Dvorak, Baybayin)", "kb_variants"), - QObject::tr("Filipino (Capewell-Dvorak, Latin)", "kb_variants"), - QObject::tr("Filipino (Capewell-QWERF 2006, Baybayin)", "kb_variants"), - QObject::tr("Filipino (Capewell-QWERF 2006, Latin)", "kb_variants"), - QObject::tr("Filipino (Colemak, Baybayin)", "kb_variants"), - QObject::tr("Filipino (Colemak, Latin)", "kb_variants"), - QObject::tr("Filipino (Dvorak, Baybayin)", "kb_variants"), - QObject::tr("Filipino (Dvorak, Latin)", "kb_variants"), - QObject::tr("Filipino (QWERTY, Baybayin)", "kb_variants"), - QObject::tr("Finnish (Macintosh)", "kb_variants"), - QObject::tr("Finnish (Windows)", "kb_variants"), - QObject::tr("Finnish (classic)", "kb_variants"), - QObject::tr("Finnish (classic, no dead keys)", "kb_variants"), - QObject::tr("French (AZERTY)", "kb_variants"), - QObject::tr("French (AZERTY, AFNOR)", "kb_variants"), - QObject::tr("French (BEPO)", "kb_variants"), - QObject::tr("French (BEPO, AFNOR)", "kb_variants"), - QObject::tr("French (BEPO, Latin-9 only)", "kb_variants"), - QObject::tr("French (Breton)", "kb_variants"), - QObject::tr("French (Cameroon)", "kb_variants"), - QObject::tr("French (Canada, Dvorak)", "kb_variants"), - QObject::tr("French (Canada, legacy)", "kb_variants"), - QObject::tr("French (Dvorak)", "kb_variants"), - QObject::tr("French (Macintosh)", "kb_variants"), - QObject::tr("French (Mali, alt.)", "kb_variants"), - QObject::tr("French (Morocco)", "kb_variants"), - QObject::tr("French (Sun dead keys)", "kb_variants"), - QObject::tr("French (Switzerland)", "kb_variants"), - QObject::tr("French (Switzerland, Macintosh)", "kb_variants"), - QObject::tr("French (Switzerland, Sun dead keys)", "kb_variants"), - QObject::tr("French (Switzerland, no dead keys)", "kb_variants"), - QObject::tr("French (US)", "kb_variants"), - QObject::tr("French (alt.)", "kb_variants"), - QObject::tr("French (alt., Latin-9 only)", "kb_variants"), - QObject::tr("French (alt., Sun dead keys)", "kb_variants"), - QObject::tr("French (alt., no dead keys)", "kb_variants"), - QObject::tr("French (legacy, alt.)", "kb_variants"), - QObject::tr("French (legacy, alt., Sun dead keys)", "kb_variants"), - QObject::tr("French (legacy, alt., no dead keys)", "kb_variants"), - QObject::tr("French (no dead keys)", "kb_variants"), - QObject::tr("Friulian (Italy)", "kb_variants"), - QObject::tr("Fula", "kb_variants"), - QObject::tr("Ga", "kb_variants"), - QObject::tr("Georgian (France, AZERTY Tskapo)", "kb_variants"), - QObject::tr("Georgian (Italy)", "kb_variants"), - QObject::tr("Georgian (MESS)", "kb_variants"), - QObject::tr("Georgian (ergonomic)", "kb_variants"), - QObject::tr("German (Austria, Macintosh)", "kb_variants"), - QObject::tr("German (Austria, Sun dead keys)", "kb_variants"), - QObject::tr("German (Austria, no dead keys)", "kb_variants"), - QObject::tr("German (Dvorak)", "kb_variants"), - QObject::tr("German (E1)", "kb_variants"), - QObject::tr("German (E2)", "kb_variants"), - QObject::tr("German (Macintosh)", "kb_variants"), - QObject::tr("German (Macintosh, no dead keys)", "kb_variants"), - QObject::tr("German (Neo 2)", "kb_variants"), - QObject::tr("German (QWERTY)", "kb_variants"), - QObject::tr("German (Sun dead keys)", "kb_variants"), - QObject::tr("German (Switzerland, Macintosh)", "kb_variants"), - QObject::tr("German (Switzerland, Sun dead keys)", "kb_variants"), - QObject::tr("German (Switzerland, legacy)", "kb_variants"), - QObject::tr("German (Switzerland, no dead keys)", "kb_variants"), - QObject::tr("German (T3)", "kb_variants"), - QObject::tr("German (US)", "kb_variants"), - QObject::tr("German (dead acute)", "kb_variants"), - QObject::tr("German (dead grave acute)", "kb_variants"), - QObject::tr("German (dead tilde)", "kb_variants"), - QObject::tr("German (no dead keys)", "kb_variants"), - QObject::tr("Greek (extended)", "kb_variants"), - QObject::tr("Greek (no dead keys)", "kb_variants"), - QObject::tr("Greek (polytonic)", "kb_variants"), - QObject::tr("Greek (simple)", "kb_variants"), - QObject::tr("Gujarati", "kb_variants"), - QObject::tr("Hanyu Pinyin (with AltGr dead keys)", "kb_variants"), - QObject::tr("Hausa (Ghana)", "kb_variants"), - QObject::tr("Hausa (Nigeria)", "kb_variants"), - QObject::tr("Hawaiian", "kb_variants"), - QObject::tr("Hebrew (Biblical, Tiro)", "kb_variants"), - QObject::tr("Hebrew (lyx)", "kb_variants"), - QObject::tr("Hebrew (phonetic)", "kb_variants"), - QObject::tr("Hindi (Bolnagri)", "kb_variants"), - QObject::tr("Hindi (KaGaPa, phonetic)", "kb_variants"), - QObject::tr("Hindi (Wx)", "kb_variants"), - QObject::tr("Hungarian (QWERTY)", "kb_variants"), - QObject::tr("Hungarian (QWERTY, 101-key, comma, dead keys)", "kb_variants"), - QObject::tr("Hungarian (QWERTY, 101-key, comma, no dead keys)", "kb_variants"), - QObject::tr("Hungarian (QWERTY, 101-key, dot, dead keys)", "kb_variants"), - QObject::tr("Hungarian (QWERTY, 101-key, dot, no dead keys)", "kb_variants"), - QObject::tr("Hungarian (QWERTY, 102-key, comma, dead keys)", "kb_variants"), - QObject::tr("Hungarian (QWERTY, 102-key, comma, no dead keys)", "kb_variants"), - QObject::tr("Hungarian (QWERTY, 102-key, dot, dead keys)", "kb_variants"), - QObject::tr("Hungarian (QWERTY, 102-key, dot, no dead keys)", "kb_variants"), - QObject::tr("Hungarian (QWERTZ, 101-key, comma, dead keys)", "kb_variants"), - QObject::tr("Hungarian (QWERTZ, 101-key, comma, no dead keys)", "kb_variants"), - QObject::tr("Hungarian (QWERTZ, 101-key, dot, dead keys)", "kb_variants"), - QObject::tr("Hungarian (QWERTZ, 101-key, dot, no dead keys)", "kb_variants"), - QObject::tr("Hungarian (QWERTZ, 102-key, comma, dead keys)", "kb_variants"), - QObject::tr("Hungarian (QWERTZ, 102-key, comma, no dead keys)", "kb_variants"), - QObject::tr("Hungarian (QWERTZ, 102-key, dot, dead keys)", "kb_variants"), - QObject::tr("Hungarian (QWERTZ, 102-key, dot, no dead keys)", "kb_variants"), - QObject::tr("Hungarian (no dead keys)", "kb_variants"), - QObject::tr("Hungarian (standard)", "kb_variants"), - QObject::tr("Icelandic (Dvorak)", "kb_variants"), - QObject::tr("Icelandic (Macintosh)", "kb_variants"), - QObject::tr("Icelandic (Macintosh, legacy)", "kb_variants"), - QObject::tr("Icelandic (Sun dead keys)", "kb_variants"), - QObject::tr("Icelandic (no dead keys)", "kb_variants"), - QObject::tr("Igbo", "kb_variants"), - QObject::tr("Indic (phonetic, IPA)", "kb_variants"), - QObject::tr("Indonesian (Arab Melayu, extended phonetic)", "kb_variants"), - QObject::tr("Inuktitut", "kb_variants"), - QObject::tr("Irish (UnicodeExpert)", "kb_variants"), - QObject::tr("Italian (IBM 142)", "kb_variants"), - QObject::tr("Italian (Macintosh)", "kb_variants"), - QObject::tr("Italian (US)", "kb_variants"), - QObject::tr("Italian (Windows)", "kb_variants"), - QObject::tr("Italian (intl., with dead keys)", "kb_variants"), - QObject::tr("Italian (no dead keys)", "kb_variants"), - QObject::tr("Japanese (Dvorak)", "kb_variants"), - QObject::tr("Japanese (Kana 86)", "kb_variants"), - QObject::tr("Japanese (Kana)", "kb_variants"), - QObject::tr("Japanese (Macintosh)", "kb_variants"), - QObject::tr("Japanese (OADG 109A)", "kb_variants"), - QObject::tr("Kabylian (Algeria, Tifinagh)", "kb_variants"), - QObject::tr("Kabylian (azerty layout, with dead keys)", "kb_variants"), - QObject::tr("Kabylian (qwerty-gb layout, with dead keys)", "kb_variants"), - QObject::tr("Kabylian (qwerty-us layout, with dead keys)", "kb_variants"), - QObject::tr("Kalmyk", "kb_variants"), - QObject::tr("Kannada", "kb_variants"), - QObject::tr("Kannada (KaGaPa, phonetic)", "kb_variants"), - QObject::tr("Kashubian", "kb_variants"), - QObject::tr("Kazakh (Latin)", "kb_variants"), - QObject::tr("Kazakh (extended)", "kb_variants"), - QObject::tr("Kazakh (with Russian)", "kb_variants"), - QObject::tr("Kikuyu", "kb_variants"), - QObject::tr("Komi", "kb_variants"), - QObject::tr("Korean (101/104-key compatible)", "kb_variants"), - QObject::tr("Kurdish (Iran, Arabic-Latin)", "kb_variants"), - QObject::tr("Kurdish (Iran, F)", "kb_variants"), - QObject::tr("Kurdish (Iran, Latin Alt-Q)", "kb_variants"), - QObject::tr("Kurdish (Iran, Latin Q)", "kb_variants"), - QObject::tr("Kurdish (Iraq, Arabic-Latin)", "kb_variants"), - QObject::tr("Kurdish (Iraq, F)", "kb_variants"), - QObject::tr("Kurdish (Iraq, Latin Alt-Q)", "kb_variants"), - QObject::tr("Kurdish (Iraq, Latin Q)", "kb_variants"), - QObject::tr("Kurdish (Syria, F)", "kb_variants"), - QObject::tr("Kurdish (Syria, Latin Alt-Q)", "kb_variants"), - QObject::tr("Kurdish (Syria, Latin Q)", "kb_variants"), - QObject::tr("Kurdish (Turkey, F)", "kb_variants"), - QObject::tr("Kurdish (Turkey, Latin Alt-Q)", "kb_variants"), - QObject::tr("Kurdish (Turkey, Latin Q)", "kb_variants"), - QObject::tr("Kyrgyz (phonetic)", "kb_variants"), - QObject::tr("Lao (STEA)", "kb_variants"), - QObject::tr("Latvian (F)", "kb_variants"), - QObject::tr("Latvian (adapted)", "kb_variants"), - QObject::tr("Latvian (apostrophe)", "kb_variants"), - QObject::tr("Latvian (ergonomic, ŪGJRMV)", "kb_variants"), - QObject::tr("Latvian (modern)", "kb_variants"), - QObject::tr("Latvian (tilde)", "kb_variants"), - QObject::tr("Lithuanian (IBM LST 1205-92)", "kb_variants"), - QObject::tr("Lithuanian (LEKP)", "kb_variants"), - QObject::tr("Lithuanian (LEKPa)", "kb_variants"), - QObject::tr("Lithuanian (US)", "kb_variants"), - QObject::tr("Lithuanian (standard)", "kb_variants"), - QObject::tr("Lower Sorbian", "kb_variants"), - QObject::tr("Lower Sorbian (QWERTZ)", "kb_variants"), - QObject::tr("Macedonian (no dead keys)", "kb_variants"), - QObject::tr("Malay (Jawi, phonetic)", "kb_variants"), - QObject::tr("Malayalam", "kb_variants"), - QObject::tr("Malayalam (Lalitha)", "kb_variants"), - QObject::tr("Malayalam (enhanced Inscript, with rupee)", "kb_variants"), - QObject::tr("Maltese (UK, with AltGr overrides)", "kb_variants"), - QObject::tr("Maltese (US layout with AltGr overrides)", "kb_variants"), - QObject::tr("Maltese (US)", "kb_variants"), - QObject::tr("Manipuri (Eeyek)", "kb_variants"), - QObject::tr("Marathi (KaGaPa, phonetic)", "kb_variants"), - QObject::tr("Marathi (enhanced Inscript)", "kb_variants"), - QObject::tr("Mari", "kb_variants"), - QObject::tr("Mmuock", "kb_variants"), - QObject::tr("Moldavian (Gagauz)", "kb_variants"), - QObject::tr("Mongolian (Bichig)", "kb_variants"), - QObject::tr("Mongolian (Galik)", "kb_variants"), - QObject::tr("Mongolian (Manchu Galik)", "kb_variants"), - QObject::tr("Mongolian (Manchu)", "kb_variants"), - QObject::tr("Mongolian (Todo Galik)", "kb_variants"), - QObject::tr("Mongolian (Todo)", "kb_variants"), - QObject::tr("Mongolian (Xibe)", "kb_variants"), - QObject::tr("Montenegrin (Cyrillic)", "kb_variants"), - QObject::tr("Montenegrin (Cyrillic, ZE and ZHE swapped)", "kb_variants"), - QObject::tr("Montenegrin (Cyrillic, with guillemets)", "kb_variants"), - QObject::tr("Montenegrin (Latin, QWERTY)", "kb_variants"), - QObject::tr("Montenegrin (Latin, Unicode)", "kb_variants"), - QObject::tr("Montenegrin (Latin, Unicode, QWERTY)", "kb_variants"), - QObject::tr("Montenegrin (Latin, with guillemets)", "kb_variants"), - QObject::tr("Northern Saami (Finland)", "kb_variants"), - QObject::tr("Northern Saami (Norway)", "kb_variants"), - QObject::tr("Northern Saami (Norway, no dead keys)", "kb_variants"), - QObject::tr("Northern Saami (Sweden)", "kb_variants"), - QObject::tr("Norwegian (Colemak)", "kb_variants"), - QObject::tr("Norwegian (Dvorak)", "kb_variants"), - QObject::tr("Norwegian (Macintosh)", "kb_variants"), - QObject::tr("Norwegian (Macintosh, no dead keys)", "kb_variants"), - QObject::tr("Norwegian (Windows)", "kb_variants"), - QObject::tr("Norwegian (no dead keys)", "kb_variants"), - QObject::tr("Occitan", "kb_variants"), - QObject::tr("Ogham", "kb_variants"), - QObject::tr("Ogham (IS434)", "kb_variants"), - QObject::tr("Ol Chiki", "kb_variants"), - QObject::tr("Oriya", "kb_variants"), - QObject::tr("Ossetian (Georgia)", "kb_variants"), - QObject::tr("Ossetian (Windows)", "kb_variants"), - QObject::tr("Ossetian (legacy)", "kb_variants"), - QObject::tr("Pannonian Rusyn", "kb_variants"), - QObject::tr("Pashto", "kb_variants"), - QObject::tr("Pashto (Afghanistan, OLPC)", "kb_variants"), - QObject::tr("Persian (Afghanistan, Dari OLPC)", "kb_variants"), - QObject::tr("Persian (with Persian keypad)", "kb_variants"), - QObject::tr("Polish (British keyboard)", "kb_variants"), - QObject::tr("Polish (Dvorak)", "kb_variants"), - QObject::tr("Polish (Dvorak, with Polish quotes on key 1)", "kb_variants"), - QObject::tr("Polish (Dvorak, with Polish quotes on quotemark key)", "kb_variants"), - QObject::tr("Polish (QWERTZ)", "kb_variants"), - QObject::tr("Polish (legacy)", "kb_variants"), - QObject::tr("Polish (programmer Dvorak)", "kb_variants"), - QObject::tr("Portuguese (Brazil, Dvorak)", "kb_variants"), - QObject::tr("Portuguese (Brazil, IBM/Lenovo ThinkPad)", "kb_variants"), - QObject::tr("Portuguese (Brazil, Nativo for US keyboards)", "kb_variants"), - QObject::tr("Portuguese (Brazil, Nativo)", "kb_variants"), - QObject::tr("Portuguese (Brazil, no dead keys)", "kb_variants"), - QObject::tr("Portuguese (Macintosh)", "kb_variants"), - QObject::tr("Portuguese (Macintosh, Sun dead keys)", "kb_variants"), - QObject::tr("Portuguese (Macintosh, no dead keys)", "kb_variants"), - QObject::tr("Portuguese (Nativo for US keyboards)", "kb_variants"), - QObject::tr("Portuguese (Nativo)", "kb_variants"), - QObject::tr("Portuguese (Sun dead keys)", "kb_variants"), - QObject::tr("Portuguese (no dead keys)", "kb_variants"), - QObject::tr("Punjabi (Gurmukhi Jhelum)", "kb_variants"), - QObject::tr("Punjabi (Gurmukhi)", "kb_variants"), - QObject::tr("Romanian (Germany)", "kb_variants"), - QObject::tr("Romanian (Germany, no dead keys)", "kb_variants"), - QObject::tr("Romanian (Windows)", "kb_variants"), - QObject::tr("Romanian (cedilla)", "kb_variants"), - QObject::tr("Romanian (standard cedilla)", "kb_variants"), - QObject::tr("Romanian (standard)", "kb_variants"), - QObject::tr("Russian (Belarus)", "kb_variants"), - QObject::tr("Russian (Czech, phonetic)", "kb_variants"), - QObject::tr("Russian (DOS)", "kb_variants"), - QObject::tr("Russian (Georgia)", "kb_variants"), - QObject::tr("Russian (Germany, phonetic)", "kb_variants"), - QObject::tr("Russian (Kazakhstan, with Kazakh)", "kb_variants"), - QObject::tr("Russian (Macintosh)", "kb_variants"), - QObject::tr("Russian (Poland, phonetic Dvorak)", "kb_variants"), - QObject::tr("Russian (Sweden, phonetic)", "kb_variants"), - QObject::tr("Russian (Sweden, phonetic, no dead keys)", "kb_variants"), - QObject::tr("Russian (US, phonetic)", "kb_variants"), - QObject::tr("Russian (Ukraine, standard RSTU)", "kb_variants"), - QObject::tr("Russian (legacy)", "kb_variants"), - QObject::tr("Russian (phonetic)", "kb_variants"), - QObject::tr("Russian (phonetic, AZERTY)", "kb_variants"), - QObject::tr("Russian (phonetic, Dvorak)", "kb_variants"), - QObject::tr("Russian (phonetic, French)", "kb_variants"), - QObject::tr("Russian (phonetic, Windows)", "kb_variants"), - QObject::tr("Russian (phonetic, YAZHERTY)", "kb_variants"), - QObject::tr("Russian (typewriter)", "kb_variants"), - QObject::tr("Russian (typewriter, legacy)", "kb_variants"), - QObject::tr("Saisiyat (Taiwan)", "kb_variants"), - QObject::tr("Samogitian", "kb_variants"), - QObject::tr("Sanskrit (KaGaPa, phonetic)", "kb_variants"), - QObject::tr("Serbian (Cyrillic, ZE and ZHE swapped)", "kb_variants"), - QObject::tr("Serbian (Cyrillic, with guillemets)", "kb_variants"), - QObject::tr("Serbian (Latin)", "kb_variants"), - QObject::tr("Serbian (Latin, QWERTY)", "kb_variants"), - QObject::tr("Serbian (Latin, Unicode)", "kb_variants"), - QObject::tr("Serbian (Latin, Unicode, QWERTY)", "kb_variants"), - QObject::tr("Serbian (Latin, with guillemets)", "kb_variants"), - QObject::tr("Serbian (Russia)", "kb_variants"), - QObject::tr("Serbo-Croatian (US)", "kb_variants"), - QObject::tr("Sicilian", "kb_variants"), - QObject::tr("Silesian", "kb_variants"), - QObject::tr("Sindhi", "kb_variants"), - QObject::tr("Sinhala (US)", "kb_variants"), - QObject::tr("Slovak (QWERTY)", "kb_variants"), - QObject::tr("Slovak (QWERTY, extended backslash)", "kb_variants"), - QObject::tr("Slovak (extended backslash)", "kb_variants"), - QObject::tr("Slovenian (US)", "kb_variants"), - QObject::tr("Slovenian (with guillemets)", "kb_variants"), - QObject::tr("Spanish (Dvorak)", "kb_variants"), - QObject::tr("Spanish (Latin American, Colemak for gaming)", "kb_variants"), - QObject::tr("Spanish (Latin American, Colemak)", "kb_variants"), - QObject::tr("Spanish (Latin American, Dvorak)", "kb_variants"), - QObject::tr("Spanish (Latin American, Sun dead keys)", "kb_variants"), - QObject::tr("Spanish (Latin American, dead tilde)", "kb_variants"), - QObject::tr("Spanish (Latin American, no dead keys)", "kb_variants"), - QObject::tr("Spanish (Macintosh)", "kb_variants"), - QObject::tr("Spanish (Sun dead keys)", "kb_variants"), - QObject::tr("Spanish (Windows)", "kb_variants"), - QObject::tr("Spanish (dead tilde)", "kb_variants"), - QObject::tr("Spanish (no dead keys)", "kb_variants"), - QObject::tr("Swedish (Dvorak)", "kb_variants"), - QObject::tr("Swedish (Dvorak, intl.)", "kb_variants"), - QObject::tr("Swedish (Macintosh)", "kb_variants"), - QObject::tr("Swedish (Svdvorak)", "kb_variants"), - QObject::tr("Swedish (US)", "kb_variants"), - QObject::tr("Swedish (no dead keys)", "kb_variants"), - QObject::tr("Swedish Sign Language", "kb_variants"), - QObject::tr("Syriac", "kb_variants"), - QObject::tr("Syriac (phonetic)", "kb_variants"), - QObject::tr("Taiwanese (indigenous)", "kb_variants"), - QObject::tr("Tajik (legacy)", "kb_variants"), - QObject::tr("Tamil (Inscript)", "kb_variants"), - QObject::tr("Tamil (Sri Lanka, TamilNet '99)", "kb_variants"), - QObject::tr("Tamil (Sri Lanka, TamilNet '99, TAB encoding)", "kb_variants"), - QObject::tr("Tamil (TamilNet '99 with Tamil numerals)", "kb_variants"), - QObject::tr("Tamil (TamilNet '99)", "kb_variants"), - QObject::tr("Tamil (TamilNet '99, TAB encoding)", "kb_variants"), - QObject::tr("Tamil (TamilNet '99, TSCII encoding)", "kb_variants"), - QObject::tr("Tatar", "kb_variants"), - QObject::tr("Telugu", "kb_variants"), - QObject::tr("Telugu (KaGaPa, phonetic)", "kb_variants"), - QObject::tr("Telugu (Sarala)", "kb_variants"), - QObject::tr("Thai (Pattachote)", "kb_variants"), - QObject::tr("Thai (TIS-820.2538)", "kb_variants"), - QObject::tr("Tibetan", "kb_variants"), - QObject::tr("Tibetan (with ASCII numerals)", "kb_variants"), - QObject::tr("Turkish (Alt-Q)", "kb_variants"), - QObject::tr("Turkish (F)", "kb_variants"), - QObject::tr("Turkish (Germany)", "kb_variants"), - QObject::tr("Turkish (Sun dead keys)", "kb_variants"), - QObject::tr("Turkish (intl., with dead keys)", "kb_variants"), - QObject::tr("Turkmen (Alt-Q)", "kb_variants"), - QObject::tr("Udmurt", "kb_variants"), - QObject::tr("Ukrainian (Windows)", "kb_variants"), - QObject::tr("Ukrainian (homophonic)", "kb_variants"), - QObject::tr("Ukrainian (legacy)", "kb_variants"), - QObject::tr("Ukrainian (phonetic)", "kb_variants"), - QObject::tr("Ukrainian (standard RSTU)", "kb_variants"), - QObject::tr("Ukrainian (typewriter)", "kb_variants"), - QObject::tr("Urdu (Pakistan, CRULP)", "kb_variants"), - QObject::tr("Urdu (Pakistan, NLA)", "kb_variants"), - QObject::tr("Urdu (Windows)", "kb_variants"), - QObject::tr("Urdu (alt. phonetic)", "kb_variants"), - QObject::tr("Urdu (phonetic)", "kb_variants"), - QObject::tr("Uyghur", "kb_variants"), - QObject::tr("Uzbek (Afghanistan)", "kb_variants"), - QObject::tr("Uzbek (Afghanistan, OLPC)", "kb_variants"), - QObject::tr("Uzbek (Latin)", "kb_variants"), - QObject::tr("Vietnamese (French)", "kb_variants"), - QObject::tr("Vietnamese (US)", "kb_variants"), - QObject::tr("Yakut", "kb_variants"), - QObject::tr("Yoruba", "kb_variants"), + tr("Akan", "kb_variants"), + tr("Albanian (Plisi)", "kb_variants"), + tr("Albanian (Veqilharxhi)", "kb_variants"), + tr("Arabic (AZERTY)", "kb_variants"), + tr("Arabic (AZERTY, Eastern Arabic numerals)", "kb_variants"), + tr("Arabic (Algeria)", "kb_variants"), + tr("Arabic (Buckwalter)", "kb_variants"), + tr("Arabic (Eastern Arabic numerals)", "kb_variants"), + tr("Arabic (Macintosh)", "kb_variants"), + tr("Arabic (OLPC)", "kb_variants"), + tr("Arabic (Pakistan)", "kb_variants"), + tr("Arabic (QWERTY)", "kb_variants"), + tr("Arabic (QWERTY, Eastern Arabic numerals)", "kb_variants"), + tr("Armenian (alt. eastern)", "kb_variants"), + tr("Armenian (alt. phonetic)", "kb_variants"), + tr("Armenian (eastern)", "kb_variants"), + tr("Armenian (phonetic)", "kb_variants"), + tr("Armenian (western)", "kb_variants"), + tr("Asturian (Spain, with bottom-dot H and L)", "kb_variants"), + tr("Avatime", "kb_variants"), + tr("Azerbaijani (Cyrillic)", "kb_variants"), + tr("Bangla (India)", "kb_variants"), + tr("Bangla (India, Baishakhi Inscript)", "kb_variants"), + tr("Bangla (India, Baishakhi)", "kb_variants"), + tr("Bangla (India, Bornona)", "kb_variants"), + tr("Bangla (India, Gitanjali)", "kb_variants"), + tr("Bangla (India, Probhat)", "kb_variants"), + tr("Bangla (Probhat)", "kb_variants"), + tr("Bashkirian", "kb_variants"), + tr("Belarusian (Latin)", "kb_variants"), + tr("Belarusian (intl.)", "kb_variants"), + tr("Belarusian (legacy)", "kb_variants"), + tr("Belgian (ISO, alt.)", "kb_variants"), + tr("Belgian (Latin-9 only, alt.)", "kb_variants"), + tr("Belgian (Sun dead keys)", "kb_variants"), + tr("Belgian (Sun dead keys, alt.)", "kb_variants"), + tr("Belgian (Wang 724 AZERTY)", "kb_variants"), + tr("Belgian (alt.)", "kb_variants"), + tr("Belgian (no dead keys)", "kb_variants"), + tr("Berber (Morocco, Tifinagh alt.)", "kb_variants"), + tr("Berber (Morocco, Tifinagh extended phonetic)", "kb_variants"), + tr("Berber (Morocco, Tifinagh extended)", "kb_variants"), + tr("Berber (Morocco, Tifinagh phonetic)", "kb_variants"), + tr("Berber (Morocco, Tifinagh phonetic, alt.)", "kb_variants"), + tr("Berber (Morocco, Tifinagh)", "kb_variants"), + tr("Bosnian (US)", "kb_variants"), + tr("Bosnian (US, with Bosnian digraphs)", "kb_variants"), + tr("Bosnian (with Bosnian digraphs)", "kb_variants"), + tr("Bosnian (with guillemets)", "kb_variants"), + tr("Braille (left-handed inverted thumb)", "kb_variants"), + tr("Braille (left-handed)", "kb_variants"), + tr("Braille (right-handed inverted thumb)", "kb_variants"), + tr("Braille (right-handed)", "kb_variants"), + tr("Bulgarian (enhanced)", "kb_variants"), + tr("Bulgarian (new phonetic)", "kb_variants"), + tr("Bulgarian (traditional phonetic)", "kb_variants"), + tr("Burmese Zawgyi", "kb_variants"), + tr("Cameroon (AZERTY, intl.)", "kb_variants"), + tr("Cameroon (Dvorak, intl.)", "kb_variants"), + tr("Cameroon Multilingual (QWERTY, intl.)", "kb_variants"), + tr("Canadian (intl.)", "kb_variants"), + tr("Canadian (intl., 1st part)", "kb_variants"), + tr("Canadian (intl., 2nd part)", "kb_variants"), + tr("Catalan (Spain, with middle-dot L)", "kb_variants"), + tr("Cherokee", "kb_variants"), + tr("Chuvash", "kb_variants"), + tr("Chuvash (Latin)", "kb_variants"), + tr("CloGaelach", "kb_variants"), + tr("Crimean Tatar (Turkish Alt-Q)", "kb_variants"), + tr("Crimean Tatar (Turkish F)", "kb_variants"), + tr("Crimean Tatar (Turkish Q)", "kb_variants"), + tr("Croatian (US)", "kb_variants"), + tr("Croatian (US, with Croatian digraphs)", "kb_variants"), + tr("Croatian (with Croatian digraphs)", "kb_variants"), + tr("Croatian (with guillemets)", "kb_variants"), + tr("Czech (QWERTY)", "kb_variants"), + tr("Czech (QWERTY, Macintosh)", "kb_variants"), + tr("Czech (QWERTY, extended backslash)", "kb_variants"), + tr("Czech (UCW, only accented letters)", "kb_variants"), + tr("Czech (US, Dvorak, UCW support)", "kb_variants"), + tr("Czech (with <\|> key)", "kb_variants"), + tr("Danish (Dvorak)", "kb_variants"), + tr("Danish (Macintosh)", "kb_variants"), + tr("Danish (Macintosh, no dead keys)", "kb_variants"), + tr("Danish (Windows)", "kb_variants"), + tr("Danish (no dead keys)", "kb_variants"), + tr("Default", "kb_variants"), + tr("Dutch (Macintosh)", "kb_variants"), + tr("Dutch (Sun dead keys)", "kb_variants"), + tr("Dutch (standard)", "kb_variants"), + tr("English (Canada)", "kb_variants"), + tr("English (Colemak)", "kb_variants"), + tr("English (Dvorak)", "kb_variants"), + tr("English (Dvorak, alt. intl.)", "kb_variants"), + tr("English (Dvorak, intl., with dead keys)", "kb_variants"), + tr("English (Dvorak, left-handed)", "kb_variants"), + tr("English (Dvorak, right-handed)", "kb_variants"), + tr("English (Ghana, GILLBT)", "kb_variants"), + tr("English (Ghana, multilingual)", "kb_variants"), + tr("English (India, with rupee)", "kb_variants"), + tr("English (Macintosh)", "kb_variants"), + tr("English (Mali, US, Macintosh)", "kb_variants"), + tr("English (Mali, US, intl.)", "kb_variants"), + tr("English (Norman)", "kb_variants"), + tr("English (UK, Colemak)", "kb_variants"), + tr("English (UK, Dvorak)", "kb_variants"), + tr("English (UK, Dvorak, with UK punctuation)", "kb_variants"), + tr("English (UK, Macintosh)", "kb_variants"), + tr("English (UK, Macintosh, intl.)", "kb_variants"), + tr("English (UK, extended, Windows)", "kb_variants"), + tr("English (UK, intl., with dead keys)", "kb_variants"), + tr("English (US, Symbolic)", "kb_variants"), + tr("English (US, alt. intl.)", "kb_variants"), + tr("English (US, euro on 5)", "kb_variants"), + tr("English (US, intl., with dead keys)", "kb_variants"), + tr("English (Workman)", "kb_variants"), + tr("English (Workman, intl., with dead keys)", "kb_variants"), + tr("English (classic Dvorak)", "kb_variants"), + tr("English (intl., with AltGr dead keys)", "kb_variants"), + tr("English (programmer Dvorak)", "kb_variants"), + tr("English (the divide/multiply toggle the layout)", "kb_variants"), + tr("Esperanto (Brazil, Nativo)", "kb_variants"), + tr("Esperanto (Portugal, Nativo)", "kb_variants"), + tr("Esperanto (legacy)", "kb_variants"), + tr("Estonian (Dvorak)", "kb_variants"), + tr("Estonian (US)", "kb_variants"), + tr("Estonian (no dead keys)", "kb_variants"), + tr("Ewe", "kb_variants"), + tr("Faroese (no dead keys)", "kb_variants"), + tr("Filipino (Capewell-Dvorak, Baybayin)", "kb_variants"), + tr("Filipino (Capewell-Dvorak, Latin)", "kb_variants"), + tr("Filipino (Capewell-QWERF 2006, Baybayin)", "kb_variants"), + tr("Filipino (Capewell-QWERF 2006, Latin)", "kb_variants"), + tr("Filipino (Colemak, Baybayin)", "kb_variants"), + tr("Filipino (Colemak, Latin)", "kb_variants"), + tr("Filipino (Dvorak, Baybayin)", "kb_variants"), + tr("Filipino (Dvorak, Latin)", "kb_variants"), + tr("Filipino (QWERTY, Baybayin)", "kb_variants"), + tr("Finnish (Macintosh)", "kb_variants"), + tr("Finnish (Windows)", "kb_variants"), + tr("Finnish (classic)", "kb_variants"), + tr("Finnish (classic, no dead keys)", "kb_variants"), + tr("French (AZERTY)", "kb_variants"), + tr("French (AZERTY, AFNOR)", "kb_variants"), + tr("French (BEPO)", "kb_variants"), + tr("French (BEPO, AFNOR)", "kb_variants"), + tr("French (BEPO, Latin-9 only)", "kb_variants"), + tr("French (Breton)", "kb_variants"), + tr("French (Cameroon)", "kb_variants"), + tr("French (Canada, Dvorak)", "kb_variants"), + tr("French (Canada, legacy)", "kb_variants"), + tr("French (Dvorak)", "kb_variants"), + tr("French (Macintosh)", "kb_variants"), + tr("French (Mali, alt.)", "kb_variants"), + tr("French (Morocco)", "kb_variants"), + tr("French (Sun dead keys)", "kb_variants"), + tr("French (Switzerland)", "kb_variants"), + tr("French (Switzerland, Macintosh)", "kb_variants"), + tr("French (Switzerland, Sun dead keys)", "kb_variants"), + tr("French (Switzerland, no dead keys)", "kb_variants"), + tr("French (US)", "kb_variants"), + tr("French (alt.)", "kb_variants"), + tr("French (alt., Latin-9 only)", "kb_variants"), + tr("French (alt., Sun dead keys)", "kb_variants"), + tr("French (alt., no dead keys)", "kb_variants"), + tr("French (legacy, alt.)", "kb_variants"), + tr("French (legacy, alt., Sun dead keys)", "kb_variants"), + tr("French (legacy, alt., no dead keys)", "kb_variants"), + tr("French (no dead keys)", "kb_variants"), + tr("Friulian (Italy)", "kb_variants"), + tr("Fula", "kb_variants"), + tr("Ga", "kb_variants"), + tr("Georgian (France, AZERTY Tskapo)", "kb_variants"), + tr("Georgian (Italy)", "kb_variants"), + tr("Georgian (MESS)", "kb_variants"), + tr("Georgian (ergonomic)", "kb_variants"), + tr("German (Austria, Macintosh)", "kb_variants"), + tr("German (Austria, Sun dead keys)", "kb_variants"), + tr("German (Austria, no dead keys)", "kb_variants"), + tr("German (Dvorak)", "kb_variants"), + tr("German (E1)", "kb_variants"), + tr("German (E2)", "kb_variants"), + tr("German (Macintosh)", "kb_variants"), + tr("German (Macintosh, no dead keys)", "kb_variants"), + tr("German (Neo 2)", "kb_variants"), + tr("German (QWERTY)", "kb_variants"), + tr("German (Sun dead keys)", "kb_variants"), + tr("German (Switzerland, Macintosh)", "kb_variants"), + tr("German (Switzerland, Sun dead keys)", "kb_variants"), + tr("German (Switzerland, legacy)", "kb_variants"), + tr("German (Switzerland, no dead keys)", "kb_variants"), + tr("German (T3)", "kb_variants"), + tr("German (US)", "kb_variants"), + tr("German (dead acute)", "kb_variants"), + tr("German (dead grave acute)", "kb_variants"), + tr("German (dead tilde)", "kb_variants"), + tr("German (no dead keys)", "kb_variants"), + tr("Greek (extended)", "kb_variants"), + tr("Greek (no dead keys)", "kb_variants"), + tr("Greek (polytonic)", "kb_variants"), + tr("Greek (simple)", "kb_variants"), + tr("Gujarati", "kb_variants"), + tr("Hanyu Pinyin (with AltGr dead keys)", "kb_variants"), + tr("Hausa (Ghana)", "kb_variants"), + tr("Hausa (Nigeria)", "kb_variants"), + tr("Hawaiian", "kb_variants"), + tr("Hebrew (Biblical, Tiro)", "kb_variants"), + tr("Hebrew (lyx)", "kb_variants"), + tr("Hebrew (phonetic)", "kb_variants"), + tr("Hindi (Bolnagri)", "kb_variants"), + tr("Hindi (KaGaPa, phonetic)", "kb_variants"), + tr("Hindi (Wx)", "kb_variants"), + tr("Hungarian (QWERTY)", "kb_variants"), + tr("Hungarian (QWERTY, 101-key, comma, dead keys)", "kb_variants"), + tr("Hungarian (QWERTY, 101-key, comma, no dead keys)", "kb_variants"), + tr("Hungarian (QWERTY, 101-key, dot, dead keys)", "kb_variants"), + tr("Hungarian (QWERTY, 101-key, dot, no dead keys)", "kb_variants"), + tr("Hungarian (QWERTY, 102-key, comma, dead keys)", "kb_variants"), + tr("Hungarian (QWERTY, 102-key, comma, no dead keys)", "kb_variants"), + tr("Hungarian (QWERTY, 102-key, dot, dead keys)", "kb_variants"), + tr("Hungarian (QWERTY, 102-key, dot, no dead keys)", "kb_variants"), + tr("Hungarian (QWERTZ, 101-key, comma, dead keys)", "kb_variants"), + tr("Hungarian (QWERTZ, 101-key, comma, no dead keys)", "kb_variants"), + tr("Hungarian (QWERTZ, 101-key, dot, dead keys)", "kb_variants"), + tr("Hungarian (QWERTZ, 101-key, dot, no dead keys)", "kb_variants"), + tr("Hungarian (QWERTZ, 102-key, comma, dead keys)", "kb_variants"), + tr("Hungarian (QWERTZ, 102-key, comma, no dead keys)", "kb_variants"), + tr("Hungarian (QWERTZ, 102-key, dot, dead keys)", "kb_variants"), + tr("Hungarian (QWERTZ, 102-key, dot, no dead keys)", "kb_variants"), + tr("Hungarian (no dead keys)", "kb_variants"), + tr("Hungarian (standard)", "kb_variants"), + tr("Icelandic (Dvorak)", "kb_variants"), + tr("Icelandic (Macintosh)", "kb_variants"), + tr("Icelandic (Macintosh, legacy)", "kb_variants"), + tr("Icelandic (Sun dead keys)", "kb_variants"), + tr("Icelandic (no dead keys)", "kb_variants"), + tr("Igbo", "kb_variants"), + tr("Indic (phonetic, IPA)", "kb_variants"), + tr("Indonesian (Arab Melayu, extended phonetic)", "kb_variants"), + tr("Inuktitut", "kb_variants"), + tr("Irish (UnicodeExpert)", "kb_variants"), + tr("Italian (IBM 142)", "kb_variants"), + tr("Italian (Macintosh)", "kb_variants"), + tr("Italian (US)", "kb_variants"), + tr("Italian (Windows)", "kb_variants"), + tr("Italian (intl., with dead keys)", "kb_variants"), + tr("Italian (no dead keys)", "kb_variants"), + tr("Japanese (Dvorak)", "kb_variants"), + tr("Japanese (Kana 86)", "kb_variants"), + tr("Japanese (Kana)", "kb_variants"), + tr("Japanese (Macintosh)", "kb_variants"), + tr("Japanese (OADG 109A)", "kb_variants"), + tr("Kabylian (Algeria, Tifinagh)", "kb_variants"), + tr("Kabylian (azerty layout, with dead keys)", "kb_variants"), + tr("Kabylian (qwerty-gb layout, with dead keys)", "kb_variants"), + tr("Kabylian (qwerty-us layout, with dead keys)", "kb_variants"), + tr("Kalmyk", "kb_variants"), + tr("Kannada", "kb_variants"), + tr("Kannada (KaGaPa, phonetic)", "kb_variants"), + tr("Kashubian", "kb_variants"), + tr("Kazakh (Latin)", "kb_variants"), + tr("Kazakh (extended)", "kb_variants"), + tr("Kazakh (with Russian)", "kb_variants"), + tr("Kikuyu", "kb_variants"), + tr("Komi", "kb_variants"), + tr("Korean (101/104-key compatible)", "kb_variants"), + tr("Kurdish (Iran, Arabic-Latin)", "kb_variants"), + tr("Kurdish (Iran, F)", "kb_variants"), + tr("Kurdish (Iran, Latin Alt-Q)", "kb_variants"), + tr("Kurdish (Iran, Latin Q)", "kb_variants"), + tr("Kurdish (Iraq, Arabic-Latin)", "kb_variants"), + tr("Kurdish (Iraq, F)", "kb_variants"), + tr("Kurdish (Iraq, Latin Alt-Q)", "kb_variants"), + tr("Kurdish (Iraq, Latin Q)", "kb_variants"), + tr("Kurdish (Syria, F)", "kb_variants"), + tr("Kurdish (Syria, Latin Alt-Q)", "kb_variants"), + tr("Kurdish (Syria, Latin Q)", "kb_variants"), + tr("Kurdish (Turkey, F)", "kb_variants"), + tr("Kurdish (Turkey, Latin Alt-Q)", "kb_variants"), + tr("Kurdish (Turkey, Latin Q)", "kb_variants"), + tr("Kyrgyz (phonetic)", "kb_variants"), + tr("Lao (STEA)", "kb_variants"), + tr("Latvian (F)", "kb_variants"), + tr("Latvian (adapted)", "kb_variants"), + tr("Latvian (apostrophe)", "kb_variants"), + tr("Latvian (ergonomic, ŪGJRMV)", "kb_variants"), + tr("Latvian (modern)", "kb_variants"), + tr("Latvian (tilde)", "kb_variants"), + tr("Lithuanian (IBM LST 1205-92)", "kb_variants"), + tr("Lithuanian (LEKP)", "kb_variants"), + tr("Lithuanian (LEKPa)", "kb_variants"), + tr("Lithuanian (US)", "kb_variants"), + tr("Lithuanian (standard)", "kb_variants"), + tr("Lower Sorbian", "kb_variants"), + tr("Lower Sorbian (QWERTZ)", "kb_variants"), + tr("Macedonian (no dead keys)", "kb_variants"), + tr("Malay (Jawi, phonetic)", "kb_variants"), + tr("Malayalam", "kb_variants"), + tr("Malayalam (Lalitha)", "kb_variants"), + tr("Malayalam (enhanced Inscript, with rupee)", "kb_variants"), + tr("Maltese (UK, with AltGr overrides)", "kb_variants"), + tr("Maltese (US layout with AltGr overrides)", "kb_variants"), + tr("Maltese (US)", "kb_variants"), + tr("Manipuri (Eeyek)", "kb_variants"), + tr("Marathi (KaGaPa, phonetic)", "kb_variants"), + tr("Marathi (enhanced Inscript)", "kb_variants"), + tr("Mari", "kb_variants"), + tr("Mmuock", "kb_variants"), + tr("Moldavian (Gagauz)", "kb_variants"), + tr("Mongolian (Bichig)", "kb_variants"), + tr("Mongolian (Galik)", "kb_variants"), + tr("Mongolian (Manchu Galik)", "kb_variants"), + tr("Mongolian (Manchu)", "kb_variants"), + tr("Mongolian (Todo Galik)", "kb_variants"), + tr("Mongolian (Todo)", "kb_variants"), + tr("Mongolian (Xibe)", "kb_variants"), + tr("Montenegrin (Cyrillic)", "kb_variants"), + tr("Montenegrin (Cyrillic, ZE and ZHE swapped)", "kb_variants"), + tr("Montenegrin (Cyrillic, with guillemets)", "kb_variants"), + tr("Montenegrin (Latin, QWERTY)", "kb_variants"), + tr("Montenegrin (Latin, Unicode)", "kb_variants"), + tr("Montenegrin (Latin, Unicode, QWERTY)", "kb_variants"), + tr("Montenegrin (Latin, with guillemets)", "kb_variants"), + tr("Northern Saami (Finland)", "kb_variants"), + tr("Northern Saami (Norway)", "kb_variants"), + tr("Northern Saami (Norway, no dead keys)", "kb_variants"), + tr("Northern Saami (Sweden)", "kb_variants"), + tr("Norwegian (Colemak)", "kb_variants"), + tr("Norwegian (Dvorak)", "kb_variants"), + tr("Norwegian (Macintosh)", "kb_variants"), + tr("Norwegian (Macintosh, no dead keys)", "kb_variants"), + tr("Norwegian (Windows)", "kb_variants"), + tr("Norwegian (no dead keys)", "kb_variants"), + tr("Occitan", "kb_variants"), + tr("Ogham", "kb_variants"), + tr("Ogham (IS434)", "kb_variants"), + tr("Ol Chiki", "kb_variants"), + tr("Oriya", "kb_variants"), + tr("Ossetian (Georgia)", "kb_variants"), + tr("Ossetian (Windows)", "kb_variants"), + tr("Ossetian (legacy)", "kb_variants"), + tr("Pannonian Rusyn", "kb_variants"), + tr("Pashto", "kb_variants"), + tr("Pashto (Afghanistan, OLPC)", "kb_variants"), + tr("Persian (Afghanistan, Dari OLPC)", "kb_variants"), + tr("Persian (with Persian keypad)", "kb_variants"), + tr("Polish (British keyboard)", "kb_variants"), + tr("Polish (Dvorak)", "kb_variants"), + tr("Polish (Dvorak, with Polish quotes on key 1)", "kb_variants"), + tr("Polish (Dvorak, with Polish quotes on quotemark key)", "kb_variants"), + tr("Polish (QWERTZ)", "kb_variants"), + tr("Polish (legacy)", "kb_variants"), + tr("Polish (programmer Dvorak)", "kb_variants"), + tr("Portuguese (Brazil, Dvorak)", "kb_variants"), + tr("Portuguese (Brazil, IBM/Lenovo ThinkPad)", "kb_variants"), + tr("Portuguese (Brazil, Nativo for US keyboards)", "kb_variants"), + tr("Portuguese (Brazil, Nativo)", "kb_variants"), + tr("Portuguese (Brazil, no dead keys)", "kb_variants"), + tr("Portuguese (Macintosh)", "kb_variants"), + tr("Portuguese (Macintosh, Sun dead keys)", "kb_variants"), + tr("Portuguese (Macintosh, no dead keys)", "kb_variants"), + tr("Portuguese (Nativo for US keyboards)", "kb_variants"), + tr("Portuguese (Nativo)", "kb_variants"), + tr("Portuguese (Sun dead keys)", "kb_variants"), + tr("Portuguese (no dead keys)", "kb_variants"), + tr("Punjabi (Gurmukhi Jhelum)", "kb_variants"), + tr("Punjabi (Gurmukhi)", "kb_variants"), + tr("Romanian (Germany)", "kb_variants"), + tr("Romanian (Germany, no dead keys)", "kb_variants"), + tr("Romanian (Windows)", "kb_variants"), + tr("Romanian (cedilla)", "kb_variants"), + tr("Romanian (standard cedilla)", "kb_variants"), + tr("Romanian (standard)", "kb_variants"), + tr("Russian (Belarus)", "kb_variants"), + tr("Russian (Czech, phonetic)", "kb_variants"), + tr("Russian (DOS)", "kb_variants"), + tr("Russian (Georgia)", "kb_variants"), + tr("Russian (Germany, phonetic)", "kb_variants"), + tr("Russian (Kazakhstan, with Kazakh)", "kb_variants"), + tr("Russian (Macintosh)", "kb_variants"), + tr("Russian (Poland, phonetic Dvorak)", "kb_variants"), + tr("Russian (Sweden, phonetic)", "kb_variants"), + tr("Russian (Sweden, phonetic, no dead keys)", "kb_variants"), + tr("Russian (US, phonetic)", "kb_variants"), + tr("Russian (Ukraine, standard RSTU)", "kb_variants"), + tr("Russian (legacy)", "kb_variants"), + tr("Russian (phonetic)", "kb_variants"), + tr("Russian (phonetic, AZERTY)", "kb_variants"), + tr("Russian (phonetic, Dvorak)", "kb_variants"), + tr("Russian (phonetic, French)", "kb_variants"), + tr("Russian (phonetic, Windows)", "kb_variants"), + tr("Russian (phonetic, YAZHERTY)", "kb_variants"), + tr("Russian (typewriter)", "kb_variants"), + tr("Russian (typewriter, legacy)", "kb_variants"), + tr("Saisiyat (Taiwan)", "kb_variants"), + tr("Samogitian", "kb_variants"), + tr("Sanskrit (KaGaPa, phonetic)", "kb_variants"), + tr("Serbian (Cyrillic, ZE and ZHE swapped)", "kb_variants"), + tr("Serbian (Cyrillic, with guillemets)", "kb_variants"), + tr("Serbian (Latin)", "kb_variants"), + tr("Serbian (Latin, QWERTY)", "kb_variants"), + tr("Serbian (Latin, Unicode)", "kb_variants"), + tr("Serbian (Latin, Unicode, QWERTY)", "kb_variants"), + tr("Serbian (Latin, with guillemets)", "kb_variants"), + tr("Serbian (Russia)", "kb_variants"), + tr("Serbo-Croatian (US)", "kb_variants"), + tr("Sicilian", "kb_variants"), + tr("Silesian", "kb_variants"), + tr("Sindhi", "kb_variants"), + tr("Sinhala (US)", "kb_variants"), + tr("Slovak (QWERTY)", "kb_variants"), + tr("Slovak (QWERTY, extended backslash)", "kb_variants"), + tr("Slovak (extended backslash)", "kb_variants"), + tr("Slovenian (US)", "kb_variants"), + tr("Slovenian (with guillemets)", "kb_variants"), + tr("Spanish (Dvorak)", "kb_variants"), + tr("Spanish (Latin American, Colemak for gaming)", "kb_variants"), + tr("Spanish (Latin American, Colemak)", "kb_variants"), + tr("Spanish (Latin American, Dvorak)", "kb_variants"), + tr("Spanish (Latin American, Sun dead keys)", "kb_variants"), + tr("Spanish (Latin American, dead tilde)", "kb_variants"), + tr("Spanish (Latin American, no dead keys)", "kb_variants"), + tr("Spanish (Macintosh)", "kb_variants"), + tr("Spanish (Sun dead keys)", "kb_variants"), + tr("Spanish (Windows)", "kb_variants"), + tr("Spanish (dead tilde)", "kb_variants"), + tr("Spanish (no dead keys)", "kb_variants"), + tr("Swedish (Dvorak)", "kb_variants"), + tr("Swedish (Dvorak, intl.)", "kb_variants"), + tr("Swedish (Macintosh)", "kb_variants"), + tr("Swedish (Svdvorak)", "kb_variants"), + tr("Swedish (US)", "kb_variants"), + tr("Swedish (no dead keys)", "kb_variants"), + tr("Swedish Sign Language", "kb_variants"), + tr("Syriac", "kb_variants"), + tr("Syriac (phonetic)", "kb_variants"), + tr("Taiwanese (indigenous)", "kb_variants"), + tr("Tajik (legacy)", "kb_variants"), + tr("Tamil (Inscript)", "kb_variants"), + tr("Tamil (Sri Lanka, TamilNet '99)", "kb_variants"), + tr("Tamil (Sri Lanka, TamilNet '99, TAB encoding)", "kb_variants"), + tr("Tamil (TamilNet '99 with Tamil numerals)", "kb_variants"), + tr("Tamil (TamilNet '99)", "kb_variants"), + tr("Tamil (TamilNet '99, TAB encoding)", "kb_variants"), + tr("Tamil (TamilNet '99, TSCII encoding)", "kb_variants"), + tr("Tatar", "kb_variants"), + tr("Telugu", "kb_variants"), + tr("Telugu (KaGaPa, phonetic)", "kb_variants"), + tr("Telugu (Sarala)", "kb_variants"), + tr("Thai (Pattachote)", "kb_variants"), + tr("Thai (TIS-820.2538)", "kb_variants"), + tr("Tibetan", "kb_variants"), + tr("Tibetan (with ASCII numerals)", "kb_variants"), + tr("Turkish (Alt-Q)", "kb_variants"), + tr("Turkish (F)", "kb_variants"), + tr("Turkish (Germany)", "kb_variants"), + tr("Turkish (Sun dead keys)", "kb_variants"), + tr("Turkish (intl., with dead keys)", "kb_variants"), + tr("Turkmen (Alt-Q)", "kb_variants"), + tr("Udmurt", "kb_variants"), + tr("Ukrainian (Windows)", "kb_variants"), + tr("Ukrainian (homophonic)", "kb_variants"), + tr("Ukrainian (legacy)", "kb_variants"), + tr("Ukrainian (phonetic)", "kb_variants"), + tr("Ukrainian (standard RSTU)", "kb_variants"), + tr("Ukrainian (typewriter)", "kb_variants"), + tr("Urdu (Pakistan, CRULP)", "kb_variants"), + tr("Urdu (Pakistan, NLA)", "kb_variants"), + tr("Urdu (Windows)", "kb_variants"), + tr("Urdu (alt. phonetic)", "kb_variants"), + tr("Urdu (phonetic)", "kb_variants"), + tr("Uyghur", "kb_variants"), + tr("Uzbek (Afghanistan)", "kb_variants"), + tr("Uzbek (Afghanistan, OLPC)", "kb_variants"), + tr("Uzbek (Latin)", "kb_variants"), + tr("Vietnamese (French)", "kb_variants"), + tr("Vietnamese (US)", "kb_variants"), + tr("Yakut", "kb_variants"), + tr("Yoruba", "kb_variants"), QString() }; } +} diff --git a/src/modules/keyboard/KeyboardLayoutModel.cpp b/src/modules/keyboard/KeyboardLayoutModel.cpp index f1e6a66c6..f412eb7e1 100644 --- a/src/modules/keyboard/KeyboardLayoutModel.cpp +++ b/src/modules/keyboard/KeyboardLayoutModel.cpp @@ -20,6 +20,18 @@ static QTranslator* s_kbtranslator = nullptr; +void +retranslateKeyboardModels() +{ + cqDeleter< QTranslator > d{ s_kbtranslator }; + if ( !s_kbtranslator ) + { + s_kbtranslator = new QTranslator; + } + d.preserve = CalamaresUtils::loadTranslator( QLocale(), QStringLiteral("kb_"), s_kbtranslator ); +} + + XKBListModel::XKBListModel( QObject* parent ) : QAbstractListModel( parent ) { diff --git a/src/modules/keyboard/KeyboardLayoutModel.h b/src/modules/keyboard/KeyboardLayoutModel.h index 9c83e41d8..99b204573 100644 --- a/src/modules/keyboard/KeyboardLayoutModel.h +++ b/src/modules/keyboard/KeyboardLayoutModel.h @@ -146,4 +146,8 @@ public: void setVariants( QMap< QString, QString > variants ); }; +/** @brief Adjust to changes in application language. + */ +void retranslateKeyboardModels(); + #endif // KEYBOARDLAYOUTMODEL_H diff --git a/src/modules/keyboard/layout-extractor.py b/src/modules/keyboard/layout-extractor.py index 74b42ea07..44b0d6b50 100644 --- a/src/modules/keyboard/layout-extractor.py +++ b/src/modules/keyboard/layout-extractor.py @@ -58,10 +58,11 @@ def scrape_file(file, modelsset, layoutsset, variantsset): def write_set(file, label, set): file.write("/* This returns a reference to local, which is a terrible idea.\n * Good thing it's not meant to be compiled.\n */\n") # Note {{ is an escaped { for Python string formatting - file.write("static const QStringList& {!s}_table()\n{{\n\treturn QStringList {{\n".format(label)) + file.write("class {!s} : public QObject {{\nQ_OBJECT\npublic:\n".format(label)) + file.write("\tconst QStringList& table()\n\t{\n\treturn QStringList {\n") for x in sorted(set): - file.write("""\t\tQObject::tr("{!s}", "{!s}"),\n""".format(x, label)) - file.write("\t\tQString()\n\t};\n}\n\n") + file.write("""\t\ttr("{!s}", "{!s}"),\n""".format(x, label)) + file.write("\t\tQString()\n\t};\n}\n}\n\n") cpp_header_comment = """/* GENERATED FILE DO NOT EDIT * @@ -84,6 +85,7 @@ if __name__ == "__main__": models=set() layouts=set() variants=set() + variants.add( "Default" ) with open("/usr/local/share/X11/xkb/rules/base.lst", "r") as f: scrape_file(f, models, layouts, variants) with open("KeyboardData_p.cxxtr", "w") as f: From 6863db0dc1bdaef80f39f267efdf5934d4d8355d Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Sun, 1 Nov 2020 14:19:06 +0100 Subject: [PATCH 13/53] [keyboard] Use the translations if they were loaded --- src/modules/keyboard/KeyboardLayoutModel.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/modules/keyboard/KeyboardLayoutModel.cpp b/src/modules/keyboard/KeyboardLayoutModel.cpp index f412eb7e1..1894ec683 100644 --- a/src/modules/keyboard/KeyboardLayoutModel.cpp +++ b/src/modules/keyboard/KeyboardLayoutModel.cpp @@ -23,12 +23,11 @@ static QTranslator* s_kbtranslator = nullptr; void retranslateKeyboardModels() { - cqDeleter< QTranslator > d{ s_kbtranslator }; if ( !s_kbtranslator ) { s_kbtranslator = new QTranslator; } - d.preserve = CalamaresUtils::loadTranslator( QLocale(), QStringLiteral("kb_"), s_kbtranslator ); + (void) CalamaresUtils::loadTranslator( QLocale(), QStringLiteral("kb_"), s_kbtranslator ); } @@ -59,10 +58,13 @@ XKBListModel::data( const QModelIndex& index, int role ) const switch ( role ) { case LabelRole: - if ( s_kbtranslator && m_contextname ) + if ( s_kbtranslator && !s_kbtranslator->isEmpty() && m_contextname ) { auto s = s_kbtranslator->translate( m_contextname, item.label.toUtf8().data() ); - cDebug() << "Translated" << item.label << "to" << s; + if ( !s.isEmpty() ) + { + return s; + } } return item.label; case KeyRole: From 47467543449ddc69d44b512371cc0b9814d0a0d5 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Sun, 1 Nov 2020 14:28:12 +0100 Subject: [PATCH 14/53] [keyboard] Translate layouts as well --- src/modules/keyboard/KeyboardLayoutModel.cpp | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/modules/keyboard/KeyboardLayoutModel.cpp b/src/modules/keyboard/KeyboardLayoutModel.cpp index 1894ec683..abac1cdc2 100644 --- a/src/modules/keyboard/KeyboardLayoutModel.cpp +++ b/src/modules/keyboard/KeyboardLayoutModel.cpp @@ -27,7 +27,7 @@ retranslateKeyboardModels() { s_kbtranslator = new QTranslator; } - (void) CalamaresUtils::loadTranslator( QLocale(), QStringLiteral("kb_"), s_kbtranslator ); + (void)CalamaresUtils::loadTranslator( QLocale(), QStringLiteral( "kb_" ), s_kbtranslator ); } @@ -165,7 +165,18 @@ KeyboardLayoutModel::data( const QModelIndex& index, int role ) const switch ( role ) { case Qt::DisplayRole: - return m_layouts.at( index.row() ).second.description; + { + auto description = m_layouts.at( index.row() ).second.description; + if ( s_kbtranslator && !s_kbtranslator->isEmpty() ) + { + auto s = s_kbtranslator->translate( "kb_layouts", description.toUtf8().data() ); + if ( !s.isEmpty() ) + { + return s; + } + } + return description; + } case KeyboardVariantsRole: return QVariant::fromValue( m_layouts.at( index.row() ).second.variants ); case KeyboardLayoutKeyRole: From 48eae463cc329e6a5f6303bbc7440bbb1cfc0557 Mon Sep 17 00:00:00 2001 From: Artem Grinev Date: Sun, 1 Nov 2020 19:24:42 -0500 Subject: [PATCH 15/53] [users] Full name transliteration support for user creation --- src/modules/users/CMakeLists.txt | 12 ++++++++++ src/modules/users/Config.cpp | 39 ++++++++++++++++++++++++++++++- src/modules/usersq/CMakeLists.txt | 12 ++++++++++ 3 files changed, 62 insertions(+), 1 deletion(-) diff --git a/src/modules/users/CMakeLists.txt b/src/modules/users/CMakeLists.txt index fdae38440..56a61093b 100644 --- a/src/modules/users/CMakeLists.txt +++ b/src/modules/users/CMakeLists.txt @@ -21,6 +21,18 @@ if( LibPWQuality_FOUND ) add_definitions( -DCHECK_PWQUALITY -DHAVE_LIBPWQUALITY ) endif() +find_package( ICU COMPONENTS uc i18n ) +set_package_properties( + ICU PROPERTIES + PURPOSE "Transliteration support for full name to username conversion" +) + +if( ICU_FOUND ) + list( APPEND USER_EXTRA_LIB ICU::uc ICU::i18n ) + include_directories( ${ICU_INCLUDE_DIRS} ) + add_definitions( -DHAVE_ICU ) +endif() + include_directories( ${PROJECT_BINARY_DIR}/src/libcalamaresui ) set( JOB_SRC diff --git a/src/modules/users/Config.cpp b/src/modules/users/Config.cpp index f8904b9d4..186dd0ade 100644 --- a/src/modules/users/Config.cpp +++ b/src/modules/users/Config.cpp @@ -23,6 +23,11 @@ #include #include +#ifdef HAVE_ICU +#include +#include +#endif + static const QRegExp USERNAME_RX( "^[a-z_][a-z0-9_-]*[$]?$" ); static constexpr const int USERNAME_MAX_LENGTH = 31; @@ -279,6 +284,30 @@ guessProductName() } return dmiProduct; } +#ifdef HAVE_ICU +static QString +transliterate( const QString& input ) +{ + static UErrorCode ue = UErrorCode::U_ZERO_ERROR; + static auto transliterator = std::unique_ptr< icu::Transliterator >( + icu::Transliterator::createInstance( "Any-Latin; Latin-ASCII", UTRANS_FORWARD, ue ) + ); + + if(ue!=0){ + cWarning() << "Can't create transliterator"; + + //it'll be checked later for non-ASCII characters + return input; + } + + auto transliterable = icu::UnicodeString( input.toUtf8().data() ); + + transliterator->transliterate( transliterable ); + + return QString::fromUtf16( transliterable.getTerminatedBuffer() ); + +} +#endif static QString makeLoginNameSuggestion( const QStringList& parts ) @@ -337,8 +366,16 @@ Config::setFullName( const QString& name ) emit fullNameChanged( name ); // Build login and hostname, if needed + QString cleanName = CalamaresUtils::removeDiacritics( name ).toLower().simplified(); + +#ifdef HAVE_ICU + cleanName = transliterate(cleanName); +#else QRegExp rx( "[^a-zA-Z0-9 ]", Qt::CaseInsensitive ); - QString cleanName = CalamaresUtils::removeDiacritics( name ).toLower().replace( rx, " " ).simplified(); + cleanName.replace( rx, " " ); +#endif + + QStringList cleanParts = cleanName.split( ' ' ); if ( !m_customLoginName ) diff --git a/src/modules/usersq/CMakeLists.txt b/src/modules/usersq/CMakeLists.txt index 26c270bfb..37b4416ad 100644 --- a/src/modules/usersq/CMakeLists.txt +++ b/src/modules/usersq/CMakeLists.txt @@ -29,6 +29,18 @@ if( LibPWQuality_FOUND ) add_definitions( -DCHECK_PWQUALITY -DHAVE_LIBPWQUALITY ) endif() +find_package( ICU COMPONENTS uc i18n ) +set_package_properties( + ICU PROPERTIES + PURPOSE "Transliteration support for full name to username conversion" +) + +if( ICU_FOUND ) + list( APPEND USER_EXTRA_LIB ICU::uc ICU::i18n ) + include_directories( ${ICU_INCLUDE_DIRS} ) + add_definitions( -DHAVE_ICU ) +endif() + calamares_add_plugin( usersq TYPE viewmodule EXPORT_MACRO PLUGINDLLEXPORT_PRO From 8e07bb00f9b54b123565a891bfcadc806cd66d2a Mon Sep 17 00:00:00 2001 From: Artem Grinev Date: Mon, 2 Nov 2020 03:52:37 +0300 Subject: [PATCH 16/53] [users] Construct icu::UnicodeString from QString's utf16 chars directly --- src/modules/users/Config.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/users/Config.cpp b/src/modules/users/Config.cpp index 186dd0ade..63645764b 100644 --- a/src/modules/users/Config.cpp +++ b/src/modules/users/Config.cpp @@ -300,7 +300,7 @@ transliterate( const QString& input ) return input; } - auto transliterable = icu::UnicodeString( input.toUtf8().data() ); + auto transliterable = icu::UnicodeString( input.utf16() ); transliterator->transliterate( transliterable ); From 4e54a2aefeb10d81ab034e4ff1f1b50eeba2fe27 Mon Sep 17 00:00:00 2001 From: Artem Grinev Date: Mon, 2 Nov 2020 04:01:01 +0300 Subject: [PATCH 17/53] [users] Cleaned error handling a bit --- src/modules/users/Config.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/modules/users/Config.cpp b/src/modules/users/Config.cpp index 63645764b..59912a78b 100644 --- a/src/modules/users/Config.cpp +++ b/src/modules/users/Config.cpp @@ -288,12 +288,12 @@ guessProductName() static QString transliterate( const QString& input ) { - static UErrorCode ue = UErrorCode::U_ZERO_ERROR; + static auto ue = UErrorCode::U_ZERO_ERROR; static auto transliterator = std::unique_ptr< icu::Transliterator >( icu::Transliterator::createInstance( "Any-Latin; Latin-ASCII", UTRANS_FORWARD, ue ) ); - if(ue!=0){ + if( ue != UErrorCode::U_ZERO_ERROR ){ cWarning() << "Can't create transliterator"; //it'll be checked later for non-ASCII characters From c85d1ae1fea9b29cfded7adfa90f1cd2a89b428f Mon Sep 17 00:00:00 2001 From: Artem Grinev Date: Mon, 2 Nov 2020 17:53:05 +0300 Subject: [PATCH 18/53] Explanation why ICU is needed for usersq module --- src/modules/usersq/CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/src/modules/usersq/CMakeLists.txt b/src/modules/usersq/CMakeLists.txt index 37b4416ad..6ef277395 100644 --- a/src/modules/usersq/CMakeLists.txt +++ b/src/modules/usersq/CMakeLists.txt @@ -29,6 +29,7 @@ if( LibPWQuality_FOUND ) add_definitions( -DCHECK_PWQUALITY -DHAVE_LIBPWQUALITY ) endif() +#needed for ${_users}/Config.cpp find_package( ICU COMPONENTS uc i18n ) set_package_properties( ICU PROPERTIES From aa5ef7a6b8df086fc1a298e552752d642cf87ad5 Mon Sep 17 00:00:00 2001 From: Artem Grinev Date: Wed, 4 Nov 2020 03:21:31 +0300 Subject: [PATCH 19/53] [users] New transliterator ID --- src/modules/users/Config.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/modules/users/Config.cpp b/src/modules/users/Config.cpp index 59912a78b..d657a0f2d 100644 --- a/src/modules/users/Config.cpp +++ b/src/modules/users/Config.cpp @@ -26,6 +26,12 @@ #ifdef HAVE_ICU #include #include + +//Did my best choosing compound ID +static const char* TRANSLITERATOR_ID = "Russian-Latin/BGN;" + "Greek-Latin/UNGEGN;" + "Any-Latin;" + "Latin-ASCII"; #endif static const QRegExp USERNAME_RX( "^[a-z_][a-z0-9_-]*[$]?$" ); @@ -290,7 +296,7 @@ transliterate( const QString& input ) { static auto ue = UErrorCode::U_ZERO_ERROR; static auto transliterator = std::unique_ptr< icu::Transliterator >( - icu::Transliterator::createInstance( "Any-Latin; Latin-ASCII", UTRANS_FORWARD, ue ) + icu::Transliterator::createInstance( TRANSLITERATOR_ID, UTRANS_FORWARD, ue ) ); if( ue != UErrorCode::U_ZERO_ERROR ){ From f20d0a7593344fac924827e10c2ac16a947f9707 Mon Sep 17 00:00:00 2001 From: Artem Grinev Date: Wed, 4 Nov 2020 03:24:58 +0300 Subject: [PATCH 20/53] [users] Name cleanup after transliteration --- src/modules/users/Config.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/modules/users/Config.cpp b/src/modules/users/Config.cpp index d657a0f2d..6a2709e9e 100644 --- a/src/modules/users/Config.cpp +++ b/src/modules/users/Config.cpp @@ -372,14 +372,13 @@ Config::setFullName( const QString& name ) emit fullNameChanged( name ); // Build login and hostname, if needed - QString cleanName = CalamaresUtils::removeDiacritics( name ).toLower().simplified(); - + static QRegExp rx( "[^a-zA-Z0-9 ]", Qt::CaseInsensitive ); #ifdef HAVE_ICU - cleanName = transliterate(cleanName); + QString cleanName = transliterate(name); #else - QRegExp rx( "[^a-zA-Z0-9 ]", Qt::CaseInsensitive ); - cleanName.replace( rx, " " ); + QString cleanName = name; #endif + cleanName = CalamaresUtils::removeDiacritics( cleanName ).replace( rx, " " ).toLower().simplified(); QStringList cleanParts = cleanName.split( ' ' ); From 94f7efb89fa06e6ef14bdecea0c855ca145c49c3 Mon Sep 17 00:00:00 2001 From: Artem Grinev Date: Wed, 4 Nov 2020 03:37:25 +0300 Subject: [PATCH 21/53] [users] Remove ' from transliterated string --- src/modules/users/Config.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/modules/users/Config.cpp b/src/modules/users/Config.cpp index 6a2709e9e..e94116bd7 100644 --- a/src/modules/users/Config.cpp +++ b/src/modules/users/Config.cpp @@ -375,6 +375,7 @@ Config::setFullName( const QString& name ) static QRegExp rx( "[^a-zA-Z0-9 ]", Qt::CaseInsensitive ); #ifdef HAVE_ICU QString cleanName = transliterate(name); + cleanName.replace("'", ""); #else QString cleanName = name; #endif From e023da3f3571c4cf80ee4abfbcc8160d421e914b Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 4 Nov 2020 18:30:48 +0100 Subject: [PATCH 22/53] i18n: update Tajik keyboard translations - real ones this time, not my made-up nonsense --- lang/kb_tg.ts | 622 +++++++++++++++++++++++++------------------------- 1 file changed, 311 insertions(+), 311 deletions(-) diff --git a/lang/kb_tg.ts b/lang/kb_tg.ts index fb18f9995..893bed9ae 100644 --- a/lang/kb_tg.ts +++ b/lang/kb_tg.ts @@ -1,205 +1,205 @@ - + - + kb_layouts Afghani kb_layouts - + Афғонӣ Albanian kb_layouts - + Албанӣ Amharic kb_layouts - + Амҳарӣ Arabic kb_layouts - + Арабӣ Arabic (Morocco) kb_layouts - + Арабӣ (Марокаш) Arabic (Syria) kb_layouts - + Арабӣ (Сурия) Armenian kb_layouts - + Арманӣ Azerbaijani kb_layouts - + Озарбойҷонӣ Bambara kb_layouts - + Бамбара Bangla kb_layouts - + Бангла Belarusian kb_layouts - + Белорусӣ Belgian kb_layouts - + Белгиягӣ Bosnian kb_layouts - + Босниягӣ Braille kb_layouts - + Брайл Bulgarian kb_layouts - + Булғорӣ Burmese kb_layouts - + Бирманӣ Chinese kb_layouts - + Хитоӣ Croatian kb_layouts - + Хорватӣ Czech kb_layouts - + Чехӣ Danish kb_layouts - + Даниягӣ Dhivehi kb_layouts - + Дхивеҳӣ Dutch kb_layouts - + Ҳоландӣ Dzongkha kb_layouts - + Дзонгха English (Australian) kb_layouts - + Англисӣ (Австралиягӣ) English (Cameroon) kb_layouts - + Англисӣ (Камерун) English (Ghana) kb_layouts - + Англисӣ (Гана) English (Nigeria) kb_layouts - + Англисӣ (Нигерия) English (South Africa) kb_layouts - + Англисӣ (Африкаи Ҷунубӣ) English (UK) kb_layouts - + Англисӣ (БК) English (US) kb_layouts - + Англисӣ (ИМА) Esperanto kb_layouts - + Эсперанто Estonian kb_layouts - + Эстонӣ Faroese kb_layouts - + Фарерӣ @@ -475,7 +475,7 @@ Russian kb_layouts - + Русӣ @@ -565,13 +565,13 @@ Turkmen kb_layouts - + Туркменӣ Ukrainian kb_layouts - + Украинӣ @@ -583,19 +583,19 @@ Uzbek kb_layouts - + Ӯзбекӣ Vietnamese kb_layouts - + Ветнамӣ Wolof kb_layouts - + Волоф @@ -604,385 +604,385 @@ A4Tech KB-21 kb_models - + A4Tech KB-21 A4Tech KBS-8 kb_models - + A4Tech KBS-8 A4Tech Wireless Desktop RFKB-23 kb_models - + Мизи кории бесими A4Tech RFKB-23 Acer AirKey V kb_models - + Acer AirKey V Acer C300 kb_models - + Acer C300 Acer Ferrari 4000 kb_models - + Acer Ferrari 4000 Acer laptop kb_models - + Лэптопи Acer Advance Scorpius KI kb_models - + Scorpius KI-и пешрафта Apple kb_models - + Apple Apple Aluminium (ANSI) kb_models - + Apple-и Алюминий (ANSI) Apple Aluminium (ISO) kb_models - + Apple-и Алюминий (ISO) Apple Aluminium (JIS) kb_models - + Apple-и Алюминий (JIS) Apple laptop kb_models - + Лэптопи Apple Asus laptop kb_models - + Лэптопи Asus Azona RF2300 wireless Internet kb_models - + Azona RF2300 Интернети бесим BTC 5090 kb_models - + BTC 5090 BTC 5113RF Multimedia kb_models - + BTC 5113RF Мултимедиа BTC 5126T kb_models - + BTC 5126T BTC 6301URF kb_models - + BTC 6301URF BTC 9000 kb_models - + BTC 9000 BTC 9000A kb_models - + BTC 9000A BTC 9001AH kb_models - + BTC 9001AH BTC 9019U kb_models - + BTC 9019U BTC 9116U Mini Wireless Internet and Gaming kb_models - + BTC 9116U Бозиҳо ва Интернети бесим (Хурд) BenQ X-Touch kb_models - + BenQ X-Touch BenQ X-Touch 730 kb_models - + BenQ X-Touch 730 BenQ X-Touch 800 kb_models - + BenQ X-Touch 800 Brother Internet kb_models - + Интернети бародарон Cherry B.UNLIMITED kb_models - + Черри, НОМАҲДУДИ B Cherry Blue Line CyBo@rd kb_models - + Черри, Хати кабуди CyBo@rd Cherry Blue Line CyBo@rd (alt.) kb_models - + Черри, Хати кабуди CyBo@rd. (илов.) Cherry CyBo@rd USB-Hub kb_models - + Черри, CyBo@rd USB-Hub Cherry CyMotion Expert kb_models - + Черри, Коршиноси CyMotion Cherry CyMotion Master Linux kb_models - + Черри, Устои Linux-и CyMotion Cherry CyMotion Master XPress kb_models - + Черри, Устои XPress-и CyMotion Chicony Internet kb_models - + Chicony-и интернетӣ Chicony KB-9885 kb_models - + Chicony KB-9885 Chicony KU-0108 kb_models - + Chicony KU-0108 Chicony KU-0420 kb_models - + Chicony KU-0420 Chromebook kb_models - + Хромбук Classmate PC kb_models - + Classmate PC Compaq Armada laptop kb_models - + Лэптопи Compaq Armada Compaq Easy Access kb_models - + Дастрасии осони Compaq Compaq Internet (13 keys) kb_models - + Compaq-и интернетӣ (13 тугма) Compaq Internet (18 keys) kb_models - + Compaq-и интернетӣ (18 тугма) Compaq Internet (7 keys) kb_models - + Compaq-и интернетӣ (7 тугма) Compaq Presario laptop kb_models - + Лэптопи Compaq Presario Compaq iPaq kb_models - + Compaq iPaq Creative Desktop Wireless 7000 kb_models - + Creative Desktop Wireless 7000 DTK2000 kb_models - + DTK2000 Dell kb_models - + Dell Dell 101-key PC kb_models - + Dell, 101 тугмаи компютерӣ Dell Inspiron 6000/8000 laptop kb_models - + Лэптопи Dell Inspiron 6000/8000 Dell Latitude laptop kb_models - + Лэптопи Dell Latitude Dell Precision M laptop kb_models - + Лэптопи Dell Precision M Dell Precision M65 laptop kb_models - + Лэптопи Dell Precision M65 Dell SK-8125 kb_models - + Dell SK-8125 Dell SK-8135 kb_models - + Dell SK-8135 Dell USB Multimedia kb_models - + Dell, Мултимедиаи USB Dexxa Wireless Desktop kb_models - + Мизи кории бесими Dexxa Diamond 9801/9802 kb_models - + Diamond 9801/9802 Ennyah DKB-1008 kb_models - + Ennyah DKB-1008 Everex STEPnote kb_models - + Everex STEPnote FL90 kb_models - + FL90 @@ -994,37 +994,37 @@ Generic 101-key PC kb_models - Общий 101-ключ + Умумӣ, 101 тугмаи компютерӣ Generic 102-key PC kb_models - Общий 102-ключ + Умумӣ, 102 тугмаи компютерӣ Generic 104-key PC kb_models - Общий 104-ключ + Умумӣ, 104 тугмаи компютерӣ Generic 104-key PC with L-shaped Enter key kb_models - + Умумӣ, 104 тугмаи компютерӣ бо тугмаи Enter дар шакли L Generic 105-key PC kb_models - Общий 105-ключ + Умумӣ, 105 тугмаи компютерӣ Generic 86-key PC kb_models - Общий 86-ключ + Умумӣ, 86 тугмаи компютерӣ @@ -1204,13 +1204,13 @@ Logitech kb_models - + Logitech Logitech Access kb_models - + Logitech Access @@ -1366,25 +1366,25 @@ Memorex MX1998 kb_models - + Memorex MX1998 Memorex MX2500 EZ-Access kb_models - + Memorex MX2500 EZ-Access Memorex MX2750 kb_models - + Memorex MX2750 Microsoft Comfort Curve 2000 kb_models - + Microsoft Comfort Curve 2000 @@ -1462,25 +1462,25 @@ NEC SK-1300 kb_models - + NEC SK-1300 NEC SK-2500 kb_models - + NEC SK-2500 NEC SK-6200 kb_models - + NEC SK-6200 NEC SK-7100 kb_models - + NEC SK-7100 @@ -1492,7 +1492,7 @@ OLPC kb_models - + OLPC @@ -1522,25 +1522,25 @@ SVEN Ergonomic 2500 kb_models - + SVEN Ergonomic 2500 SVEN Slim 303 kb_models - + SVEN Slim 303 Samsung SDM 4500P kb_models - + Samsung SDM 4500P Samsung SDM 4510P kb_models - + Samsung SDM 4510P @@ -1684,61 +1684,61 @@ TypeMatrix EZ-Reach 2020 kb_models - + TypeMatrix EZ-Reach 2020 TypeMatrix EZ-Reach 2030 PS2 kb_models - + TypeMatrix EZ-Reach 2030 PS2 TypeMatrix EZ-Reach 2030 USB kb_models - + TypeMatrix EZ-Reach 2030 USB TypeMatrix EZ-Reach 2030 USB (102/105:EU mode) kb_models - + TypeMatrix EZ-Reach 2030 USB (Реҷаи 102/105:EU) TypeMatrix EZ-Reach 2030 USB (106:JP mode) kb_models - + TypeMatrix EZ-Reach 2030 USB (Реҷаи 106:JP) Unitek KB-1925 kb_models - + Unitek KB-1925 ViewSonic KU-306 Internet kb_models - + ViewSonic KU-306-и интернетӣ Winbook Model XP5 kb_models - + Yahoo! Internet kb_models - + Yahoo! Интернет eMachines m6800 laptop kb_models - + Лэптопи eMachines m6800 @@ -1747,775 +1747,775 @@ Akan kb_variants - + Аконӣ Albanian (Plisi) kb_variants - + Албанӣ (Плисӣ) Albanian (Veqilharxhi) kb_variants - + Албанӣ (Векилхаркшӣ) Arabic (AZERTY) kb_variants - + Арабӣ (AZERTY) Arabic (AZERTY, Eastern Arabic numerals) kb_variants - + Арабӣ (AZERTY, Рақамҳои арабии шаркӣ) Arabic (Algeria) kb_variants - + Арабӣ (Алҷазоир) Arabic (Buckwalter) kb_variants - + Арабӣ (Бакуолтер) Arabic (Eastern Arabic numerals) kb_variants - + Арабӣ (Рақамҳои арабии шаркӣ) Arabic (Macintosh) kb_variants - + Арабӣ (Макинтош) Arabic (OLPC) kb_variants - + Арабӣ (OLPC) Arabic (Pakistan) kb_variants - + Арабӣ (Покистон) Arabic (QWERTY) kb_variants - + Арабӣ (QWERTY) Arabic (QWERTY, Eastern Arabic numerals) kb_variants - + Арабӣ (QWERTY, Рақамҳои арабии шаркӣ) Armenian (alt. eastern) kb_variants - + Арманӣ (илов. шарқӣ) Armenian (alt. phonetic) kb_variants - + Арманӣ (илов. фонетикӣ) Armenian (eastern) kb_variants - + Арманӣ (шарқӣ) Armenian (phonetic) kb_variants - + Арманӣ (фонетикӣ) Armenian (western) kb_variants - + Арманӣ (ғарбӣ) Asturian (Spain, with bottom-dot H and L) kb_variants - + Астурӣ (Испания, бо нуқтаи поёни H ва L) Avatime kb_variants - + Avatime Azerbaijani (Cyrillic) kb_variants - + Озарбойҷонӣ (Кириллӣ) Bangla (India) kb_variants - + Бангла (Ҳиндустон) Bangla (India, Baishakhi Inscript) kb_variants - + Бангла (Ҳиндустон, Инскрипти Байшахӣ) Bangla (India, Baishakhi) kb_variants - + Бангла (Ҳиндустон, Байшахӣ) Bangla (India, Bornona) kb_variants - + Бангла (Ҳиндустон, Борнона) Bangla (India, Gitanjali) kb_variants - + Бангла (Ҳиндустон, Гитанҷалӣ) Bangla (India, Probhat) kb_variants - + Бангла (Ҳиндустон, Пробхат) Bangla (Probhat) kb_variants - + Бангла (Пробхат) Bashkirian kb_variants - + Бошқирдӣ Belarusian (Latin) kb_variants - + Белорусӣ (Лотинӣ) Belarusian (intl.) kb_variants - + Белорусӣ (байналм.) Belarusian (legacy) kb_variants - + Белорусӣ (ворисӣ) Belgian (ISO, alt.) kb_variants - + Белгиягӣ (ISO, илов.) Belgian (Latin-9 only, alt.) kb_variants - + Белгиягӣ (Танҳо лотинии-9, илов.) Belgian (Sun dead keys) kb_variants - + Белгиягӣ (Тугмаҳои хомӯшии Sun) Belgian (Sun dead keys, alt.) kb_variants - + Белгиягӣ (Тугмаҳои хомӯшии Sun, илов.) Belgian (Wang 724 AZERTY) kb_variants - + Белгиягӣ (Ванг 724 AZERTY) Belgian (alt.) kb_variants - + Белгиягӣ (илов.) Belgian (no dead keys) kb_variants - + Белгиягӣ (бе тугмаҳои хомӯшӣ) Berber (Morocco, Tifinagh alt.) kb_variants - + Берберӣ (Марокаш, Тифинагҳӣ, илов.) Berber (Morocco, Tifinagh extended phonetic) kb_variants - + Берберӣ (Марокаш, Тифинагҳӣ, фонетикии васеъшуда) Berber (Morocco, Tifinagh extended) kb_variants - + Берберӣ (Марокаш, Тифинагҳӣ, васеъшуда) Berber (Morocco, Tifinagh phonetic) kb_variants - + Берберӣ (Марокаш, Тифинагҳӣ, фонетикӣ) Berber (Morocco, Tifinagh phonetic, alt.) kb_variants - + Берберӣ (Марокаш, Тифинагҳӣ, фонетикӣ, илов.) Berber (Morocco, Tifinagh) kb_variants - + Берберӣ (Марокаш, Тифинагҳӣ) Bosnian (US) kb_variants - + Босниягӣ (ИМА) Bosnian (US, with Bosnian digraphs) kb_variants - + Босниягӣ (ИМА, бо диграфҳои босниягӣ) Bosnian (with Bosnian digraphs) kb_variants - + Босниягӣ (бо диграфҳои босниягӣ) Bosnian (with guillemets) kb_variants - + Босниягӣ (бо гиллеметҳо) Braille (left-handed inverted thumb) kb_variants - + Брайл (сарангушти чаппаи дасти чап) Braille (left-handed) kb_variants - + Брайл (дасти чап) Braille (right-handed inverted thumb) kb_variants - + Брайл (сарангушти чаппаи дасти рост) Braille (right-handed) kb_variants - + Брайл (дасти рост) Bulgarian (enhanced) kb_variants - + Булғорӣ (такмилёфта) Bulgarian (new phonetic) kb_variants - + Булғорӣ (фонетикии нав) Bulgarian (traditional phonetic) kb_variants - + Булғорӣ (фонетикии анъанавӣ) Burmese Zawgyi kb_variants - + Бирмании завҷӣ Cameroon (AZERTY, intl.) kb_variants - + Камерун (AZERTY, байналм.) Cameroon (Dvorak, intl.) kb_variants - + Камерун (Дворак, байналм.) Cameroon Multilingual (QWERTY, intl.) kb_variants - + Камеруни серзабон (QWERTY, байналм.) Canadian (intl.) kb_variants - + Канадагӣ (байналм.) Canadian (intl., 1st part) kb_variants - + Канадагӣ (байналм. қисми 1) Canadian (intl., 2nd part) kb_variants - + Канадагӣ (байналм. қисми 2) Catalan (Spain, with middle-dot L) kb_variants - + Каталонӣ (Испания, бо нуқтаи миёнаи L) Cherokee kb_variants - + Черокӣ Chuvash kb_variants - + Чувашӣ Chuvash (Latin) kb_variants - + Чувашӣ (Лотинӣ) CloGaelach kb_variants - + CloGaelach Crimean Tatar (Turkish Alt-Q) kb_variants - + Тотории кримӣ (Туркӣ, Alt-Q) Crimean Tatar (Turkish F) kb_variants - + Тотории кримӣ (F-и туркӣ) Crimean Tatar (Turkish Q) kb_variants - + Тотории кримӣ (Q-и туркӣ) Croatian (US) kb_variants - + Хорватӣ (ИМА) Croatian (US, with Croatian digraphs) kb_variants - + Хорватӣ (ИМА, бо диграфҳои хорватӣ) Croatian (with Croatian digraphs) kb_variants - + Хорватӣ (бо диграфҳои хорватӣ) Croatian (with guillemets) kb_variants - + Хорватӣ (бо гиллеметҳо) Czech (QWERTY) kb_variants - + Чехӣ (QWERTY) Czech (QWERTY, Macintosh) kb_variants - + Чехӣ (QWERTY, Макинтош) Czech (QWERTY, extended backslash) kb_variants - + Чехӣ (QWERTY, аломати хати каҷи баръакси васеъшуда) Czech (UCW, only accented letters) kb_variants - + Чехӣ (UCW, танҳо ҳарфҳои вижагӣ) Czech (US, Dvorak, UCW support) kb_variants - + Чехӣ (ИМА, Дворак, дастгирии UCW) Czech (with &lt;|&gt; key) kb_variants - + Чехӣ (бо тугмаи &lt;|&gt;) Danish (Dvorak) kb_variants - + Даниягӣ (Дворак) Danish (Macintosh) kb_variants - + Даниягӣ (Макинтош) Danish (Macintosh, no dead keys) kb_variants - + Даниягӣ (Макинтош, бе тугмаҳои хомӯшӣ) Danish (Windows) kb_variants - + Даниягӣ (Windows) Danish (no dead keys) kb_variants - + Даниягӣ (бе тугмаҳои хомӯшӣ) Default kb_variants - + Стандартӣ Dutch (Macintosh) kb_variants - + Ҳоландӣ (Макинтош) Dutch (Sun dead keys) kb_variants - + Ҳоландӣ (Тугмаҳои хомӯшии Sun) Dutch (standard) kb_variants - + Ҳоландӣ (стандартӣ) English (Canada) kb_variants - + Англисӣ (Канада) English (Colemak) kb_variants - + Англисӣ (Колемак) English (Dvorak) kb_variants - + Англисӣ (Дворак) English (Dvorak, alt. intl.) kb_variants - + Англисӣ (Дворак, илов. байналм.) English (Dvorak, intl., with dead keys) kb_variants - + Англисӣ (Дворак, байналм. бо тугмаҳои хомӯшӣ) English (Dvorak, left-handed) kb_variants - + Англисӣ (Дворак, дасти чап) English (Dvorak, right-handed) kb_variants - + Англисӣ (Дворак, дасти рост) English (Ghana, GILLBT) kb_variants - + Англисӣ (Гана, GILLBT) English (Ghana, multilingual) kb_variants - + Англисӣ (Гана, серзабон) English (India, with rupee) kb_variants - + Англисӣ (Ҳиндустон, бо рупия) English (Macintosh) kb_variants - + Англисӣ (Макинтош) English (Mali, US, Macintosh) kb_variants - + Англисӣ (Малӣ, ИМА, Макинтош) English (Mali, US, intl.) kb_variants - + Англисӣ (Малӣ, ИМА, байналм.) English (Norman) kb_variants - + Англисӣ (Норман) English (UK, Colemak) kb_variants - + Англисӣ (БК, Колемак) English (UK, Dvorak) kb_variants - + Англисӣ (БК, Дворак) English (UK, Dvorak, with UK punctuation) kb_variants - + Англисӣ (БК, Дворак, бо аломатҳои китобатӣ) English (UK, Macintosh) kb_variants - + Англисӣ (БК, Макинтош) English (UK, Macintosh, intl.) kb_variants - + Англисӣ (БК, Макинтош, байналм.) English (UK, extended, Windows) kb_variants - + Англисӣ (БК, васеъшуда, Windows) English (UK, intl., with dead keys) kb_variants - + Англисӣ (БК, байналм., бо тугмаҳои хомӯшӣ) English (US, Symbolic) kb_variants - + Англисӣ (ИМА, Рамзӣ) English (US, alt. intl.) kb_variants - + Англисӣ (ИМА, илов. байналм.) English (US, euro on 5) kb_variants - + Англисӣ (ИМА, евро дар 5) English (US, intl., with dead keys) kb_variants - + Англисӣ (ИМА, байналм., бо тугмаҳои хомӯшӣ) English (Workman) kb_variants - + Англисӣ (Воркман) English (Workman, intl., with dead keys) kb_variants - + Англисӣ (Воркман, байналм., бо тугмаҳои хомӯшӣ) English (classic Dvorak) kb_variants - + Англисӣ (Двораки классикӣ) English (intl., with AltGr dead keys) kb_variants - + Англисӣ (байналм., бо тугмаҳои хомӯшии AltGr) English (programmer Dvorak) kb_variants - + Англисӣ (Двораки барномарезӣ) English (the divide/multiply toggle the layout) kb_variants - + Англисӣ (тарҳбандӣ бо алоҳида/якчанд васлкунак) Esperanto (Brazil, Nativo) kb_variants - + Эсперанто (Бразилия, Нативо) Esperanto (Portugal, Nativo) kb_variants - + Эсперанто (Португалия, Нативо) Esperanto (legacy) kb_variants - + Эсперанто (ворисӣ) Estonian (Dvorak) kb_variants - + Эстонӣ (Дворак) Estonian (US) kb_variants - + Эстонӣ (ИМА) Estonian (no dead keys) kb_variants - + Эстонӣ (бе тугмаҳои хомӯшӣ) Ewe kb_variants - + Ewe Faroese (no dead keys) kb_variants - + Фарерӣ (бе тугмаҳои хомӯшӣ) @@ -3985,127 +3985,127 @@ Russian (Belarus) kb_variants - + Русӣ (Беларус) Russian (Czech, phonetic) kb_variants - + Русӣ (Чехӣ, фонетикӣ) Russian (DOS) kb_variants - + Русӣ (DOS) Russian (Georgia) kb_variants - + Русӣ (Гурҷӣ) Russian (Germany, phonetic) kb_variants - + Русӣ (Немисӣ, фонетикӣ) Russian (Kazakhstan, with Kazakh) kb_variants - + Русӣ (Қазоқистон, бо қазоқӣ) Russian (Macintosh) kb_variants - + Русӣ (Макинтош) Russian (Poland, phonetic Dvorak) kb_variants - + Русӣ (Полша, Дворакии фонетикӣ) Russian (Sweden, phonetic) kb_variants - + Русӣ (Шведӣ, фонетикӣ) Russian (Sweden, phonetic, no dead keys) kb_variants - + Русӣ (Шведӣ, фонетикӣ, бе тугмаҳои хомӯшӣ) Russian (US, phonetic) kb_variants - + Русӣ (ИМА, фонетикӣ) Russian (Ukraine, standard RSTU) kb_variants - + Русӣ (Украина, RSTU-и стандартӣ) Russian (legacy) kb_variants - + Русӣ (ворисӣ) Russian (phonetic) kb_variants - + Русӣ (фонетикӣ) Russian (phonetic, AZERTY) kb_variants - + Русӣ (фонетикӣ, AZERTY) Russian (phonetic, Dvorak) kb_variants - + Русӣ (фонетикӣ, Дворак) Russian (phonetic, French) kb_variants - + Русӣ (фонетикӣ, Франсузӣ) Russian (phonetic, Windows) kb_variants - + Русӣ (фонетикӣ, Windows) Russian (phonetic, YAZHERTY) kb_variants - + Русӣ (фонетикӣ, YAZHERTY) Russian (typewriter) kb_variants - + Русӣ (мошини хатнависӣ) Russian (typewriter, legacy) kb_variants - + Русӣ (мошини хатнависӣ, ворисӣ) @@ -4117,7 +4117,7 @@ Samogitian kb_variants - + @@ -4369,7 +4369,7 @@ Tajik (legacy) kb_variants - Тоҷикӣ (красіво) + Тоҷикӣ (ворисӣ) @@ -4379,37 +4379,37 @@ - Tamil (Sri Lanka, TamilNet '99) + Tamil (Sri Lanka, TamilNet '99) kb_variants - Tamil (Sri Lanka, TamilNet '99, TAB encoding) + Tamil (Sri Lanka, TamilNet '99, TAB encoding) kb_variants - Tamil (TamilNet '99 with Tamil numerals) + Tamil (TamilNet '99 with Tamil numerals) kb_variants - Tamil (TamilNet '99) + Tamil (TamilNet '99) kb_variants - Tamil (TamilNet '99, TAB encoding) + Tamil (TamilNet '99, TAB encoding) kb_variants - Tamil (TamilNet '99, TSCII encoding) + Tamil (TamilNet '99, TSCII encoding) kb_variants @@ -4417,7 +4417,7 @@ Tatar kb_variants - + Тоторӣ @@ -4495,49 +4495,49 @@ Turkmen (Alt-Q) kb_variants - + Туркменӣ (Alt-Q) Udmurt kb_variants - + Удмуртӣ Ukrainian (Windows) kb_variants - + Украинӣ (Windows) Ukrainian (homophonic) kb_variants - + Украинӣ (гомофонӣ) Ukrainian (legacy) kb_variants - + Украинӣ (ворисӣ) Ukrainian (phonetic) kb_variants - + Украинӣ (фонетикӣ) Ukrainian (standard RSTU) kb_variants - + Украинӣ (RSTU-и стандартӣ) Ukrainian (typewriter) kb_variants - + Украинӣ (мошини хатнависӣ) @@ -4573,49 +4573,49 @@ Uyghur kb_variants - + Ӯйғурӣ Uzbek (Afghanistan) kb_variants - + Ӯзбекӣ (Афғонистон) Uzbek (Afghanistan, OLPC) kb_variants - + Ӯзбекӣ (Афғонистон, OLPC) Uzbek (Latin) kb_variants - + Ӯзбекӣ (Лотинӣ) Vietnamese (French) kb_variants - + Ветнамӣ (Франсузӣ) Vietnamese (US) kb_variants - + Ветнамӣ (ИМА) Yakut kb_variants - + Ёқутӣ Yoruba kb_variants - + Йоруба From 59255c7a577c55a952c4a97517d4c3c1ab334b59 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Thu, 5 Nov 2020 00:00:29 +0100 Subject: [PATCH 23/53] Changes: apply coding style --- src/libcalamares/geoip/test_geoip.cpp | 2 +- src/libcalamares/modulesystem/Module.cpp | 3 ++- src/libcalamares/utils/Retranslator.cpp | 4 ++-- src/modules/partition/core/PartitionActions.cpp | 2 +- src/modules/partition/tests/CreateLayoutsTests.cpp | 13 +++++++------ src/modules/users/TestGroupInformation.cpp | 6 +++--- 6 files changed, 16 insertions(+), 14 deletions(-) diff --git a/src/libcalamares/geoip/test_geoip.cpp b/src/libcalamares/geoip/test_geoip.cpp index fd50cecff..0e14dcf91 100644 --- a/src/libcalamares/geoip/test_geoip.cpp +++ b/src/libcalamares/geoip/test_geoip.cpp @@ -37,7 +37,7 @@ main( int argc, char** argv ) QString format( argv[ 1 ] ); QString selector = argc == 3 ? QString( argv[ 2 ] ) : QString(); - Logger::setupLogLevel(Logger::LOGVERBOSE); + Logger::setupLogLevel( Logger::LOGVERBOSE ); cDebug() << "Doing GeoIP interpretation with format=" << format << "selector=" << selector; Interface* handler = nullptr; diff --git a/src/libcalamares/modulesystem/Module.cpp b/src/libcalamares/modulesystem/Module.cpp index 94888f240..ff0b20f78 100644 --- a/src/libcalamares/modulesystem/Module.cpp +++ b/src/libcalamares/modulesystem/Module.cpp @@ -86,7 +86,8 @@ moduleConfigurationCandidates( bool assumeBuildDir, const QString& moduleName, c return paths; } -void Module::loadConfigurationFile( const QString& configFileName ) //throws YAML::Exception +void +Module::loadConfigurationFile( const QString& configFileName ) //throws YAML::Exception { QStringList configCandidates = moduleConfigurationCandidates( Settings::instance()->debugMode(), name(), configFileName ); diff --git a/src/libcalamares/utils/Retranslator.cpp b/src/libcalamares/utils/Retranslator.cpp index 7781ecf51..41d5966ab 100644 --- a/src/libcalamares/utils/Retranslator.cpp +++ b/src/libcalamares/utils/Retranslator.cpp @@ -195,7 +195,7 @@ installTranslator( const QLocale& locale, const QString& brandingTranslationsPre loadSingletonTranslator( TZLoader( locale ), s_tztranslator ); loadSingletonTranslator( CalamaresLoader( locale ), s_translator ); - s_translatorLocaleName = CalamaresLoader::mungeLocaleName(locale); + s_translatorLocaleName = CalamaresLoader::mungeLocaleName( locale ); } @@ -206,7 +206,7 @@ translatorLocaleName() } bool -loadTranslator( const QLocale& locale, const QString& prefix, QTranslator *translator ) +loadTranslator( const QLocale& locale, const QString& prefix, QTranslator* translator ) { return ::tryLoad( translator, prefix, locale.name() ); } diff --git a/src/modules/partition/core/PartitionActions.cpp b/src/modules/partition/core/PartitionActions.cpp index 5d92d9b92..dc3b0b572 100644 --- a/src/modules/partition/core/PartitionActions.cpp +++ b/src/modules/partition/core/PartitionActions.cpp @@ -196,7 +196,7 @@ doAutopartition( PartitionCoreModule* core, Device* dev, Choices::AutoPartitionO KPM_PARTITION_FLAG( None ) ); } PartitionInfo::setFormat( swapPartition, true ); - if ( gs->contains( "swapPartitionName" )) + if ( gs->contains( "swapPartitionName" ) ) { swapPartition->setLabel( gs->value( "swapPartitionName" ).toString() ); } diff --git a/src/modules/partition/tests/CreateLayoutsTests.cpp b/src/modules/partition/tests/CreateLayoutsTests.cpp index 04a06b2b3..216bfc209 100644 --- a/src/modules/partition/tests/CreateLayoutsTests.cpp +++ b/src/modules/partition/tests/CreateLayoutsTests.cpp @@ -64,7 +64,8 @@ CreateLayoutsTests::testFixedSizePartition() QFAIL( qPrintable( "Unable to create / partition" ) ); } - partitions = layout.createPartitions( static_cast< Device* >( &dev ), 0, dev.totalLogical(), nullptr, nullptr, role ); + partitions + = layout.createPartitions( static_cast< Device* >( &dev ), 0, dev.totalLogical(), nullptr, nullptr, role ); QCOMPARE( partitions.count(), 1 ); @@ -84,7 +85,8 @@ CreateLayoutsTests::testPercentSizePartition() QFAIL( qPrintable( "Unable to create / partition" ) ); } - partitions = layout.createPartitions( static_cast< Device* >( &dev ), 0, dev.totalLogical(), nullptr, nullptr, role ); + partitions + = layout.createPartitions( static_cast< Device* >( &dev ), 0, dev.totalLogical(), nullptr, nullptr, role ); QCOMPARE( partitions.count(), 1 ); @@ -114,7 +116,8 @@ CreateLayoutsTests::testMixedSizePartition() QFAIL( qPrintable( "Unable to create /bkup partition" ) ); } - partitions = layout.createPartitions( static_cast< Device* >( &dev ), 0, dev.totalLogical(), nullptr, nullptr, role ); + partitions + = layout.createPartitions( static_cast< Device* >( &dev ), 0, dev.totalLogical(), nullptr, nullptr, role ); QCOMPARE( partitions.count(), 3 ); @@ -155,6 +158,4 @@ TestDevice::TestDevice( const QString& name, const qint64 logicalSectorSize, con } #endif -TestDevice::~TestDevice() -{ -} +TestDevice::~TestDevice() {} diff --git a/src/modules/users/TestGroupInformation.cpp b/src/modules/users/TestGroupInformation.cpp index dd4bfe78f..9fc1e1c35 100644 --- a/src/modules/users/TestGroupInformation.cpp +++ b/src/modules/users/TestGroupInformation.cpp @@ -73,7 +73,8 @@ GroupTests::testReadGroup() } } -void GroupTests::testCreateGroup() +void +GroupTests::testCreateGroup() { // BUILD_AS_TEST is the source-directory path QFile fi( QString( "%1/tests/5-issue-1523.conf" ).arg( BUILD_AS_TEST ) ); @@ -93,12 +94,11 @@ void GroupTests::testCreateGroup() Calamares::JobQueue::instance()->globalStorage()->insert( "rootMountPoint", "/" ); - SetupGroupsJob j(&c); + SetupGroupsJob j( &c ); QVERIFY( !j.exec() ); // running as regular user this should fail } - QTEST_GUILESS_MAIN( GroupTests ) #include "utils/moc-warnings.h" From 83b2b9538184d3299cbd13015e24304beed15a8e Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Thu, 5 Nov 2020 00:09:23 +0100 Subject: [PATCH 24/53] [libcalamares] Reduce object churn - we don't need to allocate a new translator each time the language changes --- src/libcalamares/utils/Retranslator.cpp | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/libcalamares/utils/Retranslator.cpp b/src/libcalamares/utils/Retranslator.cpp index 41d5966ab..46bafab85 100644 --- a/src/libcalamares/utils/Retranslator.cpp +++ b/src/libcalamares/utils/Retranslator.cpp @@ -168,17 +168,17 @@ TZLoader::tryLoad( QTranslator* translator ) static void loadSingletonTranslator( TranslationLoader&& loader, QTranslator*& translator_p ) { - QTranslator* translator = new QTranslator(); - loader.tryLoad( translator ); - - if ( translator_p ) + if ( !translator_p ) { - QCoreApplication::removeTranslator( translator_p ); - delete translator_p; + QTranslator* translator = new QTranslator(); + loader.tryLoad( translator ); + QCoreApplication::installTranslator( translator ); + translator_p = translator; + } + else + { + loader.tryLoad( translator_p ); } - - QCoreApplication::installTranslator( translator ); - translator_p = translator; } namespace CalamaresUtils From e5b7e66ee94b065f513c71b75e47d85b2179ee5b Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Thu, 5 Nov 2020 00:33:45 +0100 Subject: [PATCH 25/53] [locale] Filter zones combo always The drop-down of zones was initially unfiltered, so you could start in Europe/Amsterdam and the zones drop-down would also show Australian zones; picking Perth would have weird effects, since Europe/Perth doesn't exist and so you'd end up in New York instead. - set the filtering region immediately, rather than only when the region changes. --- src/modules/locale/LocalePage.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/modules/locale/LocalePage.cpp b/src/modules/locale/LocalePage.cpp index 7a6ed8b15..e296b790b 100644 --- a/src/modules/locale/LocalePage.cpp +++ b/src/modules/locale/LocalePage.cpp @@ -91,10 +91,16 @@ LocalePage::LocalePage( Config* config, QWidget* parent ) // Set up the location before connecting signals, to avoid a signal // storm as various parts interact. - m_regionCombo->setModel( m_config->regionModel() ); - m_zoneCombo->setModel( m_config->regionalZonesModel() ); - locationChanged( m_config->currentLocation() ); // doesn't inform TZ widget - m_tzWidget->setCurrentLocation( m_config->currentLocation() ); + { + auto* regions = m_config->regionModel(); + auto* zones = m_config->regionalZonesModel(); + auto* location = m_config->currentLocation(); + zones->setRegion( location->region() ); + m_regionCombo->setModel( regions ); + m_zoneCombo->setModel( zones ); + m_tzWidget->setCurrentLocation( location ); + locationChanged( location ); // doesn't inform TZ widget + } connect( config, &Config::currentLCStatusChanged, m_formatsLabel, &QLabel::setText ); connect( config, &Config::currentLanguageStatusChanged, m_localeLabel, &QLabel::setText ); From afb4e00f92953a140e55c5eb5e76ebbea84e2f59 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Fri, 6 Nov 2020 01:10:27 +0100 Subject: [PATCH 26/53] [keyboard] Pre-select pc105 --- src/modules/keyboard/KeyboardLayoutModel.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/modules/keyboard/KeyboardLayoutModel.cpp b/src/modules/keyboard/KeyboardLayoutModel.cpp index abac1cdc2..8b5906699 100644 --- a/src/modules/keyboard/KeyboardLayoutModel.cpp +++ b/src/modules/keyboard/KeyboardLayoutModel.cpp @@ -137,6 +137,7 @@ KeyboardModelsModel::KeyboardModelsModel( QObject* parent ) } cDebug() << "Loaded" << m_list.count() << "keyboard models"; + setCurrentIndex(); // If pc105 was seen, select it now } From 822e30c89486731c262108bcc07d9923587d902d Mon Sep 17 00:00:00 2001 From: Calamares CI Date: Fri, 6 Nov 2020 01:14:28 +0100 Subject: [PATCH 27/53] i18n: [calamares] Automatic merge of Transifex translations --- lang/calamares_bn.ts | 6 +++--- lang/calamares_es.ts | 6 +++--- lang/calamares_es_MX.ts | 18 +++++++++--------- lang/calamares_hr.ts | 4 ++-- lang/calamares_nl.ts | 2 +- lang/calamares_pt_BR.ts | 2 +- lang/calamares_sk.ts | 4 ++-- lang/calamares_te.ts | 4 ++-- 8 files changed, 23 insertions(+), 23 deletions(-) diff --git a/lang/calamares_bn.ts b/lang/calamares_bn.ts index 6887bdf28..06b696140 100644 --- a/lang/calamares_bn.ts +++ b/lang/calamares_bn.ts @@ -3337,7 +3337,7 @@ Output: Set password for user %1 - ব্যবহারকারীর জন্য গুপ্ত-সংকেত নির্ধারণ করুন % 1 + ব্যবহারকারীর জন্য গুপ্ত-সংকেত নির্ধারণ করুন %1 @@ -3352,7 +3352,7 @@ Output: rootMountPoint is %1 - রুটমাউন্টপয়েন্টটি % 1 + রুটমাউন্টপয়েন্টটি %1 @@ -3367,7 +3367,7 @@ Output: Cannot set password for user %1. - % 1 ব্যবহারকারীর জন্য পাসওয়ার্ড নির্ধারণ করা যাচ্ছে না। + %1 ব্যবহারকারীর জন্য পাসওয়ার্ড নির্ধারণ করা যাচ্ছে না। diff --git a/lang/calamares_es.ts b/lang/calamares_es.ts index c579cd752..b4104670d 100644 --- a/lang/calamares_es.ts +++ b/lang/calamares_es.ts @@ -162,12 +162,12 @@ Para configurar el arranque desde un entorno BIOS, este instalador debe instalar Run command '%1' in target system. - Ejecutar el comando '% 1' en el sistema de destino. + Ejecutar el comando '%1' en el sistema de destino. Run command '%1'. - Ejecutar el comando '% 1'. + Ejecutar el comando '%1'. @@ -1120,7 +1120,7 @@ Saldrá del instalador y se perderán todos los cambios. This device has a <strong>%1</strong> partition table. - Este dispositivo tiene un <strong>% 1 </ strong> tabla de particiones. + Este dispositivo tiene un <strong>%1</strong> tabla de particiones. diff --git a/lang/calamares_es_MX.ts b/lang/calamares_es_MX.ts index 00c1c2188..9e9e17b94 100644 --- a/lang/calamares_es_MX.ts +++ b/lang/calamares_es_MX.ts @@ -1080,17 +1080,17 @@ El instalador terminará y se perderán todos los cambios. Deactivate volume group named %1. - Desactivar el grupo de volúmenes llamado%1. + Desactivar el grupo de volúmenes llamado %1. Deactivate volume group named <strong>%1</strong>. - Desactivar el grupo de volúmenes llamado<strong>% 1</strong>. + Desactivar el grupo de volúmenes llamado<strong>%1</strong>. The installer failed to deactivate a volume group named %1. - El instalador no pudo desactivar un grupo de volúmenes llamado%1. + El instalador no pudo desactivar un grupo de volúmenes llamado %1. @@ -1330,7 +1330,7 @@ El instalador terminará y se perderán todos los cambios. <h1>All done.</h1><br/>%1 has been set up on your computer.<br/>You may now start using your new system. - <h1>Todo listo.</h1><br/>% 1 se ha configurado en su computadora. <br/>Ahora puede comenzar a usar su nuevo sistema. + <h1>Todo listo.</h1><br/>%1 se ha configurado en su computadora. <br/>Ahora puede comenzar a usar su nuevo sistema. @@ -2198,7 +2198,7 @@ El instalador terminará y se perderán todos los cambios. Setting %1 is not of integer type - Ajuste de % 1 no es de tipo entero + Ajuste de %1 no es de tipo entero @@ -3260,7 +3260,7 @@ Salida Set flags on partition %1. - Establecer indicadores en la partición% 1. + Establecer indicadores en la partición %1. @@ -3335,7 +3335,7 @@ Salida The installer failed to set flags on partition %1. - El instalador no pudo establecer indicadores en la partición% 1. + El instalador no pudo establecer indicadores en la partición %1. @@ -3530,12 +3530,12 @@ Salida Could not configure machine feedback correctly, script error %1. - No se pudo configurar correctamente la retroalimentación de la máquina, error de script% 1. + No se pudo configurar correctamente la retroalimentación de la máquina, error de script %1. Could not configure machine feedback correctly, Calamares error %1. - No se pudo configurar la retroalimentación de la máquina correctamente, Calamares error% 1. + No se pudo configurar la retroalimentación de la máquina correctamente, Calamares error %1. diff --git a/lang/calamares_hr.ts b/lang/calamares_hr.ts index 256de9da6..eae13403d 100644 --- a/lang/calamares_hr.ts +++ b/lang/calamares_hr.ts @@ -3067,12 +3067,12 @@ Postavljanje se može nastaviti, ali neke će značajke možda biti onemogućene The filesystem %1 could not be found in this system, and cannot be resized. - Datotečni sustav % 1 nije moguće pronaći na ovom sustavu i ne može mu se promijeniti veličina. + Datotečni sustav %1 nije moguće pronaći na ovom sustavu i ne može mu se promijeniti veličina. The device %1 could not be found in this system, and cannot be resized. - Uređaj % 1 nije moguće pronaći na ovom sustavu i ne može mu se promijeniti veličina. + Uređaj %1 nije moguće pronaći na ovom sustavu i ne može mu se promijeniti veličina. diff --git a/lang/calamares_nl.ts b/lang/calamares_nl.ts index f9276e02e..370ddf890 100644 --- a/lang/calamares_nl.ts +++ b/lang/calamares_nl.ts @@ -3012,7 +3012,7 @@ Uitvoer: <p>This computer does not satisfy the minimum requirements for installing %1.<br/> Installation cannot continue.</p> - Deze computer voldoet niet aan de minimale vereisten voor het installeren van % 1. + Deze computer voldoet niet aan de minimale vereisten voor het installeren van %1. De installatie kan niet doorgaan. diff --git a/lang/calamares_pt_BR.ts b/lang/calamares_pt_BR.ts index 9897c6c1a..438a0a47e 100644 --- a/lang/calamares_pt_BR.ts +++ b/lang/calamares_pt_BR.ts @@ -2015,7 +2015,7 @@ O instalador será fechado e todas as alterações serão perdidas. Memory allocation error when setting '%1' - Erro de alocação de memória ao definir '% 1' + Erro de alocação de memória ao definir '%1' diff --git a/lang/calamares_sk.ts b/lang/calamares_sk.ts index eaef4dad4..ca894a8c4 100644 --- a/lang/calamares_sk.ts +++ b/lang/calamares_sk.ts @@ -2127,7 +2127,7 @@ Inštalátor sa ukončí a všetky zmeny budú stratené. The password contains more than %1 same characters consecutively - Heslo obsahuje viac ako% 1 rovnakých znakov za sebou + Heslo obsahuje viac ako %1 rovnakých znakov za sebou @@ -2137,7 +2137,7 @@ Inštalátor sa ukončí a všetky zmeny budú stratené. The password contains more than %1 characters of the same class consecutively - Heslo obsahuje postupne viac ako% 1 znakov toho istého typu + Heslo obsahuje postupne viac ako %1 znakov toho istého typu diff --git a/lang/calamares_te.ts b/lang/calamares_te.ts index 4786aafd0..3201f80b6 100644 --- a/lang/calamares_te.ts +++ b/lang/calamares_te.ts @@ -25,7 +25,7 @@ automatic ఉంటుంది, మీరు మాన్యువల్ వి Master Boot Record of %1 - % 1 యొక్క మాస్టర్ బూట్ రికార్డ్ + %1 యొక్క మాస్టర్ బూట్ రికార్డ్ @@ -134,7 +134,7 @@ automatic ఉంటుంది, మీరు మాన్యువల్ వి Job failed (%1) - జాబ్ విఫలమైంది (% 1) + జాబ్ విఫలమైంది (%1) From 6e9ce7194f47abd8c27cb61cdad5a0b828ea174d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl=20PORTAY?= Date: Fri, 6 Nov 2020 05:56:29 -0500 Subject: [PATCH 28/53] [mount] Ignore unformatted filesystems only Mount guesses the filesystem if it is unset or if it is set to auto, thanks to blkid. That is the case for the bind mountpoints like /dev or /run/udev in mount.conf. See `mount(8)` for more details. --- src/modules/mount/main.py | 2 +- src/modules/mount/mount.conf | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/modules/mount/main.py b/src/modules/mount/main.py index 71599a6de..1313fca49 100644 --- a/src/modules/mount/main.py +++ b/src/modules/mount/main.py @@ -56,7 +56,7 @@ def mount_partition(root_mount_point, partition, partitions): raise fstype = partition.get("fs", "").lower() - if not fstype or fstype == "unformatted": + if fstype == "unformatted": return if fstype == "fat16" or fstype == "fat32": diff --git a/src/modules/mount/mount.conf b/src/modules/mount/mount.conf index 1e70465c2..3a117d32c 100644 --- a/src/modules/mount/mount.conf +++ b/src/modules/mount/mount.conf @@ -12,10 +12,13 @@ # Extra filesystems to mount. The key's value is a list of entries; each # entry has four keys: # - device The device node to mount -# - fs The filesystem type to use +# - fs (optional) The filesystem type to use # - mountPoint Where to mount the filesystem # - options (optional) Extra options to pass to mount(8) # +# The device is not mounted if the mountPoint is unset or if the fs is +# set to unformatted. +# extraMounts: - device: proc fs: proc From 6f41949bba9db4d0e48bba6a2aa3be341e8289c8 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Fri, 6 Nov 2020 14:38:12 +0100 Subject: [PATCH 29/53] [users] Log when sudo is skipped --- src/modules/users/MiscJobs.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/modules/users/MiscJobs.cpp b/src/modules/users/MiscJobs.cpp index a62ada6d7..c1c1d5d25 100644 --- a/src/modules/users/MiscJobs.cpp +++ b/src/modules/users/MiscJobs.cpp @@ -38,6 +38,7 @@ SetupSudoJob::exec() { if ( m_sudoGroup.isEmpty() ) { + cDebug() << "Skipping sudo 10-installer because the sudoGroup is empty."; return Calamares::JobResult::ok(); } From 8e53b83f9f156f0d427e5672f1ad0c38607799c2 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Fri, 6 Nov 2020 22:27:34 +0100 Subject: [PATCH 30/53] [users] Test for setting / resetting sudo settings --- src/modules/users/TestGroupInformation.cpp | 43 ++++++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/src/modules/users/TestGroupInformation.cpp b/src/modules/users/TestGroupInformation.cpp index 9fc1e1c35..9efb6f72f 100644 --- a/src/modules/users/TestGroupInformation.cpp +++ b/src/modules/users/TestGroupInformation.cpp @@ -34,6 +34,8 @@ private Q_SLOTS: void testReadGroup(); void testCreateGroup(); + + void testSudoGroup(); }; GroupTests::GroupTests() {} @@ -98,6 +100,47 @@ GroupTests::testCreateGroup() QVERIFY( !j.exec() ); // running as regular user this should fail } +void GroupTests::testSudoGroup() +{ + // Test programmatic changes + { + Config c; + QSignalSpy spy(&c, &Config::sudoersGroupChanged); + QCOMPARE( c.sudoersGroup(), QString() ); + c.setSudoersGroup( QStringLiteral( "wheel" ) ); + QCOMPARE( c.sudoersGroup(), QStringLiteral( "wheel" ) ); + QCOMPARE( spy.count(), 1); // Changed to wheel + // Do it again, no change + c.setSudoersGroup( QStringLiteral( "wheel" ) ); + QCOMPARE( c.sudoersGroup(), QStringLiteral( "wheel" ) ); + QCOMPARE( spy.count(), 1); + c.setSudoersGroup( QStringLiteral( "roue" ) ); + QCOMPARE( c.sudoersGroup(), QStringLiteral( "roue" ) ); + QCOMPARE( spy.count(), 2); + } + + + // Test config loading + { + Config c; + QSignalSpy spy(&c, &Config::sudoersGroupChanged); + QCOMPARE( c.sudoersGroup(), QString() ); + + QVariantMap m; + c.setConfigurationMap( m ); + QCOMPARE( c.sudoersGroup(), QString() ); + QCOMPARE( spy.count(), 0); // Unchanged + + const auto key = QStringLiteral( "sudoersGroup" ); + const auto v0 = QStringLiteral( "wheel" ); + const auto v1 = QStringLiteral( "roue" ); + m.insert( key, v0 ); + c.setConfigurationMap( m ); + QCOMPARE( c.sudoersGroup(), v0 ); + QCOMPARE( spy.count(), 1); + } +} + QTEST_GUILESS_MAIN( GroupTests ) From 43e271dfec6fc11fdd52b0c5de97f17ddbe98070 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Fri, 6 Nov 2020 22:27:46 +0100 Subject: [PATCH 31/53] [users] Missing negation --- src/modules/users/Config.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/users/Config.cpp b/src/modules/users/Config.cpp index 0e70cc215..77f52b466 100644 --- a/src/modules/users/Config.cpp +++ b/src/modules/users/Config.cpp @@ -815,7 +815,7 @@ Config::createJobs() const Calamares::Job* j; - if ( m_sudoersGroup.isEmpty() ) + if ( !m_sudoersGroup.isEmpty() ) { j = new SetupSudoJob( m_sudoersGroup ); jobs.append( Calamares::job_ptr( j ) ); From 2a9bbf1dd5f7f0aedf9af4fe91b7036a81a0675f Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Mon, 9 Nov 2020 11:38:38 +0100 Subject: [PATCH 32/53] [users] Add test for jobs-creation - This tries to avoid the now-fixed situation where a sudoersGroup job is not created at all (because of a logic error). - While here, coding style --- src/modules/users/TestGroupInformation.cpp | 47 ++++++++++++++++++---- 1 file changed, 39 insertions(+), 8 deletions(-) diff --git a/src/modules/users/TestGroupInformation.cpp b/src/modules/users/TestGroupInformation.cpp index 9efb6f72f..21b8d47ce 100644 --- a/src/modules/users/TestGroupInformation.cpp +++ b/src/modules/users/TestGroupInformation.cpp @@ -36,6 +36,7 @@ private Q_SLOTS: void testCreateGroup(); void testSudoGroup(); + void testJobCreation(); }; GroupTests::GroupTests() {} @@ -100,36 +101,37 @@ GroupTests::testCreateGroup() QVERIFY( !j.exec() ); // running as regular user this should fail } -void GroupTests::testSudoGroup() +void +GroupTests::testSudoGroup() { // Test programmatic changes { Config c; - QSignalSpy spy(&c, &Config::sudoersGroupChanged); + QSignalSpy spy( &c, &Config::sudoersGroupChanged ); QCOMPARE( c.sudoersGroup(), QString() ); c.setSudoersGroup( QStringLiteral( "wheel" ) ); QCOMPARE( c.sudoersGroup(), QStringLiteral( "wheel" ) ); - QCOMPARE( spy.count(), 1); // Changed to wheel + QCOMPARE( spy.count(), 1 ); // Changed to wheel // Do it again, no change c.setSudoersGroup( QStringLiteral( "wheel" ) ); QCOMPARE( c.sudoersGroup(), QStringLiteral( "wheel" ) ); - QCOMPARE( spy.count(), 1); + QCOMPARE( spy.count(), 1 ); c.setSudoersGroup( QStringLiteral( "roue" ) ); QCOMPARE( c.sudoersGroup(), QStringLiteral( "roue" ) ); - QCOMPARE( spy.count(), 2); + QCOMPARE( spy.count(), 2 ); } // Test config loading { Config c; - QSignalSpy spy(&c, &Config::sudoersGroupChanged); + QSignalSpy spy( &c, &Config::sudoersGroupChanged ); QCOMPARE( c.sudoersGroup(), QString() ); QVariantMap m; c.setConfigurationMap( m ); QCOMPARE( c.sudoersGroup(), QString() ); - QCOMPARE( spy.count(), 0); // Unchanged + QCOMPARE( spy.count(), 0 ); // Unchanged const auto key = QStringLiteral( "sudoersGroup" ); const auto v0 = QStringLiteral( "wheel" ); @@ -137,10 +139,39 @@ void GroupTests::testSudoGroup() m.insert( key, v0 ); c.setConfigurationMap( m ); QCOMPARE( c.sudoersGroup(), v0 ); - QCOMPARE( spy.count(), 1); + QCOMPARE( spy.count(), 1 ); } } +/** @brief Are all the expected jobs (and no others) created? + * + * - A sudo job is created only when the sudoers group is set; + * - Groups job + * - User job + * - Password job + * - Root password job + * - Hostname job are always created. + */ +void +GroupTests::testJobCreation() +{ + const int expectedJobs = 5; + Config c; + QVERIFY( !c.isReady() ); + + // Needs some setup + c.setFullName( QStringLiteral( "Goodluck Jonathan" ) ); + c.setLoginName( QStringLiteral( "goodj" ) ); + QVERIFY( c.isReady() ); + + QCOMPARE( c.sudoersGroup(), QString() ); + QCOMPARE( c.createJobs().count(), expectedJobs ); + + c.setSudoersGroup( QStringLiteral( "wheel" ) ); + QCOMPARE( c.sudoersGroup(), QString( "wheel" ) ); + QCOMPARE( c.createJobs().count(), expectedJobs + 1 ); +} + QTEST_GUILESS_MAIN( GroupTests ) From 225a5d31c21be382772e72854718cc2f61c2635b Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Mon, 9 Nov 2020 11:39:38 +0100 Subject: [PATCH 33/53] Changes: pre-release housekeeping --- CHANGES | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index 564c5fd0c..1083f4ad2 100644 --- a/CHANGES +++ b/CHANGES @@ -7,7 +7,7 @@ contributors are listed. Note that Calamares does not have a historical changelog -- this log starts with version 3.2.0. The release notes on the website will have to do for older versions. -# 3.2.33 (2020-11-03) # +# 3.2.33 (2020-11-09) # This release contains contributions from (alphabetically by first name): - Anke Boersma From d93090de4416a934e0671dbca25953fc8f33537f Mon Sep 17 00:00:00 2001 From: Calamares CI Date: Mon, 9 Nov 2020 12:27:04 +0100 Subject: [PATCH 34/53] i18n: [calamares] Automatic merge of Transifex translations --- lang/calamares_de.ts | 8 ++++---- lang/calamares_sk.ts | 20 +++++++++++--------- 2 files changed, 15 insertions(+), 13 deletions(-) diff --git a/lang/calamares_de.ts b/lang/calamares_de.ts index 6a972aca8..8e8e458c1 100644 --- a/lang/calamares_de.ts +++ b/lang/calamares_de.ts @@ -619,17 +619,17 @@ Dies wird das Installationsprogramm beenden und alle Änderungen gehen verloren. This storage device already has an operating system on it, but the partition table <strong>%1</strong> is different from the needed <strong>%2</strong>.<br/> - + Auf diesem Speichergerät befindet sich bereits ein Betriebssystem, aber die Partitionstabelle <strong>%1</strong> unterscheidet sich von den erforderlichen <strong>%2</strong><br/> This storage device has one of its partitions <strong>mounted</strong>. - + Bei diesem Speichergerät ist eine seiner Partitionen <strong>eingehängt</strong>. This storage device is a part of an <strong>inactive RAID</strong> device. - + Dieses Speichergerät ist ein Teil eines <strong>inaktiven RAID</strong>-Geräts. @@ -2868,7 +2868,7 @@ Ausgabe: Directory not found - + Verzeichnis nicht gefunden diff --git a/lang/calamares_sk.ts b/lang/calamares_sk.ts index ca894a8c4..6ddd9d534 100644 --- a/lang/calamares_sk.ts +++ b/lang/calamares_sk.ts @@ -623,17 +623,18 @@ Inštalátor sa ukončí a všetky zmeny budú stratené. This storage device already has an operating system on it, but the partition table <strong>%1</strong> is different from the needed <strong>%2</strong>.<br/> - + Toto úložné zariadenie už obsahuje operačný systém, ale tabuľka oddielov <strong>%1</strong> sa líši od požadovanej <strong>%2</strong>. +<br/> This storage device has one of its partitions <strong>mounted</strong>. - + Toto úložné zariadenie má jeden zo svojich oddielov <strong>pripojený</strong>. This storage device is a part of an <strong>inactive RAID</strong> device. - + Toto úložné zariadenie je súčasťou zariadenia s <strong>neaktívnym RAIDom</strong>. @@ -1826,7 +1827,8 @@ Inštalátor sa ukončí a všetky zmeny budú stratené. Please select your preferred location on the map so the installer can suggest the locale and timezone settings for you. You can fine-tune the suggested settings below. Search the map by dragging to move and using the +/- buttons to zoom in/out or use mouse scrolling for zooming. - + Prosím, vyberte vaše preferované umiestnenie, aby mohol inštalátor pre vás navrhnúť + miestne nastavenia a časovú zónu. Navrhnuté nastavenia môžete doladiť nižšie. Mapu môžete presúvať ťahaním a približovať alebo odďaľovať tlačidlami +/- alebo rolovaním myšou. @@ -2870,7 +2872,7 @@ Výstup: Directory not found - + Adresár sa nenašiel @@ -3873,7 +3875,7 @@ Výstup: Click your preferred keyboard model to select layout and variant, or use the default one based on the detected hardware. - + Kliknutím na preferovaný model klávesnice vyberiete rozloženie, alebo použite predvolený, ktorý bol vybraný podľa rozpoznaného hardvéru. @@ -4012,12 +4014,12 @@ Výstup: Enter the same password twice, so that it can be checked for typing errors. A good password will contain a mixture of letters, numbers and punctuation, should be at least eight characters long, and should be changed at regular intervals. - + Zadajte rovnaké heslo dvakrát, aby sa predišlo preklepom. Dobré heslo by malo obsahovať mix písmen, čísel a diakritiky, malo by mať dĺžku aspoň osem znakov a malo by byť pravidelne menené. Validate passwords quality - + Overiť kvalitu hesiel @@ -4032,7 +4034,7 @@ Výstup: Reuse user password as root password - + Znovu použiť používateľské heslo ako heslo správcu From e888f7b90e24535c414de3dbb474709fc98781fa Mon Sep 17 00:00:00 2001 From: Calamares CI Date: Mon, 9 Nov 2020 12:27:05 +0100 Subject: [PATCH 35/53] i18n: [python] Automatic merge of Transifex translations --- lang/python/de/LC_MESSAGES/python.po | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lang/python/de/LC_MESSAGES/python.po b/lang/python/de/LC_MESSAGES/python.po index e67f06089..6dd5b751d 100644 --- a/lang/python/de/LC_MESSAGES/python.po +++ b/lang/python/de/LC_MESSAGES/python.po @@ -4,9 +4,9 @@ # FIRST AUTHOR , YEAR. # # Translators: -# Andreas Eitel , 2020 # Adriaan de Groot , 2020 # Christian Spaan, 2020 +# Andreas Eitel , 2020 # #, fuzzy msgid "" @@ -15,7 +15,7 @@ msgstr "" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2020-10-16 22:35+0200\n" "PO-Revision-Date: 2017-08-09 10:34+0000\n" -"Last-Translator: Christian Spaan, 2020\n" +"Last-Translator: Andreas Eitel , 2020\n" "Language-Team: German (https://www.transifex.com/calamares/teams/20061/de/)\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -208,6 +208,8 @@ msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" +"Die Liste der Displaymanager ist leer oder weder in globalstorage noch in " +"displaymanager.conf definiert." #: src/modules/displaymanager/main.py:977 msgid "Display manager configuration was incomplete" From d336d0167f41c15b953f7d33280663367f76e4f5 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Mon, 9 Nov 2020 13:08:07 +0100 Subject: [PATCH 36/53] i18n: translation stats (This does not change the overall list of available languages) --- CMakeLists.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d8744afb4..96bd0a9ec 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -141,10 +141,10 @@ set( CALAMARES_DESCRIPTION_SUMMARY # `txstats.py -e`. See also # # Total 71 languages -set( _tx_complete be ca cs_CZ da fi_FI fur he hi hr ja pt_BR sq sv - tg uk vi zh_TW ) -set( _tx_good as ast az az_AZ de es fa fr hu it_IT ko lt ml nl - pt_PT ru sk tr_TR zh_CN ) +set( _tx_complete az az_AZ be ca cs_CZ da de fi_FI fur he hi hr ja + pt_BR sq sv tg uk vi zh_TW ) +set( _tx_good as ast es fa fr hu it_IT ko lt ml nl pt_PT ru sk + tr_TR zh_CN ) set( _tx_ok ar bg bn el en_GB es_MX es_PR et eu gl id is mr nb pl ro sl sr sr@latin th ) set( _tx_incomplete ca@valencia eo fr_CH gu ie kk kn lo lv mk ne_NP From a843f3417746a020f814019ae387d42de7f41cf0 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Mon, 9 Nov 2020 13:41:56 +0100 Subject: [PATCH 37/53] CI: require a sufficiently-recent JSON-Schema --- ci/configvalidator.py | 1 + 1 file changed, 1 insertion(+) diff --git a/ci/configvalidator.py b/ci/configvalidator.py index 5c0ee4559..cde3527f6 100644 --- a/ci/configvalidator.py +++ b/ci/configvalidator.py @@ -45,6 +45,7 @@ ERR_IMPORT, ERR_USAGE, ERR_FILE_NOT_FOUND, ERR_SYNTAX, ERR_INVALID = range(1,6) # try: from jsonschema import validate, SchemaError, ValidationError + from jsonschema import draft7_format_checker from yaml import safe_load, YAMLError except ImportError as e: print(e) From 4e9c18a565629ad62225715177ec3d2177f097fc Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Mon, 9 Nov 2020 15:14:41 +0100 Subject: [PATCH 38/53] [users] Translate PWQuality error messages with numbers --- src/modules/users/CheckPWQuality.cpp | 44 ++++++++++++++++------------ 1 file changed, 25 insertions(+), 19 deletions(-) diff --git a/src/modules/users/CheckPWQuality.cpp b/src/modules/users/CheckPWQuality.cpp index 9332c6080..44e35b1f5 100644 --- a/src/modules/users/CheckPWQuality.cpp +++ b/src/modules/users/CheckPWQuality.cpp @@ -172,62 +172,66 @@ public: case PWQ_ERROR_MIN_DIGITS: if ( auxerror ) { - return QCoreApplication::translate( "PWQ", "The password contains less than %1 digits" ) - .arg( mungeLong( auxerror ) ); + return QCoreApplication::translate( + "PWQ", "The password contains fewer than %n digits", nullptr, mungeLong( auxerror ) ); } return QCoreApplication::translate( "PWQ", "The password contains too few digits" ); case PWQ_ERROR_MIN_UPPERS: if ( auxerror ) { - return QCoreApplication::translate( "PWQ", "The password contains less than %1 uppercase letters" ) - .arg( mungeLong( auxerror ) ); + return QCoreApplication::translate( + "PWQ", "The password contains fewer than %n uppercase letters", nullptr, mungeLong( auxerror ) ); } return QCoreApplication::translate( "PWQ", "The password contains too few uppercase letters" ); case PWQ_ERROR_MIN_LOWERS: if ( auxerror ) { - return QCoreApplication::translate( "PWQ", "The password contains less than %1 lowercase letters" ) - .arg( mungeLong( auxerror ) ); + return QCoreApplication::translate( + "PWQ", "The password contains fewer than %n lowercase letters", nullptr, mungeLong( auxerror ) ); } return QCoreApplication::translate( "PWQ", "The password contains too few lowercase letters" ); case PWQ_ERROR_MIN_OTHERS: if ( auxerror ) { return QCoreApplication::translate( "PWQ", - "The password contains less than %1 non-alphanumeric characters" ) - .arg( mungeLong( auxerror ) ); + "The password contains fewer than %n non-alphanumeric characters", + nullptr, + mungeLong( auxerror ) ); } return QCoreApplication::translate( "PWQ", "The password contains too few non-alphanumeric characters" ); case PWQ_ERROR_MIN_LENGTH: if ( auxerror ) { - return QCoreApplication::translate( "PWQ", "The password is shorter than %1 characters" ) - .arg( mungeLong( auxerror ) ); + return QCoreApplication::translate( + "PWQ", "The password is shorter than %n characters", nullptr, mungeLong( auxerror ) ); } return QCoreApplication::translate( "PWQ", "The password is too short" ); case PWQ_ERROR_ROTATED: - return QCoreApplication::translate( "PWQ", "The password is just rotated old one" ); + return QCoreApplication::translate( "PWQ", "The password is a rotated version of the previous one" ); case PWQ_ERROR_MIN_CLASSES: if ( auxerror ) { - return QCoreApplication::translate( "PWQ", "The password contains less than %1 character classes" ) - .arg( mungeLong( auxerror ) ); + return QCoreApplication::translate( + "PWQ", "The password contains fewer than %n character classes", nullptr, mungeLong( auxerror ) ); } return QCoreApplication::translate( "PWQ", "The password does not contain enough character classes" ); case PWQ_ERROR_MAX_CONSECUTIVE: if ( auxerror ) { return QCoreApplication::translate( "PWQ", - "The password contains more than %1 same characters consecutively" ) - .arg( mungeLong( auxerror ) ); + "The password contains more than %n same characters consecutively", + nullptr, + mungeLong( auxerror ) ); } return QCoreApplication::translate( "PWQ", "The password contains too many same characters consecutively" ); case PWQ_ERROR_MAX_CLASS_REPEAT: if ( auxerror ) { return QCoreApplication::translate( - "PWQ", "The password contains more than %1 characters of the same class consecutively" ) - .arg( mungeLong( auxerror ) ); + "PWQ", + "The password contains more than %n characters of the same class consecutively", + nullptr, + mungeLong( auxerror ) ); } return QCoreApplication::translate( "PWQ", "The password contains too many characters of the same class consecutively" ); @@ -235,8 +239,10 @@ public: if ( auxerror ) { return QCoreApplication::translate( - "PWQ", "The password contains monotonic sequence longer than %1 characters" ) - .arg( mungeLong( auxerror ) ); + "PWQ", + "The password contains monotonic sequence longer than %n characters", + nullptr, + mungeLong( auxerror ) ); } return QCoreApplication::translate( "PWQ", "The password contains too long of a monotonic character sequence" ); From a5dfe7cd68870fc577a80f02054072b43281f2ca Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Mon, 9 Nov 2020 15:14:54 +0100 Subject: [PATCH 39/53] i18n: update english translations --- lang/calamares_en.ts | 442 ++++++++++-------- lang/python.pot | 169 +++---- .../dummypythonqt/lang/dummypythonqt.pot | 18 +- 3 files changed, 335 insertions(+), 294 deletions(-) diff --git a/lang/calamares_en.ts b/lang/calamares_en.ts index 88c923a96..0ef707a3d 100644 --- a/lang/calamares_en.ts +++ b/lang/calamares_en.ts @@ -4,17 +4,17 @@ BootInfoWidget - + The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. The <strong>boot environment</strong> of this system.<br><br>Older x86 systems only support <strong>BIOS</strong>.<br>Modern systems usually use <strong>EFI</strong>, but may also show up as BIOS if started in compatibility mode. - + This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. This system was started with an <strong>EFI</strong> boot environment.<br><br>To configure startup from an EFI environment, this installer must deploy a boot loader application, like <strong>GRUB</strong> or <strong>systemd-boot</strong> on an <strong>EFI System Partition</strong>. This is automatic, unless you choose manual partitioning, in which case you must choose it or create it on your own. - + This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. This system was started with a <strong>BIOS</strong> boot environment.<br><br>To configure startup from a BIOS environment, this installer must install a boot loader, like <strong>GRUB</strong>, either at the beginning of a partition or on the <strong>Master Boot Record</strong> near the beginning of the partition table (preferred). This is automatic, unless you choose manual partitioning, in which case you must set it up on your own. @@ -533,7 +533,7 @@ The installer will quit and all changes will be lost. <strong>Manual partitioning</strong><br/>You can create or resize partitions yourself. - + Reuse %1 as home partition for %2. Reuse %1 as home partition for %2. @@ -558,101 +558,101 @@ The installer will quit and all changes will be lost. <strong>Select a partition to install on</strong> - + An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. An EFI system partition cannot be found anywhere on this system. Please go back and use manual partitioning to set up %1. - + The EFI system partition at %1 will be used for starting %2. The EFI system partition at %1 will be used for starting %2. - + EFI system partition: EFI system partition: - + This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device does not seem to have an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - - - - + + + + <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. <strong>Erase disk</strong><br/>This will <font color="red">delete</font> all data currently present on the selected storage device. - - - - + + + + <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. <strong>Install alongside</strong><br/>The installer will shrink a partition to make room for %1. - - - - + + + + <strong>Replace a partition</strong><br/>Replaces a partition with %1. <strong>Replace a partition</strong><br/>Replaces a partition with %1. - + This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device has %1 on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device already has an operating system on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. This storage device has multiple operating systems on it. What would you like to do?<br/>You will be able to review and confirm your choices before any change is made to the storage device. - + This storage device already has an operating system on it, but the partition table <strong>%1</strong> is different from the needed <strong>%2</strong>.<br/> This storage device already has an operating system on it, but the partition table <strong>%1</strong> is different from the needed <strong>%2</strong>.<br/> - + This storage device has one of its partitions <strong>mounted</strong>. This storage device has one of its partitions <strong>mounted</strong>. - + This storage device is a part of an <strong>inactive RAID</strong> device. This storage device is a part of an <strong>inactive RAID</strong> device. - + No Swap No Swap - + Reuse Swap Reuse Swap - + Swap (no Hibernate) Swap (no Hibernate) - + Swap (with Hibernate) Swap (with Hibernate) - + Swap to file Swap to file @@ -720,12 +720,12 @@ The installer will quit and all changes will be lost. Config - + Set keyboard model to %1.<br/> Set keyboard model to %1.<br/> - + Set keyboard layout to %1/%2. Set keyboard layout to %1/%2. @@ -810,47 +810,47 @@ The installer will quit and all changes will be lost. <h1>Welcome to the %1 installer</h1> - + Your username is too long. Your username is too long. - + '%1' is not allowed as username. '%1' is not allowed as username. - + Your username must start with a lowercase letter or underscore. Your username must start with a lowercase letter or underscore. - + Only lowercase letters, numbers, underscore and hyphen are allowed. Only lowercase letters, numbers, underscore and hyphen are allowed. - + Your hostname is too short. Your hostname is too short. - + Your hostname is too long. Your hostname is too long. - + '%1' is not allowed as hostname. '%1' is not allowed as hostname. - + Only letters, numbers, underscore and hyphen are allowed. Only letters, numbers, underscore and hyphen are allowed. - + Your passwords do not match! Your passwords do not match! @@ -1018,29 +1018,39 @@ The installer will quit and all changes will be lost. CreateUserJob - + Create user %1 Create user %1 - + Create user <strong>%1</strong>. Create user <strong>%1</strong>. - + Creating user %1. Creating user %1. - - Cannot create sudoers file for writing. - Cannot create sudoers file for writing. + + Preserving home directory + - - Cannot chmod sudoers file. - Cannot chmod sudoers file. + + Creating user %1 + Creating user %1. {1?} + + + + Configuring user %1 + + + + + Setting file permissions + @@ -1243,7 +1253,7 @@ The installer will quit and all changes will be lost. Flags: - + Mountpoint already in use. Please select another one. Mountpoint already in use. Please select another one. @@ -1558,23 +1568,10 @@ The installer will quit and all changes will be lost. Script - - KeyboardPage - - - Set keyboard model to %1.<br/> - Set keyboard model to %1.<br/> - - - - Set keyboard layout to %1/%2. - Set keyboard layout to %1/%2. - - KeyboardQmlViewStep - + Keyboard Keyboard @@ -1582,7 +1579,7 @@ The installer will quit and all changes will be lost. KeyboardViewStep - + Keyboard Keyboard @@ -1664,59 +1661,59 @@ The installer will quit and all changes will be lost. LicenseWidget - + URL: %1 URL: %1 - + <strong>%1 driver</strong><br/>by %2 %1 is an untranslatable product name, example: Creative Audigy driver <strong>%1 driver</strong><br/>by %2 - + <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> %1 is usually a vendor name, example: Nvidia graphics driver <strong>%1 graphics driver</strong><br/><font color="Grey">by %2</font> - + <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> <strong>%1 browser plugin</strong><br/><font color="Grey">by %2</font> - + <strong>%1 codec</strong><br/><font color="Grey">by %2</font> <strong>%1 codec</strong><br/><font color="Grey">by %2</font> - + <strong>%1 package</strong><br/><font color="Grey">by %2</font> <strong>%1 package</strong><br/><font color="Grey">by %2</font> - + <strong>%1</strong><br/><font color="Grey">by %2</font> <strong>%1</strong><br/><font color="Grey">by %2</font> - + File: %1 File: %1 - + Hide license text Hide license text - + Show the license text Show the license text - + Open license agreement in browser. Open license agreement in browser. @@ -1724,18 +1721,18 @@ The installer will quit and all changes will be lost. LocalePage - + Region: Region: - + Zone: Zone: - - + + &Change... &Change... @@ -2057,188 +2054,215 @@ The installer will quit and all changes will be lost. The password contains forbidden words in some form The password contains forbidden words in some form - - - The password contains less than %1 digits - The password contains less than %1 digits - The password contains too few digits The password contains too few digits - - - The password contains less than %1 uppercase letters - The password contains less than %1 uppercase letters - The password contains too few uppercase letters The password contains too few uppercase letters - - - The password contains less than %1 lowercase letters - The password contains less than %1 lowercase letters - The password contains too few lowercase letters The password contains too few lowercase letters - - The password contains less than %1 non-alphanumeric characters - The password contains less than %1 non-alphanumeric characters - - - + The password contains too few non-alphanumeric characters The password contains too few non-alphanumeric characters - - The password is shorter than %1 characters - The password is shorter than %1 characters - - - + The password is too short The password is too short - - The password is just rotated old one - The password is just rotated old one - - - - The password contains less than %1 character classes - The password contains less than %1 character classes - - - + The password does not contain enough character classes The password does not contain enough character classes - - The password contains more than %1 same characters consecutively - The password contains more than %1 same characters consecutively - - - + The password contains too many same characters consecutively The password contains too many same characters consecutively - - The password contains more than %1 characters of the same class consecutively - The password contains more than %1 characters of the same class consecutively - - - + The password contains too many characters of the same class consecutively The password contains too many characters of the same class consecutively - - - The password contains monotonic sequence longer than %1 characters - The password contains monotonic sequence longer than %1 characters + + + The password contains fewer than %n digits + + + + + + + + The password contains fewer than %n uppercase letters + + + + + + + + The password contains fewer than %n lowercase letters + + + + + + + + The password contains fewer than %n non-alphanumeric characters + + + + + + + + The password is shorter than %n characters + + + + + + The password is a rotated version of the previous one + + + + + The password contains fewer than %n character classes + + + + + + + + The password contains more than %n same characters consecutively + + + + + + + + The password contains more than %n characters of the same class consecutively + + + + + + + The password contains monotonic sequence longer than %n characters + + + + + + + The password contains too long of a monotonic character sequence The password contains too long of a monotonic character sequence - + No password supplied No password supplied - + Cannot obtain random numbers from the RNG device Cannot obtain random numbers from the RNG device - + Password generation failed - required entropy too low for settings Password generation failed - required entropy too low for settings - + The password fails the dictionary check - %1 The password fails the dictionary check - %1 - + The password fails the dictionary check The password fails the dictionary check - + Unknown setting - %1 Unknown setting - %1 - + Unknown setting Unknown setting - + Bad integer value of setting - %1 Bad integer value of setting - %1 - + Bad integer value Bad integer value - + Setting %1 is not of integer type Setting %1 is not of integer type - + Setting is not of integer type Setting is not of integer type - + Setting %1 is not of string type Setting %1 is not of string type - + Setting is not of string type Setting is not of string type - + Opening the configuration file failed Opening the configuration file failed - + The configuration file is malformed The configuration file is malformed - + Fatal failure Fatal failure - + Unknown error Unknown error - + Password is empty Password is empty @@ -2572,117 +2596,117 @@ The installer will quit and all changes will be lost. PartitionViewStep - + Gathering system information... Gathering system information... - + Partitions Partitions - + Install %1 <strong>alongside</strong> another operating system. Install %1 <strong>alongside</strong> another operating system. - + <strong>Erase</strong> disk and install %1. <strong>Erase</strong> disk and install %1. - + <strong>Replace</strong> a partition with %1. <strong>Replace</strong> a partition with %1. - + <strong>Manual</strong> partitioning. <strong>Manual</strong> partitioning. - + Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). Install %1 <strong>alongside</strong> another operating system on disk <strong>%2</strong> (%3). - + <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. <strong>Erase</strong> disk <strong>%2</strong> (%3) and install %1. - + <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. <strong>Replace</strong> a partition on disk <strong>%2</strong> (%3) with %1. - + <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). <strong>Manual</strong> partitioning on disk <strong>%1</strong> (%2). - + Disk <strong>%1</strong> (%2) Disk <strong>%1</strong> (%2) - + Current: Current: - + After: After: - + No EFI system partition configured No EFI system partition configured - + An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. An EFI system partition is necessary to start %1.<br/><br/>To configure an EFI system partition, go back and select or create a FAT32 filesystem with the <strong>%3</strong> flag enabled and mount point <strong>%2</strong>.<br/><br/>You can continue without setting up an EFI system partition but your system may fail to start. - + An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. An EFI system partition is necessary to start %1.<br/><br/>A partition was configured with mount point <strong>%2</strong> but its <strong>%3</strong> flag is not set.<br/>To set the flag, go back and edit the partition.<br/><br/>You can continue without setting the flag but your system may fail to start. - + EFI system partition flag not set EFI system partition flag not set - + Option to use GPT on BIOS Option to use GPT on BIOS - + A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>bios_grub</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. A GPT partition table is the best option for all systems. This installer supports such a setup for BIOS systems too.<br/><br/>To configure a GPT partition table on BIOS, (if not done so already) go back and set the partition table to GPT, next create a 8 MB unformatted partition with the <strong>bios_grub</strong> flag enabled.<br/><br/>An unformatted 8 MB partition is necessary to start %1 on a BIOS system with GPT. - + Boot partition not encrypted Boot partition not encrypted - + A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. A separate boot partition was set up together with an encrypted root partition, but the boot partition is not encrypted.<br/><br/>There are security concerns with this kind of setup, because important system files are kept on an unencrypted partition.<br/>You may continue if you wish, but filesystem unlocking will happen later during system startup.<br/>To encrypt the boot partition, go back and recreate it, selecting <strong>Encrypt</strong> in the partition creation window. - + has at least one disk device available. has at least one disk device available. - + There are no partitions to install on. There are no partitions to install on. @@ -2842,13 +2866,8 @@ Output: swap - - Default Keyboard Model - Default Keyboard Model - - - - + + Default Default @@ -3232,29 +3251,29 @@ Output: SetKeyboardLayoutJob - + Set keyboard model to %1, layout to %2-%3 Set keyboard model to %1, layout to %2-%3 - + Failed to write keyboard configuration for the virtual console. Failed to write keyboard configuration for the virtual console. - - - + + + Failed to write to %1 Failed to write to %1 - + Failed to write keyboard configuration for X11. Failed to write keyboard configuration for X11. - + Failed to write keyboard configuration to existing /etc/default directory. Failed to write keyboard configuration to existing /etc/default directory. @@ -3423,6 +3442,43 @@ Output: Cannot open /etc/timezone for writing + + SetupGroupsJob + + + Preparing groups. + + + + + + Could not create groups in target system + + + + + These groups are missing in the target system: %1 + + + + + SetupSudoJob + + + Configure <pre>sudo</pre> users. + + + + + Cannot chmod sudoers file. + Cannot chmod sudoers file. + + + + Cannot create sudoers file for writing. + Cannot create sudoers file for writing. + + ShellProcessJob @@ -3443,12 +3499,12 @@ Output: SummaryPage - + This is an overview of what will happen once you start the setup procedure. This is an overview of what will happen once you start the setup procedure. - + This is an overview of what will happen once you start the install procedure. This is an overview of what will happen once you start the install procedure. diff --git a/lang/python.pot b/lang/python.pot index 5dc844031..1de1081b7 100644 --- a/lang/python.pot +++ b/lang/python.pot @@ -2,32 +2,32 @@ # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. -# +# #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-10-16 22:35+0200\n" +"POT-Creation-Date: 2020-11-09 15:12+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" +"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: \n" "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n" #: src/modules/grubcfg/main.py:28 msgid "Configure GRUB." -msgstr "Configure GRUB." +msgstr "" -#: src/modules/mount/main.py:29 +#: src/modules/mount/main.py:30 msgid "Mounting partitions." -msgstr "Mounting partitions." +msgstr "" -#: src/modules/mount/main.py:141 src/modules/initcpiocfg/main.py:196 -#: src/modules/initcpiocfg/main.py:200 +#: src/modules/mount/main.py:127 src/modules/initcpiocfg/main.py:199 +#: src/modules/initcpiocfg/main.py:203 #: src/modules/luksopenswaphookcfg/main.py:86 #: src/modules/luksopenswaphookcfg/main.py:90 src/modules/rawfs/main.py:164 #: src/modules/initramfscfg/main.py:85 src/modules/initramfscfg/main.py:89 @@ -36,327 +36,312 @@ msgstr "Mounting partitions." #: src/modules/fstab/main.py:367 src/modules/localecfg/main.py:135 #: src/modules/networkcfg/main.py:39 msgid "Configuration Error" -msgstr "Configuration Error" +msgstr "" -#: src/modules/mount/main.py:142 src/modules/initcpiocfg/main.py:197 +#: src/modules/mount/main.py:128 src/modules/initcpiocfg/main.py:200 #: src/modules/luksopenswaphookcfg/main.py:87 src/modules/rawfs/main.py:165 #: src/modules/initramfscfg/main.py:86 src/modules/openrcdmcryptcfg/main.py:70 #: src/modules/fstab/main.py:362 msgid "No partitions are defined for
{!s}
to use." -msgstr "No partitions are defined for
{!s}
to use." +msgstr "" #: src/modules/services-systemd/main.py:26 msgid "Configure systemd services" -msgstr "Configure systemd services" +msgstr "" #: src/modules/services-systemd/main.py:59 #: src/modules/services-openrc/main.py:93 msgid "Cannot modify service" -msgstr "Cannot modify service" +msgstr "" #: src/modules/services-systemd/main.py:60 msgid "" "systemctl {arg!s} call in chroot returned error code {num!s}." msgstr "" -"systemctl {arg!s} call in chroot returned error code {num!s}." #: src/modules/services-systemd/main.py:63 #: src/modules/services-systemd/main.py:67 msgid "Cannot enable systemd service {name!s}." -msgstr "Cannot enable systemd service {name!s}." +msgstr "" #: src/modules/services-systemd/main.py:65 msgid "Cannot enable systemd target {name!s}." -msgstr "Cannot enable systemd target {name!s}." +msgstr "" #: src/modules/services-systemd/main.py:69 msgid "Cannot disable systemd target {name!s}." -msgstr "Cannot disable systemd target {name!s}." +msgstr "" #: src/modules/services-systemd/main.py:71 msgid "Cannot mask systemd unit {name!s}." -msgstr "Cannot mask systemd unit {name!s}." +msgstr "" #: src/modules/services-systemd/main.py:73 msgid "" -"Unknown systemd commands {command!s} and " -"{suffix!s} for unit {name!s}." +"Unknown systemd commands {command!s} and {suffix!s} for unit {name!s}." msgstr "" -"Unknown systemd commands {command!s} and " -"{suffix!s} for unit {name!s}." #: src/modules/umount/main.py:31 msgid "Unmount file systems." -msgstr "Unmount file systems." +msgstr "" #: src/modules/unpackfs/main.py:35 msgid "Filling up filesystems." -msgstr "Filling up filesystems." +msgstr "" #: src/modules/unpackfs/main.py:254 msgid "rsync failed with error code {}." -msgstr "rsync failed with error code {}." +msgstr "" #: src/modules/unpackfs/main.py:299 msgid "Unpacking image {}/{}, file {}/{}" -msgstr "Unpacking image {}/{}, file {}/{}" +msgstr "" #: src/modules/unpackfs/main.py:314 msgid "Starting to unpack {}" -msgstr "Starting to unpack {}" +msgstr "" #: src/modules/unpackfs/main.py:323 src/modules/unpackfs/main.py:463 msgid "Failed to unpack image \"{}\"" -msgstr "Failed to unpack image \"{}\"" +msgstr "" #: src/modules/unpackfs/main.py:430 msgid "No mount point for root partition" -msgstr "No mount point for root partition" +msgstr "" #: src/modules/unpackfs/main.py:431 msgid "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" -msgstr "globalstorage does not contain a \"rootMountPoint\" key, doing nothing" +msgstr "" #: src/modules/unpackfs/main.py:436 msgid "Bad mount point for root partition" -msgstr "Bad mount point for root partition" +msgstr "" #: src/modules/unpackfs/main.py:437 msgid "rootMountPoint is \"{}\", which does not exist, doing nothing" -msgstr "rootMountPoint is \"{}\", which does not exist, doing nothing" +msgstr "" #: src/modules/unpackfs/main.py:453 src/modules/unpackfs/main.py:457 #: src/modules/unpackfs/main.py:477 msgid "Bad unsquash configuration" -msgstr "Bad unsquash configuration" +msgstr "" #: src/modules/unpackfs/main.py:454 msgid "The filesystem for \"{}\" ({}) is not supported by your current kernel" -msgstr "The filesystem for \"{}\" ({}) is not supported by your current kernel" +msgstr "" #: src/modules/unpackfs/main.py:458 msgid "The source filesystem \"{}\" does not exist" -msgstr "The source filesystem \"{}\" does not exist" +msgstr "" #: src/modules/unpackfs/main.py:464 msgid "" "Failed to find unsquashfs, make sure you have the squashfs-tools package " "installed" msgstr "" -"Failed to find unsquashfs, make sure you have the squashfs-tools package " -"installed" #: src/modules/unpackfs/main.py:478 msgid "The destination \"{}\" in the target system is not a directory" -msgstr "The destination \"{}\" in the target system is not a directory" +msgstr "" #: src/modules/displaymanager/main.py:514 msgid "Cannot write KDM configuration file" -msgstr "Cannot write KDM configuration file" +msgstr "" #: src/modules/displaymanager/main.py:515 msgid "KDM config file {!s} does not exist" -msgstr "KDM config file {!s} does not exist" +msgstr "" #: src/modules/displaymanager/main.py:576 msgid "Cannot write LXDM configuration file" -msgstr "Cannot write LXDM configuration file" +msgstr "" #: src/modules/displaymanager/main.py:577 msgid "LXDM config file {!s} does not exist" -msgstr "LXDM config file {!s} does not exist" +msgstr "" #: src/modules/displaymanager/main.py:660 msgid "Cannot write LightDM configuration file" -msgstr "Cannot write LightDM configuration file" +msgstr "" #: src/modules/displaymanager/main.py:661 msgid "LightDM config file {!s} does not exist" -msgstr "LightDM config file {!s} does not exist" +msgstr "" #: src/modules/displaymanager/main.py:735 msgid "Cannot configure LightDM" -msgstr "Cannot configure LightDM" +msgstr "" #: src/modules/displaymanager/main.py:736 msgid "No LightDM greeter installed." -msgstr "No LightDM greeter installed." +msgstr "" #: src/modules/displaymanager/main.py:767 msgid "Cannot write SLIM configuration file" -msgstr "Cannot write SLIM configuration file" +msgstr "" #: src/modules/displaymanager/main.py:768 msgid "SLIM config file {!s} does not exist" -msgstr "SLIM config file {!s} does not exist" +msgstr "" #: src/modules/displaymanager/main.py:894 msgid "No display managers selected for the displaymanager module." -msgstr "No display managers selected for the displaymanager module." +msgstr "" #: src/modules/displaymanager/main.py:895 msgid "" "The displaymanagers list is empty or undefined in both globalstorage and " "displaymanager.conf." msgstr "" -"The displaymanagers list is empty or undefined in both globalstorage and " -"displaymanager.conf." #: src/modules/displaymanager/main.py:977 msgid "Display manager configuration was incomplete" -msgstr "Display manager configuration was incomplete" +msgstr "" #: src/modules/initcpiocfg/main.py:28 msgid "Configuring mkinitcpio." -msgstr "Configuring mkinitcpio." +msgstr "" -#: src/modules/initcpiocfg/main.py:201 +#: src/modules/initcpiocfg/main.py:204 #: src/modules/luksopenswaphookcfg/main.py:91 #: src/modules/initramfscfg/main.py:90 src/modules/openrcdmcryptcfg/main.py:74 #: src/modules/fstab/main.py:368 src/modules/localecfg/main.py:136 #: src/modules/networkcfg/main.py:40 msgid "No root mount point is given for
{!s}
to use." -msgstr "No root mount point is given for
{!s}
to use." +msgstr "" #: src/modules/luksopenswaphookcfg/main.py:26 msgid "Configuring encrypted swap." -msgstr "Configuring encrypted swap." +msgstr "" #: src/modules/rawfs/main.py:26 msgid "Installing data." -msgstr "Installing data." +msgstr "" #: src/modules/services-openrc/main.py:29 msgid "Configure OpenRC services" -msgstr "Configure OpenRC services" +msgstr "" #: src/modules/services-openrc/main.py:57 msgid "Cannot add service {name!s} to run-level {level!s}." -msgstr "Cannot add service {name!s} to run-level {level!s}." +msgstr "" #: src/modules/services-openrc/main.py:59 msgid "Cannot remove service {name!s} from run-level {level!s}." -msgstr "Cannot remove service {name!s} from run-level {level!s}." +msgstr "" #: src/modules/services-openrc/main.py:61 msgid "" "Unknown service-action {arg!s} for service {name!s} in run-" "level {level!s}." msgstr "" -"Unknown service-action {arg!s} for service {name!s} in run-" -"level {level!s}." #: src/modules/services-openrc/main.py:94 msgid "" "rc-update {arg!s} call in chroot returned error code {num!s}." msgstr "" -"rc-update {arg!s} call in chroot returned error code {num!s}." #: src/modules/services-openrc/main.py:101 msgid "Target runlevel does not exist" -msgstr "Target runlevel does not exist" +msgstr "" #: src/modules/services-openrc/main.py:102 msgid "" "The path for runlevel {level!s} is {path!s}, which does not " "exist." msgstr "" -"The path for runlevel {level!s} is {path!s}, which does not " -"exist." #: src/modules/services-openrc/main.py:110 msgid "Target service does not exist" -msgstr "Target service does not exist" +msgstr "" #: src/modules/services-openrc/main.py:111 msgid "" -"The path for service {name!s} is {path!s}, which does not " -"exist." +"The path for service {name!s} is {path!s}, which does not exist." msgstr "" -"The path for service {name!s} is {path!s}, which does not " -"exist." #: src/modules/plymouthcfg/main.py:27 msgid "Configure Plymouth theme" -msgstr "Configure Plymouth theme" +msgstr "" #: src/modules/packages/main.py:50 src/modules/packages/main.py:59 #: src/modules/packages/main.py:69 msgid "Install packages." -msgstr "Install packages." +msgstr "" #: src/modules/packages/main.py:57 #, python-format msgid "Processing packages (%(count)d / %(total)d)" -msgstr "Processing packages (%(count)d / %(total)d)" +msgstr "" #: src/modules/packages/main.py:62 #, python-format msgid "Installing one package." msgid_plural "Installing %(num)d packages." -msgstr[0] "Installing one package." -msgstr[1] "Installing %(num)d packages." +msgstr[0] "" +msgstr[1] "" #: src/modules/packages/main.py:65 #, python-format msgid "Removing one package." msgid_plural "Removing %(num)d packages." -msgstr[0] "Removing one package." -msgstr[1] "Removing %(num)d packages." +msgstr[0] "" +msgstr[1] "" #: src/modules/bootloader/main.py:42 msgid "Install bootloader." -msgstr "Install bootloader." +msgstr "" #: src/modules/hwclock/main.py:26 msgid "Setting hardware clock." -msgstr "Setting hardware clock." +msgstr "" #: src/modules/mkinitfs/main.py:27 msgid "Creating initramfs with mkinitfs." -msgstr "Creating initramfs with mkinitfs." +msgstr "" #: src/modules/mkinitfs/main.py:49 msgid "Failed to run mkinitfs on the target" -msgstr "Failed to run mkinitfs on the target" +msgstr "" #: src/modules/mkinitfs/main.py:50 src/modules/dracut/main.py:50 msgid "The exit code was {}" -msgstr "The exit code was {}" +msgstr "" #: src/modules/dracut/main.py:27 msgid "Creating initramfs with dracut." -msgstr "Creating initramfs with dracut." +msgstr "" #: src/modules/dracut/main.py:49 msgid "Failed to run dracut on the target" -msgstr "Failed to run dracut on the target" +msgstr "" #: src/modules/initramfscfg/main.py:32 msgid "Configuring initramfs." -msgstr "Configuring initramfs." +msgstr "" #: src/modules/openrcdmcryptcfg/main.py:25 msgid "Configuring OpenRC dmcrypt service." -msgstr "Configuring OpenRC dmcrypt service." +msgstr "" #: src/modules/fstab/main.py:29 msgid "Writing fstab." -msgstr "Writing fstab." +msgstr "" #: src/modules/dummypython/main.py:35 msgid "Dummy python job." -msgstr "Dummy python job." +msgstr "" #: src/modules/dummypython/main.py:37 src/modules/dummypython/main.py:93 #: src/modules/dummypython/main.py:94 msgid "Dummy python step {}" -msgstr "Dummy python step {}" +msgstr "" #: src/modules/localecfg/main.py:30 msgid "Configuring locales." -msgstr "Configuring locales." +msgstr "" #: src/modules/networkcfg/main.py:28 msgid "Saving network configuration." -msgstr "Saving network configuration." +msgstr "" diff --git a/src/modules/dummypythonqt/lang/dummypythonqt.pot b/src/modules/dummypythonqt/lang/dummypythonqt.pot index b1665e503..e3a5ff33d 100644 --- a/src/modules/dummypythonqt/lang/dummypythonqt.pot +++ b/src/modules/dummypythonqt/lang/dummypythonqt.pot @@ -2,41 +2,41 @@ # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. -# +# #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-10-15 12:53+0200\n" +"POT-Creation-Date: 2020-11-09 15:12+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" +"Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: \n" #: src/modules/dummypythonqt/main.py:75 msgid "Click me!" -msgstr "Click me!" +msgstr "" #: src/modules/dummypythonqt/main.py:85 msgid "A new QLabel." -msgstr "A new QLabel." +msgstr "" #: src/modules/dummypythonqt/main.py:88 msgid "Dummy PythonQt ViewStep" -msgstr "Dummy PythonQt ViewStep" +msgstr "" #: src/modules/dummypythonqt/main.py:174 msgid "The Dummy PythonQt Job" -msgstr "The Dummy PythonQt Job" +msgstr "" #: src/modules/dummypythonqt/main.py:177 msgid "This is the Dummy PythonQt Job. The dummy job says: {}" -msgstr "This is the Dummy PythonQt Job. The dummy job says: {}" +msgstr "" #: src/modules/dummypythonqt/main.py:181 msgid "A status message for Dummy PythonQt Job." -msgstr "A status message for Dummy PythonQt Job." +msgstr "" From f3e37f3ceef19b3eccdf74b73f47f4834763512d Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Mon, 9 Nov 2020 15:40:23 +0100 Subject: [PATCH 40/53] [users] Remove unused PWQuality method --- src/modules/users/CheckPWQuality.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/modules/users/CheckPWQuality.cpp b/src/modules/users/CheckPWQuality.cpp index 44e35b1f5..3800c00e8 100644 --- a/src/modules/users/CheckPWQuality.cpp +++ b/src/modules/users/CheckPWQuality.cpp @@ -122,8 +122,6 @@ public: return r; } - bool hasExplanation() const { return m_rv < 0; } - /* This is roughly the same as the function pwquality_strerror, * only with QStrings instead, and using the Qt translation scheme. * It is used under the terms of the GNU GPL v3 or later, as From 43565027f587c777ab60a6f50c090283c557b252 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Mon, 9 Nov 2020 15:42:22 +0100 Subject: [PATCH 41/53] [users] m_auxerror never set, always nullptr --- src/modules/users/CheckPWQuality.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/modules/users/CheckPWQuality.cpp b/src/modules/users/CheckPWQuality.cpp index 3800c00e8..fe6a49b2f 100644 --- a/src/modules/users/CheckPWQuality.cpp +++ b/src/modules/users/CheckPWQuality.cpp @@ -104,7 +104,6 @@ public: PWSettingsHolder() : m_settings( pwquality_default_settings() ) - , m_auxerror( nullptr ) { } @@ -129,8 +128,7 @@ public: */ QString explanation() { - void* auxerror = m_auxerror; - m_auxerror = nullptr; + void* auxerror = nullptr; if ( m_rv >= arbitrary_minimum_strength ) { @@ -308,7 +306,6 @@ public: private: pwquality_settings_t* m_settings; int m_rv; - void* m_auxerror; }; DEFINE_CHECK_FUNC( libpwquality ) From b4c3236e4ad71a2dfc034f2dc19b051a56ffc26c Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Mon, 9 Nov 2020 16:08:19 +0100 Subject: [PATCH 42/53] [users] Consume error information from libpwquality Previously, the auxerror information was never stored, and the messages were all un-numbered or un-explained. Now, consume that information and store it when check() is called, ready to be used when (possibly much later, or after a translation change) explanation() is called. --- src/modules/users/CheckPWQuality.cpp | 154 ++++++++++++++++----------- 1 file changed, 94 insertions(+), 60 deletions(-) diff --git a/src/modules/users/CheckPWQuality.cpp b/src/modules/users/CheckPWQuality.cpp index fe6a49b2f..8dfea1f79 100644 --- a/src/modules/users/CheckPWQuality.cpp +++ b/src/modules/users/CheckPWQuality.cpp @@ -112,24 +112,73 @@ public: /// Sets an option via the configuration string @p v, = style. int set( const QString& v ) { return pwquality_set_option( m_settings, v.toUtf8().constData() ); } - /// Checks the given password @p pwd against the current configuration + /** @brief Checks the given password @p pwd against the current configuration + * + * Resets m_errorString and m_errorCount and then sets them appropriately + * so that explanation() can be called afterwards. Sets m_rv as well. + */ + int check( const QString& pwd ) { void* auxerror = nullptr; - int r = pwquality_check( m_settings, pwd.toUtf8().constData(), nullptr, nullptr, &auxerror ); - m_rv = r; - return r; + m_rv = pwquality_check( m_settings, pwd.toUtf8().constData(), nullptr, nullptr, &auxerror ); + + // Positive return values could be ignored; some negative ones + // place extra information in auxerror, which is a void* and + // which needs interpretation to long- or string-values. + m_errorCount = 0; + m_errorString = QString(); + + switch ( m_rv ) + { + case PWQ_ERROR_CRACKLIB_CHECK: + if ( auxerror ) + { + /* Here the string comes from cracklib, don't free? */ + m_errorString = mungeString( auxerror ); + } + break; + case PWQ_ERROR_MEM_ALLOC: + case PWQ_ERROR_UNKNOWN_SETTING: + case PWQ_ERROR_INTEGER: + case PWQ_ERROR_NON_INT_SETTING: + case PWQ_ERROR_NON_STR_SETTING: + if ( auxerror ) + { + m_errorString = mungeString( auxerror ); + free( auxerror ); + } + break; + case PWQ_ERROR_MIN_DIGITS: + case PWQ_ERROR_MIN_UPPERS: + case PWQ_ERROR_MIN_LOWERS: + case PWQ_ERROR_MIN_OTHERS: + case PWQ_ERROR_MIN_LENGTH: + case PWQ_ERROR_MIN_CLASSES: + case PWQ_ERROR_MAX_CONSECUTIVE: + case PWQ_ERROR_MAX_CLASS_REPEAT: + case PWQ_ERROR_MAX_SEQUENCE: + if ( auxerror ) + { + m_errorCount = mungeLong( auxerror ); + } + break; + default: + break; + } + + return m_rv; } - /* This is roughly the same as the function pwquality_strerror, + /** @brief Explain the results of the last call to check() + * + * This is roughly the same as the function pwquality_strerror, * only with QStrings instead, and using the Qt translation scheme. * It is used under the terms of the GNU GPL v3 or later, as * allowed by the libpwquality license (LICENSES/GPLv2+-libpwquality) */ QString explanation() { - void* auxerror = nullptr; - if ( m_rv >= arbitrary_minimum_strength ) { return QString(); @@ -142,12 +191,10 @@ public: switch ( m_rv ) { case PWQ_ERROR_MEM_ALLOC: - if ( auxerror ) + if ( !m_errorString.isEmpty() ) { - QString s = QCoreApplication::translate( "PWQ", "Memory allocation error when setting '%1'" ) - .arg( mungeString( auxerror ) ); - free( auxerror ); - return s; + return QCoreApplication::translate( "PWQ", "Memory allocation error when setting '%1'" ) + .arg( m_errorString ); } return QCoreApplication::translate( "PWQ", "Memory allocation error" ); case PWQ_ERROR_SAME_PASSWORD: @@ -166,79 +213,75 @@ public: case PWQ_ERROR_BAD_WORDS: return QCoreApplication::translate( "PWQ", "The password contains forbidden words in some form" ); case PWQ_ERROR_MIN_DIGITS: - if ( auxerror ) + if ( m_errorCount ) { return QCoreApplication::translate( - "PWQ", "The password contains fewer than %n digits", nullptr, mungeLong( auxerror ) ); + "PWQ", "The password contains fewer than %n digits", nullptr, m_errorCount ); } return QCoreApplication::translate( "PWQ", "The password contains too few digits" ); case PWQ_ERROR_MIN_UPPERS: - if ( auxerror ) + if ( m_errorCount ) { return QCoreApplication::translate( - "PWQ", "The password contains fewer than %n uppercase letters", nullptr, mungeLong( auxerror ) ); + "PWQ", "The password contains fewer than %n uppercase letters", nullptr, m_errorCount ); } return QCoreApplication::translate( "PWQ", "The password contains too few uppercase letters" ); case PWQ_ERROR_MIN_LOWERS: - if ( auxerror ) + if ( m_errorCount ) { return QCoreApplication::translate( - "PWQ", "The password contains fewer than %n lowercase letters", nullptr, mungeLong( auxerror ) ); + "PWQ", "The password contains fewer than %n lowercase letters", nullptr, m_errorCount ); } return QCoreApplication::translate( "PWQ", "The password contains too few lowercase letters" ); case PWQ_ERROR_MIN_OTHERS: - if ( auxerror ) + if ( m_errorCount ) { - return QCoreApplication::translate( "PWQ", - "The password contains fewer than %n non-alphanumeric characters", - nullptr, - mungeLong( auxerror ) ); + return QCoreApplication::translate( + "PWQ", "The password contains fewer than %n non-alphanumeric characters", nullptr, m_errorCount ); } return QCoreApplication::translate( "PWQ", "The password contains too few non-alphanumeric characters" ); case PWQ_ERROR_MIN_LENGTH: - if ( auxerror ) + if ( m_errorCount ) { return QCoreApplication::translate( - "PWQ", "The password is shorter than %n characters", nullptr, mungeLong( auxerror ) ); + "PWQ", "The password is shorter than %n characters", nullptr, m_errorCount ); } return QCoreApplication::translate( "PWQ", "The password is too short" ); case PWQ_ERROR_ROTATED: return QCoreApplication::translate( "PWQ", "The password is a rotated version of the previous one" ); case PWQ_ERROR_MIN_CLASSES: - if ( auxerror ) + if ( m_errorCount ) { return QCoreApplication::translate( - "PWQ", "The password contains fewer than %n character classes", nullptr, mungeLong( auxerror ) ); + "PWQ", "The password contains fewer than %n character classes", nullptr, m_errorCount ); } return QCoreApplication::translate( "PWQ", "The password does not contain enough character classes" ); case PWQ_ERROR_MAX_CONSECUTIVE: - if ( auxerror ) + if ( m_errorCount ) { - return QCoreApplication::translate( "PWQ", - "The password contains more than %n same characters consecutively", - nullptr, - mungeLong( auxerror ) ); + return QCoreApplication::translate( + "PWQ", "The password contains more than %n same characters consecutively", nullptr, m_errorCount ); } return QCoreApplication::translate( "PWQ", "The password contains too many same characters consecutively" ); case PWQ_ERROR_MAX_CLASS_REPEAT: - if ( auxerror ) + if ( m_errorCount ) { return QCoreApplication::translate( "PWQ", "The password contains more than %n characters of the same class consecutively", nullptr, - mungeLong( auxerror ) ); + m_errorCount ); } return QCoreApplication::translate( "PWQ", "The password contains too many characters of the same class consecutively" ); case PWQ_ERROR_MAX_SEQUENCE: - if ( auxerror ) + if ( m_errorCount ) { return QCoreApplication::translate( "PWQ", "The password contains monotonic sequence longer than %n characters", nullptr, - mungeLong( auxerror ) ); + m_errorCount ); } return QCoreApplication::translate( "PWQ", "The password contains too long of a monotonic character sequence" ); @@ -250,46 +293,34 @@ public: return QCoreApplication::translate( "PWQ", "Password generation failed - required entropy too low for settings" ); case PWQ_ERROR_CRACKLIB_CHECK: - if ( auxerror ) + if ( !m_errorString.isEmpty() ) { - /* Here the string comes from cracklib, don't free? */ return QCoreApplication::translate( "PWQ", "The password fails the dictionary check - %1" ) - .arg( mungeString( auxerror ) ); + .arg( m_errorString ); } return QCoreApplication::translate( "PWQ", "The password fails the dictionary check" ); case PWQ_ERROR_UNKNOWN_SETTING: - if ( auxerror ) + if ( !m_errorString.isEmpty() ) { - QString s = QCoreApplication::translate( "PWQ", "Unknown setting - %1" ).arg( mungeString( auxerror ) ); - free( auxerror ); - return s; + return QCoreApplication::translate( "PWQ", "Unknown setting - %1" ).arg( m_errorString ); } return QCoreApplication::translate( "PWQ", "Unknown setting" ); case PWQ_ERROR_INTEGER: - if ( auxerror ) + if ( !m_errorString.isEmpty() ) { - QString s = QCoreApplication::translate( "PWQ", "Bad integer value of setting - %1" ) - .arg( mungeString( auxerror ) ); - free( auxerror ); - return s; + return QCoreApplication::translate( "PWQ", "Bad integer value of setting - %1" ).arg( m_errorString ); } return QCoreApplication::translate( "PWQ", "Bad integer value" ); case PWQ_ERROR_NON_INT_SETTING: - if ( auxerror ) + if ( !m_errorString.isEmpty() ) { - QString s = QCoreApplication::translate( "PWQ", "Setting %1 is not of integer type" ) - .arg( mungeString( auxerror ) ); - free( auxerror ); - return s; + return QCoreApplication::translate( "PWQ", "Setting %1 is not of integer type" ).arg( m_errorString ); } return QCoreApplication::translate( "PWQ", "Setting is not of integer type" ); case PWQ_ERROR_NON_STR_SETTING: - if ( auxerror ) + if ( !m_errorString.isEmpty() ) { - QString s = QCoreApplication::translate( "PWQ", "Setting %1 is not of string type" ) - .arg( mungeString( auxerror ) ); - free( auxerror ); - return s; + return QCoreApplication::translate( "PWQ", "Setting %1 is not of string type" ).arg( m_errorString ); } return QCoreApplication::translate( "PWQ", "Setting is not of string type" ); case PWQ_ERROR_CFGFILE_OPEN: @@ -304,8 +335,11 @@ public: } private: - pwquality_settings_t* m_settings; - int m_rv; + QString m_errorString; ///< Textual error from last call to check() + int m_errorCount = 0; ///< Count (used in %n) error from last call to check() + int m_rv = 0; ///< Return value from libpwquality + + pwquality_settings_t* m_settings = nullptr; }; DEFINE_CHECK_FUNC( libpwquality ) From d5e678157defbe60ed9c822ebea93342e0770c31 Mon Sep 17 00:00:00 2001 From: Artem Grinev Date: Tue, 10 Nov 2020 01:23:10 +0300 Subject: [PATCH 43/53] Changed TRANSLITERATOR_ID type to array --- src/modules/users/Config.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/users/Config.cpp b/src/modules/users/Config.cpp index e94116bd7..b85ba67bd 100644 --- a/src/modules/users/Config.cpp +++ b/src/modules/users/Config.cpp @@ -28,7 +28,7 @@ #include //Did my best choosing compound ID -static const char* TRANSLITERATOR_ID = "Russian-Latin/BGN;" +static const char TRANSLITERATOR_ID[] = "Russian-Latin/BGN;" "Greek-Latin/UNGEGN;" "Any-Latin;" "Latin-ASCII"; From da5fb2d3e1923f11166ddbba7f699e019c028271 Mon Sep 17 00:00:00 2001 From: Artem Grinev Date: Tue, 10 Nov 2020 01:40:08 +0300 Subject: [PATCH 44/53] Improved comment --- src/modules/users/Config.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/modules/users/Config.cpp b/src/modules/users/Config.cpp index b85ba67bd..b0af2d5c8 100644 --- a/src/modules/users/Config.cpp +++ b/src/modules/users/Config.cpp @@ -27,11 +27,12 @@ #include #include -//Did my best choosing compound ID +//Needed for ICU to apply some transliteration ruleset. +//Still needs to be adjusted to fit the needs of the most of users static const char TRANSLITERATOR_ID[] = "Russian-Latin/BGN;" - "Greek-Latin/UNGEGN;" - "Any-Latin;" - "Latin-ASCII"; + "Greek-Latin/UNGEGN;" + "Any-Latin;" + "Latin-ASCII"; #endif static const QRegExp USERNAME_RX( "^[a-z_][a-z0-9_-]*[$]?$" ); From ca033583a4cac43ed507be286ba3399895643406 Mon Sep 17 00:00:00 2001 From: Artem Grinev Date: Tue, 10 Nov 2020 01:47:07 +0300 Subject: [PATCH 45/53] Simplified logic a bit, made punctuation handling more correct --- src/modules/users/Config.cpp | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/src/modules/users/Config.cpp b/src/modules/users/Config.cpp index b0af2d5c8..37cd990d1 100644 --- a/src/modules/users/Config.cpp +++ b/src/modules/users/Config.cpp @@ -307,12 +307,15 @@ transliterate( const QString& input ) return input; } - auto transliterable = icu::UnicodeString( input.utf16() ); - + icu::UnicodeString transliterable( input.utf16() ); transliterator->transliterate( transliterable ); - return QString::fromUtf16( transliterable.getTerminatedBuffer() ); - +} +#else +static QString +transliterate( const QString& input ) +{ + return input; } #endif @@ -374,13 +377,8 @@ Config::setFullName( const QString& name ) // Build login and hostname, if needed static QRegExp rx( "[^a-zA-Z0-9 ]", Qt::CaseInsensitive ); -#ifdef HAVE_ICU - QString cleanName = transliterate(name); - cleanName.replace("'", ""); -#else - QString cleanName = name; -#endif - cleanName = CalamaresUtils::removeDiacritics( cleanName ).replace( rx, " " ).toLower().simplified(); + + QString cleanName = CalamaresUtils::removeDiacritics( transliterate( name ) ).replace( QRegExp( "[-']" ), "").replace( rx, " " ).toLower().simplified(); QStringList cleanParts = cleanName.split( ' ' ); From 16eca3c1bee66fd071663e55f362d72101ff84b9 Mon Sep 17 00:00:00 2001 From: Artem Grinev Date: Tue, 10 Nov 2020 01:54:21 +0300 Subject: [PATCH 46/53] [users] Apply code format --- src/modules/users/Config.cpp | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/modules/users/Config.cpp b/src/modules/users/Config.cpp index 37cd990d1..eb9832d70 100644 --- a/src/modules/users/Config.cpp +++ b/src/modules/users/Config.cpp @@ -97,7 +97,7 @@ Config::Config( QObject* parent ) connect( this, &Config::requireStrongPasswordsChanged, this, &Config::checkReady ); } -Config::~Config() {} +Config::~Config() { } void Config::setUserShell( const QString& shell ) @@ -297,10 +297,10 @@ transliterate( const QString& input ) { static auto ue = UErrorCode::U_ZERO_ERROR; static auto transliterator = std::unique_ptr< icu::Transliterator >( - icu::Transliterator::createInstance( TRANSLITERATOR_ID, UTRANS_FORWARD, ue ) - ); + icu::Transliterator::createInstance( TRANSLITERATOR_ID, UTRANS_FORWARD, ue ) ); - if( ue != UErrorCode::U_ZERO_ERROR ){ + if ( ue != UErrorCode::U_ZERO_ERROR ) + { cWarning() << "Can't create transliterator"; //it'll be checked later for non-ASCII characters @@ -378,7 +378,11 @@ Config::setFullName( const QString& name ) // Build login and hostname, if needed static QRegExp rx( "[^a-zA-Z0-9 ]", Qt::CaseInsensitive ); - QString cleanName = CalamaresUtils::removeDiacritics( transliterate( name ) ).replace( QRegExp( "[-']" ), "").replace( rx, " " ).toLower().simplified(); + QString cleanName = CalamaresUtils::removeDiacritics( transliterate( name ) ) + .replace( QRegExp( "[-']" ), "" ) + .replace( rx, " " ) + .toLower() + .simplified(); QStringList cleanParts = cleanName.split( ' ' ); From 3069f4133fa38aa36a02c902111594b857dedaab Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Tue, 10 Nov 2020 12:08:49 +0100 Subject: [PATCH 47/53] Changes: post-release housekeeping --- CHANGES | 16 ++++++++++++++++ CMakeLists.txt | 4 ++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/CHANGES b/CHANGES index 1083f4ad2..a9b179e6b 100644 --- a/CHANGES +++ b/CHANGES @@ -7,6 +7,22 @@ contributors are listed. Note that Calamares does not have a historical changelog -- this log starts with version 3.2.0. The release notes on the website will have to do for older versions. +# 3.2.34 (unreleased) # + +This release contains contributions from (alphabetically by first name): + - Artem Grinev + +## Core ## + - No core changes yet + +## Modules ## + - In the *users* module, warnings about the strength of the password + are now correctly pluralized when possible. + - In the *users* module, if ICU is installed, the user's full name is + automatically transliterated to US-ASCII (for some locales; this will + need tweaking) so that the login name is acceptable. (Thanks Artem) + + # 3.2.33 (2020-11-09) # This release contains contributions from (alphabetically by first name): diff --git a/CMakeLists.txt b/CMakeLists.txt index 96bd0a9ec..fbd9d9432 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -41,10 +41,10 @@ # TODO:3.3: Require CMake 3.12 cmake_minimum_required( VERSION 3.3 FATAL_ERROR ) project( CALAMARES - VERSION 3.2.33 + VERSION 3.2.34 LANGUAGES C CXX ) -set( CALAMARES_VERSION_RC 0 ) # Set to 0 during release cycle, 1 during development +set( CALAMARES_VERSION_RC 1 ) # Set to 0 during release cycle, 1 during development ### OPTIONS # From 8f590848bde053e0e2eaca492222b9537e5a4e56 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 11 Nov 2020 12:45:19 +0100 Subject: [PATCH 48/53] [plasmalnf] Simplify code - Look-and-Feel job has no status to speak of - Coding style --- src/modules/plasmalnf/PlasmaLnfJob.cpp | 17 ++++------------- src/modules/plasmalnf/PlasmaLnfJob.h | 1 - 2 files changed, 4 insertions(+), 14 deletions(-) diff --git a/src/modules/plasmalnf/PlasmaLnfJob.cpp b/src/modules/plasmalnf/PlasmaLnfJob.cpp index 0721bcd88..7ffe3aff7 100644 --- a/src/modules/plasmalnf/PlasmaLnfJob.cpp +++ b/src/modules/plasmalnf/PlasmaLnfJob.cpp @@ -20,30 +20,19 @@ PlasmaLnfJob::PlasmaLnfJob( const QString& lnfPath, const QString& id ) { } - PlasmaLnfJob::~PlasmaLnfJob() {} - QString PlasmaLnfJob::prettyName() const { return tr( "Plasma Look-and-Feel Job" ); } -QString -PlasmaLnfJob::prettyStatusMessage() const -{ - return prettyName(); -} - - Calamares::JobResult PlasmaLnfJob::exec() { - cDebug() << "Plasma Look-and-Feel Job"; - - auto system = CalamaresUtils::System::instance(); - Calamares::GlobalStorage* gs = Calamares::JobQueue::instance()->globalStorage(); + auto* system = CalamaresUtils::System::instance(); + auto* gs = Calamares::JobQueue::instance()->globalStorage(); QStringList command( { "sudo", "-E", @@ -59,8 +48,10 @@ PlasmaLnfJob::exec() int r = system->targetEnvCall( command ); if ( r ) + { return Calamares::JobResult::error( tr( "Could not select KDE Plasma Look-and-Feel package" ), tr( "Could not select KDE Plasma Look-and-Feel package" ) ); + } return Calamares::JobResult::ok(); } diff --git a/src/modules/plasmalnf/PlasmaLnfJob.h b/src/modules/plasmalnf/PlasmaLnfJob.h index 83360434e..4eaf81014 100644 --- a/src/modules/plasmalnf/PlasmaLnfJob.h +++ b/src/modules/plasmalnf/PlasmaLnfJob.h @@ -24,7 +24,6 @@ public: ~PlasmaLnfJob() override; QString prettyName() const override; - QString prettyStatusMessage() const override; Calamares::JobResult exec() override; From 76b09819184c2a1a2c31b9cec148b1400bb5dd43 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 11 Nov 2020 12:57:40 +0100 Subject: [PATCH 49/53] [plasmalnf] Apply workaround for lookandfeeltool The lookandfeeltool does not (always?) write the LookAndFeelPackage key that the KCM does -- and which this module reads on startup to find the default LnF. This seems to be a regression in recent lookandfeeltool versions (or in the KCM code that backs it). Workaround supplied by jghodd. Fixes #1573 --- src/modules/plasmalnf/PlasmaLnfJob.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/modules/plasmalnf/PlasmaLnfJob.cpp b/src/modules/plasmalnf/PlasmaLnfJob.cpp index 7ffe3aff7..3b550d50a 100644 --- a/src/modules/plasmalnf/PlasmaLnfJob.cpp +++ b/src/modules/plasmalnf/PlasmaLnfJob.cpp @@ -14,6 +14,11 @@ #include "utils/CalamaresUtilsSystem.h" #include "utils/Logger.h" +#ifdef WITH_KCONFIG +#include +#include +#endif + PlasmaLnfJob::PlasmaLnfJob( const QString& lnfPath, const QString& id ) : m_lnfPath( lnfPath ) , m_id( id ) @@ -53,5 +58,15 @@ PlasmaLnfJob::exec() tr( "Could not select KDE Plasma Look-and-Feel package" ) ); } +#ifdef WITH_KCONFIG + // This is a workaround for lookandfeeltool **not** writing + // the LookAndFeelPackage key in kdeglobals; this happens + // with the lnftool and Plasma 5.20 (possibly other combinations + // as well). + QString targetConfig = system->targetPath( "/home/" + gs->value( "username" ).toString() + "/.config/kdeglobals" ); + KConfigGroup cg( KSharedConfig::openConfig( targetConfig ), "KDE" ); + cg.writeEntry( "LookAndFeelPackage", m_id ); +#endif + return Calamares::JobResult::ok(); } From a8359696caf07b81b85db8acad2d3f44720d07fa Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Wed, 11 Nov 2020 13:06:09 +0100 Subject: [PATCH 50/53] [plasmalnf] Remove unnecessary includes --- src/modules/plasmalnf/PlasmaLnfViewStep.h | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/modules/plasmalnf/PlasmaLnfViewStep.h b/src/modules/plasmalnf/PlasmaLnfViewStep.h index 46c24c970..74de803c9 100644 --- a/src/modules/plasmalnf/PlasmaLnfViewStep.h +++ b/src/modules/plasmalnf/PlasmaLnfViewStep.h @@ -14,10 +14,6 @@ #include "utils/PluginFactory.h" #include "viewpages/ViewStep.h" -#include -#include -#include - class PlasmaLnfPage; class PLUGINDLLEXPORT PlasmaLnfViewStep : public Calamares::ViewStep From 2e6d632c7cc9958323870c3da25d129140d016b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABl=20PORTAY?= Date: Wed, 11 Nov 2020 12:44:41 -0500 Subject: [PATCH 51/53] [partition] Fix typo --- src/modules/partition/core/Config.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/partition/core/Config.cpp b/src/modules/partition/core/Config.cpp index 55e0d8d0a..0afcee83d 100644 --- a/src/modules/partition/core/Config.cpp +++ b/src/modules/partition/core/Config.cpp @@ -190,7 +190,7 @@ Config::setSwapChoice( int c ) { if ( ( c < SwapChoice::NoSwap ) || ( c > SwapChoice::SwapFile ) ) { - cWarning() << "Instalid swap choice (int)" << c; + cWarning() << "Invalid swap choice (int)" << c; c = SwapChoice::NoSwap; } setSwapChoice( static_cast< SwapChoice >( c ) ); From fdfe3937e92531a5911734c67d7fffbe6d364b76 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Thu, 12 Nov 2020 14:50:21 +0100 Subject: [PATCH 52/53] [keyboard] Tell the keyboard preview to update on config changes These calls to setLayout() and setVariant() got lost in the transition to Config object, in 5afe5413. Reported by Harald Sitter. --- src/modules/keyboard/KeyboardLayoutModel.cpp | 10 ++++++++ src/modules/keyboard/KeyboardLayoutModel.h | 7 ++++++ src/modules/keyboard/KeyboardPage.cpp | 25 ++++++++++++-------- 3 files changed, 32 insertions(+), 10 deletions(-) diff --git a/src/modules/keyboard/KeyboardLayoutModel.cpp b/src/modules/keyboard/KeyboardLayoutModel.cpp index 8b5906699..8a7664d97 100644 --- a/src/modules/keyboard/KeyboardLayoutModel.cpp +++ b/src/modules/keyboard/KeyboardLayoutModel.cpp @@ -198,6 +198,16 @@ KeyboardLayoutModel::item( const int& index ) const return m_layouts.at( index ); } +QString +KeyboardLayoutModel::key( int index ) const +{ + if ( index >= m_layouts.count() || index < 0 ) + { + return QString(); + } + return m_layouts.at( index ).first; +} + void KeyboardLayoutModel::init() { diff --git a/src/modules/keyboard/KeyboardLayoutModel.h b/src/modules/keyboard/KeyboardLayoutModel.h index 99b204573..c2306c001 100644 --- a/src/modules/keyboard/KeyboardLayoutModel.h +++ b/src/modules/keyboard/KeyboardLayoutModel.h @@ -118,6 +118,13 @@ public: int currentIndex() const; const QPair< QString, KeyboardGlobal::KeyboardInfo > item( const int& index ) const; + /** @brief xkb key for a given index (row) + * + * This is like calling data( QModelIndex( index ), KeyboardLayoutKeyRole ).toString(), + * but shorter and faster. Can return an empty string if index is invalid. + */ + QString key( int index ) const; + protected: QHash< int, QByteArray > roleNames() const override; diff --git a/src/modules/keyboard/KeyboardPage.cpp b/src/modules/keyboard/KeyboardPage.cpp index 7522056a3..e69ee579f 100644 --- a/src/modules/keyboard/KeyboardPage.cpp +++ b/src/modules/keyboard/KeyboardPage.cpp @@ -70,8 +70,9 @@ KeyboardPage::KeyboardPage( Config* config, QWidget* parent ) cDebug() << "Variants now" << model->rowCount() << model->currentIndex(); } - connect( - ui->buttonRestore, &QPushButton::clicked, [config = config] { config->keyboardModels()->setCurrentIndex(); } ); + connect( ui->buttonRestore, &QPushButton::clicked, [ config = config ] { + config->keyboardModels()->setCurrentIndex(); + } ); connect( ui->physicalModelSelector, QOverload< int >::of( &QComboBox::currentIndexChanged ), @@ -82,18 +83,22 @@ KeyboardPage::KeyboardPage( Config* config, QWidget* parent ) ui->physicalModelSelector, &QComboBox::setCurrentIndex ); - connect( ui->layoutSelector->selectionModel(), - &QItemSelectionModel::currentChanged, - [this]( const QModelIndex& current ) { m_config->keyboardLayouts()->setCurrentIndex( current.row() ); } ); - connect( config->keyboardLayouts(), &KeyboardLayoutModel::currentIndexChanged, [this]( int index ) { + connect( + ui->layoutSelector->selectionModel(), + &QItemSelectionModel::currentChanged, + [ this ]( const QModelIndex& current ) { m_config->keyboardLayouts()->setCurrentIndex( current.row() ); } ); + connect( config->keyboardLayouts(), &KeyboardLayoutModel::currentIndexChanged, [ this ]( int index ) { ui->layoutSelector->setCurrentIndex( m_config->keyboardLayouts()->index( index ) ); + m_keyboardPreview->setLayout( m_config->keyboardLayouts()->key( index ) ); } ); - connect( ui->variantSelector->selectionModel(), - &QItemSelectionModel::currentChanged, - [this]( const QModelIndex& current ) { m_config->keyboardVariants()->setCurrentIndex( current.row() ); } ); - connect( config->keyboardVariants(), &KeyboardVariantsModel::currentIndexChanged, [this]( int index ) { + connect( + ui->variantSelector->selectionModel(), + &QItemSelectionModel::currentChanged, + [ this ]( const QModelIndex& current ) { m_config->keyboardVariants()->setCurrentIndex( current.row() ); } ); + connect( config->keyboardVariants(), &KeyboardVariantsModel::currentIndexChanged, [ this ]( int index ) { ui->variantSelector->setCurrentIndex( m_config->keyboardVariants()->index( index ) ); + m_keyboardPreview->setVariant( m_config->keyboardVariants()->key( index ) ); } ); CALAMARES_RETRANSLATE_SLOT( &KeyboardPage::retranslate ) } From 03e09cb7e6d07bee0e49495571bb4579bad1dda8 Mon Sep 17 00:00:00 2001 From: Adriaan de Groot Date: Thu, 12 Nov 2020 15:29:15 +0100 Subject: [PATCH 53/53] [keyboard] When changing layouts, reset variant - Need to update the variant that is in use, **and** explicitly update it in the widget, in order to re-load the keyboard image for the newly-selected layout+variant. --- src/modules/keyboard/KeyboardLayoutModel.cpp | 1 + src/modules/keyboard/KeyboardPage.cpp | 1 + 2 files changed, 2 insertions(+) diff --git a/src/modules/keyboard/KeyboardLayoutModel.cpp b/src/modules/keyboard/KeyboardLayoutModel.cpp index 8a7664d97..34a1dec88 100644 --- a/src/modules/keyboard/KeyboardLayoutModel.cpp +++ b/src/modules/keyboard/KeyboardLayoutModel.cpp @@ -269,5 +269,6 @@ KeyboardVariantsModel::setVariants( QMap< QString, QString > variants ) { m_list << ModelInfo { variants[ key ], key }; } + m_currentIndex = -1; endResetModel(); } diff --git a/src/modules/keyboard/KeyboardPage.cpp b/src/modules/keyboard/KeyboardPage.cpp index e69ee579f..5044d9bb6 100644 --- a/src/modules/keyboard/KeyboardPage.cpp +++ b/src/modules/keyboard/KeyboardPage.cpp @@ -90,6 +90,7 @@ KeyboardPage::KeyboardPage( Config* config, QWidget* parent ) connect( config->keyboardLayouts(), &KeyboardLayoutModel::currentIndexChanged, [ this ]( int index ) { ui->layoutSelector->setCurrentIndex( m_config->keyboardLayouts()->index( index ) ); m_keyboardPreview->setLayout( m_config->keyboardLayouts()->key( index ) ); + m_keyboardPreview->setVariant( m_config->keyboardVariants()->key( m_config->keyboardVariants()->currentIndex() ) ); } ); connect(