Re: Reducing the complication of choices in console-setup udeb config: first thought
Christian Perrier, le Sat 04 Jul 2009 11:31:07 +0200, a écrit :
> I went through all languages.
That approach misses things. For instance, Andorra (AD)'s official
language is catalan (cat), for which you only provide es' cat variant
layout. Xorg does have an ad layout which is quite different from es'
cat variant. And that is only the first one in the xkb list.
Ok, that's no regression from what we had previously and we have no
AD locale for now, but should we really select keyboards by hand and
restrict ourselves from just automatically supporting such keyboard?
I have a script that can automatically generate the attached perl hash
(kbds), which I had meant to use to automatically determine the default
keyboard to use depending on the country/language pair, to replace the
handcrafted switch statement of console-setup's config. That brings 137
keyboard layouts which we should ideally support (kbds2).
Samuel
%locales_keyboards = (
'AD' => {
'ca' => { 'layout' => 'ad' },
},
'AE' => {
'ar' => { 'layout' => 'ara' },
},
'AF' => {
'ps' => { 'layout' => 'af', 'variant' => 'ps' },
'uz' => { 'layout' => 'af', 'variant' => 'uz' },
},
'AL' => {
'sq' => { 'layout' => 'al' },
},
'AM' => {
'hy' => { 'layout' => 'am' },
},
'AR' => {
'es' => { 'layout' => 'latam' },
},
'AZ' => {
'az' => { 'layout' => 'az' },
},
'BA' => {
'bs' => { 'layout' => 'ba' },
},
'BD' => {
'bn' => { 'layout' => 'bd' },
},
'BE' => {
'de' => { 'layout' => 'be' },
'fr' => { 'layout' => 'be' },
},
'BG' => {
'bg' => { 'layout' => 'bg' },
},
'BH' => {
'ar' => { 'layout' => 'ara' },
},
'BO' => {
'es' => { 'layout' => 'latam' },
},
'BR' => {
'eo' => { 'layout' => 'br', 'variant' => 'nativo-epo' },
'pt' => { 'layout' => 'br' },
},
'BT' => {
'dz' => { 'layout' => 'bt' },
},
'BY' => {
'be' => { 'layout' => 'by' },
},
'CA' => {
'en' => { 'layout' => 'ca', 'variant' => 'eng' },
'fr' => { 'layout' => 'ca' },
'iu' => { 'layout' => 'ca', 'variant' => 'ike' },
},
'CD' => {
'fr' => { 'layout' => 'cd' },
},
'CH' => {
'de' => { 'layout' => 'ch' },
'fr' => { 'layout' => 'ch', 'variant' => 'fr' },
'gsw' => { 'layout' => 'ch' },
},
'CL' => {
'es' => { 'layout' => 'latam' },
},
'CN' => {
'bo' => { 'layout' => 'cn', 'variant' => 'tib' },
'zh' => { 'layout' => 'cn' },
},
'CO' => {
'es' => { 'layout' => 'latam' },
},
'CR' => {
'es' => { 'layout' => 'latam' },
},
'CU' => {
'es' => { 'layout' => 'latam' },
},
'CZ' => {
'cs' => { 'layout' => 'cz' },
},
'DE' => {
'de' => { 'layout' => 'de' },
'dsb' => { 'layout' => 'de', 'variant' => 'dsb' },
},
'DK' => {
'da' => { 'layout' => 'dk' },
},
'DO' => {
'es' => { 'layout' => 'latam' },
},
'DZ' => {
'ar' => { 'layout' => 'ara' },
},
'EC' => {
'es' => { 'layout' => 'latam' },
},
'EE' => {
'et' => { 'layout' => 'ee' },
},
'EG' => {
'ar' => { 'layout' => 'ara' },
},
'EH' => {
'ar' => { 'layout' => 'ara' },
},
'ES' => {
'ast' => { 'layout' => 'es', 'variant' => 'ast' },
'ca' => { 'layout' => 'es', 'variant' => 'cat' },
'es' => { 'layout' => 'es' },
},
'ET' => {
'am' => { 'layout' => 'et' },
},
'FI' => {
'fi' => { 'layout' => 'fi' },
'se' => { 'layout' => 'fi', 'variant' => 'smi' },
'smi' => { 'layout' => 'fi', 'variant' => 'smi' },
},
'FO' => {
'fo' => { 'layout' => 'fo' },
},
'FR' => {
'fr' => { 'layout' => 'fr' },
'ka' => { 'layout' => 'fr', 'variant' => 'geo' },
},
'GB' => {
'en' => { 'layout' => 'gb' },
},
'GE' => {
'ka' => { 'layout' => 'ge' },
'os' => { 'layout' => 'ge', 'variant' => 'os' },
'ru' => { 'layout' => 'ge', 'variant' => 'ru' },
},
'GH' => {
'ak' => { 'layout' => 'gh', 'variant' => 'akan' },
'ee' => { 'layout' => 'gh', 'variant' => 'ewe' },
'en' => { 'layout' => 'gh' },
'ff' => { 'layout' => 'gh', 'variant' => 'fula' },
'gaa' => { 'layout' => 'gh', 'variant' => 'ga' },
'ha' => { 'layout' => 'gh', 'variant' => 'hausa' },
},
'GN' => {
'fr' => { 'layout' => 'gn' },
},
'GR' => {
'el' => { 'layout' => 'gr' },
},
'GT' => {
'es' => { 'layout' => 'latam' },
},
'HN' => {
'es' => { 'layout' => 'latam' },
},
'HR' => {
'hr' => { 'layout' => 'hr' },
},
'HT' => {
'es' => { 'layout' => 'latam' },
},
'HU' => {
'hu' => { 'layout' => 'hu' },
},
'IE' => {
'en' => { 'layout' => 'ie' },
'gd' => { 'layout' => 'ie', 'variant' => 'CloGaelach' },
},
'IL' => {
'he' => { 'layout' => 'il' },
},
'IN' => {
'bn' => { 'layout' => 'in', 'variant' => 'ben' },
'gu' => { 'layout' => 'in', 'variant' => 'guj' },
'hi' => { 'layout' => 'in', 'variant' => 'bolnagri' },
'kn' => { 'layout' => 'in', 'variant' => 'kan' },
'ml' => { 'layout' => 'in', 'variant' => 'mal' },
'or' => { 'layout' => 'in', 'variant' => 'ori' },
'pa' => { 'layout' => 'in', 'variant' => 'guru' },
'ta' => { 'layout' => 'in', 'variant' => 'tam_unicode' },
'te' => { 'layout' => 'in', 'variant' => 'tel' },
'ur' => { 'layout' => 'in', 'variant' => 'urd-phonetic' },
},
'IQ' => {
'ar' => { 'layout' => 'iq' },
'ku' => { 'layout' => 'iq' },
},
'IR' => {
'fa' => { 'layout' => 'ir' },
'ku' => { 'layout' => 'ir', 'variant' => 'ku' },
},
'IS' => {
'is' => { 'layout' => 'is' },
},
'IT' => {
'it' => { 'layout' => 'it' },
'ka' => { 'layout' => 'it', 'variant' => 'geo' },
},
'JO' => {
'ar' => { 'layout' => 'ara' },
},
'JP' => {
'ja' => { 'layout' => 'jp' },
},
'KG' => {
'ky' => { 'layout' => 'kg' },
},
'KH' => {
'km' => { 'layout' => 'kh' },
},
'KR' => {
'ko' => { 'layout' => 'kr' },
},
'KW' => {
'ar' => { 'layout' => 'ara' },
},
'KZ' => {
'kk' => { 'layout' => 'kz' },
'ru' => { 'layout' => 'kz', 'variant' => 'ruskaz' },
},
'LA' => {
'lo' => { 'layout' => 'la' },
},
'LB' => {
'ar' => { 'layout' => 'ara' },
},
'LK' => {
'si' => { 'layout' => 'lk' },
'ta' => { 'layout' => 'lk', 'variant' => 'tam_unicode' },
},
'LT' => {
'lt' => { 'layout' => 'lt' },
},
'LV' => {
'lv' => { 'layout' => 'lv' },
},
'LY' => {
'ar' => { 'layout' => 'ara' },
},
'MA' => {
'ar' => { 'layout' => 'ara' },
'ber' => { 'layout' => 'ma', 'variant' => 'tifinagh' },
'fr' => { 'layout' => 'ma', 'variant' => 'french' },
},
'ME' => {
'sr' => { 'layout' => 'me' },
},
'MK' => {
'mk' => { 'layout' => 'mk' },
},
'MM' => {
'my' => { 'layout' => 'mm' },
},
'MN' => {
'mng' => { 'layout' => 'mn' },
},
'MR' => {
'ar' => { 'layout' => 'ara' },
},
'MT' => {
'mt' => { 'layout' => 'mt' },
},
'MV' => {
'dv' => { 'layout' => 'mv' },
},
'MX' => {
'es' => { 'layout' => 'latam' },
},
'NG' => {
'en' => { 'layout' => 'ng' },
'ha' => { 'layout' => 'ng', 'variant' => 'hausa' },
'ig' => { 'layout' => 'ng', 'variant' => 'igbo' },
'yo' => { 'layout' => 'ng', 'variant' => 'yoruba' },
},
'NI' => {
'es' => { 'layout' => 'latam' },
},
'NL' => {
'nl' => { 'layout' => 'nl' },
},
'NO' => {
'no' => { 'layout' => 'no' },
'se' => { 'layout' => 'no', 'variant' => 'smi' },
},
'NP' => {
'ne' => { 'layout' => 'np' },
},
'OM' => {
'ar' => { 'layout' => 'ara' },
},
'PA' => {
'es' => { 'layout' => 'latam' },
},
'PE' => {
'es' => { 'layout' => 'latam' },
},
'PK' => {
'ar' => { 'layout' => 'pk', 'variant' => 'ara' },
'ur' => { 'layout' => 'pk' },
},
'PL' => {
'csb' => { 'layout' => 'pl', 'variant' => 'csb' },
'pl' => { 'layout' => 'pl' },
'ru' => { 'layout' => 'pl', 'variant' => 'ru_phonetic_dvorak' },
},
'PR' => {
'es' => { 'layout' => 'latam' },
},
'PS' => {
'ar' => { 'layout' => 'ara' },
},
'PT' => {
'eo' => { 'layout' => 'pt', 'variant' => 'nativo-epo' },
'pt' => { 'layout' => 'pt' },
},
'PY' => {
'es' => { 'layout' => 'latam' },
},
'QA' => {
'ar' => { 'layout' => 'ara' },
},
'RO' => {
'ro' => { 'layout' => 'ro' },
},
'RS' => {
'sr' => { 'layout' => 'rs' },
},
'RU' => {
'cv' => { 'layout' => 'ru', 'variant' => 'cv' },
'kv' => { 'layout' => 'ru', 'variant' => 'kom' },
'os' => { 'layout' => 'ru', 'variant' => 'os_legacy' },
'ru' => { 'layout' => 'ru' },
'sah' => { 'layout' => 'ru', 'variant' => 'sah' },
'tt' => { 'layout' => 'ru', 'variant' => 'tt' },
'udm' => { 'layout' => 'ru', 'variant' => 'udm' },
'xal' => { 'layout' => 'ru', 'variant' => 'xal' },
},
'SA' => {
'ar' => { 'layout' => 'ara' },
},
'SD' => {
'ar' => { 'layout' => 'ara' },
},
'SE' => {
'ru' => { 'layout' => 'se', 'variant' => 'rus' },
'se' => { 'layout' => 'se', 'variant' => 'smi' },
'sv' => { 'layout' => 'se' },
},
'SI' => {
'sl' => { 'layout' => 'si' },
},
'SK' => {
'sk' => { 'layout' => 'sk' },
},
'SV' => {
'es' => { 'layout' => 'latam' },
},
'SY' => {
'ar' => { 'layout' => 'ara' },
'ku' => { 'layout' => 'sy', 'variant' => 'ku' },
'syr' => { 'layout' => 'sy' },
},
'TH' => {
'th' => { 'layout' => 'th' },
},
'TJ' => {
'tg' => { 'layout' => 'tj' },
},
'TN' => {
'ar' => { 'layout' => 'ara' },
},
'TR' => {
'ku' => { 'layout' => 'tr', 'variant' => 'ku' },
'tr' => { 'layout' => 'tr' },
},
'UA' => {
'uk' => { 'layout' => 'ua' },
},
'US' => {
'chr' => { 'layout' => 'us', 'variant' => 'chr' },
'de' => { 'layout' => 'us', 'variant' => 'altgr-intl' },
'en' => { 'layout' => 'us' },
'es' => { 'layout' => 'latam' },
'fr' => { 'layout' => 'us', 'variant' => 'altgr-intl' },
},
'UY' => {
'es' => { 'layout' => 'latam' },
},
'UZ' => {
'uz' => { 'layout' => 'uz' },
},
'VE' => {
'es' => { 'layout' => 'latam' },
},
'VN' => {
'vi' => { 'layout' => 'vn' },
},
'YE' => {
'ar' => { 'layout' => 'ara' },
},
'ZA' => {
'en' => { 'layout' => 'za' },
},
);
%countries_keyboards = (
'AD' => { 'layout' => 'ad' },
'AE' => { 'layout' => 'ara' },
'AF' => { 'layout' => 'af' },
'AL' => { 'layout' => 'al' },
'AM' => { 'layout' => 'am' },
'AR' => { 'layout' => 'latam' },
'AZ' => { 'layout' => 'az' },
'BA' => { 'layout' => 'ba' },
'BD' => { 'layout' => 'bd' },
'BE' => { 'layout' => 'be' },
'BG' => { 'layout' => 'bg' },
'BH' => { 'layout' => 'ara' },
'BO' => { 'layout' => 'latam' },
'BR' => { 'layout' => 'br' },
'BT' => { 'layout' => 'bt' },
'BY' => { 'layout' => 'by' },
'CA' => { 'layout' => 'ca' },
'CD' => { 'layout' => 'cd' },
'CH' => { 'layout' => 'ch' },
'CL' => { 'layout' => 'latam' },
'CN' => { 'layout' => 'cn' },
'CO' => { 'layout' => 'latam' },
'CR' => { 'layout' => 'latam' },
'CU' => { 'layout' => 'latam' },
'CZ' => { 'layout' => 'cz' },
'DE' => { 'layout' => 'de' },
'DK' => { 'layout' => 'dk' },
'DO' => { 'layout' => 'latam' },
'DZ' => { 'layout' => 'ara' },
'EC' => { 'layout' => 'latam' },
'EE' => { 'layout' => 'ee' },
'EG' => { 'layout' => 'ara' },
'EH' => { 'layout' => 'ara' },
'ES' => { 'layout' => 'es' },
'ET' => { 'layout' => 'et' },
'FI' => { 'layout' => 'fi' },
'FO' => { 'layout' => 'fo' },
'FR' => { 'layout' => 'fr' },
'GB' => { 'layout' => 'gb' },
'GE' => { 'layout' => 'ge' },
'GH' => { 'layout' => 'gh' },
'GN' => { 'layout' => 'gn' },
'GR' => { 'layout' => 'gr' },
'GT' => { 'layout' => 'latam' },
'HN' => { 'layout' => 'latam' },
'HR' => { 'layout' => 'hr' },
'HT' => { 'layout' => 'latam' },
'HU' => { 'layout' => 'hu' },
'IE' => { 'layout' => 'ie' },
'IL' => { 'layout' => 'il' },
'IN' => { 'layout' => 'in' },
'IQ' => { 'layout' => 'iq' },
'IR' => { 'layout' => 'ir' },
'IS' => { 'layout' => 'is' },
'IT' => { 'layout' => 'it' },
'JO' => { 'layout' => 'ara' },
'JP' => { 'layout' => 'jp' },
'KG' => { 'layout' => 'kg' },
'KH' => { 'layout' => 'kh' },
'KR' => { 'layout' => 'kr' },
'KW' => { 'layout' => 'ara' },
'KZ' => { 'layout' => 'kz' },
'LA' => { 'layout' => 'la' },
'LB' => { 'layout' => 'ara' },
'LK' => { 'layout' => 'lk' },
'LT' => { 'layout' => 'lt' },
'LV' => { 'layout' => 'lv' },
'LY' => { 'layout' => 'ara' },
'MA' => { 'layout' => 'ara', 'ambiguous' => 1 },
'ME' => { 'layout' => 'me' },
'MK' => { 'layout' => 'mk' },
'MM' => { 'layout' => 'mm' },
'MN' => { 'layout' => 'mn' },
'MR' => { 'layout' => 'ara' },
'MT' => { 'layout' => 'mt' },
'MV' => { 'layout' => 'mv' },
'MX' => { 'layout' => 'latam' },
'NG' => { 'layout' => 'ng' },
'NI' => { 'layout' => 'latam' },
'NL' => { 'layout' => 'nl' },
'NO' => { 'layout' => 'no' },
'NP' => { 'layout' => 'np' },
'OM' => { 'layout' => 'ara' },
'PA' => { 'layout' => 'latam' },
'PE' => { 'layout' => 'latam' },
'PK' => { 'layout' => 'pk' },
'PL' => { 'layout' => 'pl' },
'PR' => { 'layout' => 'latam' },
'PS' => { 'layout' => 'ara' },
'PT' => { 'layout' => 'pt' },
'PY' => { 'layout' => 'latam' },
'QA' => { 'layout' => 'ara' },
'RO' => { 'layout' => 'ro' },
'RS' => { 'layout' => 'rs' },
'RU' => { 'layout' => 'ru' },
'SA' => { 'layout' => 'ara' },
'SD' => { 'layout' => 'ara' },
'SE' => { 'layout' => 'se' },
'SI' => { 'layout' => 'si' },
'SK' => { 'layout' => 'sk' },
'SV' => { 'layout' => 'latam' },
'SY' => { 'layout' => 'ara', 'ambiguous' => 1 },
'TH' => { 'layout' => 'th' },
'TJ' => { 'layout' => 'tj' },
'TN' => { 'layout' => 'ara' },
'TR' => { 'layout' => 'tr' },
'UA' => { 'layout' => 'ua' },
'US' => { 'layout' => 'us', 'ambiguous' => 1 },
'UY' => { 'layout' => 'latam' },
'UZ' => { 'layout' => 'uz' },
'VE' => { 'layout' => 'latam' },
'VN' => { 'layout' => 'vn' },
'YE' => { 'layout' => 'ara' },
'ZA' => { 'layout' => 'za' },
);
%languages_keyboards = (
'ak' => { 'layout' => 'gh', 'variant' => 'akan' },
'am' => { 'layout' => 'et' },
'ar' => { 'layout' => 'ara', 'ambiguous' => 1 },
'ast' => { 'layout' => 'es', 'variant' => 'ast' },
'az' => { 'layout' => 'az' },
'be' => { 'layout' => 'by' },
'ber' => { 'layout' => 'ma', 'variant' => 'tifinagh' },
'bg' => { 'layout' => 'bg' },
'bn' => { 'layout' => 'bd', 'ambiguous' => 1 },
'bo' => { 'layout' => 'cn', 'variant' => 'tib' },
'bs' => { 'layout' => 'ba' },
'ca' => { 'layout' => 'ad', 'ambiguous' => 1 },
'chr' => { 'layout' => 'us', 'variant' => 'chr' },
'cs' => { 'layout' => 'cz' },
'csb' => { 'layout' => 'pl', 'variant' => 'csb' },
'cv' => { 'layout' => 'ru', 'variant' => 'cv' },
'da' => { 'layout' => 'dk' },
'de' => { 'layout' => 'be', 'ambiguous' => 1 },
'dsb' => { 'layout' => 'de', 'variant' => 'dsb' },
'dv' => { 'layout' => 'mv' },
'dz' => { 'layout' => 'bt' },
'ee' => { 'layout' => 'gh', 'variant' => 'ewe' },
'el' => { 'layout' => 'gr' },
'en' => { 'layout' => 'us', 'ambiguous' => 1 },
'eo' => { 'layout' => 'epo' },
'es' => { 'layout' => 'latam', 'ambiguous' => 1 },
'et' => { 'layout' => 'ee' },
'fa' => { 'layout' => 'ir' },
'ff' => { 'layout' => 'gh', 'variant' => 'fula' },
'fi' => { 'layout' => 'fi' },
'fo' => { 'layout' => 'fo' },
'fr' => { 'layout' => 'be', 'ambiguous' => 1 },
'gaa' => { 'layout' => 'gh', 'variant' => 'ga' },
'gd' => { 'layout' => 'ie', 'variant' => 'CloGaelach' },
'gsw' => { 'layout' => 'ch' },
'gu' => { 'layout' => 'in', 'variant' => 'guj' },
'ha' => { 'layout' => 'gh', 'variant' => 'hausa', 'ambiguous' => 1 },
'he' => { 'layout' => 'il' },
'hi' => { 'layout' => 'in', 'variant' => 'bolnagri' },
'hr' => { 'layout' => 'hr' },
'hu' => { 'layout' => 'hu' },
'hy' => { 'layout' => 'am' },
'ig' => { 'layout' => 'ng', 'variant' => 'igbo' },
'is' => { 'layout' => 'is' },
'it' => { 'layout' => 'it' },
'iu' => { 'layout' => 'ca', 'variant' => 'ike' },
'ja' => { 'layout' => 'jp' },
'ka' => { 'layout' => 'ge', 'ambiguous' => 1 },
'kk' => { 'layout' => 'kz' },
'km' => { 'layout' => 'kh' },
'kn' => { 'layout' => 'in', 'variant' => 'kan' },
'ko' => { 'layout' => 'kr' },
'ku' => { 'layout' => 'iq', 'ambiguous' => 1 },
'kv' => { 'layout' => 'ru', 'variant' => 'kom' },
'ky' => { 'layout' => 'kg' },
'lo' => { 'layout' => 'la' },
'lt' => { 'layout' => 'lt' },
'lv' => { 'layout' => 'lv' },
'mi' => { 'layout' => 'mao' },
'mk' => { 'layout' => 'mk' },
'ml' => { 'layout' => 'in', 'variant' => 'mal' },
'mng' => { 'layout' => 'mn' },
'mt' => { 'layout' => 'mt' },
'my' => { 'layout' => 'mm' },
'ne' => { 'layout' => 'np' },
'nl' => { 'layout' => 'nl' },
'no' => { 'layout' => 'no' },
'or' => { 'layout' => 'in', 'variant' => 'ori' },
'os' => { 'layout' => 'ge', 'variant' => 'os', 'ambiguous' => 1 },
'pa' => { 'layout' => 'in', 'variant' => 'guru' },
'pl' => { 'layout' => 'pl' },
'ps' => { 'layout' => 'af', 'variant' => 'ps' },
'pt' => { 'layout' => 'br', 'ambiguous' => 1 },
'ro' => { 'layout' => 'ro' },
'ru' => { 'layout' => 'ru', 'ambiguous' => 1 },
'sah' => { 'layout' => 'ru', 'variant' => 'sah' },
'se' => { 'layout' => 'fi', 'variant' => 'smi', 'ambiguous' => 1 },
'si' => { 'layout' => 'lk' },
'sk' => { 'layout' => 'sk' },
'sl' => { 'layout' => 'si' },
'smi' => { 'layout' => 'fi', 'variant' => 'smi' },
'sq' => { 'layout' => 'al' },
'sr' => { 'layout' => 'me', 'ambiguous' => 1 },
'sv' => { 'layout' => 'se' },
'syr' => { 'layout' => 'sy' },
'ta' => { 'layout' => 'in', 'variant' => 'tam_unicode', 'ambiguous' => 1 },
'te' => { 'layout' => 'in', 'variant' => 'tel' },
'tg' => { 'layout' => 'tj' },
'th' => { 'layout' => 'th' },
'tr' => { 'layout' => 'tr' },
'tt' => { 'layout' => 'ru', 'variant' => 'tt' },
'udm' => { 'layout' => 'ru', 'variant' => 'udm' },
'uk' => { 'layout' => 'ua' },
'ur' => { 'layout' => 'pk' },
'uz' => { 'layout' => 'uz' },
'vi' => { 'layout' => 'vn' },
'xal' => { 'layout' => 'ru', 'variant' => 'xal' },
'yo' => { 'layout' => 'ng', 'variant' => 'yoruba' },
'zh' => { 'layout' => 'cn' },
);
{ 'layout' => 'ad' },
{ 'layout' => 'af' },
{ 'layout' => 'af', 'variant' => 'ps' },
{ 'layout' => 'af', 'variant' => 'uz' },
{ 'layout' => 'al' },
{ 'layout' => 'am' },
{ 'layout' => 'ara' },
{ 'layout' => 'az' },
{ 'layout' => 'ba' },
{ 'layout' => 'bd' },
{ 'layout' => 'be' },
{ 'layout' => 'bg' },
{ 'layout' => 'br' },
{ 'layout' => 'br', 'variant' => 'nativo-epo' },
{ 'layout' => 'bt' },
{ 'layout' => 'by' },
{ 'layout' => 'ca' },
{ 'layout' => 'ca', 'variant' => 'eng' },
{ 'layout' => 'ca', 'variant' => 'ike' },
{ 'layout' => 'cd' },
{ 'layout' => 'ch' },
{ 'layout' => 'ch', 'variant' => 'fr' },
{ 'layout' => 'cn' },
{ 'layout' => 'cn', 'variant' => 'tib' },
{ 'layout' => 'cz' },
{ 'layout' => 'de' },
{ 'layout' => 'de', 'variant' => 'dsb' },
{ 'layout' => 'dk' },
{ 'layout' => 'ee' },
{ 'layout' => 'epo' },
{ 'layout' => 'es' },
{ 'layout' => 'es', 'variant' => 'ast' },
{ 'layout' => 'es', 'variant' => 'cat' },
{ 'layout' => 'et' },
{ 'layout' => 'fi' },
{ 'layout' => 'fi', 'variant' => 'smi' },
{ 'layout' => 'fo' },
{ 'layout' => 'fr' },
{ 'layout' => 'fr', 'variant' => 'geo' },
{ 'layout' => 'gb' },
{ 'layout' => 'ge' },
{ 'layout' => 'ge', 'variant' => 'os' },
{ 'layout' => 'ge', 'variant' => 'ru' },
{ 'layout' => 'gh' },
{ 'layout' => 'gh', 'variant' => 'akan' },
{ 'layout' => 'gh', 'variant' => 'ewe' },
{ 'layout' => 'gh', 'variant' => 'fula' },
{ 'layout' => 'gh', 'variant' => 'ga' },
{ 'layout' => 'gh', 'variant' => 'hausa' },
{ 'layout' => 'gn' },
{ 'layout' => 'gr' },
{ 'layout' => 'hr' },
{ 'layout' => 'hu' },
{ 'layout' => 'ie' },
{ 'layout' => 'ie', 'variant' => 'CloGaelach' },
{ 'layout' => 'il' },
{ 'layout' => 'in' },
{ 'layout' => 'in', 'variant' => 'ben' },
{ 'layout' => 'in', 'variant' => 'bolnagri' },
{ 'layout' => 'in', 'variant' => 'guj' },
{ 'layout' => 'in', 'variant' => 'guru' },
{ 'layout' => 'in', 'variant' => 'kan' },
{ 'layout' => 'in', 'variant' => 'mal' },
{ 'layout' => 'in', 'variant' => 'ori' },
{ 'layout' => 'in', 'variant' => 'tam_unicode' },
{ 'layout' => 'in', 'variant' => 'tel' },
{ 'layout' => 'in', 'variant' => 'urd-phonetic' },
{ 'layout' => 'iq' },
{ 'layout' => 'ir' },
{ 'layout' => 'ir', 'variant' => 'ku' },
{ 'layout' => 'is' },
{ 'layout' => 'it' },
{ 'layout' => 'it', 'variant' => 'geo' },
{ 'layout' => 'jp' },
{ 'layout' => 'kg' },
{ 'layout' => 'kh' },
{ 'layout' => 'kr' },
{ 'layout' => 'kz' },
{ 'layout' => 'kz', 'variant' => 'ruskaz' },
{ 'layout' => 'la' },
{ 'layout' => 'latam' },
{ 'layout' => 'lk' },
{ 'layout' => 'lk', 'variant' => 'tam_unicode' },
{ 'layout' => 'lt' },
{ 'layout' => 'lv' },
{ 'layout' => 'mao' },
{ 'layout' => 'ma', 'variant' => 'french' },
{ 'layout' => 'ma', 'variant' => 'tifinagh' },
{ 'layout' => 'me' },
{ 'layout' => 'mk' },
{ 'layout' => 'mm' },
{ 'layout' => 'mn' },
{ 'layout' => 'mt' },
{ 'layout' => 'mv' },
{ 'layout' => 'ng' },
{ 'layout' => 'ng', 'variant' => 'hausa' },
{ 'layout' => 'ng', 'variant' => 'igbo' },
{ 'layout' => 'ng', 'variant' => 'yoruba' },
{ 'layout' => 'nl' },
{ 'layout' => 'no' },
{ 'layout' => 'no', 'variant' => 'smi' },
{ 'layout' => 'np' },
{ 'layout' => 'pk' },
{ 'layout' => 'pk', 'variant' => 'ara' },
{ 'layout' => 'pl' },
{ 'layout' => 'pl', 'variant' => 'csb' },
{ 'layout' => 'pl', 'variant' => 'ru_phonetic_dvorak' },
{ 'layout' => 'pt' },
{ 'layout' => 'pt', 'variant' => 'nativo-epo' },
{ 'layout' => 'ro' },
{ 'layout' => 'rs' },
{ 'layout' => 'ru' },
{ 'layout' => 'ru', 'variant' => 'cv' },
{ 'layout' => 'ru', 'variant' => 'kom' },
{ 'layout' => 'ru', 'variant' => 'os_legacy' },
{ 'layout' => 'ru', 'variant' => 'sah' },
{ 'layout' => 'ru', 'variant' => 'tt' },
{ 'layout' => 'ru', 'variant' => 'udm' },
{ 'layout' => 'ru', 'variant' => 'xal' },
{ 'layout' => 'se' },
{ 'layout' => 'se', 'variant' => 'rus' },
{ 'layout' => 'se', 'variant' => 'smi' },
{ 'layout' => 'si' },
{ 'layout' => 'sk' },
{ 'layout' => 'sy' },
{ 'layout' => 'sy', 'variant' => 'ku' },
{ 'layout' => 'th' },
{ 'layout' => 'tj' },
{ 'layout' => 'tr' },
{ 'layout' => 'tr', 'variant' => 'ku' },
{ 'layout' => 'ua' },
{ 'layout' => 'us' },
{ 'layout' => 'us', 'variant' => 'altgr-intl' },
{ 'layout' => 'us', 'variant' => 'chr' },
{ 'layout' => 'uz' },
{ 'layout' => 'vn' },
{ 'layout' => 'za' },
Reply to: