diff --git a/font-list.csv b/font-list.csv
new file mode 100644
index 0000000..5834028
--- /dev/null
+++ b/font-list.csv
@@ -0,0 +1,377 @@
+FONT;DESCRIPTION
+Agafari-12;
+Agafari-14;
+Agafari-16;
+aply16;
+cp850-8x8;
+cp850-8x14;
+cp850-8x16;
+cp865-8x8;
+cp865-8x14;
+cp865-8x16;
+cp866-8x8;
+cp866-8x14;
+cp866-8x16;
+cp1250;
+cyr-sun16;Fonts that support Cyrillic characters
+Cyr_a8x8;Fonts that support Cyrillic characters
+Cyr_a8x14;Fonts that support Cyrillic characters
+Cyr_a8x16;Fonts that support Cyrillic characters
+default8x9;
+default8x16;
+drdos8x6;
+drdos8x8;
+drdos8x14;
+drdos8x16;
+eurlatgr;
+GohaClassic-12;
+GohaClassic-14;
+GohaClassic-16;
+Goha-12;
+Goha-14;
+Goha-16;
+gr737a-8x8;
+gr737a-9x14;
+gr737a-9x16;
+gr737b-8x11;
+gr737b-9x16-medieval;
+gr737c-8x6;
+gr737c-8x7;
+gr737c-8x8;
+gr737c-8x14;
+gr737c-8x16;
+gr737d-8x16;
+gr928a-8x14;
+gr928a-8x16;
+gr928b-8x14;
+gr928b-8x16;
+gr928-8x16-thin;
+gr928-9x14;
+gr928-9x16;
+greek-polytonic;
+iso01-12x22;
+iso02-12x22;
+iso07u-16;
+koi8r.8x8;Fonts that support Cyrillic characters
+koi8u_8x8;Fonts that support Cyrillic characters
+koi8u_8x14;Fonts that support Cyrillic characters
+koi8u_8x16;Fonts that support Cyrillic characters
+koi8-14;Fonts that support Cyrillic characters
+lat0-08;
+lat0-10;
+lat0-12;
+lat0-14;
+lat0-16;
+lat0-sun16;
+lat1-08;
+lat1-10;
+lat1-12;
+lat1-14;
+lat1-16;
+lat2a-16;
+lat2-08;
+lat2-10;
+lat2-12;
+lat2-14;
+lat2-16;
+lat2-sun16;
+Lat2-Terminus16;
+lat4a-08;
+lat4a-10;
+lat4a-12;
+lat4a-14;
+lat4a-16+;
+lat4a-16;
+lat4a-19;
+lat4-08;
+lat4-10;
+lat4-12;
+lat4-14;
+lat4-16+;
+lat4-16;
+lat4-19;
+lat5-12;
+lat5-14;
+lat5-16;
+lat7a-14;
+lat7a-16;
+lat7-14;
+lat9u-08;
+lat9u-10;
+lat9u-12;
+lat9u-14;
+lat9u-16;
+lat9v-08;
+lat9v-10;
+lat9v-12;
+lat9v-14;
+lat9v-16;
+lat9w-08;
+lat9w-10;
+lat9w-12;
+lat9w-14;
+lat9w-16;
+lat9-08;
+lat9-10;
+lat9-12;
+lat9-14;
+lat9-16;
+LatArCyrHeb-08;Fonts that support Latin Arabic Cyrillic Hebrew characters
+LatArCyrHeb-14;Fonts that support Latin Arabic Cyrillic Hebrew characters
+LatArCyrHeb-16+;Fonts that support Latin Arabic Cyrillic Hebrew characters
+LatArCyrHeb-16;Fonts that support Latin Arabic Cyrillic Hebrew characters
+LatArCyrHeb-19;Fonts that support Latin Arabic Cyrillic Hebrew characters
+latarcyrheb-sun16;Fonts that support Latin Arabic Cyrillic Hebrew characters
+latarcyrheb-sun32;Fonts that support Latin Arabic Cyrillic Hebrew characters
+LatGrkCyr-8x16;Fonts that support Latin Greek Cyrillic characters
+LatGrkCyr-12x22;Fonts that support Latin Greek Cyrillic characters
+LatKaCyrHeb-14;
+pancyrillic.f16;
+ruscii_8x8;Fonts that support Cyrillic characters
+ruscii_8x16;Fonts that support Cyrillic characters
+solar24x32;
+sun12x22;
+tcvn8x16;
+ter-112n;Terminus fonts that support Cyrillic characters
+ter-114b;
+ter-114n;
+ter-116b;
+ter-116n;
+ter-118b;
+ter-118n;
+ter-120b;
+ter-120n;
+ter-122b;
+ter-122n;
+ter-124b;
+ter-124n;
+ter-128b;
+ter-128n;
+ter-132b;
+ter-132n;
+ter-212n;
+ter-214b;
+ter-214n;
+ter-216b;
+ter-216n;
+ter-218b;
+ter-218n;
+ter-220b;
+ter-220n;
+ter-222b;
+ter-222n;
+ter-224b;
+ter-224n;
+ter-228b;
+ter-228n;
+ter-232b;
+ter-232n;
+ter-712n;
+ter-714b;
+ter-714n;
+ter-716b;
+ter-716n;
+ter-718b;
+ter-718n;
+ter-720b;
+ter-720n;
+ter-722b;
+ter-722n;
+ter-724b;
+ter-724n;
+ter-728b;
+ter-728n;
+ter-732b;
+ter-732n;
+ter-912n;
+ter-914b;
+ter-914n;
+ter-916b;
+ter-916n;
+ter-918b;
+ter-918n;
+ter-920b;
+ter-920n;
+ter-922b;
+ter-922n;
+ter-924b;
+ter-924n;
+ter-928b;
+ter-928n;
+ter-932b;
+ter-932n;
+ter-c12n;
+ter-c14b;
+ter-c14n;
+ter-c16b;
+ter-c16n;
+ter-c18b;
+ter-c18n;
+ter-c20b;
+ter-c20n;
+ter-c22b;
+ter-c22n;
+ter-c24b;
+ter-c24n;
+ter-c28b;
+ter-c28n;
+ter-c32b;
+ter-c32n;
+ter-d12n;
+ter-d14b;
+ter-d14n;
+ter-d16b;
+ter-d16n;
+ter-d18b;
+ter-d18n;
+ter-d20b;
+ter-d20n;
+ter-d22b;
+ter-d22n;
+ter-d24b;
+ter-d24n;
+ter-d28b;
+ter-d28n;
+ter-d32b;
+ter-d32n;
+ter-g12n;
+ter-g14b;
+ter-g14n;
+ter-g16b;
+ter-g16n;
+ter-g18b;
+ter-g18n;
+ter-g20b;
+ter-g20n;
+ter-g22b;
+ter-g22n;
+ter-g24b;
+ter-g24n;
+ter-g28b;
+ter-g28n;
+ter-g32b;
+ter-g32n;
+ter-h12n;
+ter-h14b;
+ter-h14n;
+ter-h16b;
+ter-h16n;
+ter-h18b;
+ter-h18n;
+ter-h20b;
+ter-h20n;
+ter-h22b;
+ter-h22n;
+ter-h24b;
+ter-h24n;
+ter-h28b;
+ter-h28n;
+ter-h32b;
+ter-h32n;
+ter-i12n;
+ter-i14b;
+ter-i14n;
+ter-i16b;
+ter-i16n;
+ter-i18b;
+ter-i18n;
+ter-i20b;
+ter-i20n;
+ter-i22b;
+ter-i22n;
+ter-i24b;
+ter-i24n;
+ter-i28b;
+ter-i28n;
+ter-i32b;
+ter-i32n;
+ter-k12n;
+ter-k14b;
+ter-k14n;
+ter-k16b;
+ter-k16n;
+ter-k18b;
+ter-k18n;
+ter-k20b;
+ter-k20n;
+ter-k22b;
+ter-k22n;
+ter-k24b;
+ter-k24n;
+ter-k28b;
+ter-k28n;
+ter-k32b;
+ter-k32n;
+ter-m12n;
+ter-m14b;
+ter-m14n;
+ter-m16b;
+ter-m16n;
+ter-m18b;
+ter-m18n;
+ter-m20b;
+ter-m20n;
+ter-m22b;
+ter-m22n;
+ter-m24b;
+ter-m24n;
+ter-m28b;
+ter-m28n;
+ter-m32b;
+ter-m32n;
+ter-p12n;
+ter-p14b;
+ter-p14n;
+ter-p16b;
+ter-p16n;
+ter-p18b;
+ter-p18n;
+ter-p20b;
+ter-p20n;
+ter-p22b;
+ter-p22n;
+ter-p24b;
+ter-p24n;
+ter-p28b;
+ter-p28n;
+ter-p32b;
+ter-p32n;
+ter-u12n;
+ter-u14b;
+ter-u14n;
+ter-u16b;
+ter-u16n;
+ter-u18b;
+ter-u18n;
+ter-u20b;
+ter-u20n;
+ter-u22b;
+ter-u22n;
+ter-u24b;
+ter-u24n;
+ter-u28b;
+ter-u28n;
+ter-u32b;
+ter-u32n;
+ter-v12n;
+ter-v14b;
+ter-v14n;
+ter-v16b;
+ter-v16n;
+ter-v18b;
+ter-v18n;
+ter-v20b;
+ter-v20n;
+ter-v22b;
+ter-v22n;
+ter-v24b;
+ter-v24n;
+ter-v28b;
+ter-v28n;
+ter-v32b;
+ter-v32n;
+UniCyrExt_8x16;
+UniCyr_8x8;
+UniCyr_8x14;
+UniCyr_8x16;
+viscii10-8x16;
\ No newline at end of file
diff --git a/gresource.xml b/gresource.xml
index 507d914..056455f 100644
--- a/gresource.xml
+++ b/gresource.xml
@@ -4,11 +4,14 @@
ubl-settings-keyboard.glade
ubl-settings-keyboard-layouts.glade
ubl-settings-keyboard-options.glade
+ ubl-settings-keyboard-keymaps.glade
+ ubl-settings-keyboard-font.glade
ubl-settings-keyboard.css
- layouts.csv
+ keymap-list.csv
+ font-list.csv
\ No newline at end of file
diff --git a/keymap-list.csv b/keymap-list.csv
new file mode 100644
index 0000000..ad2f730
--- /dev/null
+++ b/keymap-list.csv
@@ -0,0 +1,248 @@
+KEYMAP;GROUP;DESCRIPTION
+3l;;
+adnw;;
+amiga-de;amiga;
+amiga-us;amiga;
+ANSI-dvorak;;
+apple-a1048-sv;mac;
+apple-a1243-sv-fn-reverse;mac;
+apple-a1243-sv;mac;
+apple-internal-0x0253-sv-fn-reverse;mac;
+apple-internal-0x0253-sv;mac;
+applkey;;
+atari-de;atari;
+atari-se;atari;
+atari-uk-falcon;atari;
+atari-us;atari;
+azerty;;
+backspace;;
+bashkir;;
+be-latin1;;
+bg-cp855;;
+bg-cp1251;;
+bg_bds-cp1251;;
+bg_bds-utf8;;
+bg_pho-cp1251;;
+bg_pho-utf8;;
+bone;;
+br-abnt2;;
+br-abnt;;
+br-latin1-abnt2;;
+br-latin1-us;;
+bywin-cp1251;;
+by-cp1251;;
+by;;
+carpalx-full;;
+carpalx;;
+ca;;
+cf;;
+colemak;;
+croat;;
+ctrl;;
+cz-cp1250;;
+cz-lat2-prog;;
+cz-lat2;;
+cz-qwertz;;
+cz-us-qwertz;;
+cz;;
+defkeymap;;
+defkeymap_V1.0;;
+de-latin1-nodeadkeys;;
+de-latin1;;
+de-mobii;;
+de;;
+de_alt_UTF-8;;
+de_CH-latin1;;
+dk-latin1;;
+dk;;
+dvorak-ca-fr;;
+dvorak-de;;
+dvorak-es;;
+dvorak-fr;;
+dvorak-la;;
+dvorak-l;;
+dvorak-no;;
+dvorak-programmer;;
+dvorak-ru;;
+dvorak-r;;
+dvorak-sv-a1;;
+dvorak-sv-a5;;
+dvorak-ukp;;
+dvorak-uk;;
+dvorak;;
+emacs2;;
+emacs;;
+en;pine;
+es-cp850;;
+es-olpc;;
+es;;
+et-nodeadkeys;;
+et;;
+euro1;;
+euro2;;
+euro;;
+fa;qwerty;Persian ISIRI-2901 Unicode console. Toggled by Shift+AltGr key.
+fi;;
+fr-bepo-latin9;;
+fr-bepo;;
+fr-latin1;;
+fr-latin9;;
+fr-pc;;
+fr;;
+fr_CH-latin1;;
+fr_CH;;
+gr-pc;;
+gr;;
+hu101;;
+hu;;
+ie;;
+il-heb;;
+il-phonetic;;
+il;;
+is-latin1-us;;
+is-latin1;;
+it2;;
+it-ibm;;
+it;;
+jp106;;
+kazakh;;
+keypad;;
+koy;;
+kyrgyz;;
+ky_alt_sh-UTF-8;;
+la-latin1;;
+lt.baltic;;
+lt.l4;;
+lt;;
+lv-tilde;;
+lv;;
+mac-be;mac;
+mac-de-latin1-nodeadkeys;mac;
+mac-de-latin1;mac;
+mac-de_CH;mac;
+mac-dk-latin1;mac;
+mac-dvorak;mac;
+mac-es;mac;
+mac-euro2;mac;
+mac-euro;mac;
+mac-fi-latin1;mac;
+mac-fr-legacy;mac;
+mac-fr;mac;
+mac-fr_CH-latin1;mac;
+mac-it;mac;
+mac-no-latin1;mac;
+mac-pl;mac;
+mac-pt-latin1;mac;
+mac-se;mac;
+mac-template;mac;
+mac-uk;mac;
+mac-us;mac;
+mk0;;
+mk-cp1251;;
+mk-utf;;
+mk;;
+mod-dh-ansi-us-awing;;
+mod-dh-ansi-us-fatz-wide;;
+mod-dh-ansi-us-fatz;;
+mod-dh-ansi-us-wide;;
+mod-dh-ansi-us;;
+mod-dh-iso-uk-wide;;
+mod-dh-iso-uk;;
+mod-dh-iso-us-wide;;
+mod-dh-iso-us;;
+mod-dh-matrix-us;;
+neoqwertz;;
+neo;;
+nl2;;
+nl;;
+no-latin1;;
+no;;
+pc110;;
+pl1;;
+pl2;;
+pl3;;
+pl4;;
+pl;;
+pt-latin1;;
+pt-latin9;;
+pt-olpc;;
+ro;;
+ro_std;;
+ro_win;;
+ru1;qwerty;
+ru2;qwerty;
+ru3;qwerty;
+ru4;qwerty;
+ruwin_alt-CP1251;qwerty;
+ruwin_alt-KOI8-R;qwerty;
+ruwin_alt-UTF-8;qwerty;
+ruwin_alt_sh-UTF-8;qwerty;
+ruwin_cplk-CP1251;qwerty;
+ruwin_cplk-KOI8-R;qwerty;
+ruwin_cplk-UTF-8;qwerty;
+ruwin_ctrl-CP1251;qwerty;
+ruwin_ctrl-KOI8-R;qwerty;
+ruwin_ctrl-UTF-8;qwerty;
+ruwin_ct_sh-CP1251;qwerty;
+ruwin_ct_sh-KOI8-R;qwerty;
+ruwin_ct_sh-UTF-8;qwerty;
+ru-cp1251;qwerty;Russian CP1251 Cyrillic keyboard.map. "Cyrillic" mode is toggled by Right_Ctrl key and shifted by AltGr key.
+ru-ms;qwerty;
+ru-yawerty;qwerty;
+ru;qwerty;Only Russian UTF-8 keymap (GOST 19768-74) for a 102 key keyboard. Both Ctrl+Shift is used to change rus/lat.
+ru_win;qwerty;
+se-fi-ir209;;
+se-fi-lat6;;
+se-ir209;;
+se-lat6;;
+sg-latin1-lk450;;
+sg-latin1;;
+sg;;
+sk-prog-qwerty;;
+sk-prog-qwertz;;
+sk-qwerty;;
+sk-qwertz;;
+slovene;;
+sr-cy;;
+sr-latin;;
+sundvorak;sun;
+sunkeymap;sun;
+sunt4-es;sun;
+sunt4-fi-latin1;sun;
+sunt4-no-latin1;sun;
+sunt5-cz-us;sun;
+sunt5-de-latin1;sun;
+sunt5-es;sun;
+sunt5-fi-latin1;sun;
+sunt5-fr-latin1;sun;
+sunt5-ru;sun;
+sunt5-uk;sun;
+sunt5-us-cz;sun;
+sunt6-uk;sun;
+sun-pl-altgraph;sun;
+sun-pl;sun;
+sv-latin1;;
+tj_alt-UTF8;;
+tralt;;
+trf-fgGIod;;
+trf;;
+trq;;
+tr_f-latin5;;
+tr_q-latin5;;
+ttwin_alt-UTF-8;;
+ttwin_cplk-UTF-8;;
+ttwin_ctrl-UTF-8;;
+ttwin_ct_sh-UTF-8;;
+ua-cp1251;;
+ua-utf-ws;;
+ua-utf;;
+ua-ws;;
+ua;;
+uk;;
+unicode;;
+us1;;
+us-acentos;;
+us;;
+wangbe2;;
+wangbe;;
+windowkeys;;
\ No newline at end of file
diff --git a/locale/ubl-settings-keyboard-layouts.pot b/locale/ubl-settings-keyboard-layouts.pot
new file mode 100644
index 0000000..89365bb
--- /dev/null
+++ b/locale/ubl-settings-keyboard-layouts.pot
@@ -0,0 +1,1761 @@
+
+msgid "Albanian"
+msgstr ""
+
+msgid "Amharic"
+msgstr ""
+
+msgid "Armenian"
+msgstr ""
+
+msgid "Arabic"
+msgstr ""
+
+msgid "Arabic (Egypt)"
+msgstr ""
+
+msgid "Arabic (Iraq)"
+msgstr ""
+
+msgid "Arabic (Morocco)"
+msgstr ""
+
+msgid "Arabic (Syria)"
+msgstr ""
+
+msgid "Azerbaijani"
+msgstr ""
+
+msgid "Bambara"
+msgstr ""
+
+msgid "Bangla"
+msgstr ""
+
+msgid "Belarusian"
+msgstr ""
+
+msgid "Belgian"
+msgstr ""
+
+msgid "Berber (Algeria, Latin)"
+msgstr ""
+
+msgid "Bosnian"
+msgstr ""
+
+msgid "Braille"
+msgstr ""
+
+msgid "Bulgarian"
+msgstr ""
+
+msgid "Burmese"
+msgstr ""
+
+msgid "Chinese"
+msgstr ""
+
+msgid "Croatian"
+msgstr ""
+
+msgid "Czech"
+msgstr ""
+
+msgid "Danish"
+msgstr ""
+
+msgid "Dari"
+msgstr ""
+
+msgid "Dhivehi"
+msgstr ""
+
+msgid "Dutch"
+msgstr ""
+
+msgid "Dzongkha"
+msgstr ""
+
+msgid "English (Australia)"
+msgstr ""
+
+msgid "English (Cameroon)"
+msgstr ""
+
+msgid "English (Ghana)"
+msgstr ""
+
+msgid "English (New Zealand)"
+msgstr ""
+
+msgid "English (Nigeria)"
+msgstr ""
+
+msgid "English (South Africa)"
+msgstr ""
+
+msgid "English (UK)"
+msgstr ""
+
+msgid "English (US)"
+msgstr ""
+
+msgid "Esperanto"
+msgstr ""
+
+msgid "Estonian"
+msgstr ""
+
+msgid "Faroese"
+msgstr ""
+
+msgid "Filipino"
+msgstr ""
+
+msgid "Finnish"
+msgstr ""
+
+msgid "French"
+msgstr ""
+
+msgid "French (Canada)"
+msgstr ""
+
+msgid "French (Democratic Republic of the Congo)"
+msgstr ""
+
+msgid "French (Togo)"
+msgstr ""
+
+msgid "Georgian"
+msgstr ""
+
+msgid "German"
+msgstr ""
+
+msgid "German (Austria)"
+msgstr ""
+
+msgid "German (Switzerland)"
+msgstr ""
+
+msgid "Greek"
+msgstr ""
+
+msgid "Hebrew"
+msgstr ""
+
+msgid "Hungarian"
+msgstr ""
+
+msgid "Icelandic"
+msgstr ""
+
+msgid "Indian"
+msgstr ""
+
+msgid "Indonesian (Latin)"
+msgstr ""
+
+msgid "Irish"
+msgstr ""
+
+msgid "Italian"
+msgstr ""
+
+msgid "Japanese"
+msgstr ""
+
+msgid "Kazakh"
+msgstr ""
+
+msgid "Khmer (Cambodia)"
+msgstr ""
+
+msgid "Korean"
+msgstr ""
+
+msgid "Kyrgyz"
+msgstr ""
+
+msgid "Lao"
+msgstr ""
+
+msgid "Latvian"
+msgstr ""
+
+msgid "Lithuanian"
+msgstr ""
+
+msgid "Macedonian"
+msgstr ""
+
+msgid "Malay (Jawi, Arabic Keyboard)"
+msgstr ""
+
+msgid "Maltese"
+msgstr ""
+
+msgid "Moldavian"
+msgstr ""
+
+msgid "Mongolian"
+msgstr ""
+
+msgid "Montenegrin"
+msgstr ""
+
+msgid "Nepali"
+msgstr ""
+
+msgid "N'Ko (AZERTY)"
+msgstr ""
+
+msgid "Norwegian"
+msgstr ""
+
+msgid "Persian"
+msgstr ""
+
+msgid "Polish"
+msgstr ""
+
+msgid "Portuguese"
+msgstr ""
+
+msgid "Portuguese (Brazil)"
+msgstr ""
+
+msgid "Romanian"
+msgstr ""
+
+msgid "Russian"
+msgstr ""
+
+msgid "Serbian"
+msgstr ""
+
+msgid "Sinhala (phonetic)"
+msgstr ""
+
+msgid "Slovak"
+msgstr ""
+
+msgid "Slovenian"
+msgstr ""
+
+msgid "Spanish"
+msgstr ""
+
+msgid "Spanish (Latin American)"
+msgstr ""
+
+msgid "Swahili (Kenya)"
+msgstr ""
+
+msgid "Swahili (Tanzania)"
+msgstr ""
+
+msgid "Swedish"
+msgstr ""
+
+msgid "Taiwanese"
+msgstr ""
+
+msgid "Tajik"
+msgstr ""
+
+msgid "Thai"
+msgstr ""
+
+msgid "Tswana"
+msgstr ""
+
+msgid "Turkmen"
+msgstr ""
+
+msgid "Turkish"
+msgstr ""
+
+msgid "Ukrainian"
+msgstr ""
+
+msgid "Urdu (Pakistan)"
+msgstr ""
+
+msgid "Uzbek"
+msgstr ""
+
+msgid "Vietnamese"
+msgstr ""
+
+msgid "Wolof"
+msgstr ""
+
+msgid "Albanian (Plisi)"
+msgstr ""
+
+msgid "Albanian (Veqilharxhi)"
+msgstr ""
+
+msgid "Armenian (phonetic)"
+msgstr ""
+
+msgid "Armenian (alt. phonetic)"
+msgstr ""
+
+msgid "Armenian (eastern)"
+msgstr ""
+
+msgid "Armenian (alt. eastern)"
+msgstr ""
+
+msgid "Armenian (western)"
+msgstr ""
+
+msgid "Arabic (Eastern Arabic numerals)"
+msgstr ""
+
+msgid "Arabic (AZERTY)"
+msgstr ""
+
+msgid "Arabic (AZERTY, Eastern Arabic numerals)"
+msgstr ""
+
+msgid "Arabic (Buckwalter)"
+msgstr ""
+
+msgid "Arabic (Macintosh)"
+msgstr ""
+
+msgid "Arabic (Macintosh, phonetic)"
+msgstr ""
+
+msgid "Arabic (OLPC)"
+msgstr ""
+
+msgid "Kurdish (Iraq, Latin Q)"
+msgstr ""
+
+msgid "Kurdish (Iraq, Latin Alt-Q)"
+msgstr ""
+
+msgid "Kurdish (Iraq, F)"
+msgstr ""
+
+msgid "Kurdish (Iraq, Arabic-Latin)"
+msgstr ""
+
+msgid "Berber (Morocco, Tifinagh)"
+msgstr ""
+
+msgid "Berber (Morocco, Tifinagh alt.)"
+msgstr ""
+
+msgid "alt-Berber (Morocco, Tifinagh phonetic, alt.)"
+msgstr ""
+
+msgid "Berber (Morocco, Tifinagh extended)"
+msgstr ""
+
+msgid "Berber (Morocco, Tifinagh phonetic)"
+msgstr ""
+
+msgid "extended-Berber (Morocco, Tifinagh extended phonetic)"
+msgstr ""
+
+msgid "French (Morocco)"
+msgstr ""
+
+msgid "Tarifit"
+msgstr ""
+
+msgid "Syriac"
+msgstr ""
+
+msgid "Syriac (phonetic)"
+msgstr ""
+
+msgid "Kurdish (Syria, Latin Q)"
+msgstr ""
+
+msgid "Kurdish (Syria, Latin Alt-Q)"
+msgstr ""
+
+msgid "Kurdish (Syria, F)"
+msgstr ""
+
+msgid "Azerbaijani (Cyrillic)"
+msgstr ""
+
+msgid "French (Mali, alt.)"
+msgstr ""
+
+msgid "English (Mali, US, Macintosh)"
+msgstr ""
+
+msgid "English (Mali, US, intl.)"
+msgstr ""
+
+msgid "Bangla (Probhat)"
+msgstr ""
+
+msgid "Belarusian (legacy)"
+msgstr ""
+
+msgid "Belarusian (Latin)"
+msgstr ""
+
+msgid "Belarusian (intl.)"
+msgstr ""
+
+msgid "Belarusian (phonetic)"
+msgstr ""
+
+msgid "Russian (Belarus)"
+msgstr ""
+
+msgid "Belgian (alt.)"
+msgstr ""
+
+msgid "Belgian (Latin-9 only, alt.)"
+msgstr ""
+
+msgid "Belgian (ISO, alt.)"
+msgstr ""
+
+msgid "Belgian (no dead keys)"
+msgstr ""
+
+msgid "Belgian (Wang 724 AZERTY)"
+msgstr ""
+
+msgid "Berber (Algeria, Tifinagh)"
+msgstr ""
+
+msgid "Kabyle (AZERTY, with dead keys)"
+msgstr ""
+
+msgid "gb-Kabyle (QWERTY, UK, with dead keys)"
+msgstr ""
+
+msgid "us-Kabyle (QWERTY, US, with dead keys)"
+msgstr ""
+
+msgid "Arabic (Algeria)"
+msgstr ""
+
+msgid "Bosnian (with guillemets)"
+msgstr ""
+
+msgid "Bosnian (with Bosnian digraphs)"
+msgstr ""
+
+msgid "Bosnian (US, with Bosnian digraphs)"
+msgstr ""
+
+msgid "Bosnian (US)"
+msgstr ""
+
+msgid "Braille (left-handed)"
+msgstr ""
+
+msgid "Braille (left-handed inverted thumb)"
+msgstr ""
+
+msgid "Braille (right-handed)"
+msgstr ""
+
+msgid "Braille (right-handed inverted thumb)"
+msgstr ""
+
+msgid "Bulgarian (traditional phonetic)"
+msgstr ""
+
+msgid "Bulgarian (new phonetic)"
+msgstr ""
+
+msgid "Bulgarian (enhanced)"
+msgstr ""
+
+msgid "Burmese (Zawgyi)"
+msgstr ""
+
+msgid "Mon"
+msgstr ""
+
+msgid "Mon (A1)"
+msgstr ""
+
+msgid "Shan"
+msgstr ""
+
+msgid "Shan (Zawgyi)"
+msgstr ""
+
+msgid "Hanyu Pinyin Letters (with AltGr dead keys)"
+msgstr ""
+
+msgid "Mongolian (Bichig)"
+msgstr ""
+
+msgid "Mongolian (Todo)"
+msgstr ""
+
+msgid "Mongolian (Xibe)"
+msgstr ""
+
+msgid "Mongolian (Manchu)"
+msgstr ""
+
+msgid "Mongolian (Galik)"
+msgstr ""
+
+msgid "Mongolian (Todo Galik)"
+msgstr ""
+
+msgid "Mongolian (Manchu Galik)"
+msgstr ""
+
+msgid "Tibetan"
+msgstr ""
+
+msgid "Tibetan (with ASCII numerals)"
+msgstr ""
+
+msgid "Uyghur"
+msgstr ""
+
+msgid "Croatian (with guillemets)"
+msgstr ""
+
+msgid "Croatian (with Croatian digraphs)"
+msgstr ""
+
+msgid "Croatian (US, with Croatian digraphs)"
+msgstr ""
+
+msgid "Croatian (US)"
+msgstr ""
+
+msgid "Czech (extra backslash)"
+msgstr ""
+
+msgid "Czech (QWERTY)"
+msgstr ""
+
+msgid "Czech (QWERTY, extra backslash)"
+msgstr ""
+
+msgid "Czech (QWERTZ, Windows)"
+msgstr ""
+
+msgid "Czech (QWERTY, Windows)"
+msgstr ""
+
+msgid "Czech (QWERTY, Macintosh)"
+msgstr ""
+
+msgid "Czech (UCW, only accented letters)"
+msgstr ""
+
+msgid "Czech (US, Dvorak, UCW support)"
+msgstr ""
+
+msgid "Russian (Czechia, phonetic)"
+msgstr ""
+
+msgid "Danish (no dead keys)"
+msgstr ""
+
+msgid "Danish (Windows)"
+msgstr ""
+
+msgid "Danish (Macintosh)"
+msgstr ""
+
+msgid "Danish (Macintosh, no dead keys)"
+msgstr ""
+
+msgid "Danish (Dvorak)"
+msgstr ""
+
+msgid "Pashto"
+msgstr ""
+
+msgid "Uzbek (Afghanistan)"
+msgstr ""
+
+msgid "Dari (Afghanistan, OLPC)"
+msgstr ""
+
+msgid "Pashto (Afghanistan, OLPC)"
+msgstr ""
+
+msgid "Uzbek (Afghanistan, OLPC)"
+msgstr ""
+
+msgid "Dutch (US)"
+msgstr ""
+
+msgid "Dutch (Macintosh)"
+msgstr ""
+
+msgid "Dutch (standard)"
+msgstr ""
+
+msgid "French (Cameroon)"
+msgstr ""
+
+msgid "Cameroon Multilingual (QWERTY, intl.)"
+msgstr ""
+
+msgid "Cameroon (AZERTY, intl.)"
+msgstr ""
+
+msgid "Cameroon (Dvorak, intl.)"
+msgstr ""
+
+msgid "Mmuock"
+msgstr ""
+
+msgid "English (Ghana, multilingual)"
+msgstr ""
+
+msgid "English (Ghana, GILLBT)"
+msgstr ""
+
+msgid "Akan"
+msgstr ""
+
+msgid "Avatime"
+msgstr ""
+
+msgid "Ewe"
+msgstr ""
+
+msgid "Fula"
+msgstr ""
+
+msgid "Ga"
+msgstr ""
+
+msgid "Hausa (Ghana)"
+msgstr ""
+
+msgid "Maori"
+msgstr ""
+
+msgid "Hausa (Nigeria)"
+msgstr ""
+
+msgid "Igbo"
+msgstr ""
+
+msgid "Yoruba"
+msgstr ""
+
+msgid "English (UK, extended, Windows)"
+msgstr ""
+
+msgid "English (UK, intl., with dead keys)"
+msgstr ""
+
+msgid "English (UK, Dvorak)"
+msgstr ""
+
+msgid "English (UK, Dvorak, with UK punctuation)"
+msgstr ""
+
+msgid "English (UK, Macintosh)"
+msgstr ""
+
+msgid "English (UK, Macintosh, intl.)"
+msgstr ""
+
+msgid "English (UK, Colemak)"
+msgstr ""
+
+msgid "English (UK, Colemak-DH)"
+msgstr ""
+
+msgid "Scottish Gaelic"
+msgstr ""
+
+msgid "Polish (British keyboard)"
+msgstr ""
+
+msgid "English (US, euro on 5)"
+msgstr ""
+
+msgid "English (US, intl., with dead keys)"
+msgstr ""
+
+msgid "English (US, alt. intl.)"
+msgstr ""
+
+msgid "English (intl., with AltGr dead keys)"
+msgstr ""
+
+msgid "English (Macintosh)"
+msgstr ""
+
+msgid "English (Colemak)"
+msgstr ""
+
+msgid "English (Colemak-DH)"
+msgstr ""
+
+msgid "English (Colemak-DH Wide)"
+msgstr ""
+
+msgid "English (Colemak-DH Ortholinear)"
+msgstr ""
+
+msgid "English (Colemak-DH ISO)"
+msgstr ""
+
+msgid "English (Colemak-DH Wide ISO)"
+msgstr ""
+
+msgid "English (Dvorak)"
+msgstr ""
+
+msgid "English (Dvorak, intl., with dead keys)"
+msgstr ""
+
+msgid "alt-English (Dvorak, alt. intl.)"
+msgstr ""
+
+msgid "English (Dvorak, left-handed)"
+msgstr ""
+
+msgid "English (Dvorak, right-handed)"
+msgstr ""
+
+msgid "English (classic Dvorak)"
+msgstr ""
+
+msgid "English (programmer Dvorak)"
+msgstr ""
+
+msgid "English (Dvorak, Macintosh)"
+msgstr ""
+
+msgid "English (Norman)"
+msgstr ""
+
+msgid "English (US, Symbolic)"
+msgstr ""
+
+msgid "English (Workman)"
+msgstr ""
+
+msgid "English (Workman, intl., with dead keys)"
+msgstr ""
+
+msgid "English (the divide/multiply toggle the layout)"
+msgstr ""
+
+msgid "Cherokee"
+msgstr ""
+
+msgid "Hawaiian"
+msgstr ""
+
+msgid "Russian (US, phonetic)"
+msgstr ""
+
+msgid "Serbo-Croatian (US)"
+msgstr ""
+
+msgid "Esperanto (legacy)"
+msgstr ""
+
+msgid "Estonian (no dead keys)"
+msgstr ""
+
+msgid "Estonian (Dvorak)"
+msgstr ""
+
+msgid "Estonian (US)"
+msgstr ""
+
+msgid "Faroese (no dead keys)"
+msgstr ""
+
+msgid "Filipino (QWERTY, Baybayin)"
+msgstr ""
+
+msgid "Filipino (Capewell-Dvorak, Latin)"
+msgstr ""
+
+msgid "dvorak-Filipino (Capewell-Dvorak, Baybayin)"
+msgstr ""
+
+msgid "Filipino (Capewell-QWERF 2006, Latin)"
+msgstr ""
+
+msgid "qwerf2k6-Filipino (Capewell-QWERF 2006, Baybayin)"
+msgstr ""
+
+msgid "Filipino (Colemak, Latin)"
+msgstr ""
+
+msgid "Filipino (Colemak, Baybayin)"
+msgstr ""
+
+msgid "Filipino (Dvorak, Latin)"
+msgstr ""
+
+msgid "Filipino (Dvorak, Baybayin)"
+msgstr ""
+
+msgid "Finnish (Windows)"
+msgstr ""
+
+msgid "Finnish (classic)"
+msgstr ""
+
+msgid "Finnish (classic, no dead keys)"
+msgstr ""
+
+msgid "Finnish (Macintosh)"
+msgstr ""
+
+msgid "Northern Saami (Finland)"
+msgstr ""
+
+msgid "French (no dead keys)"
+msgstr ""
+
+msgid "French (alt.)"
+msgstr ""
+
+msgid "French (alt., no dead keys)"
+msgstr ""
+
+msgid "French (alt., Latin-9 only)"
+msgstr ""
+
+msgid "French (legacy, alt.)"
+msgstr ""
+
+msgid "French (legacy, alt., no dead keys)"
+msgstr ""
+
+msgid "French (AZERTY)"
+msgstr ""
+
+msgid "French (AZERTY, AFNOR)"
+msgstr ""
+
+msgid "French (BEPO)"
+msgstr ""
+
+msgid "French (BEPO, Latin-9 only)"
+msgstr ""
+
+msgid "French (BEPO, AFNOR)"
+msgstr ""
+
+msgid "French (Dvorak)"
+msgstr ""
+
+msgid "French (Macintosh)"
+msgstr ""
+
+msgid "French (US)"
+msgstr ""
+
+msgid "Breton (France)"
+msgstr ""
+
+msgid "Occitan"
+msgstr ""
+
+msgid "Georgian (France, AZERTY Tskapo)"
+msgstr ""
+
+msgid "French (Canada, Dvorak)"
+msgstr ""
+
+msgid "French (Canada, legacy)"
+msgstr ""
+
+msgid "Canadian (CSA)"
+msgstr ""
+
+msgid "English (Canada)"
+msgstr ""
+
+msgid "Inuktitut"
+msgstr ""
+
+msgid "Georgian (ergonomic)"
+msgstr ""
+
+msgid "Georgian (MESS)"
+msgstr ""
+
+msgid "Ossetian (Georgia)"
+msgstr ""
+
+msgid "Russian (Georgia)"
+msgstr ""
+
+msgid "German (dead acute)"
+msgstr ""
+
+msgid "German (dead grave acute)"
+msgstr ""
+
+msgid "German (dead tilde)"
+msgstr ""
+
+msgid "German (no dead keys)"
+msgstr ""
+
+msgid "German (E1)"
+msgstr ""
+
+msgid "German (E2)"
+msgstr ""
+
+msgid "German (T3)"
+msgstr ""
+
+msgid "German (US)"
+msgstr ""
+
+msgid "German (Dvorak)"
+msgstr ""
+
+msgid "German (Macintosh)"
+msgstr ""
+
+msgid "German (Macintosh, no dead keys)"
+msgstr ""
+
+msgid "German (Neo 2)"
+msgstr ""
+
+msgid "German (QWERTY)"
+msgstr ""
+
+msgid "Lower Sorbian"
+msgstr ""
+
+msgid "Lower Sorbian (QWERTZ)"
+msgstr ""
+
+msgid "Romanian (Germany)"
+msgstr ""
+
+msgid "Romanian (Germany, no dead keys)"
+msgstr ""
+
+msgid "Russian (Germany, phonetic)"
+msgstr ""
+
+msgid "Turkish (Germany)"
+msgstr ""
+
+msgid "German (Austria, no dead keys)"
+msgstr ""
+
+msgid "German (Austria, Macintosh)"
+msgstr ""
+
+msgid "German (Switzerland, no dead keys)"
+msgstr ""
+
+msgid "German (Switzerland, Macintosh)"
+msgstr ""
+
+msgid "German (Switzerland, legacy)"
+msgstr ""
+
+msgid "French (Switzerland)"
+msgstr ""
+
+msgid "French (Switzerland, no dead keys)"
+msgstr ""
+
+msgid "French (Switzerland, Macintosh)"
+msgstr ""
+
+msgid "Greek (simple)"
+msgstr ""
+
+msgid "Greek (no dead keys)"
+msgstr ""
+
+msgid "Greek (polytonic)"
+msgstr ""
+
+msgid "Hebrew (SI-1452-2)"
+msgstr ""
+
+msgid "Hebrew (lyx)"
+msgstr ""
+
+msgid "Hebrew (phonetic)"
+msgstr ""
+
+msgid "Hebrew (Biblical, Tiro)"
+msgstr ""
+
+msgid "Hungarian (standard)"
+msgstr ""
+
+msgid "Hungarian (no dead keys)"
+msgstr ""
+
+msgid "Hungarian (QWERTY)"
+msgstr ""
+
+msgid "Hungarian (QWERTZ, 101-key, comma, dead keys)"
+msgstr ""
+
+msgid "Hungarian (QWERTZ, 101-key, comma, no dead keys)"
+msgstr ""
+
+msgid "Hungarian (QWERTZ, 101-key, dot, dead keys)"
+msgstr ""
+
+msgid "Hungarian (QWERTZ, 101-key, dot, no dead keys)"
+msgstr ""
+
+msgid "Hungarian (QWERTY, 101-key, comma, dead keys)"
+msgstr ""
+
+msgid "Hungarian (QWERTY, 101-key, comma, no dead keys)"
+msgstr ""
+
+msgid "Hungarian (QWERTY, 101-key, dot, dead keys)"
+msgstr ""
+
+msgid "Hungarian (QWERTY, 101-key, dot, no dead keys)"
+msgstr ""
+
+msgid "Hungarian (QWERTZ, 102-key, comma, dead keys)"
+msgstr ""
+
+msgid "Hungarian (QWERTZ, 102-key, comma, no dead keys)"
+msgstr ""
+
+msgid "Hungarian (QWERTZ, 102-key, dot, dead keys)"
+msgstr ""
+
+msgid "Hungarian (QWERTZ, 102-key, dot, no dead keys)"
+msgstr ""
+
+msgid "Hungarian (QWERTY, 102-key, comma, dead keys)"
+msgstr ""
+
+msgid "Hungarian (QWERTY, 102-key, comma, no dead keys)"
+msgstr ""
+
+msgid "Hungarian (QWERTY, 102-key, dot, dead keys)"
+msgstr ""
+
+msgid "Hungarian (QWERTY, 102-key, dot, no dead keys)"
+msgstr ""
+
+msgid "Icelandic (Macintosh, legacy)"
+msgstr ""
+
+msgid "Icelandic (Macintosh)"
+msgstr ""
+
+msgid "Icelandic (Dvorak)"
+msgstr ""
+
+msgid "Assamese (KaGaPa, phonetic)"
+msgstr ""
+
+msgid "Bangla (India)"
+msgstr ""
+
+msgid "Bangla (India, Probhat)"
+msgstr ""
+
+msgid "Bangla (India, Baishakhi)"
+msgstr ""
+
+msgid "Bangla (India, Bornona)"
+msgstr ""
+
+msgid "Bangla (India, KaGaPa, phonetic)"
+msgstr ""
+
+msgid "Bangla (India, Gitanjali)"
+msgstr ""
+
+msgid "Bangla (India, Baishakhi InScript)"
+msgstr ""
+
+msgid "English (India, with rupee)"
+msgstr ""
+
+msgid "Gujarati"
+msgstr ""
+
+msgid "Gujarati (KaGaPa, phonetic)"
+msgstr ""
+
+msgid "Hindi (Bolnagri)"
+msgstr ""
+
+msgid "Hindi (Wx)"
+msgstr ""
+
+msgid "Hindi (KaGaPa, phonetic)"
+msgstr ""
+
+msgid "Kannada"
+msgstr ""
+
+msgid "Kannada (KaGaPa, phonetic)"
+msgstr ""
+
+msgid "Malayalam"
+msgstr ""
+
+msgid "Malayalam (Lalitha)"
+msgstr ""
+
+msgid "Malayalam (enhanced InScript, with rupee)"
+msgstr ""
+
+msgid "Malayalam (Poorna, extended InScript)"
+msgstr ""
+
+msgid "Manipuri (Meitei)"
+msgstr ""
+
+msgid "Marathi (KaGaPa, phonetic)"
+msgstr ""
+
+msgid "Marathi (enhanced InScript)"
+msgstr ""
+
+msgid "Oriya"
+msgstr ""
+
+msgid "Oriya (Bolnagri)"
+msgstr ""
+
+msgid "Oriya (Wx)"
+msgstr ""
+
+msgid "Punjabi (Gurmukhi)"
+msgstr ""
+
+msgid "Punjabi (Gurmukhi Jhelum)"
+msgstr ""
+
+msgid "Sanskrit (KaGaPa, phonetic)"
+msgstr ""
+
+msgid "Santali (Ol Chiki)"
+msgstr ""
+
+msgid "Tamil (TamilNet '99)"
+msgstr ""
+
+msgid "Tamil (TamilNet '99 with Tamil numerals)"
+msgstr ""
+
+msgid "Tamil (TamilNet '99, TAB encoding)"
+msgstr ""
+
+msgid "Tamil (TamilNet '99, TSCII encoding)"
+msgstr ""
+
+msgid "Tamil (InScript, with Arabic numerals)"
+msgstr ""
+
+msgid "Tamil (InScript, with Tamil numerals)"
+msgstr ""
+
+msgid "Telugu"
+msgstr ""
+
+msgid "Telugu (KaGaPa, phonetic)"
+msgstr ""
+
+msgid "Telugu (Sarala)"
+msgstr ""
+
+msgid "Urdu (phonetic)"
+msgstr ""
+
+msgid "Urdu (alt. phonetic)"
+msgstr ""
+
+msgid "Urdu (Windows)"
+msgstr ""
+
+msgid "Indic IPA"
+msgstr ""
+
+msgid "Indonesian (Arab Melayu, phonetic)"
+msgstr ""
+
+msgid "Indonesian (Arab Melayu, extended phonetic)"
+msgstr ""
+
+msgid "Indonesian (Arab Pegon, phonetic)"
+msgstr ""
+
+msgid "Javanese"
+msgstr ""
+
+msgid "Irish (UnicodeExpert)"
+msgstr ""
+
+msgid "CloGaelach"
+msgstr ""
+
+msgid "Ogham"
+msgstr ""
+
+msgid "Ogham (IS434)"
+msgstr ""
+
+msgid "Italian (no dead keys)"
+msgstr ""
+
+msgid "Italian (Windows)"
+msgstr ""
+
+msgid "Italian (Macintosh)"
+msgstr ""
+
+msgid "Italian (US)"
+msgstr ""
+
+msgid "Italian (IBM 142)"
+msgstr ""
+
+msgid "Friulian (Italy)"
+msgstr ""
+
+msgid "Sicilian"
+msgstr ""
+
+msgid "Georgian (Italy)"
+msgstr ""
+
+msgid "Japanese (Kana)"
+msgstr ""
+
+msgid "Japanese (Kana 86)"
+msgstr ""
+
+msgid "Japanese (OADG 109A)"
+msgstr ""
+
+msgid "Japanese (Macintosh)"
+msgstr ""
+
+msgid "Japanese (Dvorak)"
+msgstr ""
+
+msgid "Kazakh (with Russian)"
+msgstr ""
+
+msgid "Kazakh (extended)"
+msgstr ""
+
+msgid "Kazakh (Latin)"
+msgstr ""
+
+msgid "Russian (Kazakhstan, with Kazakh)"
+msgstr ""
+
+msgid "Korean (101/104-key compatible)"
+msgstr ""
+
+msgid "Kyrgyz (phonetic)"
+msgstr ""
+
+msgid "Lao (STEA)"
+msgstr ""
+
+msgid "Latvian (apostrophe)"
+msgstr ""
+
+msgid "Latvian (tilde)"
+msgstr ""
+
+msgid "Latvian (F)"
+msgstr ""
+
+msgid "Latvian (Modern Latin)"
+msgstr ""
+
+msgid "Latvian (Modern Cyrillic)"
+msgstr ""
+
+msgid "Latvian (ergonomic, ŪGJRMV)"
+msgstr ""
+
+msgid "Latvian (adapted)"
+msgstr ""
+
+msgid "Lithuanian (standard)"
+msgstr ""
+
+msgid "Lithuanian (US)"
+msgstr ""
+
+msgid "Lithuanian (IBM)"
+msgstr ""
+
+msgid "Lithuanian (LEKP)"
+msgstr ""
+
+msgid "Lithuanian (LEKPa)"
+msgstr ""
+
+msgid "Lithuanian (Ratise)"
+msgstr ""
+
+msgid "Samogitian"
+msgstr ""
+
+msgid "Macedonian (no dead keys)"
+msgstr ""
+
+msgid "Malay (Jawi, phonetic)"
+msgstr ""
+
+msgid "Maltese (US)"
+msgstr ""
+
+msgid "Maltese (US, with AltGr overrides)"
+msgstr ""
+
+msgid "Maltese (UK, with AltGr overrides)"
+msgstr ""
+
+msgid "Gagauz (Moldova)"
+msgstr ""
+
+msgid "Montenegrin (Cyrillic)"
+msgstr ""
+
+msgid "Montenegrin (Cyrillic, ZE and ZHE swapped)"
+msgstr ""
+
+msgid "Montenegrin (Cyrillic, with guillemets)"
+msgstr ""
+
+msgid "Montenegrin (Latin, Unicode)"
+msgstr ""
+
+msgid "Montenegrin (Latin, QWERTY)"
+msgstr ""
+
+msgid "Montenegrin (Latin, Unicode, QWERTY)"
+msgstr ""
+
+msgid "Montenegrin (Latin, with guillemets)"
+msgstr ""
+
+msgid "Norwegian (no dead keys)"
+msgstr ""
+
+msgid "Norwegian (Windows)"
+msgstr ""
+
+msgid "Norwegian (Macintosh)"
+msgstr ""
+
+msgid "Norwegian (Macintosh, no dead keys)"
+msgstr ""
+
+msgid "Norwegian (Colemak)"
+msgstr ""
+
+msgid "Norwegian (Colemak-DH)"
+msgstr ""
+
+msgid "Norwegian (Colemak-DH Wide)"
+msgstr ""
+
+msgid "Norwegian (Dvorak)"
+msgstr ""
+
+msgid "Northern Saami (Norway)"
+msgstr ""
+
+msgid "Northern Saami (Norway, no dead keys)"
+msgstr ""
+
+msgid "Persian (with Persian keypad)"
+msgstr ""
+
+msgid "Persian (Windows)"
+msgstr ""
+
+msgid "Azerbaijani (Iran)"
+msgstr ""
+
+msgid "Kurdish (Iran, Latin Q)"
+msgstr ""
+
+msgid "Kurdish (Iran, Latin Alt-Q)"
+msgstr ""
+
+msgid "Kurdish (Iran, F)"
+msgstr ""
+
+msgid "Kurdish (Iran, Arabic-Latin)"
+msgstr ""
+
+msgid "Polish (legacy)"
+msgstr ""
+
+msgid "Polish (QWERTZ)"
+msgstr ""
+
+msgid "Polish (Dvorak)"
+msgstr ""
+
+msgid "Polish (Dvorak, with Polish quotes on quotemark key)"
+msgstr ""
+
+msgid "Polish (Dvorak, with Polish quotes on key 1)"
+msgstr ""
+
+msgid "Polish (programmer Dvorak)"
+msgstr ""
+
+msgid "Kashubian"
+msgstr ""
+
+msgid "Silesian"
+msgstr ""
+
+msgid "Russian (Poland, phonetic Dvorak)"
+msgstr ""
+
+msgid "Portuguese (no dead keys)"
+msgstr ""
+
+msgid "Portuguese (Macintosh)"
+msgstr ""
+
+msgid "Portuguese (Macintosh, no dead keys)"
+msgstr ""
+
+msgid "Portuguese (Nativo)"
+msgstr ""
+
+msgid "Portuguese (Nativo for US keyboards)"
+msgstr ""
+
+msgid "Esperanto (Portugal, Nativo)"
+msgstr ""
+
+msgid "Portuguese (Brazil, no dead keys)"
+msgstr ""
+
+msgid "Portuguese (Brazil, Dvorak)"
+msgstr ""
+
+msgid "Portuguese (Brazil, Nativo)"
+msgstr ""
+
+msgid "Portuguese (Brazil, Nativo for US keyboards)"
+msgstr ""
+
+msgid "Portuguese (Brazil, IBM/Lenovo ThinkPad)"
+msgstr ""
+
+msgid "Esperanto (Brazil, Nativo)"
+msgstr ""
+
+msgid "Russian (Brazil, phonetic)"
+msgstr ""
+
+msgid "Romanian (standard)"
+msgstr ""
+
+msgid "Romanian (Windows)"
+msgstr ""
+
+msgid "Russian (phonetic)"
+msgstr ""
+
+msgid "Russian (phonetic, Windows)"
+msgstr ""
+
+msgid "Russian (phonetic, YAZHERTY)"
+msgstr ""
+
+msgid "Russian (phonetic, AZERTY)"
+msgstr ""
+
+msgid "Russian (phonetic, Dvorak)"
+msgstr ""
+
+msgid "Russian (typewriter)"
+msgstr ""
+
+msgid "Russian (engineering, RU)"
+msgstr ""
+
+msgid "Russian (engineering, EN)"
+msgstr ""
+
+msgid "Russian (legacy)"
+msgstr ""
+
+msgid "Russian (typewriter, legacy)"
+msgstr ""
+
+msgid "Russian (DOS)"
+msgstr ""
+
+msgid "Russian (Macintosh)"
+msgstr ""
+
+msgid "Abkhazian (Russia)"
+msgstr ""
+
+msgid "Bashkirian"
+msgstr ""
+
+msgid "Chuvash"
+msgstr ""
+
+msgid "Chuvash (Latin)"
+msgstr ""
+
+msgid "Kalmyk"
+msgstr ""
+
+msgid "Komi"
+msgstr ""
+
+msgid "Mari"
+msgstr ""
+
+msgid "Ossetian (legacy)"
+msgstr ""
+
+msgid "Ossetian (Windows)"
+msgstr ""
+
+msgid "Serbian (Russia)"
+msgstr ""
+
+msgid "Tatar"
+msgstr ""
+
+msgid "Udmurt"
+msgstr ""
+
+msgid "Yakut"
+msgstr ""
+
+msgid "Serbian (Cyrillic, with guillemets)"
+msgstr ""
+
+msgid "Serbian (Cyrillic, ZE and ZHE swapped)"
+msgstr ""
+
+msgid "Serbian (Latin)"
+msgstr ""
+
+msgid "Serbian (Latin, with guillemets)"
+msgstr ""
+
+msgid "Serbian (Latin, Unicode)"
+msgstr ""
+
+msgid "Serbian (Latin, QWERTY)"
+msgstr ""
+
+msgid "Serbian (Latin, Unicode, QWERTY)"
+msgstr ""
+
+msgid "Pannonian Rusyn"
+msgstr ""
+
+msgid "Sinhala (US)"
+msgstr ""
+
+msgid "Tamil (Sri Lanka, TamilNet '99)"
+msgstr ""
+
+msgid "Tamil (Sri Lanka, TamilNet '99, TAB encoding)"
+msgstr ""
+
+msgid "Slovak (extra backslash)"
+msgstr ""
+
+msgid "Slovak (QWERTY)"
+msgstr ""
+
+msgid "Slovak (QWERTY, extra backslash)"
+msgstr ""
+
+msgid "Slovenian (with guillemets)"
+msgstr ""
+
+msgid "Slovenian (US)"
+msgstr ""
+
+msgid "Spanish (no dead keys)"
+msgstr ""
+
+msgid "Spanish (dead tilde)"
+msgstr ""
+
+msgid "Spanish (Windows)"
+msgstr ""
+
+msgid "Spanish (Dvorak)"
+msgstr ""
+
+msgid "Asturian (Spain, with bottom-dot H and L)"
+msgstr ""
+
+msgid "Catalan (Spain, with middle-dot L)"
+msgstr ""
+
+msgid "Spanish (Latin American, no dead keys)"
+msgstr ""
+
+msgid "Spanish (Latin American, dead tilde)"
+msgstr ""
+
+msgid "Spanish (Latin American, Dvorak)"
+msgstr ""
+
+msgid "Spanish (Latin American, Colemak)"
+msgstr ""
+
+msgid "Kikuyu"
+msgstr ""
+
+msgid "Swedish (no dead keys)"
+msgstr ""
+
+msgid "Swedish (Dvorak)"
+msgstr ""
+
+msgid "Swedish (Dvorak, intl.)"
+msgstr ""
+
+msgid "Swedish (Svdvorak)"
+msgstr ""
+
+msgid "Swedish (Macintosh)"
+msgstr ""
+
+msgid "Swedish (US)"
+msgstr ""
+
+msgid "Swedish Sign Language"
+msgstr ""
+
+msgid "Northern Saami (Sweden)"
+msgstr ""
+
+msgid "Russian (Sweden, phonetic)"
+msgstr ""
+
+msgid "Taiwanese (indigenous)"
+msgstr ""
+
+msgid "Saisiyat (Taiwan)"
+msgstr ""
+
+msgid "Tajik (legacy)"
+msgstr ""
+
+msgid "Thai (TIS-820.2538)"
+msgstr ""
+
+msgid "Thai (Pattachote)"
+msgstr ""
+
+msgid "Turkmen (Alt-Q)"
+msgstr ""
+
+msgid "Turkish (F)"
+msgstr ""
+
+msgid "Turkish (E)"
+msgstr ""
+
+msgid "Turkish (Alt-Q)"
+msgstr ""
+
+msgid "Turkish (intl., with dead keys)"
+msgstr ""
+
+msgid "Kurdish (Turkey, Latin Q)"
+msgstr ""
+
+msgid "Kurdish (Turkey, F)"
+msgstr ""
+
+msgid "Kurdish (Turkey, Latin Alt-Q)"
+msgstr ""
+
+msgid "Ukrainian (phonetic)"
+msgstr ""
+
+msgid "Ukrainian (typewriter)"
+msgstr ""
+
+msgid "Ukrainian (Windows)"
+msgstr ""
+
+msgid "Ukrainian (macOS)"
+msgstr ""
+
+msgid "Ukrainian (legacy)"
+msgstr ""
+
+msgid "Ukrainian (homophonic)"
+msgstr ""
+
+msgid "Crimean Tatar (Turkish Q)"
+msgstr ""
+
+msgid "Crimean Tatar (Turkish F)"
+msgstr ""
+
+msgid "Crimean Tatar (Turkish Alt-Q)"
+msgstr ""
+
+msgid "Urdu (Pakistan, CRULP)"
+msgstr ""
+
+msgid "Urdu (Pakistan, NLA)"
+msgstr ""
+
+msgid "Arabic (Pakistan)"
+msgstr ""
+
+msgid "Sindhi"
+msgstr ""
+
+msgid "Uzbek (Latin)"
+msgstr ""
+
+msgid "Vietnamese (US)"
+msgstr ""
+
+msgid "Vietnamese (France)"
+msgstr ""
\ No newline at end of file
diff --git a/locale/ubl-settings-keyboard-layouts_ru.po b/locale/ubl-settings-keyboard-layouts_ru.po
new file mode 100644
index 0000000..b891e6f
--- /dev/null
+++ b/locale/ubl-settings-keyboard-layouts_ru.po
@@ -0,0 +1,1780 @@
+# Russian translations for ubl-settings-keyboard package.
+# Copyright (C) 2022, UBTech LLC
+# This file is distributed under the same license as the ubl-settings-keyboard package.
+# UBLinux Team , 2022
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: ubl-settings-keyboard 1.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-05-22 16:12+0600\n"
+"PO-Revision-Date: 2023-01-01 00:00+0600\n"
+"Last-Translator: UBLinux Team \n"
+"Language-Team: Russian - UBLinux Team \n"
+"Language: Russian\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+
+msgid "Albanian"
+msgstr "Албанский"
+
+msgid "Amharic"
+msgstr "Амхарский"
+
+msgid "Armenian"
+msgstr "Армянский"
+
+msgid "Arabic"
+msgstr "Арабский"
+
+msgid "Arabic (Egypt)"
+msgstr "Арабский (Египет)"
+
+msgid "Arabic (Iraq)"
+msgstr "Арабский (Ирак)"
+
+msgid "Arabic (Morocco)"
+msgstr "Арабский (Марокко)"
+
+msgid "Arabic (Syria)"
+msgstr "Арабский (Сирия)"
+
+msgid "Azerbaijani"
+msgstr "Азербайджанский"
+
+msgid "Bambara"
+msgstr "Бамбара"
+
+msgid "Bangla"
+msgstr "Бенгла"
+
+msgid "Belarusian"
+msgstr "Белорусский"
+
+msgid "Belgian"
+msgstr "Бельгийский"
+
+msgid "Berber (Algeria, Latin)"
+msgstr "Берберский (Алжир, латиница)"
+
+msgid "Bosnian"
+msgstr "Боснийский"
+
+msgid "Braille"
+msgstr "Шрифт Брайля"
+
+msgid "Bulgarian"
+msgstr "Болгарский"
+
+msgid "Burmese"
+msgstr "Бирманский"
+
+msgid "Chinese"
+msgstr "Китайский"
+
+msgid "Croatian"
+msgstr "Хорватский"
+
+msgid "Czech"
+msgstr "Чешский"
+
+msgid "Danish"
+msgstr "Датский"
+
+msgid "Dari"
+msgstr "Дари"
+
+msgid "Dhivehi"
+msgstr "Дхивехи"
+
+msgid "Dutch"
+msgstr "Голландский"
+
+msgid "Dzongkha"
+msgstr "Дзонг-кэ"
+
+msgid "English (Australia)"
+msgstr "Английский (Австралия)"
+
+msgid "English (Cameroon)"
+msgstr "Английский (Камерун)"
+
+msgid "English (Ghana)"
+msgstr "Английский (Гана)"
+
+msgid "English (New Zealand)"
+msgstr "Английский (Новая Зеландия)"
+
+msgid "English (Nigeria)"
+msgstr "Английский (Нигерия)"
+
+msgid "English (South Africa)"
+msgstr "Английский (ЮАР)"
+
+msgid "English (UK)"
+msgstr "Английский (Великобритания)"
+
+msgid "English (US)"
+msgstr "Английский (США)"
+
+msgid "Esperanto"
+msgstr "Эсперанто"
+
+msgid "Estonian"
+msgstr "Эстонский"
+
+msgid "Faroese"
+msgstr "Фарерский"
+
+msgid "Filipino"
+msgstr "Филиппинский"
+
+msgid "Finnish"
+msgstr "Финский"
+
+msgid "French"
+msgstr "Французский"
+
+msgid "French (Canada)"
+msgstr "Французский (Канада)"
+
+msgid "French (Democratic Republic of the Congo)"
+msgstr "Французский (Демократическая Республика Конго) Конголезский"
+
+msgid "French (Togo)"
+msgstr "Французский (Того)"
+
+msgid "Georgian"
+msgstr "Грузинский"
+
+msgid "German"
+msgstr "Немецкий"
+
+msgid "German (Austria)"
+msgstr "Немецкий (Австрия)"
+
+msgid "German (Switzerland)"
+msgstr "Немецкий (Швейцария)"
+
+msgid "Greek"
+msgstr "Греческий"
+
+msgid "Hebrew"
+msgstr "Иврит"
+
+msgid "Hungarian"
+msgstr "Венгерский"
+
+msgid "Icelandic"
+msgstr "Исландский"
+
+msgid "Indian"
+msgstr "Индийский"
+
+msgid "Indonesian (Latin)"
+msgstr "Индонезийский (латиница)"
+
+msgid "Irish"
+msgstr "Ирландский"
+
+msgid "Italian"
+msgstr "Итальянский"
+
+msgid "Japanese"
+msgstr "Японский"
+
+msgid "Kazakh"
+msgstr "Казахский"
+
+msgid "Khmer (Cambodia)"
+msgstr "Кхмерский (Камбоджа)"
+
+msgid "Korean"
+msgstr "Корейский"
+
+msgid "Kyrgyz"
+msgstr "Киргизский"
+
+msgid "Lao"
+msgstr "Лаосский"
+
+msgid "Latvian"
+msgstr "Латышский"
+
+msgid "Lithuanian"
+msgstr "Литовский"
+
+msgid "Macedonian"
+msgstr "Македонский"
+
+msgid "Malay (Jawi, Arabic Keyboard)"
+msgstr "Малайский (джави, арабская раскладка)"
+
+msgid "Maltese"
+msgstr "Мальтийский"
+
+msgid "Moldavian"
+msgstr "Молдавский"
+
+msgid "Mongolian"
+msgstr "Монгольский"
+
+msgid "Montenegrin"
+msgstr "Черногорский"
+
+msgid "Nepali"
+msgstr "Непальский"
+
+msgid "N'Ko (AZERTY)"
+msgstr "Нко (AZERTY)"
+
+msgid "Norwegian"
+msgstr "Норвежский"
+
+msgid "Persian"
+msgstr "Персидский"
+
+msgid "Polish"
+msgstr "Польский"
+
+msgid "Portuguese"
+msgstr "Португальский"
+
+msgid "Portuguese (Brazil)"
+msgstr "Португальский (Бразилия)"
+
+msgid "Romanian"
+msgstr "Румынский"
+
+msgid "Russian"
+msgstr "Русский"
+
+msgid "Serbian"
+msgstr "Сербский"
+
+msgid "Sinhala (phonetic)"
+msgstr "Сингальский (фонетический)"
+
+msgid "Slovak"
+msgstr "Словацкий"
+
+msgid "Slovenian"
+msgstr "Словенский"
+
+msgid "Spanish"
+msgstr "Испанский"
+
+msgid "Spanish (Latin American)"
+msgstr "Испанский (Латинская Америка)"
+
+msgid "Swahili (Kenya)"
+msgstr "Суахили (Кения)"
+
+msgid "Swahili (Tanzania)"
+msgstr "Суахили (Танзания)"
+
+msgid "Swedish"
+msgstr "Шведский"
+
+msgid "Taiwanese"
+msgstr "Тайваньский"
+
+msgid "Tajik"
+msgstr "Таджикский"
+
+msgid "Thai"
+msgstr "Тайский"
+
+msgid "Tswana"
+msgstr "Тсвана"
+
+msgid "Turkmen"
+msgstr "Туркменский"
+
+msgid "Turkish"
+msgstr "Турецкий"
+
+msgid "Ukrainian"
+msgstr "Украинский"
+
+msgid "Urdu (Pakistan)"
+msgstr "Урду (Пакистан)"
+
+msgid "Uzbek"
+msgstr "Узбекский"
+
+msgid "Vietnamese"
+msgstr "Вьетнамский"
+
+msgid "Wolof"
+msgstr "Волоф"
+
+msgid "Albanian (Plisi)"
+msgstr "Албанский (Плиси)"
+
+msgid "Albanian (Veqilharxhi)"
+msgstr "Албанский (Векильхарджи)"
+
+msgid "Armenian (phonetic)"
+msgstr "Армянский (фонетический)"
+
+msgid "Armenian (alt. phonetic)"
+msgstr "Армянский (альтернативный фонетический)"
+
+msgid "Armenian (eastern)"
+msgstr "Армянский (восточный)"
+
+msgid "Armenian (alt. eastern)"
+msgstr "Армянский (альтернативный восточный)"
+
+msgid "Armenian (western)"
+msgstr "Армянский (западный)"
+
+msgid "Arabic (Eastern Arabic numerals)"
+msgstr "Арабский (восточно-арабские цифры)"
+
+msgid "Arabic (AZERTY)"
+msgstr "Арабский (AZERTY)"
+
+msgid "Arabic (AZERTY, Eastern Arabic numerals)"
+msgstr "Арабский (AZERTY, восточно-арабские цифры)"
+
+msgid "Arabic (Buckwalter)"
+msgstr "Арабский (Buckwalter)"
+
+msgid "Arabic (Macintosh)"
+msgstr "Арабский (Macintosh)"
+
+msgid "Arabic (Macintosh, phonetic)"
+msgstr "Арабский (Macintosh, фонетический)"
+
+msgid "Arabic (OLPC)"
+msgstr "Арабский (OLPC)"
+
+msgid "Kurdish (Iraq, Latin Q)"
+msgstr "Курдский (Ирак, латиница Q)"
+
+msgid "Kurdish (Iraq, Latin Alt-Q)"
+msgstr "Курдский (Ирак, латиница Alt-Q)"
+
+msgid "Kurdish (Iraq, F)"
+msgstr "Курдский (Ирак, F)"
+
+msgid "Kurdish (Iraq, Arabic-Latin)"
+msgstr "Курдский (Ирак, арабо-латинский)"
+
+msgid "Berber (Morocco, Tifinagh)"
+msgstr "Берберский (Марокко, тифинаг)"
+
+msgid "Berber (Morocco, Tifinagh alt.)"
+msgstr "Берберский (Марокко, тифинаг альт.)"
+
+msgid "alt-Berber (Morocco, Tifinagh phonetic, alt.)"
+msgstr "alt-берберский (Марокко, тифинаг фонетический, альт.)"
+
+msgid "Berber (Morocco, Tifinagh extended)"
+msgstr "Берберский (Марокко, тифинаг расширенный)"
+
+msgid "Berber (Morocco, Tifinagh phonetic)"
+msgstr "Берберский (Марокко, тифинаг фонетический)"
+
+msgid "extended-Berber (Morocco, Tifinagh extended phonetic)"
+msgstr "extended-берберский (Марокко, тифинаг расширенный фонетический)"
+
+msgid "French (Morocco)"
+msgstr "Французский (Марокко)"
+
+msgid "Tarifit"
+msgstr "Тарифитский"
+
+msgid "Syriac"
+msgstr "Сирийский"
+
+msgid "Syriac (phonetic)"
+msgstr "Сирийский (фонетический)"
+
+msgid "Kurdish (Syria, Latin Q)"
+msgstr "Курдский (Сирия, латиница Q)"
+
+msgid "Kurdish (Syria, Latin Alt-Q)"
+msgstr "Курдский (Сирия, латиница Alt-Q)"
+
+msgid "Kurdish (Syria, F)"
+msgstr "Курдский (Сирия, F)"
+
+msgid "Azerbaijani (Cyrillic)"
+msgstr "Азербайджанский (кириллица)"
+
+msgid "French (Mali, alt.)"
+msgstr "Французский (Мали, альт.)"
+
+msgid "English (Mali, US, Macintosh)"
+msgstr "Английский (Мали, США, Macintosh)"
+
+msgid "English (Mali, US, intl.)"
+msgstr "Английский (Мали, США, межд.)"
+
+msgid "Bangla (Probhat)"
+msgstr "Бенгла (Пробхат)"
+
+msgid "Belarusian (legacy)"
+msgstr "Белорусский (устар.)"
+
+msgid "Belarusian (Latin)"
+msgstr "Белорусский (латиница)"
+
+msgid "Belarusian (intl.)"
+msgstr "Белорусский (межд.)"
+
+msgid "Belarusian (phonetic)"
+msgstr "Белорусский (фонетический)"
+
+msgid "Russian (Belarus)"
+msgstr "Русский (Беларусь)"
+
+msgid "Belgian (alt.)"
+msgstr "Бельгийский (альт.)"
+
+msgid "Belgian (Latin-9 only, alt.)"
+msgstr "Бельгийский (только Latin-9, альт.)"
+
+msgid "Belgian (ISO, alt.)"
+msgstr "Бельгийский (ISO, альт.)"
+
+msgid "Belgian (no dead keys)"
+msgstr "Бельгийский (без мёртвых клавиш)"
+
+msgid "Belgian (Wang 724 AZERTY)"
+msgstr "Бельгийский (Wang 724 AZERTY)"
+
+msgid "Berber (Algeria, Tifinagh)"
+msgstr "Берберский (Алжир, Тифинаг)"
+
+msgid "Kabyle (AZERTY, with dead keys)"
+msgstr "Кабильский (AZERTY, с мёртвыми клавишами)"
+
+msgid "gb-Kabyle (QWERTY, UK, with dead keys)"
+msgstr "gb-кабильский (QWERTY, Великобритания, с мёртвыми клавишами)"
+
+msgid "us-Kabyle (QWERTY, US, with dead keys)"
+msgstr "us-кабильский (QWERTY, США, с мёртвыми клавишами)"
+
+msgid "Arabic (Algeria)"
+msgstr "Арабский (Алжир)"
+
+msgid "Bosnian (with guillemets)"
+msgstr "Боснийский (с гильеметами)"
+
+msgid "Bosnian (with Bosnian digraphs)"
+msgstr "Боснийский (с боснийскими диграфами)"
+
+msgid "Bosnian (US, with Bosnian digraphs)"
+msgstr "Боснийский (США, с боснийскими диграфы)"
+
+msgid "Bosnian (US)"
+msgstr "Боснийский (США)"
+
+msgid "Braille (left-handed)"
+msgstr "Шрифт Брайля (для левшей)"
+
+msgid "Braille (left-handed inverted thumb)"
+msgstr "Шрифт Брайля (для левшей с перевёрнутым большим пальцем)"
+
+msgid "Braille (right-handed)"
+msgstr "Шрифт Брайля (для правшей)"
+
+msgid "Braille (right-handed inverted thumb)"
+msgstr "Шрифт Брайля (для правшей с перевёрнутым большим пальцем)"
+
+msgid "Bulgarian (traditional phonetic)"
+msgstr "Болгарский (традиционная фонетика)"
+
+msgid "Bulgarian (new phonetic)"
+msgstr "Болгарский (новая фонетика)"
+
+msgid "Bulgarian (enhanced)"
+msgstr "Болгарский (расширенная)"
+
+msgid "Burmese (Zawgyi)"
+msgstr "Бирманский (Зауджи)"
+
+msgid "Mon"
+msgstr "Монский"
+
+msgid "Mon (A1)"
+msgstr "Монский (A1)"
+
+msgid "Shan"
+msgstr "Шаньский"
+
+msgid "Shan (Zawgyi)"
+msgstr "Шаньский (Зауджи)"
+
+msgid "Hanyu Pinyin Letters (with AltGr dead keys)"
+msgstr "Буквы ханью пиньинь (с неактивными клавишами AltGr)"
+
+msgid "Mongolian (Bichig)"
+msgstr "Монгольский (Бичиг)"
+
+msgid "Mongolian (Todo)"
+msgstr "Монгольский (Тодо)"
+
+msgid "Mongolian (Xibe)"
+msgstr "Монгольский (Сибе)"
+
+msgid "Mongolian (Manchu)"
+msgstr "Монгольский (маньчжурский)"
+
+msgid "Mongolian (Galik)"
+msgstr "Монгольский (Галик)"
+
+msgid "Mongolian (Todo Galik)"
+msgstr "Монгольский (Тодо Галик)"
+
+msgid "Mongolian (Manchu Galik)"
+msgstr "Монгольский (маньчжурский Галик)"
+
+msgid "Tibetan"
+msgstr "Тибетский"
+
+msgid "Tibetan (with ASCII numerals)"
+msgstr "Тибетский (с ASCII-цифрами)"
+
+msgid "Uyghur"
+msgstr "Уйгурский"
+
+msgid "Croatian (with guillemets)"
+msgstr "Хорватский (с guillemets)"
+
+msgid "Croatian (with Croatian digraphs)"
+msgstr "Хорватский (с хорватскими диграфами)"
+
+msgid "Croatian (US, with Croatian digraphs)"
+msgstr "Хорватский (США, с хорватскими диграфами)"
+
+msgid "Croatian (US)"
+msgstr "Хорватский (США)"
+
+msgid "Czech (extra backslash)"
+msgstr "Чешский (дополнительная обратная косая черта)"
+
+msgid "Czech (QWERTY)"
+msgstr "Чешский (QWERTY)"
+
+msgid "Czech (QWERTY, extra backslash)"
+msgstr "Чешский (QWERTY, дополнительная обратная косая черта)"
+
+msgid "Czech (QWERTZ, Windows)"
+msgstr "Чешский (QWERTZ, Windows)"
+
+msgid "Czech (QWERTY, Windows)"
+msgstr "Чешский (QWERTY, Windows)"
+
+msgid "Czech (QWERTY, Macintosh)"
+msgstr "Чешский (QWERTY, Macintosh)"
+
+msgid "Czech (UCW, only accented letters)"
+msgstr "Чешский (UCW, только буквы с диакритическими знаками)"
+
+msgid "Czech (US, Dvorak, UCW support)"
+msgstr "Чешский (США, поддержка Dvorak, UCW)"
+
+msgid "Russian (Czechia, phonetic)"
+msgstr "Русский (Чехия, фонетическая раскладка)"
+
+msgid "Danish (no dead keys)"
+msgstr "Датский (без мёртвых клавиш)"
+
+msgid "Danish (Windows)"
+msgstr "Датский (Windows)"
+
+msgid "Danish (Macintosh)"
+msgstr "Датский (Macintosh)"
+
+msgid "Danish (Macintosh, no dead keys)"
+msgstr "Датский (Macintosh, без мёртвых клавиш)"
+
+msgid "Danish (Dvorak)"
+msgstr "Датский (Dvorak)"
+
+msgid "Pashto"
+msgstr "Пашто"
+
+msgid "Uzbek (Afghanistan)"
+msgstr "Узбекский (Афганистан)"
+
+msgid "Dari (Afghanistan, OLPC)"
+msgstr "Дари (Афганистан, OLPC)"
+
+msgid "Pashto (Afghanistan, OLPC)"
+msgstr "Пашто (Афганистан, OLPC)"
+
+msgid "Uzbek (Afghanistan, OLPC)"
+msgstr "Узбекский (Афганистан, OLPC)"
+
+msgid "Dutch (US)"
+msgstr "Нидерландский (США)"
+
+msgid "Dutch (Macintosh)"
+msgstr "Нидерландский (Macintosh)"
+
+msgid "Dutch (standard)"
+msgstr "Нидерландский (стандартный)"
+
+msgid "French (Cameroon)"
+msgstr "Французский (Камерун)"
+
+msgid "Cameroon Multilingual (QWERTY, intl.)"
+msgstr "Камерунский многоязычный (QWERTY, международный)"
+
+msgid "Cameroon (AZERTY, intl.)"
+msgstr "Камерунский (AZERTY, международный)"
+
+msgid "Cameroon (Dvorak, intl.)"
+msgstr "Камерунский (Дворак, международный)"
+
+msgid "Mmuock"
+msgstr "Mmuock"
+
+msgid "English (Ghana, multilingual)"
+msgstr "Английский (Гана, многоязычный)"
+
+msgid "English (Ghana, GILLBT)"
+msgstr "Английский (Гана, GILLBT)"
+
+msgid "Akan"
+msgstr "Акан"
+
+msgid "Avatime"
+msgstr "Аватайм"
+
+msgid "Ewe"
+msgstr "Эве"
+
+msgid "Fula"
+msgstr "Фула"
+
+msgid "Ga"
+msgstr "Га"
+
+msgid "Hausa (Ghana)"
+msgstr "Хауса (Гана)"
+
+msgid "Maori"
+msgstr "Маори"
+
+msgid "Hausa (Nigeria)"
+msgstr "Хауса (Нигерия)"
+
+msgid "Igbo"
+msgstr "Игбо"
+
+msgid "Yoruba"
+msgstr "Йоруба"
+
+msgid "English (UK, extended, Windows)"
+msgstr "Английский (Великобритания, расширенный, Windows)"
+
+msgid "English (UK, intl., with dead keys)"
+msgstr "Английский (Великобритания, международный, с неработающими клавишами)"
+
+msgid "English (UK, Dvorak)"
+msgstr "Английский (Великобритания, Дворжак)"
+
+msgid "English (UK, Dvorak, with UK punctuation)"
+msgstr "Английский (Великобритания, Дворжак, с британской пунктуацией)"
+
+msgid "English (UK, Macintosh)"
+msgstr "Английский (Великобритания, Macintosh)"
+
+msgid "English (UK, Macintosh, intl.)"
+msgstr "Английский (Великобритания, Macintosh, интерн.)"
+
+msgid "English (UK, Colemak)"
+msgstr "Английский (Великобритания, Colemak)"
+
+msgid "English (UK, Colemak-DH)"
+msgstr "Английский (Великобритания, Colemak-DH)"
+
+msgid "Scottish Gaelic"
+msgstr "Шотландский гэльский"
+
+msgid "Polish (British keyboard)"
+msgstr "Польский (британская клавиатура)"
+
+msgid "English (US, euro on 5)"
+msgstr "Английский (США, евро на 5)"
+
+msgid "English (US, intl., with dead keys)"
+msgstr "Английский (США, интерн., с неактивными клавишами)"
+
+msgid "English (US, alt. intl.)"
+msgstr "Английский (США, альт. интерн.)"
+
+msgid "English (intl., with AltGr dead keys)"
+msgstr "Английский (интерн., с неактивными клавишами AltGr)"
+
+msgid "English (Macintosh)"
+msgstr "Английский (Macintosh)"
+
+msgid "English (Colemak)"
+msgstr "Английский (Colemak)"
+
+msgid "English (Colemak-DH)"
+msgstr "Английский (Colemak-DH)"
+
+msgid "English (Colemak-DH Wide)"
+msgstr "Английский (Colemak-DH Wide)"
+
+msgid "English (Colemak-DH Ortholinear)"
+msgstr "Английский (Colemak-DH Ortholinear)"
+
+msgid "English (Colemak-DH ISO)"
+msgstr "Английский (Colemak-DH ISO)"
+
+msgid "English (Colemak-DH Wide ISO)"
+msgstr "Английский (Colemak-DH Wide ISO)"
+
+msgid "English (Dvorak)"
+msgstr "Английский (Dvorak)"
+
+msgid "English (Dvorak, intl., with dead keys)"
+msgstr "Английский (Dvorak, интерн., с неактивными клавишами)"
+
+msgid "alt-English (Dvorak, alt. intl.)"
+msgstr "альт-английский (Dvorak, альт. интерн.)"
+
+msgid "English (Dvorak, left-handed)"
+msgstr "Английский (Dvorak, для левшей)"
+
+msgid "English (Dvorak, right-handed)"
+msgstr "Английский (Dvorak, для правшей)"
+
+msgid "English (classic Dvorak)"
+msgstr "Английский (классический Dvorak)"
+
+msgid "English (programmer Dvorak)"
+msgstr "Английский (программист Дворжак)"
+
+msgid "English (Dvorak, Macintosh)"
+msgstr "Английский (Дворжак, Macintosh)"
+
+msgid "English (Norman)"
+msgstr "Английский (нормандский)"
+
+msgid "English (US, Symbolic)"
+msgstr "Английский (США, символьная раскладка)"
+
+msgid "English (Workman)"
+msgstr "Английский (Уоркман)"
+
+msgid "English (Workman, intl., with dead keys)"
+msgstr "Английский (Уоркман, междунар., с неактивными клавишами)"
+
+msgid "English (the divide/multiply toggle the layout)"
+msgstr "Английский (переключение раскладки «деление/умножение»)"
+
+msgid "Cherokee"
+msgstr "Чероки"
+
+msgid "Hawaiian"
+msgstr "Гавайский"
+
+msgid "Russian (US, phonetic)"
+msgstr "Русский (США, фонетическая раскладка)"
+
+msgid "Serbo-Croatian (US)"
+msgstr "Сербско-хорватский (США)"
+
+msgid "Esperanto (legacy)"
+msgstr "Эсперанто (устаревший)"
+
+msgid "Estonian (no dead keys)"
+msgstr "Эстонский (без неактивных клавиш)"
+
+msgid "Estonian (Dvorak)"
+msgstr "Эстонский (Дворжак)"
+
+msgid "Estonian (US)"
+msgstr "Эстонский (США)"
+
+msgid "Faroese (no dead keys)"
+msgstr "Фарерский (без неактивных клавиш)"
+
+msgid "Filipino (QWERTY, Baybayin)"
+msgstr "Филиппинский (QWERTY, байбаин)"
+
+msgid "Filipino (Capewell-Dvorak, Latin)"
+msgstr "Филиппинский (Кейпвелл-Дворжак, латиница)"
+
+msgid "dvorak-Filipino (Capewell-Dvorak, Baybayin)"
+msgstr "Дворжак-филиппинский (Кейпвелл-Дворжак,Байбаин)"
+
+msgid "Filipino (Capewell-QWERF 2006, Latin)"
+msgstr "Филиппинский (Capewell-QWERF 2006, латиница)"
+
+msgid "qwerf2k6-Filipino (Capewell-QWERF 2006, Baybayin)"
+msgstr "qwerf2k6-Филиппинский (Capewell-QWERF 2006, байбаин)"
+
+msgid "Filipino (Colemak, Latin)"
+msgstr "Филиппинский (Colemak, латиница)"
+
+msgid "Filipino (Colemak, Baybayin)"
+msgstr "Филиппинский (Colemak, байбаин)"
+
+msgid "Filipino (Dvorak, Latin)"
+msgstr "Филиппинский (Dvorak, латиница)"
+
+msgid "Filipino (Dvorak, Baybayin)"
+msgstr "Филиппинский (Dvorak, байбаин)"
+
+msgid "Finnish (Windows)"
+msgstr "Финский (Windows)"
+
+msgid "Finnish (classic)"
+msgstr "Финский (классический)"
+
+msgid "Finnish (classic, no dead keys)"
+msgstr "Финский (классический, без мёртвых клавиш)"
+
+msgid "Finnish (Macintosh)"
+msgstr "Финский (Macintosh)"
+
+msgid "Northern Saami (Finland)"
+msgstr "Северосаамский (Финляндия)"
+
+msgid "French (no dead keys)"
+msgstr "Французский (без мёртвых клавиш)"
+
+msgid "French (alt.)"
+msgstr "Французский (альтернативный)"
+
+msgid "French (alt., no dead keys)"
+msgstr "Французский (альтернативный, без мёртвых клавиш)"
+
+msgid "French (alt., Latin-9 only)"
+msgstr "Французский (альтернативный, только Latin-9)"
+
+msgid "French (legacy, alt.)"
+msgstr "Французский (устаревший, альт.)"
+
+msgid "French (legacy, alt., no dead keys)"
+msgstr "Французский (устаревший, альт., без мёртвых клавиш)"
+
+msgid "French (AZERTY)"
+msgstr "Французский (AZERTY)"
+
+msgid "French (AZERTY, AFNOR)"
+msgstr "Французский (AZERTY, AFNOR)"
+
+msgid "French (BEPO)"
+msgstr "Французский (BEPO)"
+
+msgid "French (BEPO, Latin-9 only)"
+msgstr "Французский (BEPO, только Latin-9)"
+
+msgid "French (BEPO, AFNOR)"
+msgstr "Французский (BEPO, AFNOR)"
+
+msgid "French (Dvorak)"
+msgstr "Французский (Дворжак)"
+
+msgid "French (Macintosh)"
+msgstr "Французский (Macintosh)"
+
+msgid "French (US)"
+msgstr "Французский (США)"
+
+msgid "Breton (France)"
+msgstr "Бретонский (Франция)"
+
+msgid "Occitan"
+msgstr "Окситанский"
+
+msgid "Georgian (France, AZERTY Tskapo)"
+msgstr "Грузинский (Франция, AZERTY Tskapo)"
+
+msgid "French (Canada, Dvorak)"
+msgstr "Французский (Канада, Дворжак)"
+
+msgid "French (Canada, legacy)"
+msgstr "Французский (Канада, устаревший)"
+
+msgid "Canadian (CSA)"
+msgstr "Канадский (CSA)"
+
+msgid "English (Canada)"
+msgstr "Английский (Канада)"
+
+msgid "Inuktitut"
+msgstr "Инуктитут"
+
+msgid "Georgian (ergonomic)"
+msgstr "Грузинский (эргономичный)"
+
+msgid "Georgian (MESS)"
+msgstr "Грузинский (MESS)"
+
+msgid "Ossetian (Georgia)"
+msgstr "Осетинский (Грузия)"
+
+msgid "Russian (Georgia)"
+msgstr "Русский (Грузия)"
+
+msgid "German (dead acute)"
+msgstr "Немецкий (dead shark)"
+
+msgid "German (dead grave acute)"
+msgstr "Немецкий (dead grave shark)"
+
+msgid "German (dead tilde)"
+msgstr "Немецкий (dead tilde)"
+
+msgid "German (no dead keys)"
+msgstr "Немецкий (без dead keys)"
+
+msgid "German (E1)"
+msgstr "Немецкий (E1)"
+
+msgid "German (E2)"
+msgstr "Немецкий (E2)"
+
+msgid "German (T3)"
+msgstr "Немецкий (T3)"
+
+msgid "German (US)"
+msgstr "Немецкий (США)"
+
+msgid "German (Dvorak)"
+msgstr "Немецкий (Dvorak)"
+
+msgid "German (Macintosh)"
+msgstr "Немецкий (Macintosh)"
+
+msgid "German (Macintosh, no dead keys)"
+msgstr "Немецкий (Macintosh, без мёртвых клавиш)"
+
+msgid "German (Neo 2)"
+msgstr "Немецкий (Neo 2)"
+
+msgid "German (QWERTY)"
+msgstr "Немецкий (QWERTY)"
+
+msgid "Lower Sorbian"
+msgstr "Нижнелужицкий"
+
+msgid "Lower Sorbian (QWERTZ)"
+msgstr "Нижнелужицкий (QWERTZ)"
+
+msgid "Romanian (Germany)"
+msgstr "Румынский (Германия)"
+
+msgid "Romanian (Germany, no dead keys)"
+msgstr "Румынский (Германия, без мёртвых клавиш)"
+
+msgid "Russian (Germany, phonetic)"
+msgstr "Русский (Германия, фонетическая раскладка)"
+
+msgid "Turkish (Germany)"
+msgstr "Турецкий (Германия)"
+
+msgid "German (Austria, no dead keys)"
+msgstr "Немецкий (Австрия, без мёртвых клавиш)"
+
+msgid "German (Austria, Macintosh)"
+msgstr "Немецкий (Австрия, Macintosh)"
+
+msgid "German (Switzerland, no dead keys)"
+msgstr "Немецкий (Швейцария, без мёртвых клавиш)"
+
+msgid "German (Switzerland, Macintosh)"
+msgstr "Немецкий (Швейцария, Macintosh)"
+
+msgid "German (Switzerland, legacy)"
+msgstr "Немецкий (Швейцария, устаревшая раскладка)"
+
+msgid "French (Switzerland)"
+msgstr "Французский (Швейцария)"
+
+msgid "French (Switzerland, no dead keys)"
+msgstr "Французский (Швейцария, без мёртвых клавиш)"
+
+msgid "French (Switzerland, Macintosh)"
+msgstr "Французский (Швейцария, Macintosh)"
+
+msgid "Greek (simple)"
+msgstr "Греческий (простой)"
+
+msgid "Greek (no dead keys)"
+msgstr "Греческий (без мёртвых клавиш)"
+
+msgid "Greek (polytonic)"
+msgstr "Греческий (политонический)"
+
+msgid "Hebrew (SI-1452-2)"
+msgstr "Иврит (SI-1452-2)"
+
+msgid "Hebrew (lyx)"
+msgstr "Иврит (lyx)"
+
+msgid "Hebrew (phonetic)"
+msgstr "Иврит (фонетический)"
+
+msgid "Hebrew (Biblical, Tiro)"
+msgstr "Иврит (библейский, тиро)"
+
+msgid "Hungarian (standard)"
+msgstr "Венгерский (стандартный)"
+
+msgid "Hungarian (no dead keys)"
+msgstr "Венгерский (без мёртвых клавиш)"
+
+msgid "Hungarian (QWERTY)"
+msgstr "Венгерский (QWERTY)"
+
+msgid "Hungarian (QWERTZ, 101-key, comma, dead keys)"
+msgstr "Венгерский (QWERTZ, 101 клавиша, запятая, мёртвые клавиши)"
+
+msgid "Hungarian (QWERTZ, 101-key, comma, no dead keys)"
+msgstr "Венгерский (QWERTZ, 101 клавиша, запятая, без мёртвых клавиш)"
+
+msgid "Hungarian (QWERTZ, 101-key, dot, dead keys)"
+msgstr "Венгерский (QWERTZ, 101 клавиша, точка, мёртвые клавиши)"
+
+msgid "Hungarian (QWERTZ, 101-key, dot, no dead keys)"
+msgstr "Венгерский (QWERTZ, 101 клавиша, точка, без мёртвых клавиш)"
+
+msgid "Hungarian (QWERTY, 101-key, comma, dead keys)"
+msgstr "Венгерский (QWERTY, 101 клавиша, запятая, мёртвые клавиши)"
+
+msgid "Hungarian (QWERTY, 101-key, comma, no dead keys)"
+msgstr "Венгерский (QWERTY, 101 клавиша, запятая, без мёртвых клавиш)"
+
+msgid "Hungarian (QWERTY, 101-key, dot, dead keys)"
+msgstr "Венгерский (QWERTY, 101 клавиша, точка, мёртвые клавиши)"
+
+msgid "Hungarian (QWERTY, 101-key, dot, no dead keys)"
+msgstr "Венгерский (QWERTY, 101 клавиша, точка, мёртвые клавиши)"
+
+msgid "Hungarian (QWERTZ, 102-key, comma, dead keys)"
+msgstr "Венгерский (QWERTZ, 102 клавиши, запятая, неактивные клавиши)"
+
+msgid "Hungarian (QWERTZ, 102-key, comma, no dead keys)"
+msgstr "Венгерская (QWERTZ, 102 клавиши, запятая, без неактивных клавиш)"
+
+msgid "Hungarian (QWERTZ, 102-key, dot, dead keys)"
+msgstr "Венгерская (QWERTZ, 102 клавиши, точка, неактивные клавиши)"
+
+msgid "Hungarian (QWERTZ, 102-key, dot, no dead keys)"
+msgstr "Венгерская (QWERTZ, 102 клавиши, точка, без неактивных клавиш)"
+
+msgid "Hungarian (QWERTY, 102-key, comma, dead keys)"
+msgstr "Венгерская (QWERTY, 102 клавиши, запятая, неактивные клавиши)"
+
+msgid "Hungarian (QWERTY, 102-key, comma, no dead keys)"
+msgstr "Венгерская (QWERTY, 102 клавиши, запятая, без неактивных клавиш)"
+
+msgid "Hungarian (QWERTY, 102-key, dot, dead keys)"
+msgstr "Венгерская (QWERTY, 102 клавиши, точка, без неактивных клавиш)"
+
+msgid "Hungarian (QWERTY, 102-key, dot, no dead keys)"
+msgstr "Венгерская (QWERTY, 102 клавиши, точка, неактивные клавиши)"
+
+msgid "Icelandic (Macintosh, legacy)"
+msgstr "Исландская (Macintosh, устаревшая)"
+
+msgid "Icelandic (Macintosh)"
+msgstr "Исландская (Macintosh)"
+
+msgid "Icelandic (Dvorak)"
+msgstr "Исландская (Dvorak)"
+
+msgid "Assamese (KaGaPa, phonetic)"
+msgstr "Ассамский (KaGaPa, фонетическая)"
+
+msgid "Bangla (India)"
+msgstr "Бенгальский (Индия)"
+
+msgid "Bangla (India, Probhat)"
+msgstr "Бенгальский (Индия, Пробхат)"
+
+msgid "Bangla (India, Baishakhi)"
+msgstr "Бангла (Индия, Байшакхи)"
+
+msgid "Bangla (India, Bornona)"
+msgstr "Бангла (Индия, Борнона)"
+
+msgid "Bangla (India, KaGaPa, phonetic)"
+msgstr "Бангла (Индия, КаГаПа, фонетика)"
+
+msgid "Bangla (India, Gitanjali)"
+msgstr "Бангла (Индия, Гитанджали)"
+
+msgid "Bangla (India, Baishakhi InScript)"
+msgstr "Бангла (Индия, шрифт Байшакхи)"
+
+msgid "English (India, with rupee)"
+msgstr "Английский (Индия, рупия)"
+
+msgid "Gujarati"
+msgstr "Гуджарати"
+
+msgid "Gujarati (KaGaPa, phonetic)"
+msgstr "Гуджарати (КаГаПа, фонетика)"
+
+msgid "Hindi (Bolnagri)"
+msgstr "Хинди (Болнагри)"
+
+msgid "Hindi (Wx)"
+msgstr "Хинди (Wx)"
+
+msgid "Hindi (KaGaPa, phonetic)"
+msgstr "Хинди (КаГаПа, фонетический)"
+
+msgid "Kannada"
+msgstr "Каннада"
+
+msgid "Kannada (KaGaPa, phonetic)"
+msgstr "Каннада (КаГаПа, фонетический)"
+
+msgid "Malayalam"
+msgstr "малаялам"
+
+msgid "Malayalam (Lalitha)"
+msgstr "Малаялам (Лалита)"
+
+msgid "Malayalam (enhanced InScript, with rupee)"
+msgstr "Малаялам (расширенный InScript, с рупиями)"
+
+msgid "Malayalam (Poorna, extended InScript)"
+msgstr "Малаялам (Пурна, расширенный InScript)"
+
+msgid "Manipuri (Meitei)"
+msgstr "Манипури (Мэйтей)"
+
+msgid "Marathi (KaGaPa, phonetic)"
+msgstr "Маратхи (КаГаПа, фонетический)"
+
+msgid "Marathi (enhanced InScript)"
+msgstr "Маратхи (расширенный InScript)"
+
+msgid "Oriya"
+msgstr "Ория"
+
+msgid "Oriya (Bolnagri)"
+msgstr "Ория (Болнагри)"
+
+msgid "Oriya (Wx)"
+msgstr "Ория (Wx)"
+
+msgid "Punjabi (Gurmukhi)"
+msgstr "Пенджаби (Гурмухи)"
+
+msgid "Punjabi (Gurmukhi Jhelum)"
+msgstr "Пенджаби (Гурмухи Джелум)"
+
+msgid "Sanskrit (KaGaPa, phonetic)"
+msgstr "Санскрит (КаГаПа, фонетический)"
+
+msgid "Santali (Ol Chiki)"
+msgstr "Сантали (Ол Чики)"
+
+msgid "Tamil (TamilNet '99)"
+msgstr "Тамильский (TamilNet '99)"
+
+msgid "Tamil (TamilNet '99 with Tamil numerals)"
+msgstr "Тамильский (TamilNet '99 с тамильскими цифрами)"
+
+msgid "Tamil (TamilNet '99, TAB encoding)"
+msgstr "Тамильский (TamilNet '99, кодировка TAB)"
+
+msgid "Tamil (TamilNet '99, TSCII encoding)"
+msgstr "Тамильский (TamilNet '99, кодировка TSCII)"
+
+msgid "Tamil (InScript, with Arabic numerals)"
+msgstr "Тамильский (InScript, с арабскими цифрами)"
+
+msgid "Tamil (InScript, with Tamil numerals)"
+msgstr "Тамильский (InScript, с тамильскими цифрами)"
+
+msgid "Telugu"
+msgstr "телугу"
+
+msgid "Telugu (KaGaPa, phonetic)"
+msgstr "Телугу (КаГаПа, фонетический)"
+
+msgid "Telugu (Sarala)"
+msgstr "Телугу (Сарала)"
+
+msgid "Urdu (phonetic)"
+msgstr "Урду (фонетический)"
+
+msgid "Urdu (alt. phonetic)"
+msgstr "Урду (альт. фонетический)"
+
+msgid "Urdu (Windows)"
+msgstr "Урду (Windows)"
+
+msgid "Indic IPA"
+msgstr "Индийский ИПА"
+
+msgid "Indonesian (Arab Melayu, phonetic)"
+msgstr "Индонезийский (арабский мелайу, фонетический)"
+
+msgid "Indonesian (Arab Melayu, extended phonetic)"
+msgstr "Индонезийский (арабский мелайу, расширенный Фонетический)"
+
+msgid "Indonesian (Arab Pegon, phonetic)"
+msgstr "Индонезийский (арабский пегон, фонетический)"
+
+msgid "Javanese"
+msgstr "Яванский"
+
+msgid "Irish (UnicodeExpert)"
+msgstr "Ирландский (UnicodeExpert)"
+
+msgid "CloGaelach"
+msgstr "Кло-гэльский"
+
+msgid "Ogham"
+msgstr "Огам"
+
+msgid "Ogham (IS434)"
+msgstr "Огам (IS434)"
+
+msgid "Italian (no dead keys)"
+msgstr "Итальянский (без мёртвых клавиш)"
+
+msgid "Italian (Windows)"
+msgstr "Итальянский (Windows)"
+
+msgid "Italian (Macintosh)"
+msgstr "Итальянский (Macintosh)"
+
+msgid "Italian (US)"
+msgstr "Итальянский (США)"
+
+msgid "Italian (IBM 142)"
+msgstr "Итальянский (IBM 142)"
+
+msgid "Friulian (Italy)"
+msgstr "Фриульский (Италия)"
+
+msgid "Sicilian"
+msgstr "Сицилийский"
+
+msgid "Georgian (Italy)"
+msgstr "Грузинский (Италия)"
+
+msgid "Japanese (Kana)"
+msgstr "Японский (Кана)"
+
+msgid "Japanese (Kana 86)"
+msgstr "Японский (Кана 86)"
+
+msgid "Japanese (OADG 109A)"
+msgstr "Японский (OADG 109A)"
+
+msgid "Japanese (Macintosh)"
+msgstr "Японский (Macintosh)"
+
+msgid "Japanese (Dvorak)"
+msgstr "Японский (Дворак)"
+
+msgid "Kazakh (with Russian)"
+msgstr "Казахский (с русским)"
+
+msgid "Kazakh (extended)"
+msgstr "Казахский (расширенный)"
+
+msgid "Kazakh (Latin)"
+msgstr "Казахский (латиница)"
+
+msgid "Russian (Kazakhstan, with Kazakh)"
+msgstr "Русский (Казахстан, с казахским)"
+
+msgid "Korean (101/104-key compatible)"
+msgstr "Корейский (совместимый с 101/104 клавишами)"
+
+msgid "Kyrgyz (phonetic)"
+msgstr "Киргизский (фонетический)"
+
+msgid "Lao (STEA)"
+msgstr "Лаосский (STEA)"
+
+msgid "Latvian (apostrophe)"
+msgstr "Латышский (апостроф)"
+
+msgid "Latvian (tilde)"
+msgstr "Латышский (тильда)"
+
+msgid "Latvian (F)"
+msgstr "Латышский (F)"
+
+msgid "Latvian (Modern Latin)"
+msgstr "Латышский (современная латиница)"
+
+msgid "Latvian (Modern Cyrillic)"
+msgstr "Латышский (современная кириллица)"
+
+msgid "Latvian (ergonomic, ŪGJRMV)"
+msgstr "Латышский (эргономичный, ŪGJRMV)"
+
+msgid "Latvian (adapted)"
+msgstr "Латышский (адаптированный)"
+
+msgid "Lithuanian (standard)"
+msgstr "Литовский (стандартный)"
+
+msgid "Lithuanian (US)"
+msgstr "Литовский (США)"
+
+msgid "Lithuanian (IBM)"
+msgstr "Литовский (IBM)"
+
+msgid "Lithuanian (LEKP)"
+msgstr "Литовский (LEKP)"
+
+msgid "Lithuanian (LEKPa)"
+msgstr "Литовский (LEKPa)"
+
+msgid "Lithuanian (Ratise)"
+msgstr "Литовский (Ratise)"
+
+msgid "Samogitian"
+msgstr "Жямайтийский"
+
+msgid "Macedonian (no dead keys)"
+msgstr "Македонский (без мёртвых клавиш)"
+
+msgid "Malay (Jawi, phonetic)"
+msgstr "Малайский (Jawi, фонетический)"
+
+msgid "Maltese (US)"
+msgstr "Мальтийский (США)"
+
+msgid "Maltese (US, with AltGr overrides)"
+msgstr "Мальтийский (США, с переопределением AltGr)"
+
+msgid "Maltese (UK, with AltGr overrides)"
+msgstr "Мальтийский (Великобритания, с переопределением AltGr)"
+
+msgid "Gagauz (Moldova)"
+msgstr "Гагаузский (Молдова)"
+
+msgid "Montenegrin (Cyrillic)"
+msgstr "Черногорский (кириллица)"
+
+msgid "Montenegrin (Cyrillic, ZE and ZHE swapped)"
+msgstr "Черногорский (кириллица, ZE и ZHE поменялись местами)"
+
+msgid "Montenegrin (Cyrillic, with guillemets)"
+msgstr "Черногорский (кириллица, с кайриллицей)"
+
+msgid "Montenegrin (Latin, Unicode)"
+msgstr "Черногорский (латиница, Unicode)"
+
+msgid "Montenegrin (Latin, QWERTY)"
+msgstr "Черногорский (латиница, QWERTY)"
+
+msgid "Montenegrin (Latin, Unicode, QWERTY)"
+msgstr "Черногорский (латиница, Unicode, QWERTY)"
+
+msgid "Montenegrin (Latin, with guillemets)"
+msgstr "Черногорский (латиница, с кайриллицей)"
+
+msgid "Norwegian (no dead keys)"
+msgstr "Норвежский (без мёртвых клавиш)"
+
+msgid "Norwegian (Windows)"
+msgstr "Норвежский (Windows)"
+
+msgid "Norwegian (Macintosh)"
+msgstr "Норвежский (Macintosh)"
+
+msgid "Norwegian (Macintosh, no dead keys)"
+msgstr "Норвежский (Macintosh, без мёртвых клавиш)"
+
+msgid "Norwegian (Colemak)"
+msgstr "Норвежский (Colemak)"
+
+msgid "Norwegian (Colemak-DH)"
+msgstr "Норвежский (Colemak-DH)"
+
+msgid "Norwegian (Colemak-DH Wide)"
+msgstr "Норвежский (Colemak-DH Wide)"
+
+msgid "Norwegian (Dvorak)"
+msgstr "Норвежский (Dvorak)"
+
+msgid "Northern Saami (Norway)"
+msgstr "Северосаамский (Норвегия)"
+
+msgid "Northern Saami (Norway, no dead keys)"
+msgstr "Северосаамский (Норвегия, без мёртвых клавиш)"
+
+msgid "Persian (with Persian keypad)"
+msgstr "Персидский (с персидской клавиатурой)"
+
+msgid "Persian (Windows)"
+msgstr "Персидский (Windows)"
+
+msgid "Azerbaijani (Iran)"
+msgstr "Азербайджанский (Иран)"
+
+msgid "Kurdish (Iran, Latin Q)"
+msgstr "Курдский (Иран,Латинская Q)"
+
+msgid "Kurdish (Iran, Latin Alt-Q)"
+msgstr "Курдский (Иран, латинская раскладка Alt-Q)"
+
+msgid "Kurdish (Iran, F)"
+msgstr "Курдский (Иран, F)"
+
+msgid "Kurdish (Iran, Arabic-Latin)"
+msgstr "Курдский (Иран, арабская латиница)"
+
+msgid "Polish (legacy)"
+msgstr "Польский (устаревший)"
+
+msgid "Polish (QWERTZ)"
+msgstr "Польский (QWERTZ)"
+
+msgid "Polish (Dvorak)"
+msgstr "Польский (Дворжак)"
+
+msgid "Polish (Dvorak, with Polish quotes on quotemark key)"
+msgstr "Польский (Дворжак, с польскими кавычками на клавише с кавычками)"
+
+msgid "Polish (Dvorak, with Polish quotes on key 1)"
+msgstr "Польский (Дворжак, с польскими кавычками на клавише 1)"
+
+msgid "Polish (programmer Dvorak)"
+msgstr "Польский (программистский Дворжак)"
+
+msgid "Kashubian"
+msgstr "Кашубский"
+
+msgid "Silesian"
+msgstr "Силезский"
+
+msgid "Russian (Poland, phonetic Dvorak)"
+msgstr "Русский (Польша, фонетическая раскладка Дворжак)"
+
+msgid "Portuguese (no dead keys)"
+msgstr "Португальский (без мёртвых клавиш)"
+
+msgid "Portuguese (Macintosh)"
+msgstr "Португальский (Macintosh)"
+
+msgid "Portuguese (Macintosh, no dead keys)"
+msgstr "Португальский (Macintosh, без мёртвых клавиш)"
+
+msgid "Portuguese (Nativo)"
+msgstr "Португальский (Nativo)"
+
+msgid "Portuguese (Nativo for US keyboards)"
+msgstr "Португальский (Nativo для клавиатур США)"
+
+msgid "Esperanto (Portugal, Nativo)"
+msgstr "Эсперанто (Португалия, Nativo)"
+
+msgid "Portuguese (Brazil, no dead keys)"
+msgstr "Португальский (Бразилия, без мёртвых клавиш)"
+
+msgid "Portuguese (Brazil, Dvorak)"
+msgstr "Португальский (Бразилия, Дворжак)"
+
+msgid "Portuguese (Brazil, Nativo)"
+msgstr "Португальский (Бразилия, Nativo)"
+
+msgid "Portuguese (Brazil, Nativo for US keyboards)"
+msgstr "Португальский (Бразилия, Nativo для клавиатур США)"
+
+msgid "Portuguese (Brazil, IBM/Lenovo ThinkPad)"
+msgstr "Португальский (Бразилия, IBM/Lenovo ThinkPad)"
+
+msgid "Esperanto (Brazil, Nativo)"
+msgstr "Эсперанто (Бразилия, Nativo)"
+
+msgid "Russian (Brazil, phonetic)"
+msgstr "Русский (Бразилия, фонетический)"
+
+msgid "Romanian (standard)"
+msgstr "Румынский (стандартный)"
+
+msgid "Romanian (Windows)"
+msgstr "Румынский (Windows)"
+
+msgid "Russian (phonetic)"
+msgstr "Русский (фонетический)"
+
+msgid "Russian (phonetic, Windows)"
+msgstr "Русский (фонетический, Windows)"
+
+msgid "Russian (phonetic, YAZHERTY)"
+msgstr "Русский (фонетический, ЯЖЕРТЫ)"
+
+msgid "Russian (phonetic, AZERTY)"
+msgstr "Русский (фонетический, AZERTY)"
+
+msgid "Russian (phonetic, Dvorak)"
+msgstr "Русский (фонетический, Дворжак)"
+
+msgid "Russian (typewriter)"
+msgstr "Русский (пишущая машинка)"
+
+msgid "Russian (engineering, RU)"
+msgstr "Русский (инженерный, RU)"
+
+msgid "Russian (engineering, EN)"
+msgstr "Русский (инженерный, EN)"
+
+msgid "Russian (legacy)"
+msgstr "Русский (устаревший)"
+
+msgid "Russian (typewriter, legacy)"
+msgstr "Русский (пишущая машинка, устаревший)"
+
+msgid "Russian (DOS)"
+msgstr "Русский (DOS)"
+
+msgid "Russian (Macintosh)"
+msgstr "Русский (Macintosh)"
+
+msgid "Abkhazian (Russia)"
+msgstr "Абхазский (Россия)"
+
+msgid "Bashkirian"
+msgstr "Башкирский"
+
+msgid "Chuvash"
+msgstr "Чувашский"
+
+msgid "Chuvash (Latin)"
+msgstr "Чувашский (латиница)"
+
+msgid "Kalmyk"
+msgstr "Калмыцкий"
+
+msgid "Komi"
+msgstr "Коми"
+
+msgid "Mari"
+msgstr "Марийский"
+
+msgid "Ossetian (legacy)"
+msgstr "Осетинский (устаревший)"
+
+msgid "Ossetian (Windows)"
+msgstr "Осетинский (Windows)"
+
+msgid "Serbian (Russia)"
+msgstr "Сербский (Россия)"
+
+msgid "Tatar"
+msgstr "Татарский"
+
+msgid "Udmurt"
+msgstr "Удмуртский"
+
+msgid "Yakut"
+msgstr "Якутский"
+
+msgid "Serbian (Cyrillic, with guillemets)"
+msgstr "Сербский (кириллица, с кайрами)"
+
+msgid "Serbian (Cyrillic, ZE and ZHE swapped)"
+msgstr "Сербский (кириллица, ZE и ZHE поменяны местами)"
+
+msgid "Serbian (Latin)"
+msgstr "Сербский (латиница)"
+
+msgid "Serbian (Latin, with guillemets)"
+msgstr "Сербский (латиница, с кайрами)"
+
+msgid "Serbian (Latin, Unicode)"
+msgstr "Сербский (латиница, Unicode)"
+
+msgid "Serbian (Latin, QWERTY)"
+msgstr "Сербский (латиница, QWERTY)"
+
+msgid "Serbian (Latin, Unicode, QWERTY)"
+msgstr "Сербский (латиница, Unicode, QWERTY)"
+
+msgid "Pannonian Rusyn"
+msgstr "Паннонский русинский"
+
+msgid "Sinhala (US)"
+msgstr "Сингальский (США)"
+
+msgid "Tamil (Sri Lanka, TamilNet '99)"
+msgstr "Тамильский (Шри-Ланка, TamilNet '99)"
+
+msgid "Tamil (Sri Lanka, TamilNet '99, TAB encoding)"
+msgstr "Тамильский (Шри-Ланка, TamilNet '99, кодировка TAB)"
+
+msgid "Slovak (extra backslash)"
+msgstr "Словацкий (дополнительная обратная косая черта)"
+
+msgid "Slovak (QWERTY)"
+msgstr "Словацкий (QWERTY)"
+
+msgid "Slovak (QWERTY, extra backslash)"
+msgstr "Словацкий (QWERTY, дополнительная обратная косая черта)"
+
+msgid "Slovenian (with guillemets)"
+msgstr "Словенский (с кайрами)"
+
+msgid "Slovenian (US)"
+msgstr "Словенский (США)"
+
+msgid "Spanish (no dead keys)"
+msgstr "Испанский (без мёртвых клавиш)"
+
+msgid "Spanish (dead tilde)"
+msgstr "Испанский (с тильдой)"
+
+msgid "Spanish (Windows)"
+msgstr "Испанский (Windows)"
+
+msgid "Spanish (Dvorak)"
+msgstr "Испанский (Дворжак)"
+
+msgid "Asturian (Spain, with bottom-dot H and L)"
+msgstr "Астурийский (Испания, с точками H и L в нижней части)"
+
+msgid "Catalan (Spain, with middle-dot L)"
+msgstr "Каталанский (Испания, с точкой L в средней части)"
+
+msgid "Spanish (Latin American, no dead keys)"
+msgstr "Испанский (Латиноамериканский, без тильды)"
+
+msgid "Spanish (Latin American, dead tilde)"
+msgstr "Испанский (Латиноамериканский, с тильдой)"
+
+msgid "Spanish (Latin American, Dvorak)"
+msgstr "Испанский (Латиноамериканский, Дворжак)"
+
+msgid "Spanish (Latin American, Colemak)"
+msgstr "Испанский (Латиноамериканский, Колемак)"
+
+msgid "Kikuyu"
+msgstr "Кикуйю"
+
+msgid "Swedish (no dead keys)"
+msgstr "Шведский (без тильды)"
+
+msgid "Swedish (Dvorak)"
+msgstr "Шведский (Дворжак)"
+
+msgid "Swedish (Dvorak, intl.)"
+msgstr "Шведский (Дворжак, международный)"
+
+msgid "Swedish (Svdvorak)"
+msgstr "Шведский (Свдвожак)"
+
+msgid "Swedish (Macintosh)"
+msgstr "Шведский (Macintosh)"
+
+msgid "Swedish (US)"
+msgstr "Шведский (США)"
+
+msgid "Swedish Sign Language"
+msgstr "Шведский жестовый язык"
+
+msgid "Northern Saami (Sweden)"
+msgstr "Северосаамский (Швеция)"
+
+msgid "Russian (Sweden, phonetic)"
+msgstr "Русский (Швеция, фонетический)"
+
+msgid "Taiwanese (indigenous)"
+msgstr "Тайваньский (коренной)"
+
+msgid "Saisiyat (Taiwan)"
+msgstr "Сайсият (Тайвань)"
+
+msgid "Tajik (legacy)"
+msgstr "Таджикский (устаревший)"
+
+msgid "Thai (TIS-820.2538)"
+msgstr "Тайский (TIS-820.2538)"
+
+msgid "Thai (Pattachote)"
+msgstr "Тайский (паттачот)"
+
+msgid "Turkmen (Alt-Q)"
+msgstr "Туркменский (Alt-Q)"
+
+msgid "Turkish (F)"
+msgstr "Турецкий (F)"
+
+msgid "Turkish (E)"
+msgstr "Турецкий (E)"
+
+msgid "Turkish (Alt-Q)"
+msgstr "Турецкий (Alt-Q)"
+
+msgid "Turkish (intl., with dead keys)"
+msgstr "Турецкий (международный, с неактивными клавишами)"
+
+msgid "Kurdish (Turkey, Latin Q)"
+msgstr "Курдский (Турция, латинская Q)"
+
+msgid "Kurdish (Turkey, F)"
+msgstr "Курдский (Турция, F)"
+
+msgid "Kurdish (Turkey, Latin Alt-Q)"
+msgstr "Курдский (Турция, латинская Alt-Q)"
+
+msgid "Ukrainian (phonetic)"
+msgstr "Украинский (фонетический)"
+
+msgid "Ukrainian (typewriter)"
+msgstr "Украинский (печатная машинка)"
+
+msgid "Ukrainian (Windows)"
+msgstr "Украинский (Windows)"
+
+msgid "Ukrainian (macOS)"
+msgstr "Украинский (macOS)"
+
+msgid "Ukrainian (legacy)"
+msgstr "Украинский (устаревший)"
+
+msgid "Ukrainian (homophonic)"
+msgstr "Украинский (омофонный)"
+
+msgid "Crimean Tatar (Turkish Q)"
+msgstr "Крымско-татарский (турецкая Q)"
+
+msgid "Crimean Tatar (Turkish F)"
+msgstr "Крымско-татарский (турецкая F)"
+
+msgid "Crimean Tatar (Turkish Alt-Q)"
+msgstr "Крымско-татарский (турецкая Alt-Q)"
+
+msgid "Urdu (Pakistan, CRULP)"
+msgstr "Урду (Пакистан, CRULP)"
+
+msgid "Urdu (Pakistan, NLA)"
+msgstr "Урду (Пакистан, NLA)"
+
+msgid "Arabic (Pakistan)"
+msgstr "Арабский (Пакистан)"
+
+msgid "Sindhi"
+msgstr "Синдхи"
+
+msgid "Uzbek (Latin)"
+msgstr "Узбекский (латиница)"
+
+msgid "Vietnamese (US)"
+msgstr "Вьетнамский (США)"
+
+msgid "Vietnamese (France)"
+msgstr "Вьетнамский (Франция)"
diff --git a/locale/ubl-settings-keyboard-models.pot b/locale/ubl-settings-keyboard-models.pot
new file mode 100644
index 0000000..2be8d9a
--- /dev/null
+++ b/locale/ubl-settings-keyboard-models.pot
@@ -0,0 +1,578 @@
+# Language translations for ubl-settings-keyboard package.
+# Copyright (C) 2022, UBTech LLC
+# This file is distributed under the same license as the ubl-settings-keyboard package.
+# UBLinux Team , 2022
+#
+#, fuzzy
+msgid ""
+msgstr """Project-Id-Version: ubl-settings-keyboard 1.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-05-22 16:12+0600\n"
+"PO-Revision-Date: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+msgid "Generic 86-key PC"
+msgstr ""
+
+msgid "Generic 101-key PC"
+msgstr ""
+
+msgid "Generic 102-key PC"
+msgstr ""
+
+msgid "Generic 104-key PC"
+msgstr ""
+
+msgid "Generic 104-key PC with L-shaped Enter key"
+msgstr ""
+
+msgid "Generic 105-key PC"
+msgstr ""
+
+msgid "A4Tech KB-21"
+msgstr ""
+
+msgid "A4Tech KBS-8"
+msgstr ""
+
+msgid "A4Tech Wireless Desktop RFKB-23"
+msgstr ""
+
+msgid "Acer AirKey V"
+msgstr ""
+
+msgid "Acer C300"
+msgstr ""
+
+msgid "Acer Ferrari 4000"
+msgstr ""
+
+msgid "Acer laptop"
+msgstr ""
+
+msgid "Advance Scorpius KI"
+msgstr ""
+
+msgid "Apple"
+msgstr ""
+
+msgid "Apple Aluminium (ANSI)"
+msgstr ""
+
+msgid "Apple Aluminium (ISO)"
+msgstr ""
+
+msgid "Apple Aluminium (JIS)"
+msgstr ""
+
+msgid "Asus laptop"
+msgstr ""
+
+msgid "Azona RF2300 Wireless Internet"
+msgstr ""
+
+msgid "BenQ X-Touch"
+msgstr ""
+
+msgid "BenQ X-Touch 730"
+msgstr ""
+
+msgid "BenQ X-Touch 800"
+msgstr ""
+
+msgid "Brother Internet"
+msgstr ""
+
+msgid "BTC 5090"
+msgstr ""
+
+msgid "BTC 5113RF Multimedia"
+msgstr ""
+
+msgid "BTC 5126T"
+msgstr ""
+
+msgid "BTC 6301URF"
+msgstr ""
+
+msgid "BTC 9000"
+msgstr ""
+
+msgid "BTC 9000A"
+msgstr ""
+
+msgid "BTC 9001AH"
+msgstr ""
+
+msgid "BTC 9019U"
+msgstr ""
+
+msgid "BTC 9116U Mini Wireless Internet and Gaming"
+msgstr ""
+
+msgid "Cherry Blue Line CyBo@rd"
+msgstr ""
+
+msgid "Cherry Blue Line CyBo@rd (alt.)"
+msgstr ""
+
+msgid "Cherry B.UNLIMITED"
+msgstr ""
+
+msgid "Cherry CyBo@rd USB-Hub"
+msgstr ""
+
+msgid "Cherry CyMotion Expert"
+msgstr ""
+
+msgid "Cherry CyMotion Master Linux"
+msgstr ""
+
+msgid "Cherry CyMotion Master XPress"
+msgstr ""
+
+msgid "Chicony Internet"
+msgstr ""
+
+msgid "Chicony KB-9885"
+msgstr ""
+
+msgid "Chicony KU-0108"
+msgstr ""
+
+msgid "Chicony KU-0420"
+msgstr ""
+
+msgid "Chromebook"
+msgstr ""
+
+msgid "Classmate PC"
+msgstr ""
+
+msgid "Compal FL90"
+msgstr ""
+
+msgid "Compaq Armada laptop"
+msgstr ""
+
+msgid "Compaq Easy Access"
+msgstr ""
+
+msgid "Compaq Internet (7 keys)"
+msgstr ""
+
+msgid "Compaq Internet (13 keys)"
+msgstr ""
+
+msgid "Compaq Internet (18 keys)"
+msgstr ""
+
+msgid "Compaq iPaq"
+msgstr ""
+
+msgid "Compaq Presario laptop"
+msgstr ""
+
+msgid "Creative Desktop Wireless 7000"
+msgstr ""
+
+msgid "Dell"
+msgstr ""
+
+msgid "Dell 101-key PC"
+msgstr ""
+
+msgid "Dell Latitude laptop"
+msgstr ""
+
+msgid "Dell Inspiron 6000/8000 laptop"
+msgstr ""
+
+msgid "Dell Precision M laptop"
+msgstr ""
+
+msgid "Dell Precision M65 laptop"
+msgstr ""
+
+msgid "Dell SK-8125"
+msgstr ""
+
+msgid "Dell SK-8135"
+msgstr ""
+
+msgid "Dell USB Multimedia"
+msgstr ""
+
+msgid "Dexxa Wireless Desktop"
+msgstr ""
+
+msgid "Diamond 9801/9802"
+msgstr ""
+
+msgid "DTK2000"
+msgstr ""
+
+msgid "eMachines m6800 laptop"
+msgstr ""
+
+msgid "Ennyah DKB-1008"
+msgstr ""
+
+msgid "Everex STEPnote"
+msgstr ""
+
+msgid "Fujitsu-Siemens Amilo laptop"
+msgstr ""
+
+msgid "Genius Comfy KB-16M/Multimedia KWD-910"
+msgstr ""
+
+msgid "Genius Comfy KB-12e"
+msgstr ""
+
+msgid "Genius Comfy KB-21e-Scroll"
+msgstr ""
+
+msgid "Genius KB-19e NB"
+msgstr ""
+
+msgid "Genius KKB-2050HS"
+msgstr ""
+
+msgid "Gyration"
+msgstr ""
+
+msgid "Happy Hacking"
+msgstr ""
+
+msgid "Happy Hacking for Mac"
+msgstr ""
+
+msgid "Hewlett-Packard Internet"
+msgstr ""
+
+msgid "Hewlett-Packard Mini 110 laptop"
+msgstr ""
+
+msgid "Hewlett-Packard nx9020"
+msgstr ""
+
+msgid "Hewlett-Packard Omnibook 500"
+msgstr ""
+
+msgid "Hewlett-Packard Omnibook 500 FA"
+msgstr ""
+
+msgid "Hewlett-Packard Omnibook 6000/6100"
+msgstr ""
+
+msgid "Hewlett-Packard Omnibook XE3 GC"
+msgstr ""
+
+msgid "Hewlett-Packard Omnibook XE3 GF"
+msgstr ""
+
+msgid "Hewlett-Packard Omnibook XT1000"
+msgstr ""
+
+msgid "Hewlett-Packard Pavilion dv5"
+msgstr ""
+
+msgid "Hewlett-Packard Pavilion ZT1100"
+msgstr ""
+
+msgid "Hewlett-Packard SK-2501 Multimedia"
+msgstr ""
+
+msgid "Honeywell Euroboard"
+msgstr ""
+
+msgid "IBM Rapid Access"
+msgstr ""
+
+msgid "IBM Rapid Access II"
+msgstr ""
+
+msgid "IBM Space Saver"
+msgstr ""
+
+msgid "IBM ThinkPad 560Z/600/600E/A22E"
+msgstr ""
+
+msgid "IBM ThinkPad R60/T60/R61/T61"
+msgstr ""
+
+msgid "IBM ThinkPad Z60m/Z60t/Z61m/Z61t"
+msgstr ""
+
+msgid "Keytronic FlexPro"
+msgstr ""
+
+msgid "Kinesis"
+msgstr ""
+
+msgid "Logitech"
+msgstr ""
+
+msgid "Logitech Access"
+msgstr ""
+
+msgid "Logitech Cordless Desktop"
+msgstr ""
+
+msgid "Logitech Cordless Desktop (alt.)"
+msgstr ""
+
+msgid "Logitech Cordless Desktop EX110"
+msgstr ""
+
+msgid "Logitech Cordless Desktop iTouch"
+msgstr ""
+
+msgid "Logitech Cordless Desktop LX-300"
+msgstr ""
+
+msgid "Logitech Cordless Desktop Navigator"
+msgstr ""
+
+msgid "Logitech Cordless Desktop Optical"
+msgstr ""
+
+msgid "Logitech diNovo"
+msgstr ""
+
+msgid "Logitech diNovo Edge"
+msgstr ""
+
+msgid "Logitech G15 extra keys via G15daemon"
+msgstr ""
+
+msgid "Logitech Internet"
+msgstr ""
+
+msgid "Logitech Internet 350"
+msgstr ""
+
+msgid "Logitech Internet 350"
+msgstr ""
+
+msgid "Logitech Internet Navigator"
+msgstr ""
+
+msgid "Logitech iTouch"
+msgstr ""
+
+msgid "Logitech iTouch Cordless Y-RB6"
+msgstr ""
+
+msgid "Logitech iTouch Internet Navigator SE"
+msgstr ""
+
+msgid "Logitech iTouch Internet Navigator SE USB"
+msgstr ""
+
+msgid "Logitech Ultra-X"
+msgstr ""
+
+msgid "Logitech Ultra-X Cordless Media Desktop"
+msgstr ""
+
+msgid "MacBook/MacBook Pro"
+msgstr ""
+
+msgid "MacBook/MacBook Pro (intl.)"
+msgstr ""
+
+msgid "Macintosh"
+msgstr ""
+
+msgid "Macintosh Old"
+msgstr ""
+
+msgid "Memorex MX1998"
+msgstr ""
+
+msgid "Memorex MX2500 EZ-Access"
+msgstr ""
+
+msgid "Memorex MX2750"
+msgstr ""
+
+msgid "Microsoft Comfort Curve 2000"
+msgstr ""
+
+msgid "Microsoft Internet"
+msgstr ""
+
+msgid "Microsoft Internet Pro (Swedish)"
+msgstr ""
+
+msgid "Microsoft Natural"
+msgstr ""
+
+msgid "Microsoft Natural Elite"
+msgstr ""
+
+msgid "Microsoft Natural Ergonomic 4000"
+msgstr ""
+
+msgid "Microsoft Natural Wireless Ergonomic 7000"
+msgstr ""
+
+msgid "Microsoft Natural Pro/Internet Pro"
+msgstr ""
+
+msgid "Microsoft Natural Pro USB/Internet Pro"
+msgstr ""
+
+msgid "Microsoft Natural Pro OEM"
+msgstr ""
+
+msgid "Microsoft Office Keyboard"
+msgstr ""
+
+msgid "Microsoft Surface"
+msgstr ""
+
+msgid "Microsoft Wireless Multimedia 1.0A"
+msgstr ""
+
+msgid "NEC SK-1300"
+msgstr ""
+
+msgid "NEC SK-2500"
+msgstr ""
+
+msgid "NEC SK-6200"
+msgstr ""
+
+msgid "NEC SK-7100"
+msgstr ""
+
+msgid "Northgate OmniKey 101"
+msgstr ""
+
+msgid "OLPC"
+msgstr ""
+
+msgid "Ortek Multimedia/Internet MCK-800"
+msgstr ""
+
+msgid "PC-98"
+msgstr ""
+
+msgid "PinePhone Keyboard"
+msgstr ""
+
+msgid "Propeller Voyager KTEZ-1000"
+msgstr ""
+
+msgid "QTronix Scorpius 98N+"
+msgstr ""
+
+msgid "Samsung SDM 4500P"
+msgstr ""
+
+msgid "Samsung SDM 4510P"
+msgstr ""
+
+msgid "Sanwa Supply SKB-KG3"
+msgstr ""
+
+msgid "Silvercrest Multimedia Wireless"
+msgstr ""
+
+msgid "SteelSeries Apex 300 (Apex RAW)"
+msgstr ""
+
+msgid "Sun Type 6 (Japanese)"
+msgstr ""
+
+msgid "Sun Type 6 USB (Japanese)"
+msgstr ""
+
+msgid "Sun Type 6 USB (Unix)"
+msgstr ""
+
+msgid "Sun Type 6/7 USB"
+msgstr ""
+
+msgid "Sun Type 6/7 USB (European)"
+msgstr ""
+
+msgid "Sun Type 7 USB"
+msgstr ""
+
+msgid "Sun Type 7 USB (European)"
+msgstr ""
+
+msgid "Sun Type 7 USB (Japanese)/Japanese 106-key"
+msgstr ""
+
+msgid "Sun Type 7 USB (Unix)"
+msgstr ""
+
+msgid "Super Power Multimedia"
+msgstr ""
+
+msgid "SVEN Ergonomic 2500"
+msgstr ""
+
+msgid "SVEN Slim 303"
+msgstr ""
+
+msgid "Symplon PaceBook tablet"
+msgstr ""
+
+msgid "Targa Visionary 811"
+msgstr ""
+
+msgid "Toshiba Satellite S3000"
+msgstr ""
+
+msgid "Truly Ergonomic 227"
+msgstr ""
+
+msgid "Truly Ergonomic 229"
+msgstr ""
+
+msgid "Trust Direct Access"
+msgstr ""
+
+msgid "Trust Slimline"
+msgstr ""
+
+msgid "Trust Wireless Classic"
+msgstr ""
+
+msgid "TypeMatrix EZ-Reach 2020"
+msgstr ""
+
+msgid "TypeMatrix EZ-Reach 2030 PS2"
+msgstr ""
+
+msgid "TypeMatrix EZ-Reach 2030 USB"
+msgstr ""
+
+msgid "TypeMatrix EZ-Reach 2030 USB (102/105:EU mode)"
+msgstr ""
+
+msgid "TypeMatrix EZ-Reach 2030 USB (106:JP mode)"
+msgstr ""
+
+msgid "Unitek KB-1925"
+msgstr ""
+
+msgid "ViewSonic KU-306 Internet"
+msgstr ""
+
+msgid "Winbook Model XP5"
+msgstr ""
+
+msgid "Yahoo! Internet"
+msgstr ""
\ No newline at end of file
diff --git a/locale/ubl-settings-keyboard-models_ru.po b/locale/ubl-settings-keyboard-models_ru.po
new file mode 100644
index 0000000..e9549a9
--- /dev/null
+++ b/locale/ubl-settings-keyboard-models_ru.po
@@ -0,0 +1,576 @@
+# Russian translations for ubl-settings-keyboard package.
+# Copyright (C) 2022, UBTech LLC
+# This file is distributed under the same license as the ubl-settings-keyboard package.
+# UBLinux Team , 2022
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: ubl-settings-keyboard 1.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-05-22 16:12+0600\n"
+"PO-Revision-Date: 2023-01-01 00:00+0600\n"
+"Last-Translator: UBLinux Team \n"
+"Language-Team: Russian - UBLinux Team \n"
+"Language: Russian\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+msgid "Generic 86-key PC"
+msgstr "Универсальный ПК с 86 клавишами"
+
+msgid "Generic 101-key PC"
+msgstr "Универсальный ПК с 101 клавишами"
+
+msgid "Generic 102-key PC"
+msgstr "Универсальный ПК с 102 клавишами"
+
+msgid "Generic 104-key PC"
+msgstr "Универсальный ПК с 104 клавишами"
+
+msgid "Generic 104-key PC with L-shaped Enter key"
+msgstr "Универсальный ПК с 104 клавишами и Г-образной клавишей Enter"
+
+msgid "Generic 105-key PC"
+msgstr "Универсальный ПК с 105 клавишами"
+
+msgid "A4Tech KB-21"
+msgstr "A4Tech KB-21"
+
+msgid "A4Tech KBS-8"
+msgstr "A4Tech KBS-8"
+
+msgid "A4Tech Wireless Desktop RFKB-23"
+msgstr "Беспроводной настольный компьютер A4Tech RFKB-23"
+
+msgid "Acer AirKey V"
+msgstr "Acer AirKey V"
+
+msgid "Acer C300"
+msgstr "Acer C300"
+
+msgid "Acer Ferrari 4000"
+msgstr "Acer Ferrari 4000"
+
+msgid "Acer laptop"
+msgstr "Ноутбук Acer"
+
+msgid "Advance Scorpius KI"
+msgstr "Advance Scorpius KI"
+
+msgid "Apple"
+msgstr "Apple"
+
+msgid "Apple Aluminium (ANSI)"
+msgstr "Apple Aluminium (ANSI)"
+
+msgid "Apple Aluminium (ISO)"
+msgstr "Apple Aluminium (ISO)"
+
+msgid "Apple Aluminium (JIS)"
+msgstr "Apple Aluminium (JIS)"
+
+msgid "Asus laptop"
+msgstr "Ноутбук Asus"
+
+msgid "Azona RF2300 Wireless Internet"
+msgstr "Azona RF2300 Wireless Internet"
+
+msgid "BenQ X-Touch"
+msgstr "BenQ X-Touch"
+
+msgid "BenQ X-Touch 730"
+msgstr "BenQ X-Touch 730"
+
+msgid "BenQ X-Touch 800"
+msgstr "BenQ X-Touch 800"
+
+msgid "Brother Internet"
+msgstr "Brother Internet"
+
+msgid "BTC 5090"
+msgstr "BTC 5090"
+
+msgid "BTC 5113RF Multimedia"
+msgstr "BTC 5113RF Multimedia"
+
+msgid "BTC 5126T"
+msgstr "BTC 5126T"
+
+msgid "BTC 6301URF"
+msgstr "BTC 6301URF"
+
+msgid "BTC 9000"
+msgstr "BTC 9000"
+
+msgid "BTC 9000A"
+msgstr "BTC 9000A"
+
+msgid "BTC 9001AH"
+msgstr "BTC 9001AH"
+
+msgid "BTC 9019U"
+msgstr "BTC 9019U"
+
+msgid "BTC 9116U Mini Wireless Internet and Gaming"
+msgstr "BTC 9116U Mini Wireless Internet and Gaming"
+
+msgid "Cherry Blue Line CyBo@rd"
+msgstr "Cherry Blue Line CyBo@rd"
+
+msgid "Cherry Blue Line CyBo@rd (alt.)"
+msgstr "Cherry Blue Line CyBo@rd (альт.)"
+
+msgid "Cherry B.UNLIMITED"
+msgstr "Cherry B.UNLIMITED"
+
+msgid "Cherry CyBo@rd USB-Hub"
+msgstr "USB-концентратор Cherry CyBo@rd"
+
+msgid "Cherry CyMotion Expert"
+msgstr "Cherry CyMotion Expert"
+
+msgid "Cherry CyMotion Master Linux"
+msgstr "Cherry CyMotion Master Linux"
+
+msgid "Cherry CyMotion Master XPress"
+msgstr "Cherry CyMotion Master XPress"
+
+msgid "Chicony Internet"
+msgstr "Chicony Internet"
+
+msgid "Chicony KB-9885"
+msgstr "Chicony KB-9885"
+
+msgid "Chicony KU-0108"
+msgstr "Chicony KU-0108"
+
+msgid "Chicony KU-0420"
+msgstr "Chicony KU-0420"
+
+msgid "Chromebook"
+msgstr "Chromebook"
+
+msgid "Classmate PC"
+msgstr "ПК Classmate"
+
+msgid "Compal FL90"
+msgstr "Compal FL90"
+
+msgid "Compaq Armada laptop"
+msgstr "Ноутбук Compaq Armada"
+
+msgid "Compaq Easy Access"
+msgstr "Compaq Easy Access"
+
+msgid "Compaq Internet (7 keys)"
+msgstr "Compaq Internet (7 клавиш)"
+
+msgid "Compaq Internet (13 keys)"
+msgstr "Compaq Internet (13 клавиш)"
+
+msgid "Compaq Internet (18 keys)"
+msgstr "Compaq Internet (18 клавиш)"
+
+msgid "Compaq iPaq"
+msgstr "Compaq iPaq"
+
+msgid "Compaq Presario laptop"
+msgstr "Ноутбук Compaq Presario"
+
+msgid "Creative Desktop Wireless 7000"
+msgstr "Беспроводной настольный компьютер Creative Desktop Wireless 7000"
+
+msgid "Dell"
+msgstr "Dell"
+
+msgid "Dell 101-key PC"
+msgstr "Компьютер Dell с 101 клавишей"
+
+msgid "Dell Latitude laptop"
+msgstr "Ноутбук Dell Latitude"
+
+msgid "Dell Inspiron 6000/8000 laptop"
+msgstr "Ноутбук Dell Inspiron 6000/8000"
+
+msgid "Dell Precision M laptop"
+msgstr "Ноутбук Dell Precision M"
+
+msgid "Dell Precision M65 laptop"
+msgstr "Ноутбук Dell Precision M65"
+
+msgid "Dell SK-8125"
+msgstr "Dell SK-8125"
+
+msgid "Dell SK-8135"
+msgstr "Dell SK-8135"
+
+msgid "Dell USB Multimedia"
+msgstr "Мультимедиа Dell USB"
+
+msgid "Dexxa Wireless Desktop"
+msgstr "Беспроводной настольный компьютер Dexxa"
+
+msgid "Diamond 9801/9802"
+msgstr "Diamond 9801/9802"
+
+msgid "DTK2000"
+msgstr "DTK2000"
+
+msgid "eMachines m6800 laptop"
+msgstr "Ноутбук eMachines m6800"
+
+msgid "Ennyah DKB-1008"
+msgstr "Ennyah DKB-1008"
+
+msgid "Everex STEPnote"
+msgstr "Everex STEPnote"
+
+msgid "Fujitsu-Siemens Amilo laptop"
+msgstr "Ноутбук Fujitsu-Siemens Amilo"
+
+msgid "Genius Comfy KB-16M/Multimedia KWD-910"
+msgstr "Ноутбук Genius Comfy KB-16M/Multimedia KWD-910"
+
+msgid "Genius Comfy KB-12e"
+msgstr "Genius Comfy KB-12e"
+
+msgid "Genius Comfy KB-21e-Scroll"
+msgstr "Genius Comfy KB-21e-Scroll"
+
+msgid "Genius KB-19e NB"
+msgstr "Ноутбук Genius KB-19e"
+
+msgid "Genius KKB-2050HS"
+msgstr "Genius KKB-2050HS"
+
+msgid "Gyration"
+msgstr "Гирация"
+
+msgid "Happy Hacking"
+msgstr "Счастливый взлом"
+
+msgid "Happy Hacking for Mac"
+msgstr "Счастливый взлом для Mac"
+
+msgid "Hewlett-Packard Internet"
+msgstr "Интернет Hewlett-Packard"
+
+msgid "Hewlett-Packard Mini 110 laptop"
+msgstr "Ноутбук Hewlett-Packard Mini 110"
+
+msgid "Hewlett-Packard nx9020"
+msgstr "Hewlett-Packard nx9020"
+
+msgid "Hewlett-Packard Omnibook 500"
+msgstr "Hewlett-Packard Omnibook 500"
+
+msgid "Hewlett-Packard Omnibook 500 FA"
+msgstr "Hewlett-Packard Omnibook 500 FA"
+
+msgid "Hewlett-Packard Omnibook 6000/6100"
+msgstr "Hewlett-Packard Omnibook 6000/6100"
+
+msgid "Hewlett-Packard Omnibook XE3 GC"
+msgstr "Hewlett-Packard Omnibook XE3 GC"
+
+msgid "Hewlett-Packard Omnibook XE3 GF"
+msgstr "Hewlett-Packard Omnibook XE3 GF"
+
+msgid "Hewlett-Packard Omnibook XT1000"
+msgstr "Hewlett-Packard Omnibook XT1000"
+
+msgid "Hewlett-Packard Pavilion dv5"
+msgstr "Hewlett-Packard Pavilion dv5"
+
+msgid "Hewlett-Packard Pavilion ZT1100"
+msgstr "Hewlett-Packard Pavilion ZT1100"
+
+msgid "Hewlett-Packard SK-2501 Multimedia"
+msgstr "Hewlett-Packard SK-2501 Multimedia"
+
+msgid "Honeywell Euroboard"
+msgstr "Honeywell Euroboard"
+
+msgid "IBM Rapid Access"
+msgstr "IBM Rapid Access"
+
+msgid "IBM Rapid Access II"
+msgstr "IBM Rapid Access II"
+
+msgid "IBM Space Saver"
+msgstr "IBM Space Saver"
+
+msgid "IBM ThinkPad 560Z/600/600E/A22E"
+msgstr "IBM ThinkPad 560Z/600/600E/A22E"
+
+msgid "IBM ThinkPad R60/T60/R61/T61"
+msgstr "IBM ThinkPad R60/T60/R61/T61"
+
+msgid "IBM ThinkPad Z60m/Z60t/Z61m/Z61t"
+msgstr "IBM ThinkPad Z60m/Z60t/Z61m/Z61t"
+
+msgid "Keytronic FlexPro"
+msgstr "Keytronic FlexPro"
+
+msgid "Kinesis"
+msgstr "Kinesis"
+
+msgid "Logitech"
+msgstr "Logitech"
+
+msgid "Logitech Access"
+msgstr "Logitech Access"
+
+msgid "Logitech Cordless Desktop"
+msgstr "Logitech Cordless Desktop"
+
+msgid "Logitech Cordless Desktop (alt.)"
+msgstr "Logitech Cordless Desktop (альтернативный)"
+
+msgid "Logitech Cordless Desktop EX110"
+msgstr "Logitech Cordless Desktop EX110"
+
+msgid "Logitech Cordless Desktop iTouch"
+msgstr "Logitech Cordless Desktop iTouch"
+
+msgid "Logitech Cordless Desktop LX-300"
+msgstr "Logitech Cordless Desktop LX-300"
+
+msgid "Logitech Cordless Desktop Navigator"
+msgstr "Logitech Cordless Desktop Navigator"
+
+msgid "Logitech Cordless Desktop Optical"
+msgstr "Logitech Cordless Desktop Optical"
+
+msgid "Logitech diNovo"
+msgstr "Logitech diNovo"
+
+msgid "Logitech diNovo Edge"
+msgstr "Logitech diNovo Edge"
+
+msgid "Logitech G15 extra keys via G15daemon"
+msgstr "Дополнительные клавиши Logitech G15 через G15daemon"
+
+msgid "Logitech Internet"
+msgstr "Logitech Internet"
+
+msgid "Logitech Internet 350"
+msgstr "Logitech Internet 350"
+
+msgid "Logitech Internet Navigator"
+msgstr "Logitech Internet Navigator"
+
+msgid "Logitech iTouch"
+msgstr "Logitech iTouch"
+
+msgid "Logitech iTouch Cordless Y-RB6"
+msgstr "Logitech iTouch Cordless Y-RB6"
+
+msgid "Logitech iTouch Internet Navigator SE"
+msgstr "Logitech iTouch Internet Navigator SE"
+
+msgid "Logitech iTouch Internet Navigator SE USB"
+msgstr "Logitech iTouch Internet Navigator SE USB"
+
+msgid "Logitech Ultra-X"
+msgstr "Logitech Ultra-X"
+
+msgid "Logitech Ultra-X Cordless Media Desktop"
+msgstr "Logitech Ultra-X Cordless Media Desktop"
+
+msgid "MacBook/MacBook Pro"
+msgstr "MacBook/MacBook Pro"
+
+msgid "MacBook/MacBook Pro (intl.)"
+msgstr "MacBook/MacBook Pro (международный)"
+
+msgid "Macintosh"
+msgstr "Macintosh"
+
+msgid "Macintosh Old"
+msgstr "Macintosh Old"
+
+msgid "Memorex MX1998"
+msgstr "Memorex MX1998"
+
+msgid "Memorex MX2500 EZ-Access"
+msgstr "Memorex MX2500 EZ-Access"
+
+msgid "Memorex MX2750"
+msgstr "Memorex MX2750"
+
+msgid "Microsoft Comfort Curve 2000"
+msgstr "Microsoft Comfort Curve 2000"
+
+msgid "Microsoft Internet"
+msgstr "Microsoft Internet"
+
+msgid "Microsoft Internet Pro (Swedish)"
+msgstr "Microsoft Internet Pro (шведский)"
+
+msgid "Microsoft Natural"
+msgstr "Microsoft Natural"
+
+msgid "Microsoft Natural Elite"
+msgstr "Microsoft Natural Elite"
+
+msgid "Microsoft Natural Ergonomic 4000"
+msgstr "Microsoft Natural Ergonomic 4000"
+
+msgid "Microsoft Natural Wireless Ergonomic 7000"
+msgstr "Microsoft Natural Wireless Ergonomic 7000"
+
+msgid "Microsoft Natural Pro/Internet Pro"
+msgstr "Microsoft Natural Pro/Internet Pro"
+
+msgid "Microsoft Natural Pro USB/Internet Pro"
+msgstr "Microsoft Natural Pro USB/Internet Pro"
+
+msgid "Microsoft Natural Pro OEM"
+msgstr "Microsoft Natural Pro OEM"
+
+msgid "Microsoft Office Keyboard"
+msgstr "Клавиатура Microsoft Office"
+
+msgid "Microsoft Surface"
+msgstr "Microsoft Surface"
+
+msgid "Microsoft Wireless Multimedia 1.0A"
+msgstr "Беспроводная мультимедийная клавиатура Microsoft 1,0 А"
+
+msgid "NEC SK-1300"
+msgstr "NEC SK-1300"
+
+msgid "NEC SK-2500"
+msgstr "NEC SK-2500"
+
+msgid "NEC SK-6200"
+msgstr "NEC SK-6200"
+
+msgid "NEC SK-7100"
+msgstr "NEC SK-7100"
+
+msgid "Northgate OmniKey 101"
+msgstr "Northgate OmniKey 101"
+
+msgid "OLPC"
+msgstr "OLPC"
+
+msgid "Ortek Multimedia/Internet MCK-800"
+msgstr "Ortek Multimedia/Internet MCK-800"
+
+msgid "PC-98"
+msgstr "PC-98"
+
+msgid "PinePhone Keyboard"
+msgstr "Клавиатура PinePhone"
+
+msgid "Propeller Voyager KTEZ-1000"
+msgstr "Propeller Voyager KTEZ-1000"
+
+msgid "QTronix Scorpius 98N+"
+msgstr "QTronix Scorpius 98N+"
+
+msgid "Samsung SDM 4500P"
+msgstr "Samsung SDM 4500P"
+
+msgid "Samsung SDM 4510P"
+msgstr "Samsung SDM 4510P"
+
+msgid "Sanwa Supply SKB-KG3"
+msgstr "Sanwa Supply SKB-KG3"
+
+msgid "Silvercrest Multimedia Wireless"
+msgstr "Беспроводная мультимедийная клавиатура Silvercrest"
+
+msgid "SteelSeries Apex 300 (Apex RAW)"
+msgstr "SteelSeries Apex 300 (Apex RAW)"
+
+msgid "Sun Type 6 (Japanese)"
+msgstr "Sun Type 6 (японский)"
+
+msgid "Sun Type 6 USB (Japanese)"
+msgstr "Sun Type 6 USB (японский)"
+
+msgid "Sun Type 6 USB (Unix)"
+msgstr "Sun Type 6 USB (Unix)"
+
+msgid "Sun Type 6/7 USB"
+msgstr "Sun Type 6/7 USB"
+
+msgid "Sun Type 6/7 USB (European)"
+msgstr "Sun Type 6/7 USB (европейский)"
+
+msgid "Sun Type 7 USB"
+msgstr "Sun Type 7 USB"
+
+msgid "Sun Type 7 USB (European)"
+msgstr "Sun Type 7 USB (европейский)"
+
+msgid "Sun Type 7 USB (Japanese)/Japanese 106-key"
+msgstr "Sun Type 7 USB (японский)/японская 106-клавишная клавиатура"
+
+msgid "Sun Type 7 USB (Unix)"
+msgstr "Sun Type 7 USB (Unix)"
+
+msgid "Super Power Multimedia"
+msgstr "Сверхмощная мультимедийная клавиатура"
+
+msgid "SVEN Ergonomic 2500"
+msgstr "SVEN Ergonomic 2500"
+
+msgid "SVEN Slim 303"
+msgstr "SVEN Slim 303"
+
+msgid "Symplon PaceBook tablet"
+msgstr "Планшет Symplon PaceBook"
+
+msgid "Targa Visionary 811"
+msgstr "Targa Visionary 811"
+
+msgid "Toshiba Satellite S3000"
+msgstr "Toshiba Satellite S3000"
+
+msgid "Truly Ergonomic 227"
+msgstr "Truly Ergonomic 227"
+
+msgid "Truly Ergonomic 229"
+msgstr "Truly Ergonomic 229"
+
+msgid "Trust Direct Access"
+msgstr "Trust Direct Access"
+
+msgid "Trust Slimline"
+msgstr "Trust Slimline"
+
+msgid "Trust Wireless Classic"
+msgstr "Trust Wireless Classic"
+
+msgid "TypeMatrix EZ-Reach 2020"
+msgstr "TypeMatrix EZ-Reach 2020"
+
+msgid "TypeMatrix EZ-Reach 2030 PS2"
+msgstr "TypeMatrix EZ-Reach 2030 PS2"
+
+msgid "TypeMatrix EZ-Reach 2030 USB"
+msgstr "TypeMatrix EZ-Reach 2030 USB"
+
+msgid "TypeMatrix EZ-Reach 2030 USB (102/105:EU mode)"
+msgstr "TypeMatrix EZ-Reach 2030 USB (102/105: режим ЕС)"
+
+msgid "TypeMatrix EZ-Reach 2030 USB (106:JP mode)"
+msgstr "TypeMatrix EZ-Reach 2030 USB (106: японский режим)"
+
+msgid "Unitek KB-1925"
+msgstr "Unitek KB-1925"
+
+msgid "ViewSonic KU-306 Internet"
+msgstr "Интернет ViewSonic KU-306"
+
+msgid "Winbook Model XP5"
+msgstr "Winbook Модель XP5"
+
+msgid "Yahoo! Internet"
+msgstr "Интернет Yahoo!"
\ No newline at end of file
diff --git a/locale/ubl-settings-keyboard-options.pot b/locale/ubl-settings-keyboard-options.pot
new file mode 100644
index 0000000..96ca08d
--- /dev/null
+++ b/locale/ubl-settings-keyboard-options.pot
@@ -0,0 +1,545 @@
+# Language translations for ubl-settings-keyboard package.
+# Copyright (C) 2022, UBTech LLC
+# This file is distributed under the same license as the ubl-settings-keyboard package.
+# UBLinux Team , 2022
+#
+#, fuzzy
+msgid ""
+msgstr """Project-Id-Version: ubl-settings-keyboard 1.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-05-22 16:12+0600\n"
+"PO-Revision-Date: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+msgid "The \"< >\" key"
+msgstr ""
+
+msgid "Right Ctrl"
+msgstr ""
+
+msgid "Menu"
+msgstr ""
+
+msgid "Any Win"
+msgstr ""
+
+msgid "Left Win"
+msgstr ""
+
+msgid "Right Win"
+msgstr ""
+
+msgid "Any Alt"
+msgstr ""
+
+msgid "Left Alt"
+msgstr ""
+
+msgid "Right Alt"
+msgstr ""
+
+msgid "Right Alt; Shift+Right Alt as Compose"
+msgstr ""
+
+msgid "Right Alt never chooses 3rd level"
+msgstr ""
+
+msgid "Enter on keypad"
+msgstr ""
+
+msgid "Caps Lock"
+msgstr ""
+
+msgid "Backslash"
+msgstr ""
+
+msgid "Caps Lock; acts as onetime lock when pressed together with another 3rd-level chooser"
+msgstr ""
+
+msgid "Backslash; acts as onetime lock when pressed together with another 3rd level chooser"
+msgstr ""
+
+msgid "The "< >" key; acts as onetime lock when pressed together with another 3rd level chooser"
+msgstr ""
+
+msgid "Caps Lock as Ctrl"
+msgstr ""
+
+msgid "Left Ctrl as Meta"
+msgstr ""
+
+msgid "Swap Ctrl and Caps Lock"
+msgstr ""
+
+msgid "Caps Lock as Ctrl, Ctrl as Hyper"
+msgstr ""
+
+msgid "To the left of \"A\""
+msgstr ""
+
+msgid "At the bottom left"
+msgstr ""
+
+msgid "Right Ctrl as Right Alt"
+msgstr ""
+
+msgid "Menu as Right Ctrl"
+msgstr ""
+
+msgid "Swap Left Alt with Left Ctrl"
+msgstr ""
+
+msgid "Swap Right Alt with Right Ctrl"
+msgstr ""
+
+msgid "Swap Left Win with Left Ctrl"
+msgstr ""
+
+msgid "Swap Right Win with Right Ctrl"
+msgstr ""
+
+msgid "Left Alt as Ctrl, Left Ctrl as Win, Left Win as Left Alt"
+msgstr ""
+
+msgid "Num Lock"
+msgstr ""
+
+msgid "Scroll Lock"
+msgstr ""
+
+msgid "Compose"
+msgstr ""
+
+msgid "Legacy"
+msgstr ""
+
+msgid "Unicode arrows and math operators"
+msgstr ""
+
+msgid "Unicode arrows and math operators on default level"
+msgstr ""
+
+msgid "Legacy Wang 724"
+msgstr ""
+
+msgid "Wang 724 keypad with Unicode arrows and math operators"
+msgstr ""
+
+msgid "Wang 724 keypad with Unicode arrows and math operators on default level"
+msgstr ""
+
+msgid "Hexadecimal"
+msgstr ""
+
+msgid "Phone and ATM style"
+msgstr ""
+
+msgid "Shift + Num Lock enables PointerKeys"
+msgstr ""
+
+msgid "Legacy key with dot"
+msgstr ""
+
+msgid "Legacy key with comma"
+msgstr ""
+
+msgid "Four-level key with dot"
+msgstr ""
+
+msgid "Four-level key with dot, Latin-9 only"
+msgstr ""
+
+msgid "Four-level key with comma"
+msgstr ""
+
+msgid "Four-level key with momayyez"
+msgstr ""
+
+msgid "Four-level key with abstract separators"
+msgstr ""
+
+msgid "Semicolon on third level"
+msgstr ""
+
+msgid "Caps Lock uses internal capitalization; Shift "pauses" Caps Lock"
+msgstr ""
+
+msgid "Caps Lock uses internal capitalization; Shift does not affect Caps Lock"
+msgstr ""
+
+msgid "Caps Lock acts as Shift with locking; Shift "pauses" Caps Lock"
+msgstr ""
+
+msgid "Caps Lock acts as Shift with locking; Shift does not affect Caps Lock"
+msgstr ""
+
+msgid "Caps Lock toggles normal capitalization of alphabetic characters"
+msgstr ""
+
+msgid "Caps Lock toggles Shift Lock (affects all keys)"
+msgstr ""
+
+msgid "Swap Esc and Caps Lock"
+msgstr ""
+
+msgid "Make Caps Lock an additional Esc"
+msgstr ""
+
+msgid "Make Caps Lock an additional Esc, but Shift + Caps Lock is the regular Caps Lock"
+msgstr ""
+
+msgid "Make Caps Lock an additional Backspace"
+msgstr ""
+
+msgid "Make Caps Lock an additional Super"
+msgstr ""
+
+msgid "Make Caps Lock an additional Hyper"
+msgstr ""
+
+msgid "Make Caps Lock an additional Menu key"
+msgstr ""
+
+msgid "Make Caps Lock an additional Num Lock"
+msgstr ""
+
+msgid "Make Caps Lock an additional Ctrl"
+msgstr ""
+
+msgid "Caps Lock is disabled"
+msgstr ""
+
+msgid "Add the standard behavior to Menu key"
+msgstr ""
+
+msgid "Menu is mapped to Win"
+msgstr ""
+
+msgid "Alt and Meta are on Alt"
+msgstr ""
+
+msgid "Alt is mapped to Win and the usual Alt"
+msgstr ""
+
+msgid "Ctrl is mapped to Win and the usual Ctrl"
+msgstr ""
+
+msgid "Ctrl is mapped to Right Win and the usual Ctrl"
+msgstr ""
+
+msgid "Ctrl is mapped to Alt, Alt to Win"
+msgstr ""
+
+msgid "Meta is mapped to Win"
+msgstr ""
+
+msgid "Meta is mapped to Left Win"
+msgstr ""
+
+msgid "Hyper is mapped to Win"
+msgstr ""
+
+msgid "Alt is mapped to Right Win, Super to Menu"
+msgstr ""
+
+msgid "Left Alt is swapped with Left Win"
+msgstr ""
+
+msgid "Alt is swapped with Win"
+msgstr ""
+
+msgid "Win is mapped to PrtSc and the usual Win"
+msgstr ""
+
+msgid "3rd level of Left Win"
+msgstr ""
+
+msgid "3rd level of Right Win"
+msgstr ""
+
+msgid "3rd level of Menu"
+msgstr ""
+
+msgid "Left Ctrl"
+msgstr ""
+
+msgid "3rd level of Left Ctrl"
+msgstr ""
+
+msgid "3rd level of Right Ctrl"
+msgstr ""
+
+msgid "3rd level of Caps Lock"
+msgstr ""
+
+msgid "3rd level of the "< >" key"
+msgstr ""
+
+msgid "Pause"
+msgstr ""
+
+msgid "Insert"
+msgstr ""
+
+msgid "PrtSc"
+msgstr ""
+
+msgid "keypad"
+msgstr ""
+
+msgid "numpad"
+msgstr ""
+
+msgid "srvrkeys"
+msgstr ""
+
+msgid "apple"
+msgstr ""
+
+msgid "shift"
+msgstr ""
+
+msgid "misc"
+msgstr ""
+
+msgid "grab"
+msgstr ""
+
+msgid "eurosign"
+msgstr ""
+
+msgid "rupeesign"
+msgstr ""
+
+msgid "Caps Lock chooses 5th level"
+msgstr ""
+
+msgid "The "< >" key chooses 5th level"
+msgstr ""
+
+msgid "Right Alt chooses 5th level"
+msgstr ""
+
+msgid "Menu chooses 5th level"
+msgstr ""
+
+msgid "Right Ctrl chooses 5th level"
+msgstr ""
+
+msgid "The \"< >\" key chooses 5th level and acts as a one-time lock if pressed with another 5th level chooser"
+msgstr ""
+
+msgid "Right Alt chooses 5th level and acts as a one-time lock if pressed with another 5th level chooser"
+msgstr ""
+
+msgid "Left Win chooses 5th level and acts as a one-time lock if pressed with another 5th level chooser"
+msgstr ""
+
+msgid "Right Win chooses 5th level and acts as a one-time lock if pressed with another 5th level chooser"
+msgstr ""
+
+msgid "The \"< >\" key chooses 5th level and acts as a one-time lock if pressed with another 5th level chooser"
+msgstr ""
+
+msgid "Usual space at any level"
+msgstr ""
+
+msgid "Non-breaking space at the 2nd level"
+msgstr ""
+
+msgid "Non-breaking space at the 3rd level"
+msgstr ""
+
+msgid "Non-breaking space at the 3rd level, thin non-breaking space at the 4th level"
+msgstr ""
+
+msgid "Non-breaking space at the 4th level"
+msgstr ""
+
+msgid "Non-breaking space at the 4th level, thin non-breaking space at the 6th level"
+msgstr ""
+
+msgid "Non-breaking space at the 4th level, thin non-breaking space at the 6th level (via Ctrl+Shift)"
+msgstr ""
+
+msgid "Zero-width non-joiner at the 2nd level"
+msgstr ""
+
+msgid "Zero-width non-joiner at the 2nd level, zero-width joiner at the 3rd level"
+msgstr ""
+
+msgid "Zero-width non-joiner at the 2nd level, zero-width joiner at the 3rd level, non-breaking space at the 4th level"
+msgstr ""
+
+msgid "Zero-width non-joiner at the 2nd level, non-breaking space at the 3rd level"
+msgstr ""
+
+msgid "Zero-width non-joiner at the 2nd level, non-breaking space at the 3rd level, zero-width joiner at the 4th level"
+msgstr ""
+
+msgid "Zero-width non-joiner at the 2nd level, non-breaking space at the 3rd level, thin non-breaking space at the 4th level"
+msgstr ""
+
+msgid "Zero-width non-joiner at the 3rd level, zero-width joiner at the 4th level"
+msgstr ""
+
+msgid "Kana Lock key is locking"
+msgstr ""
+
+msgid "NICOLA-F style Backspace"
+msgstr ""
+
+msgid "Make Zenkaku Hankaku an additional Esc"
+msgstr ""
+
+msgid "Make right Alt a Hangul key"
+msgstr ""
+
+msgid "Make right Ctrl a Hangul key"
+msgstr ""
+
+msgid "Make right Alt a Hanja key"
+msgstr ""
+
+msgid "Make right Ctrl a Hanja key"
+msgstr ""
+
+msgid "At the corresponding key in a QWERTY layout"
+msgstr ""
+
+msgid "At the corresponding key in a Dvorak layout"
+msgstr ""
+
+msgid "At the corresponding key in a Colemak layout"
+msgstr ""
+
+msgid "Sun key compatibility"
+msgstr ""
+
+msgid "Ctrl+Alt+Backspace"
+msgstr ""
+
+msgid "Right Alt (while pressed)"
+msgstr ""
+
+msgid "Left Alt (while pressed)"
+msgstr ""
+
+msgid "Left Win (while pressed)"
+msgstr ""
+
+msgid "Right Win (while pressed)"
+msgstr ""
+
+msgid "Any Win (while pressed)"
+msgstr ""
+
+msgid "Menu (while pressed), Shift+Menu for Menu"
+msgstr ""
+
+msgid "Caps Lock (while pressed), Alt+Caps Lock for the original Caps Lock action"
+msgstr ""
+
+msgid "Right Ctrl (while pressed)"
+msgstr ""
+
+msgid "Right Alt"
+msgstr ""
+
+msgid "Left Alt"
+msgstr ""
+
+msgid "Caps Lock"
+msgstr ""
+
+msgid "Shift+Caps Lock"
+msgstr ""
+
+msgid "Caps Lock to first layout; Shift+Caps Lock to second layout"
+msgstr ""
+
+msgid "Left Win to first layout; Right Win/Menu to second layout"
+msgstr ""
+
+msgid "Left Ctrl to first layout; Right Ctrl to second layout"
+msgstr ""
+
+msgid "Alt+Caps Lock"
+msgstr ""
+
+msgid "Both Shifts together"
+msgstr ""
+
+msgid "Both Alts together"
+msgstr ""
+
+msgid "Both Alts together; AltGr alone chooses third level"
+msgstr ""
+
+msgid "Both Ctrls together"
+msgstr ""
+
+msgid "Ctrl+Shift"
+msgstr ""
+
+msgid "Left Ctrl+Left Shift"
+msgstr ""
+
+msgid "Right Ctrl+Right Shift"
+msgstr ""
+
+msgid "Alt+Ctrl"
+msgstr ""
+
+msgid "Alt+Shift"
+msgstr ""
+
+msgid "Left Alt+Left Shift"
+msgstr ""
+
+msgid "Right Alt+Right Shift"
+msgstr ""
+
+msgid "Menu"
+msgstr ""
+
+msgid "Left Win"
+msgstr ""
+
+msgid "Alt+Space"
+msgstr ""
+
+msgid "Win+Space"
+msgstr ""
+
+msgid "Ctrl+Space"
+msgstr ""
+
+msgid "Right Win"
+msgstr ""
+
+msgid "Left Shift"
+msgstr ""
+
+msgid "Right Shift"
+msgstr ""
+
+msgid "Left Ctrl"
+msgstr ""
+
+msgid "Right Ctrl"
+msgstr ""
+
+msgid "Scroll Lock"
+msgstr ""
+
+msgid "Ctrl+Left Win to first layout; Ctrl+Menu to second layout"
+msgstr ""
+
+msgid "Left Ctrl+Left Win"
+msgstr ""
\ No newline at end of file
diff --git a/locale/ubl-settings-keyboard-options_ru.po b/locale/ubl-settings-keyboard-options_ru.po
new file mode 100644
index 0000000..cd1775f
--- /dev/null
+++ b/locale/ubl-settings-keyboard-options_ru.po
@@ -0,0 +1,517 @@
+# Russian translations for ubl-settings-keyboard package.
+# Copyright (C) 2022, UBTech LLC
+# This file is distributed under the same license as the ubl-settings-keyboard package.
+# UBLinux Team , 2022
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: ubl-settings-keyboard 1.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2023-05-22 16:12+0600\n"
+"PO-Revision-Date: 2023-01-01 00:00+0600\n"
+"Last-Translator: UBLinux Team \n"
+"Language-Team: Russian - UBLinux Team \n"
+"Language: Russian\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+msgid "The \"< >\" key"
+msgstr "Клавиша \"< >\""
+
+msgid "Right Ctrl"
+msgstr "Правый Ctrl"
+
+msgid "Menu"
+msgstr "Меню"
+
+msgid "Any Win"
+msgstr "Любая клавиша Win"
+
+msgid "Left Win"
+msgstr "Левая клавиша Win"
+
+msgid "Right Win"
+msgstr "Правая клавиша Win"
+
+msgid "Any Alt"
+msgstr "Любая клавиша Alt"
+
+msgid "Left Alt"
+msgstr "Левая клавиша Alt"
+
+msgid "Right Alt"
+msgstr "Правый Alt"
+
+msgid "Right Alt; Shift+Right Alt as Compose"
+msgstr "Правый Alt; Shift+Правый Alt для ввода текста"
+
+msgid "Right Alt never chooses 3rd level"
+msgstr "Правый Alt никогда не выбирает 3-й уровень"
+
+msgid "Enter on keypad"
+msgstr "Enter на цифровой клавиатуре"
+
+msgid "Caps Lock"
+msgstr "Caps Lock"
+
+msgid "Backslash"
+msgstr "Обратная косая черта"
+
+msgid "Caps Lock; acts as onetime lock when pressed together with another 3rd-level chooser"
+msgstr "Caps Lock; действует как однократная блокировка при одновременном нажатии с другим переключателем 3-го уровня"
+
+msgid "Backslash; acts as onetime lock when pressed together with another 3rd level chooser"
+msgstr "Обратная косая черта; действует как однократная блокировка при одновременном нажатии с другим переключателем 3-го уровня"
+
+msgid "The \"< >\" key; acts as onetime lock when pressed together with another 3rd level chooser"
+msgstr "Клавиша \"< >\"; Действует как однократная блокировка при одновременном нажатии с другим селектором 3-го уровня."
+
+msgid "Caps Lock as Ctrl"
+msgstr "Caps Lock как Ctrl"
+
+msgid "Left Ctrl as Meta"
+msgstr "Left Ctrl как Meta"
+
+msgid "Swap Ctrl and Caps Lock"
+msgstr "Поменять местами Ctrl и Caps Lock"
+
+msgid "Caps Lock as Ctrl, Ctrl as Hyper"
+msgstr "Caps Lock как Ctrl, Ctrl как Hyper"
+
+msgid "To the left of \"A\""
+msgstr "Слева от \"A\""
+
+msgid "At the bottom left"
+msgstr "В левом нижнем углу"
+
+msgid "Right Ctrl as Right Alt"
+msgstr "Right Ctrl как Right Alt"
+
+msgid "Menu as Right Ctrl"
+msgstr "Menu как Right Ctrl"
+
+msgid "Swap Left Alt with Left Ctrl"
+msgstr "Поменять местами Left Alt и Left Ctrl"
+
+msgid "Swap Right Alt with Right Ctrl"
+msgstr "Поменять местами Right Alt и Right Ctrl"
+
+msgid "Swap Left Win with Left Ctrl"
+msgstr "Поменять местами Left Win и Left Ctrl"
+
+msgid "Swap Right Win with Right Ctrl"
+msgstr "Поменять местами Right Win и Right Ctrl"
+
+msgid "Left Alt as Ctrl, Left Ctrl as Win, Left Win as Left Alt"
+msgstr "Left Alt как Ctrl, Left Ctrl как Win, Left Win как Left Alt"
+
+msgid "Num Lock"
+msgstr "Num Lock"
+
+msgid "Scroll Lock"
+msgstr "Scroll Lock"
+
+msgid "Compose"
+msgstr "Compose"
+
+msgid "Legacy"
+msgstr "Legacy"
+
+msgid "Unicode arrows and math operators"
+msgstr "Стрелки Unicode и математические операторы"
+
+msgid "Unicode arrows and math operators on default level"
+msgstr "Стрелки Unicode и математические операторы по умолчанию"
+
+msgid "Legacy Wang 724"
+msgstr "Legacy Wang 724"
+
+msgid "Wang 724 keypad with Unicode arrows and math operators"
+msgstr "Клавиатура Wang 724 со стрелками Unicode и математическими операторами"
+
+msgid "Wang 724 keypad with Unicode arrows and math operators on default level"
+msgstr "Клавиатура Wang 724 со стрелками Unicode и математическими операторами по умолчанию уровень"
+
+msgid "Hexadecimal"
+msgstr "Шестнадцатеричный"
+
+msgid "Phone and ATM style"
+msgstr "Стиль телефона и банкомата"
+
+msgid "Shift + Num Lock enables PointerKeys"
+msgstr "Shift + Num Lock включает клавиши указателя"
+
+msgid "Legacy key with dot"
+msgstr "Устаревшая клавиша с точкой"
+
+msgid "Legacy key with comma"
+msgstr "Устаревшая клавиша с запятой"
+
+msgid "Four-level key with dot"
+msgstr "Четырехуровневая клавиша с точкой"
+
+msgid "Four-level key with dot, Latin-9 only"
+msgstr "Четырехуровневая клавиша с точкой, только Latin-9"
+
+msgid "Four-level key with comma"
+msgstr "Четырехуровневая клавиша с запятой"
+
+msgid "Four-level key with momayyez"
+msgstr "Четырехуровневая клавиша с momayyez"
+
+msgid "Four-level key with abstract separators"
+msgstr "Четырехуровневая клавиша с абстрактными разделителями"
+
+msgid "Semicolon on third level"
+msgstr "Точка с запятой на третьем уровне"
+
+msgid "Caps Lock uses internal capitalization; Shift \"pauses\" Caps Lock"
+msgstr "Caps Lock использует внутреннюю заглавную клавишу; Shift «приостанавливает» Caps Lock"
+
+msgid "Caps Lock uses internal capitalization; Shift does not affect Caps Lock"
+msgstr "Caps Lock использует внутреннюю заглавную клавишу; Shift не влияет на Caps Lock"
+
+msgid "Caps Lock acts as Shift with locking; Shift \"pauses\" Caps Lock"
+msgstr "Caps Lock действует как Shift с блокировкой; Shift «приостанавливает» Caps Lock"
+
+msgid "Caps Lock acts as Shift with locking; Shift does not affect Caps Lock"
+msgstr "Caps Lock действует как Shift с блокировкой; Shift не влияет на Caps Lock"
+
+msgid "Caps Lock toggles normal capitalization of alphabetic characters"
+msgstr "Caps Lock переключает обычный режим заглавных букв алфавита"
+
+msgid "Caps Lock toggles Shift Lock (affects all keys)"
+msgstr "Caps Lock переключает Shift Lock (действует на все клавиши)"
+
+msgid "Swap Esc and Caps Lock"
+msgstr "Поменять местами Esc и Caps Lock"
+
+msgid "Make Caps Lock an additional Esc"
+msgstr "Сделать Caps Lock дополнительным Esc"
+
+msgid "Make Caps Lock an additional Esc, but Shift + Caps Lock is the regular Caps Lock"
+msgstr "Сделать Caps Lock дополнительным Esc, но Shift + Caps Lock — это обычный Caps Lock"
+
+msgid "Make Caps Lock an additional Backspace"
+msgstr "Сделать Caps Lock дополнительным Backspace"
+
+msgid "Make Caps Lock an additional Super"
+msgstr "Сделать Caps Lock дополнительной клавишей Super"
+
+msgid "Make Caps Lock an additional Hyper"
+msgstr "Сделать Caps Lock дополнительной клавишей Hyper"
+
+msgid "Make Caps Lock an additional Menu key"
+msgstr "Сделать Caps Lock дополнительной клавишей Menu"
+
+msgid "Make Caps Lock an additional Num Lock"
+msgstr "Сделать Caps Lock дополнительной клавишей Num Lock"
+
+msgid "Make Caps Lock an additional Ctrl"
+msgstr "Сделать Caps Lock дополнительной клавишей Ctrl"
+
+msgid "Caps Lock is disabled"
+msgstr "Caps Lock отключен"
+
+msgid "Add the standard behavior to Menu key"
+msgstr "Добавить стандартное поведение клавиши Menu"
+
+msgid "Menu is mapped to Win"
+msgstr "Меню назначено на Win"
+
+msgid "Alt and Meta are on Alt"
+msgstr "Alt и Meta назначены на Alt"
+
+msgid "Alt is mapped to Win and the usual Alt"
+msgstr "Alt назначены на Win и обычный Alt"
+
+msgid "Ctrl is mapped to Win and the usual Ctrl"
+msgstr "Ctrl назначены на Win и обычный Ctrl"
+
+msgid "Ctrl is mapped to Right Win and the usual Ctrl"
+msgstr "Ctrl назначены на Right Win и обычный Ctrl"
+
+msgid "Ctrl is mapped to Alt, Alt to Win"
+msgstr "Ctrl назначены на Alt, Alt — на Win"
+
+msgid "Meta is mapped to Win"
+msgstr "Meta назначены на Win"
+
+msgid "Meta is mapped to Left Win"
+msgstr "Meta назначены на Left Win"
+
+msgid "Hyper is mapped to Win"
+msgstr "Гипер сопоставлена с Win"
+
+msgid "Alt is mapped to Right Win, Super to Menu"
+msgstr "Alt сопоставлена с правой Win, Super — с Menu"
+
+msgid "Left Alt is swapped with Left Win"
+msgstr "Левый Alt поменян на левый Win"
+
+msgid "Alt is swapped with Win"
+msgstr "Alt поменян на Win"
+
+msgid "Win is mapped to PrtSc and the usual Win"
+msgstr "Win сопоставлена с PrtSc и обычной Win"
+
+msgid "3rd level of Left Win"
+msgstr "3-й уровень левой Win"
+
+msgid "3rd level of Right Win"
+msgstr "3-й уровень правой Win"
+
+msgid "3rd level of Menu"
+msgstr "3-й уровень Menu"
+
+msgid "Left Ctrl"
+msgstr "Левый Ctrl"
+
+msgid "3rd level of Left Ctrl"
+msgstr "3-й уровень левой Ctrl"
+
+msgid "3rd level of Right Ctrl"
+msgstr "3-й уровень правой Ctrl"
+
+msgid "3rd level of Caps Lock"
+msgstr "3-й уровень Caps Lock"
+
+msgid "3rd level of the \"< >\" key"
+msgstr "3-й уровень клавиши \"< >\""
+
+msgid "Pause"
+msgstr "Pause"
+
+msgid "Insert"
+msgstr "Insert"
+
+msgid "PrtSc"
+msgstr "PrtSc"
+
+msgid "keypad"
+msgstr "клавиатура"
+
+msgid "numpad"
+msgstr "цифровая клавиатура"
+
+msgid "srvrkeys"
+msgstr "srvrkeys"
+
+msgid "apple"
+msgstr "apple"
+
+msgid "shift"
+msgstr "shift"
+
+msgid "misc"
+msgstr "разное"
+
+msgid "grab"
+msgstr "grab"
+
+msgid "eurosign"
+msgstr "евро"
+
+msgid "rupeesign"
+msgstr "рупия"
+
+msgid "Caps Lock chooses 5th level"
+msgstr "Caps Lock выбирает 5-й уровень"
+
+msgid "The \"< >\" key chooses 5th level"
+msgstr "Клавиша \"< >\" Клавиша выбора 5-го уровня"
+
+msgid "Right Alt chooses 5th level"
+msgstr "Правый Alt выбирает 5-й уровень"
+
+msgid "Menu chooses 5th level"
+msgstr "Меню выбирает 5-й уровень"
+
+msgid "Right Ctrl chooses 5th level"
+msgstr "Правый Ctrl выбирает 5-й уровень"
+
+msgid "Right Alt chooses 5th level and acts as a one-time lock if pressed with another 5th level chooser"
+msgstr "Правый Alt выбирает 5-й уровень и действует как однократная блокировка при нажатии с другим переключателем 5-го уровня"
+
+msgid "Left Win chooses 5th level and acts as a one-time lock if pressed with another 5th level chooser"
+msgstr "Левая Win выбирает 5-й уровень и действует как однократная блокировка при нажатии с другим переключателем 5-го уровня"
+
+msgid "Right Win chooses 5th level and acts as a one-time lock if pressed with another 5th level chooser"
+msgstr "Правая Win выбирает 5-й уровень и действует как однократная блокировка при нажатии с другим переключателем 5-го уровня"
+
+msgid "The \"< >\" key chooses 5th level and acts as a one-time lock if pressed with another 5th level chooser"
+msgstr "Клавиша \"< >\" выбирает 5-й уровень и действует как однократная блокировка при нажатии с другим переключателем 5-го уровня"
+
+msgid "Usual space at any level"
+msgstr "Обычный пробел на любом уровне"
+
+msgid "Non-breaking space at the 2nd level"
+msgstr "Неразрывный пробел на 2-м уровне"
+
+msgid "Non-breaking space at the 3rd level"
+msgstr "Неразрывный пробел на 3-м уровне"
+
+msgid "Non-breaking space at the 3rd level, thin non-breaking space at the 4th level"
+msgstr "Неразрывный пробел на 3-м уровне уровень, тонкий неразрывный пробел на 4-м уровне"
+
+msgid "Non-breaking space at the 4th level"
+msgstr "Неразрывный пробел на 4-м уровне"
+
+msgid "Non-breaking space at the 4th level, thin non-breaking space at the 6th level"
+msgstr "Неразрывный пробел на 4-м уровне, тонкий неразрывный пробел на 6-м уровне"
+
+msgid "Non-breaking space at the 4th level, thin non-breaking space at the 6th level (via Ctrl+Shift)"
+msgstr "Неразрывный пробел на 4-м уровне, тонкий неразрывный пробел на 6-м уровне (через Ctrl+Shift)"
+
+msgid "Zero-width non-joiner at the 2nd level"
+msgstr "Необъединитель нулевой ширины на 2-м уровне"
+
+msgid "Zero-width non-joiner at the 2nd level, zero-width joiner at the 3rd level"
+msgstr "Необъединитель нулевой ширины на 2-м уровне, объединитель нулевой ширины на 3-м уровне"
+
+msgid "Zero-width non-joiner at the 2nd level, zero-width joiner at the 3rd level, non-breaking space at the 4th level"
+msgstr "Необъединитель нулевой ширины на 2-м уровне, объединитель нулевой ширины на 3-м уровне, неразрывный пробел на 4-м уровне"
+
+msgid "Zero-width non-joiner at the 2nd level, non-breaking space at the 3rd level"
+msgstr "Необъединитель нулевой ширины на 2-м уровне, неразрывный пробел на 3-м уровне"
+
+msgid "Zero-width non-joiner at the 2nd level, non-breaking space at the 3rd level, zero-width joiner at the 4th level"
+msgstr "Необъединитель нулевой ширины на 2-м уровне, неразрывный пробел на 3-м уровне, объединитель нулевой ширины на 4-й уровень"
+
+msgid "Zero-width non-joiner at the 2nd level, non-breaking space at the 3rd level, thin non-breaking space at the 4th level"
+msgstr "Нулевой ширины необъединяющий символ на 2-м уровне, неразрывный пробел на 3-м уровне, тонкий неразрывный пробел на 4-м уровне"
+
+msgid "Zero-width non-joiner at the 3rd level, zero-width joiner at the 4th level"
+msgstr "Нулевой ширины необъединяющий символ на 3-м уровне, нулевой ширины объединяющий символ на 4-м уровне"
+
+msgid "Kana Lock key is locking"
+msgstr "Клавиша Kana Lock блокирует"
+
+msgid "NICOLA-F style Backspace"
+msgstr "Клавиша Backspace в стиле NICOLA-F"
+
+msgid "Make Zenkaku Hankaku an additional Esc"
+msgstr "Сделать Zenkaku Hankaku дополнительной клавишей Esc"
+
+msgid "Make right Alt a Hangul key"
+msgstr "Сделать правый Alt клавишей Hangul"
+
+msgid "Make right Ctrl a Hangul key"
+msgstr "Сделать правый Ctrl клавишей Hangul"
+
+msgid "Make right Alt a Hanja key"
+msgstr "Сделать правый Alt клавишей Hanja"
+
+msgid "Make right Ctrl a Hanja key"
+msgstr "Сделать правый Ctrl клавишей Hanja"
+
+msgid "At the corresponding key in a QWERTY layout"
+msgstr "На соответствующей клавише в раскладке QWERTY"
+
+msgid "At the corresponding key in a Dvorak layout"
+msgstr "На соответствующей клавише в раскладке Dvorak"
+
+msgid "At the corresponding key in a Colemak layout"
+msgstr "На соответствующей клавише в раскладке Colemak"
+
+msgid "Sun key compatibility"
+msgstr "Совместимость с клавишей Sun"
+
+msgid "Ctrl+Alt+Backspace"
+msgstr "Ctrl+Alt+Backspac"
+
+msgid "Right Alt (while pressed)"
+msgstr "Правый Alt (удерживая нажатой)"
+
+msgid "Left Alt (while pressed)"
+msgstr "Левый Alt (удерживая нажатой)"
+
+msgid "Left Win (while pressed)"
+msgstr "Левая Win (удерживая нажатой)"
+
+msgid "Right Win (while pressed)"
+msgstr "Правая Win (удерживая нажатой)"
+
+msgid "Any Win (while pressed)"
+msgstr "Любая Win (удерживая нажатой)"
+
+msgid "Menu (while pressed), Shift+Menu for Menu"
+msgstr "Меню (удерживая нажатой), Shift+Menu для меню"
+
+msgid "Caps Lock (while pressed), Alt+Caps Lock for the original Caps Lock action"
+msgstr "Caps Lock (удерживая нажатой), Alt+Caps Lock для исходного действия Caps Lock"
+
+msgid "Right Ctrl (while pressed)"
+msgstr "Правый Ctrl (удерживая нажатой)"
+
+msgid "Shift+Caps Lock"
+msgstr "Shift+Caps Lock"
+
+msgid "Caps Lock to first layout; Shift+Caps Lock to second layout"
+msgstr "Caps Lock на первую раскладку; Shift+Caps Lock на вторую раскладку"
+
+msgid "Left Win to first layout; Right Win/Menu to second layout"
+msgstr "Левая Win на первую раскладку; Правая Win/Menu на вторую раскладку"
+
+msgid "Left Ctrl to first layout; Right Ctrl to second layout"
+msgstr "Левый Ctrl на первую раскладку; Правый Ctrl на вторую раскладку"
+
+msgid "Alt+Caps Lock"
+msgstr "Alt+Caps Lock"
+
+msgid "Both Shifts together"
+msgstr "Оба Shift одновременно"
+
+msgid "Both Alts together"
+msgstr "Оба Alt одновременно"
+
+msgid "Both Alts together; AltGr alone chooses third level"
+msgstr "Оба Alt одновременно; AltGr отдельно выбирает третий уровень"
+
+msgid "Both Ctrls together"
+msgstr "Оба Ctrl вместе"
+
+msgid "Ctrl+Shift"
+msgstr "Ctrl+Shift"
+
+msgid "Left Ctrl+Left Shift"
+msgstr "Левый Ctrl+Левый Shift"
+
+msgid "Right Ctrl+Right Shift"
+msgstr "Правый Ctrl+Правый Shift"
+
+msgid "Alt+Ctrl"
+msgstr "Alt+Ctrl"
+
+msgid "Alt+Shift"
+msgstr "Alt+Shift"
+
+msgid "Left Alt+Left Shift"
+msgstr "Левый Alt+Левый Shift"
+
+msgid "Right Alt+Right Shift"
+msgstr "Правый Alt+Правый Shift"
+
+msgid "Alt+Space"
+msgstr "Alt+Пробел"
+
+msgid "Win+Space"
+msgstr "Win+Пробел"
+
+msgid "Ctrl+Space"
+msgstr "Ctrl+Пробел"
+
+msgid "Left Shift"
+msgstr "Левый Shift"
+
+msgid "Right Shift"
+msgstr "Правый Shift"
+
+
+msgid "Ctrl+Left Win to first layout; Ctrl+Menu to second layout"
+msgstr "Ctrl+Левый Win на первую раскладку; Ctrl+Меню на вторую раскладку"
+
+msgid "Left Ctrl+Left Win"
+msgstr "Левый Ctrl+Левый Win"
\ No newline at end of file
diff --git a/locale/ubl-settings-keyboard.pot b/locale/ubl-settings-keyboard.pot
index 933a9a2..f9976c7 100644
--- a/locale/ubl-settings-keyboard.pot
+++ b/locale/ubl-settings-keyboard.pot
@@ -18,463 +18,178 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
#: source/ubl-strings.h:1
-msgid "Version:"
-msgstr ""
-
-#: source/ubl-strings.h:2
-msgid "ubl-settings-keyboard version:"
-msgstr ""
-
-#: source/ubl-strings.h:2
-msgid "Usage:"
-msgstr ""
-
-#: source/ubl-strings.h:2
-msgid "[OPTIONS]"
-msgstr ""
-
-#: source/ubl-strings.h:2
-msgid "Options:"
-msgstr ""
-
-#: source/ubl-strings.h:2
-msgid "Show this help"
-msgstr ""
-
-#: source/ubl-strings.h:2
-msgid "Show package version"
-msgstr ""
-
-#: source/ubl-strings.h:2
-msgid "Lock this help menu"
-msgstr ""
-
-#: source/ubl-strings.h:2
-msgid "Lock configuration saving"
-msgstr ""
-
-#: source/ubl-strings.h:2
-msgid "Lock local configration saving"
-msgstr ""
-
-#: source/ubl-strings.h:2
-msgid "Lock global configration saving"
-msgstr ""
-
-#: source/ubl-strings.h:2
-msgid "Lock global configration loading"
+msgid ""
+"https://wiki.ublinux.com/Software/Programs_and_utilities/All/ubl-settings-keyboard"
msgstr ""
-#: source/ubl-strings.h:4 source/ubl-strings.h:42
+#: source/ubl-strings.h:3 source/ubl-strings.h:8
msgid "Keyboard"
msgstr ""
-#: source/ubl-strings.h:5
+#: source/ubl-strings.h:4
msgid "Keyboard configuration"
msgstr ""
-#: source/ubl-strings.h:7
-msgid "Operation succeeded"
-msgstr ""
-
-#: source/ubl-strings.h:8
-msgid ""
-"Warning! Application was launched without root - root-dependent actions are "
-"locked"
-msgstr ""
-
-#: source/ubl-strings.h:10
-msgid "About"
-msgstr ""
-
-#: source/ubl-strings.h:11
-msgid "Documentation"
-msgstr ""
-
-#: source/ubl-strings.h:13
-msgid "Save to local configuration"
-msgstr ""
-
-#: source/ubl-strings.h:14
-msgid "Save to global configuration"
-msgstr ""
-
-#: source/ubl-strings.h:15
-msgid "Save configuration"
-msgstr ""
-
-#: source/ubl-strings.h:16
-msgid "Save"
-msgstr ""
-
-#: source/ubl-strings.h:18
-msgid "Load local configuration"
-msgstr ""
-
-#: source/ubl-strings.h:19
-msgid "Load global configuration"
-msgstr ""
-
-#: source/ubl-strings.h:20
-msgid "Load"
-msgstr ""
-
-#: source/ubl-strings.h:22
-msgid "Cancel"
-msgstr ""
-
-#: source/ubl-strings.h:24
-msgid "Would you like to read documentation in the Web?"
-msgstr ""
-
-#: source/ubl-strings.h:25
-msgid ""
-"You will be redirected to documentation website where documentation is\n"
-"translated and supported by community."
-msgstr ""
-
-#: source/ubl-strings.h:26
-msgid "Always redirect to online documentation"
-msgstr ""
-
-#: source/ubl-strings.h:27
-msgid "Open documentation"
-msgstr ""
-
-#: source/ubl-strings.h:28
-msgid "Project Home Page"
-msgstr ""
-
-#: source/ubl-strings.h:29
-msgid "Nothing were chosen"
-msgstr ""
-
-#: source/ubl-strings.h:32
-msgid "Global configuration loading succseeded."
-msgstr ""
-
-#: source/ubl-strings.h:33
-msgid "Local configuration loading succseeded."
-msgstr ""
-
-#: source/ubl-strings.h:34
-msgid "Config loading failed"
-msgstr ""
-
-#: source/ubl-strings.h:36
-msgid "Local and global configuration saving succseeded."
-msgstr ""
-
-#: source/ubl-strings.h:37
-msgid "Global configuration saving succseeded."
-msgstr ""
-
-#: source/ubl-strings.h:38
-msgid "Local configuration saving succseeded."
-msgstr ""
-
-#: source/ubl-strings.h:40
+#: source/ubl-strings.h:6
msgid "Console"
msgstr ""
-#: source/ubl-strings.h:41
+#: source/ubl-strings.h:7
msgid "Num Lock on boot:"
msgstr ""
-#: source/ubl-strings.h:43
+#: source/ubl-strings.h:9 source/ubl-strings.h:23
msgid "Keyboard model:"
msgstr ""
-#: source/ubl-strings.h:44
+#: source/ubl-strings.h:10
msgid "Keyboard options:"
msgstr ""
-#: source/ubl-strings.h:45
+#: source/ubl-strings.h:11
msgid "Keyboard layouts:"
msgstr ""
-#: source/ubl-strings.h:46
+#: source/ubl-strings.h:12
msgid "Pick an option"
msgstr ""
-#: source/ubl-strings.h:47
+#: source/ubl-strings.h:13
msgid "Move layout up"
msgstr ""
-#: source/ubl-strings.h:48
+#: source/ubl-strings.h:14
msgid "Move layout down"
msgstr ""
-#: source/ubl-strings.h:49
+#: source/ubl-strings.h:15
msgid "Add layout"
msgstr ""
-#: source/ubl-strings.h:50
+#: source/ubl-strings.h:16
msgid "Remove layout"
msgstr ""
-#: source/ubl-strings.h:51
+#: source/ubl-strings.h:17
msgid "Default"
msgstr ""
-#: source/ubl-strings.h:52
+#: source/ubl-strings.h:18 source/ubl-strings.h:30
msgid "On"
msgstr ""
-#: source/ubl-strings.h:53
+#: source/ubl-strings.h:19 source/ubl-strings.h:31
msgid "Off"
msgstr ""
-#: source/ubl-strings.h:54
+#: source/ubl-strings.h:20
msgid "Accept"
msgstr ""
-
-msgid "Afrikaans"
-msgstr ""
-
-msgid "Arabic"
-msgstr ""
-
-msgid "Assamese"
-msgstr ""
-
-msgid "Azerbaijani"
-msgstr ""
-
-msgid "Belarusian"
-msgstr ""
-
-msgid "Bulgarian"
-msgstr ""
-
-msgid "Bengali"
-msgstr ""
-
-msgid "Bosnian"
-msgstr ""
-
-msgid "Catalan"
-msgstr ""
-
-msgid "Czech"
-msgstr ""
-
-msgid "Danish"
-msgstr ""
-
-msgid "German"
-msgstr ""
-
-msgid "Greek"
-msgstr ""
-
-msgid "English"
-msgstr ""
-
-msgid "Spanish"
-msgstr ""
-
-msgid "Estonian"
-msgstr ""
-
-msgid "Finnish"
-msgstr ""
-
-msgid "French"
-msgstr ""
-
-msgid "Gujarati"
-msgstr ""
-
-msgid "Hebrew"
-msgstr ""
-
-msgid "Hindi"
-msgstr ""
-
-msgid "Croatian"
-msgstr ""
-
-msgid "Hungarian"
-msgstr ""
-
-msgid "Armenian"
-msgstr ""
-
-msgid "Indonesian"
-msgstr ""
-
-msgid "Icelandic"
-msgstr ""
-
-msgid "Italian"
-msgstr ""
-
-msgid "Japanese"
-msgstr ""
-
-msgid "Georgian"
-msgstr ""
-
-msgid "Kazakh"
-msgstr ""
-
-msgid "Kannada"
-msgstr ""
-
-msgid "Korean"
-msgstr ""
-
-msgid "Kashmiri"
-msgstr ""
-
-msgid "Kurdish"
-msgstr ""
-
-msgid "Kirghiz"
-msgstr ""
-
-msgid "Lithuanian"
-msgstr ""
-
-msgid "Latvian"
-msgstr ""
-
-msgid "Macedonian"
-msgstr ""
-
-msgid "Malayalam"
-msgstr ""
-
-msgid "Marathi"
-msgstr ""
-
-msgid "Malay"
-msgstr ""
-
-msgid "Maltese"
-msgstr ""
-
-msgid "Bokmal"
-msgstr ""
-
-msgid "Dutch"
-msgstr ""
-
-msgid "Nynorsk"
-msgstr ""
-
-msgid "Oriya"
-msgstr ""
-
-msgid "Punjabi"
-msgstr ""
-
-msgid "Polish"
-msgstr ""
-
-msgid "Portuguese"
-msgstr ""
-
-msgid "Romanian"
-msgstr ""
-
-msgid "Russian"
-msgstr ""
-
-msgid "Sanskrit"
-msgstr ""
-
-msgid "Slovak"
-msgstr ""
-
-msgid "Slovenian"
-msgstr ""
-
-msgid "Albanian"
-msgstr ""
-
-msgid "Serbian"
+#: source/ubl-strings.h:20
+msgid "Cancel"
msgstr ""
-msgid "Swedish"
+#: source/ubl-strings.h:22
+msgid "System"
msgstr ""
-msgid "Tamil"
+#: source/ubl-strings.h:24
+msgid "Layouts:"
msgstr ""
-msgid "Telugu"
+#: source/ubl-strings.h:25
+msgid "Default layout"
msgstr ""
-msgid "Thai"
+#: source/ubl-strings.h:26
+msgid "Changing the layout:"
msgstr ""
-msgid "Turkish"
+#: source/ubl-strings.h:27
+msgid "Additional options:"
msgstr ""
-msgid "Ukrainian"
+#: source/ubl-strings.h:28
+msgid "Set Compose (Multi_Key) to the right Win key"
msgstr ""
-msgid "American"
+#: source/ubl-strings.h:29
+msgid "Scroll Lock indication when switching layouts"
msgstr ""
-msgid "Vietnamese"
+#: source/ubl-strings.h:32
+msgid "NumLock:"
msgstr ""
-msgid "Simplified Chinese"
+#: source/ubl-strings.h:33
+msgid "Setting up TTY VT"
msgstr ""
-msgid "Traditional Chinese"
+#: source/ubl-strings.h:34
+msgid "Key layout and switch:"
msgstr ""
-msgid "Chinese"
+#: source/ubl-strings.h:35
+msgid "Keyboard layout"
msgstr ""
-msgid "Generic 86-key PC"
+#: source/ubl-strings.h:36
+msgid "Designation"
msgstr ""
-msgid "Generic 101-key PC"
+#: source/ubl-strings.h:37
+msgid "Variant"
msgstr ""
-msgid "Generic 102-key PC"
+#: source/ubl-strings.h:38
+msgid "Name"
msgstr ""
-msgid "Generic 104-key PC"
+#: source/ubl-strings.h:39
+msgid "Description"
msgstr ""
-msgid "Generic 104-key PC with L-shaped Enter key"
+#: source/ubl-strings.h:20
+msgid "Options:"
msgstr ""
-msgid "Generic 105-key PC"
+#: source/ubl-strings.h:20
+msgid "Additional key layout and switch:"
msgstr ""
-msgid "Dell 101-key PC"
+#: source/ubl-strings.h:20
+msgid "Font:"
msgstr ""
-msgid "Dell Latitude laptop"
+#: source/ubl-strings.h:20
+msgid "Group"
msgstr ""
-msgid "Dell Precision M65 laptop"
+#: source/ubl-strings.h:20
+msgid "Additional key layout for the keyboard"
msgstr ""
-msgid "Dell Inspiron 6000/8000 laptop"
+#: source/ubl-strings.h:20
+msgid "Font"
msgstr ""
-msgid "Dell Precision M laptop"
+#: source/ubl-strings.h:20
+msgid "Are you sure you want to remove current option?"
msgstr ""
-msgid "Fujitsu-Siemens Amilo laptop"
+#: source/ubl-strings.h:20
+msgid "Option deletion"
msgstr ""
-msgid "Hewlett-Packard Mini 110 laptop"
+#: source/ubl-strings.h:20
+msgid "Are you sure you want to remove current layout?"
msgstr ""
-msgid "Asus laptop"
+#: source/ubl-strings.h:20
+msgid "Layout deletion"
msgstr ""
-msgid "Apple laptop"
+#: source/ubl-strings.h:20
+msgid "Manual input:"
msgstr ""
-
-msgid "eMachines m6800 laptop"
-msgstr ""
\ No newline at end of file
diff --git a/locale/ubl-settings-keyboard_ru.po b/locale/ubl-settings-keyboard_ru.po
index 9257e06..7bd27c9 100644
--- a/locale/ubl-settings-keyboard_ru.po
+++ b/locale/ubl-settings-keyboard_ru.po
@@ -18,469 +18,180 @@ msgstr ""
"Content-Transfer-Encoding: 8bit\n"
#: source/ubl-strings.h:1
-msgid "Version:"
-msgstr "Версия:"
-
-#: source/ubl-strings.h:2
-msgid "ubl-settings-keyboard version:"
-msgstr "Версия ubl-settings-keyboard: "
-
-#: source/ubl-strings.h:2
-msgid "Usage:"
-msgstr "Использование:"
-
-#: source/ubl-strings.h:2
-msgid "[OPTIONS]"
-msgstr "[АРГУМЕНТЫ]"
-
-#: source/ubl-strings.h:2
-msgid "Options:"
-msgstr "Аргументы:"
-
-#: source/ubl-strings.h:2
-msgid "Show this help"
-msgstr "Показать параметры справки"
-
-#: source/ubl-strings.h:2
-msgid "Show package version"
-msgstr "Показать текущую версию"
-
-#: source/ubl-strings.h:2
-msgid "Lock this help menu"
-msgstr "Блокировка вызова справки"
-
-#: source/ubl-strings.h:2
-msgid "Lock configuration saving"
-msgstr "Блокировка сохранения локальной и глобальной конфигурации"
-
-#: source/ubl-strings.h:2
-msgid "Lock local configration saving"
-msgstr "Блокировка сохранения локальной конфигурации"
-
-#: source/ubl-strings.h:2
-msgid "Lock global configration saving"
-msgstr "Блокировка сохранения глобальной конфигурации"
-
-#: source/ubl-strings.h:2
-msgid "Lock global configration loading"
-msgstr "Блокировка загрузки глобальной конфигурации"
+msgid ""
+"https://wiki.ublinux.com/Software/Programs_and_utilities/All/ubl-settings-"
+"keyboard"
+msgstr "https://wiki.ublinux.com/Software/Programs_and_utilities/All/ubl-settings-"
+"keyboard"
-#: source/ubl-strings.h:4 source/ubl-strings.h:42
+#: source/ubl-strings.h:3 source/ubl-strings.h:8
msgid "Keyboard"
msgstr "Клавиатура"
-#: source/ubl-strings.h:5
+#: source/ubl-strings.h:4
msgid "Keyboard configuration"
msgstr "Настройки Клавиатуры"
-#: source/ubl-strings.h:7
-msgid "Operation succeeded"
-msgstr "Операция завершена"
-
-#: source/ubl-strings.h:8
-msgid ""
-"Warning! Application was launched without root - root-dependent actions are "
-"locked"
-msgstr ""
-"Внимание! Приложение было запущено без прав суперпользователя - действия, "
-"требующие их наличия заблокированы"
-
-#: source/ubl-strings.h:10
-msgid "About"
-msgstr "О программе"
-
-#: source/ubl-strings.h:11
-msgid "Documentation"
-msgstr "Справка"
-
-#: source/ubl-strings.h:13
-msgid "Save to local configuration"
-msgstr "Сохранить в локальную конфигурацию"
-
-#: source/ubl-strings.h:14
-msgid "Save to global configuration"
-msgstr "Сохранить в глобальную конфигурацию"
-
-#: source/ubl-strings.h:15
-msgid "Save configuration"
-msgstr "Сохранить конфигурацию"
-
-#: source/ubl-strings.h:16
-msgid "Save"
-msgstr "Сохранить"
-
-#: source/ubl-strings.h:18
-msgid "Load local configuration"
-msgstr "Загрузить локальную конфигуруцию"
-
-#: source/ubl-strings.h:19
-msgid "Load global configuration"
-msgstr "Загрузить глобальную конфигурацию"
-
-#: source/ubl-strings.h:20
-msgid "Load"
-msgstr "Загрузить"
-
-#: source/ubl-strings.h:22
-msgid "Cancel"
-msgstr "Отмена"
-
-#: source/ubl-strings.h:24
-msgid "Would you like to read documentation in the Web?"
-msgstr "Вы хотите прочитать справку в Сети?"
-
-#: source/ubl-strings.h:25
-msgid ""
-"You will be redirected to documentation website where documentation is\n"
-"translated and supported by community."
-msgstr ""
-"Вы будете перенаправлены на сайт с документацией, где страницы помощи\n"
-"переводятся и поддерживаются сообществом."
-
-#: source/ubl-strings.h:26
-msgid "Always redirect to online documentation"
-msgstr "Всегда перенаправлять"
-
-#: source/ubl-strings.h:27
-msgid "Open documentation"
-msgstr "Прочитать справку"
-
-#: source/ubl-strings.h:28
-msgid "Project Home Page"
-msgstr "Домашняя страница проекта"
-
-#: source/ubl-strings.h:29
-msgid "Nothing were chosen"
-msgstr "Ничего не было выбрано"
-
-#: source/ubl-strings.h:32
-msgid "Global configuration loading succseeded."
-msgstr "Успешно загружена глобальная конфигурация"
-
-#: source/ubl-strings.h:33
-msgid "Local configuration loading succseeded."
-msgstr "Успешно загружена локальная конфигурация"
-
-#: source/ubl-strings.h:34
-msgid "Config loading failed"
-msgstr "Ошибка загрузки конфигурации"
-
-#: source/ubl-strings.h:36
-msgid "Local and global configuration saving succseeded."
-msgstr "Успешно записаны локальная и глобальная конфигурация"
-
-#: source/ubl-strings.h:37
-msgid "Global configuration saving succseeded."
-msgstr "Успешно записана глобальная конфигурация"
-
-#: source/ubl-strings.h:38
-msgid "Local configuration saving succseeded."
-msgstr "Успешно записана локальная конфигурация"
-
-#: source/ubl-strings.h:40
+#: source/ubl-strings.h:6
msgid "Console"
msgstr "Консоль"
-#: source/ubl-strings.h:41
+#: source/ubl-strings.h:7
msgid "Num Lock on boot:"
msgstr "Num Lock при загрузке:"
-#: source/ubl-strings.h:43
+#: source/ubl-strings.h:9 source/ubl-strings.h:23
msgid "Keyboard model:"
msgstr "Модель клавиатуры:"
-#: source/ubl-strings.h:44
+#: source/ubl-strings.h:10
msgid "Keyboard options:"
msgstr "Опции клавиатуры:"
-#: source/ubl-strings.h:45
+#: source/ubl-strings.h:11
msgid "Keyboard layouts:"
msgstr "Раскладки клавиатуры:"
-#: source/ubl-strings.h:46
+#: source/ubl-strings.h:12
msgid "Pick an option"
msgstr "Выбрать опцию"
-#: source/ubl-strings.h:47
+#: source/ubl-strings.h:13
msgid "Move layout up"
msgstr "Переместить раскладку выше"
-#: source/ubl-strings.h:48
+#: source/ubl-strings.h:14
msgid "Move layout down"
msgstr "Переместить раскладку ниже"
-#: source/ubl-strings.h:49
+#: source/ubl-strings.h:15
msgid "Add layout"
msgstr "Добавить раскладку"
-#: source/ubl-strings.h:50
+#: source/ubl-strings.h:16
msgid "Remove layout"
msgstr "Удалить раскладку"
-#: source/ubl-strings.h:51
+#: source/ubl-strings.h:17
msgid "Default"
msgstr "По умолчанию"
-#: source/ubl-strings.h:52
+#: source/ubl-strings.h:18 source/ubl-strings.h:30
msgid "On"
msgstr "Включить"
-#: source/ubl-strings.h:53
+#: source/ubl-strings.h:19 source/ubl-strings.h:31
msgid "Off"
msgstr "Выключить"
-#: source/ubl-strings.h:54
+#: source/ubl-strings.h:20
msgid "Accept"
msgstr "Принять"
-msgid "Afrikaans"
-msgstr "Африканский"
-
-msgid "Arabic"
-msgstr "Арабский"
-
-msgid "Assamese"
-msgstr "Ассамский"
-
-msgid "Azerbaijani"
-msgstr "Азербайджанский"
-
-msgid "Belarusian"
-msgstr "Беларусский"
-
-msgid "Bulgarian"
-msgstr "Болгарский"
-
-msgid "Bengali"
-msgstr "Бенгальский"
-
-msgid "Bosnian"
-msgstr "Боснийский"
-
-msgid "Catalan"
-msgstr "Каталонский"
-
-msgid "Czech"
-msgstr "Чешский"
-
-msgid "Danish"
-msgstr "Датский"
-
-msgid "German"
-msgstr "Немецкий"
-
-msgid "Greek"
-msgstr "Греческий"
-
-msgid "English"
-msgstr "Английский"
-
-msgid "Spanish"
-msgstr "Испанский"
-
-msgid "Estonian"
-msgstr "Эстонский"
-
-msgid "Finnish"
-msgstr "Финский"
-
-msgid "French"
-msgstr "Французский"
-
-msgid "Gujarati"
-msgstr "Гуджаратский"
-
-msgid "Hebrew"
-msgstr "Иврит"
-
-msgid "Hindi"
-msgstr "Хинди"
-
-msgid "Croatian"
-msgstr "Хорватский"
-
-msgid "Hungarian"
-msgstr "Венгерский"
-
-msgid "Armenian"
-msgstr "Армянский"
-
-msgid "Indonesian"
-msgstr "Индонезийский"
-
-msgid "Icelandic"
-msgstr "Исландский"
-
-msgid "Italian"
-msgstr "Итальянский"
-
-msgid "Japanese"
-msgstr "Японский"
-
-msgid "Georgian"
-msgstr "Грузинский"
-
-msgid "Kazakh"
-msgstr "Казахский"
-
-msgid "Kannada"
-msgstr "Каннада"
-
-msgid "Korean"
-msgstr "Корейский"
-
-msgid "Kashmiri"
-msgstr "Кашмирский"
-
-msgid "Kurdish"
-msgstr "Курдский"
-
-msgid "Kirghiz"
-msgstr "Киргизский"
-
-msgid "Lithuanian"
-msgstr "Литовский"
-
-msgid "Latvian"
-msgstr "Латышский"
-
-msgid "Macedonian"
-msgstr "Македонский"
-
-msgid "Malayalam"
-msgstr "Малаялам"
-
-msgid "Marathi"
-msgstr "Маратхи"
-
-msgid "Malay"
-msgstr "Малайский"
-
-msgid "Maltese"
-msgstr "Мальтийский"
-
-msgid "Bokmal"
-msgstr "Букмол"
-
-msgid "Dutch"
-msgstr "Нидерландский"
-
-msgid "Nynorsk"
-msgstr "Норвежский"
-
-msgid "Oriya"
-msgstr "Ория"
-
-msgid "Punjabi"
-msgstr "Панджаби"
-
-msgid "Polish"
-msgstr "Польский"
-
-msgid "Portuguese"
-msgstr "Португальский"
-
-msgid "Romanian"
-msgstr "Румынский"
-
-msgid "Russian"
-msgstr "Русский"
-
-msgid "Sanskrit"
-msgstr "Санскрит"
-
-msgid "Slovak"
-msgstr "Словацкий"
-
-msgid "Slovenian"
-msgstr "Словенский"
-
-msgid "Albanian"
-msgstr "Албанский"
-
-msgid "Serbian"
-msgstr "Сербский"
-
-msgid "Swedish"
-msgstr "Шведский"
-
-msgid "Tamil"
-msgstr "Тамильский"
+#: source/ubl-strings.h:20
+msgid "Cancel"
+msgstr "Отмена"
-msgid "Telugu"
-msgstr "Тулугу"
+#: source/ubl-strings.h:22
+msgid "System"
+msgstr "Система"
-msgid "Thai"
-msgstr "Тайский"
+#: source/ubl-strings.h:24
+msgid "Layouts:"
+msgstr "Раскладки:"
-msgid "Turkish"
-msgstr "Турецкий"
+#: source/ubl-strings.h:25
+msgid "Default layout"
+msgstr "Раскладка по умолчанию"
-msgid "Ukrainian"
-msgstr "Украинский"
+#: source/ubl-strings.h:26
+msgid "Changing the layout:"
+msgstr "Смена раскладки:"
-msgid "American"
-msgstr "Американский английский"
+#: source/ubl-strings.h:27
+msgid "Additional options:"
+msgstr "Дополнительные опции:"
-msgid "Vietnamese"
-msgstr "Вьетнамский"
+#: source/ubl-strings.h:28
+msgid "Set Compose (Multi_Key) to the right Win key"
+msgstr "Установить Compose (Multi_Key) на клавишу \"правая Win\""
-msgid "Simplified Chinese"
-msgstr "Упрощённый Китайский"
+#: source/ubl-strings.h:29
+msgid "Scroll Lock indication when switching layouts"
+msgstr "Индикация Scroll Lock при переключении раскладки"
-msgid "Traditional Chinese"
-msgstr "Традиционный Китайский"
+#: source/ubl-strings.h:32
+msgid "NumLock:"
+msgstr "NumLock:"
-msgid "Chinese"
-msgstr "Китайский"
+#: source/ubl-strings.h:33
+msgid "Setting up TTY VT"
+msgstr "Настройка TTY VT"
-msgid "Generic 86-key PC"
-msgstr "Обычная 86-клавишная"
+#: source/ubl-strings.h:34
+msgid "Key layout and switch:"
+msgstr "Раскладка клавиш и переключатель:"
-msgid "Generic 101-key PC"
-msgstr "Обычная 101-клавишная"
+#: source/ubl-strings.h:35
+msgid "Keyboard layout"
+msgstr "Раскладка клавиатуры"
-msgid "Generic 102-key PC"
-msgstr "Обычная 102-клавишная"
+#: source/ubl-strings.h:36
+msgid "Designation"
+msgstr "Обозначение"
-msgid "Generic 104-key PC"
-msgstr "Обычная 104-клавишная"
+#: source/ubl-strings.h:37
+msgid "Variant"
+msgstr "Вариант"
-msgid "Generic 104-key PC with L-shaped Enter key"
-msgstr "Обычная 104-клавишная (Enter в форме буквы L)"
+#: source/ubl-strings.h:38
+msgid "Name"
+msgstr "Имя"
-msgid "Generic 105-key PC"
-msgstr "Обычная 105-клавишная"
+#: source/ubl-strings.h:39
+msgid "Description"
+msgstr "Описание"
-msgid "Dell 101-key PC"
-msgstr "Dell 101-клавишная"
+#: source/ubl-strings.h:20
+msgid "Options:"
+msgstr "Опции:"
-msgid "Dell Latitude laptop"
-msgstr "Ноутбук Dell Latitude"
+#: source/ubl-strings.h:20
+msgid "Additional key layout and switch:"
+msgstr "Дополнительная раскладка клавиш и переключатель:"
-msgid "Dell Precision M65 laptop"
-msgstr "Ноутбук Dell Precision M65"
+#: source/ubl-strings.h:20
+msgid "Font:"
+msgstr "Шрифт:"
-msgid "Dell Inspiron 6000/8000 laptop"
-msgstr "Ноутбук Dell Inspiron 6000/8000"
+#: source/ubl-strings.h:20
+msgid "Group"
+msgstr "Группа"
-msgid "Dell Precision M laptop"
-msgstr "Ноутбук Dell Precision M"
+#: source/ubl-strings.h:20
+msgid "Additional key layout for the keyboard"
+msgstr "Дополнительная раскладка клавиш для клавиатуры"
-msgid "Fujitsu-Siemens Amilo laptop"
-msgstr "Ноутбук Fujitsu-Siemens Amilo"
+#: source/ubl-strings.h:20
+msgid "Font"
+msgstr "Шрифт"
-msgid "Hewlett-Packard Mini 110 laptop"
-msgstr "Ноутбук Hewlett-Packard Mini 110"
+#: source/ubl-strings.h:20
+msgid "Are you sure you want to remove current option?"
+msgstr "Вы уверены что хотите удалить данную опцию?"
-msgid "Asus laptop"
-msgstr "Ноутбук Asus"
+#: source/ubl-strings.h:20
+msgid "Option deletion"
+msgstr "Удаление опции"
-msgid "Apple laptop"
-msgstr "Ноутбук Apple"
+#: source/ubl-strings.h:20
+msgid "Are you sure you want to remove current layout?"
+msgstr "Вы уверены что хотите удалить данную раскладку?"
-msgid "eMachines m6800 laptop"
-msgstr "Ноутбук eMachines m6800"
+#: source/ubl-strings.h:20
+msgid "Layout deletion"
+msgstr "Удаление раскладки"
-#~ msgid "Acer laptop"
-#~ msgstr "Ноутбук Acer"
+#: source/ubl-strings.h:20
+msgid "Manual input:"
+msgstr "Ручной выбор:"
diff --git a/source/CMakeLists.txt b/source/CMakeLists.txt
index 5cabe32..f6ef902 100644
--- a/source/CMakeLists.txt
+++ b/source/CMakeLists.txt
@@ -34,7 +34,10 @@ set(DEPENDFILES
../ubl-settings-keyboard.glade
../ubl-settings-keyboard-layouts.glade
../ubl-settings-keyboard-options.glade
- ../layouts.csv
+ ../ubl-settings-keyboard-keymaps.glade
+ ../ubl-settings-keyboard-font.glade
+ ../keymap-list.csv
+ ../font-list.csv
../gresource.xml
../ubl-settings-keyboard.css
)
@@ -74,6 +77,11 @@ endif()
set(SOURCE_FILES
ubl-settings-keyboard.c
+ ubl-settings-keyboard-layouts.c
+ ubl-settings-keyboard-options.c
+ ubl-settings-keyboard-save.c
+ ubl-settings-keyboard-font.c
+ ubl-settings-keyboard-keymaps.c
ubl-settings-keyboard.h
ubl-strings.h
)
diff --git a/source/ubl-settings-keyboard-font.c b/source/ubl-settings-keyboard-font.c
new file mode 100644
index 0000000..3b5f1de
--- /dev/null
+++ b/source/ubl-settings-keyboard-font.c
@@ -0,0 +1,90 @@
+#include "ubl-settings-keyboard.h"
+
+void on_font_accept(GtkWidget *, layouts_window *window){
+ GtkWidget *output_widget = g_object_get_data(G_OBJECT(window->Window),"output");
+ if (gtk_switch_get_active(GTK_SWITCH(window->OptionsFilterCombo))){
+ gtk_entry_set_text(GTK_ENTRY(output_widget),"");
+ yon_config_remove_by_key(console_keymap_parameter);
+ on_subwindow_close(window->Window);
+ return;
+ }
+ char *target = (char*)gtk_entry_get_text(GTK_ENTRY(window->OptionsEntry));
+ if (yon_char_is_empty(target)){
+ yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),yon_char_get_localised_from_lib(NOTHING_CHOSEN_LABEL),5,BACKGROUND_IMAGE_FAIL_TYPE);
+ return;
+ }
+ gtk_entry_set_text(GTK_ENTRY(output_widget),target);
+ yon_config_register(console_font_parameter,console_font_parameter_command,target);
+ on_subwindow_close(window->Window);
+}
+
+void on_font_selection_changed(GtkWidget *,layouts_window *window){
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(window->MainTree)),&model, &iter)){
+ char *target;
+ gtk_tree_model_get(model,&iter,0,&target,-1);
+ gtk_entry_set_text(GTK_ENTRY(window->OptionsEntry),target);
+ } else {
+ gtk_entry_set_text(GTK_ENTRY(window->OptionsEntry),"");
+ }
+}
+
+layouts_window *yon_font_window_new(){
+ GtkBuilder *builder = gtk_builder_new_from_resource(glade_font_path);
+ layouts_window *window = malloc(sizeof(layouts_window));
+ memset(window,0,sizeof(layouts_window));
+ window->Window = yon_gtk_builder_get_widget(builder,"Window");
+ window->StatusBox = yon_gtk_builder_get_widget(builder,"StatusBox");
+ window->AcceptButton = yon_gtk_builder_get_widget(builder,"AcceptButton");
+ window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton");
+ window->MainTree = yon_gtk_builder_get_widget(builder,"FontTree");
+ window->OptionsEntry = yon_gtk_builder_get_widget(builder,"ManualEntry");
+ window->OptionsFilterCombo = yon_gtk_builder_get_widget(builder,"DefaultSwitch");
+ window->OptionsList = GTK_LIST_STORE(gtk_builder_get_object(builder,"FontList"));
+ window->parameters = yon_char_new(config(keyboard_layout_parameter));
+
+ g_signal_connect(G_OBJECT(window->OptionsFilterCombo),"state-set",G_CALLBACK(yon_gtk_widget_set_sensitive_from_switch_inversed),window->MainTree);
+ g_signal_connect(G_OBJECT(window->OptionsFilterCombo),"state-set",G_CALLBACK(yon_gtk_widget_set_sensitive_from_switch_inversed),window->OptionsEntry);
+ g_signal_connect(G_OBJECT(window->MainTree),"cursor-changed",G_CALLBACK(on_font_selection_changed),window);
+ g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);
+ int font_size;
+ int size;
+ config_str fonts = yon_resource_open_file(font_list_path, &font_size);
+ for (int i=0;iOptionsFilterCombo),0);
+ }
+ for (int i=0;iOptionsList),&iter);
+ gtk_list_store_set(GTK_LIST_STORE(window->OptionsList),&iter,0,parsed[0],1,parsed[1],-1);
+ if (!yon_char_is_empty(config_value)&&!strcmp(parsed[0],config_value)){
+ gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(window->MainTree)),&iter);
+ gtk_entry_set_text(GTK_ENTRY(window->OptionsEntry),config_value);
+ }
+ }
+ }
+ if (yon_char_is_empty(config_value)){
+ gtk_switch_set_active(GTK_SWITCH(window->OptionsFilterCombo),1);
+ }
+ return window;
+}
+
+void yon_font_open(GtkWidget *,main_window *widgets){
+ layouts_window *window = yon_font_window_new();
+ g_object_set_data(G_OBJECT(window->Window),"output",widgets->TTYFontEntry);
+ yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window),FONT_TITLE_LABEL,icon_path,"font-window");
+
+ g_object_set_data(G_OBJECT(window->Window),"widgets",widgets);
+ g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_font_accept),window);
+}
\ No newline at end of file
diff --git a/source/ubl-settings-keyboard-keymaps.c b/source/ubl-settings-keyboard-keymaps.c
new file mode 100644
index 0000000..9f726b0
--- /dev/null
+++ b/source/ubl-settings-keyboard-keymaps.c
@@ -0,0 +1,108 @@
+#include "ubl-settings-keyboard.h"
+
+void on_keymaps_accept(GtkWidget *, layouts_window *window){
+ main_window *widgets = g_object_get_data(G_OBJECT(window->Window),"widgets");
+ GtkWidget *output_widget = g_object_get_data(G_OBJECT(window->Window),"output");
+ if (gtk_switch_get_active(GTK_SWITCH(window->OptionsFilterCombo))){
+ gtk_entry_set_text(GTK_ENTRY(output_widget),"");
+ yon_config_remove_by_key(console_keymap_parameter);
+ on_subwindow_close(window->Window);
+ return;
+ }
+ char *target = (char*)gtk_entry_get_text(GTK_ENTRY(window->OptionsEntry));
+ if (yon_char_is_empty(target)){
+ yon_ubl_status_box_spawn(GTK_CONTAINER(window->StatusBox),yon_char_get_localised_from_lib(NOTHING_CHOSEN_LABEL),5,BACKGROUND_IMAGE_FAIL_TYPE);
+ return;
+ }
+ if (output_widget == widgets->TTYLayoutEntry){
+ gtk_entry_set_text(GTK_ENTRY(output_widget),target);
+ yon_config_register(console_keymap_parameter,console_keymap_parameter_command,target);
+
+ } else {
+ gtk_entry_set_text(GTK_ENTRY(output_widget),target);
+ yon_config_register(console_keymap_toggle_parameter,console_keymap_parameter_command,target);
+
+ }
+ on_subwindow_close(window->Window);
+}
+
+void on_keymaps_selection_changed(GtkWidget *,layouts_window *window){
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+ if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(window->MainTree)),&model, &iter)){
+ char *target;
+ gtk_tree_model_get(model,&iter,0,&target,-1);
+ gtk_entry_set_text(GTK_ENTRY(window->OptionsEntry),target);
+ } else {
+ gtk_entry_set_text(GTK_ENTRY(window->OptionsEntry),"");
+ }
+}
+
+layouts_window *yon_keymaps_window_new(){
+ GtkBuilder *builder = gtk_builder_new_from_resource(glade_keymaps_path);
+ layouts_window *window = malloc(sizeof(layouts_window));
+ memset(window,0,sizeof(layouts_window));
+ window->Window = yon_gtk_builder_get_widget(builder,"Window");
+ window->StatusBox = yon_gtk_builder_get_widget(builder,"StatusBox");
+ window->AcceptButton = yon_gtk_builder_get_widget(builder,"AcceptButton");
+ window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton");
+ window->MainTree = yon_gtk_builder_get_widget(builder,"KeymapTree");
+ window->parameters = yon_char_new(config(keyboard_layout_parameter));
+ window->OptionsEntry = yon_gtk_builder_get_widget(builder,"ManualEntry");
+ window->OptionsFilterCombo = yon_gtk_builder_get_widget(builder,"DefaultSwitch");
+ window->OptionsList = GTK_LIST_STORE(gtk_builder_get_object(builder,"KeymapList"));
+
+ g_signal_connect(G_OBJECT(window->OptionsFilterCombo),"state-set",G_CALLBACK(yon_gtk_widget_set_sensitive_from_switch_inversed),window->MainTree);
+ g_signal_connect(G_OBJECT(window->OptionsFilterCombo),"state-set",G_CALLBACK(yon_gtk_widget_set_sensitive_from_switch_inversed),window->OptionsEntry);
+ g_signal_connect(G_OBJECT(window->MainTree),"cursor-changed",G_CALLBACK(on_keymaps_selection_changed),window);
+ g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);
+ return window;
+}
+
+void yon_keymaps_open(GtkWidget *self,main_window *widgets){
+ layouts_window *window = yon_keymaps_window_new();
+ if (self == widgets->TTYLayoutButton){
+ yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window),KEYBOARD_LAYOUT_LABEL,icon_path,"font-window");
+ g_object_set_data(G_OBJECT(window->Window),"output",widgets->TTYLayoutEntry);
+ } else {
+ yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window),KEYMAP_TITLE_LABEL,icon_path,"font-window");
+ g_object_set_data(G_OBJECT(window->Window),"output",widgets->TTYSecondLayoutEntry);
+ }
+ g_object_set_data(G_OBJECT(window->Window),"widgets",widgets);
+ g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_keymaps_accept),window);
+
+ int keymap_size;
+ int size;
+ config_str keymaps = yon_resource_open_file(keymap_list_path, &keymap_size);
+ for (int i=0;iTTYLayoutButton){
+ config_value = config(console_keymap_parameter);
+ } else {
+ config_value = config(console_keymap_toggle_parameter);
+ }
+ if (yon_char_is_empty(config_value)){
+ gtk_switch_set_active(GTK_SWITCH(window->OptionsFilterCombo),0);
+ }
+ for (int i=0;iOptionsList),&iter);
+ gtk_list_store_set(GTK_LIST_STORE(window->OptionsList),&iter,0,parsed[0],1,parsed[1],2,parsed[2],-1);
+ if (!yon_char_is_empty(config_value)&&!strcmp(parsed[0],config_value)){
+ gtk_tree_selection_select_iter(gtk_tree_view_get_selection(GTK_TREE_VIEW(window->MainTree)),&iter);
+ gtk_entry_set_text(GTK_ENTRY(window->OptionsEntry),config_value);
+ }
+ }
+ }
+ if (yon_char_is_empty(config_value)){
+ gtk_switch_set_active(GTK_SWITCH(window->OptionsFilterCombo),1);
+ }
+}
\ No newline at end of file
diff --git a/source/ubl-settings-keyboard-layouts.c b/source/ubl-settings-keyboard-layouts.c
new file mode 100644
index 0000000..2825cb6
--- /dev/null
+++ b/source/ubl-settings-keyboard-layouts.c
@@ -0,0 +1,253 @@
+#include "ubl-settings-keyboard.h"
+
+void on_layouts_accept(GtkWidget *self, layouts_window *window){
+ main_window *widgets = g_object_get_data(G_OBJECT(window->Window),"widgets");
+ if (!yon_char_is_empty(window->parameters)){
+ yon_config_register(keyboard_layout_parameter,keyboard_layout_parameter_command,window->parameters);
+ } else {
+ yon_config_remove_by_key(keyboard_layout_parameter);
+ }
+ on_subwindow_close(self);
+ yon_interface_update(widgets);
+}
+
+void on_layouts_chosen(GtkCellRenderer *, gchar *path, layouts_window *window){
+ GtkTreeIter iter;
+ gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->list),&iter,path);
+ int chosen;
+ char *layout, *variant;
+ gtk_tree_model_get(GTK_TREE_MODEL(window->list),&iter,0,&layout,1,&variant,3,&chosen,-1);
+ gtk_tree_store_set(GTK_TREE_STORE(window->list),&iter,3,!chosen,-1);
+
+
+ char *full_layout = NULL;
+ if (!yon_char_is_empty(variant)){
+ full_layout = yon_char_unite(layout,"_",variant,NULL);
+ } else {
+ full_layout = layout;
+ }
+ if (!chosen){
+ char *temp = yon_char_append_element(window->parameters,full_layout,",");
+ free(window->parameters);
+ window->parameters = temp;
+ } else {
+ char *temp = yon_char_remove_element(window->parameters,full_layout,",");
+ free(window->parameters);
+ window->parameters = temp;
+ }
+ free(full_layout);
+}
+
+void on_system_layouts_add(GtkWidget *, main_window *widgets){
+ yon_layouts_add(GTK_TREE_VIEW(widgets->LayoutTree),widgets->LayoutsList,widgets);
+}
+
+layouts_window *yon_layouts_window_new(){
+ GtkBuilder *builder = gtk_builder_new_from_resource(glade_layouts_path);
+ layouts_window *window = malloc(sizeof(layouts_window));
+ memset(window,0,sizeof(layouts_window));
+ window->Window = yon_gtk_builder_get_widget(builder,"Window");
+ window->AcceptButton = yon_gtk_builder_get_widget(builder,"AcceptButton");
+ window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton");
+ window->ChosenCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"ChosenCell"));
+ window->MainTree = yon_gtk_builder_get_widget(builder,"LayoutsTree");
+ window->parameters = yon_char_new(config(keyboard_layout_parameter));
+
+ g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);
+ g_signal_connect(G_OBJECT(window->ChosenCell),"toggled",G_CALLBACK(on_layouts_chosen),window);
+ return window;
+}
+
+void yon_layouts_add(GtkTreeView *, GtkListStore *, main_window *widgets){
+ layouts_window *window = yon_layouts_window_new();
+ yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window),TITLE_LABEL,icon_path,"layout_window");
+
+ window->list = main_config.layouts_store;
+
+ gtk_tree_view_set_model(GTK_TREE_VIEW(window->MainTree), GTK_TREE_MODEL(main_config.layouts_store));
+ gtk_tree_view_column_clicked(GTK_TREE_VIEW_COLUMN(gtk_tree_view_get_column(GTK_TREE_VIEW(window->MainTree),0)));
+ yon_layout_build(window);
+ g_object_set_data(G_OBJECT(window->Window),"widgets",widgets);
+ g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_layouts_accept),window);
+
+ char *languages = config(keyboard_layout_parameter);
+ int size;
+ config_str parsed = yon_char_parse(languages,&size,",");
+ GtkTreeIter iter,itar;
+ for_iter(window->list,&iter){
+ int found = 0;
+ char *id, *id_var;
+ gtk_tree_model_get(GTK_TREE_MODEL(window->list),&iter,0,&id,-1);
+ for (int i=0;ilist),&iter,3,1,-1);
+ found=1;
+ break;
+ }
+ }
+ if (!found) {
+ gtk_tree_store_set(GTK_TREE_STORE(window->list),&iter,3,0,-1);
+ }
+ if (gtk_tree_model_iter_children(GTK_TREE_MODEL(window->list),&itar,&iter)){
+ for (int valid2=1;valid2;valid2 = gtk_tree_model_iter_next(GTK_TREE_MODEL(window->list),&itar)){
+ gtk_tree_model_get(GTK_TREE_MODEL(window->list),&itar,0,&id,1,&id_var,-1);
+ for (int i=0;ilist),&itar,3,1,-1);
+ found=1;
+ break;
+ }
+ }
+ }
+ }
+
+ }
+}
+
+void yon_layouts_remove(GtkTreeView *tree, GtkListStore *cur_list, main_window *widgets){
+ GtkTreeModel *model = GTK_TREE_MODEL(cur_list);
+ GtkTreeIter iter;
+ if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(tree),&model,&iter)){
+ dialog_confirmation_data *data = yon_confirmation_dialog_data_new();
+ data->action_text = LAYOUT_REMOVE_LABEL;
+ data->title = LAYOUT_REMOVE_TITLE_LABEL;
+ if (yon_confirmation_dialog_call(widgets->Window,data)!=GTK_RESPONSE_ACCEPT) return;
+ char *layout, *variant;
+ gtk_tree_model_get(model,&iter,0,&layout,1,&variant,-1);
+ if (!yon_char_is_empty(variant)){
+ char *temp = yon_char_unite(layout,"_",variant,NULL);
+ free(layout);
+ layout = temp;
+ }
+ yon_config_remove_element(keyboard_layout_parameter,layout,",");
+ }
+ yon_interface_update(widgets);
+}
+
+void on_system_layouts_remove(GtkWidget *, main_window *widgets){
+ yon_layouts_remove(GTK_TREE_VIEW(widgets->LayoutTree),widgets->LayoutsList,widgets);
+}
+
+// standard functions
+
+config_str yon_layout_get_children(char *layout_id, int *size){
+ (*size)=0;
+ config_str final = NULL;
+ for (int i=0;iLayoutsList,&iter);
+ gtk_list_store_set(widgets->LayoutsList,&iter,0,parsed[0],1,parsed[1],2,_(parsed[2]),-1);
+ }
+ }
+
+ } else {
+ for (int i=0;iLayoutsList,&iter);
+ gtk_list_store_set(widgets->LayoutsList,&iter,0,parsed[0],2,_(parsed[1]),-1);
+ }
+ }
+ }
+}
+
+void yon_layout_build(layouts_window *window){
+ gtk_tree_store_clear(window->list);
+ GtkTreeIter parent;
+ GtkTreeIter iter;
+ int size;
+ config_str layouts = yon_config_load(layouts_command,&size);
+ for (int i=0;ilist,&parent,NULL);
+ gtk_tree_store_set(window->list,&parent,0,parsed[0],2,_(parsed[1]),-1);
+ int variants_size;
+ config_str variants = yon_layout_get_children(parsed[0],&variants_size);
+ yon_char_parsed_free(parsed,parsed_size);
+ for (int k=0;klist,&iter,&parent);
+ gtk_tree_store_set(window->list,&iter,0,parsed[0],1,parsed[1],2,_(parsed[2]),-1);
+ yon_char_parsed_free(parsed,parsed_size);
+ }
+ yon_char_parsed_free(variants,variants_size);
+
+ }
+ yon_char_parsed_free(layouts,size);
+
+}
+
+void on_layout_move_up(GtkWidget *, main_window *widgets){
+ GtkTreeModel *model;
+ GtkTreeIter iter,*previter;
+ if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->LayoutTree)),&model,&iter)){
+ previter = gtk_tree_iter_copy(&iter);
+ if (!gtk_tree_model_iter_previous(model,previter)) return;
+ char *a, *b;
+ gtk_tree_model_get(model,&iter,0,&a,-1);
+ gtk_tree_model_get(model,previter,0,&b,-1);
+ char *layouts = config(keyboard_layout_parameter);
+ char *temp = yon_char_swap_element(layouts,a,b,",");
+ yon_config_register(keyboard_layout_parameter,keyboard_layout_parameter_command,temp);
+ free(temp);
+ gtk_list_store_swap(widgets->LayoutsList,&iter,previter);
+ gtk_tree_iter_free(previter);
+ }
+}
+
+void on_layout_move_down(GtkWidget *, main_window *widgets){
+ GtkTreeModel *model;
+ GtkTreeIter iter,*nextiter;
+ if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->LayoutTree)),&model,&iter)){
+ nextiter = gtk_tree_iter_copy(&iter);
+ if (!gtk_tree_model_iter_next(model,nextiter)) return;
+ char *a, *b;
+ gtk_tree_model_get(model,&iter,0,&a,-1);
+ gtk_tree_model_get(model,nextiter,0,&b,-1);
+ char *layouts = config(keyboard_layout_parameter);
+ char *temp = yon_char_swap_element(layouts,a,b,",");
+ yon_config_register(keyboard_layout_parameter,keyboard_layout_parameter_command,temp);
+ free(temp);
+ gtk_list_store_swap(widgets->LayoutsList,&iter,nextiter);
+ gtk_tree_iter_free(nextiter);
+ }
+}
+
+// void on_layout_dnd_inserted(GtkTreeModel *, GtkTreePath* , GtkTreeIter* iter, main_window *widgets){
+// char *target;
+// gtk_tree_model_get(GTK_TREE_MODEL(widgets->LayoutsList),iter,0,&target,-1);
+// }
+
+// void on_layout_dnd_deleted(GtkTreeModel *, GtkTreePath* , GtkTreeIter* iter, main_window *widgets){
+
+// char *target;
+// gtk_tree_model_get(GTK_TREE_MODEL(widgets->LayoutsList),iter,0,&target,-1);
+// printf("%s\n",target);
+// }
\ No newline at end of file
diff --git a/source/ubl-settings-keyboard-options.c b/source/ubl-settings-keyboard-options.c
new file mode 100644
index 0000000..ac7b0ba
--- /dev/null
+++ b/source/ubl-settings-keyboard-options.c
@@ -0,0 +1,177 @@
+#include "ubl-settings-keyboard.h"
+
+void on_option_chosen(GtkCellRenderer *, gchar *path, layouts_window *window){
+ GtkTreeIter iter;
+ GtkTreeIter itar;
+ gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(window->OptionsFilter),&iter,path);
+ gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(window->OptionsFilter),&itar,&iter);
+ int chosen;
+ char *target;
+ gtk_tree_model_get(GTK_TREE_MODEL(window->OptionsList),&itar,0,&target,2,&chosen,-1);
+ gtk_list_store_set(GTK_LIST_STORE(window->OptionsList),&itar,2,!chosen,-1);
+
+ char *options_string = yon_char_new(gtk_entry_get_text(GTK_ENTRY(window->OptionsEntry)));
+ if (!chosen){
+ char *temp = yon_char_append_element(options_string,target,",");
+ gtk_entry_set_text(GTK_ENTRY(window->OptionsEntry),temp);
+ free(temp);
+ } else {
+ char *temp = yon_char_remove_element(options_string,target,",");
+ gtk_entry_set_text(GTK_ENTRY(window->OptionsEntry),temp);
+ free(temp);
+ }
+}
+
+gboolean yon_filter_refilter(GtkTreeModel *model, GtkTreeIter *iter, layouts_window *window){
+ char *target_id;
+ const char *id = gtk_combo_box_get_active_id(GTK_COMBO_BOX(window->OptionsFilterCombo));
+ if (yon_char_is_empty(id)) return 0;
+ gtk_tree_model_get(model,iter,0,&target_id,-1);
+ char *filter_section = yon_char_divide_search(target_id,":",-1);
+ int result = !strcmp(filter_section,id);
+ if (target_id)
+ free(target_id);
+ if (filter_section)
+ free(filter_section);
+ return result;
+}
+
+void yon_options_setup(layouts_window *window){
+ int size;
+ config_str option_commands = yon_char_parsed_new(&size,
+ lv2_options_command,
+ lv3_options_command,
+ ctrl_options_command,
+ grp_led_options_command,
+ mod_led_options_command,
+ keypad_options_command,
+ kpdl_options_command,
+ caps_options_command,
+ altwin_options_command,
+ Compose_options_command,
+ compat_options_command,
+ currencysign_options_command,
+ lv5_options_command,
+ nbsp_options_command,
+ japan_options_command,
+ korean_options_command,
+ esperanto_options_command,
+ solaris_options_command,
+ terminate_options_command,
+ NULL);
+
+ char *command_full = yon_char_parsed_to_string(option_commands,size,"; ");
+
+ int options_size;
+ config_str options = yon_config_load(command_full,&options_size);
+ GtkTreeIter iter;
+
+ int filter_size;
+ config_str filter = NULL;
+
+ char *config_options = config(options_parameter);
+
+ for (int i=0;iOptionsList,&iter);
+ gtk_list_store_set(window->OptionsList,&iter,0,parsed[0],1,_(parsed[1]),2,yon_char_check_element(config_options,parsed[0],","),-1);
+ char *str = yon_char_new(parsed[0]);
+ char *type = yon_char_divide_search(str,":",-1);
+ if (yon_char_parsed_check_exist(filter,filter_size,type)==-1){
+ yon_char_parsed_add_or_create_if_exists(filter,&filter_size,type);
+ gtk_combo_box_text_append(GTK_COMBO_BOX_TEXT(window->OptionsFilterCombo),type,type);
+ }
+ if (!yon_char_is_empty(str))free(str);
+ if (!yon_char_is_empty(type))free(type);
+ yon_char_parsed_free(parsed,parsed_size);
+ }
+ gtk_combo_box_set_active(GTK_COMBO_BOX(window->OptionsFilterCombo),0);
+ yon_char_parsed_free(filter,filter_size);
+ yon_char_parsed_free(option_commands,size);
+}
+
+void on_options_filter_changed(GtkWidget *, layouts_window *window){
+ gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(window->OptionsFilter));
+}
+
+void on_options_accept(GtkWidget *self, layouts_window *window){
+ main_window *widgets = g_object_get_data(G_OBJECT(window->Window),"widgets");
+ char *options = (char*)gtk_entry_get_text(GTK_ENTRY(window->OptionsEntry));
+ if (!yon_char_is_empty(options)){
+ yon_config_register(options_parameter,options_parameter_command,options);
+ } else {
+ yon_config_remove_by_key(options_parameter);
+ }
+ on_subwindow_close(self);
+ yon_interface_update(widgets);
+}
+
+void on_options_save(GtkWidget *,main_window *widgets){
+ char *main_id = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->LayoutChangingCombo));
+ int parameter_parsed_size;
+ config_str parameter_parsed = NULL;
+ yon_char_parsed_add_or_create_if_exists(parameter_parsed,¶meter_parsed_size,!yon_char_is_empty(main_id)?main_id:"");
+ GtkTreeIter iter;
+ for_iter(GTK_TREE_MODEL(widgets->OptionsList),&iter){
+ char *cur_id;
+ gtk_tree_model_get(GTK_TREE_MODEL(widgets->OptionsList),&iter,0,&cur_id,-1);
+ yon_char_parsed_add_or_create_if_exists(parameter_parsed,¶meter_parsed_size,cur_id);
+ }
+ char *final_parameter = yon_char_parsed_to_string_full(parameter_parsed,parameter_parsed_size,",");
+ yon_char_parsed_free(parameter_parsed,parameter_parsed_size);
+ if (!yon_char_is_empty(final_parameter)){
+ yon_config_register(options_parameter,options_parameter_command,final_parameter);
+ free(final_parameter);
+ } else {
+ yon_config_remove_by_key(options_parameter);
+ }
+}
+
+layouts_window *yon_options_window_new(){
+
+ GtkBuilder *builder = gtk_builder_new_from_resource(glade_options_path);
+ layouts_window *window = malloc(sizeof(layouts_window));
+ window->Window = yon_gtk_builder_get_widget(builder,"Window");
+ window->AcceptButton = yon_gtk_builder_get_widget(builder,"AcceptButton");
+ window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton");
+ window->MainTree = yon_gtk_builder_get_widget(builder,"OptionsTree");
+ window->OptionsFilterCombo = yon_gtk_builder_get_widget(builder,"OptionsFilterCombo");
+ window->OptionsEntry = yon_gtk_builder_get_widget(builder,"OptionsEntry");
+ window->OptionsList = GTK_LIST_STORE(gtk_builder_get_object(builder,"OptionsList"));
+ window->OptionsFilter = GTK_TREE_MODEL(gtk_builder_get_object(builder,"OptionsFilter"));
+ window->ChosenCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"ChosenCell"));
+
+ g_signal_connect(G_OBJECT(window->OptionsFilterCombo),"changed",G_CALLBACK(on_options_filter_changed),window);
+ g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);
+ g_signal_connect(G_OBJECT(window->ChosenCell),"toggled",G_CALLBACK(on_option_chosen),window);
+ gtk_tree_view_set_model(GTK_TREE_VIEW(window->MainTree),GTK_TREE_MODEL(window->OptionsFilter));
+ gtk_tree_model_filter_set_visible_func(GTK_TREE_MODEL_FILTER(window->OptionsFilter),(GtkTreeModelFilterVisibleFunc)yon_filter_refilter,window,NULL);
+ yon_options_setup(window);
+ char *parameter_options = config(options_parameter);
+ gtk_entry_set_text(GTK_ENTRY(window->OptionsEntry),parameter_options);
+ return window;
+}
+
+void on_options_open(GtkWidget *, main_window *widgets){
+ layouts_window *window = yon_options_window_new();
+ g_object_set_data(G_OBJECT(window->Window),"widgets",widgets);
+ g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_options_accept),window);
+}
+
+
+void on_option_remove(GtkWidget*, main_window *widgets){
+ GtkTreeIter iter;
+ GtkTreeModel *model;
+ if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->OptionsTree)),&model, &iter)){
+ dialog_confirmation_data *data = yon_confirmation_dialog_data_new();
+ data->action_text = OPTION_REMOVE_LABEL;
+ data->title = OPTION_REMOVE_TITLE_LABEL;
+ if (yon_confirmation_dialog_call(widgets->Window,data)!=GTK_RESPONSE_ACCEPT) return;
+ char *target;
+ gtk_tree_model_get(model,&iter,0,&target,-1);
+ yon_config_remove_element(options_parameter,target,",");
+ }
+ yon_interface_update(widgets);
+}
\ No newline at end of file
diff --git a/source/ubl-settings-keyboard-save.c b/source/ubl-settings-keyboard-save.c
new file mode 100644
index 0000000..9a0d199
--- /dev/null
+++ b/source/ubl-settings-keyboard-save.c
@@ -0,0 +1,126 @@
+#include "ubl-settings-keyboard.h"
+
+void on_save_done(main_window *, config_str output, int size){
+ char *final_output = yon_char_parsed_to_string(output,size,"");
+ if (final_output){
+ printf("%s\n",final_output);
+ free(final_output);
+ }
+ yon_char_parsed_free(output,size);
+ switch (main_config.save_config){
+ case YON_CONFIG_GLOBAL:
+ yon_ubl_status_box_render(yon_char_get_localised_from_lib(GLOBAL_SAVE_SUCCESS_LABEL),BACKGROUND_IMAGE_SUCCESS_TYPE);
+ break;
+ case YON_CONFIG_LOCAL:
+ yon_ubl_status_box_render(yon_char_get_localised_from_lib(LOCAL_SAVE_SUCCESS_LABEL),BACKGROUND_IMAGE_SUCCESS_TYPE);
+ break;
+ case YON_CONFIG_BOTH:
+ yon_ubl_status_box_render(yon_char_get_localised_from_lib(GLOBAL_LOCAL_SAVE_SUCCESS_LABEL),BACKGROUND_IMAGE_SUCCESS_TYPE);
+ break;
+ }
+
+}
+
+void yon_interface_save(main_window *widgets){
+ if (gtk_switch_get_active(GTK_SWITCH(widgets->DefaultLayoutsSwitch))){
+ yon_config_remove_by_key(keyboard_layout_parameter);
+ } else if (yon_config_check_ignore(keyboard_layout_parameter)){
+ GtkTreeModel *model = GTK_TREE_MODEL(widgets->LayoutsList);
+ GtkTreeIter iter;
+ int parameters_size;
+ config_str parameters = NULL;
+ for_iter(model,&iter){
+ char *target;
+ gtk_tree_model_get(model,&iter,0,&target,-1);
+ yon_char_parsed_add_or_create_if_exists(parameters,¶meters_size,target);
+ }
+ char *final = yon_char_parsed_to_string(parameters,parameters_size,",");
+ yon_config_register(keyboard_layout_parameter,keyboard_layout_parameter_command,final);
+ }
+}
+
+void on_config_global_local_save(GtkWidget *, main_window *widgets){
+ yon_interface_save(widgets);
+ main_config.save_config=YON_CONFIG_BOTH;
+ yon_save_proceed(NULL,YON_CONFIG_BOTH,config_get_global_command,NULL);
+}
+
+void on_config_local_save(GtkWidget *, main_window *widgets){
+ yon_interface_save(widgets);
+ main_config.save_config=YON_CONFIG_LOCAL;
+ yon_save_proceed("system",YON_CONFIG_LOCAL,config_get_local_command,NULL);
+
+}
+
+void on_config_global_save(GtkWidget *, main_window *widgets){
+ yon_interface_save(widgets);
+ main_config.save_config=YON_CONFIG_GLOBAL;
+ yon_save_proceed("global",YON_CONFIG_GLOBAL,config_get_global_command,NULL);
+
+}
+
+void on_config_custom_save(GtkWidget *, main_window *widgets){
+ yon_interface_save(widgets);
+ main_config.save_config=YON_CONFIG_LOCAL;
+ template_saving_window *window = yon_save_proceed(NULL,YON_CONFIG_CUSTOM,yon_config_get_custom_command("system"),NULL);
+ if (window){};
+}
+
+void on_config_local_load(GtkWidget *,main_window *widgets){
+ yon_load_proceed(YON_CONFIG_LOCAL);
+ yon_ubl_status_box_render(yon_char_get_localised_from_lib(LOCAL_LOAD_SUCCESS_LABEL),BACKGROUND_IMAGE_SUCCESS_TYPE);
+ yon_interface_update(widgets);
+ main_config.load_mode=1;
+}
+
+void on_config_global_load(GtkWidget *,main_window *widgets){
+ yon_load_proceed(YON_CONFIG_GLOBAL);
+ yon_ubl_status_box_render(yon_char_get_localised_from_lib(GLOBAL_LOAD_SUCCESS_LABEL),BACKGROUND_IMAGE_SUCCESS_TYPE);
+ yon_interface_update(widgets);
+ main_config.load_mode=0;
+
+}
+
+void on_config_custom_load(GtkWidget *,main_window *widgets){
+ yon_load_proceed(YON_CONFIG_CUSTOM);
+ textdomain(template_ui_LocaleName);
+ yon_ubl_status_box_render(yon_char_get_localised_from_lib(LOCAL_LOAD_SUCCESS_LABEL),BACKGROUND_IMAGE_SUCCESS_TYPE);
+ textdomain(LocaleName);
+ main_config.load_mode=3;
+ yon_interface_update(widgets);
+}
+
+void yon_load_proceed(YON_CONFIG_TYPE type){
+ yon_config_clean();
+ if (!yon_char_is_empty(config_get_default_command))
+ yon_config_load_config(YON_CONFIG_DEFAULT,config_get_default_command,NULL);
+ if (type==YON_CONFIG_GLOBAL){
+ yon_config_load_config(type,yon_debug_output("%s\n",config_get_global_command),NULL);
+ } else if (type==YON_CONFIG_LOCAL){
+ yon_config_load_config(type,config_get_local_command,NULL);
+ } else if (type==YON_CONFIG_CUSTOM){
+ char *path="";
+ textdomain(template_ui_LocaleName);
+ GtkWidget *dialog = gtk_file_chooser_dialog_new(template_app_information.app_title,NULL,GTK_FILE_CHOOSER_ACTION_SAVE,CANCEL_LABEL,GTK_RESPONSE_CANCEL,OPEN_LABEL,GTK_RESPONSE_ACCEPT,NULL);
+ textdomain(LocaleName);
+ gtk_window_set_icon_name(GTK_WINDOW(dialog),"com.ublinux.ubl-settings-services");
+ gtk_window_set_title(GTK_WINDOW(dialog),TITLE_LABEL);
+ GtkFileFilter *filter = gtk_file_filter_new();
+ gtk_file_filter_add_pattern(filter,"*.ini");
+ gtk_file_filter_set_name(filter, "*.ini");
+ gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog),filter);
+ gtk_widget_show(dialog);
+ int response = gtk_dialog_run(GTK_DIALOG(dialog));
+ if (response == GTK_RESPONSE_ACCEPT){
+ char *file = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
+ if (!yon_char_is_empty(file)){
+ path=file;
+ }
+ gtk_widget_destroy(dialog);
+ } else {
+ gtk_widget_destroy(dialog);
+ }
+ char *command = yon_config_get_custom_command(path);
+ yon_config_load_config(type,command,NULL);
+ }
+}
\ No newline at end of file
diff --git a/source/ubl-settings-keyboard.c b/source/ubl-settings-keyboard.c
index 873b37b..c832b84 100644
--- a/source/ubl-settings-keyboard.c
+++ b/source/ubl-settings-keyboard.c
@@ -2,187 +2,127 @@
config main_config;
-void on_save_done(main_window *, config_str output, int size){
- char *final_output = yon_char_parsed_to_string(output,size,"");
- if (final_output){
- printf("%s\n",final_output);
- free(final_output);
- }
- yon_char_parsed_free(output,size);
- switch (main_config.save_config){
- case YON_CONFIG_GLOBAL:
- yon_ubl_status_box_render(yon_char_get_localised_from_lib(GLOBAL_SAVE_SUCCESS_LABEL),BACKGROUND_IMAGE_SUCCESS_TYPE);
- break;
- case YON_CONFIG_LOCAL:
- yon_ubl_status_box_render(yon_char_get_localised_from_lib(LOCAL_SAVE_SUCCESS_LABEL),BACKGROUND_IMAGE_SUCCESS_TYPE);
- break;
- case YON_CONFIG_BOTH:
- yon_ubl_status_box_render(yon_char_get_localised_from_lib(GLOBAL_LOCAL_SAVE_SUCCESS_LABEL),BACKGROUND_IMAGE_SUCCESS_TYPE);
- break;
- }
-
-}
-
-void on_config_global_local_save(GtkWidget *, main_window *){
- main_config.save_config=YON_CONFIG_BOTH;
- yon_save_proceed(NULL,YON_CONFIG_BOTH,config_get_global_command,NULL);
-}
-
-void on_config_local_save(GtkWidget *, main_window *){
- main_config.save_config=YON_CONFIG_LOCAL;
- yon_save_proceed("system",YON_CONFIG_LOCAL,config_get_local_command,NULL);
-
-}
-
-void on_config_global_save(GtkWidget *, main_window *){
- main_config.save_config=YON_CONFIG_GLOBAL;
- yon_save_proceed("global",YON_CONFIG_GLOBAL,config_get_global_command,NULL);
-
-}
-
-void on_config_custom_save(GtkWidget *, main_window *){
- main_config.save_config=YON_CONFIG_LOCAL;
- template_saving_window *window = yon_save_proceed(NULL,YON_CONFIG_CUSTOM,yon_config_get_custom_command("system"),NULL);
- if (window){};
-}
-
-void on_config_local_load(GtkWidget *,main_window *widgets){
- yon_load_proceed(YON_CONFIG_LOCAL);
- yon_ubl_status_box_render(yon_char_get_localised_from_lib(LOCAL_LOAD_SUCCESS_LABEL),BACKGROUND_IMAGE_SUCCESS_TYPE);
- yon_interface_update(widgets);
- main_config.load_mode=1;
-}
-
-void on_config_global_load(GtkWidget *,main_window *widgets){
- yon_load_proceed(YON_CONFIG_GLOBAL);
- yon_ubl_status_box_render(yon_char_get_localised_from_lib(GLOBAL_LOAD_SUCCESS_LABEL),BACKGROUND_IMAGE_SUCCESS_TYPE);
- yon_interface_update(widgets);
- main_config.load_mode=0;
-
-}
-
-void on_config_custom_load(GtkWidget *,main_window *widgets){
- yon_load_proceed(YON_CONFIG_CUSTOM);
- textdomain(template_ui_LocaleName);
- yon_ubl_status_box_render(yon_char_get_localised_from_lib(LOCAL_LOAD_SUCCESS_LABEL),BACKGROUND_IMAGE_SUCCESS_TYPE);
- textdomain(LocaleName);
- main_config.load_mode=3;
- yon_interface_update(widgets);
-}
-
-void yon_load_proceed(YON_CONFIG_TYPE type){
- yon_config_clean();
- if (!yon_char_is_empty(config_get_default_command))
- yon_config_load_config(YON_CONFIG_DEFAULT,config_get_default_command,NULL);
- if (type==YON_CONFIG_GLOBAL){
- yon_config_load_config(type,yon_debug_output("%s\n",config_get_global_command),NULL);
- } else if (type==YON_CONFIG_LOCAL){
- yon_config_load_config(type,config_get_local_command,NULL);
- } else if (type==YON_CONFIG_CUSTOM){
- char *path="";
- textdomain(template_ui_LocaleName);
- GtkWidget *dialog = gtk_file_chooser_dialog_new(template_app_information.app_title,NULL,GTK_FILE_CHOOSER_ACTION_SAVE,CANCEL_LABEL,GTK_RESPONSE_CANCEL,OPEN_LABEL,GTK_RESPONSE_ACCEPT,NULL);
- textdomain(LocaleName);
- gtk_window_set_icon_name(GTK_WINDOW(dialog),"com.ublinux.ubl-settings-services");
- gtk_window_set_title(GTK_WINDOW(dialog),TITLE_LABEL);
- GtkFileFilter *filter = gtk_file_filter_new();
- gtk_file_filter_add_pattern(filter,"*.ini");
- gtk_file_filter_set_name(filter, "*.ini");
- gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog),filter);
- gtk_widget_show(dialog);
- int response = gtk_dialog_run(GTK_DIALOG(dialog));
- if (response == GTK_RESPONSE_ACCEPT){
- char *file = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
- if (!yon_char_is_empty(file)){
- path=file;
- }
- gtk_widget_destroy(dialog);
- } else {
- gtk_widget_destroy(dialog);
- }
- char *command = yon_config_get_custom_command(path);
- yon_config_load_config(type,command,NULL);
- }
-}
gboolean yon_interface_update(main_window *widgets){
- g_signal_handlers_block_by_func(G_OBJECT(widgets->ModelCombo),G_CALLBACK(on_model_changed),widgets);
- g_signal_handlers_block_by_func(G_OBJECT(widgets->MoveDownButton),G_CALLBACK(on_move_down),widgets);
- g_signal_handlers_block_by_func(G_OBJECT(widgets->MoveUpButton),G_CALLBACK(on_move_up),widgets);
- g_signal_handlers_block_by_func(G_OBJECT(widgets->OptionsButton),G_CALLBACK(on_options_open),widgets);
+ g_signal_handlers_block_by_func(G_OBJECT(widgets->KeyboardModelCombo),G_CALLBACK(on_model_changed),widgets);
+ g_signal_handlers_block_by_func(G_OBJECT(widgets->OptionsEditButton),G_CALLBACK(on_options_open),widgets);
g_signal_handlers_block_by_func(G_OBJECT(widgets->NumLockCombo),G_CALLBACK(on_num_lock_changed),widgets);
- gtk_list_store_clear(widgets->layoutsList);
+ g_signal_handlers_block_by_func(G_OBJECT(widgets->LayoutChangingCombo),G_CALLBACK(on_options_save),widgets);
+ g_signal_handlers_block_by_func(G_OBJECT(widgets->ScrollLockSwitch),G_CALLBACK(on_scroll_lock_switch),widgets);
+ g_signal_handlers_block_by_func(G_OBJECT(widgets->ComposeSwitch),G_CALLBACK(on_compose_switch),widgets);
+ g_signal_handlers_block_by_func(G_OBJECT(widgets->DefaultLayoutsSwitch),G_CALLBACK(on_layout_default_toggled),widgets);
+ // g_signal_handlers_block_by_func(G_OBJECT(widgets->TTYLayoutCombo),G_CALLBACK(on_tty_changed),widgets);
- gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->ModelCombo),0);
+ gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->KeyboardModelCombo),0);
gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->NumLockCombo),0);
- GtkTreeIter iter;
- gtk_entry_set_text(GTK_ENTRY(widgets->OptionsEntry),DEFAULT_LABEL);
{
- char *name = yon_config_get_by_key(model_parameter);
- char *id;
- if (name) {
- int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(widgets->modelsList),&iter);
- for (;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(widgets->modelsList),&iter)){
- gtk_tree_model_get(GTK_TREE_MODEL(widgets->modelsList),&iter,1,&id,-1);
- if (!strcmp(name,id)){
- gtk_combo_box_set_active_iter(GTK_COMBO_BOX(widgets->ModelCombo),&iter);
- break;
- }
- }
- } else gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->ModelCombo),0);
+ char *kbmodel = yon_config_get_by_key(model_parameter);
+ if (kbmodel) {
+ gtk_combo_box_set_active_id(GTK_COMBO_BOX(widgets->KeyboardModelCombo),kbmodel);
+ }
}
{
- char *name = yon_config_get_by_key(options_parameter);
- if (name) {
- char *id, *rname;
- gtk_entry_set_text(GTK_ENTRY(widgets->OptionsEntry),name);
- int valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(main_config.options_list),&iter);
- for (;valid;valid=gtk_tree_model_iter_next(GTK_TREE_MODEL(main_config.options_list),&iter)){
- gtk_tree_model_get(GTK_TREE_MODEL(main_config.options_list),&iter,0,&id,1,&rname,-1);
- if (!strcmp(id,name)){
- gtk_list_store_set(main_config.options_list,&iter,2,1,-1);
- gtk_entry_set_text(GTK_ENTRY(widgets->OptionsEntry),rname);
- break;
- }
+ gtk_list_store_clear(widgets->LayoutsList);
+ char *layouts = config(keyboard_layout_parameter);
+
+ int layouts_parsed_size;
+ config_str layouts_parsed = yon_char_parse(layouts,&layouts_parsed_size,",");
+ for(int i=0;iDefaultLayoutsSwitch),1);
+ } else {
+ gtk_switch_set_active(GTK_SWITCH(widgets->DefaultLayoutsSwitch),0);
+ }
+
+ if (yon_char_is_empty(layouts)){
+ char *element = yon_char_parsed_check_exist_begins_with(main_config.layouts_list,main_config.layouts_size,"us|");
+ if (element){
+ int parsed_size;
+ config_str parsed = yon_char_parse(element,&parsed_size,"|");
+ GtkTreeIter iter;
+ gtk_list_store_append(widgets->LayoutsList,&iter);
+ gtk_list_store_set(widgets->LayoutsList,&iter,0,parsed[0],2,_(parsed[1]),-1);
+ yon_char_parsed_free(parsed,parsed_size);
}
}
}
{
- if (main_config.layouts_list){
- for_iter(main_config.layouts_list,&iter){
- gtk_list_store_set(main_config.layouts_list,&iter,2,0,-1);
+ gtk_list_store_clear(widgets->OptionsList);
+ char *options = config(options_parameter);
+ if (!yon_char_is_empty(options)){
+ GtkTreeIter iter;
+ int size;
+ config_str parsed = yon_char_parse(options,&size,",");
+ if (!yon_char_is_empty(parsed[0])){
+ gtk_combo_box_set_active_id(GTK_COMBO_BOX(widgets->LayoutChangingCombo),parsed[0]);
+ } else {
+ gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->LayoutChangingCombo),0);
+ }
+ for (int i=1;iOptionsList,&iter);
+ gtk_list_store_set(widgets->OptionsList,&iter,0,option_parsed[0],1,_(option_parsed[1]),-1);
+ yon_char_parsed_free(option_parsed,option_parsed_size);
+ }
+ if (yon_char_parsed_check_exist(parsed,size,"compose:rwin")>-1){
+ gtk_switch_set_active(GTK_SWITCH(widgets->ComposeSwitch),1);
+ } else {
+ gtk_switch_set_active(GTK_SWITCH(widgets->ComposeSwitch),0);
+ }
+ if (yon_char_parsed_check_exist(parsed,size,"grp_led:scroll")>-1){
+ gtk_switch_set_active(GTK_SWITCH(widgets->ScrollLockSwitch),1);
+ } else {
+ gtk_switch_set_active(GTK_SWITCH(widgets->ScrollLockSwitch),0);
}
+
+ yon_char_parsed_free(parsed,size);
}
+ }
+ {
char *name = yon_config_get_by_key(num_lock_boot_parameter);
if (name) {
if (!strcmp(name,"yes")) gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->NumLockCombo),1);
else if (!strcmp(name,"no")) gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->NumLockCombo),2);
}
- else gtk_combo_box_set_active(GTK_COMBO_BOX(widgets->NumLockCombo),0);
- if (main_config.layouts_list){
- int size=0;
- name = yon_config_get_by_key(keyboard_layout_parameter);
- config_str layouts = yon_char_parse(name,&size,",");
- GtkTreeIter iter, itar;
- char *rid,*rname;
- gtk_list_store_clear(widgets->layoutsList);
- for (int i=0;ilayoutsList,&itar);
- gtk_list_store_set(widgets->layoutsList,&itar,0,rname,1,rid,2,1,-1);
- }
- }
- }
+ }
+
+ {
+ char *tty_layout = config(console_keymap_parameter);
+ if (!yon_char_is_empty(tty_layout)){
+ gtk_entry_set_text(GTK_ENTRY(widgets->TTYLayoutEntry),tty_layout);
+ } else {
+ gtk_entry_set_text(GTK_ENTRY(widgets->TTYLayoutEntry),yon_char_get_localised_from_lib(DEFAULT_LABEL));
+ }
+
+ char *tty_keymap = config(console_keymap_toggle_parameter);
+ if (!yon_char_is_empty(tty_keymap)){
+ gtk_entry_set_text(GTK_ENTRY(widgets->TTYSecondLayoutEntry),tty_keymap);
+ } else {
+ gtk_entry_set_text(GTK_ENTRY(widgets->TTYSecondLayoutEntry),yon_char_get_localised_from_lib(DEFAULT_LABEL));
+ }
+
+ char *tty_font = config(console_font_parameter);
+ if (!yon_char_is_empty(tty_font)){
+ gtk_entry_set_text(GTK_ENTRY(widgets->TTYFontEntry),tty_font);
+ } else {
+ gtk_entry_set_text(GTK_ENTRY(widgets->TTYFontEntry),yon_char_get_localised_from_lib(DEFAULT_LABEL));
}
}
- g_signal_handlers_unblock_by_func(G_OBJECT(widgets->ModelCombo),G_CALLBACK(on_model_changed),widgets);
- g_signal_handlers_unblock_by_func(G_OBJECT(widgets->MoveDownButton),G_CALLBACK(on_move_down),widgets);
- g_signal_handlers_unblock_by_func(G_OBJECT(widgets->MoveUpButton),G_CALLBACK(on_move_up),widgets);
- g_signal_handlers_unblock_by_func(G_OBJECT(widgets->OptionsButton),G_CALLBACK(on_options_open),widgets);
+ g_signal_handlers_unblock_by_func(G_OBJECT(widgets->KeyboardModelCombo),G_CALLBACK(on_model_changed),widgets);
+ g_signal_handlers_unblock_by_func(G_OBJECT(widgets->OptionsEditButton),G_CALLBACK(on_options_open),widgets);
g_signal_handlers_unblock_by_func(G_OBJECT(widgets->NumLockCombo),G_CALLBACK(on_num_lock_changed),widgets);
+ g_signal_handlers_unblock_by_func(G_OBJECT(widgets->LayoutChangingCombo),G_CALLBACK(on_options_save),widgets);
+ g_signal_handlers_unblock_by_func(G_OBJECT(widgets->ScrollLockSwitch),G_CALLBACK(on_scroll_lock_switch),widgets);
+ g_signal_handlers_unblock_by_func(G_OBJECT(widgets->ComposeSwitch),G_CALLBACK(on_compose_switch),widgets);
+ g_signal_handlers_unblock_by_func(G_OBJECT(widgets->DefaultLayoutsSwitch),G_CALLBACK(on_layout_default_toggled),widgets);
+ // g_signal_handlers_unblock_by_func(G_OBJECT(widgets->TTYLayoutCombo),G_CALLBACK(on_tty_changed),widgets);
return G_SOURCE_REMOVE;
}
@@ -204,202 +144,182 @@ void on_model_changed(GtkComboBoxText *self, main_window *widgets){
yon_config_remove_by_key(model_parameter);
break;
default:
- char *id;
- GtkTreeIter iter;
- gtk_combo_box_get_active_iter(GTK_COMBO_BOX(widgets->ModelCombo),&iter);
- gtk_tree_model_get(GTK_TREE_MODEL(widgets->modelsList),&iter,1,&id,-1);
- yon_config_register(model_parameter,model_parameter_command,id);
+ char *id = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->KeyboardModelCombo));
+ yon_config_register(model_parameter,model_parameter_command,id);
break;
}
}
-
-void on_options_accept(GtkWidget *self, dictionary *dict){
- main_window *widgets = yon_dictionary_get_data(dict->first,main_window*);
- layouts_window *window = yon_dictionary_get_data(dict->first->next,layouts_window*);
- GtkTreeModel *model = GTK_TREE_MODEL(window->list);
+void yon_config_init(){
+ int size;
+ main_config.models_list = gtk_list_store_new(3,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_BOOLEAN);
GtkTreeIter iter;
- char *name, *id;
- if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(window->MainTree)),&model,&iter)){
- gtk_tree_model_get(model,&iter,0,&id,1,&name,-1);
- gtk_entry_set_text(GTK_ENTRY(widgets->OptionsEntry),name);
- yon_config_register(options_parameter,options_parameter_command,id);
-
- }
- on_subwindow_close(self);
-}
-void yon_layouts_save(main_window *widgets){
- GtkTreeIter iter;
- GtkTreeIter child_iter;
- int size;
- config_str parsed = NULL;
- for_iter(widgets->layoutsFilter,&iter){
- char *name, *id;
- gtk_tree_model_filter_convert_iter_to_child_iter(GTK_TREE_MODEL_FILTER(widgets->layoutsFilter),&child_iter,&iter);
- gtk_tree_model_get(GTK_TREE_MODEL(widgets->layoutsList),&child_iter,0,&name,1,&id,-1);
- yon_char_parsed_add_or_create_if_exists(parsed,&size,id);
+ main_config.layouts_store = gtk_tree_store_new(4,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_BOOLEAN);
+ main_config.variants_list = yon_config_load(layouts_variant_command,&main_config.variants_size);
+ main_config.layouts_list = yon_config_load(layouts_command,&main_config.layouts_size);
+ for (int i=0;i0){
- yon_config_register(keyboard_layout_parameter,keyboard_layout_parameter_command,yon_char_parsed_to_string(parsed,size,","));
- yon_char_parsed_free(parsed,size);
- } else {
- yon_config_remove_by_key(keyboard_layout_parameter);
+ for (int i=0;iWindow = yon_gtk_builder_get_widget(builder,"Window");
- window->AcceptButton = yon_gtk_builder_get_widget(builder,"AcceptButton");
- window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton");
- window->MainTree = yon_gtk_builder_get_widget(builder,"LayoutsTree");
- window->list = main_config.options_list;
- gtk_tree_view_set_model(GTK_TREE_VIEW(window->MainTree),GTK_TREE_MODEL(window->list));
- dictionary *dict = NULL;
- gtk_tree_view_remove_column(GTK_TREE_VIEW(window->MainTree),gtk_tree_view_get_column(GTK_TREE_VIEW(window->MainTree),0));
- yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets);
- yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window);
- g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);
- g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_options_accept),dict);
-}
-
-GList *yon_get_all_selected(GtkTreeView *tree, int column){
- GtkTreeIter iter;
- GList *list = NULL;
- GtkTreeModel *model = gtk_tree_view_get_model(tree);
- for_iter(model,&iter){
- int status;
- gtk_tree_model_get(model,&iter,column,&status,-1);
- if (status){
- GtkTreePath *path = gtk_tree_model_get_path(model,&iter);
- list = g_list_append(list,path);
+ {
+ int size;
+ config_str option_commands = yon_char_parsed_new(&size,
+ lv2_options_command,
+ lv3_options_command,
+ ctrl_options_command,
+ grp_led_options_command,
+ mod_led_options_command,
+ keypad_options_command,
+ kpdl_options_command,
+ caps_options_command,
+ altwin_options_command,
+ Compose_options_command,
+ compat_options_command,
+ currencysign_options_command,
+ lv5_options_command,
+ nbsp_options_command,
+ japan_options_command,
+ korean_options_command,
+ esperanto_options_command,
+ solaris_options_command,
+ terminate_options_command,
+ NULL);
+
+ char *command_full = yon_char_parsed_to_string(option_commands,size,"; ");
+ main_config.options = g_hash_table_new(g_str_hash,g_str_equal);
+ int options_size;
+ config_str options = yon_config_load(command_full,&options_size);
+ for(int i=0;ifirst,main_window*);
- layouts_window *window = yon_dictionary_get_data(dict->first->next,layouts_window*);
- gtk_list_store_clear(widgets->layoutsList);
- GtkTreeModel *model = GTK_TREE_MODEL(window->list);
- GList *list = yon_get_all_selected(GTK_TREE_VIEW(window->MainTree),2);
- char *name;
- char *id;
- GtkTreeIter iter, lwiter;
- GtkTreePath *pth;
- for (guint i=0;ilayoutsList,&iter);
- gtk_tree_model_get(model,&lwiter,0,&name,1,&id,-1);
- gtk_list_store_set(widgets->layoutsList,&iter,1,name,0,id,2,1,-1);
+ main_config.options_list = gtk_list_store_new(3,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_BOOLEAN);
+ config_str rtn = yon_config_load(get_options_command,&size);
+ for (int i=0; ilist),&iter,path);
- int chosen;
- gtk_tree_model_get(GTK_TREE_MODEL(window->list),&iter,2,&chosen,-1);
- gtk_list_store_set(window->list,&iter,2,!chosen,-1);
+ yon_char_parsed_free(rtn,size);
}
-void on_layouts_add(GtkWidget *, main_window *widgets){
- GtkBuilder *builder = gtk_builder_new_from_resource(glade_layouts_path);
- layouts_window *window = malloc(sizeof(layouts_window));
- window->Window = yon_gtk_builder_get_widget(builder,"Window");
- window->AcceptButton = yon_gtk_builder_get_widget(builder,"AcceptButton");
- window->CancelButton = yon_gtk_builder_get_widget(builder,"CancelButton");
- window->ChosenCell = GTK_CELL_RENDERER(gtk_builder_get_object(builder,"ChosenCell"));
- window->MainTree = yon_gtk_builder_get_widget(builder,"LayoutsTree");
- window->list = main_config.layouts_list;
- gtk_tree_view_set_model(GTK_TREE_VIEW(window->MainTree), GTK_TREE_MODEL(window->list));
- gtk_tree_selection_set_mode(gtk_tree_view_get_selection(GTK_TREE_VIEW(window->MainTree)),GTK_SELECTION_MULTIPLE);
-
- yon_gtk_window_setup(GTK_WINDOW(window->Window),GTK_WINDOW(widgets->Window),TITLE_LABEL,icon_path,"layout_window");
-
- dictionary *dict = NULL;
- yon_dictionary_add_or_create_if_exists_with_data(dict,"widgets",widgets);
- yon_dictionary_add_or_create_if_exists_with_data(dict,"window",window);
-
- g_signal_connect(G_OBJECT(window->CancelButton),"clicked",G_CALLBACK(on_subwindow_close),NULL);
- g_signal_connect(G_OBJECT(window->AcceptButton),"clicked",G_CALLBACK(on_layouts_accept),dict);
- g_signal_connect(G_OBJECT(window->ChosenCell),"toggled",G_CALLBACK(on_layouts_chosen),window);
- char *languages = config(keyboard_layout_parameter);
- int size;
- config_str parsed = yon_char_parse(languages,&size,",");
- GtkTreeIter iter;
- for_iter(window->list,&iter){
- int found = 0;
- char *id;
- gtk_tree_model_get(GTK_TREE_MODEL(window->list),&iter,0,&id,-1);
- for (int i=0;ilist,&iter,2,1,-1);
- found=1;
- break;
- }
- }
- if (!found) {
- gtk_list_store_set(window->list,&iter,2,0,-1);
- }
+void on_compose_switch(GtkWidget *,int status,main_window *widgets){
+ switch(status){
+ case 0:{
+ yon_config_remove_element(options_parameter,"compose:rwin",",");
+ } break;
+ case 1:{
+ yon_config_append_element(options_parameter,"compose:rwin",",");
+ } break;
}
+ yon_interface_update(widgets);
}
-void on_layouts_remove(GtkWidget *, main_window *widgets){
- GtkTreeModel *model = GTK_TREE_MODEL(widgets->layoutsList);
- GtkTreeIter iter;
- if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->LayoutsTree)),&model,&iter)){
- GtkTreeIter iter_converted;
- char *target;
- gtk_tree_model_get(model,&iter,1,&target,-1);
- gtk_tree_model_filter_convert_iter_to_child_iter(widgets->layoutsFilter,&iter_converted,&iter);
- gtk_list_store_remove(widgets->layoutsList,&iter_converted);
- yon_config_remove_element(keyboard_layout_parameter,target,",");
+void on_scroll_lock_switch(GtkWidget *,int status,main_window *widgets){
+ switch(status){
+ case 0:{
+ yon_config_remove_element(options_parameter,"grp_led:scroll",",");
+ } break;
+ case 1:{
+ yon_config_append_element(options_parameter,"grp_led:scroll",",");
+ } break;
}
+ yon_interface_update(widgets);
}
-void on_move_up(GtkWidget *, main_window *widgets){
- GtkTreeModel *model = GTK_TREE_MODEL(widgets->layoutsFilter);
- GtkTreeIter iter,*previter;
- if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->LayoutsTree)),&model,&iter)){
- previter = gtk_tree_iter_copy(&iter);
- if (gtk_tree_model_iter_previous(model,previter))
- {
- GtkTreeIter iter_converted, previter_converted;
- gtk_tree_model_filter_convert_iter_to_child_iter(widgets->layoutsFilter,&iter_converted,&iter);
- gtk_tree_model_filter_convert_iter_to_child_iter(widgets->layoutsFilter,&previter_converted,previter);
- gtk_list_store_move_before(widgets->layoutsList,&iter_converted,&previter_converted);
- yon_layouts_save(widgets);
- }
+// void on_tty_changed(GtkWidget *, main_window *widgets){
+// char *tty_layout = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->TTYLayoutCombo));
+// if (!yon_char_is_empty(tty_layout)){
+// yon_config_register(console_keymap_parameter,console_keymap_parameter_command,tty_layout);
+// } else {
+// yon_config_remove_by_key(console_keymap_parameter);
+// }
+// }
+
+// void on_tty_keymap_changed(GtkWidget *, main_window *widgets){
+// char *tty_layout = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->TTYKeymapCombo));
+// if (!yon_char_is_empty(tty_layout)){
+// yon_config_register(console_keymap_toggle_parameter,console_keymap_toggle_parameter_command,tty_layout);
+// } else {
+// yon_config_remove_by_key(console_keymap_toggle_parameter);
+// }
+// }
+
+// void on_tty_font_changed(GtkWidget *, main_window *widgets){
+// char *tty_layout = (char*)gtk_combo_box_get_active_id(GTK_COMBO_BOX(widgets->TTYFontCombo));
+// if (!yon_char_is_empty(tty_layout)){
+// yon_config_register(console_font_parameter,console_font_parameter_command,tty_layout);
+// } else {
+// yon_config_remove_by_key(console_font_parameter);
+// }
+// }
+
+void on_layout_default_sensitive_toggled(GtkWidget *, int status, main_window *widgets){
+ gtk_widget_set_sensitive(widgets->LayoutTree,!status);
+ gtk_widget_set_sensitive(widgets->LayoutAddButton,!status);
+ if (status){
+ gtk_widget_set_sensitive(widgets->LayoutRemoveButton,!status);
+ gtk_widget_set_sensitive(widgets->LayoutMoveUpButton,!status);
+ gtk_widget_set_sensitive(widgets->LayoutMoveDownButton,!status);
+ }else {
+ on_layout_selection_changed(GTK_TREE_VIEW(widgets->LayoutTree),widgets);
+
}
}
-void on_move_down(GtkWidget *, main_window *widgets){
- GtkTreeModel *model = GTK_TREE_MODEL(widgets->layoutsFilter);
- GtkTreeIter iter,*nextiter;
- if (gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(widgets->LayoutsTree)),&model,&iter)){
- nextiter = gtk_tree_iter_copy(&iter);
- if (gtk_tree_model_iter_next(model,nextiter)){
- GtkTreeIter iter_converted, nextiter_converted;
- gtk_tree_model_filter_convert_iter_to_child_iter(widgets->layoutsFilter,&iter_converted,&iter);
- gtk_tree_model_filter_convert_iter_to_child_iter(widgets->layoutsFilter,&nextiter_converted,nextiter);
- gtk_list_store_move_after(widgets->layoutsList,&iter_converted,&nextiter_converted);
- yon_layouts_save(widgets);
+void on_layout_default_toggled(GtkWidget *, int status, main_window *widgets){
+ if (!status){
+ GtkTreeModel *model = GTK_TREE_MODEL(widgets->LayoutsList);
+ GtkTreeIter iter;
+ char *locales = NULL;
+ for_iter(model,&iter){
+ char *target, *variant;
+
+ gtk_tree_model_get(model,&iter,0,&target,1,&variant,-1);
+ char *key = NULL;
+ if (!yon_char_is_empty(variant)){
+ key = yon_char_unite(target,"_",variant,NULL);
+ } else {
+ key = yon_char_new(target);
+ }
+ char *temp = yon_char_append_element(locales?locales:"",key,",");
+ if (!yon_char_is_empty(locales)) free(locales);
+ locales = temp;
+ }
+ if (!yon_char_is_empty(locales)){
+ yon_config_register(keyboard_layout_parameter,keyboard_layout_parameter_command,locales);
}
}
-
}
+void on_layout_selection_changed(GtkTreeView *self,main_window *widgets){
+ int status = gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(self)),NULL,NULL);
+ gtk_widget_set_sensitive(widgets->LayoutMoveDownButton,status);
+ gtk_widget_set_sensitive(widgets->LayoutMoveUpButton,status);
+ gtk_widget_set_sensitive(widgets->LayoutRemoveButton,status);
+}
-// standard functions
+void on_option_selection_changed(GtkTreeView *self,main_window *widgets){
+ int status = gtk_tree_selection_get_selected(gtk_tree_view_get_selection(GTK_TREE_VIEW(self)),NULL,NULL);
+ gtk_widget_set_sensitive(widgets->OptionsRemoveButton,status);
+}
void yon_main_window_complete(main_window *widgets){
widgets = yon_remalloc(widgets,sizeof(main_window));
@@ -408,76 +328,125 @@ void yon_main_window_complete(main_window *widgets){
// Custom widgets configuration
{
- widgets->NumLockCombo = yon_gtk_builder_get_widget(builder,"NumlockCombo");
- widgets->ModelCombo = yon_gtk_builder_get_widget(builder,"ModelCombo");
- widgets->keyboard = yon_gtk_builder_get_widget(builder,"keyboard");
- widgets->keytable = yon_gtk_builder_get_widget(builder,"keytable");
- widgets->grp_toggle = yon_gtk_builder_get_widget(builder,"grp_toggle");
- widgets->OptionsEntry = yon_gtk_builder_get_widget(builder,"OptionsEntry");
- widgets->OptionsButton = yon_gtk_builder_get_widget(builder,"OptionsButton");
- widgets->LayoutsTree = yon_gtk_builder_get_widget(builder,"LayoutsTree");
- widgets->MoveUpButton = yon_gtk_builder_get_widget(builder,"MoveUpButton");
- widgets->MoveDownButton = yon_gtk_builder_get_widget(builder,"MoveDownButton");
- widgets->AddButton = yon_gtk_builder_get_widget(builder,"AddButton");
- widgets->RemoveButton = yon_gtk_builder_get_widget(builder,"RemoveButton");
- widgets->layoutsList = GTK_LIST_STORE(gtk_builder_get_object(builder,"liststore1"));
- widgets->layoutsFilter = GTK_TREE_MODEL_FILTER(gtk_builder_get_object(builder,"LayoutsFilter"));
- widgets->modelsList = GTK_LIST_STORE(gtk_builder_get_object(builder,"liststore2"));
-
- int size;
- GtkTreeIter iter;
- config_str models = yon_config_load(get_models_command,&size);
- for (int i=0;imodelsList,&iter);
- gtk_list_store_set(widgets->modelsList,&iter,1,models[i],0,_(models[i+1]),-1);
- }
- main_config.layouts_list = gtk_list_store_new(3,G_TYPE_STRING,G_TYPE_STRING,G_TYPE_BOOLEAN);
- int laysize;
- config_str rtn = yon_resource_open_file(layouts_path,&size);
- for (int i=0; iKeyboardModelCombo = yon_gtk_builder_get_widget(builder,"KeyboardModelCombo");
+ widgets->DefaultLayoutsSwitch = yon_gtk_builder_get_widget(builder,"DefaultLayoutsSwitch");
+ widgets->LayoutTree = yon_gtk_builder_get_widget(builder,"LayoutTree");
+ widgets->LayoutAddButton = yon_gtk_builder_get_widget(builder,"LayoutAddButton");
+ widgets->LayoutRemoveButton = yon_gtk_builder_get_widget(builder,"LayoutRemoveButton");
+ widgets->LayoutMoveUpButton = yon_gtk_builder_get_widget(builder,"LayoutMoveUpButton");
+ widgets->LayoutMoveDownButton = yon_gtk_builder_get_widget(builder,"LayoutMoveDownButton");
+ widgets->LayoutChangingCombo = yon_gtk_builder_get_widget(builder,"LayoutChangingCombo");
+ widgets->OptionsTree = yon_gtk_builder_get_widget(builder,"OptionsTree");
+ widgets->OptionsEditButton = yon_gtk_builder_get_widget(builder,"OptionsEditButton");
+ widgets->OptionsRemoveButton = yon_gtk_builder_get_widget(builder,"OptionsRemoveButton");
+ widgets->ComposeSwitch = yon_gtk_builder_get_widget(builder,"ComposeSwitch");
+ widgets->ScrollLockSwitch = yon_gtk_builder_get_widget(builder,"ScrollLockSwitch");
+ widgets->NumLockCombo = yon_gtk_builder_get_widget(builder,"NumLockCombo");
+
+ widgets->TTYLayoutEntry = yon_gtk_builder_get_widget(builder,"TTYLayoutEntry");
+ widgets->TTYLayoutButton = yon_gtk_builder_get_widget(builder,"TTYLayoutButton");
+ widgets->TTYSecondLayoutEntry = yon_gtk_builder_get_widget(builder,"TTYSecondLayoutEntry");
+ widgets->TTYSecondLayoutButton = yon_gtk_builder_get_widget(builder,"TTYSecondLayoutButton");
+ widgets->TTYFontEntry = yon_gtk_builder_get_widget(builder,"TTYFontEntry");
+ widgets->TTYFontButton = yon_gtk_builder_get_widget(builder,"TTYFontButton");
+ widgets->LayoutsList = GTK_LIST_STORE(gtk_builder_get_object(builder,"LayoutsList"));
+ widgets->OptionsList = GTK_LIST_STORE(gtk_builder_get_object(builder,"OptionsList"));
/* Widget registration for config monitoring | Регистрация виджетов для мониторинга конфига */
// yon_window_config_add_custom_parameter(widgets->HeadInfoLabel,"head-text","label",YON_TYPE_STRING);
/* Signal connection | Присоединение сигналов */
- g_signal_connect(G_OBJECT(widgets->AddButton),"clicked",G_CALLBACK(on_layouts_add),widgets);
- g_signal_connect(G_OBJECT(widgets->RemoveButton),"clicked",G_CALLBACK(on_layouts_remove),widgets);
- g_signal_connect(G_OBJECT(widgets->ModelCombo),"changed",G_CALLBACK(on_model_changed),widgets);
- g_signal_connect(G_OBJECT(widgets->MoveDownButton),"clicked",G_CALLBACK(on_move_down),widgets);
- g_signal_connect(G_OBJECT(widgets->MoveUpButton),"clicked",G_CALLBACK(on_move_up),widgets);
- g_signal_connect(G_OBJECT(widgets->OptionsButton),"clicked",G_CALLBACK(on_options_open),widgets);
+ g_signal_connect(G_OBJECT(widgets->LayoutAddButton),"clicked",G_CALLBACK(on_system_layouts_add),widgets);
+ g_signal_connect(G_OBJECT(widgets->LayoutRemoveButton),"clicked",G_CALLBACK(on_system_layouts_remove),widgets);
+ g_signal_connect(G_OBJECT(widgets->TTYLayoutButton),"clicked",G_CALLBACK(yon_keymaps_open),widgets);
+ g_signal_connect(G_OBJECT(widgets->TTYSecondLayoutButton),"clicked",G_CALLBACK(yon_keymaps_open),widgets);
+ g_signal_connect(G_OBJECT(widgets->TTYFontButton),"clicked",G_CALLBACK(yon_font_open),widgets);
+ g_signal_connect(G_OBJECT(widgets->KeyboardModelCombo),"changed",G_CALLBACK(on_model_changed),widgets);
+ g_signal_connect(G_OBJECT(widgets->OptionsEditButton),"clicked",G_CALLBACK(on_options_open),widgets);
+ g_signal_connect(G_OBJECT(widgets->OptionsRemoveButton),"clicked",G_CALLBACK(on_option_remove),widgets);
g_signal_connect(G_OBJECT(widgets->NumLockCombo),"changed",G_CALLBACK(on_num_lock_changed),widgets);
- }
+ g_signal_connect(G_OBJECT(widgets->LayoutChangingCombo),"changed",G_CALLBACK(on_options_save),widgets);
+ g_signal_connect(G_OBJECT(widgets->ComposeSwitch),"state-set",G_CALLBACK(on_compose_switch),widgets);
+ g_signal_connect(G_OBJECT(widgets->ScrollLockSwitch),"state-set",G_CALLBACK(on_scroll_lock_switch),widgets);
+ // g_signal_connect(G_OBJECT(widgets->LayoutsList),"row-inserted",G_CALLBACK(on_layout_dnd_inserted),widgets);
+ // g_signal_connect(G_OBJECT(widgets->LayoutsList),"row-deleted",G_CALLBACK(on_layout_dnd_deleted),widgets);
+
+ g_signal_connect(G_OBJECT(widgets->LayoutTree),"cursor-changed",G_CALLBACK(on_layout_selection_changed),widgets);
+ g_signal_connect(G_OBJECT(widgets->OptionsTree),"cursor-changed",G_CALLBACK(on_option_selection_changed),widgets);
+
+ g_signal_connect(G_OBJECT(widgets->DefaultLayoutsSwitch),"state-set",G_CALLBACK(on_layout_default_toggled),widgets);
+ g_signal_connect(G_OBJECT(widgets->DefaultLayoutsSwitch),"state-set",G_CALLBACK(on_layout_default_sensitive_toggled),widgets);
+
+ g_signal_connect(G_OBJECT(widgets->LayoutMoveUpButton),"clicked",G_CALLBACK(on_layout_move_up),widgets);
+ g_signal_connect(G_OBJECT(widgets->LayoutMoveDownButton),"clicked",G_CALLBACK(on_layout_move_down),widgets);
g_signal_connect(G_OBJECT(widgets->LoadLocalMenuItem),"activate",G_CALLBACK(on_config_local_load),widgets);
g_signal_connect(G_OBJECT(widgets->LoadGlobalMenuItem),"activate",G_CALLBACK(on_config_global_load),widgets);
g_signal_connect(G_OBJECT(widgets->LoadCustomMenuItem),"activate",G_CALLBACK(on_config_custom_load),widgets);
- g_signal_connect(G_OBJECT(widgets->SaveMenuItem),"activate",G_CALLBACK(on_config_global_local_save),NULL);
- g_signal_connect(G_OBJECT(widgets->SaveLocalMenuItem),"activate",G_CALLBACK(on_config_local_save),NULL);
- g_signal_connect(G_OBJECT(widgets->SaveGlobalMenuItem),"activate",G_CALLBACK(on_config_global_save),NULL);
- g_signal_connect(G_OBJECT(widgets->SaveCustomMenuItem),"activate",G_CALLBACK(on_config_custom_save),NULL);
+ g_signal_connect(G_OBJECT(widgets->SaveMenuItem),"activate",G_CALLBACK(on_config_global_local_save),widgets);
+ g_signal_connect(G_OBJECT(widgets->SaveLocalMenuItem),"activate",G_CALLBACK(on_config_local_save),widgets);
+ g_signal_connect(G_OBJECT(widgets->SaveGlobalMenuItem),"activate",G_CALLBACK(on_config_global_save),widgets);
+ g_signal_connect(G_OBJECT(widgets->SaveCustomMenuItem),"activate",G_CALLBACK(on_config_custom_save),widgets);
+ yon_gtk_combo_box_block_scroll(GTK_COMBO_BOX(widgets->NumLockCombo));
+ yon_gtk_combo_box_block_scroll(GTK_COMBO_BOX(widgets->KeyboardModelCombo));
+ yon_gtk_combo_box_block_scroll(GTK_COMBO_BOX(widgets->LayoutChangingCombo));
+
+ }
+
+ int size;
+ config_str models = yon_config_load(get_models_command,&size);
+ for (int i=0;iKeyboardModelCombo),parsed[0],_(parsed[1]));
+ yon_char_parsed_free(parsed,parsed_size);
+ }
+
+ {
+ int size;
+ config_str options = yon_config_load(grp_options_command,&size);
+ for (int i=0;iLayoutChangingCombo),parsed[0],_(parsed[1]));
+ yon_char_parsed_free(parsed,parsed_size);
+ }
+ yon_char_parsed_free(options,size);
+ }
+ yon_char_parsed_free(models,size);
+
+ // {
+ // config_str parsed = yon_config_load(tty_layout_command,&size);
+ // for (int i=0;iTTYLayoutCombo),parsed[i],parsed[i]);
+ // }
+ // yon_char_parsed_free(parsed,size);
+ // }
+ // {
+ // config_str parsed = yon_config_load(tty_keymap_command,&size);
+ // for (int i=0;iTTYKeymapCombo),parsed[i],parsed[i]);
+ // }
+ // yon_char_parsed_free(parsed,size);
+ // }
+ // {
+ // config_str parsed = yon_config_load(tty_font_command,&size);
+ // for (int i=0;iTTYFontCombo),parsed[i],parsed[i]);
+ // }
+ // yon_char_parsed_free(parsed,size);
+ // }
yon_root_button_setup((template_main_window*)widgets,main_config.launch_arguments,main_config.launch_size);
yon_save_window_set_postsave_function(on_save_done,widgets);
+ gtk_tree_view_column_clicked(GTK_TREE_VIEW_COLUMN(gtk_tree_view_get_column(GTK_TREE_VIEW(widgets->LayoutTree),0)));
on_config_local_load(NULL,widgets);
}
@@ -485,7 +454,7 @@ void yon_main_window_complete(main_window *widgets){
int main(int argc, char *argv[]){
setlocale(LC_ALL, "");
textdomain (LocaleName);
-
+ yon_config_init();
yon_ubl_connect_config((_template_config*)&main_config);
yon_ubl_window_init(TITLE_LABEL,TITLE_INFO_LABEL,LocaleName,CssPath,LocaleName,version_application,WIKI_LINK);
config_str unfound = NULL;
diff --git a/source/ubl-settings-keyboard.h b/source/ubl-settings-keyboard.h
index e6a5eaf..d090338 100644
--- a/source/ubl-settings-keyboard.h
+++ b/source/ubl-settings-keyboard.h
@@ -21,35 +21,116 @@
#define glade_path "/com/ublinux/ui/ubl-settings-keyboard.glade"
#define glade_layouts_path "/com/ublinux/ui/ubl-settings-keyboard-layouts.glade"
#define glade_options_path "/com/ublinux/ui/ubl-settings-keyboard-options.glade"
+#define glade_keymaps_path "/com/ublinux/ui/ubl-settings-keyboard-keymaps.glade"
+#define glade_font_path "/com/ublinux/ui/ubl-settings-keyboard-font.glade"
#define banner_path "/com/ublinux/images/ubl-settings-keyboard-banner.png"
#define CssPath "/com/ublinux/css/ubl-settings-keyboard.css"
#define config_path yon_char_unite(yon_ubl_user_get_home_directory(),"/.config/",LocaleName,"/",LocaleName,".conf",NULL)
#define icon_path "com.ublinux.ubl-settings-keyboard"
+#define keymap_list_path "resource://com/ublinux/csv/keymap-list.csv"
+#define font_list_path "resource://com/ublinux/csv/font-list.csv"
+
#define LocaleName "ubl-settings-keyboard"
#define model_parameter "XKBMODEL"
-#define model_parameter_command "ubconfig --source global get keyboard XKBMODEL"
+#define model_parameter_command "ubconfig --source global get [keyboard] XKBMODEL"
#define keyboard_layout_parameter "XKBLAYOUT"
-#define keyboard_layout_parameter_command "ubconfig --source global get keyboard XKBLAYOUT"
+#define keyboard_layout_parameter_command "ubconfig --source global get [keyboard] XKBLAYOUT"
#define options_parameter "XKBOPTIONS"
-#define options_parameter_command "ubconfig --source global get keyboard XKBOPTIONS"
+#define options_parameter_command "ubconfig --source global get [keyboard] XKBOPTIONS"
#define num_lock_boot_parameter "NUMLOCK"
-#define num_lock_boot_parameter_command "ubconfig --source global get keyboard NUMLOCK"
+#define num_lock_boot_parameter_command "ubconfig --source global get [keyboard] NUMLOCK"
+
+#define console_keymap_parameter "CONSOLE_KEYMAP"
+#define console_keymap_parameter_command "ubconfig --source global get [keyboard] CONSOLE_KEYMAP"
+
+#define console_keymap_toggle_parameter "CONSOLE_KEYMAP_TOGGLE"
+#define console_keymap_toggle_parameter_command "ubconfig --source global get [keyboard] CONSOLE_KEYMAP_TOGGLE"
+
+#define console_font_parameter "CONSOLE_FONT"
+#define console_font_parameter_command "ubconfig --source global get [locale] CONSOLE_FONT"
-#define yon_config_get_custom_command(target) yon_char_unite("ubconfig --source ",target," get keyboard XKBMODEL XKBLAYOUT XKBOPTIONS NUMLOCK",NULL)
-#define config_get_local_command "ubconfig --source system get keyboard XKBMODEL XKBLAYOUT XKBOPTIONS NUMLOCK"
-#define config_get_global_command "ubconfig --source global get keyboard XKBMODEL XKBLAYOUT XKBOPTIONS NUMLOCK"
-#define config_get_default_command ""
+#define yon_config_get_custom_command(target) yon_char_unite("ubconfig --source ",target," -ea get [keyboard] XKBMODEL XKBLAYOUT XKBOPTIONS NUMLOCK CONSOLE_KEYMAP CONSOLE_KEYMAP_TOGGLE -- [locale] CONSOLE_FONT",NULL)
+#define config_get_local_command "ubconfig --source system -ea get [keyboard] XKBMODEL XKBLAYOUT XKBOPTIONS NUMLOCK CONSOLE_KEYMAP CONSOLE_KEYMAP_TOGGLE -- [locale] CONSOLE_FONT"
+#define config_get_global_command "ubconfig --source global -ea get [keyboard] XKBMODEL XKBLAYOUT XKBOPTIONS NUMLOCK CONSOLE_KEYMAP CONSOLE_KEYMAP_TOGGLE -- [locale] CONSOLE_FONT"
+#define config_get_default_command "ubconfig --source default -ea get [keyboard] XKBMODEL XKBLAYOUT XKBOPTIONS NUMLOCK CONSOLE_KEYMAP CONSOLE_KEYMAP_TOGGLE -- [locale] CONSOLE_FONT"
#define config_get_global_only_parameters ""
#define config_get_local_only_parameters ""
#define get_options_command "grep -E \"grp:.*toggle|grp_led:.*toggle|compose:.*toggle\" /usr/share/X11/xkb/rules/base.lst|sed -e 's/^ *//g' -e 's/\t//g' -e 's/toggle */toggle;/g'"
-#define get_models_command "sed '/<\\/modelList>/q' /usr/share/X11/xkb/rules/base.xml | grep -E '^ {8,8}|^ {8,8}'|sed -e 's/ *//g' -e 's,,,g' -e 's/ *//g' -e 's,,,g'"
+#define get_models_command "sed -En '/^! model$/,/^ *$/!d;s/[[:blank:]]+([^ ]+)[[:blank:]]+(.*)/\\1|\\2/p' /usr/share/X11/xkb/rules/evdev.lst"
#define layouts_path "resource:///com/ublinux/csv/layouts.csv"
+#define layouts_command "sed -En '/^! layout$/,/^ *$/!d;s/[[:blank:]]+([^ ]+)[[:blank:]]+(.*)/\\1|\\2/p' /usr/share/X11/xkb/rules/evdev.lst"
+#define layouts_variant_command "sed -En '/^! variant$/,/^ *$/!d;s/[[:blank:]]+([^ ]+)[[:blank:]]+([^ :]+):[[:blank:]]+(.*)/\\2|\\1|\\3/p' /usr/share/X11/xkb/rules/evdev.lst"
+
+// grp : Switching to another layout
+#define grp_options_command "sed -En '/^! option$/,/^ *$/!d;s/[[:blank:]]+(grp:[^ ]+)[[:blank:]]+(.*)/\\1|\\2/p' /usr/share/X11/xkb/rules/evdev.lst"
+
+// lv2 : Key to choose the 2nd level
+#define lv2_options_command "sed -En '/^! option$/,/^ *$/!d;s/[[:blank:]]+(lv2:[^ ]+)[[:blank:]]+(.*)/\\1|\\2/p' /usr/share/X11/xkb/rules/evdev.lst"
+
+// lv3 : Key to choose the 3nd level
+#define lv3_options_command "sed -En '/^! option$/,/^ *$/!d;s/[[:blank:]]+(lv3:[^ ]+)[[:blank:]]+(.*)/\\1|\\2/p' /usr/share/X11/xkb/rules/evdev.lst"
+
+// ctrl : Ctrl position
+#define ctrl_options_command "sed -En '/^! option$/,/^ *$/!d;s/[[:blank:]]+(ctrl:[^ ]+)[[:blank:]]+(.*)/\\1|\\2/p' /usr/share/X11/xkb/rules/evdev.lst"
+
+// grp_led : Use keyboard LED to show alternative layout
+#define grp_led_options_command "sed -En '/^! option$/,/^ *$/!d;s/[[:blank:]]+(grp_led:[^ ]+)[[:blank:]]+(.*)/\\1|\\2/p' /usr/share/X11/xkb/rules/evdev.lst"
+
+// mod_led : Use keyboard LED to indicate modifiers
+#define mod_led_options_command "sed -En '/^! option$/,/^ *$/!d;s/[[:blank:]]+(mod_led:[^ ]+)[[:blank:]]+(.*)/\\1|\\2/p' /usr/share/X11/xkb/rules/evdev.lst"
+
+// keypad : Layout of numeric keypad
+#define keypad_options_command "sed -En '/^! option$/,/^ *$/!d;s/[[:blank:]]+(keypad:[^ ]+)[[:blank:]]+(.*)/\\1|\\2/p' /usr/share/X11/xkb/rules/evdev.lst"
+
+// kpdl : Numeric keypad Delete behavior
+#define kpdl_options_command "sed -En '/^! option$/,/^ *$/!d;s/[[:blank:]]+(kpdl:[^ ]+)[[:blank:]]+(.*)/\\1|\\2/p' /usr/share/X11/xkb/rules/evdev.lst"
+
+// caps : Caps Lock behavior
+#define caps_options_command "sed -En '/^! option$/,/^ *$/!d;s/[[:blank:]]+(caps:[^ ]+)[[:blank:]]+(.*)/\\1|\\2/p' /usr/share/X11/xkb/rules/evdev.lst"
+
+// altwin : Alt and Win behavior
+#define altwin_options_command "sed -En '/^! option$/,/^ *$/!d;s/[[:blank:]]+(altwin:[^ ]+)[[:blank:]]+(.*)/\\1|\\2/p' /usr/share/X11/xkb/rules/evdev.lst"
+
+// Compose key : Position of Compose key
+#define Compose_options_command "sed -En '/^! option$/,/^ *$/!d;s/[[:blank:]]+(compose:[^ ]+)[[:blank:]]+(.*)/\\1|\\2/p' /usr/share/X11/xkb/rules/evdev.lst"
+
+// compat : Compatibility options
+#define compat_options_command "sed -En '/^! option$/,/^ *$/!d;s/[[:blank:]]+((numpad|srvrkeys|apple|shift|misc|keypad|grab):[^ ]+)[[:blank:]]+(.*)/\\1|\\2/p' /usr/share/X11/xkb/rules/evdev.lst"
+
+// currencysign : Currency signs
+#define currencysign_options_command "sed -En '/^! option$/,/^ *$/!d;s/[[:blank:]]+((eurosign|rupeesign):[^ ]+)[[:blank:]]+(.*)/\\1|\\2/p' /usr/share/X11/xkb/rules/evdev.lst"
+
+// lv5 : Key to choose the 5th level
+#define lv5_options_command "sed -En '/^! option$/,/^ *$/!d;s/[[:blank:]]+(lv5:[^ ]+)[[:blank:]]+(.*)/\\1|\\2/p' /usr/share/X11/xkb/rules/evdev.lst"
+
+// nbsp : Non-breaking space input
+#define nbsp_options_command "sed -En '/^! option$/,/^ *$/!d;s/[[:blank:]]+(nbsp:[^ ]+)[[:blank:]]+(.*)/\\1|\\2/p' /usr/share/X11/xkb/rules/evdev.lst"
+
+// japan : Japanese keyboard options
+#define japan_options_command "sed -En '/^! option$/,/^ *$/!d;s/[[:blank:]]+(japan:[^ ]+)[[:blank:]]+(.*)/\\1|\\2/p' /usr/share/X11/xkb/rules/evdev.lst"
+
+// korean : Korean Hangul/Hanja keys
+#define korean_options_command "sed -En '/^! option$/,/^ *$/!d;s/[[:blank:]]+(korean:[^ ]+)[[:blank:]]+(.*)/\\1|\\2/p' /usr/share/X11/xkb/rules/evdev.lst"
+
+// esperanto : Esperanto letters with superscripts
+#define esperanto_options_command "sed -En '/^! option$/,/^ *$/!d;s/[[:blank:]]+(esperanto:[^ ]+)[[:blank:]]+(.*)/\\1|\\2/p' /usr/share/X11/xkb/rules/evdev.lst"
+
+// solaris : Old Solaris keycodes compatibility
+#define solaris_options_command "sed -En '/^! option$/,/^ *$/!d;s/[[:blank:]]+(solaris:[^ ]+)[[:blank:]]+(.*)/\\1|\\2/p' /usr/share/X11/xkb/rules/evdev.lst"
+
+// terminate : Key sequence to kill the X server
+#define terminate_options_command "sed -En '/^! option$/,/^ *$/!d;s/[[:blank:]]+(terminate:[^ ]+)[[:blank:]]+(.*)/\\1|\\2/p' /usr/share/X11/xkb/rules/evdev.lst"
+
+#define tty_layout_command "find /usr/share/kbd/keymaps/ -type f -name \"*.map.*\" | sed -En \"s:.*/(.*)\\..*\\..*:\\1:p\" | sort -ufV"
+#define tty_keymap_command "find /usr/share/kbd/keymaps/ -type f -name \"*.map.*\" | sed -En \"s:.*/(.*)\\..*\\..*:\\1:p\" | sort -ufV"
+#define tty_font_command "find /usr/share/kbd/consolefonts -maxdepth 1 -type f -name \"*.gz\" | sed -En \"s:.*/(.*)(\\.psf\\.gz|\\.psfu\\.gz)$:\\1:p\" | sort -ufV"
+
typedef char* string;
__attribute__((unused)) static \
@@ -60,29 +141,43 @@ typedef struct {
int save_config;
config_str launch_arguments;
int launch_size;
- char *options;
- GtkListStore *layouts_list;
+ GHashTable *options;
+ GtkTreeStore *layouts_store;
GtkListStore *options_list;
+ GtkListStore *models_list;
+ config_str variants_list;
+ int variants_size;
+ config_str layouts_list;
+ int layouts_size;
} config;
+extern config main_config;
+
typedef struct {
template_window_fields
+ GtkWidget *KeyboardModelCombo;
+ GtkWidget *DefaultLayoutsSwitch;
+ GtkWidget *LayoutTree;
+ GtkWidget *LayoutAddButton;
+ GtkWidget *LayoutRemoveButton;
+ GtkWidget *LayoutMoveUpButton;
+ GtkWidget *LayoutMoveDownButton;
+ GtkWidget *LayoutChangingCombo;
+ GtkWidget *OptionsTree;
+ GtkWidget *OptionsEditButton;
+ GtkWidget *OptionsRemoveButton;
+ GtkWidget *ComposeSwitch;
+ GtkWidget *ScrollLockSwitch;
GtkWidget *NumLockCombo;
- GtkWidget *ModelCombo;
- GtkWidget *keyboard;
- GtkWidget *keytable;
- GtkWidget *grp_toggle;
- GtkWidget *OptionsEntry;
- GtkWidget *OptionsButton;
- GtkWidget *LayoutsTree;
- GtkWidget *MoveUpButton;
- GtkWidget *MoveDownButton;
- GtkWidget *AddButton;
- GtkWidget *RemoveButton;
- GtkTreeModelFilter *layoutsFilter;
- GtkListStore *layoutsList;
- GtkListStore *modelsList;
+ GtkWidget *TTYLayoutEntry;
+ GtkWidget *TTYLayoutButton;
+ GtkWidget *TTYSecondLayoutEntry;
+ GtkWidget *TTYSecondLayoutButton;
+ GtkWidget *TTYFontEntry;
+ GtkWidget *TTYFontButton;
+ GtkListStore *LayoutsList;
+ GtkListStore *OptionsList;
} main_window;
@@ -100,11 +195,17 @@ typedef struct {
typedef struct {
GtkWidget *Window;
+ GtkWidget *StatusBox;
GtkWidget *MainTree;
GtkWidget *CancelButton;
GtkWidget *AcceptButton;
+ GtkWidget *OptionsFilterCombo;
+ GtkWidget *OptionsEntry;
GtkCellRenderer *ChosenCell;
- GtkListStore *list;
+ GtkTreeStore *list;
+ GtkListStore *OptionsList;
+ GtkTreeModel *OptionsFilter;
+ char *parameters;
} layouts_window;
typedef struct {
@@ -133,13 +234,50 @@ void config_init();
void yon_main_window_complete(main_window *widgets);
void on_move_down(GtkWidget *self, main_window *widgets);
void on_move_up(GtkWidget *self, main_window *widgets);
-void on_layouts_add(GtkWidget *self, main_window *widgets);
-void on_layouts_accept(GtkWidget *self, dictionary *dict);
+void on_layouts_accept(GtkWidget *self, layouts_window *window);
void on_options_open(GtkWidget *self, main_window *widgets);
-void on_options_accept(GtkWidget *self, dictionary *dict);
+void on_options_accept(GtkWidget *self, layouts_window *window);
void on_model_changed(GtkComboBoxText *self, main_window *widgets);
void on_num_lock_changed(GtkComboBox *self, main_window *widgets);
-void on_layouts_remove(GtkWidget *, main_window *widgets);
-void yon_layouts_save(main_window *widgets);
void on_layouts_chosen(GtkCellRenderer *self, gchar *path, layouts_window *window);
-GList *yon_get_all_selected(GtkTreeView *tree, int column);
\ No newline at end of file
+GList *yon_get_all_selected(GtkTreeView *tree, int column);
+void on_system_layouts_add(GtkWidget *, main_window *widgets);
+void yon_layouts_add(GtkTreeView *tree, GtkListStore *cur_list, main_window *widgets);
+void yon_layouts_remove(GtkTreeView *tree, GtkListStore *cur_list, main_window *widgets);
+void on_system_layouts_remove(GtkWidget *, main_window *widgets);
+void yon_config_init();
+void yon_layout_build(layouts_window *window);
+config_str yon_layout_get_children(char *layout_id, int *size);
+layouts_window *yon_layouts_window_new();
+void yon_layout_load(char *layout,main_window *widgets);
+void yon_options_setup(layouts_window *window);
+layouts_window *yon_options_window_new();
+void on_options_filter_changed(GtkWidget *, layouts_window *window);
+gboolean yon_filter_refilter(GtkTreeModel *model, GtkTreeIter *iter, layouts_window *window);
+void yon_options_setup(layouts_window *window);
+void on_option_chosen(GtkCellRenderer *, gchar *path, layouts_window *window);
+void on_options_save(GtkWidget *,main_window *widgets);
+void on_compose_switch(GtkWidget *,int status,main_window *widgets);
+void on_scroll_lock_switch(GtkWidget *,int status,main_window *widgets);
+void on_option_remove(GtkWidget*, main_window *widgets);
+void on_layout_move_down(GtkWidget *, main_window *widgets);
+void on_layout_move_up(GtkWidget *, main_window *widgets);
+void on_layout_dnd_inserted(GtkTreeModel *, GtkTreePath* path, GtkTreeIter* iter, main_window *widgets);
+void on_layout_dnd_deleted(GtkTreeModel *, GtkTreePath* path, GtkTreeIter* iter, main_window *widgets);
+void on_tty_changed(GtkWidget *, main_window *widgets);
+void on_tty_keymap_changed(GtkWidget *, main_window *widgets);
+void on_tty_font_changed(GtkWidget *, main_window *widgets);
+void yon_keymaps_open(GtkWidget *,main_window *widgets);
+layouts_window *yon_keymaps_window_new();
+void on_keymaps_accept(GtkWidget *, layouts_window *window);
+void on_font_accept(GtkWidget *, layouts_window *window);
+layouts_window *yon_font_window_new();
+void yon_font_open(GtkWidget *,main_window *widgets);
+void on_keymaps_selection_changed(GtkWidget *,layouts_window *window);
+void on_font_accept(GtkWidget *, layouts_window *window);
+void on_font_selection_changed(GtkWidget *,layouts_window *window);
+void yon_interface_save(main_window *widgets);
+void on_layout_default_toggled(GtkWidget *, int status, main_window *widgets);
+void on_layout_selection_changed(GtkTreeView*,main_window *widgets);
+void on_option_selection_changed(GtkTreeView *self,main_window *widgets);
+void on_layout_default_sensitive_toggled(GtkWidget *, int status, main_window *widgets);
\ No newline at end of file
diff --git a/source/ubl-strings.h b/source/ubl-strings.h
index 21c8f9d..8fa6494 100644
--- a/source/ubl-strings.h
+++ b/source/ubl-strings.h
@@ -1,4 +1,4 @@
-#define WIKI_LINK _("https://wiki.ublinux.ru/ru/Программное_обеспечение/Программы_и_утилиты/Все/ubl-settings-keyboard")
+#define WIKI_LINK _("https://wiki.ublinux.ru/software/programs_and_utilities/all/ubl-settings-keyboard")
#define TITLE_LABEL _("Keyboard")
#define TITLE_INFO_LABEL _("Keyboard configuration")
@@ -7,8 +7,8 @@
#define NUM_LOCK_LABEL _("Num Lock on boot:")
#define KEYBOARD_LABEL _("Keyboard")
#define MODEL_LABEL _("Keyboard model:")
-#define OPTIONS_LABEL _("Keyboard options:")
-#define LAYOUTS_LABEL _("Keyboard layouts:")
+#define KEYBOARD_OPTIONS_LABEL _("Keyboard options:")
+#define KEYBOARD_LAYOUTS_LABEL _("Keyboard layouts:")
#define EDIT_LABEL _("Pick an option")
#define MOVE_UP_LABEL _("Move layout up")
#define MOVE_DOWN_LABEL _("Move layout down")
@@ -17,4 +17,37 @@
#define DEFAULT_LABEL _("Default")
#define ON_LABEL _("On")
#define OFF_LABEL _("Off")
-#define ACCEPT_LABEL _("Accept")
\ No newline at end of file
+#define ACCEPT_LABEL _("Accept")
+#define CANCEL_LABEL _("Cancel")
+
+#define SYSTEM_LABEL _("System")
+#define KEYBOARD_MODEL_LABEL _("Keyboard model:")
+#define LAYOUTS_LABEL _("Layouts:")
+#define DEFAULT_LAYOUT_LABEL _("Default layout")
+#define LAYOUT_CHANGING_LABEL _("Changing the layout:")
+#define ADDITIONAL_OPTIONS_LABEL _("Additional options:")
+#define SET_COMPOSE_LABEL _("Set Compose (Multi_Key) to the right Win key")
+#define SCROLL_LOCK_LABEL _("Scroll Lock indication when switching layouts")
+#define ON_LABEL _("On")
+#define OFF_LABEL _("Off")
+#define NUMLOCK_LABEL _("NumLock:")
+#define TTY_LAYOUT_LABEL _("Setting up TTY VT")
+#define SECONDARY_LAYOUT_LABEL _("Key layout and switch:")
+#define KEYBOARD_LAYOUT_LABEL _("Keyboard layout")
+#define DESIGNATION_LABEL _("Designation")
+#define VARIANT_LABEL _("Variant")
+#define NAME_LABEL _("Name")
+#define DESCRIPTION_LABEL _("Description")
+#define OPTIONS_LABEL _("Options:")
+#define KEYMAP_LABEL _("Additional key layout and switch:")
+#define FONT_LABEL _("Font:")
+
+#define GROUP_LABEL _("Group")
+#define KEYMAP_TITLE_LABEL _("Additional key layout for the keyboard")
+#define FONT_TITLE_LABEL _("Font")
+
+#define OPTION_REMOVE_LABEL _("Are you sure you want to remove current option?")
+#define OPTION_REMOVE_TITLE_LABEL _("Option deletion")
+#define LAYOUT_REMOVE_LABEL _("Are you sure you want to remove current layout?")
+#define LAYOUT_REMOVE_TITLE_LABEL _("Layout deletion")
+#define MANUAL_LABEL _("Manual input:")
\ No newline at end of file
diff --git a/ubl-settings-keyboard-font.glade b/ubl-settings-keyboard-font.glade
new file mode 100644
index 0000000..7a336ad
--- /dev/null
+++ b/ubl-settings-keyboard-font.glade
@@ -0,0 +1,239 @@
+
+
+
+
+
+
+
+ True
+ False
+ com.ublinux.libublsettingsui-gtk3.accept-symbolic
+
+
+ True
+ False
+ com.ublinux.libublsettingsui-gtk3.cancel-uncolored-symbolic
+
+
diff --git a/ubl-settings-keyboard-keymaps.glade b/ubl-settings-keyboard-keymaps.glade
new file mode 100644
index 0000000..23a2aaf
--- /dev/null
+++ b/ubl-settings-keyboard-keymaps.glade
@@ -0,0 +1,257 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+ False
+ com.ublinux.libublsettingsui-gtk3.accept-symbolic
+
+
+ True
+ False
+ com.ublinux.libublsettingsui-gtk3.cancel-uncolored-symbolic
+
+
+ 450
+ 550
+ True
+ False
+ com.ublinux.ubl-settings-keyboard
+
+
+ True
+ False
+ 5
+ vertical
+ 5
+
+
+ True
+ False
+ vertical
+ 5
+
+
+
+
+
+ False
+ True
+ 0
+
+
+
+
+ True
+ False
+ 5
+ 5
+ 5
+
+
+ True
+ True
+
+
+ False
+ True
+ 0
+
+
+
+
+ True
+ False
+ Default
+
+
+ False
+ True
+ 1
+
+
+
+
+ False
+ True
+ 1
+
+
+
+
+ True
+ True
+ 5
+ 5
+ in
+
+
+ True
+ True
+ KeymapList
+ 1
+ both
+
+
+
+
+
+ Keyboard layout
+ 0
+
+
+
+ 0
+
+
+
+
+
+
+ Group
+
+
+
+ 1
+
+
+
+
+
+
+ Description
+
+
+ word
+ 120
+
+
+ 2
+
+
+
+
+
+
+
+
+ True
+ True
+ 2
+
+
+
+
+ True
+ False
+ 5
+ 5
+ 5
+
+
+ True
+ False
+ Manual input:
+
+
+ False
+ True
+ 0
+
+
+
+
+ True
+ True
+
+
+ True
+ True
+ 1
+
+
+
+
+ False
+ True
+ 3
+
+
+
+
+
+
+
+
+
diff --git a/ubl-settings-keyboard-layouts.glade b/ubl-settings-keyboard-layouts.glade
index f36fbe5..7a0cb5a 100644
--- a/ubl-settings-keyboard-layouts.glade
+++ b/ubl-settings-keyboard-layouts.glade
@@ -1,127 +1,58 @@
-
+
True
False
- emblem-ok-symbolic
+ com.ublinux.libublsettingsui-gtk3.accept-symbolic
True
False
- process-stop-symbolic
+ com.ublinux.libublsettingsui-gtk3.cancel-uncolored-symbolic
-
-
-
-
-
-
-
-
-
-
-
+
450
550
True
False
- dialog
-
-
- False
- 3
- 3
- 3
- 3
- vertical
- 5
-
-
- False
- end
-
-
- Cancel
- True
- True
- True
- image2
-
-
- True
- True
- 0
-
-
-
-
- Accept
- True
- True
- True
- image1
-
-
- True
- True
- 1
-
-
-
-
- False
- False
- 0
-
-
+ com.ublinux.ubl-settings-keyboard
+
+
+ True
+ True
+ in
-
+
True
True
- in
+ False
+ 1
-
- True
- True
- liststore1
- False
- 1
-
-
-
+
+ column
-
- column
-
-
-
- 2
-
-
-
+
+
+ 3
+
+
+
+
+
+ column
+ 0
-
- column
- 0
-
-
-
- 1
-
-
-
+
+
+ 2
+
-
- True
- True
- 1
-
@@ -129,7 +60,6 @@