Home | History | Annotate | Download | only in internal
      1 /*
      2  * Copyright (C) 2014 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.android.inputmethod.keyboard.internal;
     18 
     19 import java.util.HashMap;
     20 import java.util.Locale;
     21 
     22 /**
     23  * !!!!! DO NOT EDIT THIS FILE !!!!!
     24  *
     25  * This file is generated by tools/make-keyboard-text. The base template file is
     26  *   tools/make-keyboard-text/res/src/com/android/inputmethod/keyboard/internal/
     27  *   KeyboardTextsTable.tmpl
     28  *
     29  * This file must be updated when any text resources in keyboard layout files have been changed.
     30  * These text resources are referred as "!text/<resource_name>" in keyboard XML definitions,
     31  * and should be defined in
     32  *   tools/make-keyboard-text/res/values-<locale>/donottranslate-more-keys.xml
     33  *
     34  * To update this file, please run the following commands.
     35  *   $ cd $ANDROID_BUILD_TOP
     36  *   $ mmm packages/inputmethods/LatinIME/tools/make-keyboard-text
     37  *   $ make-keyboard-text -java packages/inputmethods/LatinIME/java
     38  *
     39  * The updated source file will be generated to the following path (this file).
     40  *   packages/inputmethods/LatinIME/java/src/com/android/inputmethod/keyboard/internal/
     41  *   KeyboardTextsTable.java
     42  */
     43 public final class KeyboardTextsTable {
     44     // Name to index map.
     45     private static final HashMap<String, Integer> sNameToIndexesMap = new HashMap<>();
     46     // Locale to texts table map.
     47     private static final HashMap<String, String[]> sLocaleToTextsTableMap = new HashMap<>();
     48     // TODO: Remove this variable after debugging.
     49     // Texts table to locale maps.
     50     private static final HashMap<String[], String> sTextsTableToLocaleMap = new HashMap<>();
     51 
     52     public static String getText(final String name, final String[] textsTable) {
     53         final Integer indexObj = sNameToIndexesMap.get(name);
     54         if (indexObj == null) {
     55             throw new RuntimeException("Unknown text name=" + name + " locale="
     56                     + sTextsTableToLocaleMap.get(textsTable));
     57         }
     58         final int index = indexObj;
     59         final String text = (index < textsTable.length) ? textsTable[index] : null;
     60         if (text != null) {
     61             return text;
     62         }
     63         // Sanity check.
     64         if (index >= 0 && index < TEXTS_DEFAULT.length) {
     65             return TEXTS_DEFAULT[index];
     66         }
     67         // Throw exception for debugging purpose.
     68         throw new RuntimeException("Illegal index=" + index + " for name=" + name
     69                 + " locale=" + sTextsTableToLocaleMap.get(textsTable));
     70     }
     71 
     72     public static String[] getTextsTable(final Locale locale) {
     73         final String localeKey = locale.toString();
     74         if (sLocaleToTextsTableMap.containsKey(localeKey)) {
     75             return sLocaleToTextsTableMap.get(localeKey);
     76         }
     77         final String languageKey = locale.getLanguage();
     78         if (sLocaleToTextsTableMap.containsKey(languageKey)) {
     79             return sLocaleToTextsTableMap.get(languageKey);
     80         }
     81         return TEXTS_DEFAULT;
     82     }
     83 
     84     private static final String[] NAMES = {
     85     //  /* index:histogram */ "name",
     86         /*   0:32 */ "morekeys_a",
     87         /*   1:32 */ "morekeys_o",
     88         /*   2:30 */ "morekeys_u",
     89         /*   3:30 */ "keylabel_to_alpha",
     90         /*   4:29 */ "morekeys_e",
     91         /*   5:28 */ "morekeys_i",
     92         /*   6:23 */ "morekeys_c",
     93         /*   7:23 */ "double_quotes",
     94         /*   8:22 */ "morekeys_n",
     95         /*   9:22 */ "single_quotes",
     96         /*  10:20 */ "morekeys_s",
     97         /*  11:17 */ "keyspec_currency",
     98         /*  12:14 */ "morekeys_y",
     99         /*  13:13 */ "morekeys_d",
    100         /*  14:12 */ "morekeys_z",
    101         /*  15:10 */ "morekeys_t",
    102         /*  16:10 */ "morekeys_l",
    103         /*  17: 9 */ "morekeys_g",
    104         /*  18: 9 */ "single_angle_quotes",
    105         /*  19: 9 */ "double_angle_quotes",
    106         /*  20: 8 */ "morekeys_r",
    107         /*  21: 6 */ "morekeys_k",
    108         /*  22: 6 */ "morekeys_cyrillic_ie",
    109         /*  23: 5 */ "keyspec_nordic_row1_11",
    110         /*  24: 5 */ "keyspec_nordic_row2_10",
    111         /*  25: 5 */ "keyspec_nordic_row2_11",
    112         /*  26: 5 */ "morekeys_nordic_row2_10",
    113         /*  27: 5 */ "keyspec_east_slavic_row1_9",
    114         /*  28: 5 */ "keyspec_east_slavic_row2_2",
    115         /*  29: 5 */ "keyspec_east_slavic_row2_11",
    116         /*  30: 5 */ "keyspec_east_slavic_row3_5",
    117         /*  31: 5 */ "morekeys_cyrillic_soft_sign",
    118         /*  32: 5 */ "keyspec_symbols_1",
    119         /*  33: 5 */ "keyspec_symbols_2",
    120         /*  34: 5 */ "keyspec_symbols_3",
    121         /*  35: 5 */ "keyspec_symbols_4",
    122         /*  36: 5 */ "keyspec_symbols_5",
    123         /*  37: 5 */ "keyspec_symbols_6",
    124         /*  38: 5 */ "keyspec_symbols_7",
    125         /*  39: 5 */ "keyspec_symbols_8",
    126         /*  40: 5 */ "keyspec_symbols_9",
    127         /*  41: 5 */ "keyspec_symbols_0",
    128         /*  42: 5 */ "keylabel_to_symbol",
    129         /*  43: 5 */ "additional_morekeys_symbols_1",
    130         /*  44: 5 */ "additional_morekeys_symbols_2",
    131         /*  45: 5 */ "additional_morekeys_symbols_3",
    132         /*  46: 5 */ "additional_morekeys_symbols_4",
    133         /*  47: 5 */ "additional_morekeys_symbols_5",
    134         /*  48: 5 */ "additional_morekeys_symbols_6",
    135         /*  49: 5 */ "additional_morekeys_symbols_7",
    136         /*  50: 5 */ "additional_morekeys_symbols_8",
    137         /*  51: 5 */ "additional_morekeys_symbols_9",
    138         /*  52: 5 */ "additional_morekeys_symbols_0",
    139         /*  53: 4 */ "morekeys_nordic_row2_11",
    140         /*  54: 4 */ "morekeys_punctuation",
    141         /*  55: 4 */ "keyspec_tablet_comma",
    142         /*  56: 3 */ "keyspec_swiss_row1_11",
    143         /*  57: 3 */ "keyspec_swiss_row2_10",
    144         /*  58: 3 */ "keyspec_swiss_row2_11",
    145         /*  59: 3 */ "morekeys_swiss_row1_11",
    146         /*  60: 3 */ "morekeys_swiss_row2_10",
    147         /*  61: 3 */ "morekeys_swiss_row2_11",
    148         /*  62: 3 */ "morekeys_star",
    149         /*  63: 3 */ "keyspec_left_parenthesis",
    150         /*  64: 3 */ "keyspec_right_parenthesis",
    151         /*  65: 3 */ "keyspec_left_square_bracket",
    152         /*  66: 3 */ "keyspec_right_square_bracket",
    153         /*  67: 3 */ "keyspec_left_curly_bracket",
    154         /*  68: 3 */ "keyspec_right_curly_bracket",
    155         /*  69: 3 */ "keyspec_less_than",
    156         /*  70: 3 */ "keyspec_greater_than",
    157         /*  71: 3 */ "keyspec_less_than_equal",
    158         /*  72: 3 */ "keyspec_greater_than_equal",
    159         /*  73: 3 */ "keyspec_left_double_angle_quote",
    160         /*  74: 3 */ "keyspec_right_double_angle_quote",
    161         /*  75: 3 */ "keyspec_left_single_angle_quote",
    162         /*  76: 3 */ "keyspec_right_single_angle_quote",
    163         /*  77: 3 */ "keyspec_comma",
    164         /*  78: 3 */ "morekeys_tablet_comma",
    165         /*  79: 3 */ "keyhintlabel_period",
    166         /*  80: 3 */ "morekeys_tablet_period",
    167         /*  81: 3 */ "morekeys_question",
    168         /*  82: 2 */ "morekeys_h",
    169         /*  83: 2 */ "morekeys_w",
    170         /*  84: 2 */ "morekeys_east_slavic_row2_2",
    171         /*  85: 2 */ "morekeys_cyrillic_u",
    172         /*  86: 2 */ "morekeys_cyrillic_en",
    173         /*  87: 2 */ "morekeys_cyrillic_ghe",
    174         /*  88: 2 */ "morekeys_cyrillic_o",
    175         /*  89: 2 */ "morekeys_cyrillic_i",
    176         /*  90: 2 */ "keyspec_south_slavic_row1_6",
    177         /*  91: 2 */ "keyspec_south_slavic_row2_11",
    178         /*  92: 2 */ "keyspec_south_slavic_row3_1",
    179         /*  93: 2 */ "keyspec_south_slavic_row3_8",
    180         /*  94: 2 */ "morekeys_tablet_punctuation",
    181         /*  95: 2 */ "keyspec_spanish_row2_10",
    182         /*  96: 2 */ "morekeys_bullet",
    183         /*  97: 2 */ "morekeys_left_parenthesis",
    184         /*  98: 2 */ "morekeys_right_parenthesis",
    185         /*  99: 2 */ "morekeys_arabic_diacritics",
    186         /* 100: 2 */ "keyhintlabel_tablet_comma",
    187         /* 101: 2 */ "keyspec_period",
    188         /* 102: 2 */ "morekeys_period",
    189         /* 103: 2 */ "keyspec_tablet_period",
    190         /* 104: 2 */ "keyhintlabel_tablet_period",
    191         /* 105: 2 */ "keyspec_symbols_question",
    192         /* 106: 2 */ "keyspec_symbols_semicolon",
    193         /* 107: 2 */ "keyspec_symbols_percent",
    194         /* 108: 2 */ "morekeys_symbols_semicolon",
    195         /* 109: 2 */ "morekeys_symbols_percent",
    196         /* 110: 1 */ "morekeys_v",
    197         /* 111: 1 */ "morekeys_j",
    198         /* 112: 1 */ "morekeys_q",
    199         /* 113: 1 */ "morekeys_x",
    200         /* 114: 1 */ "keyspec_q",
    201         /* 115: 1 */ "keyspec_w",
    202         /* 116: 1 */ "keyspec_y",
    203         /* 117: 1 */ "keyspec_x",
    204         /* 118: 1 */ "morekeys_east_slavic_row2_11",
    205         /* 119: 1 */ "morekeys_cyrillic_ka",
    206         /* 120: 1 */ "morekeys_cyrillic_a",
    207         /* 121: 1 */ "morekeys_currency_dollar",
    208         /* 122: 1 */ "morekeys_plus",
    209         /* 123: 1 */ "morekeys_less_than",
    210         /* 124: 1 */ "morekeys_greater_than",
    211         /* 125: 1 */ "morekeys_exclamation",
    212         /* 126: 0 */ "morekeys_currency_generic",
    213         /* 127: 0 */ "morekeys_symbols_1",
    214         /* 128: 0 */ "morekeys_symbols_2",
    215         /* 129: 0 */ "morekeys_symbols_3",
    216         /* 130: 0 */ "morekeys_symbols_4",
    217         /* 131: 0 */ "morekeys_symbols_5",
    218         /* 132: 0 */ "morekeys_symbols_6",
    219         /* 133: 0 */ "morekeys_symbols_7",
    220         /* 134: 0 */ "morekeys_symbols_8",
    221         /* 135: 0 */ "morekeys_symbols_9",
    222         /* 136: 0 */ "morekeys_symbols_0",
    223         /* 137: 0 */ "morekeys_am_pm",
    224         /* 138: 0 */ "keyspec_settings",
    225         /* 139: 0 */ "keyspec_shortcut",
    226         /* 140: 0 */ "keyspec_action_next",
    227         /* 141: 0 */ "keyspec_action_previous",
    228         /* 142: 0 */ "keylabel_to_more_symbol",
    229         /* 143: 0 */ "keylabel_tablet_to_more_symbol",
    230         /* 144: 0 */ "keylabel_to_phone_numeric",
    231         /* 145: 0 */ "keylabel_to_phone_symbols",
    232         /* 146: 0 */ "keylabel_time_am",
    233         /* 147: 0 */ "keylabel_time_pm",
    234         /* 148: 0 */ "keyspec_popular_domain",
    235         /* 149: 0 */ "morekeys_popular_domain",
    236         /* 150: 0 */ "keyspecs_left_parenthesis_more_keys",
    237         /* 151: 0 */ "keyspecs_right_parenthesis_more_keys",
    238         /* 152: 0 */ "single_laqm_raqm",
    239         /* 153: 0 */ "single_raqm_laqm",
    240         /* 154: 0 */ "double_laqm_raqm",
    241         /* 155: 0 */ "double_raqm_laqm",
    242         /* 156: 0 */ "single_lqm_rqm",
    243         /* 157: 0 */ "single_9qm_lqm",
    244         /* 158: 0 */ "single_9qm_rqm",
    245         /* 159: 0 */ "single_rqm_9qm",
    246         /* 160: 0 */ "double_lqm_rqm",
    247         /* 161: 0 */ "double_9qm_lqm",
    248         /* 162: 0 */ "double_9qm_rqm",
    249         /* 163: 0 */ "double_rqm_9qm",
    250         /* 164: 0 */ "morekeys_single_quote",
    251         /* 165: 0 */ "morekeys_double_quote",
    252         /* 166: 0 */ "morekeys_tablet_double_quote",
    253         /* 167: 0 */ "keyspec_emoji_action_key",
    254     };
    255 
    256     private static final String EMPTY = "";
    257 
    258     /* Default texts */
    259     private static final String[] TEXTS_DEFAULT = {
    260         /* morekeys_a ~ */
    261         EMPTY, EMPTY, EMPTY,
    262         /* ~ morekeys_u */
    263         // Label for "switch to alphabetic" key.
    264         /* keylabel_to_alpha */ "ABC",
    265         /* morekeys_e ~ */
    266         EMPTY, EMPTY, EMPTY,
    267         /* ~ morekeys_c */
    268         /* double_quotes */ "!text/double_lqm_rqm",
    269         /* morekeys_n */ EMPTY,
    270         /* single_quotes */ "!text/single_lqm_rqm",
    271         /* morekeys_s */ EMPTY,
    272         /* keyspec_currency */ "$",
    273         /* morekeys_y ~ */
    274         EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY,
    275         /* ~ morekeys_g */
    276         /* single_angle_quotes */ "!text/single_laqm_raqm",
    277         /* double_angle_quotes */ "!text/double_laqm_raqm",
    278         /* morekeys_r ~ */
    279         EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY,
    280         /* ~ morekeys_cyrillic_soft_sign */
    281         /* keyspec_symbols_1 */ "1",
    282         /* keyspec_symbols_2 */ "2",
    283         /* keyspec_symbols_3 */ "3",
    284         /* keyspec_symbols_4 */ "4",
    285         /* keyspec_symbols_5 */ "5",
    286         /* keyspec_symbols_6 */ "6",
    287         /* keyspec_symbols_7 */ "7",
    288         /* keyspec_symbols_8 */ "8",
    289         /* keyspec_symbols_9 */ "9",
    290         /* keyspec_symbols_0 */ "0",
    291         // Label for "switch to symbols" key.
    292         /* keylabel_to_symbol */ "?123",
    293         /* additional_morekeys_symbols_1 ~ */
    294         EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY,
    295         /* ~ morekeys_nordic_row2_11 */
    296         /* morekeys_punctuation */ "!autoColumnOrder!8,\\,,?,!,#,!text/keyspec_right_parenthesis,!text/keyspec_left_parenthesis,/,;,',@,:,-,\",+,\\%,&",
    297         /* keyspec_tablet_comma */ ",",
    298         /* keyspec_swiss_row1_11 ~ */
    299         EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY,
    300         /* ~ morekeys_swiss_row2_11 */
    301         // U+2020: "" DAGGER
    302         // U+2021: "" DOUBLE DAGGER
    303         // U+2605: "" BLACK STAR
    304         /* morekeys_star */ "\u2020,\u2021,\u2605",
    305         // The all letters need to be mirrored are found at
    306         // http://www.unicode.org/Public/6.1.0/ucd/BidiMirroring.txt
    307         // U+2039: "" SINGLE LEFT-POINTING ANGLE QUOTATION MARK
    308         // U+203A: "" SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
    309         // U+2264: "" LESS-THAN OR EQUAL TO
    310         // U+2265: "" GREATER-THAN EQUAL TO
    311         // U+00AB: "" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
    312         // U+00BB: "" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
    313         /* keyspec_left_parenthesis */ "(",
    314         /* keyspec_right_parenthesis */ ")",
    315         /* keyspec_left_square_bracket */ "[",
    316         /* keyspec_right_square_bracket */ "]",
    317         /* keyspec_left_curly_bracket */ "{",
    318         /* keyspec_right_curly_bracket */ "}",
    319         /* keyspec_less_than */ "<",
    320         /* keyspec_greater_than */ ">",
    321         /* keyspec_less_than_equal */ "\u2264",
    322         /* keyspec_greater_than_equal */ "\u2265",
    323         /* keyspec_left_double_angle_quote */ "\u00AB",
    324         /* keyspec_right_double_angle_quote */ "\u00BB",
    325         /* keyspec_left_single_angle_quote */ "\u2039",
    326         /* keyspec_right_single_angle_quote */ "\u203A",
    327         // Comma key
    328         /* keyspec_comma */ ",",
    329         /* morekeys_tablet_comma */ EMPTY,
    330         /* keyhintlabel_period */ EMPTY,
    331         /* morekeys_tablet_period */ "!text/morekeys_tablet_punctuation",
    332         // U+00BF: "" INVERTED QUESTION MARK
    333         /* morekeys_question */ "\u00BF",
    334         /* morekeys_h ~ */
    335         EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY,
    336         /* ~ keyspec_south_slavic_row3_8 */
    337         /* morekeys_tablet_punctuation */ "!autoColumnOrder!7,\\,,',#,!text/keyspec_right_parenthesis,!text/keyspec_left_parenthesis,/,;,@,:,-,\",+,\\%,&",
    338         // U+00F1: "" LATIN SMALL LETTER N WITH TILDE
    339         /* keyspec_spanish_row2_10 */ "\u00F1",
    340         // U+266A: "" EIGHTH NOTE
    341         // U+2665: "" BLACK HEART SUIT
    342         // U+2660: "" BLACK SPADE SUIT
    343         // U+2666: "" BLACK DIAMOND SUIT
    344         // U+2663: "" BLACK CLUB SUIT
    345         /* morekeys_bullet */ "\u266A,\u2665,\u2660,\u2666,\u2663",
    346         /* morekeys_left_parenthesis */ "!fixedColumnOrder!3,!text/keyspecs_left_parenthesis_more_keys",
    347         /* morekeys_right_parenthesis */ "!fixedColumnOrder!3,!text/keyspecs_right_parenthesis_more_keys",
    348         /* morekeys_arabic_diacritics */ EMPTY,
    349         /* keyhintlabel_tablet_comma */ EMPTY,
    350         // Period key
    351         /* keyspec_period */ ".",
    352         /* morekeys_period */ "!text/morekeys_punctuation",
    353         /* keyspec_tablet_period */ ".",
    354         /* keyhintlabel_tablet_period */ EMPTY,
    355         /* keyspec_symbols_question */ "?",
    356         /* keyspec_symbols_semicolon */ ";",
    357         /* keyspec_symbols_percent */ "%",
    358         /* morekeys_symbols_semicolon */ EMPTY,
    359         // U+2030: "" PER MILLE SIGN
    360         /* morekeys_symbols_percent */ "\u2030",
    361         /* morekeys_v ~ */
    362         EMPTY, EMPTY, EMPTY, EMPTY,
    363         /* ~ morekeys_x */
    364         /* keyspec_q */ "q",
    365         /* keyspec_w */ "w",
    366         /* keyspec_y */ "y",
    367         /* keyspec_x */ "x",
    368         /* morekeys_east_slavic_row2_11 ~ */
    369         EMPTY, EMPTY, EMPTY,
    370         /* ~ morekeys_cyrillic_a */
    371         // U+00A2: "" CENT SIGN
    372         // U+00A3: "" POUND SIGN
    373         // U+20AC: "" EURO SIGN
    374         // U+00A5: "" YEN SIGN
    375         // U+20B1: "" PESO SIGN
    376         /* morekeys_currency_dollar */ "\u00A2,\u00A3,\u20AC,\u00A5,\u20B1",
    377         // U+00B1: "" PLUS-MINUS SIGN
    378         /* morekeys_plus */ "\u00B1",
    379         /* morekeys_less_than */ "!fixedColumnOrder!3,!text/keyspec_left_single_angle_quote,!text/keyspec_less_than_equal,!text/keyspec_left_double_angle_quote",
    380         /* morekeys_greater_than */ "!fixedColumnOrder!3,!text/keyspec_right_single_angle_quote,!text/keyspec_greater_than_equal,!text/keyspec_right_double_angle_quote",
    381         // U+00A1: "" INVERTED EXCLAMATION MARK
    382         /* morekeys_exclamation */ "\u00A1",
    383         /* morekeys_currency_generic */ "$,\u00A2,\u20AC,\u00A3,\u00A5,\u20B1",
    384         // U+00B9: "" SUPERSCRIPT ONE
    385         // U+00BD: "" VULGAR FRACTION ONE HALF
    386         // U+2153: "" VULGAR FRACTION ONE THIRD
    387         // U+00BC: "" VULGAR FRACTION ONE QUARTER
    388         // U+215B: "" VULGAR FRACTION ONE EIGHTH
    389         /* morekeys_symbols_1 */ "\u00B9,\u00BD,\u2153,\u00BC,\u215B",
    390         // U+00B2: "" SUPERSCRIPT TWO
    391         // U+2154: "" VULGAR FRACTION TWO THIRDS
    392         /* morekeys_symbols_2 */ "\u00B2,\u2154",
    393         // U+00B3: "" SUPERSCRIPT THREE
    394         // U+00BE: "" VULGAR FRACTION THREE QUARTERS
    395         // U+215C: "" VULGAR FRACTION THREE EIGHTHS
    396         /* morekeys_symbols_3 */ "\u00B3,\u00BE,\u215C",
    397         // U+2074: "" SUPERSCRIPT FOUR
    398         /* morekeys_symbols_4 */ "\u2074",
    399         // U+215D: "" VULGAR FRACTION FIVE EIGHTHS
    400         /* morekeys_symbols_5 */ "\u215D",
    401         /* morekeys_symbols_6 */ EMPTY,
    402         // U+215E: "" VULGAR FRACTION SEVEN EIGHTHS
    403         /* morekeys_symbols_7 */ "\u215E",
    404         /* morekeys_symbols_8 */ EMPTY,
    405         /* morekeys_symbols_9 */ EMPTY,
    406         // U+207F: "" SUPERSCRIPT LATIN SMALL LETTER N
    407         // U+2205: "" EMPTY SET
    408         /* morekeys_symbols_0 */ "\u207F,\u2205",
    409         /* morekeys_am_pm */ "!fixedColumnOrder!2,!hasLabels!,!text/keylabel_time_am,!text/keylabel_time_pm",
    410         /* keyspec_settings */ "!icon/settings_key|!code/key_settings",
    411         /* keyspec_shortcut */ "!icon/shortcut_key|!code/key_shortcut",
    412         /* keyspec_action_next */ "!hasLabels!,!text/label_next_key|!code/key_action_next",
    413         /* keyspec_action_previous */ "!hasLabels!,!text/label_previous_key|!code/key_action_previous",
    414         // Label for "switch to more symbol" modifier key ("= \ <"). Must be short to fit on key!
    415         /* keylabel_to_more_symbol */ "= \\\\ <",
    416         // Label for "switch to more symbol" modifier key on tablets.  Must be short to fit on key!
    417         /* keylabel_tablet_to_more_symbol */ "~ [ <",
    418         // Label for "switch to phone numeric" key.  Must be short to fit on key!
    419         /* keylabel_to_phone_numeric */ "123",
    420         // Label for "switch to phone symbols" key.  Must be short to fit on key!
    421         // U+FF0A: "" FULLWIDTH ASTERISK
    422         // U+FF03: "" FULLWIDTH NUMBER SIGN
    423         /* keylabel_to_phone_symbols */ "\uFF0A\uFF03",
    424         // Key label for "ante meridiem"
    425         /* keylabel_time_am */ "AM",
    426         // Key label for "post meridiem"
    427         /* keylabel_time_pm */ "PM",
    428         /* keyspec_popular_domain */ ".com",
    429         // popular web domains for the locale - most popular, displayed on the keyboard
    430         /* morekeys_popular_domain */ "!hasLabels!,.net,.org,.gov,.edu",
    431         /* keyspecs_left_parenthesis_more_keys */ "!text/keyspec_less_than,!text/keyspec_left_curly_bracket,!text/keyspec_left_square_bracket",
    432         /* keyspecs_right_parenthesis_more_keys */ "!text/keyspec_greater_than,!text/keyspec_right_curly_bracket,!text/keyspec_right_square_bracket",
    433         // The following characters don't need BIDI mirroring.
    434         // U+2018: "" LEFT SINGLE QUOTATION MARK
    435         // U+2019: "" RIGHT SINGLE QUOTATION MARK
    436         // U+201A: "" SINGLE LOW-9 QUOTATION MARK
    437         // U+201C: "" LEFT DOUBLE QUOTATION MARK
    438         // U+201D: "" RIGHT DOUBLE QUOTATION MARK
    439         // U+201E: "" DOUBLE LOW-9 QUOTATION MARK
    440         // Abbreviations are:
    441         // laqm: LEFT-POINTING ANGLE QUOTATION MARK
    442         // raqm: RIGHT-POINTING ANGLE QUOTATION MARK
    443         // lqm: LEFT QUOTATION MARK
    444         // rqm: RIGHT QUOTATION MARK
    445         // 9qm: LOW-9 QUOTATION MARK
    446         // The following each quotation mark pair consist of
    447         // <opening quotation mark>, <closing quotation mark>
    448         // and is named after (single|double)_<opening quotation mark>_<closing quotation mark>.
    449         /* single_laqm_raqm */ "!text/keyspec_left_single_angle_quote,!text/keyspec_right_single_angle_quote",
    450         /* single_raqm_laqm */ "!text/keyspec_right_single_angle_quote,!text/keyspec_left_single_angle_quote",
    451         /* double_laqm_raqm */ "!text/keyspec_left_double_angle_quote,!text/keyspec_right_double_angle_quote",
    452         /* double_raqm_laqm */ "!text/keyspec_right_double_angle_quote,!text/keyspec_left_double_angle_quote",
    453         // The following each quotation mark triplet consists of
    454         // <another quotation mark>, <opening quotation mark>, <closing quotation mark>
    455         // and is named after (single|double)_<opening quotation mark>_<closing quotation mark>.
    456         /* single_lqm_rqm */ "\u201A,\u2018,\u2019",
    457         /* single_9qm_lqm */ "\u2019,\u201A,\u2018",
    458         /* single_9qm_rqm */ "\u2018,\u201A,\u2019",
    459         /* single_rqm_9qm */ "\u2018,\u2019,\u201A",
    460         /* double_lqm_rqm */ "\u201E,\u201C,\u201D",
    461         /* double_9qm_lqm */ "\u201D,\u201E,\u201C",
    462         /* double_9qm_rqm */ "\u201C,\u201E,\u201D",
    463         /* double_rqm_9qm */ "\u201C,\u201D,\u201E",
    464         /* morekeys_single_quote */ "!fixedColumnOrder!5,!text/single_quotes,!text/single_angle_quotes",
    465         /* morekeys_double_quote */ "!fixedColumnOrder!5,!text/double_quotes,!text/double_angle_quotes",
    466         /* morekeys_tablet_double_quote */ "!fixedColumnOrder!6,!text/double_quotes,!text/single_quotes,!text/double_angle_quotes,!text/single_angle_quotes",
    467         /* keyspec_emoji_action_key */ "!icon/emoji_action_key|!code/key_emoji",
    468     };
    469 
    470     /* Locale af: Afrikaans */
    471     private static final String[] TEXTS_af = {
    472         // This is the same as Dutch except more keys of y and demoting vowels with diaeresis.
    473         // U+00E1: "" LATIN SMALL LETTER A WITH ACUTE
    474         // U+00E2: "" LATIN SMALL LETTER A WITH CIRCUMFLEX
    475         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
    476         // U+00E0: "" LATIN SMALL LETTER A WITH GRAVE
    477         // U+00E6: "" LATIN SMALL LETTER AE
    478         // U+00E3: "" LATIN SMALL LETTER A WITH TILDE
    479         // U+00E5: "" LATIN SMALL LETTER A WITH RING ABOVE
    480         // U+0101: "" LATIN SMALL LETTER A WITH MACRON
    481         /* morekeys_a */ "\u00E1,\u00E2,\u00E4,\u00E0,\u00E6,\u00E3,\u00E5,\u0101",
    482         // U+00F3: "" LATIN SMALL LETTER O WITH ACUTE
    483         // U+00F4: "" LATIN SMALL LETTER O WITH CIRCUMFLEX
    484         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
    485         // U+00F2: "" LATIN SMALL LETTER O WITH GRAVE
    486         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
    487         // U+0153: "" LATIN SMALL LIGATURE OE
    488         // U+00F8: "" LATIN SMALL LETTER O WITH STROKE
    489         // U+014D: "" LATIN SMALL LETTER O WITH MACRON
    490         /* morekeys_o */ "\u00F3,\u00F4,\u00F6,\u00F2,\u00F5,\u0153,\u00F8,\u014D",
    491         // U+00FA: "" LATIN SMALL LETTER U WITH ACUTE
    492         // U+00FB: "" LATIN SMALL LETTER U WITH CIRCUMFLEX
    493         // U+00FC: "" LATIN SMALL LETTER U WITH DIAERESIS
    494         // U+00F9: "" LATIN SMALL LETTER U WITH GRAVE
    495         // U+016B: "" LATIN SMALL LETTER U WITH MACRON
    496         /* morekeys_u */ "\u00FA,\u00FB,\u00FC,\u00F9,\u016B",
    497         /* keylabel_to_alpha */ null,
    498         // U+00E9: "" LATIN SMALL LETTER E WITH ACUTE
    499         // U+00E8: "" LATIN SMALL LETTER E WITH GRAVE
    500         // U+00EA: "" LATIN SMALL LETTER E WITH CIRCUMFLEX
    501         // U+00EB: "" LATIN SMALL LETTER E WITH DIAERESIS
    502         // U+0119: "" LATIN SMALL LETTER E WITH OGONEK
    503         // U+0117: "" LATIN SMALL LETTER E WITH DOT ABOVE
    504         // U+0113: "" LATIN SMALL LETTER E WITH MACRON
    505         /* morekeys_e */ "\u00E9,\u00E8,\u00EA,\u00EB,\u0119,\u0117,\u0113",
    506         // U+00ED: "" LATIN SMALL LETTER I WITH ACUTE
    507         // U+00EC: "" LATIN SMALL LETTER I WITH GRAVE
    508         // U+00EF: "" LATIN SMALL LETTER I WITH DIAERESIS
    509         // U+00EE: "" LATIN SMALL LETTER I WITH CIRCUMFLEX
    510         // U+012F: "" LATIN SMALL LETTER I WITH OGONEK
    511         // U+012B: "" LATIN SMALL LETTER I WITH MACRON
    512         // U+0133: "" LATIN SMALL LIGATURE IJ
    513         /* morekeys_i */ "\u00ED,\u00EC,\u00EF,\u00EE,\u012F,\u012B,\u0133",
    514         /* morekeys_c */ null,
    515         /* double_quotes */ null,
    516         // U+00F1: "" LATIN SMALL LETTER N WITH TILDE
    517         // U+0144: "" LATIN SMALL LETTER N WITH ACUTE
    518         /* morekeys_n */ "\u00F1,\u0144",
    519         /* single_quotes ~ */
    520         null, null, null,
    521         /* ~ keyspec_currency */
    522         // U+00FD: "" LATIN SMALL LETTER Y WITH ACUTE
    523         // U+0133: "" LATIN SMALL LIGATURE IJ
    524         /* morekeys_y */ "\u00FD,\u0133",
    525     };
    526 
    527     /* Locale ar: Arabic */
    528     private static final String[] TEXTS_ar = {
    529         /* morekeys_a ~ */
    530         null, null, null,
    531         /* ~ morekeys_u */
    532         // Label for "switch to alphabetic" key.
    533         // U+0623: "" ARABIC LETTER ALEF WITH HAMZA ABOVE
    534         // U+200C: ZERO WIDTH NON-JOINER
    535         // U+0628: "" ARABIC LETTER BEH
    536         // U+062C: "" ARABIC LETTER JEEM
    537         /* keylabel_to_alpha */ "\u0623\u200C\u0628\u200C\u062C",
    538         /* morekeys_e ~ */
    539         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
    540         null, null, null, null, null, null, null, null, null, null, null, null, null,
    541         /* ~ morekeys_cyrillic_soft_sign */
    542         // U+0661: "" ARABIC-INDIC DIGIT ONE
    543         /* keyspec_symbols_1 */ "\u0661",
    544         // U+0662: "" ARABIC-INDIC DIGIT TWO
    545         /* keyspec_symbols_2 */ "\u0662",
    546         // U+0663: "" ARABIC-INDIC DIGIT THREE
    547         /* keyspec_symbols_3 */ "\u0663",
    548         // U+0664: "" ARABIC-INDIC DIGIT FOUR
    549         /* keyspec_symbols_4 */ "\u0664",
    550         // U+0665: "" ARABIC-INDIC DIGIT FIVE
    551         /* keyspec_symbols_5 */ "\u0665",
    552         // U+0666: "" ARABIC-INDIC DIGIT SIX
    553         /* keyspec_symbols_6 */ "\u0666",
    554         // U+0667: "" ARABIC-INDIC DIGIT SEVEN
    555         /* keyspec_symbols_7 */ "\u0667",
    556         // U+0668: "" ARABIC-INDIC DIGIT EIGHT
    557         /* keyspec_symbols_8 */ "\u0668",
    558         // U+0669: "" ARABIC-INDIC DIGIT NINE
    559         /* keyspec_symbols_9 */ "\u0669",
    560         // U+0660: "" ARABIC-INDIC DIGIT ZERO
    561         /* keyspec_symbols_0 */ "\u0660",
    562         // Label for "switch to symbols" key.
    563         // U+061F: "" ARABIC QUESTION MARK
    564         /* keylabel_to_symbol */ "\u0663\u0662\u0661\u061F",
    565         /* additional_morekeys_symbols_1 */ "1",
    566         /* additional_morekeys_symbols_2 */ "2",
    567         /* additional_morekeys_symbols_3 */ "3",
    568         /* additional_morekeys_symbols_4 */ "4",
    569         /* additional_morekeys_symbols_5 */ "5",
    570         /* additional_morekeys_symbols_6 */ "6",
    571         /* additional_morekeys_symbols_7 */ "7",
    572         /* additional_morekeys_symbols_8 */ "8",
    573         /* additional_morekeys_symbols_9 */ "9",
    574         // U+066B: "" ARABIC DECIMAL SEPARATOR
    575         // U+066C: "" ARABIC THOUSANDS SEPARATOR
    576         /* additional_morekeys_symbols_0 */ "0,\u066B,\u066C",
    577         /* morekeys_nordic_row2_11 */ null,
    578         /* morekeys_punctuation */ null,
    579         // U+061F: "" ARABIC QUESTION MARK
    580         // U+060C: "" ARABIC COMMA
    581         // U+061B: "" ARABIC SEMICOLON
    582         /* keyspec_tablet_comma */ "\u060C",
    583         /* keyspec_swiss_row1_11 ~ */
    584         null, null, null, null, null, null,
    585         /* ~ morekeys_swiss_row2_11 */
    586         // U+2605: "" BLACK STAR
    587         // U+066D: "" ARABIC FIVE POINTED STAR
    588         /* morekeys_star */ "\u2605,\u066D",
    589         // U+2264: "" LESS-THAN OR EQUAL TO
    590         // U+2265: "" GREATER-THAN EQUAL TO
    591         // U+00AB: "" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
    592         // U+00BB: "" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
    593         // U+2039: "" SINGLE LEFT-POINTING ANGLE QUOTATION MARK
    594         // U+203A: "" SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
    595         /* keyspec_left_parenthesis */ "(|)",
    596         /* keyspec_right_parenthesis */ ")|(",
    597         /* keyspec_left_square_bracket */ "[|]",
    598         /* keyspec_right_square_bracket */ "]|[",
    599         /* keyspec_left_curly_bracket */ "{|}",
    600         /* keyspec_right_curly_bracket */ "}|{",
    601         /* keyspec_less_than */ "<|>",
    602         /* keyspec_greater_than */ ">|<",
    603         /* keyspec_less_than_equal */ "\u2264|\u2265",
    604         /* keyspec_greater_than_equal */ "\u2265|\u2264",
    605         /* keyspec_left_double_angle_quote */ "\u00AB|\u00BB",
    606         /* keyspec_right_double_angle_quote */ "\u00BB|\u00AB",
    607         /* keyspec_left_single_angle_quote */ "\u2039|\u203A",
    608         /* keyspec_right_single_angle_quote */ "\u203A|\u2039",
    609         // U+060C: "" ARABIC COMMA
    610         /* keyspec_comma */ "\u060C",
    611         /* morekeys_tablet_comma */ "!fixedColumnOrder!4,:,!,\u061F,\u061B,-,\",\'",
    612         // U+0651: "" ARABIC SHADDA
    613         /* keyhintlabel_period */ "\u0651",
    614         /* morekeys_tablet_period */ "!text/morekeys_arabic_diacritics",
    615         // U+00BF: "" INVERTED QUESTION MARK
    616         /* morekeys_question */ "?,\u00BF",
    617         /* morekeys_h ~ */
    618         null, null, null, null, null, null, null, null, null, null, null, null, null, null,
    619         /* ~ keyspec_spanish_row2_10 */
    620         // U+266A: "" EIGHTH NOTE
    621         /* morekeys_bullet */ "\u266A",
    622         // The all letters need to be mirrored are found at
    623         // http://www.unicode.org/Public/6.1.0/ucd/BidiMirroring.txt
    624         // U+FD3E: "" ORNATE LEFT PARENTHESIS
    625         // U+FD3F: "" ORNATE RIGHT PARENTHESIS
    626         /* morekeys_left_parenthesis */ "!fixedColumnOrder!4,\uFD3E|\uFD3F,!text/keyspecs_left_parenthesis_more_keys",
    627         /* morekeys_right_parenthesis */ "!fixedColumnOrder!4,\uFD3F|\uFD3E,!text/keyspecs_right_parenthesis_more_keys",
    628         // U+0655: "" ARABIC HAMZA BELOW
    629         // U+0654: "" ARABIC HAMZA ABOVE
    630         // U+0652: "" ARABIC SUKUN
    631         // U+064D: "" ARABIC KASRATAN
    632         // U+064C: "" ARABIC DAMMATAN
    633         // U+064B: "" ARABIC FATHATAN
    634         // U+0651: "" ARABIC SHADDA
    635         // U+0656: "" ARABIC SUBSCRIPT ALEF
    636         // U+0670: "" ARABIC LETTER SUPERSCRIPT ALEF
    637         // U+0653: "" ARABIC MADDAH ABOVE
    638         // U+0650: "" ARABIC KASRA
    639         // U+064F: "" ARABIC DAMMA
    640         // U+064E: "" ARABIC FATHA
    641         // U+0640: "" ARABIC TATWEEL
    642         // In order to make Tatweel easily distinguishable from other punctuations, we use consecutive Tatweels only for its displayed label.
    643         // Note: The space character is needed as a preceding letter to draw Arabic diacritics characters correctly.
    644         /* morekeys_arabic_diacritics */ "!fixedColumnOrder!7, \u0655|\u0655, \u0654|\u0654, \u0652|\u0652, \u064D|\u064D, \u064C|\u064C, \u064B|\u064B, \u0651|\u0651, \u0656|\u0656, \u0670|\u0670, \u0653|\u0653, \u0650|\u0650, \u064F|\u064F, \u064E|\u064E,\u0640\u0640\u0640|\u0640",
    645         /* keyhintlabel_tablet_comma */ "\u061F",
    646         /* keyspec_period */ null,
    647         /* morekeys_period */ "!text/morekeys_arabic_diacritics",
    648         /* keyspec_tablet_period */ null,
    649         /* keyhintlabel_tablet_period */ "\u0651",
    650         /* keyspec_symbols_question */ "\u061F",
    651         /* keyspec_symbols_semicolon */ "\u061B",
    652         // U+066A: "" ARABIC PERCENT SIGN
    653         /* keyspec_symbols_percent */ "\u066A",
    654         /* morekeys_symbols_semicolon */ ";",
    655         // U+2030: "" PER MILLE SIGN
    656         /* morekeys_symbols_percent */ "\\%,\u2030",
    657     };
    658 
    659     /* Locale az_AZ: Azerbaijani (Azerbaijan) */
    660     private static final String[] TEXTS_az_AZ = {
    661         // U+00E2: "" LATIN SMALL LETTER A WITH CIRCUMFLEX
    662         /* morekeys_a */ "\u00E2",
    663         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
    664         // U+00F4: "" LATIN SMALL LETTER O WITH CIRCUMFLEX
    665         // U+0153: "" LATIN SMALL LIGATURE OE
    666         // U+00F2: "" LATIN SMALL LETTER O WITH GRAVE
    667         // U+00F3: "" LATIN SMALL LETTER O WITH ACUTE
    668         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
    669         // U+00F8: "" LATIN SMALL LETTER O WITH STROKE
    670         // U+014D: "" LATIN SMALL LETTER O WITH MACRON
    671         /* morekeys_o */ "\u00F6,\u00F4,\u0153,\u00F2,\u00F3,\u00F5,\u00F8,\u014D",
    672         // U+00FC: "" LATIN SMALL LETTER U WITH DIAERESIS
    673         // U+00FB: "" LATIN SMALL LETTER U WITH CIRCUMFLEX
    674         // U+00F9: "" LATIN SMALL LETTER U WITH GRAVE
    675         // U+00FA: "" LATIN SMALL LETTER U WITH ACUTE
    676         // U+016B: "" LATIN SMALL LETTER U WITH MACRON
    677         /* morekeys_u */ "\u00FC,\u00FB,\u00F9,\u00FA,\u016B",
    678         /* keylabel_to_alpha */ null,
    679         // U+0259: "" LATIN SMALL LETTER SCHWA
    680         /* morekeys_e */ "\u0259",
    681         // U+0131: "" LATIN SMALL LETTER DOTLESS I
    682         // U+00EE: "" LATIN SMALL LETTER I WITH CIRCUMFLEX
    683         // U+00EF: "" LATIN SMALL LETTER I WITH DIAERESIS
    684         // U+00EC: "" LATIN SMALL LETTER I WITH GRAVE
    685         // U+00ED: "" LATIN SMALL LETTER I WITH ACUTE
    686         // U+012F: "" LATIN SMALL LETTER I WITH OGONEK
    687         // U+012B: "" LATIN SMALL LETTER I WITH MACRON
    688         /* morekeys_i */ "\u0131,\u00EE,\u00EF,\u00EC,\u00ED,\u012F,\u012B",
    689         // U+00E7: "" LATIN SMALL LETTER C WITH CEDILLA
    690         // U+0107: "" LATIN SMALL LETTER C WITH ACUTE
    691         // U+010D: "" LATIN SMALL LETTER C WITH CARON
    692         /* morekeys_c */ "\u00E7,\u0107,\u010D",
    693         /* double_quotes ~ */
    694         null, null, null,
    695         /* ~ single_quotes */
    696         // U+015F: "" LATIN SMALL LETTER S WITH CEDILLA
    697         // U+00DF: "" LATIN SMALL LETTER SHARP S
    698         // U+015B: "" LATIN SMALL LETTER S WITH ACUTE
    699         // U+0161: "" LATIN SMALL LETTER S WITH CARON
    700         /* morekeys_s */ "\u015F,\u00DF,\u015B,\u0161",
    701         /* keyspec_currency ~ */
    702         null, null, null, null, null, null,
    703         /* ~ morekeys_l */
    704         // U+011F: "" LATIN SMALL LETTER G WITH BREVE
    705         /* morekeys_g */ "\u011F",
    706     };
    707 
    708     /* Locale be_BY: Belarusian (Belarus) */
    709     private static final String[] TEXTS_be_BY = {
    710         /* morekeys_a ~ */
    711         null, null, null,
    712         /* ~ morekeys_u */
    713         // Label for "switch to alphabetic" key.
    714         // U+0410: "" CYRILLIC CAPITAL LETTER A
    715         // U+0411: "" CYRILLIC CAPITAL LETTER BE
    716         // U+0412: "" CYRILLIC CAPITAL LETTER VE
    717         /* keylabel_to_alpha */ "\u0410\u0411\u0412",
    718         /* morekeys_e ~ */
    719         null, null, null,
    720         /* ~ morekeys_c */
    721         /* double_quotes */ "!text/double_9qm_lqm",
    722         /* morekeys_n */ null,
    723         /* single_quotes */ "!text/single_9qm_lqm",
    724         /* morekeys_s ~ */
    725         null, null, null, null, null, null, null, null, null, null, null, null,
    726         /* ~ morekeys_k */
    727         // U+0451: "" CYRILLIC SMALL LETTER IO
    728         /* morekeys_cyrillic_ie */ "\u0451",
    729         /* keyspec_nordic_row1_11 ~ */
    730         null, null, null, null,
    731         /* ~ morekeys_nordic_row2_10 */
    732         // U+045E: "" CYRILLIC SMALL LETTER SHORT U
    733         /* keyspec_east_slavic_row1_9 */ "\u045E",
    734         // U+044B: "" CYRILLIC SMALL LETTER YERU
    735         /* keyspec_east_slavic_row2_2 */ "\u044B",
    736         // U+044D: "" CYRILLIC SMALL LETTER E
    737         /* keyspec_east_slavic_row2_11 */ "\u044D",
    738         // U+0456: "" CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
    739         /* keyspec_east_slavic_row3_5 */ "\u0456",
    740         // U+044A: "" CYRILLIC SMALL LETTER HARD SIGN
    741         /* morekeys_cyrillic_soft_sign */ "\u044A",
    742     };
    743 
    744     /* Locale bg: Bulgarian */
    745     private static final String[] TEXTS_bg = {
    746         /* morekeys_a ~ */
    747         null, null, null,
    748         /* ~ morekeys_u */
    749         // Label for "switch to alphabetic" key.
    750         // U+0410: "" CYRILLIC CAPITAL LETTER A
    751         // U+0411: "" CYRILLIC CAPITAL LETTER BE
    752         // U+0412: "" CYRILLIC CAPITAL LETTER VE
    753         /* keylabel_to_alpha */ "\u0410\u0411\u0412",
    754         /* morekeys_e ~ */
    755         null, null, null,
    756         /* ~ morekeys_c */
    757         // single_quotes of Bulgarian is default single_quotes_right_left.
    758         /* double_quotes */ "!text/double_9qm_lqm",
    759     };
    760 
    761     /* Locale bn_IN: Bengali (India) */
    762     private static final String[] TEXTS_bn_IN = {
    763         /* morekeys_a ~ */
    764         null, null, null,
    765         /* ~ morekeys_u */
    766         // Label for "switch to alphabetic" key.
    767         // U+0995: "" BENGALI LETTER KA
    768         // U+0996: "" BENGALI LETTER KHA
    769         // U+0997: "" BENGALI LETTER GA
    770         /* keylabel_to_alpha */ "\u0995\u0996\u0997",
    771         /* morekeys_e ~ */
    772         null, null, null, null, null, null, null,
    773         /* ~ morekeys_s */
    774         // U+20B9: "" INDIAN RUPEE SIGN
    775         /* keyspec_currency */ "\u20B9",
    776     };
    777 
    778     /* Locale ca: Catalan */
    779     private static final String[] TEXTS_ca = {
    780         // U+00E0: "" LATIN SMALL LETTER A WITH GRAVE
    781         // U+00E1: "" LATIN SMALL LETTER A WITH ACUTE
    782         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
    783         // U+00E2: "" LATIN SMALL LETTER A WITH CIRCUMFLEX
    784         // U+00E3: "" LATIN SMALL LETTER A WITH TILDE
    785         // U+00E5: "" LATIN SMALL LETTER A WITH RING ABOVE
    786         // U+0105: "" LATIN SMALL LETTER A WITH OGONEK
    787         // U+00E6: "" LATIN SMALL LETTER AE
    788         // U+0101: "" LATIN SMALL LETTER A WITH MACRON
    789         // U+00AA: "" FEMININE ORDINAL INDICATOR
    790         /* morekeys_a */ "\u00E0,\u00E1,\u00E4,\u00E2,\u00E3,\u00E5,\u0105,\u00E6,\u0101,\u00AA",
    791         // U+00F2: "" LATIN SMALL LETTER O WITH GRAVE
    792         // U+00F3: "" LATIN SMALL LETTER O WITH ACUTE
    793         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
    794         // U+00F4: "" LATIN SMALL LETTER O WITH CIRCUMFLEX
    795         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
    796         // U+00F8: "" LATIN SMALL LETTER O WITH STROKE
    797         // U+0153: "" LATIN SMALL LIGATURE OE
    798         // U+014D: "" LATIN SMALL LETTER O WITH MACRON
    799         // U+00BA: "" MASCULINE ORDINAL INDICATOR
    800         /* morekeys_o */ "\u00F2,\u00F3,\u00F6,\u00F4,\u00F5,\u00F8,\u0153,\u014D,\u00BA",
    801         // U+00FA: "" LATIN SMALL LETTER U WITH ACUTE
    802         // U+00FC: "" LATIN SMALL LETTER U WITH DIAERESIS
    803         // U+00F9: "" LATIN SMALL LETTER U WITH GRAVE
    804         // U+00FB: "" LATIN SMALL LETTER U WITH CIRCUMFLEX
    805         // U+016B: "" LATIN SMALL LETTER U WITH MACRON
    806         /* morekeys_u */ "\u00FA,\u00FC,\u00F9,\u00FB,\u016B",
    807         /* keylabel_to_alpha */ null,
    808         // U+00E8: "" LATIN SMALL LETTER E WITH GRAVE
    809         // U+00E9: "" LATIN SMALL LETTER E WITH ACUTE
    810         // U+00EB: "" LATIN SMALL LETTER E WITH DIAERESIS
    811         // U+00EA: "" LATIN SMALL LETTER E WITH CIRCUMFLEX
    812         // U+0119: "" LATIN SMALL LETTER E WITH OGONEK
    813         // U+0117: "" LATIN SMALL LETTER E WITH DOT ABOVE
    814         // U+0113: "" LATIN SMALL LETTER E WITH MACRON
    815         /* morekeys_e */ "\u00E8,\u00E9,\u00EB,\u00EA,\u0119,\u0117,\u0113",
    816         // U+00ED: "" LATIN SMALL LETTER I WITH ACUTE
    817         // U+00EF: "" LATIN SMALL LETTER I WITH DIAERESIS
    818         // U+00EC: "" LATIN SMALL LETTER I WITH GRAVE
    819         // U+00EE: "" LATIN SMALL LETTER I WITH CIRCUMFLEX
    820         // U+012F: "" LATIN SMALL LETTER I WITH OGONEK
    821         // U+012B: "" LATIN SMALL LETTER I WITH MACRON
    822         /* morekeys_i */ "\u00ED,\u00EF,\u00EC,\u00EE,\u012F,\u012B",
    823         // U+00E7: "" LATIN SMALL LETTER C WITH CEDILLA
    824         // U+0107: "" LATIN SMALL LETTER C WITH ACUTE
    825         // U+010D: "" LATIN SMALL LETTER C WITH CARON
    826         /* morekeys_c */ "\u00E7,\u0107,\u010D",
    827         /* double_quotes */ null,
    828         // U+00F1: "" LATIN SMALL LETTER N WITH TILDE
    829         // U+0144: "" LATIN SMALL LETTER N WITH ACUTE
    830         /* morekeys_n */ "\u00F1,\u0144",
    831         /* single_quotes ~ */
    832         null, null, null, null, null, null, null,
    833         /* ~ morekeys_t */
    834         // U+00B7: "" MIDDLE DOT
    835         // U+0142: "" LATIN SMALL LETTER L WITH STROKE
    836         /* morekeys_l */ "l\u00B7l,\u0142",
    837         /* morekeys_g ~ */
    838         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
    839         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
    840         null, null, null, null, null, null, null,
    841         /* ~ morekeys_nordic_row2_11 */
    842         // U+00B7: "" MIDDLE DOT
    843         /* morekeys_punctuation */ "!autoColumnOrder!9,\\,,?,!,\u00B7,#,),(,/,;,',@,:,-,\",+,\\%,&",
    844         /* keyspec_tablet_comma ~ */
    845         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
    846         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
    847         null, null, null, null, null, null, null, null, null,
    848         /* ~ keyspec_south_slavic_row3_8 */
    849         /* morekeys_tablet_punctuation */ "!autoColumnOrder!8,\\,,',\u00B7,#,),(,/,;,@,:,-,\",+,\\%,&",
    850         // U+00E7: "" LATIN SMALL LETTER C WITH CEDILLA
    851         /* keyspec_spanish_row2_10 */ "\u00E7",
    852     };
    853 
    854     /* Locale cs: Czech */
    855     private static final String[] TEXTS_cs = {
    856         // U+00E1: "" LATIN SMALL LETTER A WITH ACUTE
    857         // U+00E0: "" LATIN SMALL LETTER A WITH GRAVE
    858         // U+00E2: "" LATIN SMALL LETTER A WITH CIRCUMFLEX
    859         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
    860         // U+00E6: "" LATIN SMALL LETTER AE
    861         // U+00E3: "" LATIN SMALL LETTER A WITH TILDE
    862         // U+00E5: "" LATIN SMALL LETTER A WITH RING ABOVE
    863         // U+0101: "" LATIN SMALL LETTER A WITH MACRON
    864         /* morekeys_a */ "\u00E1,\u00E0,\u00E2,\u00E4,\u00E6,\u00E3,\u00E5,\u0101",
    865         // U+00F3: "" LATIN SMALL LETTER O WITH ACUTE
    866         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
    867         // U+00F4: "" LATIN SMALL LETTER O WITH CIRCUMFLEX
    868         // U+00F2: "" LATIN SMALL LETTER O WITH GRAVE
    869         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
    870         // U+0153: "" LATIN SMALL LIGATURE OE
    871         // U+00F8: "" LATIN SMALL LETTER O WITH STROKE
    872         // U+014D: "" LATIN SMALL LETTER O WITH MACRON
    873         /* morekeys_o */ "\u00F3,\u00F6,\u00F4,\u00F2,\u00F5,\u0153,\u00F8,\u014D",
    874         // U+00FA: "" LATIN SMALL LETTER U WITH ACUTE
    875         // U+016F: "" LATIN SMALL LETTER U WITH RING ABOVE
    876         // U+00FB: "" LATIN SMALL LETTER U WITH CIRCUMFLEX
    877         // U+00FC: "" LATIN SMALL LETTER U WITH DIAERESIS
    878         // U+00F9: "" LATIN SMALL LETTER U WITH GRAVE
    879         // U+016B: "" LATIN SMALL LETTER U WITH MACRON
    880         /* morekeys_u */ "\u00FA,\u016F,\u00FB,\u00FC,\u00F9,\u016B",
    881         /* keylabel_to_alpha */ null,
    882         // U+00E9: "" LATIN SMALL LETTER E WITH ACUTE
    883         // U+011B: "" LATIN SMALL LETTER E WITH CARON
    884         // U+00E8: "" LATIN SMALL LETTER E WITH GRAVE
    885         // U+00EA: "" LATIN SMALL LETTER E WITH CIRCUMFLEX
    886         // U+00EB: "" LATIN SMALL LETTER E WITH DIAERESIS
    887         // U+0119: "" LATIN SMALL LETTER E WITH OGONEK
    888         // U+0117: "" LATIN SMALL LETTER E WITH DOT ABOVE
    889         // U+0113: "" LATIN SMALL LETTER E WITH MACRON
    890         /* morekeys_e */ "\u00E9,\u011B,\u00E8,\u00EA,\u00EB,\u0119,\u0117,\u0113",
    891         // U+00ED: "" LATIN SMALL LETTER I WITH ACUTE
    892         // U+00EE: "" LATIN SMALL LETTER I WITH CIRCUMFLEX
    893         // U+00EF: "" LATIN SMALL LETTER I WITH DIAERESIS
    894         // U+00EC: "" LATIN SMALL LETTER I WITH GRAVE
    895         // U+012F: "" LATIN SMALL LETTER I WITH OGONEK
    896         // U+012B: "" LATIN SMALL LETTER I WITH MACRON
    897         /* morekeys_i */ "\u00ED,\u00EE,\u00EF,\u00EC,\u012F,\u012B",
    898         // U+010D: "" LATIN SMALL LETTER C WITH CARON
    899         // U+00E7: "" LATIN SMALL LETTER C WITH CEDILLA
    900         // U+0107: "" LATIN SMALL LETTER C WITH ACUTE
    901         /* morekeys_c */ "\u010D,\u00E7,\u0107",
    902         /* double_quotes */ "!text/double_9qm_lqm",
    903         // U+0148: "" LATIN SMALL LETTER N WITH CARON
    904         // U+00F1: "" LATIN SMALL LETTER N WITH TILDE
    905         // U+0144: "" LATIN SMALL LETTER N WITH ACUTE
    906         /* morekeys_n */ "\u0148,\u00F1,\u0144",
    907         /* single_quotes */ "!text/single_9qm_lqm",
    908         // U+0161: "" LATIN SMALL LETTER S WITH CARON
    909         // U+00DF: "" LATIN SMALL LETTER SHARP S
    910         // U+015B: "" LATIN SMALL LETTER S WITH ACUTE
    911         /* morekeys_s */ "\u0161,\u00DF,\u015B",
    912         /* keyspec_currency */ null,
    913         // U+00FD: "" LATIN SMALL LETTER Y WITH ACUTE
    914         // U+00FF: "" LATIN SMALL LETTER Y WITH DIAERESIS
    915         /* morekeys_y */ "\u00FD,\u00FF",
    916         // U+010F: "" LATIN SMALL LETTER D WITH CARON
    917         /* morekeys_d */ "\u010F",
    918         // U+017E: "" LATIN SMALL LETTER Z WITH CARON
    919         // U+017A: "" LATIN SMALL LETTER Z WITH ACUTE
    920         // U+017C: "" LATIN SMALL LETTER Z WITH DOT ABOVE
    921         /* morekeys_z */ "\u017E,\u017A,\u017C",
    922         // U+0165: "" LATIN SMALL LETTER T WITH CARON
    923         /* morekeys_t */ "\u0165",
    924         /* morekeys_l */ null,
    925         /* morekeys_g */ null,
    926         /* single_angle_quotes */ "!text/single_raqm_laqm",
    927         /* double_angle_quotes */ "!text/double_raqm_laqm",
    928         // U+0159: "" LATIN SMALL LETTER R WITH CARON
    929         /* morekeys_r */ "\u0159",
    930     };
    931 
    932     /* Locale da: Danish */
    933     private static final String[] TEXTS_da = {
    934         // U+00E1: "" LATIN SMALL LETTER A WITH ACUTE
    935         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
    936         // U+00E0: "" LATIN SMALL LETTER A WITH GRAVE
    937         // U+00E2: "" LATIN SMALL LETTER A WITH CIRCUMFLEX
    938         // U+00E3: "" LATIN SMALL LETTER A WITH TILDE
    939         // U+0101: "" LATIN SMALL LETTER A WITH MACRON
    940         /* morekeys_a */ "\u00E1,\u00E4,\u00E0,\u00E2,\u00E3,\u0101",
    941         // U+00F3: "" LATIN SMALL LETTER O WITH ACUTE
    942         // U+00F4: "" LATIN SMALL LETTER O WITH CIRCUMFLEX
    943         // U+00F2: "" LATIN SMALL LETTER O WITH GRAVE
    944         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
    945         // U+0153: "" LATIN SMALL LIGATURE OE
    946         // U+014D: "" LATIN SMALL LETTER O WITH MACRON
    947         /* morekeys_o */ "\u00F3,\u00F4,\u00F2,\u00F5,\u0153,\u014D",
    948         // U+00FA: "" LATIN SMALL LETTER U WITH ACUTE
    949         // U+00FC: "" LATIN SMALL LETTER U WITH DIAERESIS
    950         // U+00FB: "" LATIN SMALL LETTER U WITH CIRCUMFLEX
    951         // U+00F9: "" LATIN SMALL LETTER U WITH GRAVE
    952         // U+016B: "" LATIN SMALL LETTER U WITH MACRON
    953         /* morekeys_u */ "\u00FA,\u00FC,\u00FB,\u00F9,\u016B",
    954         /* keylabel_to_alpha */ null,
    955         // U+00E9: "" LATIN SMALL LETTER E WITH ACUTE
    956         // U+00EB: "" LATIN SMALL LETTER E WITH DIAERESIS
    957         /* morekeys_e */ "\u00E9,\u00EB",
    958         // U+00ED: "" LATIN SMALL LETTER I WITH ACUTE
    959         // U+00EF: "" LATIN SMALL LETTER I WITH DIAERESIS
    960         /* morekeys_i */ "\u00ED,\u00EF",
    961         /* morekeys_c */ null,
    962         /* double_quotes */ "!text/double_9qm_lqm",
    963         // U+00F1: "" LATIN SMALL LETTER N WITH TILDE
    964         // U+0144: "" LATIN SMALL LETTER N WITH ACUTE
    965         /* morekeys_n */ "\u00F1,\u0144",
    966         /* single_quotes */ "!text/single_9qm_lqm",
    967         // U+00DF: "" LATIN SMALL LETTER SHARP S
    968         // U+015B: "" LATIN SMALL LETTER S WITH ACUTE
    969         // U+0161: "" LATIN SMALL LETTER S WITH CARON
    970         /* morekeys_s */ "\u00DF,\u015B,\u0161",
    971         /* keyspec_currency */ null,
    972         // U+00FD: "" LATIN SMALL LETTER Y WITH ACUTE
    973         // U+00FF: "" LATIN SMALL LETTER Y WITH DIAERESIS
    974         /* morekeys_y */ "\u00FD,\u00FF",
    975         // U+00F0: "" LATIN SMALL LETTER ETH
    976         /* morekeys_d */ "\u00F0",
    977         /* morekeys_z */ null,
    978         /* morekeys_t */ null,
    979         // U+0142: "" LATIN SMALL LETTER L WITH STROKE
    980         /* morekeys_l */ "\u0142",
    981         /* morekeys_g */ null,
    982         /* single_angle_quotes */ "!text/single_raqm_laqm",
    983         /* double_angle_quotes */ "!text/double_raqm_laqm",
    984         /* morekeys_r ~ */
    985         null, null, null,
    986         /* ~ morekeys_cyrillic_ie */
    987         // U+00E5: "" LATIN SMALL LETTER A WITH RING ABOVE
    988         /* keyspec_nordic_row1_11 */ "\u00E5",
    989         // U+00E6: "" LATIN SMALL LETTER AE
    990         /* keyspec_nordic_row2_10 */ "\u00E6",
    991         // U+00F8: "" LATIN SMALL LETTER O WITH STROKE
    992         /* keyspec_nordic_row2_11 */ "\u00F8",
    993         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
    994         /* morekeys_nordic_row2_10 */ "\u00E4",
    995         /* keyspec_east_slavic_row1_9 ~ */
    996         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
    997         null, null, null, null, null, null, null, null, null, null, null,
    998         /* ~ additional_morekeys_symbols_0 */
    999         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
   1000         /* morekeys_nordic_row2_11 */ "\u00F6",
   1001     };
   1002 
   1003     /* Locale de: German */
   1004     private static final String[] TEXTS_de = {
   1005         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
   1006         // U+00E2: "" LATIN SMALL LETTER A WITH CIRCUMFLEX
   1007         // U+00E0: "" LATIN SMALL LETTER A WITH GRAVE
   1008         // U+00E1: "" LATIN SMALL LETTER A WITH ACUTE
   1009         // U+00E6: "" LATIN SMALL LETTER AE
   1010         // U+00E3: "" LATIN SMALL LETTER A WITH TILDE
   1011         // U+00E5: "" LATIN SMALL LETTER A WITH RING ABOVE
   1012         // U+0101: "" LATIN SMALL LETTER A WITH MACRON
   1013         /* morekeys_a */ "\u00E4,%,\u00E2,\u00E0,\u00E1,\u00E6,\u00E3,\u00E5,\u0101",
   1014         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
   1015         // U+00F4: "" LATIN SMALL LETTER O WITH CIRCUMFLEX
   1016         // U+00F2: "" LATIN SMALL LETTER O WITH GRAVE
   1017         // U+00F3: "" LATIN SMALL LETTER O WITH ACUTE
   1018         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
   1019         // U+0153: "" LATIN SMALL LIGATURE OE
   1020         // U+00F8: "" LATIN SMALL LETTER O WITH STROKE
   1021         // U+014D: "" LATIN SMALL LETTER O WITH MACRON
   1022         /* morekeys_o */ "\u00F6,%,\u00F4,\u00F2,\u00F3,\u00F5,\u0153,\u00F8,\u014D",
   1023         // U+00FC: "" LATIN SMALL LETTER U WITH DIAERESIS
   1024         // U+00FB: "" LATIN SMALL LETTER U WITH CIRCUMFLEX
   1025         // U+00F9: "" LATIN SMALL LETTER U WITH GRAVE
   1026         // U+00FA: "" LATIN SMALL LETTER U WITH ACUTE
   1027         // U+016B: "" LATIN SMALL LETTER U WITH MACRON
   1028         /* morekeys_u */ "\u00FC,%,\u00FB,\u00F9,\u00FA,\u016B",
   1029         /* keylabel_to_alpha */ null,
   1030         // U+00E9: "" LATIN SMALL LETTER E WITH ACUTE
   1031         // U+00E8: "" LATIN SMALL LETTER E WITH GRAVE
   1032         // U+00EA: "" LATIN SMALL LETTER E WITH CIRCUMFLEX
   1033         // U+00EB: "" LATIN SMALL LETTER E WITH DIAERESIS
   1034         // U+0117: "" LATIN SMALL LETTER E WITH DOT ABOVE
   1035         /* morekeys_e */ "\u00E9,\u00E8,\u00EA,\u00EB,\u0117",
   1036         /* morekeys_i */ null,
   1037         /* morekeys_c */ null,
   1038         /* double_quotes */ "!text/double_9qm_lqm",
   1039         // U+00F1: "" LATIN SMALL LETTER N WITH TILDE
   1040         // U+0144: "" LATIN SMALL LETTER N WITH ACUTE
   1041         /* morekeys_n */ "\u00F1,\u0144",
   1042         /* single_quotes */ "!text/single_9qm_lqm",
   1043         // U+00DF: "" LATIN SMALL LETTER SHARP S
   1044         // U+015B: "" LATIN SMALL LETTER S WITH ACUTE
   1045         // U+0161: "" LATIN SMALL LETTER S WITH CARON
   1046         /* morekeys_s */ "\u00DF,\u015B,\u0161",
   1047         /* keyspec_currency ~ */
   1048         null, null, null, null, null, null, null,
   1049         /* ~ morekeys_g */
   1050         /* single_angle_quotes */ "!text/single_raqm_laqm",
   1051         /* double_angle_quotes */ "!text/double_raqm_laqm",
   1052         /* morekeys_r ~ */
   1053         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   1054         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   1055         null, null, null, null, null, null,
   1056         /* ~ keyspec_tablet_comma */
   1057         // U+00FC: "" LATIN SMALL LETTER U WITH DIAERESIS
   1058         /* keyspec_swiss_row1_11 */ "\u00FC",
   1059         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
   1060         /* keyspec_swiss_row2_10 */ "\u00F6",
   1061         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
   1062         /* keyspec_swiss_row2_11 */ "\u00E4",
   1063         // U+00E8: "" LATIN SMALL LETTER E WITH GRAVE
   1064         /* morekeys_swiss_row1_11 */ "\u00E8",
   1065         // U+00E9: "" LATIN SMALL LETTER E WITH ACUTE
   1066         /* morekeys_swiss_row2_10 */ "\u00E9",
   1067         // U+00E0: "" LATIN SMALL LETTER A WITH GRAVE
   1068         /* morekeys_swiss_row2_11 */ "\u00E0",
   1069     };
   1070 
   1071     /* Locale el: Greek */
   1072     private static final String[] TEXTS_el = {
   1073         /* morekeys_a ~ */
   1074         null, null, null,
   1075         /* ~ morekeys_u */
   1076         // Label for "switch to alphabetic" key.
   1077         // U+0391: "" GREEK CAPITAL LETTER ALPHA
   1078         // U+0392: "" GREEK CAPITAL LETTER BETA
   1079         // U+0393: "" GREEK CAPITAL LETTER GAMMA
   1080         /* keylabel_to_alpha */ "\u0391\u0392\u0393",
   1081     };
   1082 
   1083     /* Locale en: English */
   1084     private static final String[] TEXTS_en = {
   1085         // U+00E0: "" LATIN SMALL LETTER A WITH GRAVE
   1086         // U+00E1: "" LATIN SMALL LETTER A WITH ACUTE
   1087         // U+00E2: "" LATIN SMALL LETTER A WITH CIRCUMFLEX
   1088         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
   1089         // U+00E6: "" LATIN SMALL LETTER AE
   1090         // U+00E3: "" LATIN SMALL LETTER A WITH TILDE
   1091         // U+00E5: "" LATIN SMALL LETTER A WITH RING ABOVE
   1092         // U+0101: "" LATIN SMALL LETTER A WITH MACRON
   1093         /* morekeys_a */ "\u00E0,\u00E1,\u00E2,\u00E4,\u00E6,\u00E3,\u00E5,\u0101",
   1094         // U+00F3: "" LATIN SMALL LETTER O WITH ACUTE
   1095         // U+00F4: "" LATIN SMALL LETTER O WITH CIRCUMFLEX
   1096         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
   1097         // U+00F2: "" LATIN SMALL LETTER O WITH GRAVE
   1098         // U+0153: "" LATIN SMALL LIGATURE OE
   1099         // U+00F8: "" LATIN SMALL LETTER O WITH STROKE
   1100         // U+014D: "" LATIN SMALL LETTER O WITH MACRON
   1101         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
   1102         /* morekeys_o */ "\u00F3,\u00F4,\u00F6,\u00F2,\u0153,\u00F8,\u014D,\u00F5",
   1103         // U+00FA: "" LATIN SMALL LETTER U WITH ACUTE
   1104         // U+00FB: "" LATIN SMALL LETTER U WITH CIRCUMFLEX
   1105         // U+00FC: "" LATIN SMALL LETTER U WITH DIAERESIS
   1106         // U+00F9: "" LATIN SMALL LETTER U WITH GRAVE
   1107         // U+016B: "" LATIN SMALL LETTER U WITH MACRON
   1108         /* morekeys_u */ "\u00FA,\u00FB,\u00FC,\u00F9,\u016B",
   1109         /* keylabel_to_alpha */ null,
   1110         // U+00E9: "" LATIN SMALL LETTER E WITH ACUTE
   1111         // U+00E8: "" LATIN SMALL LETTER E WITH GRAVE
   1112         // U+00EA: "" LATIN SMALL LETTER E WITH CIRCUMFLEX
   1113         // U+00EB: "" LATIN SMALL LETTER E WITH DIAERESIS
   1114         // U+0113: "" LATIN SMALL LETTER E WITH MACRON
   1115         /* morekeys_e */ "\u00E9,\u00E8,\u00EA,\u00EB,\u0113",
   1116         // U+00ED: "" LATIN SMALL LETTER I WITH ACUTE
   1117         // U+00EE: "" LATIN SMALL LETTER I WITH CIRCUMFLEX
   1118         // U+00EF: "" LATIN SMALL LETTER I WITH DIAERESIS
   1119         // U+012B: "" LATIN SMALL LETTER I WITH MACRON
   1120         // U+00EC: "" LATIN SMALL LETTER I WITH GRAVE
   1121         /* morekeys_i */ "\u00ED,\u00EE,\u00EF,\u012B,\u00EC",
   1122         // U+00E7: "" LATIN SMALL LETTER C WITH CEDILLA
   1123         /* morekeys_c */ "\u00E7",
   1124         /* double_quotes */ null,
   1125         // U+00F1: "" LATIN SMALL LETTER N WITH TILDE
   1126         /* morekeys_n */ "\u00F1",
   1127         /* single_quotes */ null,
   1128         // U+00DF: "" LATIN SMALL LETTER SHARP S
   1129         /* morekeys_s */ "\u00DF",
   1130     };
   1131 
   1132     /* Locale eo: Esperanto */
   1133     private static final String[] TEXTS_eo = {
   1134         // U+00E1: "" LATIN SMALL LETTER A WITH ACUTE
   1135         // U+00E0: "" LATIN SMALL LETTER A WITH GRAVE
   1136         // U+00E2: "" LATIN SMALL LETTER A WITH CIRCUMFLEX
   1137         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
   1138         // U+00E6: "" LATIN SMALL LETTER AE
   1139         // U+00E3: "" LATIN SMALL LETTER A WITH TILDE
   1140         // U+00E5: "" LATIN SMALL LETTER A WITH RING ABOVE
   1141         // U+0101: "" LATIN SMALL LETTER A WITH MACRON
   1142         // U+0103: "" LATIN SMALL LETTER A WITH BREVE
   1143         // U+0105: "" LATIN SMALL LETTER A WITH OGONEK
   1144         // U+00AA: "" FEMININE ORDINAL INDICATOR
   1145         /* morekeys_a */ "\u00E1,\u00E0,\u00E2,\u00E4,\u00E6,\u00E3,\u00E5,\u0101,\u0103,\u0105,\u00AA",
   1146         // U+00F3: "" LATIN SMALL LETTER O WITH ACUTE
   1147         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
   1148         // U+00F4: "" LATIN SMALL LETTER O WITH CIRCUMFLEX
   1149         // U+00F2: "" LATIN SMALL LETTER O WITH GRAVE
   1150         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
   1151         // U+0153: "" LATIN SMALL LIGATURE OE
   1152         // U+00F8: "" LATIN SMALL LETTER O WITH STROKE
   1153         // U+014D: "" LATIN SMALL LETTER O WITH MACRON
   1154         // U+0151: "" LATIN SMALL LETTER O WITH DOUBLE ACUTE
   1155         // U+00BA: "" MASCULINE ORDINAL INDICATOR
   1156         /* morekeys_o */ "\u00F3,\u00F6,\u00F4,\u00F2,\u00F5,\u0153,\u00F8,\u014D,\u0151,\u00BA",
   1157         // U+00FA: "" LATIN SMALL LETTER U WITH ACUTE
   1158         // U+016F: "" LATIN SMALL LETTER U WITH RING ABOVE
   1159         // U+00FB: "" LATIN SMALL LETTER U WITH CIRCUMFLEX
   1160         // U+00FC: "" LATIN SMALL LETTER U WITH DIAERESIS
   1161         // U+00F9: "" LATIN SMALL LETTER U WITH GRAVE
   1162         // U+016B: "" LATIN SMALL LETTER U WITH MACRON
   1163         // U+0169: "" LATIN SMALL LETTER U WITH TILDE
   1164         // U+0171: "" LATIN SMALL LETTER U WITH DOUBLE ACUTE
   1165         // U+0173: "" LATIN SMALL LETTER U WITH OGONEK
   1166         // U+00B5: "" MICRO SIGN
   1167         /* morekeys_u */ "\u00FA,\u016F,\u00FB,\u00FC,\u00F9,\u016B,\u0169,\u0171,\u0173,\u00B5",
   1168         /* keylabel_to_alpha */ null,
   1169         // U+00E9: "" LATIN SMALL LETTER E WITH ACUTE
   1170         // U+011B: "" LATIN SMALL LETTER E WITH CARON
   1171         // U+00E8: "" LATIN SMALL LETTER E WITH GRAVE
   1172         // U+00EA: "" LATIN SMALL LETTER E WITH CIRCUMFLEX
   1173         // U+00EB: "" LATIN SMALL LETTER E WITH DIAERESIS
   1174         // U+0119: "" LATIN SMALL LETTER E WITH OGONEK
   1175         // U+0117: "" LATIN SMALL LETTER E WITH DOT ABOVE
   1176         // U+0113: "" LATIN SMALL LETTER E WITH MACRON
   1177         /* morekeys_e */ "\u00E9,\u011B,\u00E8,\u00EA,\u00EB,\u0119,\u0117,\u0113",
   1178         // U+00ED: "" LATIN SMALL LETTER I WITH ACUTE
   1179         // U+00EE: "" LATIN SMALL LETTER I WITH CIRCUMFLEX
   1180         // U+00EF: "" LATIN SMALL LETTER I WITH DIAERESIS
   1181         // U+0129: "" LATIN SMALL LETTER I WITH TILDE
   1182         // U+00EC: "" LATIN SMALL LETTER I WITH GRAVE
   1183         // U+012F: "" LATIN SMALL LETTER I WITH OGONEK
   1184         // U+012B: "" LATIN SMALL LETTER I WITH MACRON
   1185         // U+0131: "" LATIN SMALL LETTER DOTLESS I
   1186         // U+0133: "" LATIN SMALL LIGATURE IJ
   1187         /* morekeys_i */ "\u00ED,\u00EE,\u00EF,\u0129,\u00EC,\u012F,\u012B,\u0131,\u0133",
   1188         // U+0107: "" LATIN SMALL LETTER C WITH ACUTE
   1189         // U+010D: "" LATIN SMALL LETTER C WITH CARON
   1190         // U+00E7: "" LATIN SMALL LETTER C WITH CEDILLA
   1191         // U+010B: "" LATIN SMALL LETTER C WITH DOT ABOVE
   1192         /* morekeys_c */ "\u0107,\u010D,\u00E7,\u010B",
   1193         /* double_quotes */ null,
   1194         // U+00F1: "" LATIN SMALL LETTER N WITH TILDE
   1195         // U+0144: "" LATIN SMALL LETTER N WITH ACUTE
   1196         // U+0146: "" LATIN SMALL LETTER N WITH CEDILLA
   1197         // U+0148: "" LATIN SMALL LETTER N WITH CARON
   1198         // U+0149: "" LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
   1199         // U+014B: "" LATIN SMALL LETTER ENG
   1200         /* morekeys_n */ "\u00F1,\u0144,\u0146,\u0148,\u0149,\u014B",
   1201         /* single_quotes */ null,
   1202         // U+00DF: "" LATIN SMALL LETTER SHARP S
   1203         // U+0161: "" LATIN SMALL LETTER S WITH CARON
   1204         // U+015B: "" LATIN SMALL LETTER S WITH ACUTE
   1205         // U+0219: "" LATIN SMALL LETTER S WITH COMMA BELOW
   1206         // U+015F: "" LATIN SMALL LETTER S WITH CEDILLA
   1207         /* morekeys_s */ "\u00DF,\u0161,\u015B,\u0219,\u015F",
   1208         /* keyspec_currency */ null,
   1209         // U+00FD: "" LATIN SMALL LETTER Y WITH ACUTE
   1210         // U+0177: "" LATIN SMALL LETTER Y WITH CIRCUMFLEX
   1211         // U+00FF: "" LATIN SMALL LETTER Y WITH DIAERESIS
   1212         // U+00FE: "" LATIN SMALL LETTER THORN
   1213         /* morekeys_y */ "y,\u00FD,\u0177,\u00FF,\u00FE",
   1214         // U+00F0: "" LATIN SMALL LETTER ETH
   1215         // U+010F: "" LATIN SMALL LETTER D WITH CARON
   1216         // U+0111: "" LATIN SMALL LETTER D WITH STROKE
   1217         /* morekeys_d */ "\u00F0,\u010F,\u0111",
   1218         // U+017A: "" LATIN SMALL LETTER Z WITH ACUTE
   1219         // U+017C: "" LATIN SMALL LETTER Z WITH DOT ABOVE
   1220         // U+017E: "" LATIN SMALL LETTER Z WITH CARON
   1221         /* morekeys_z */ "\u017A,\u017C,\u017E",
   1222         // U+0165: "" LATIN SMALL LETTER T WITH CARON
   1223         // U+021B: "" LATIN SMALL LETTER T WITH COMMA BELOW
   1224         // U+0163: "" LATIN SMALL LETTER T WITH CEDILLA
   1225         // U+0167: "" LATIN SMALL LETTER T WITH STROKE
   1226         /* morekeys_t */ "\u0165,\u021B,\u0163,\u0167",
   1227         // U+013A: "" LATIN SMALL LETTER L WITH ACUTE
   1228         // U+013C: "" LATIN SMALL LETTER L WITH CEDILLA
   1229         // U+013E: "" LATIN SMALL LETTER L WITH CARON
   1230         // U+0140: "" LATIN SMALL LETTER L WITH MIDDLE DOT
   1231         // U+0142: "" LATIN SMALL LETTER L WITH STROKE
   1232         /* morekeys_l */ "\u013A,\u013C,\u013E,\u0140,\u0142",
   1233         // U+011F: "" LATIN SMALL LETTER G WITH BREVE
   1234         // U+0121: "" LATIN SMALL LETTER G WITH DOT ABOVE
   1235         // U+0123: "" LATIN SMALL LETTER G WITH CEDILLA
   1236         /* morekeys_g */ "\u011F,\u0121,\u0123",
   1237         /* single_angle_quotes */ null,
   1238         /* double_angle_quotes */ null,
   1239         // U+0159: "" LATIN SMALL LETTER R WITH CARON
   1240         // U+0155: "" LATIN SMALL LETTER R WITH ACUTE
   1241         // U+0157: "" LATIN SMALL LETTER R WITH CEDILLA
   1242         /* morekeys_r */ "\u0159,\u0155,\u0157",
   1243         // U+0137: "" LATIN SMALL LETTER K WITH CEDILLA
   1244         // U+0138: "" LATIN SMALL LETTER KRA
   1245         /* morekeys_k */ "\u0137,\u0138",
   1246         /* morekeys_cyrillic_ie ~ */
   1247         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   1248         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   1249         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   1250         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   1251         /* ~ morekeys_question */
   1252         // U+0125: "" LATIN SMALL LETTER H WITH CIRCUMFLEX
   1253         // U+0127: "" LATIN SMALL LETTER H WITH STROKE
   1254         /* morekeys_h */ "\u0125,\u0127",
   1255         // U+0175: "" LATIN SMALL LETTER W WITH CIRCUMFLEX
   1256         /* morekeys_w */ "w,\u0175",
   1257         /* morekeys_east_slavic_row2_2 ~ */
   1258         null, null, null, null, null, null, null, null, null, null, null,
   1259         /* ~ morekeys_tablet_punctuation */
   1260         // U+0135: "" LATIN SMALL LETTER J WITH CIRCUMFLEX
   1261         /* keyspec_spanish_row2_10 */ "\u0135",
   1262         /* morekeys_bullet ~ */
   1263         null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   1264         /* ~ morekeys_symbols_percent */
   1265         // U+0175: "" LATIN SMALL LETTER W WITH CIRCUMFLEX
   1266         /* morekeys_v */ "w,\u0175",
   1267         /* morekeys_j */ null,
   1268         /* morekeys_q */ "q",
   1269         /* morekeys_x */ "x",
   1270         // U+015D: "" LATIN SMALL LETTER S WITH CIRCUMFLEX
   1271         /* keyspec_q */ "\u015D",
   1272         // U+011D: "" LATIN SMALL LETTER G WITH CIRCUMFLEX
   1273         /* keyspec_w */ "\u011D",
   1274         // U+016D: "" LATIN SMALL LETTER U WITH BREVE
   1275         /* keyspec_y */ "\u016D",
   1276         // U+0109: "" LATIN SMALL LETTER C WITH CIRCUMFLEX
   1277         /* keyspec_x */ "\u0109",
   1278     };
   1279 
   1280     /* Locale es: Spanish */
   1281     private static final String[] TEXTS_es = {
   1282         // U+00E1: "" LATIN SMALL LETTER A WITH ACUTE
   1283         // U+00E0: "" LATIN SMALL LETTER A WITH GRAVE
   1284         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
   1285         // U+00E2: "" LATIN SMALL LETTER A WITH CIRCUMFLEX
   1286         // U+00E3: "" LATIN SMALL LETTER A WITH TILDE
   1287         // U+00E5: "" LATIN SMALL LETTER A WITH RING ABOVE
   1288         // U+0105: "" LATIN SMALL LETTER A WITH OGONEK
   1289         // U+00E6: "" LATIN SMALL LETTER AE
   1290         // U+0101: "" LATIN SMALL LETTER A WITH MACRON
   1291         // U+00AA: "" FEMININE ORDINAL INDICATOR
   1292         /* morekeys_a */ "\u00E1,\u00E0,\u00E4,\u00E2,\u00E3,\u00E5,\u0105,\u00E6,\u0101,\u00AA",
   1293         // U+00F3: "" LATIN SMALL LETTER O WITH ACUTE
   1294         // U+00F2: "" LATIN SMALL LETTER O WITH GRAVE
   1295         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
   1296         // U+00F4: "" LATIN SMALL LETTER O WITH CIRCUMFLEX
   1297         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
   1298         // U+00F8: "" LATIN SMALL LETTER O WITH STROKE
   1299         // U+0153: "" LATIN SMALL LIGATURE OE
   1300         // U+014D: "" LATIN SMALL LETTER O WITH MACRON
   1301         // U+00BA: "" MASCULINE ORDINAL INDICATOR
   1302         /* morekeys_o */ "\u00F3,\u00F2,\u00F6,\u00F4,\u00F5,\u00F8,\u0153,\u014D,\u00BA",
   1303         // U+00FA: "" LATIN SMALL LETTER U WITH ACUTE
   1304         // U+00FC: "" LATIN SMALL LETTER U WITH DIAERESIS
   1305         // U+00F9: "" LATIN SMALL LETTER U WITH GRAVE
   1306         // U+00FB: "" LATIN SMALL LETTER U WITH CIRCUMFLEX
   1307         // U+016B: "" LATIN SMALL LETTER U WITH MACRON
   1308         /* morekeys_u */ "\u00FA,\u00FC,\u00F9,\u00FB,\u016B",
   1309         /* keylabel_to_alpha */ null,
   1310         // U+00E9: "" LATIN SMALL LETTER E WITH ACUTE
   1311         // U+00E8: "" LATIN SMALL LETTER E WITH GRAVE
   1312         // U+00EB: "" LATIN SMALL LETTER E WITH DIAERESIS
   1313         // U+00EA: "" LATIN SMALL LETTER E WITH CIRCUMFLEX
   1314         // U+0119: "" LATIN SMALL LETTER E WITH OGONEK
   1315         // U+0117: "" LATIN SMALL LETTER E WITH DOT ABOVE
   1316         // U+0113: "" LATIN SMALL LETTER E WITH MACRON
   1317         /* morekeys_e */ "\u00E9,\u00E8,\u00EB,\u00EA,\u0119,\u0117,\u0113",
   1318         // U+00ED: "" LATIN SMALL LETTER I WITH ACUTE
   1319         // U+00EF: "" LATIN SMALL LETTER I WITH DIAERESIS
   1320         // U+00EC: "" LATIN SMALL LETTER I WITH GRAVE
   1321         // U+00EE: "" LATIN SMALL LETTER I WITH CIRCUMFLEX
   1322         // U+012F: "" LATIN SMALL LETTER I WITH OGONEK
   1323         // U+012B: "" LATIN SMALL LETTER I WITH MACRON
   1324         /* morekeys_i */ "\u00ED,\u00EF,\u00EC,\u00EE,\u012F,\u012B",
   1325         // U+00E7: "" LATIN SMALL LETTER C WITH CEDILLA
   1326         // U+0107: "" LATIN SMALL LETTER C WITH ACUTE
   1327         // U+010D: "" LATIN SMALL LETTER C WITH CARON
   1328         /* morekeys_c */ "\u00E7,\u0107,\u010D",
   1329         /* double_quotes */ null,
   1330         // U+00F1: "" LATIN SMALL LETTER N WITH TILDE
   1331         // U+0144: "" LATIN SMALL LETTER N WITH ACUTE
   1332         /* morekeys_n */ "\u00F1,\u0144",
   1333         /* single_quotes ~ */
   1334         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   1335         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   1336         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   1337         /* ~ morekeys_nordic_row2_11 */
   1338         // U+00A1: "" INVERTED EXCLAMATION MARK
   1339         // U+00BF: "" INVERTED QUESTION MARK
   1340         /* morekeys_punctuation */ "!autoColumnOrder!9,\\,,?,!,#,),(,/,;,\u00A1,',@,:,-,\",+,\\%,&,\u00BF",
   1341     };
   1342 
   1343     /* Locale et_EE: Estonian (Estonia) */
   1344     private static final String[] TEXTS_et_EE = {
   1345         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
   1346         // U+0101: "" LATIN SMALL LETTER A WITH MACRON
   1347         // U+00E0: "" LATIN SMALL LETTER A WITH GRAVE
   1348         // U+00E1: "" LATIN SMALL LETTER A WITH ACUTE
   1349         // U+00E2: "" LATIN SMALL LETTER A WITH CIRCUMFLEX
   1350         // U+00E3: "" LATIN SMALL LETTER A WITH TILDE
   1351         // U+00E5: "" LATIN SMALL LETTER A WITH RING ABOVE
   1352         // U+00E6: "" LATIN SMALL LETTER AE
   1353         // U+0105: "" LATIN SMALL LETTER A WITH OGONEK
   1354         /* morekeys_a */ "\u00E4,\u0101,\u00E0,\u00E1,\u00E2,\u00E3,\u00E5,\u00E6,\u0105",
   1355         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
   1356         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
   1357         // U+00F2: "" LATIN SMALL LETTER O WITH GRAVE
   1358         // U+00F3: "" LATIN SMALL LETTER O WITH ACUTE
   1359         // U+00F4: "" LATIN SMALL LETTER O WITH CIRCUMFLEX
   1360         // U+0153: "" LATIN SMALL LIGATURE OE
   1361         // U+0151: "" LATIN SMALL LETTER O WITH DOUBLE ACUTE
   1362         // U+00F8: "" LATIN SMALL LETTER O WITH STROKE
   1363         /* morekeys_o */ "\u00F6,\u00F5,\u00F2,\u00F3,\u00F4,\u0153,\u0151,\u00F8",
   1364         // U+00FC: "" LATIN SMALL LETTER U WITH DIAERESIS
   1365         // U+016B: "" LATIN SMALL LETTER U WITH MACRON
   1366         // U+0173: "" LATIN SMALL LETTER U WITH OGONEK
   1367         // U+00F9: "" LATIN SMALL LETTER U WITH GRAVE
   1368         // U+00FA: "" LATIN SMALL LETTER U WITH ACUTE
   1369         // U+00FB: "" LATIN SMALL LETTER U WITH CIRCUMFLEX
   1370         // U+016F: "" LATIN SMALL LETTER U WITH RING ABOVE
   1371         // U+0171: "" LATIN SMALL LETTER U WITH DOUBLE ACUTE
   1372         /* morekeys_u */ "\u00FC,\u016B,\u0173,\u00F9,\u00FA,\u00FB,\u016F,\u0171",
   1373         /* keylabel_to_alpha */ null,
   1374         // U+0113: "" LATIN SMALL LETTER E WITH MACRON
   1375         // U+00E8: "" LATIN SMALL LETTER E WITH GRAVE
   1376         // U+0117: "" LATIN SMALL LETTER E WITH DOT ABOVE
   1377         // U+00E9: "" LATIN SMALL LETTER E WITH ACUTE
   1378         // U+00EA: "" LATIN SMALL LETTER E WITH CIRCUMFLEX
   1379         // U+00EB: "" LATIN SMALL LETTER E WITH DIAERESIS
   1380         // U+0119: "" LATIN SMALL LETTER E WITH OGONEK
   1381         // U+011B: "" LATIN SMALL LETTER E WITH CARON
   1382         /* morekeys_e */ "\u0113,\u00E8,\u0117,\u00E9,\u00EA,\u00EB,\u0119,\u011B",
   1383         // U+012B: "" LATIN SMALL LETTER I WITH MACRON
   1384         // U+00EC: "" LATIN SMALL LETTER I WITH GRAVE
   1385         // U+012F: "" LATIN SMALL LETTER I WITH OGONEK
   1386         // U+00ED: "" LATIN SMALL LETTER I WITH ACUTE
   1387         // U+00EE: "" LATIN SMALL LETTER I WITH CIRCUMFLEX
   1388         // U+00EF: "" LATIN SMALL LETTER I WITH DIAERESIS
   1389         // U+0131: "" LATIN SMALL LETTER DOTLESS I
   1390         /* morekeys_i */ "\u012B,\u00EC,\u012F,\u00ED,\u00EE,\u00EF,\u0131",
   1391         // U+010D: "" LATIN SMALL LETTER C WITH CARON
   1392         // U+00E7: "" LATIN SMALL LETTER C WITH CEDILLA
   1393         // U+0107: "" LATIN SMALL LETTER C WITH ACUTE
   1394         /* morekeys_c */ "\u010D,\u00E7,\u0107",
   1395         /* double_quotes */ "!text/double_9qm_lqm",
   1396         // U+0146: "" LATIN SMALL LETTER N WITH CEDILLA
   1397         // U+00F1: "" LATIN SMALL LETTER N WITH TILDE
   1398         // U+0144: "" LATIN SMALL LETTER N WITH ACUTE
   1399         /* morekeys_n */ "\u0146,\u00F1,\u0144",
   1400         /* single_quotes */ "!text/single_9qm_lqm",
   1401         // U+0161: "" LATIN SMALL LETTER S WITH CARON
   1402         // U+00DF: "" LATIN SMALL LETTER SHARP S
   1403         // U+015B: "" LATIN SMALL LETTER S WITH ACUTE
   1404         // U+015F: "" LATIN SMALL LETTER S WITH CEDILLA
   1405         /* morekeys_s */ "\u0161,\u00DF,\u015B,\u015F",
   1406         /* keyspec_currency */ null,
   1407         // U+00FD: "" LATIN SMALL LETTER Y WITH ACUTE
   1408         // U+00FF: "" LATIN SMALL LETTER Y WITH DIAERESIS
   1409         /* morekeys_y */ "\u00FD,\u00FF",
   1410         // U+010F: "" LATIN SMALL LETTER D WITH CARON
   1411         /* morekeys_d */ "\u010F",
   1412         // U+017E: "" LATIN SMALL LETTER Z WITH CARON
   1413         // U+017C: "" LATIN SMALL LETTER Z WITH DOT ABOVE
   1414         // U+017A: "" LATIN SMALL LETTER Z WITH ACUTE
   1415         /* morekeys_z */ "\u017E,\u017C,\u017A",
   1416         // U+0163: "" LATIN SMALL LETTER T WITH CEDILLA
   1417         // U+0165: "" LATIN SMALL LETTER T WITH CARON
   1418         /* morekeys_t */ "\u0163,\u0165",
   1419         // U+013C: "" LATIN SMALL LETTER L WITH CEDILLA
   1420         // U+0142: "" LATIN SMALL LETTER L WITH STROKE
   1421         // U+013A: "" LATIN SMALL LETTER L WITH ACUTE
   1422         // U+013E: "" LATIN SMALL LETTER L WITH CARON
   1423         /* morekeys_l */ "\u013C,\u0142,\u013A,\u013E",
   1424         // U+0123: "" LATIN SMALL LETTER G WITH CEDILLA
   1425         // U+011F: "" LATIN SMALL LETTER G WITH BREVE
   1426         /* morekeys_g */ "\u0123,\u011F",
   1427         /* single_angle_quotes */ null,
   1428         /* double_angle_quotes */ null,
   1429         // U+0157: "" LATIN SMALL LETTER R WITH CEDILLA
   1430         // U+0159: "" LATIN SMALL LETTER R WITH CARON
   1431         // U+0155: "" LATIN SMALL LETTER R WITH ACUTE
   1432         /* morekeys_r */ "\u0157,\u0159,\u0155",
   1433         // U+0137: "" LATIN SMALL LETTER K WITH CEDILLA
   1434         /* morekeys_k */ "\u0137",
   1435         /* morekeys_cyrillic_ie */ null,
   1436         // U+00FC: "" LATIN SMALL LETTER U WITH DIAERESIS
   1437         /* keyspec_nordic_row1_11 */ "\u00FC",
   1438         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
   1439         /* keyspec_nordic_row2_10 */ "\u00F6",
   1440         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
   1441         /* keyspec_nordic_row2_11 */ "\u00E4",
   1442         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
   1443         /* morekeys_nordic_row2_10 */ "\u00F5",
   1444     };
   1445 
   1446     /* Locale eu_ES: Basque (Spain) */
   1447     private static final String[] TEXTS_eu_ES = {
   1448         // U+00E1: "" LATIN SMALL LETTER A WITH ACUTE
   1449         // U+00E0: "" LATIN SMALL LETTER A WITH GRAVE
   1450         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
   1451         // U+00E2: "" LATIN SMALL LETTER A WITH CIRCUMFLEX
   1452         // U+00E3: "" LATIN SMALL LETTER A WITH TILDE
   1453         // U+00E5: "" LATIN SMALL LETTER A WITH RING ABOVE
   1454         // U+0105: "" LATIN SMALL LETTER A WITH OGONEK
   1455         // U+00E6: "" LATIN SMALL LETTER AE
   1456         // U+0101: "" LATIN SMALL LETTER A WITH MACRON
   1457         // U+00AA: "" FEMININE ORDINAL INDICATOR
   1458         /* morekeys_a */ "\u00E1,\u00E0,\u00E4,\u00E2,\u00E3,\u00E5,\u0105,\u00E6,\u0101,\u00AA",
   1459         // U+00F3: "" LATIN SMALL LETTER O WITH ACUTE
   1460         // U+00F2: "" LATIN SMALL LETTER O WITH GRAVE
   1461         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
   1462         // U+00F4: "" LATIN SMALL LETTER O WITH CIRCUMFLEX
   1463         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
   1464         // U+00F8: "" LATIN SMALL LETTER O WITH STROKE
   1465         // U+0153: "" LATIN SMALL LIGATURE OE
   1466         // U+014D: "" LATIN SMALL LETTER O WITH MACRON
   1467         // U+00BA: "" MASCULINE ORDINAL INDICATOR
   1468         /* morekeys_o */ "\u00F3,\u00F2,\u00F6,\u00F4,\u00F5,\u00F8,\u0153,\u014D,\u00BA",
   1469         // U+00FA: "" LATIN SMALL LETTER U WITH ACUTE
   1470         // U+00FC: "" LATIN SMALL LETTER U WITH DIAERESIS
   1471         // U+00F9: "" LATIN SMALL LETTER U WITH GRAVE
   1472         // U+00FB: "" LATIN SMALL LETTER U WITH CIRCUMFLEX
   1473         // U+016B: "" LATIN SMALL LETTER U WITH MACRON
   1474         /* morekeys_u */ "\u00FA,\u00FC,\u00F9,\u00FB,\u016B",
   1475         /* keylabel_to_alpha */ null,
   1476         // U+00E9: "" LATIN SMALL LETTER E WITH ACUTE
   1477         // U+00E8: "" LATIN SMALL LETTER E WITH GRAVE
   1478         // U+00EB: "" LATIN SMALL LETTER E WITH DIAERESIS
   1479         // U+00EA: "" LATIN SMALL LETTER E WITH CIRCUMFLEX
   1480         // U+0119: "" LATIN SMALL LETTER E WITH OGONEK
   1481         // U+0117: "" LATIN SMALL LETTER E WITH DOT ABOVE
   1482         // U+0113: "" LATIN SMALL LETTER E WITH MACRON
   1483         /* morekeys_e */ "\u00E9,\u00E8,\u00EB,\u00EA,\u0119,\u0117,\u0113",
   1484         // U+00ED: "" LATIN SMALL LETTER I WITH ACUTE
   1485         // U+00EF: "" LATIN SMALL LETTER I WITH DIAERESIS
   1486         // U+00EC: "" LATIN SMALL LETTER I WITH GRAVE
   1487         // U+00EE: "" LATIN SMALL LETTER I WITH CIRCUMFLEX
   1488         // U+012F: "" LATIN SMALL LETTER I WITH OGONEK
   1489         // U+012B: "" LATIN SMALL LETTER I WITH MACRON
   1490         /* morekeys_i */ "\u00ED,\u00EF,\u00EC,\u00EE,\u012F,\u012B",
   1491         // U+00E7: "" LATIN SMALL LETTER C WITH CEDILLA
   1492         // U+0107: "" LATIN SMALL LETTER C WITH ACUTE
   1493         // U+010D: "" LATIN SMALL LETTER C WITH CARON
   1494         /* morekeys_c */ "\u00E7,\u0107,\u010D",
   1495         /* double_quotes */ null,
   1496         // U+00F1: "" LATIN SMALL LETTER N WITH TILDE
   1497         // U+0144: "" LATIN SMALL LETTER N WITH ACUTE
   1498         /* morekeys_n */ "\u00F1,\u0144",
   1499     };
   1500 
   1501     /* Locale fa: Persian */
   1502     private static final String[] TEXTS_fa = {
   1503         /* morekeys_a ~ */
   1504         null, null, null,
   1505         /* ~ morekeys_u */
   1506         // Label for "switch to alphabetic" key.
   1507         // U+0627: "" ARABIC LETTER ALEF
   1508         // U+200C: ZERO WIDTH NON-JOINER
   1509         // U+0628: "" ARABIC LETTER BEH
   1510         // U+067E: "" ARABIC LETTER PEH
   1511         /* keylabel_to_alpha */ "\u0627\u200C\u0628\u200C\u067E",
   1512         /* morekeys_e ~ */
   1513         null, null, null, null, null, null, null,
   1514         /* ~ morekeys_s */
   1515         // U+FDFC: "" RIAL SIGN
   1516         /* keyspec_currency */ "\uFDFC",
   1517         /* morekeys_y ~ */
   1518         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   1519         null, null, null, null, null,
   1520         /* ~ morekeys_cyrillic_soft_sign */
   1521         // U+06F1: "" EXTENDED ARABIC-INDIC DIGIT ONE
   1522         /* keyspec_symbols_1 */ "\u06F1",
   1523         // U+06F2: "" EXTENDED ARABIC-INDIC DIGIT TWO
   1524         /* keyspec_symbols_2 */ "\u06F2",
   1525         // U+06F3: "" EXTENDED ARABIC-INDIC DIGIT THREE
   1526         /* keyspec_symbols_3 */ "\u06F3",
   1527         // U+06F4: "" EXTENDED ARABIC-INDIC DIGIT FOUR
   1528         /* keyspec_symbols_4 */ "\u06F4",
   1529         // U+06F5: "" EXTENDED ARABIC-INDIC DIGIT FIVE
   1530         /* keyspec_symbols_5 */ "\u06F5",
   1531         // U+06F6: "" EXTENDED ARABIC-INDIC DIGIT SIX
   1532         /* keyspec_symbols_6 */ "\u06F6",
   1533         // U+06F7: "" EXTENDED ARABIC-INDIC DIGIT SEVEN
   1534         /* keyspec_symbols_7 */ "\u06F7",
   1535         // U+06F8: "" EXTENDED ARABIC-INDIC DIGIT EIGHT
   1536         /* keyspec_symbols_8 */ "\u06F8",
   1537         // U+06F9: "" EXTENDED ARABIC-INDIC DIGIT NINE
   1538         /* keyspec_symbols_9 */ "\u06F9",
   1539         // U+06F0: "" EXTENDED ARABIC-INDIC DIGIT ZERO
   1540         /* keyspec_symbols_0 */ "\u06F0",
   1541         // Label for "switch to symbols" key.
   1542         // U+061F: "" ARABIC QUESTION MARK
   1543         /* keylabel_to_symbol */ "\u06F3\u06F2\u06F1\u061F",
   1544         /* additional_morekeys_symbols_1 */ "1",
   1545         /* additional_morekeys_symbols_2 */ "2",
   1546         /* additional_morekeys_symbols_3 */ "3",
   1547         /* additional_morekeys_symbols_4 */ "4",
   1548         /* additional_morekeys_symbols_5 */ "5",
   1549         /* additional_morekeys_symbols_6 */ "6",
   1550         /* additional_morekeys_symbols_7 */ "7",
   1551         /* additional_morekeys_symbols_8 */ "8",
   1552         /* additional_morekeys_symbols_9 */ "9",
   1553         // U+066B: "" ARABIC DECIMAL SEPARATOR
   1554         // U+066C: "" ARABIC THOUSANDS SEPARATOR
   1555         /* additional_morekeys_symbols_0 */ "0,\u066B,\u066C",
   1556         /* morekeys_nordic_row2_11 */ null,
   1557         /* morekeys_punctuation */ null,
   1558         // U+060C: "" ARABIC COMMA
   1559         // U+061B: "" ARABIC SEMICOLON
   1560         // U+061F: "" ARABIC QUESTION MARK
   1561         // U+00AB: "" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
   1562         // U+00BB: "" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
   1563         /* keyspec_tablet_comma */ "\u060C",
   1564         /* keyspec_swiss_row1_11 ~ */
   1565         null, null, null, null, null, null,
   1566         /* ~ morekeys_swiss_row2_11 */
   1567         // U+2605: "" BLACK STAR
   1568         // U+066D: "" ARABIC FIVE POINTED STAR
   1569         /* morekeys_star */ "\u2605,\u066D",
   1570         /* keyspec_left_parenthesis */ "(|)",
   1571         /* keyspec_right_parenthesis */ ")|(",
   1572         /* keyspec_left_square_bracket */ "[|]",
   1573         /* keyspec_right_square_bracket */ "]|[",
   1574         /* keyspec_left_curly_bracket */ "{|}",
   1575         /* keyspec_right_curly_bracket */ "}|{",
   1576         /* keyspec_less_than */ "<|>",
   1577         /* keyspec_greater_than */ ">|<",
   1578         /* keyspec_less_than_equal */ "\u2264|\u2265",
   1579         /* keyspec_greater_than_equal */ "\u2265|\u2264",
   1580         /* keyspec_left_double_angle_quote */ "\u00AB|\u00BB",
   1581         /* keyspec_right_double_angle_quote */ "\u00BB|\u00AB",
   1582         /* keyspec_left_single_angle_quote */ "\u2039|\u203A",
   1583         /* keyspec_right_single_angle_quote */ "\u203A|\u2039",
   1584         // U+060C: "" ARABIC COMMA
   1585         /* keyspec_comma */ "\u060C",
   1586         /* morekeys_tablet_comma */ "!fixedColumnOrder!4,:,!,\u061F,\u061B,-,!text/keyspec_left_double_angle_quote,!text/keyspec_right_double_angle_quote",
   1587         // U+064B: "" ARABIC FATHATAN
   1588         /* keyhintlabel_period */ "\u064B",
   1589         /* morekeys_tablet_period */ "!text/morekeys_arabic_diacritics",
   1590         // U+00BF: "" INVERTED QUESTION MARK
   1591         /* morekeys_question */ "?,\u00BF",
   1592         /* morekeys_h ~ */
   1593         null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   1594         /* ~ keyspec_spanish_row2_10 */
   1595         // U+266A: "" EIGHTH NOTE
   1596         /* morekeys_bullet */ "\u266A",
   1597         // The all letters need to be mirrored are found at
   1598         // http://www.unicode.org/Public/6.1.0/ucd/BidiMirroring.txt
   1599         // U+FD3E: "" ORNATE LEFT PARENTHESIS
   1600         // U+FD3F: "" ORNATE RIGHT PARENTHESIS
   1601         /* morekeys_left_parenthesis */ "!fixedColumnOrder!4,\uFD3E|\uFD3F,!text/keyspecs_left_parenthesis_more_keys",
   1602         /* morekeys_right_parenthesis */ "!fixedColumnOrder!4,\uFD3F|\uFD3E,!text/keyspecs_right_parenthesis_more_keys",
   1603         // U+0655: "" ARABIC HAMZA BELOW
   1604         // U+0652: "" ARABIC SUKUN
   1605         // U+0651: "" ARABIC SHADDA
   1606         // U+064C: "" ARABIC DAMMATAN
   1607         // U+064D: "" ARABIC KASRATAN
   1608         // U+064B: "" ARABIC FATHATAN
   1609         // U+0654: "" ARABIC HAMZA ABOVE
   1610         // U+0656: "" ARABIC SUBSCRIPT ALEF
   1611         // U+0670: "" ARABIC LETTER SUPERSCRIPT ALEF
   1612         // U+0653: "" ARABIC MADDAH ABOVE
   1613         // U+064F: "" ARABIC DAMMA
   1614         // U+0650: "" ARABIC KASRA
   1615         // U+064E: "" ARABIC FATHA
   1616         // U+0640: "" ARABIC TATWEEL
   1617         // In order to make Tatweel easily distinguishable from other punctuations, we use consecutive Tatweels only for its displayed label.
   1618         // Note: The space character is needed as a preceding letter to draw Arabic diacritics characters correctly.
   1619         /* morekeys_arabic_diacritics */ "!fixedColumnOrder!7, \u0655|\u0655, \u0652|\u0652, \u0651|\u0651, \u064C|\u064C, \u064D|\u064D, \u064B|\u064B, \u0654|\u0654, \u0656|\u0656, \u0670|\u0670, \u0653|\u0653, \u064F|\u064F, \u0650|\u0650, \u064E|\u064E,\u0640\u0640\u0640|\u0640",
   1620         /* keyhintlabel_tablet_comma */ "\u061F",
   1621         /* keyspec_period */ null,
   1622         /* morekeys_period */ "!text/morekeys_arabic_diacritics",
   1623         /* keyspec_tablet_period */ null,
   1624         /* keyhintlabel_tablet_period */ "\u064B",
   1625         /* keyspec_symbols_question */ "\u061F",
   1626         /* keyspec_symbols_semicolon */ "\u061B",
   1627         // U+066A: "" ARABIC PERCENT SIGN
   1628         /* keyspec_symbols_percent */ "\u066A",
   1629         /* morekeys_symbols_semicolon */ ";",
   1630         // U+2030: "" PER MILLE SIGN
   1631         /* morekeys_symbols_percent */ "\\%,\u2030",
   1632         /* morekeys_v ~ */
   1633         null, null, null, null, null, null, null, null, null, null, null, null, null,
   1634         /* ~ morekeys_plus */
   1635         // U+2264: "" LESS-THAN OR EQUAL TO
   1636         // U+2265: "" GREATER-THAN EQUAL TO
   1637         // U+00AB: "" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
   1638         // U+00BB: "" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
   1639         // U+2039: "" SINGLE LEFT-POINTING ANGLE QUOTATION MARK
   1640         // U+203A: "" SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
   1641         /* morekeys_less_than */ "!fixedColumnOrder!3,!text/keyspec_left_single_angle_quote,!text/keyspec_less_than_equal,!text/keyspec_less_than",
   1642         /* morekeys_greater_than */ "!fixedColumnOrder!3,!text/keyspec_right_single_angle_quote,!text/keyspec_greater_than_equal,!text/keyspec_greater_than",
   1643     };
   1644 
   1645     /* Locale fi: Finnish */
   1646     private static final String[] TEXTS_fi = {
   1647         // U+00E6: "" LATIN SMALL LETTER AE
   1648         // U+00E0: "" LATIN SMALL LETTER A WITH GRAVE
   1649         // U+00E1: "" LATIN SMALL LETTER A WITH ACUTE
   1650         // U+00E2: "" LATIN SMALL LETTER A WITH CIRCUMFLEX
   1651         // U+00E3: "" LATIN SMALL LETTER A WITH TILDE
   1652         // U+0101: "" LATIN SMALL LETTER A WITH MACRON
   1653         /* morekeys_a */ "\u00E6,\u00E0,\u00E1,\u00E2,\u00E3,\u0101",
   1654         // U+00F8: "" LATIN SMALL LETTER O WITH STROKE
   1655         // U+00F4: "" LATIN SMALL LETTER O WITH CIRCUMFLEX
   1656         // U+00F2: "" LATIN SMALL LETTER O WITH GRAVE
   1657         // U+00F3: "" LATIN SMALL LETTER O WITH ACUTE
   1658         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
   1659         // U+0153: "" LATIN SMALL LIGATURE OE
   1660         // U+014D: "" LATIN SMALL LETTER O WITH MACRON
   1661         /* morekeys_o */ "\u00F8,\u00F4,\u00F2,\u00F3,\u00F5,\u0153,\u014D",
   1662         // U+00FC: "" LATIN SMALL LETTER U WITH DIAERESIS
   1663         /* morekeys_u */ "\u00FC",
   1664         /* keylabel_to_alpha ~ */
   1665         null, null, null, null, null, null, null,
   1666         /* ~ single_quotes */
   1667         // U+0161: "" LATIN SMALL LETTER S WITH CARON
   1668         // U+00DF: "" LATIN SMALL LETTER SHARP S
   1669         // U+015B: "" LATIN SMALL LETTER S WITH ACUTE
   1670         /* morekeys_s */ "\u0161,\u00DF,\u015B",
   1671         /* keyspec_currency ~ */
   1672         null, null, null,
   1673         /* ~ morekeys_d */
   1674         // U+017E: "" LATIN SMALL LETTER Z WITH CARON
   1675         // U+017A: "" LATIN SMALL LETTER Z WITH ACUTE
   1676         // U+017C: "" LATIN SMALL LETTER Z WITH DOT ABOVE
   1677         /* morekeys_z */ "\u017E,\u017A,\u017C",
   1678         /* morekeys_t ~ */
   1679         null, null, null, null, null, null, null, null,
   1680         /* ~ morekeys_cyrillic_ie */
   1681         // U+00E5: "" LATIN SMALL LETTER A WITH RING ABOVE
   1682         /* keyspec_nordic_row1_11 */ "\u00E5",
   1683         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
   1684         /* keyspec_nordic_row2_10 */ "\u00F6",
   1685         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
   1686         /* keyspec_nordic_row2_11 */ "\u00E4",
   1687         // U+00F8: "" LATIN SMALL LETTER O WITH STROKE
   1688         /* morekeys_nordic_row2_10 */ "\u00F8",
   1689         /* keyspec_east_slavic_row1_9 ~ */
   1690         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   1691         null, null, null, null, null, null, null, null, null, null, null,
   1692         /* ~ additional_morekeys_symbols_0 */
   1693         // U+00E6: "" LATIN SMALL LETTER AE
   1694         /* morekeys_nordic_row2_11 */ "\u00E6",
   1695     };
   1696 
   1697     /* Locale fr: French */
   1698     private static final String[] TEXTS_fr = {
   1699         // U+00E0: "" LATIN SMALL LETTER A WITH GRAVE
   1700         // U+00E2: "" LATIN SMALL LETTER A WITH CIRCUMFLEX
   1701         // U+00E6: "" LATIN SMALL LETTER AE
   1702         // U+00E1: "" LATIN SMALL LETTER A WITH ACUTE
   1703         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
   1704         // U+00E3: "" LATIN SMALL LETTER A WITH TILDE
   1705         // U+00E5: "" LATIN SMALL LETTER A WITH RING ABOVE
   1706         // U+0101: "" LATIN SMALL LETTER A WITH MACRON
   1707         // U+00AA: "" FEMININE ORDINAL INDICATOR
   1708         /* morekeys_a */ "\u00E0,\u00E2,%,\u00E6,\u00E1,\u00E4,\u00E3,\u00E5,\u0101,\u00AA",
   1709         // U+00F4: "" LATIN SMALL LETTER O WITH CIRCUMFLEX
   1710         // U+0153: "" LATIN SMALL LIGATURE OE
   1711         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
   1712         // U+00F2: "" LATIN SMALL LETTER O WITH GRAVE
   1713         // U+00F3: "" LATIN SMALL LETTER O WITH ACUTE
   1714         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
   1715         // U+00F8: "" LATIN SMALL LETTER O WITH STROKE
   1716         // U+014D: "" LATIN SMALL LETTER O WITH MACRON
   1717         // U+00BA: "" MASCULINE ORDINAL INDICATOR
   1718         /* morekeys_o */ "\u00F4,\u0153,%,\u00F6,\u00F2,\u00F3,\u00F5,\u00F8,\u014D,\u00BA",
   1719         // U+00F9: "" LATIN SMALL LETTER U WITH GRAVE
   1720         // U+00FB: "" LATIN SMALL LETTER U WITH CIRCUMFLEX
   1721         // U+00FC: "" LATIN SMALL LETTER U WITH DIAERESIS
   1722         // U+00FA: "" LATIN SMALL LETTER U WITH ACUTE
   1723         // U+016B: "" LATIN SMALL LETTER U WITH MACRON
   1724         /* morekeys_u */ "\u00F9,\u00FB,%,\u00FC,\u00FA,\u016B",
   1725         /* keylabel_to_alpha */ null,
   1726         // U+00E9: "" LATIN SMALL LETTER E WITH ACUTE
   1727         // U+00E8: "" LATIN SMALL LETTER E WITH GRAVE
   1728         // U+00EA: "" LATIN SMALL LETTER E WITH CIRCUMFLEX
   1729         // U+00EB: "" LATIN SMALL LETTER E WITH DIAERESIS
   1730         // U+0119: "" LATIN SMALL LETTER E WITH OGONEK
   1731         // U+0117: "" LATIN SMALL LETTER E WITH DOT ABOVE
   1732         // U+0113: "" LATIN SMALL LETTER E WITH MACRON
   1733         /* morekeys_e */ "\u00E9,\u00E8,\u00EA,\u00EB,%,\u0119,\u0117,\u0113",
   1734         // U+00EE: "" LATIN SMALL LETTER I WITH CIRCUMFLEX
   1735         // U+00EF: "" LATIN SMALL LETTER I WITH DIAERESIS
   1736         // U+00EC: "" LATIN SMALL LETTER I WITH GRAVE
   1737         // U+00ED: "" LATIN SMALL LETTER I WITH ACUTE
   1738         // U+012F: "" LATIN SMALL LETTER I WITH OGONEK
   1739         // U+012B: "" LATIN SMALL LETTER I WITH MACRON
   1740         /* morekeys_i */ "\u00EE,%,\u00EF,\u00EC,\u00ED,\u012F,\u012B",
   1741         // U+00E7: "" LATIN SMALL LETTER C WITH CEDILLA
   1742         // U+0107: "" LATIN SMALL LETTER C WITH ACUTE
   1743         // U+010D: "" LATIN SMALL LETTER C WITH CARON
   1744         /* morekeys_c */ "\u00E7,%,\u0107,\u010D",
   1745         /* double_quotes ~ */
   1746         null, null, null, null, null,
   1747         /* ~ keyspec_currency */
   1748         // U+00FF: "" LATIN SMALL LETTER Y WITH DIAERESIS
   1749         /* morekeys_y */ "%,\u00FF",
   1750         /* morekeys_d ~ */
   1751         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   1752         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   1753         null, null, null, null, null, null, null, null, null, null, null, null, null,
   1754         /* ~ keyspec_tablet_comma */
   1755         // U+00E8: "" LATIN SMALL LETTER E WITH GRAVE
   1756         /* keyspec_swiss_row1_11 */ "\u00E8",
   1757         // U+00E9: "" LATIN SMALL LETTER E WITH ACUTE
   1758         /* keyspec_swiss_row2_10 */ "\u00E9",
   1759         // U+00E0: "" LATIN SMALL LETTER A WITH GRAVE
   1760         /* keyspec_swiss_row2_11 */ "\u00E0",
   1761         // U+00FC: "" LATIN SMALL LETTER U WITH DIAERESIS
   1762         /* morekeys_swiss_row1_11 */ "\u00FC",
   1763         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
   1764         /* morekeys_swiss_row2_10 */ "\u00F6",
   1765         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
   1766         /* morekeys_swiss_row2_11 */ "\u00E4",
   1767     };
   1768 
   1769     /* Locale gl_ES: Gallegan (Spain) */
   1770     private static final String[] TEXTS_gl_ES = {
   1771         // U+00E1: "" LATIN SMALL LETTER A WITH ACUTE
   1772         // U+00E0: "" LATIN SMALL LETTER A WITH GRAVE
   1773         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
   1774         // U+00E2: "" LATIN SMALL LETTER A WITH CIRCUMFLEX
   1775         // U+00E3: "" LATIN SMALL LETTER A WITH TILDE
   1776         // U+00E5: "" LATIN SMALL LETTER A WITH RING ABOVE
   1777         // U+0105: "" LATIN SMALL LETTER A WITH OGONEK
   1778         // U+00E6: "" LATIN SMALL LETTER AE
   1779         // U+0101: "" LATIN SMALL LETTER A WITH MACRON
   1780         // U+00AA: "" FEMININE ORDINAL INDICATOR
   1781         /* morekeys_a */ "\u00E1,\u00E0,\u00E4,\u00E2,\u00E3,\u00E5,\u0105,\u00E6,\u0101,\u00AA",
   1782         // U+00F3: "" LATIN SMALL LETTER O WITH ACUTE
   1783         // U+00F2: "" LATIN SMALL LETTER O WITH GRAVE
   1784         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
   1785         // U+00F4: "" LATIN SMALL LETTER O WITH CIRCUMFLEX
   1786         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
   1787         // U+00F8: "" LATIN SMALL LETTER O WITH STROKE
   1788         // U+0153: "" LATIN SMALL LIGATURE OE
   1789         // U+014D: "" LATIN SMALL LETTER O WITH MACRON
   1790         // U+00BA: "" MASCULINE ORDINAL INDICATOR
   1791         /* morekeys_o */ "\u00F3,\u00F2,\u00F6,\u00F4,\u00F5,\u00F8,\u0153,\u014D,\u00BA",
   1792         // U+00FA: "" LATIN SMALL LETTER U WITH ACUTE
   1793         // U+00FC: "" LATIN SMALL LETTER U WITH DIAERESIS
   1794         // U+00F9: "" LATIN SMALL LETTER U WITH GRAVE
   1795         // U+00FB: "" LATIN SMALL LETTER U WITH CIRCUMFLEX
   1796         // U+016B: "" LATIN SMALL LETTER U WITH MACRON
   1797         /* morekeys_u */ "\u00FA,\u00FC,\u00F9,\u00FB,\u016B",
   1798         /* keylabel_to_alpha */ null,
   1799         // U+00E9: "" LATIN SMALL LETTER E WITH ACUTE
   1800         // U+00E8: "" LATIN SMALL LETTER E WITH GRAVE
   1801         // U+00EB: "" LATIN SMALL LETTER E WITH DIAERESIS
   1802         // U+00EA: "" LATIN SMALL LETTER E WITH CIRCUMFLEX
   1803         // U+0119: "" LATIN SMALL LETTER E WITH OGONEK
   1804         // U+0117: "" LATIN SMALL LETTER E WITH DOT ABOVE
   1805         // U+0113: "" LATIN SMALL LETTER E WITH MACRON
   1806         /* morekeys_e */ "\u00E9,\u00E8,\u00EB,\u00EA,\u0119,\u0117,\u0113",
   1807         // U+00ED: "" LATIN SMALL LETTER I WITH ACUTE
   1808         // U+00EF: "" LATIN SMALL LETTER I WITH DIAERESIS
   1809         // U+00EC: "" LATIN SMALL LETTER I WITH GRAVE
   1810         // U+00EE: "" LATIN SMALL LETTER I WITH CIRCUMFLEX
   1811         // U+012F: "" LATIN SMALL LETTER I WITH OGONEK
   1812         // U+012B: "" LATIN SMALL LETTER I WITH MACRON
   1813         /* morekeys_i */ "\u00ED,\u00EF,\u00EC,\u00EE,\u012F,\u012B",
   1814         // U+00E7: "" LATIN SMALL LETTER C WITH CEDILLA
   1815         // U+0107: "" LATIN SMALL LETTER C WITH ACUTE
   1816         // U+010D: "" LATIN SMALL LETTER C WITH CARON
   1817         /* morekeys_c */ "\u00E7,\u0107,\u010D",
   1818         /* double_quotes */ null,
   1819         // U+00F1: "" LATIN SMALL LETTER N WITH TILDE
   1820         // U+0144: "" LATIN SMALL LETTER N WITH ACUTE
   1821         /* morekeys_n */ "\u00F1,\u0144",
   1822     };
   1823 
   1824     /* Locale hi: Hindi */
   1825     private static final String[] TEXTS_hi = {
   1826         /* morekeys_a ~ */
   1827         null, null, null,
   1828         /* ~ morekeys_u */
   1829         // Label for "switch to alphabetic" key.
   1830         // U+0915: "" DEVANAGARI LETTER KA
   1831         // U+0916: "" DEVANAGARI LETTER KHA
   1832         // U+0917: "" DEVANAGARI LETTER GA
   1833         /* keylabel_to_alpha */ "\u0915\u0916\u0917",
   1834         /* morekeys_e ~ */
   1835         null, null, null, null, null, null, null,
   1836         /* ~ morekeys_s */
   1837         // U+20B9: "" INDIAN RUPEE SIGN
   1838         /* keyspec_currency */ "\u20B9",
   1839         /* morekeys_y ~ */
   1840         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   1841         null, null, null, null, null,
   1842         /* ~ morekeys_cyrillic_soft_sign */
   1843         // U+0967: "" DEVANAGARI DIGIT ONE
   1844         /* keyspec_symbols_1 */ "\u0967",
   1845         // U+0968: "" DEVANAGARI DIGIT TWO
   1846         /* keyspec_symbols_2 */ "\u0968",
   1847         // U+0969: "" DEVANAGARI DIGIT THREE
   1848         /* keyspec_symbols_3 */ "\u0969",
   1849         // U+096A: "" DEVANAGARI DIGIT FOUR
   1850         /* keyspec_symbols_4 */ "\u096A",
   1851         // U+096B: "" DEVANAGARI DIGIT FIVE
   1852         /* keyspec_symbols_5 */ "\u096B",
   1853         // U+096C: "" DEVANAGARI DIGIT SIX
   1854         /* keyspec_symbols_6 */ "\u096C",
   1855         // U+096D: "" DEVANAGARI DIGIT SEVEN
   1856         /* keyspec_symbols_7 */ "\u096D",
   1857         // U+096E: "" DEVANAGARI DIGIT EIGHT
   1858         /* keyspec_symbols_8 */ "\u096E",
   1859         // U+096F: "" DEVANAGARI DIGIT NINE
   1860         /* keyspec_symbols_9 */ "\u096F",
   1861         // U+0966: "" DEVANAGARI DIGIT ZERO
   1862         /* keyspec_symbols_0 */ "\u0966",
   1863         // Label for "switch to symbols" key.
   1864         /* keylabel_to_symbol */ "?\u0967\u0968\u0969",
   1865         /* additional_morekeys_symbols_1 */ "1",
   1866         /* additional_morekeys_symbols_2 */ "2",
   1867         /* additional_morekeys_symbols_3 */ "3",
   1868         /* additional_morekeys_symbols_4 */ "4",
   1869         /* additional_morekeys_symbols_5 */ "5",
   1870         /* additional_morekeys_symbols_6 */ "6",
   1871         /* additional_morekeys_symbols_7 */ "7",
   1872         /* additional_morekeys_symbols_8 */ "8",
   1873         /* additional_morekeys_symbols_9 */ "9",
   1874         /* additional_morekeys_symbols_0 */ "0",
   1875     };
   1876 
   1877     /* Locale hr: Croatian */
   1878     private static final String[] TEXTS_hr = {
   1879         /* morekeys_a ~ */
   1880         null, null, null, null, null, null,
   1881         /* ~ morekeys_i */
   1882         // U+010D: "" LATIN SMALL LETTER C WITH CARON
   1883         // U+0107: "" LATIN SMALL LETTER C WITH ACUTE
   1884         // U+00E7: "" LATIN SMALL LETTER C WITH CEDILLA
   1885         /* morekeys_c */ "\u010D,\u0107,\u00E7",
   1886         /* double_quotes */ "!text/double_9qm_rqm",
   1887         // U+00F1: "" LATIN SMALL LETTER N WITH TILDE
   1888         // U+0144: "" LATIN SMALL LETTER N WITH ACUTE
   1889         /* morekeys_n */ "\u00F1,\u0144",
   1890         /* single_quotes */ "!text/single_9qm_rqm",
   1891         // U+0161: "" LATIN SMALL LETTER S WITH CARON
   1892         // U+015B: "" LATIN SMALL LETTER S WITH ACUTE
   1893         // U+00DF: "" LATIN SMALL LETTER SHARP S
   1894         /* morekeys_s */ "\u0161,\u015B,\u00DF",
   1895         /* keyspec_currency */ null,
   1896         /* morekeys_y */ null,
   1897         // U+0111: "" LATIN SMALL LETTER D WITH STROKE
   1898         /* morekeys_d */ "\u0111",
   1899         // U+017E: "" LATIN SMALL LETTER Z WITH CARON
   1900         // U+017A: "" LATIN SMALL LETTER Z WITH ACUTE
   1901         // U+017C: "" LATIN SMALL LETTER Z WITH DOT ABOVE
   1902         /* morekeys_z */ "\u017E,\u017A,\u017C",
   1903         /* morekeys_t ~ */
   1904         null, null, null,
   1905         /* ~ morekeys_g */
   1906         /* single_angle_quotes */ "!text/single_raqm_laqm",
   1907         /* double_angle_quotes */ "!text/double_raqm_laqm",
   1908     };
   1909 
   1910     /* Locale hu: Hungarian */
   1911     private static final String[] TEXTS_hu = {
   1912         // U+00E1: "" LATIN SMALL LETTER A WITH ACUTE
   1913         // U+00E0: "" LATIN SMALL LETTER A WITH GRAVE
   1914         // U+00E2: "" LATIN SMALL LETTER A WITH CIRCUMFLEX
   1915         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
   1916         // U+00E6: "" LATIN SMALL LETTER AE
   1917         // U+00E3: "" LATIN SMALL LETTER A WITH TILDE
   1918         // U+00E5: "" LATIN SMALL LETTER A WITH RING ABOVE
   1919         // U+0101: "" LATIN SMALL LETTER A WITH MACRON
   1920         /* morekeys_a */ "\u00E1,\u00E0,\u00E2,\u00E4,\u00E6,\u00E3,\u00E5,\u0101",
   1921         // U+00F3: "" LATIN SMALL LETTER O WITH ACUTE
   1922         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
   1923         // U+0151: "" LATIN SMALL LETTER O WITH DOUBLE ACUTE
   1924         // U+00F4: "" LATIN SMALL LETTER O WITH CIRCUMFLEX
   1925         // U+00F2: "" LATIN SMALL LETTER O WITH GRAVE
   1926         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
   1927         // U+0153: "" LATIN SMALL LIGATURE OE
   1928         // U+00F8: "" LATIN SMALL LETTER O WITH STROKE
   1929         // U+014D: "" LATIN SMALL LETTER O WITH MACRON
   1930         /* morekeys_o */ "\u00F3,\u00F6,\u0151,\u00F4,\u00F2,\u00F5,\u0153,\u00F8,\u014D",
   1931         // U+00FA: "" LATIN SMALL LETTER U WITH ACUTE
   1932         // U+00FC: "" LATIN SMALL LETTER U WITH DIAERESIS
   1933         // U+0171: "" LATIN SMALL LETTER U WITH DOUBLE ACUTE
   1934         // U+00FB: "" LATIN SMALL LETTER U WITH CIRCUMFLEX
   1935         // U+00F9: "" LATIN SMALL LETTER U WITH GRAVE
   1936         // U+016B: "" LATIN SMALL LETTER U WITH MACRON
   1937         /* morekeys_u */ "\u00FA,\u00FC,\u0171,\u00FB,\u00F9,\u016B",
   1938         /* keylabel_to_alpha */ null,
   1939         // U+00E9: "" LATIN SMALL LETTER E WITH ACUTE
   1940         // U+00E8: "" LATIN SMALL LETTER E WITH GRAVE
   1941         // U+00EA: "" LATIN SMALL LETTER E WITH CIRCUMFLEX
   1942         // U+00EB: "" LATIN SMALL LETTER E WITH DIAERESIS
   1943         // U+0119: "" LATIN SMALL LETTER E WITH OGONEK
   1944         // U+0117: "" LATIN SMALL LETTER E WITH DOT ABOVE
   1945         // U+0113: "" LATIN SMALL LETTER E WITH MACRON
   1946         /* morekeys_e */ "\u00E9,\u00E8,\u00EA,\u00EB,\u0119,\u0117,\u0113",
   1947         // U+00ED: "" LATIN SMALL LETTER I WITH ACUTE
   1948         // U+00EE: "" LATIN SMALL LETTER I WITH CIRCUMFLEX
   1949         // U+00EF: "" LATIN SMALL LETTER I WITH DIAERESIS
   1950         // U+00EC: "" LATIN SMALL LETTER I WITH GRAVE
   1951         // U+012F: "" LATIN SMALL LETTER I WITH OGONEK
   1952         // U+012B: "" LATIN SMALL LETTER I WITH MACRON
   1953         /* morekeys_i */ "\u00ED,\u00EE,\u00EF,\u00EC,\u012F,\u012B",
   1954         /* morekeys_c */ null,
   1955         /* double_quotes */ "!text/double_9qm_rqm",
   1956         /* morekeys_n */ null,
   1957         /* single_quotes */ "!text/single_9qm_rqm",
   1958         /* morekeys_s ~ */
   1959         null, null, null, null, null, null, null, null,
   1960         /* ~ morekeys_g */
   1961         /* single_angle_quotes */ "!text/single_raqm_laqm",
   1962         /* double_angle_quotes */ "!text/double_raqm_laqm",
   1963     };
   1964 
   1965     /* Locale hy_AM: Armenian (Armenia) */
   1966     private static final String[] TEXTS_hy_AM = {
   1967         /* morekeys_a ~ */
   1968         null, null, null,
   1969         /* ~ morekeys_u */
   1970         // Label for "switch to alphabetic" key.
   1971         // U+0531: "" ARMENIAN CAPITAL LETTER AYB
   1972         // U+0532: "" ARMENIAN CAPITAL LETTER BEN
   1973         // U+0533: "" ARMENIAN CAPITAL LETTER GIM
   1974         /* keylabel_to_alpha */ "\u0531\u0532\u0533",
   1975         /* morekeys_e ~ */
   1976         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   1977         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   1978         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   1979         null, null, null, null, null,
   1980         /* ~ morekeys_nordic_row2_11 */
   1981         // U+055E: "" ARMENIAN QUESTION MARK
   1982         // U+055C: "" ARMENIAN EXCLAMATION MARK
   1983         // U+055A: "" ARMENIAN APOSTROPHE
   1984         // U+0559: "" ARMENIAN MODIFIER LETTER LEFT HALF RING
   1985         // U+055D: "" ARMENIAN COMMA
   1986         // U+055B: "" ARMENIAN EMPHASIS MARK
   1987         // U+058A: "" ARMENIAN HYPHEN
   1988         // U+00BB: "" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
   1989         // U+00AB: "" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
   1990         // U+055F: "" ARMENIAN ABBREVIATION MARK
   1991         /* morekeys_punctuation */ "!autoColumnOrder!8,\\,,\u055E,\u055C,.,\u055A,\u0559,?,!,\u055D,\u055B,\u058A,\u00BB,\u00AB,\u055F,;,:",
   1992         /* keyspec_tablet_comma */ "\u055D",
   1993         /* keyspec_swiss_row1_11 ~ */
   1994         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   1995         null, null, null, null, null, null,
   1996         /* ~ keyspec_right_single_angle_quote */
   1997         // U+058F: "" ARMENIAN DRAM SIGN
   1998         // TODO: Enable this when we have glyph for the following letter
   1999         // <string name="keyspec_currency">&#x058F;</string>
   2000         //
   2001         // U+055D: "" ARMENIAN COMMA
   2002         /* keyspec_comma */ "\u055D",
   2003         /* morekeys_tablet_comma */ null,
   2004         /* keyhintlabel_period */ null,
   2005         /* morekeys_tablet_period */ "!text/morekeys_punctuation",
   2006         // U+055E: "" ARMENIAN QUESTION MARK
   2007         // U+00BF: "" INVERTED QUESTION MARK
   2008         /* morekeys_question */ "\u055E,\u00BF",
   2009         /* morekeys_h ~ */
   2010         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2011         null, null, null, null,
   2012         /* ~ keyhintlabel_tablet_comma */
   2013         // U+0589: "" ARMENIAN FULL STOP
   2014         /* keyspec_period */ "\u0589",
   2015         /* morekeys_period */ null,
   2016         /* keyspec_tablet_period */ "\u0589",
   2017         /* keyhintlabel_tablet_period ~ */
   2018         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2019         null, null, null, null, null, null,
   2020         /* ~ morekeys_greater_than */
   2021         // U+055C: "" ARMENIAN EXCLAMATION MARK
   2022         // U+00A1: "" INVERTED EXCLAMATION MARK
   2023         /* morekeys_exclamation */ "\u055C,\u00A1",
   2024     };
   2025 
   2026     /* Locale is: Icelandic */
   2027     private static final String[] TEXTS_is = {
   2028         // U+00E1: "" LATIN SMALL LETTER A WITH ACUTE
   2029         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
   2030         // U+00E6: "" LATIN SMALL LETTER AE
   2031         // U+00E5: "" LATIN SMALL LETTER A WITH RING ABOVE
   2032         // U+00E0: "" LATIN SMALL LETTER A WITH GRAVE
   2033         // U+00E2: "" LATIN SMALL LETTER A WITH CIRCUMFLEX
   2034         // U+00E3: "" LATIN SMALL LETTER A WITH TILDE
   2035         // U+0101: "" LATIN SMALL LETTER A WITH MACRON
   2036         /* morekeys_a */ "\u00E1,\u00E4,\u00E6,\u00E5,\u00E0,\u00E2,\u00E3,\u0101",
   2037         // U+00F3: "" LATIN SMALL LETTER O WITH ACUTE
   2038         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
   2039         // U+00F4: "" LATIN SMALL LETTER O WITH CIRCUMFLEX
   2040         // U+00F2: "" LATIN SMALL LETTER O WITH GRAVE
   2041         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
   2042         // U+0153: "" LATIN SMALL LIGATURE OE
   2043         // U+00F8: "" LATIN SMALL LETTER O WITH STROKE
   2044         // U+014D: "" LATIN SMALL LETTER O WITH MACRON
   2045         /* morekeys_o */ "\u00F3,\u00F6,\u00F4,\u00F2,\u00F5,\u0153,\u00F8,\u014D",
   2046         // U+00FA: "" LATIN SMALL LETTER U WITH ACUTE
   2047         // U+00FC: "" LATIN SMALL LETTER U WITH DIAERESIS
   2048         // U+00FB: "" LATIN SMALL LETTER U WITH CIRCUMFLEX
   2049         // U+00F9: "" LATIN SMALL LETTER U WITH GRAVE
   2050         // U+016B: "" LATIN SMALL LETTER U WITH MACRON
   2051         /* morekeys_u */ "\u00FA,\u00FC,\u00FB,\u00F9,\u016B",
   2052         /* keylabel_to_alpha */ null,
   2053         // U+00E9: "" LATIN SMALL LETTER E WITH ACUTE
   2054         // U+00EB: "" LATIN SMALL LETTER E WITH DIAERESIS
   2055         // U+00E8: "" LATIN SMALL LETTER E WITH GRAVE
   2056         // U+00EA: "" LATIN SMALL LETTER E WITH CIRCUMFLEX
   2057         // U+0119: "" LATIN SMALL LETTER E WITH OGONEK
   2058         // U+0117: "" LATIN SMALL LETTER E WITH DOT ABOVE
   2059         // U+0113: "" LATIN SMALL LETTER E WITH MACRON
   2060         /* morekeys_e */ "\u00E9,\u00EB,\u00E8,\u00EA,\u0119,\u0117,\u0113",
   2061         // U+00ED: "" LATIN SMALL LETTER I WITH ACUTE
   2062         // U+00EF: "" LATIN SMALL LETTER I WITH DIAERESIS
   2063         // U+00EE: "" LATIN SMALL LETTER I WITH CIRCUMFLEX
   2064         // U+00EC: "" LATIN SMALL LETTER I WITH GRAVE
   2065         // U+012F: "" LATIN SMALL LETTER I WITH OGONEK
   2066         // U+012B: "" LATIN SMALL LETTER I WITH MACRON
   2067         /* morekeys_i */ "\u00ED,\u00EF,\u00EE,\u00EC,\u012F,\u012B",
   2068         /* morekeys_c */ null,
   2069         /* double_quotes */ "!text/double_9qm_lqm",
   2070         /* morekeys_n */ null,
   2071         /* single_quotes */ "!text/single_9qm_lqm",
   2072         /* morekeys_s */ null,
   2073         /* keyspec_currency */ null,
   2074         // U+00FD: "" LATIN SMALL LETTER Y WITH ACUTE
   2075         // U+00FF: "" LATIN SMALL LETTER Y WITH DIAERESIS
   2076         /* morekeys_y */ "\u00FD,\u00FF",
   2077         // U+00F0: "" LATIN SMALL LETTER ETH
   2078         /* morekeys_d */ "\u00F0",
   2079         /* morekeys_z */ null,
   2080         // U+00FE: "" LATIN SMALL LETTER THORN
   2081         /* morekeys_t */ "\u00FE",
   2082     };
   2083 
   2084     /* Locale it: Italian */
   2085     private static final String[] TEXTS_it = {
   2086         // U+00E0: "" LATIN SMALL LETTER A WITH GRAVE
   2087         // U+00E1: "" LATIN SMALL LETTER A WITH ACUTE
   2088         // U+00E2: "" LATIN SMALL LETTER A WITH CIRCUMFLEX
   2089         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
   2090         // U+00E6: "" LATIN SMALL LETTER AE
   2091         // U+00E3: "" LATIN SMALL LETTER A WITH TILDE
   2092         // U+00E5: "" LATIN SMALL LETTER A WITH RING ABOVE
   2093         // U+0101: "" LATIN SMALL LETTER A WITH MACRON
   2094         // U+00AA: "" FEMININE ORDINAL INDICATOR
   2095         /* morekeys_a */ "\u00E0,\u00E1,\u00E2,\u00E4,\u00E6,\u00E3,\u00E5,\u0101,\u00AA",
   2096         // U+00F2: "" LATIN SMALL LETTER O WITH GRAVE
   2097         // U+00F3: "" LATIN SMALL LETTER O WITH ACUTE
   2098         // U+00F4: "" LATIN SMALL LETTER O WITH CIRCUMFLEX
   2099         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
   2100         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
   2101         // U+0153: "" LATIN SMALL LIGATURE OE
   2102         // U+00F8: "" LATIN SMALL LETTER O WITH STROKE
   2103         // U+014D: "" LATIN SMALL LETTER O WITH MACRON
   2104         // U+00BA: "" MASCULINE ORDINAL INDICATOR
   2105         /* morekeys_o */ "\u00F2,\u00F3,\u00F4,\u00F6,\u00F5,\u0153,\u00F8,\u014D,\u00BA",
   2106         // U+00F9: "" LATIN SMALL LETTER U WITH GRAVE
   2107         // U+00FA: "" LATIN SMALL LETTER U WITH ACUTE
   2108         // U+00FB: "" LATIN SMALL LETTER U WITH CIRCUMFLEX
   2109         // U+00FC: "" LATIN SMALL LETTER U WITH DIAERESIS
   2110         // U+016B: "" LATIN SMALL LETTER U WITH MACRON
   2111         /* morekeys_u */ "\u00F9,\u00FA,\u00FB,\u00FC,\u016B",
   2112         /* keylabel_to_alpha */ null,
   2113         // U+00E8: "" LATIN SMALL LETTER E WITH GRAVE
   2114         // U+00E9: "" LATIN SMALL LETTER E WITH ACUTE
   2115         // U+00EA: "" LATIN SMALL LETTER E WITH CIRCUMFLEX
   2116         // U+00EB: "" LATIN SMALL LETTER E WITH DIAERESIS
   2117         // U+0119: "" LATIN SMALL LETTER E WITH OGONEK
   2118         // U+0117: "" LATIN SMALL LETTER E WITH DOT ABOVE
   2119         // U+0113: "" LATIN SMALL LETTER E WITH MACRON
   2120         /* morekeys_e */ "\u00E8,\u00E9,\u00EA,\u00EB,\u0119,\u0117,\u0113",
   2121         // U+00EC: "" LATIN SMALL LETTER I WITH GRAVE
   2122         // U+00ED: "" LATIN SMALL LETTER I WITH ACUTE
   2123         // U+00EE: "" LATIN SMALL LETTER I WITH CIRCUMFLEX
   2124         // U+00EF: "" LATIN SMALL LETTER I WITH DIAERESIS
   2125         // U+012F: "" LATIN SMALL LETTER I WITH OGONEK
   2126         // U+012B: "" LATIN SMALL LETTER I WITH MACRON
   2127         /* morekeys_i */ "\u00EC,\u00ED,\u00EE,\u00EF,\u012F,\u012B",
   2128         /* morekeys_c ~ */
   2129         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2130         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2131         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2132         null, null, null, null, null,
   2133         /* ~ keyspec_tablet_comma */
   2134         // U+00FC: "" LATIN SMALL LETTER U WITH DIAERESIS
   2135         /* keyspec_swiss_row1_11 */ "\u00FC",
   2136         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
   2137         /* keyspec_swiss_row2_10 */ "\u00F6",
   2138         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
   2139         /* keyspec_swiss_row2_11 */ "\u00E4",
   2140         // U+00E8: "" LATIN SMALL LETTER E WITH GRAVE
   2141         /* morekeys_swiss_row1_11 */ "\u00E8",
   2142         // U+00E9: "" LATIN SMALL LETTER E WITH ACUTE
   2143         /* morekeys_swiss_row2_10 */ "\u00E9",
   2144         // U+00E0: "" LATIN SMALL LETTER A WITH GRAVE
   2145         /* morekeys_swiss_row2_11 */ "\u00E0",
   2146     };
   2147 
   2148     /* Locale iw: Hebrew */
   2149     private static final String[] TEXTS_iw = {
   2150         /* morekeys_a ~ */
   2151         null, null, null,
   2152         /* ~ morekeys_u */
   2153         // Label for "switch to alphabetic" key.
   2154         // U+05D0: "" HEBREW LETTER ALEF
   2155         // U+05D1: "" HEBREW LETTER BET
   2156         // U+05D2: "" HEBREW LETTER GIMEL
   2157         /* keylabel_to_alpha */ "\u05D0\u05D1\u05D2",
   2158         /* morekeys_e ~ */
   2159         null, null, null,
   2160         /* ~ morekeys_c */
   2161         /* double_quotes */ "!text/double_rqm_9qm",
   2162         /* morekeys_n */ null,
   2163         /* single_quotes */ "!text/single_rqm_9qm",
   2164         /* morekeys_s */ null,
   2165         // U+20AA: "" NEW SHEQEL SIGN
   2166         /* keyspec_currency */ "\u20AA",
   2167         /* morekeys_y ~ */
   2168         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2169         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2170         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2171         null, null, null, null, null,
   2172         /* ~ morekeys_swiss_row2_11 */
   2173         // U+2605: "" BLACK STAR
   2174         /* morekeys_star */ "\u2605",
   2175         // The all letters need to be mirrored are found at
   2176         // http://www.unicode.org/Public/6.1.0/ucd/BidiMirroring.txt
   2177         // U+2264: "" LESS-THAN OR EQUAL TO
   2178         // U+2265: "" GREATER-THAN EQUAL TO
   2179         // U+00AB: "" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
   2180         // U+00BB: "" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
   2181         // U+2039: "" SINGLE LEFT-POINTING ANGLE QUOTATION MARK
   2182         // U+203A: "" SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
   2183         /* keyspec_left_parenthesis */ "(|)",
   2184         /* keyspec_right_parenthesis */ ")|(",
   2185         /* keyspec_left_square_bracket */ "[|]",
   2186         /* keyspec_right_square_bracket */ "]|[",
   2187         /* keyspec_left_curly_bracket */ "{|}",
   2188         /* keyspec_right_curly_bracket */ "}|{",
   2189         /* keyspec_less_than */ "<|>",
   2190         /* keyspec_greater_than */ ">|<",
   2191         /* keyspec_less_than_equal */ "\u2264|\u2265",
   2192         /* keyspec_greater_than_equal */ "\u2265|\u2264",
   2193         /* keyspec_left_double_angle_quote */ "\u00AB|\u00BB",
   2194         /* keyspec_right_double_angle_quote */ "\u00BB|\u00AB",
   2195         /* keyspec_left_single_angle_quote */ "\u2039|\u203A",
   2196         /* keyspec_right_single_angle_quote */ "\u203A|\u2039",
   2197         /* keyspec_comma ~ */
   2198         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2199         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2200         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2201         /* ~ morekeys_currency_dollar */
   2202         // U+00B1: "" PLUS-MINUS SIGN
   2203         // U+FB29: "" HEBREW LETTER ALTERNATIVE PLUS SIGN
   2204         /* morekeys_plus */ "\u00B1,\uFB29",
   2205     };
   2206 
   2207     /* Locale ka_GE: Georgian (Georgia) */
   2208     private static final String[] TEXTS_ka_GE = {
   2209         /* morekeys_a ~ */
   2210         null, null, null,
   2211         /* ~ morekeys_u */
   2212         // Label for "switch to alphabetic" key.
   2213         // U+10D0: "" GEORGIAN LETTER AN
   2214         // U+10D1: "" GEORGIAN LETTER BAN
   2215         // U+10D2: "" GEORGIAN LETTER GAN
   2216         /* keylabel_to_alpha */ "\u10D0\u10D1\u10D2",
   2217         /* morekeys_e ~ */
   2218         null, null, null,
   2219         /* ~ morekeys_c */
   2220         /* double_quotes */ "!text/double_9qm_lqm",
   2221         /* morekeys_n */ null,
   2222         /* single_quotes */ "!text/single_9qm_lqm",
   2223     };
   2224 
   2225     /* Locale kk: Kazakh */
   2226     private static final String[] TEXTS_kk = {
   2227         /* morekeys_a ~ */
   2228         null, null, null,
   2229         /* ~ morekeys_u */
   2230         // Label for "switch to alphabetic" key.
   2231         // U+0410: "" CYRILLIC CAPITAL LETTER A
   2232         // U+0411: "" CYRILLIC CAPITAL LETTER BE
   2233         // U+0412: "" CYRILLIC CAPITAL LETTER VE
   2234         /* keylabel_to_alpha */ "\u0410\u0411\u0412",
   2235         /* morekeys_e ~ */
   2236         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2237         null, null, null,
   2238         /* ~ morekeys_k */
   2239         // U+0451: "" CYRILLIC SMALL LETTER IO
   2240         /* morekeys_cyrillic_ie */ "\u0451",
   2241         /* keyspec_nordic_row1_11 ~ */
   2242         null, null, null, null,
   2243         /* ~ morekeys_nordic_row2_10 */
   2244         // U+0449: "" CYRILLIC SMALL LETTER SHCHA
   2245         /* keyspec_east_slavic_row1_9 */ "\u0449",
   2246         // U+044B: "" CYRILLIC SMALL LETTER YERU
   2247         /* keyspec_east_slavic_row2_2 */ "\u044B",
   2248         // U+044D: "" CYRILLIC SMALL LETTER E
   2249         /* keyspec_east_slavic_row2_11 */ "\u044D",
   2250         // U+0438: "" CYRILLIC SMALL LETTER I
   2251         /* keyspec_east_slavic_row3_5 */ "\u0438",
   2252         // U+044A: "" CYRILLIC SMALL LETTER HARD SIGN
   2253         /* morekeys_cyrillic_soft_sign */ "\u044A",
   2254         /* keyspec_symbols_1 ~ */
   2255         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2256         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2257         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2258         null, null, null, null, null, null, null,
   2259         /* ~ morekeys_w */
   2260         // U+0456: "" CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
   2261         /* morekeys_east_slavic_row2_2 */ "\u0456",
   2262         // U+04AF: "" CYRILLIC SMALL LETTER STRAIGHT U
   2263         // U+04B1: "" CYRILLIC SMALL LETTER STRAIGHT U WITH STROKE
   2264         /* morekeys_cyrillic_u */ "\u04AF,\u04B1",
   2265         // U+04A3: "" CYRILLIC SMALL LETTER EN WITH DESCENDER
   2266         /* morekeys_cyrillic_en */ "\u04A3",
   2267         // U+0493: "" CYRILLIC SMALL LETTER GHE WITH STROKE
   2268         /* morekeys_cyrillic_ghe */ "\u0493",
   2269         // U+04E9: "" CYRILLIC SMALL LETTER BARRED O
   2270         /* morekeys_cyrillic_o */ "\u04E9",
   2271         /* morekeys_cyrillic_i ~ */
   2272         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2273         null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2274         /* ~ keyspec_x */
   2275         // U+04BB: "" CYRILLIC SMALL LETTER SHHA
   2276         /* morekeys_east_slavic_row2_11 */ "\u04BB",
   2277         // U+049B: "" CYRILLIC SMALL LETTER KA WITH DESCENDER
   2278         /* morekeys_cyrillic_ka */ "\u049B",
   2279         // U+04D9: "" CYRILLIC SMALL LETTER SCHWA
   2280         /* morekeys_cyrillic_a */ "\u04D9",
   2281     };
   2282 
   2283     /* Locale km_KH: Khmer (Cambodia) */
   2284     private static final String[] TEXTS_km_KH = {
   2285         /* morekeys_a ~ */
   2286         null, null, null,
   2287         /* ~ morekeys_u */
   2288         // Label for "switch to alphabetic" key.
   2289         // U+1780: "" KHMER LETTER KA
   2290         // U+1781: "" KHMER LETTER KHA
   2291         // U+1782: "" KHMER LETTER KO
   2292         /* keylabel_to_alpha */ "\u1780\u1781\u1782",
   2293         /* morekeys_e ~ */
   2294         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2295         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2296         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2297         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2298         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2299         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2300         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2301         null, null, null, null, null, null, null, null, null, null, null, null,
   2302         /* ~ morekeys_cyrillic_a */
   2303         // U+17DB: "" KHMER CURRENCY SYMBOL RIEL
   2304         /* morekeys_currency_dollar */ "\u17DB,\u00A2,\u00A3,\u20AC,\u00A5,\u20B1",
   2305     };
   2306 
   2307     /* Locale kn_IN: Kannada (India) */
   2308     private static final String[] TEXTS_kn_IN = {
   2309         /* morekeys_a ~ */
   2310         null, null, null,
   2311         /* ~ morekeys_u */
   2312         // Label for "switch to alphabetic" key.
   2313         // U+0C85: "" KANNADA LETTER A
   2314         // U+0C86: "" KANNADA LETTER AA
   2315         // U+0C87: "" KANNADA LETTER I
   2316         /* keylabel_to_alpha */ "\u0C85\u0C86\u0C87",
   2317         /* morekeys_e ~ */
   2318         null, null, null, null, null, null, null,
   2319         /* ~ morekeys_s */
   2320         // U+20B9: "" INDIAN RUPEE SIGN
   2321         /* keyspec_currency */ "\u20B9",
   2322     };
   2323 
   2324     /* Locale ky: Kirghiz */
   2325     private static final String[] TEXTS_ky = {
   2326         /* morekeys_a ~ */
   2327         null, null, null,
   2328         /* ~ morekeys_u */
   2329         // Label for "switch to alphabetic" key.
   2330         // U+0410: "" CYRILLIC CAPITAL LETTER A
   2331         // U+0411: "" CYRILLIC CAPITAL LETTER BE
   2332         // U+0412: "" CYRILLIC CAPITAL LETTER VE
   2333         /* keylabel_to_alpha */ "\u0410\u0411\u0412",
   2334         /* morekeys_e ~ */
   2335         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2336         null, null, null,
   2337         /* ~ morekeys_k */
   2338         // U+0451: "" CYRILLIC SMALL LETTER IO
   2339         /* morekeys_cyrillic_ie */ "\u0451",
   2340         /* keyspec_nordic_row1_11 ~ */
   2341         null, null, null, null,
   2342         /* ~ morekeys_nordic_row2_10 */
   2343         // U+0449: "" CYRILLIC SMALL LETTER SHCHA
   2344         /* keyspec_east_slavic_row1_9 */ "\u0449",
   2345         // U+044B: "" CYRILLIC SMALL LETTER YERU
   2346         /* keyspec_east_slavic_row2_2 */ "\u044B",
   2347         // U+044D: "" CYRILLIC SMALL LETTER E
   2348         /* keyspec_east_slavic_row2_11 */ "\u044D",
   2349         // U+0438: "" CYRILLIC SMALL LETTER I
   2350         /* keyspec_east_slavic_row3_5 */ "\u0438",
   2351         // U+044A: "" CYRILLIC SMALL LETTER HARD SIGN
   2352         /* morekeys_cyrillic_soft_sign */ "\u044A",
   2353         /* keyspec_symbols_1 ~ */
   2354         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2355         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2356         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2357         null, null, null, null, null, null, null, null,
   2358         /* ~ morekeys_east_slavic_row2_2 */
   2359         // U+04AF: "" CYRILLIC SMALL LETTER STRAIGHT U
   2360         /* morekeys_cyrillic_u */ "\u04AF",
   2361         // U+04A3: "" CYRILLIC SMALL LETTER EN WITH DESCENDER
   2362         /* morekeys_cyrillic_en */ "\u04A3",
   2363         /* morekeys_cyrillic_ghe */ null,
   2364         // U+04E9: "" CYRILLIC SMALL LETTER BARRED O
   2365         /* morekeys_cyrillic_o */ "\u04E9",
   2366     };
   2367 
   2368     /* Locale lo_LA: Lao (Laos) */
   2369     private static final String[] TEXTS_lo_LA = {
   2370         /* morekeys_a ~ */
   2371         null, null, null,
   2372         /* ~ morekeys_u */
   2373         // Label for "switch to alphabetic" key.
   2374         // U+0E81: "" LAO LETTER KO
   2375         // U+0E82: "" LAO LETTER KHO SUNG
   2376         // U+0E84: "" LAO LETTER KHO TAM
   2377         /* keylabel_to_alpha */ "\u0E81\u0E82\u0E84",
   2378         /* morekeys_e ~ */
   2379         null, null, null, null, null, null, null,
   2380         /* ~ morekeys_s */
   2381         // U+20AD: "" KIP SIGN
   2382         /* keyspec_currency */ "\u20AD",
   2383     };
   2384 
   2385     /* Locale lt: Lithuanian */
   2386     private static final String[] TEXTS_lt = {
   2387         // U+0105: "" LATIN SMALL LETTER A WITH OGONEK
   2388         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
   2389         // U+0101: "" LATIN SMALL LETTER A WITH MACRON
   2390         // U+00E0: "" LATIN SMALL LETTER A WITH GRAVE
   2391         // U+00E1: "" LATIN SMALL LETTER A WITH ACUTE
   2392         // U+00E2: "" LATIN SMALL LETTER A WITH CIRCUMFLEX
   2393         // U+00E3: "" LATIN SMALL LETTER A WITH TILDE
   2394         // U+00E5: "" LATIN SMALL LETTER A WITH RING ABOVE
   2395         // U+00E6: "" LATIN SMALL LETTER AE
   2396         /* morekeys_a */ "\u0105,\u00E4,\u0101,\u00E0,\u00E1,\u00E2,\u00E3,\u00E5,\u00E6",
   2397         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
   2398         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
   2399         // U+00F2: "" LATIN SMALL LETTER O WITH GRAVE
   2400         // U+00F3: "" LATIN SMALL LETTER O WITH ACUTE
   2401         // U+00F4: "" LATIN SMALL LETTER O WITH CIRCUMFLEX
   2402         // U+0153: "" LATIN SMALL LIGATURE OE
   2403         // U+0151: "" LATIN SMALL LETTER O WITH DOUBLE ACUTE
   2404         // U+00F8: "" LATIN SMALL LETTER O WITH STROKE
   2405         /* morekeys_o */ "\u00F6,\u00F5,\u00F2,\u00F3,\u00F4,\u0153,\u0151,\u00F8",
   2406         // U+016B: "" LATIN SMALL LETTER U WITH MACRON
   2407         // U+0173: "" LATIN SMALL LETTER U WITH OGONEK
   2408         // U+00FC: "" LATIN SMALL LETTER U WITH DIAERESIS
   2409         // U+016B: "" LATIN SMALL LETTER U WITH MACRON
   2410         // U+00F9: "" LATIN SMALL LETTER U WITH GRAVE
   2411         // U+00FA: "" LATIN SMALL LETTER U WITH ACUTE
   2412         // U+00FB: "" LATIN SMALL LETTER U WITH CIRCUMFLEX
   2413         // U+016F: "" LATIN SMALL LETTER U WITH RING ABOVE
   2414         // U+0171: "" LATIN SMALL LETTER U WITH DOUBLE ACUTE
   2415         /* morekeys_u */ "\u016B,\u0173,\u00FC,\u016B,\u00F9,\u00FA,\u00FB,\u016F,\u0171",
   2416         /* keylabel_to_alpha */ null,
   2417         // U+0117: "" LATIN SMALL LETTER E WITH DOT ABOVE
   2418         // U+0119: "" LATIN SMALL LETTER E WITH OGONEK
   2419         // U+0113: "" LATIN SMALL LETTER E WITH MACRON
   2420         // U+00E8: "" LATIN SMALL LETTER E WITH GRAVE
   2421         // U+00E9: "" LATIN SMALL LETTER E WITH ACUTE
   2422         // U+00EA: "" LATIN SMALL LETTER E WITH CIRCUMFLEX
   2423         // U+00EB: "" LATIN SMALL LETTER E WITH DIAERESIS
   2424         // U+011B: "" LATIN SMALL LETTER E WITH CARON
   2425         /* morekeys_e */ "\u0117,\u0119,\u0113,\u00E8,\u00E9,\u00EA,\u00EB,\u011B",
   2426         // U+012F: "" LATIN SMALL LETTER I WITH OGONEK
   2427         // U+012B: "" LATIN SMALL LETTER I WITH MACRON
   2428         // U+00EC: "" LATIN SMALL LETTER I WITH GRAVE
   2429         // U+00ED: "" LATIN SMALL LETTER I WITH ACUTE
   2430         // U+00EE: "" LATIN SMALL LETTER I WITH CIRCUMFLEX
   2431         // U+00EF: "" LATIN SMALL LETTER I WITH DIAERESIS
   2432         // U+0131: "" LATIN SMALL LETTER DOTLESS I
   2433         /* morekeys_i */ "\u012F,\u012B,\u00EC,\u00ED,\u00EE,\u00EF,\u0131",
   2434         // U+010D: "" LATIN SMALL LETTER C WITH CARON
   2435         // U+00E7: "" LATIN SMALL LETTER C WITH CEDILLA
   2436         // U+0107: "" LATIN SMALL LETTER C WITH ACUTE
   2437         /* morekeys_c */ "\u010D,\u00E7,\u0107",
   2438         /* double_quotes */ "!text/double_9qm_lqm",
   2439         // U+0146: "" LATIN SMALL LETTER N WITH CEDILLA
   2440         // U+00F1: "" LATIN SMALL LETTER N WITH TILDE
   2441         // U+0144: "" LATIN SMALL LETTER N WITH ACUTE
   2442         /* morekeys_n */ "\u0146,\u00F1,\u0144",
   2443         /* single_quotes */ "!text/single_9qm_lqm",
   2444         // U+0161: "" LATIN SMALL LETTER S WITH CARON
   2445         // U+00DF: "" LATIN SMALL LETTER SHARP S
   2446         // U+015B: "" LATIN SMALL LETTER S WITH ACUTE
   2447         // U+015F: "" LATIN SMALL LETTER S WITH CEDILLA
   2448         /* morekeys_s */ "\u0161,\u00DF,\u015B,\u015F",
   2449         /* keyspec_currency */ null,
   2450         // U+00FD: "" LATIN SMALL LETTER Y WITH ACUTE
   2451         // U+00FF: "" LATIN SMALL LETTER Y WITH DIAERESIS
   2452         /* morekeys_y */ "\u00FD,\u00FF",
   2453         // U+010F: "" LATIN SMALL LETTER D WITH CARON
   2454         /* morekeys_d */ "\u010F",
   2455         // U+017E: "" LATIN SMALL LETTER Z WITH CARON
   2456         // U+017C: "" LATIN SMALL LETTER Z WITH DOT ABOVE
   2457         // U+017A: "" LATIN SMALL LETTER Z WITH ACUTE
   2458         /* morekeys_z */ "\u017E,\u017C,\u017A",
   2459         // U+0163: "" LATIN SMALL LETTER T WITH CEDILLA
   2460         // U+0165: "" LATIN SMALL LETTER T WITH CARON
   2461         /* morekeys_t */ "\u0163,\u0165",
   2462         // U+013C: "" LATIN SMALL LETTER L WITH CEDILLA
   2463         // U+0142: "" LATIN SMALL LETTER L WITH STROKE
   2464         // U+013A: "" LATIN SMALL LETTER L WITH ACUTE
   2465         // U+013E: "" LATIN SMALL LETTER L WITH CARON
   2466         /* morekeys_l */ "\u013C,\u0142,\u013A,\u013E",
   2467         // U+0123: "" LATIN SMALL LETTER G WITH CEDILLA
   2468         // U+011F: "" LATIN SMALL LETTER G WITH BREVE
   2469         /* morekeys_g */ "\u0123,\u011F",
   2470         /* single_angle_quotes */ null,
   2471         /* double_angle_quotes */ null,
   2472         // U+0157: "" LATIN SMALL LETTER R WITH CEDILLA
   2473         // U+0159: "" LATIN SMALL LETTER R WITH CARON
   2474         // U+0155: "" LATIN SMALL LETTER R WITH ACUTE
   2475         /* morekeys_r */ "\u0157,\u0159,\u0155",
   2476         // U+0137: "" LATIN SMALL LETTER K WITH CEDILLA
   2477         /* morekeys_k */ "\u0137",
   2478     };
   2479 
   2480     /* Locale lv: Latvian */
   2481     private static final String[] TEXTS_lv = {
   2482         // U+0101: "" LATIN SMALL LETTER A WITH MACRON
   2483         // U+00E0: "" LATIN SMALL LETTER A WITH GRAVE
   2484         // U+00E1: "" LATIN SMALL LETTER A WITH ACUTE
   2485         // U+00E2: "" LATIN SMALL LETTER A WITH CIRCUMFLEX
   2486         // U+00E3: "" LATIN SMALL LETTER A WITH TILDE
   2487         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
   2488         // U+00E5: "" LATIN SMALL LETTER A WITH RING ABOVE
   2489         // U+00E6: "" LATIN SMALL LETTER AE
   2490         // U+0105: "" LATIN SMALL LETTER A WITH OGONEK
   2491         /* morekeys_a */ "\u0101,\u00E0,\u00E1,\u00E2,\u00E3,\u00E4,\u00E5,\u00E6,\u0105",
   2492         // U+00F2: "" LATIN SMALL LETTER O WITH GRAVE
   2493         // U+00F3: "" LATIN SMALL LETTER O WITH ACUTE
   2494         // U+00F4: "" LATIN SMALL LETTER O WITH CIRCUMFLEX
   2495         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
   2496         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
   2497         // U+0153: "" LATIN SMALL LIGATURE OE
   2498         // U+0151: "" LATIN SMALL LETTER O WITH DOUBLE ACUTE
   2499         // U+00F8: "" LATIN SMALL LETTER O WITH STROKE
   2500         /* morekeys_o */ "\u00F2,\u00F3,\u00F4,\u00F5,\u00F6,\u0153,\u0151,\u00F8",
   2501         // U+016B: "" LATIN SMALL LETTER U WITH MACRON
   2502         // U+0173: "" LATIN SMALL LETTER U WITH OGONEK
   2503         // U+00F9: "" LATIN SMALL LETTER U WITH GRAVE
   2504         // U+00FA: "" LATIN SMALL LETTER U WITH ACUTE
   2505         // U+00FB: "" LATIN SMALL LETTER U WITH CIRCUMFLEX
   2506         // U+00FC: "" LATIN SMALL LETTER U WITH DIAERESIS
   2507         // U+016F: "" LATIN SMALL LETTER U WITH RING ABOVE
   2508         // U+0171: "" LATIN SMALL LETTER U WITH DOUBLE ACUTE
   2509         /* morekeys_u */ "\u016B,\u0173,\u00F9,\u00FA,\u00FB,\u00FC,\u016F,\u0171",
   2510         /* keylabel_to_alpha */ null,
   2511         // U+0113: "" LATIN SMALL LETTER E WITH MACRON
   2512         // U+0117: "" LATIN SMALL LETTER E WITH DOT ABOVE
   2513         // U+00E8: "" LATIN SMALL LETTER E WITH GRAVE
   2514         // U+00E9: "" LATIN SMALL LETTER E WITH ACUTE
   2515         // U+00EA: "" LATIN SMALL LETTER E WITH CIRCUMFLEX
   2516         // U+00EB: "" LATIN SMALL LETTER E WITH DIAERESIS
   2517         // U+0119: "" LATIN SMALL LETTER E WITH OGONEK
   2518         // U+011B: "" LATIN SMALL LETTER E WITH CARON
   2519         /* morekeys_e */ "\u0113,\u0117,\u00E8,\u00E9,\u00EA,\u00EB,\u0119,\u011B",
   2520         // U+012B: "" LATIN SMALL LETTER I WITH MACRON
   2521         // U+012F: "" LATIN SMALL LETTER I WITH OGONEK
   2522         // U+00EC: "" LATIN SMALL LETTER I WITH GRAVE
   2523         // U+00ED: "" LATIN SMALL LETTER I WITH ACUTE
   2524         // U+00EE: "" LATIN SMALL LETTER I WITH CIRCUMFLEX
   2525         // U+00EF: "" LATIN SMALL LETTER I WITH DIAERESIS
   2526         // U+0131: "" LATIN SMALL LETTER DOTLESS I
   2527         /* morekeys_i */ "\u012B,\u012F,\u00EC,\u00ED,\u00EE,\u00EF,\u0131",
   2528         // U+010D: "" LATIN SMALL LETTER C WITH CARON
   2529         // U+00E7: "" LATIN SMALL LETTER C WITH CEDILLA
   2530         // U+0107: "" LATIN SMALL LETTER C WITH ACUTE
   2531         /* morekeys_c */ "\u010D,\u00E7,\u0107",
   2532         /* double_quotes */ "!text/double_9qm_lqm",
   2533         // U+0146: "" LATIN SMALL LETTER N WITH CEDILLA
   2534         // U+00F1: "" LATIN SMALL LETTER N WITH TILDE
   2535         // U+0144: "" LATIN SMALL LETTER N WITH ACUTE
   2536         /* morekeys_n */ "\u0146,\u00F1,\u0144",
   2537         /* single_quotes */ "!text/single_9qm_lqm",
   2538         // U+0161: "" LATIN SMALL LETTER S WITH CARON
   2539         // U+00DF: "" LATIN SMALL LETTER SHARP S
   2540         // U+015B: "" LATIN SMALL LETTER S WITH ACUTE
   2541         // U+015F: "" LATIN SMALL LETTER S WITH CEDILLA
   2542         /* morekeys_s */ "\u0161,\u00DF,\u015B,\u015F",
   2543         /* keyspec_currency */ null,
   2544         // U+00FD: "" LATIN SMALL LETTER Y WITH ACUTE
   2545         // U+00FF: "" LATIN SMALL LETTER Y WITH DIAERESIS
   2546         /* morekeys_y */ "\u00FD,\u00FF",
   2547         // U+010F: "" LATIN SMALL LETTER D WITH CARON
   2548         /* morekeys_d */ "\u010F",
   2549         // U+017E: "" LATIN SMALL LETTER Z WITH CARON
   2550         // U+017C: "" LATIN SMALL LETTER Z WITH DOT ABOVE
   2551         // U+017A: "" LATIN SMALL LETTER Z WITH ACUTE
   2552         /* morekeys_z */ "\u017E,\u017C,\u017A",
   2553         // U+0163: "" LATIN SMALL LETTER T WITH CEDILLA
   2554         // U+0165: "" LATIN SMALL LETTER T WITH CARON
   2555         /* morekeys_t */ "\u0163,\u0165",
   2556         // U+013C: "" LATIN SMALL LETTER L WITH CEDILLA
   2557         // U+0142: "" LATIN SMALL LETTER L WITH STROKE
   2558         // U+013A: "" LATIN SMALL LETTER L WITH ACUTE
   2559         // U+013E: "" LATIN SMALL LETTER L WITH CARON
   2560         /* morekeys_l */ "\u013C,\u0142,\u013A,\u013E",
   2561         // U+0123: "" LATIN SMALL LETTER G WITH CEDILLA
   2562         // U+011F: "" LATIN SMALL LETTER G WITH BREVE
   2563         /* morekeys_g */ "\u0123,\u011F",
   2564         /* single_angle_quotes */ null,
   2565         /* double_angle_quotes */ null,
   2566         // U+0157: "" LATIN SMALL LETTER R WITH CEDILLA
   2567         // U+0159: "" LATIN SMALL LETTER R WITH CARON
   2568         // U+0155: "" LATIN SMALL LETTER R WITH ACUTE
   2569         /* morekeys_r */ "\u0157,\u0159,\u0155",
   2570         // U+0137: "" LATIN SMALL LETTER K WITH CEDILLA
   2571         /* morekeys_k */ "\u0137",
   2572     };
   2573 
   2574     /* Locale mk: Macedonian */
   2575     private static final String[] TEXTS_mk = {
   2576         /* morekeys_a ~ */
   2577         null, null, null,
   2578         /* ~ morekeys_u */
   2579         // Label for "switch to alphabetic" key.
   2580         // U+0410: "" CYRILLIC CAPITAL LETTER A
   2581         // U+0411: "" CYRILLIC CAPITAL LETTER BE
   2582         // U+0412: "" CYRILLIC CAPITAL LETTER VE
   2583         /* keylabel_to_alpha */ "\u0410\u0411\u0412",
   2584         /* morekeys_e ~ */
   2585         null, null, null,
   2586         /* ~ morekeys_c */
   2587         /* double_quotes */ "!text/double_9qm_lqm",
   2588         /* morekeys_n */ null,
   2589         /* single_quotes */ "!text/single_9qm_lqm",
   2590         /* morekeys_s ~ */
   2591         null, null, null, null, null, null, null, null, null, null, null, null,
   2592         /* ~ morekeys_k */
   2593         // U+0450: "" CYRILLIC SMALL LETTER IE WITH GRAVE
   2594         /* morekeys_cyrillic_ie */ "\u0450",
   2595         /* keyspec_nordic_row1_11 ~ */
   2596         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2597         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2598         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2599         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2600         null, null, null, null, null, null,
   2601         /* ~ morekeys_cyrillic_o */
   2602         // U+045D: "" CYRILLIC SMALL LETTER I WITH GRAVE
   2603         /* morekeys_cyrillic_i */ "\u045D",
   2604         // U+0455: "" CYRILLIC SMALL LETTER DZE
   2605         /* keyspec_south_slavic_row1_6 */ "\u0455",
   2606         // U+045C: "" CYRILLIC SMALL LETTER KJE
   2607         /* keyspec_south_slavic_row2_11 */ "\u045C",
   2608         // U+0437: "" CYRILLIC SMALL LETTER ZE
   2609         /* keyspec_south_slavic_row3_1 */ "\u0437",
   2610         // U+0453: "" CYRILLIC SMALL LETTER GJE
   2611         /* keyspec_south_slavic_row3_8 */ "\u0453",
   2612     };
   2613 
   2614     /* Locale ml_IN: Malayalam (India) */
   2615     private static final String[] TEXTS_ml_IN = {
   2616         /* morekeys_a ~ */
   2617         null, null, null,
   2618         /* ~ morekeys_u */
   2619         // Label for "switch to alphabetic" key.
   2620         // U+0D05: "" MALAYALAM LETTER A
   2621         /* keylabel_to_alpha */ "\u0D05",
   2622         /* morekeys_e ~ */
   2623         null, null, null, null, null, null, null,
   2624         /* ~ morekeys_s */
   2625         // U+20B9: "" INDIAN RUPEE SIGN
   2626         /* keyspec_currency */ "\u20B9",
   2627     };
   2628 
   2629     /* Locale mn_MN: Mongolian (Mongolia) */
   2630     private static final String[] TEXTS_mn_MN = {
   2631         /* morekeys_a ~ */
   2632         null, null, null,
   2633         /* ~ morekeys_u */
   2634         // Label for "switch to alphabetic" key.
   2635         // U+0410: "" CYRILLIC CAPITAL LETTER A
   2636         // U+0411: "" CYRILLIC CAPITAL LETTER BE
   2637         // U+0412: "" CYRILLIC CAPITAL LETTER VE
   2638         /* keylabel_to_alpha */ "\u0410\u0411\u0412",
   2639         /* morekeys_e ~ */
   2640         null, null, null, null, null, null, null,
   2641         /* ~ morekeys_s */
   2642         // U+20AE: "" TUGRIK SIGN
   2643         /* keyspec_currency */ "\u20AE",
   2644     };
   2645 
   2646     /* Locale mr_IN: Marathi (India) */
   2647     private static final String[] TEXTS_mr_IN = {
   2648         /* morekeys_a ~ */
   2649         null, null, null,
   2650         /* ~ morekeys_u */
   2651         // Label for "switch to alphabetic" key.
   2652         // U+0915: "" DEVANAGARI LETTER KA
   2653         // U+0916: "" DEVANAGARI LETTER KHA
   2654         // U+0917: "" DEVANAGARI LETTER GA
   2655         /* keylabel_to_alpha */ "\u0915\u0916\u0917",
   2656         /* morekeys_e ~ */
   2657         null, null, null, null, null, null, null,
   2658         /* ~ morekeys_s */
   2659         // U+20B9: "" INDIAN RUPEE SIGN
   2660         /* keyspec_currency */ "\u20B9",
   2661         /* morekeys_y ~ */
   2662         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2663         null, null, null, null, null,
   2664         /* ~ morekeys_cyrillic_soft_sign */
   2665         // U+0967: "" DEVANAGARI DIGIT ONE
   2666         /* keyspec_symbols_1 */ "\u0967",
   2667         // U+0968: "" DEVANAGARI DIGIT TWO
   2668         /* keyspec_symbols_2 */ "\u0968",
   2669         // U+0969: "" DEVANAGARI DIGIT THREE
   2670         /* keyspec_symbols_3 */ "\u0969",
   2671         // U+096A: "" DEVANAGARI DIGIT FOUR
   2672         /* keyspec_symbols_4 */ "\u096A",
   2673         // U+096B: "" DEVANAGARI DIGIT FIVE
   2674         /* keyspec_symbols_5 */ "\u096B",
   2675         // U+096C: "" DEVANAGARI DIGIT SIX
   2676         /* keyspec_symbols_6 */ "\u096C",
   2677         // U+096D: "" DEVANAGARI DIGIT SEVEN
   2678         /* keyspec_symbols_7 */ "\u096D",
   2679         // U+096E: "" DEVANAGARI DIGIT EIGHT
   2680         /* keyspec_symbols_8 */ "\u096E",
   2681         // U+096F: "" DEVANAGARI DIGIT NINE
   2682         /* keyspec_symbols_9 */ "\u096F",
   2683         // U+0966: "" DEVANAGARI DIGIT ZERO
   2684         /* keyspec_symbols_0 */ "\u0966",
   2685         // Label for "switch to symbols" key.
   2686         /* keylabel_to_symbol */ "?\u0967\u0968\u0969",
   2687         /* additional_morekeys_symbols_1 */ "1",
   2688         /* additional_morekeys_symbols_2 */ "2",
   2689         /* additional_morekeys_symbols_3 */ "3",
   2690         /* additional_morekeys_symbols_4 */ "4",
   2691         /* additional_morekeys_symbols_5 */ "5",
   2692         /* additional_morekeys_symbols_6 */ "6",
   2693         /* additional_morekeys_symbols_7 */ "7",
   2694         /* additional_morekeys_symbols_8 */ "8",
   2695         /* additional_morekeys_symbols_9 */ "9",
   2696         /* additional_morekeys_symbols_0 */ "0",
   2697     };
   2698 
   2699     /* Locale my_MM: Burmese (Myanmar) */
   2700     private static final String[] TEXTS_my_MM = {
   2701         /* morekeys_a ~ */
   2702         null, null, null,
   2703         /* ~ morekeys_u */
   2704         // Label for "switch to alphabetic" key.
   2705         // U+1000: "" MYANMAR LETTER KA
   2706         // U+1001: "" MYANMAR LETTER KHA
   2707         // U+1002: "" MYANMAR LETTER GA
   2708         /* keylabel_to_alpha */ "\u1000\u1001\u1002",
   2709         /* morekeys_e ~ */
   2710         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2711         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2712         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2713         null, null, null, null, null,
   2714         /* ~ morekeys_nordic_row2_11 */
   2715         /* morekeys_punctuation */ "!autoColumnOrder!9,\u104A,.,?,!,#,),(,/,;,...,',@,:,-,\",+,\\%,&",
   2716         // U+104A: "" MYANMAR SIGN LITTLE SECTION
   2717         // U+104B: "" MYANMAR SIGN SECTION
   2718         /* keyspec_tablet_comma */ "\u104A",
   2719         /* keyspec_swiss_row1_11 ~ */
   2720         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2721         null, null, null, null, null, null, null,
   2722         /* ~ keyspec_comma */
   2723         /* morekeys_tablet_comma */ "\\,",
   2724         /* keyhintlabel_period */ "\u104A",
   2725         /* morekeys_tablet_period ~ */
   2726         null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2727         /* ~ keyspec_south_slavic_row3_8 */
   2728         /* morekeys_tablet_punctuation */ "!autoColumnOrder!8,.,',#,),(,/,;,@,...,:,-,\",+,\\%,&",
   2729         /* keyspec_spanish_row2_10 ~ */
   2730         null, null, null, null, null, null,
   2731         /* ~ keyhintlabel_tablet_comma */
   2732         /* keyspec_period */ "\u104B",
   2733         /* morekeys_period */ null,
   2734         /* keyspec_tablet_period */ "\u104B",
   2735     };
   2736 
   2737     /* Locale nb: Norwegian Bokml */
   2738     private static final String[] TEXTS_nb = {
   2739         // U+00E0: "" LATIN SMALL LETTER A WITH GRAVE
   2740         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
   2741         // U+00E1: "" LATIN SMALL LETTER A WITH ACUTE
   2742         // U+00E2: "" LATIN SMALL LETTER A WITH CIRCUMFLEX
   2743         // U+00E3: "" LATIN SMALL LETTER A WITH TILDE
   2744         // U+0101: "" LATIN SMALL LETTER A WITH MACRON
   2745         /* morekeys_a */ "\u00E0,\u00E4,\u00E1,\u00E2,\u00E3,\u0101",
   2746         // U+00F4: "" LATIN SMALL LETTER O WITH CIRCUMFLEX
   2747         // U+00F2: "" LATIN SMALL LETTER O WITH GRAVE
   2748         // U+00F3: "" LATIN SMALL LETTER O WITH ACUTE
   2749         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
   2750         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
   2751         // U+0153: "" LATIN SMALL LIGATURE OE
   2752         // U+014D: "" LATIN SMALL LETTER O WITH MACRON
   2753         /* morekeys_o */ "\u00F4,\u00F2,\u00F3,\u00F6,\u00F5,\u0153,\u014D",
   2754         // U+00FC: "" LATIN SMALL LETTER U WITH DIAERESIS
   2755         // U+00FB: "" LATIN SMALL LETTER U WITH CIRCUMFLEX
   2756         // U+00F9: "" LATIN SMALL LETTER U WITH GRAVE
   2757         // U+00FA: "" LATIN SMALL LETTER U WITH ACUTE
   2758         // U+016B: "" LATIN SMALL LETTER U WITH MACRON
   2759         /* morekeys_u */ "\u00FC,\u00FB,\u00F9,\u00FA,\u016B",
   2760         /* keylabel_to_alpha */ null,
   2761         // U+00E9: "" LATIN SMALL LETTER E WITH ACUTE
   2762         // U+00E8: "" LATIN SMALL LETTER E WITH GRAVE
   2763         // U+00EA: "" LATIN SMALL LETTER E WITH CIRCUMFLEX
   2764         // U+00EB: "" LATIN SMALL LETTER E WITH DIAERESIS
   2765         // U+0119: "" LATIN SMALL LETTER E WITH OGONEK
   2766         // U+0117: "" LATIN SMALL LETTER E WITH DOT ABOVE
   2767         // U+0113: "" LATIN SMALL LETTER E WITH MACRON
   2768         /* morekeys_e */ "\u00E9,\u00E8,\u00EA,\u00EB,\u0119,\u0117,\u0113",
   2769         /* morekeys_i */ null,
   2770         /* morekeys_c */ null,
   2771         /* double_quotes */ "!text/double_9qm_rqm",
   2772         /* morekeys_n */ null,
   2773         /* single_quotes */ "!text/single_9qm_rqm",
   2774         /* morekeys_s ~ */
   2775         null, null, null, null, null, null, null, null, null, null, null, null, null,
   2776         /* ~ morekeys_cyrillic_ie */
   2777         // U+00E5: "" LATIN SMALL LETTER A WITH RING ABOVE
   2778         /* keyspec_nordic_row1_11 */ "\u00E5",
   2779         // U+00F8: "" LATIN SMALL LETTER O WITH STROKE
   2780         /* keyspec_nordic_row2_10 */ "\u00F8",
   2781         // U+00E6: "" LATIN SMALL LETTER AE
   2782         /* keyspec_nordic_row2_11 */ "\u00E6",
   2783         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
   2784         /* morekeys_nordic_row2_10 */ "\u00F6",
   2785         /* keyspec_east_slavic_row1_9 ~ */
   2786         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2787         null, null, null, null, null, null, null, null, null, null, null,
   2788         /* ~ additional_morekeys_symbols_0 */
   2789         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
   2790         /* morekeys_nordic_row2_11 */ "\u00E4",
   2791     };
   2792 
   2793     /* Locale ne_NP: Nepali (Nepal) */
   2794     private static final String[] TEXTS_ne_NP = {
   2795         /* morekeys_a ~ */
   2796         null, null, null,
   2797         /* ~ morekeys_u */
   2798         // Label for "switch to alphabetic" key.
   2799         // U+0915: "" DEVANAGARI LETTER KA
   2800         // U+0916: "" DEVANAGARI LETTER KHA
   2801         // U+0917: "" DEVANAGARI LETTER GA
   2802         /* keylabel_to_alpha */ "\u0915\u0916\u0917",
   2803         /* morekeys_e ~ */
   2804         null, null, null, null, null, null, null,
   2805         /* ~ morekeys_s */
   2806         // U+0930/U+0941/U+002E "." NEPALESE RUPEE SIGN
   2807         /* keyspec_currency */ "\u0930\u0941.",
   2808         /* morekeys_y ~ */
   2809         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2810         null, null, null, null, null,
   2811         /* ~ morekeys_cyrillic_soft_sign */
   2812         // U+0967: "" DEVANAGARI DIGIT ONE
   2813         /* keyspec_symbols_1 */ "\u0967",
   2814         // U+0968: "" DEVANAGARI DIGIT TWO
   2815         /* keyspec_symbols_2 */ "\u0968",
   2816         // U+0969: "" DEVANAGARI DIGIT THREE
   2817         /* keyspec_symbols_3 */ "\u0969",
   2818         // U+096A: "" DEVANAGARI DIGIT FOUR
   2819         /* keyspec_symbols_4 */ "\u096A",
   2820         // U+096B: "" DEVANAGARI DIGIT FIVE
   2821         /* keyspec_symbols_5 */ "\u096B",
   2822         // U+096C: "" DEVANAGARI DIGIT SIX
   2823         /* keyspec_symbols_6 */ "\u096C",
   2824         // U+096D: "" DEVANAGARI DIGIT SEVEN
   2825         /* keyspec_symbols_7 */ "\u096D",
   2826         // U+096E: "" DEVANAGARI DIGIT EIGHT
   2827         /* keyspec_symbols_8 */ "\u096E",
   2828         // U+096F: "" DEVANAGARI DIGIT NINE
   2829         /* keyspec_symbols_9 */ "\u096F",
   2830         // U+0966: "" DEVANAGARI DIGIT ZERO
   2831         /* keyspec_symbols_0 */ "\u0966",
   2832         // Label for "switch to symbols" key.
   2833         /* keylabel_to_symbol */ "?\u0967\u0968\u0969",
   2834         /* additional_morekeys_symbols_1 */ "1",
   2835         /* additional_morekeys_symbols_2 */ "2",
   2836         /* additional_morekeys_symbols_3 */ "3",
   2837         /* additional_morekeys_symbols_4 */ "4",
   2838         /* additional_morekeys_symbols_5 */ "5",
   2839         /* additional_morekeys_symbols_6 */ "6",
   2840         /* additional_morekeys_symbols_7 */ "7",
   2841         /* additional_morekeys_symbols_8 */ "8",
   2842         /* additional_morekeys_symbols_9 */ "9",
   2843         /* additional_morekeys_symbols_0 */ "0",
   2844     };
   2845 
   2846     /* Locale nl: Dutch */
   2847     private static final String[] TEXTS_nl = {
   2848         // U+00E1: "" LATIN SMALL LETTER A WITH ACUTE
   2849         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
   2850         // U+00E2: "" LATIN SMALL LETTER A WITH CIRCUMFLEX
   2851         // U+00E0: "" LATIN SMALL LETTER A WITH GRAVE
   2852         // U+00E6: "" LATIN SMALL LETTER AE
   2853         // U+00E3: "" LATIN SMALL LETTER A WITH TILDE
   2854         // U+00E5: "" LATIN SMALL LETTER A WITH RING ABOVE
   2855         // U+0101: "" LATIN SMALL LETTER A WITH MACRON
   2856         /* morekeys_a */ "\u00E1,\u00E4,\u00E2,\u00E0,\u00E6,\u00E3,\u00E5,\u0101",
   2857         // U+00F3: "" LATIN SMALL LETTER O WITH ACUTE
   2858         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
   2859         // U+00F4: "" LATIN SMALL LETTER O WITH CIRCUMFLEX
   2860         // U+00F2: "" LATIN SMALL LETTER O WITH GRAVE
   2861         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
   2862         // U+0153: "" LATIN SMALL LIGATURE OE
   2863         // U+00F8: "" LATIN SMALL LETTER O WITH STROKE
   2864         // U+014D: "" LATIN SMALL LETTER O WITH MACRON
   2865         /* morekeys_o */ "\u00F3,\u00F6,\u00F4,\u00F2,\u00F5,\u0153,\u00F8,\u014D",
   2866         // U+00FA: "" LATIN SMALL LETTER U WITH ACUTE
   2867         // U+00FC: "" LATIN SMALL LETTER U WITH DIAERESIS
   2868         // U+00FB: "" LATIN SMALL LETTER U WITH CIRCUMFLEX
   2869         // U+00F9: "" LATIN SMALL LETTER U WITH GRAVE
   2870         // U+016B: "" LATIN SMALL LETTER U WITH MACRON
   2871         /* morekeys_u */ "\u00FA,\u00FC,\u00FB,\u00F9,\u016B",
   2872         /* keylabel_to_alpha */ null,
   2873         // U+00E9: "" LATIN SMALL LETTER E WITH ACUTE
   2874         // U+00EB: "" LATIN SMALL LETTER E WITH DIAERESIS
   2875         // U+00EA: "" LATIN SMALL LETTER E WITH CIRCUMFLEX
   2876         // U+00E8: "" LATIN SMALL LETTER E WITH GRAVE
   2877         // U+0119: "" LATIN SMALL LETTER E WITH OGONEK
   2878         // U+0117: "" LATIN SMALL LETTER E WITH DOT ABOVE
   2879         // U+0113: "" LATIN SMALL LETTER E WITH MACRON
   2880         /* morekeys_e */ "\u00E9,\u00EB,\u00EA,\u00E8,\u0119,\u0117,\u0113",
   2881         // U+00ED: "" LATIN SMALL LETTER I WITH ACUTE
   2882         // U+00EF: "" LATIN SMALL LETTER I WITH DIAERESIS
   2883         // U+00EC: "" LATIN SMALL LETTER I WITH GRAVE
   2884         // U+00EE: "" LATIN SMALL LETTER I WITH CIRCUMFLEX
   2885         // U+012F: "" LATIN SMALL LETTER I WITH OGONEK
   2886         // U+012B: "" LATIN SMALL LETTER I WITH MACRON
   2887         // U+0133: "" LATIN SMALL LIGATURE IJ
   2888         /* morekeys_i */ "\u00ED,\u00EF,\u00EC,\u00EE,\u012F,\u012B,\u0133",
   2889         /* morekeys_c */ null,
   2890         /* double_quotes */ "!text/double_9qm_rqm",
   2891         // U+00F1: "" LATIN SMALL LETTER N WITH TILDE
   2892         // U+0144: "" LATIN SMALL LETTER N WITH ACUTE
   2893         /* morekeys_n */ "\u00F1,\u0144",
   2894         /* single_quotes */ "!text/single_9qm_rqm",
   2895         /* morekeys_s */ null,
   2896         /* keyspec_currency */ null,
   2897         // U+0133: "" LATIN SMALL LIGATURE IJ
   2898         /* morekeys_y */ "\u0133",
   2899     };
   2900 
   2901     /* Locale pl: Polish */
   2902     private static final String[] TEXTS_pl = {
   2903         // U+0105: "" LATIN SMALL LETTER A WITH OGONEK
   2904         // U+00E1: "" LATIN SMALL LETTER A WITH ACUTE
   2905         // U+00E0: "" LATIN SMALL LETTER A WITH GRAVE
   2906         // U+00E2: "" LATIN SMALL LETTER A WITH CIRCUMFLEX
   2907         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
   2908         // U+00E6: "" LATIN SMALL LETTER AE
   2909         // U+00E3: "" LATIN SMALL LETTER A WITH TILDE
   2910         // U+00E5: "" LATIN SMALL LETTER A WITH RING ABOVE
   2911         // U+0101: "" LATIN SMALL LETTER A WITH MACRON
   2912         /* morekeys_a */ "\u0105,\u00E1,\u00E0,\u00E2,\u00E4,\u00E6,\u00E3,\u00E5,\u0101",
   2913         // U+00F3: "" LATIN SMALL LETTER O WITH ACUTE
   2914         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
   2915         // U+00F4: "" LATIN SMALL LETTER O WITH CIRCUMFLEX
   2916         // U+00F2: "" LATIN SMALL LETTER O WITH GRAVE
   2917         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
   2918         // U+0153: "" LATIN SMALL LIGATURE OE
   2919         // U+00F8: "" LATIN SMALL LETTER O WITH STROKE
   2920         // U+014D: "" LATIN SMALL LETTER O WITH MACRON
   2921         /* morekeys_o */ "\u00F3,\u00F6,\u00F4,\u00F2,\u00F5,\u0153,\u00F8,\u014D",
   2922         /* morekeys_u */ null,
   2923         /* keylabel_to_alpha */ null,
   2924         // U+0119: "" LATIN SMALL LETTER E WITH OGONEK
   2925         // U+00E8: "" LATIN SMALL LETTER E WITH GRAVE
   2926         // U+00E9: "" LATIN SMALL LETTER E WITH ACUTE
   2927         // U+00EA: "" LATIN SMALL LETTER E WITH CIRCUMFLEX
   2928         // U+00EB: "" LATIN SMALL LETTER E WITH DIAERESIS
   2929         // U+0117: "" LATIN SMALL LETTER E WITH DOT ABOVE
   2930         // U+0113: "" LATIN SMALL LETTER E WITH MACRON
   2931         /* morekeys_e */ "\u0119,\u00E8,\u00E9,\u00EA,\u00EB,\u0117,\u0113",
   2932         /* morekeys_i */ null,
   2933         // U+0107: "" LATIN SMALL LETTER C WITH ACUTE
   2934         // U+00E7: "" LATIN SMALL LETTER C WITH CEDILLA
   2935         // U+010D: "" LATIN SMALL LETTER C WITH CARON
   2936         /* morekeys_c */ "\u0107,\u00E7,\u010D",
   2937         /* double_quotes */ "!text/double_9qm_rqm",
   2938         // U+0144: "" LATIN SMALL LETTER N WITH ACUTE
   2939         // U+00F1: "" LATIN SMALL LETTER N WITH TILDE
   2940         /* morekeys_n */ "\u0144,\u00F1",
   2941         /* single_quotes */ "!text/single_9qm_rqm",
   2942         // U+015B: "" LATIN SMALL LETTER S WITH ACUTE
   2943         // U+00DF: "" LATIN SMALL LETTER SHARP S
   2944         // U+0161: "" LATIN SMALL LETTER S WITH CARON
   2945         /* morekeys_s */ "\u015B,\u00DF,\u0161",
   2946         /* keyspec_currency ~ */
   2947         null, null, null,
   2948         /* ~ morekeys_d */
   2949         // U+017C: "" LATIN SMALL LETTER Z WITH DOT ABOVE
   2950         // U+017A: "" LATIN SMALL LETTER Z WITH ACUTE
   2951         // U+017E: "" LATIN SMALL LETTER Z WITH CARON
   2952         /* morekeys_z */ "\u017C,\u017A,\u017E",
   2953         /* morekeys_t */ null,
   2954         // U+0142: "" LATIN SMALL LETTER L WITH STROKE
   2955         /* morekeys_l */ "\u0142",
   2956     };
   2957 
   2958     /* Locale pt: Portuguese */
   2959     private static final String[] TEXTS_pt = {
   2960         // U+00E1: "" LATIN SMALL LETTER A WITH ACUTE
   2961         // U+00E3: "" LATIN SMALL LETTER A WITH TILDE
   2962         // U+00E0: "" LATIN SMALL LETTER A WITH GRAVE
   2963         // U+00E2: "" LATIN SMALL LETTER A WITH CIRCUMFLEX
   2964         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
   2965         // U+00E5: "" LATIN SMALL LETTER A WITH RING ABOVE
   2966         // U+00E6: "" LATIN SMALL LETTER AE
   2967         // U+00AA: "" FEMININE ORDINAL INDICATOR
   2968         /* morekeys_a */ "\u00E1,\u00E3,\u00E0,\u00E2,\u00E4,\u00E5,\u00E6,\u00AA",
   2969         // U+00F3: "" LATIN SMALL LETTER O WITH ACUTE
   2970         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
   2971         // U+00F4: "" LATIN SMALL LETTER O WITH CIRCUMFLEX
   2972         // U+00F2: "" LATIN SMALL LETTER O WITH GRAVE
   2973         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
   2974         // U+0153: "" LATIN SMALL LIGATURE OE
   2975         // U+00F8: "" LATIN SMALL LETTER O WITH STROKE
   2976         // U+014D: "" LATIN SMALL LETTER O WITH MACRON
   2977         // U+00BA: "" MASCULINE ORDINAL INDICATOR
   2978         /* morekeys_o */ "\u00F3,\u00F5,\u00F4,\u00F2,\u00F6,\u0153,\u00F8,\u014D,\u00BA",
   2979         // U+00FA: "" LATIN SMALL LETTER U WITH ACUTE
   2980         // U+00FC: "" LATIN SMALL LETTER U WITH DIAERESIS
   2981         // U+00F9: "" LATIN SMALL LETTER U WITH GRAVE
   2982         // U+00FB: "" LATIN SMALL LETTER U WITH CIRCUMFLEX
   2983         // U+016B: "" LATIN SMALL LETTER U WITH MACRON
   2984         /* morekeys_u */ "\u00FA,\u00FC,\u00F9,\u00FB,\u016B",
   2985         /* keylabel_to_alpha */ null,
   2986         // U+00E9: "" LATIN SMALL LETTER E WITH ACUTE
   2987         // U+00EA: "" LATIN SMALL LETTER E WITH CIRCUMFLEX
   2988         // U+00E8: "" LATIN SMALL LETTER E WITH GRAVE
   2989         // U+0119: "" LATIN SMALL LETTER E WITH OGONEK
   2990         // U+0117: "" LATIN SMALL LETTER E WITH DOT ABOVE
   2991         // U+0113: "" LATIN SMALL LETTER E WITH MACRON
   2992         // U+00EB: "" LATIN SMALL LETTER E WITH DIAERESIS
   2993         /* morekeys_e */ "\u00E9,\u00EA,\u00E8,\u0119,\u0117,\u0113,\u00EB",
   2994         // U+00ED: "" LATIN SMALL LETTER I WITH ACUTE
   2995         // U+00EE: "" LATIN SMALL LETTER I WITH CIRCUMFLEX
   2996         // U+00EC: "" LATIN SMALL LETTER I WITH GRAVE
   2997         // U+00EF: "" LATIN SMALL LETTER I WITH DIAERESIS
   2998         // U+012F: "" LATIN SMALL LETTER I WITH OGONEK
   2999         // U+012B: "" LATIN SMALL LETTER I WITH MACRON
   3000         /* morekeys_i */ "\u00ED,\u00EE,\u00EC,\u00EF,\u012F,\u012B",
   3001         // U+00E7: "" LATIN SMALL LETTER C WITH CEDILLA
   3002         // U+010D: "" LATIN SMALL LETTER C WITH CARON
   3003         // U+0107: "" LATIN SMALL LETTER C WITH ACUTE
   3004         /* morekeys_c */ "\u00E7,\u010D,\u0107",
   3005     };
   3006 
   3007     /* Locale rm: Raeto-Romance */
   3008     private static final String[] TEXTS_rm = {
   3009         /* morekeys_a */ null,
   3010         // U+00F2: "" LATIN SMALL LETTER O WITH GRAVE
   3011         // U+00F3: "" LATIN SMALL LETTER O WITH ACUTE
   3012         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
   3013         // U+00F4: "" LATIN SMALL LETTER O WITH CIRCUMFLEX
   3014         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
   3015         // U+0153: "" LATIN SMALL LIGATURE OE
   3016         // U+00F8: "" LATIN SMALL LETTER O WITH STROKE
   3017         /* morekeys_o */ "\u00F2,\u00F3,\u00F6,\u00F4,\u00F5,\u0153,\u00F8",
   3018     };
   3019 
   3020     /* Locale ro: Romanian */
   3021     private static final String[] TEXTS_ro = {
   3022         // U+00E2: "" LATIN SMALL LETTER A WITH CIRCUMFLEX
   3023         // U+00E3: "" LATIN SMALL LETTER A WITH TILDE
   3024         // U+0103: "" LATIN SMALL LETTER A WITH BREVE
   3025         // U+00E0: "" LATIN SMALL LETTER A WITH GRAVE
   3026         // U+00E1: "" LATIN SMALL LETTER A WITH ACUTE
   3027         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
   3028         // U+00E6: "" LATIN SMALL LETTER AE
   3029         // U+00E5: "" LATIN SMALL LETTER A WITH RING ABOVE
   3030         // U+0101: "" LATIN SMALL LETTER A WITH MACRON
   3031         /* morekeys_a */ "\u00E2,\u00E3,\u0103,\u00E0,\u00E1,\u00E4,\u00E6,\u00E5,\u0101",
   3032         /* morekeys_o ~ */
   3033         null, null, null, null,
   3034         /* ~ morekeys_e */
   3035         // U+00EE: "" LATIN SMALL LETTER I WITH CIRCUMFLEX
   3036         // U+00EF: "" LATIN SMALL LETTER I WITH DIAERESIS
   3037         // U+00EC: "" LATIN SMALL LETTER I WITH GRAVE
   3038         // U+00ED: "" LATIN SMALL LETTER I WITH ACUTE
   3039         // U+012F: "" LATIN SMALL LETTER I WITH OGONEK
   3040         // U+012B: "" LATIN SMALL LETTER I WITH MACRON
   3041         /* morekeys_i */ "\u00EE,\u00EF,\u00EC,\u00ED,\u012F,\u012B",
   3042         /* morekeys_c */ null,
   3043         /* double_quotes */ "!text/double_9qm_rqm",
   3044         /* morekeys_n */ null,
   3045         /* single_quotes */ "!text/single_9qm_rqm",
   3046         // U+0219: "" LATIN SMALL LETTER S WITH COMMA BELOW
   3047         // U+00DF: "" LATIN SMALL LETTER SHARP S
   3048         // U+015B: "" LATIN SMALL LETTER S WITH ACUTE
   3049         // U+0161: "" LATIN SMALL LETTER S WITH CARON
   3050         /* morekeys_s */ "\u0219,\u00DF,\u015B,\u0161",
   3051         /* keyspec_currency ~ */
   3052         null, null, null, null,
   3053         /* ~ morekeys_z */
   3054         // U+021B: "" LATIN SMALL LETTER T WITH COMMA BELOW
   3055         /* morekeys_t */ "\u021B",
   3056     };
   3057 
   3058     /* Locale ru: Russian */
   3059     private static final String[] TEXTS_ru = {
   3060         /* morekeys_a ~ */
   3061         null, null, null,
   3062         /* ~ morekeys_u */
   3063         // Label for "switch to alphabetic" key.
   3064         // U+0410: "" CYRILLIC CAPITAL LETTER A
   3065         // U+0411: "" CYRILLIC CAPITAL LETTER BE
   3066         // U+0412: "" CYRILLIC CAPITAL LETTER VE
   3067         /* keylabel_to_alpha */ "\u0410\u0411\u0412",
   3068         /* morekeys_e ~ */
   3069         null, null, null,
   3070         /* ~ morekeys_c */
   3071         /* double_quotes */ "!text/double_9qm_lqm",
   3072         /* morekeys_n */ null,
   3073         /* single_quotes */ "!text/single_9qm_lqm",
   3074         /* morekeys_s ~ */
   3075         null, null, null, null, null, null, null, null, null, null, null, null,
   3076         /* ~ morekeys_k */
   3077         // U+0451: "" CYRILLIC SMALL LETTER IO
   3078         /* morekeys_cyrillic_ie */ "\u0451",
   3079         /* keyspec_nordic_row1_11 ~ */
   3080         null, null, null, null,
   3081         /* ~ morekeys_nordic_row2_10 */
   3082         // U+0449: "" CYRILLIC SMALL LETTER SHCHA
   3083         /* keyspec_east_slavic_row1_9 */ "\u0449",
   3084         // U+044B: "" CYRILLIC SMALL LETTER YERU
   3085         /* keyspec_east_slavic_row2_2 */ "\u044B",
   3086         // U+044D: "" CYRILLIC SMALL LETTER E
   3087         /* keyspec_east_slavic_row2_11 */ "\u044D",
   3088         // U+0438: "" CYRILLIC SMALL LETTER I
   3089         /* keyspec_east_slavic_row3_5 */ "\u0438",
   3090         // U+044A: "" CYRILLIC SMALL LETTER HARD SIGN
   3091         /* morekeys_cyrillic_soft_sign */ "\u044A",
   3092     };
   3093 
   3094     /* Locale si_LK: Sinhalese (Sri Lanka) */
   3095     private static final String[] TEXTS_si_LK = {
   3096         /* morekeys_a ~ */
   3097         null, null, null,
   3098         /* ~ morekeys_u */
   3099         // Label for "switch to alphabetic" key.
   3100         // U+0D85: "" SINHALA LETTER AYANNA
   3101         // U+0D86: "" SINHALA LETTER AAYANNA
   3102         /* keylabel_to_alpha */ "\u0D85,\u0D86",
   3103         /* morekeys_e ~ */
   3104         null, null, null, null, null, null, null,
   3105         /* ~ morekeys_s */
   3106         // U+0DBB/U+0DD4: "" SINHALA LETTER RAYANNA/SINHALA VOWEL SIGN KETTI PAA-PILLA
   3107         /* keyspec_currency */ "\u0DBB\u0DD4",
   3108     };
   3109 
   3110     /* Locale sk: Slovak */
   3111     private static final String[] TEXTS_sk = {
   3112         // U+00E1: "" LATIN SMALL LETTER A WITH ACUTE
   3113         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
   3114         // U+0101: "" LATIN SMALL LETTER A WITH MACRON
   3115         // U+00E0: "" LATIN SMALL LETTER A WITH GRAVE
   3116         // U+00E2: "" LATIN SMALL LETTER A WITH CIRCUMFLEX
   3117         // U+00E3: "" LATIN SMALL LETTER A WITH TILDE
   3118         // U+00E5: "" LATIN SMALL LETTER A WITH RING ABOVE
   3119         // U+00E6: "" LATIN SMALL LETTER AE
   3120         // U+0105: "" LATIN SMALL LETTER A WITH OGONEK
   3121         /* morekeys_a */ "\u00E1,\u00E4,\u0101,\u00E0,\u00E2,\u00E3,\u00E5,\u00E6,\u0105",
   3122         // U+00F4: "" LATIN SMALL LETTER O WITH CIRCUMFLEX
   3123         // U+00F3: "" LATIN SMALL LETTER O WITH ACUTE
   3124         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
   3125         // U+00F2: "" LATIN SMALL LETTER O WITH GRAVE
   3126         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
   3127         // U+0153: "" LATIN SMALL LIGATURE OE
   3128         // U+0151: "" LATIN SMALL LETTER O WITH DOUBLE ACUTE
   3129         // U+00F8: "" LATIN SMALL LETTER O WITH STROKE
   3130         /* morekeys_o */ "\u00F4,\u00F3,\u00F6,\u00F2,\u00F5,\u0153,\u0151,\u00F8",
   3131         // U+00FA: "" LATIN SMALL LETTER U WITH ACUTE
   3132         // U+016F: "" LATIN SMALL LETTER U WITH RING ABOVE
   3133         // U+00FC: "" LATIN SMALL LETTER U WITH DIAERESIS
   3134         // U+016B: "" LATIN SMALL LETTER U WITH MACRON
   3135         // U+0173: "" LATIN SMALL LETTER U WITH OGONEK
   3136         // U+00F9: "" LATIN SMALL LETTER U WITH GRAVE
   3137         // U+00FB: "" LATIN SMALL LETTER U WITH CIRCUMFLEX
   3138         // U+0171: "" LATIN SMALL LETTER U WITH DOUBLE ACUTE
   3139         /* morekeys_u */ "\u00FA,\u016F,\u00FC,\u016B,\u0173,\u00F9,\u00FB,\u0171",
   3140         /* keylabel_to_alpha */ null,
   3141         // U+00E9: "" LATIN SMALL LETTER E WITH ACUTE
   3142         // U+011B: "" LATIN SMALL LETTER E WITH CARON
   3143         // U+0113: "" LATIN SMALL LETTER E WITH MACRON
   3144         // U+0117: "" LATIN SMALL LETTER E WITH DOT ABOVE
   3145         // U+00E8: "" LATIN SMALL LETTER E WITH GRAVE
   3146         // U+00EA: "" LATIN SMALL LETTER E WITH CIRCUMFLEX
   3147         // U+00EB: "" LATIN SMALL LETTER E WITH DIAERESIS
   3148         // U+0119: "" LATIN SMALL LETTER E WITH OGONEK
   3149         /* morekeys_e */ "\u00E9,\u011B,\u0113,\u0117,\u00E8,\u00EA,\u00EB,\u0119",
   3150         // U+00ED: "" LATIN SMALL LETTER I WITH ACUTE
   3151         // U+012B: "" LATIN SMALL LETTER I WITH MACRON
   3152         // U+012F: "" LATIN SMALL LETTER I WITH OGONEK
   3153         // U+00EC: "" LATIN SMALL LETTER I WITH GRAVE
   3154         // U+00EE: "" LATIN SMALL LETTER I WITH CIRCUMFLEX
   3155         // U+00EF: "" LATIN SMALL LETTER I WITH DIAERESIS
   3156         // U+0131: "" LATIN SMALL LETTER DOTLESS I
   3157         /* morekeys_i */ "\u00ED,\u012B,\u012F,\u00EC,\u00EE,\u00EF,\u0131",
   3158         // U+010D: "" LATIN SMALL LETTER C WITH CARON
   3159         // U+00E7: "" LATIN SMALL LETTER C WITH CEDILLA
   3160         // U+0107: "" LATIN SMALL LETTER C WITH ACUTE
   3161         /* morekeys_c */ "\u010D,\u00E7,\u0107",
   3162         /* double_quotes */ "!text/double_9qm_lqm",
   3163         // U+0148: "" LATIN SMALL LETTER N WITH CARON
   3164         // U+0146: "" LATIN SMALL LETTER N WITH CEDILLA
   3165         // U+00F1: "" LATIN SMALL LETTER N WITH TILDE
   3166         // U+0144: "" LATIN SMALL LETTER N WITH ACUTE
   3167         /* morekeys_n */ "\u0148,\u0146,\u00F1,\u0144",
   3168         /* single_quotes */ "!text/single_9qm_lqm",
   3169         // U+0161: "" LATIN SMALL LETTER S WITH CARON
   3170         // U+00DF: "" LATIN SMALL LETTER SHARP S
   3171         // U+015B: "" LATIN SMALL LETTER S WITH ACUTE
   3172         // U+015F: "" LATIN SMALL LETTER S WITH CEDILLA
   3173         /* morekeys_s */ "\u0161,\u00DF,\u015B,\u015F",
   3174         /* keyspec_currency */ null,
   3175         // U+00FD: "" LATIN SMALL LETTER Y WITH ACUTE
   3176         // U+00FF: "" LATIN SMALL LETTER Y WITH DIAERESIS
   3177         /* morekeys_y */ "\u00FD,\u00FF",
   3178         // U+010F: "" LATIN SMALL LETTER D WITH CARON
   3179         /* morekeys_d */ "\u010F",
   3180         // U+017E: "" LATIN SMALL LETTER Z WITH CARON
   3181         // U+017C: "" LATIN SMALL LETTER Z WITH DOT ABOVE
   3182         // U+017A: "" LATIN SMALL LETTER Z WITH ACUTE
   3183         /* morekeys_z */ "\u017E,\u017C,\u017A",
   3184         // U+0165: "" LATIN SMALL LETTER T WITH CARON
   3185         // U+0163: "" LATIN SMALL LETTER T WITH CEDILLA
   3186         /* morekeys_t */ "\u0165,\u0163",
   3187         // U+013E: "" LATIN SMALL LETTER L WITH CARON
   3188         // U+013A: "" LATIN SMALL LETTER L WITH ACUTE
   3189         // U+013C: "" LATIN SMALL LETTER L WITH CEDILLA
   3190         // U+0142: "" LATIN SMALL LETTER L WITH STROKE
   3191         /* morekeys_l */ "\u013E,\u013A,\u013C,\u0142",
   3192         // U+0123: "" LATIN SMALL LETTER G WITH CEDILLA
   3193         // U+011F: "" LATIN SMALL LETTER G WITH BREVE
   3194         /* morekeys_g */ "\u0123,\u011F",
   3195         /* single_angle_quotes */ "!text/single_raqm_laqm",
   3196         /* double_angle_quotes */ "!text/double_raqm_laqm",
   3197         // U+0155: "" LATIN SMALL LETTER R WITH ACUTE
   3198         // U+0159: "" LATIN SMALL LETTER R WITH CARON
   3199         // U+0157: "" LATIN SMALL LETTER R WITH CEDILLA
   3200         /* morekeys_r */ "\u0155,\u0159,\u0157",
   3201         // U+0137: "" LATIN SMALL LETTER K WITH CEDILLA
   3202         /* morekeys_k */ "\u0137",
   3203     };
   3204 
   3205     /* Locale sl: Slovenian */
   3206     private static final String[] TEXTS_sl = {
   3207         /* morekeys_a ~ */
   3208         null, null, null, null, null, null,
   3209         /* ~ morekeys_i */
   3210         // U+010D: "" LATIN SMALL LETTER C WITH CARON
   3211         // U+0107: "" LATIN SMALL LETTER C WITH ACUTE
   3212         /* morekeys_c */ "\u010D,\u0107",
   3213         /* double_quotes */ "!text/double_9qm_lqm",
   3214         /* morekeys_n */ null,
   3215         /* single_quotes */ "!text/single_9qm_lqm",
   3216         // U+0161: "" LATIN SMALL LETTER S WITH CARON
   3217         /* morekeys_s */ "\u0161",
   3218         /* keyspec_currency */ null,
   3219         /* morekeys_y */ null,
   3220         // U+0111: "" LATIN SMALL LETTER D WITH STROKE
   3221         /* morekeys_d */ "\u0111",
   3222         // U+017E: "" LATIN SMALL LETTER Z WITH CARON
   3223         /* morekeys_z */ "\u017E",
   3224         /* morekeys_t ~ */
   3225         null, null, null,
   3226         /* ~ morekeys_g */
   3227         /* single_angle_quotes */ "!text/single_raqm_laqm",
   3228         /* double_angle_quotes */ "!text/double_raqm_laqm",
   3229     };
   3230 
   3231     /* Locale sr: Serbian */
   3232     private static final String[] TEXTS_sr = {
   3233         /* morekeys_a ~ */
   3234         null, null, null,
   3235         /* ~ morekeys_u */
   3236         // END: More keys definitions for Serbian (Cyrillic)
   3237         // Label for "switch to alphabetic" key.
   3238         // U+0410: "" CYRILLIC CAPITAL LETTER A
   3239         // U+0411: "" CYRILLIC CAPITAL LETTER BE
   3240         // U+0412: "" CYRILLIC CAPITAL LETTER VE
   3241         /* keylabel_to_alpha */ "\u0410\u0411\u0412",
   3242         /* morekeys_e ~ */
   3243         null, null, null,
   3244         /* ~ morekeys_c */
   3245         /* double_quotes */ "!text/double_9qm_lqm",
   3246         /* morekeys_n */ null,
   3247         /* single_quotes */ "!text/single_9qm_lqm",
   3248         /* morekeys_s ~ */
   3249         null, null, null, null, null, null, null, null,
   3250         /* ~ morekeys_g */
   3251         /* single_angle_quotes */ "!text/single_raqm_laqm",
   3252         /* double_angle_quotes */ "!text/double_raqm_laqm",
   3253         /* morekeys_r */ null,
   3254         /* morekeys_k */ null,
   3255         // U+0450: "" CYRILLIC SMALL LETTER IE WITH GRAVE
   3256         /* morekeys_cyrillic_ie */ "\u0450",
   3257         /* keyspec_nordic_row1_11 ~ */
   3258         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   3259         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   3260         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   3261         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   3262         null, null, null, null, null, null,
   3263         /* ~ morekeys_cyrillic_o */
   3264         // U+045D: "" CYRILLIC SMALL LETTER I WITH GRAVE
   3265         /* morekeys_cyrillic_i */ "\u045D",
   3266         // TODO: Move these to sr-Latn once we can handle IETF language tag with script name specified.
   3267         // BEGIN: More keys definitions for Serbian (Latin)
   3268         // U+0161: "" LATIN SMALL LETTER S WITH CARON
   3269         // U+00DF: "" LATIN SMALL LETTER SHARP S
   3270         // U+015B: "" LATIN SMALL LETTER S WITH ACUTE
   3271         // <string name="morekeys_s">&#x0161;,&#x00DF;,&#x015B;</string>
   3272         // U+010D: "" LATIN SMALL LETTER C WITH CARON
   3273         // U+00E7: "" LATIN SMALL LETTER C WITH CEDILLA
   3274         // U+0107: "" LATIN SMALL LETTER C WITH ACUTE
   3275         // <string name="morekeys_c">&#x010D;,&#x00E7;,&#x0107;</string>
   3276         // U+010F: "" LATIN SMALL LETTER D WITH CARON
   3277         // <string name="morekeys_d">&#x010F;</string>
   3278         // U+017E: "" LATIN SMALL LETTER Z WITH CARON
   3279         // U+017A: "" LATIN SMALL LETTER Z WITH ACUTE
   3280         // U+017C: "" LATIN SMALL LETTER Z WITH DOT ABOVE
   3281         // <string name="morekeys_z">&#x017E;,&#x017A;,&#x017C;</string>
   3282         // END: More keys definitions for Serbian (Latin)
   3283         // BEGIN: More keys definitions for Serbian (Cyrillic)
   3284         // U+0437: "" CYRILLIC SMALL LETTER ZE
   3285         /* keyspec_south_slavic_row1_6 */ "\u0437",
   3286         // U+045B: "" CYRILLIC SMALL LETTER TSHE
   3287         /* keyspec_south_slavic_row2_11 */ "\u045B",
   3288         // U+0455: "" CYRILLIC SMALL LETTER DZE
   3289         /* keyspec_south_slavic_row3_1 */ "\u0455",
   3290         // U+0452: "" CYRILLIC SMALL LETTER DJE
   3291         /* keyspec_south_slavic_row3_8 */ "\u0452",
   3292     };
   3293 
   3294     /* Locale sv: Swedish */
   3295     private static final String[] TEXTS_sv = {
   3296         // U+00E1: "" LATIN SMALL LETTER A WITH ACUTE
   3297         // U+00E0: "" LATIN SMALL LETTER A WITH GRAVE
   3298         // U+00E2: "" LATIN SMALL LETTER A WITH CIRCUMFLEX
   3299         // U+0105: "" LATIN SMALL LETTER A WITH OGONEK
   3300         // U+00E3: "" LATIN SMALL LETTER A WITH TILDE
   3301         /* morekeys_a */ "\u00E1,\u00E0,\u00E2,\u0105,\u00E3",
   3302         // U+00F3: "" LATIN SMALL LETTER O WITH ACUTE
   3303         // U+00F2: "" LATIN SMALL LETTER O WITH GRAVE
   3304         // U+00F4: "" LATIN SMALL LETTER O WITH CIRCUMFLEX
   3305         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
   3306         // U+014D: "" LATIN SMALL LETTER O WITH MACRON
   3307         /* morekeys_o */ "\u00F3,\u00F2,\u00F4,\u00F5,\u014D",
   3308         // U+00FC: "" LATIN SMALL LETTER U WITH DIAERESIS
   3309         // U+00FA: "" LATIN SMALL LETTER U WITH ACUTE
   3310         // U+00F9: "" LATIN SMALL LETTER U WITH GRAVE
   3311         // U+00FB: "" LATIN SMALL LETTER U WITH CIRCUMFLEX
   3312         // U+016B: "" LATIN SMALL LETTER U WITH MACRON
   3313         /* morekeys_u */ "\u00FC,\u00FA,\u00F9,\u00FB,\u016B",
   3314         /* keylabel_to_alpha */ null,
   3315         // U+00E9: "" LATIN SMALL LETTER E WITH ACUTE
   3316         // U+00E8: "" LATIN SMALL LETTER E WITH GRAVE
   3317         // U+00EA: "" LATIN SMALL LETTER E WITH CIRCUMFLEX
   3318         // U+00EB: "" LATIN SMALL LETTER E WITH DIAERESIS
   3319         // U+0119: "" LATIN SMALL LETTER E WITH OGONEK
   3320         /* morekeys_e */ "\u00E9,\u00E8,\u00EA,\u00EB,\u0119",
   3321         // U+00ED: "" LATIN SMALL LETTER I WITH ACUTE
   3322         // U+00EC: "" LATIN SMALL LETTER I WITH GRAVE
   3323         // U+00EE: "" LATIN SMALL LETTER I WITH CIRCUMFLEX
   3324         // U+00EF: "" LATIN SMALL LETTER I WITH DIAERESIS
   3325         /* morekeys_i */ "\u00ED,\u00EC,\u00EE,\u00EF",
   3326         // U+00E7: "" LATIN SMALL LETTER C WITH CEDILLA
   3327         // U+0107: "" LATIN SMALL LETTER C WITH ACUTE
   3328         // U+010D: "" LATIN SMALL LETTER C WITH CARON
   3329         /* morekeys_c */ "\u00E7,\u0107,\u010D",
   3330         /* double_quotes */ null,
   3331         // U+0144: "" LATIN SMALL LETTER N WITH ACUTE
   3332         // U+00F1: "" LATIN SMALL LETTER N WITH TILDE
   3333         // U+0148: "" LATIN SMALL LETTER N WITH CARON
   3334         /* morekeys_n */ "\u0144,\u00F1,\u0148",
   3335         /* single_quotes */ null,
   3336         // U+015B: "" LATIN SMALL LETTER S WITH ACUTE
   3337         // U+0161: "" LATIN SMALL LETTER S WITH CARON
   3338         // U+015F: "" LATIN SMALL LETTER S WITH CEDILLA
   3339         // U+00DF: "" LATIN SMALL LETTER SHARP S
   3340         /* morekeys_s */ "\u015B,\u0161,\u015F,\u00DF",
   3341         /* keyspec_currency */ null,
   3342         // U+00FD: "" LATIN SMALL LETTER Y WITH ACUTE
   3343         // U+00FF: "" LATIN SMALL LETTER Y WITH DIAERESIS
   3344         /* morekeys_y */ "\u00FD,\u00FF",
   3345         // U+00F0: "" LATIN SMALL LETTER ETH
   3346         // U+010F: "" LATIN SMALL LETTER D WITH CARON
   3347         /* morekeys_d */ "\u00F0,\u010F",
   3348         // U+017A: "" LATIN SMALL LETTER Z WITH ACUTE
   3349         // U+017E: "" LATIN SMALL LETTER Z WITH CARON
   3350         // U+017C: "" LATIN SMALL LETTER Z WITH DOT ABOVE
   3351         /* morekeys_z */ "\u017A,\u017E,\u017C",
   3352         // U+0165: "" LATIN SMALL LETTER T WITH CARON
   3353         // U+00FE: "" LATIN SMALL LETTER THORN
   3354         /* morekeys_t */ "\u0165,\u00FE",
   3355         // U+0142: "" LATIN SMALL LETTER L WITH STROKE
   3356         /* morekeys_l */ "\u0142",
   3357         /* morekeys_g */ null,
   3358         /* single_angle_quotes */ "!text/single_raqm_laqm",
   3359         /* double_angle_quotes */ "!text/double_raqm_laqm",
   3360         // U+0159: "" LATIN SMALL LETTER R WITH CARON
   3361         /* morekeys_r */ "\u0159",
   3362         /* morekeys_k */ null,
   3363         /* morekeys_cyrillic_ie */ null,
   3364         // U+00E5: "" LATIN SMALL LETTER A WITH RING ABOVE
   3365         /* keyspec_nordic_row1_11 */ "\u00E5",
   3366         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
   3367         /* keyspec_nordic_row2_10 */ "\u00F6",
   3368         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
   3369         /* keyspec_nordic_row2_11 */ "\u00E4",
   3370         // U+00F8: "" LATIN SMALL LETTER O WITH STROKE
   3371         // U+0153: "" LATIN SMALL LIGATURE OE
   3372         /* morekeys_nordic_row2_10 */ "\u00F8,\u0153",
   3373         /* keyspec_east_slavic_row1_9 ~ */
   3374         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   3375         null, null, null, null, null, null, null, null, null, null, null,
   3376         /* ~ additional_morekeys_symbols_0 */
   3377         // U+00E6: "" LATIN SMALL LETTER AE
   3378         /* morekeys_nordic_row2_11 */ "\u00E6",
   3379     };
   3380 
   3381     /* Locale sw: Swahili */
   3382     private static final String[] TEXTS_sw = {
   3383         // This is the same as English except morekeys_g.
   3384         // U+00E0: "" LATIN SMALL LETTER A WITH GRAVE
   3385         // U+00E1: "" LATIN SMALL LETTER A WITH ACUTE
   3386         // U+00E2: "" LATIN SMALL LETTER A WITH CIRCUMFLEX
   3387         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
   3388         // U+00E6: "" LATIN SMALL LETTER AE
   3389         // U+00E3: "" LATIN SMALL LETTER A WITH TILDE
   3390         // U+00E5: "" LATIN SMALL LETTER A WITH RING ABOVE
   3391         // U+0101: "" LATIN SMALL LETTER A WITH MACRON
   3392         /* morekeys_a */ "\u00E0,\u00E1,\u00E2,\u00E4,\u00E6,\u00E3,\u00E5,\u0101",
   3393         // U+00F4: "" LATIN SMALL LETTER O WITH CIRCUMFLEX
   3394         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
   3395         // U+00F2: "" LATIN SMALL LETTER O WITH GRAVE
   3396         // U+00F3: "" LATIN SMALL LETTER O WITH ACUTE
   3397         // U+0153: "" LATIN SMALL LIGATURE OE
   3398         // U+00F8: "" LATIN SMALL LETTER O WITH STROKE
   3399         // U+014D: "" LATIN SMALL LETTER O WITH MACRON
   3400         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
   3401         /* morekeys_o */ "\u00F4,\u00F6,\u00F2,\u00F3,\u0153,\u00F8,\u014D,\u00F5",
   3402         // U+00FB: "" LATIN SMALL LETTER U WITH CIRCUMFLEX
   3403         // U+00FC: "" LATIN SMALL LETTER U WITH DIAERESIS
   3404         // U+00F9: "" LATIN SMALL LETTER U WITH GRAVE
   3405         // U+00FA: "" LATIN SMALL LETTER U WITH ACUTE
   3406         // U+016B: "" LATIN SMALL LETTER U WITH MACRON
   3407         /* morekeys_u */ "\u00FB,\u00FC,\u00F9,\u00FA,\u016B",
   3408         /* keylabel_to_alpha */ null,
   3409         // U+00E8: "" LATIN SMALL LETTER E WITH GRAVE
   3410         // U+00E9: "" LATIN SMALL LETTER E WITH ACUTE
   3411         // U+00EA: "" LATIN SMALL LETTER E WITH CIRCUMFLEX
   3412         // U+00EB: "" LATIN SMALL LETTER E WITH DIAERESIS
   3413         // U+0113: "" LATIN SMALL LETTER E WITH MACRON
   3414         /* morekeys_e */ "\u00E8,\u00E9,\u00EA,\u00EB,\u0113",
   3415         // U+00EE: "" LATIN SMALL LETTER I WITH CIRCUMFLEX
   3416         // U+00EF: "" LATIN SMALL LETTER I WITH DIAERESIS
   3417         // U+00ED: "" LATIN SMALL LETTER I WITH ACUTE
   3418         // U+012B: "" LATIN SMALL LETTER I WITH MACRON
   3419         // U+00EC: "" LATIN SMALL LETTER I WITH GRAVE
   3420         /* morekeys_i */ "\u00EE,\u00EF,\u00ED,\u012B,\u00EC",
   3421         // U+00E7: "" LATIN SMALL LETTER C WITH CEDILLA
   3422         /* morekeys_c */ "\u00E7",
   3423         /* double_quotes */ null,
   3424         // U+00F1: "" LATIN SMALL LETTER N WITH TILDE
   3425         /* morekeys_n */ "\u00F1",
   3426         /* single_quotes */ null,
   3427         // U+00DF: "" LATIN SMALL LETTER SHARP S
   3428         /* morekeys_s */ "\u00DF",
   3429         /* keyspec_currency ~ */
   3430         null, null, null, null, null, null,
   3431         /* ~ morekeys_l */
   3432         /* morekeys_g */ "g\'",
   3433     };
   3434 
   3435     /* Locale ta_IN: Tamil (India) */
   3436     private static final String[] TEXTS_ta_IN = {
   3437         /* morekeys_a ~ */
   3438         null, null, null,
   3439         /* ~ morekeys_u */
   3440         // Label for "switch to alphabetic" key.
   3441         // U+0BA4: "" TAMIL LETTER TA
   3442         // U+0BAE/U+0BBF: "" TAMIL LETTER MA/TAMIL VOWEL SIGN I
   3443         // U+0BB4/U+0BCD: "" TAMIL LETTER LLLA/TAMIL SIGN VIRAMA
   3444         /* keylabel_to_alpha */ "\u0BA4\u0BAE\u0BBF\u0BB4\u0BCD",
   3445         /* morekeys_e ~ */
   3446         null, null, null, null, null, null, null,
   3447         /* ~ morekeys_s */
   3448         // U+0BF9: "" TAMIL RUPEE SIGN
   3449         /* keyspec_currency */ "\u0BF9",
   3450     };
   3451 
   3452     /* Locale ta_LK: Tamil (Sri Lanka) */
   3453     private static final String[] TEXTS_ta_LK = {
   3454         /* morekeys_a ~ */
   3455         null, null, null,
   3456         /* ~ morekeys_u */
   3457         // Label for "switch to alphabetic" key.
   3458         // U+0BA4: "" TAMIL LETTER TA
   3459         // U+0BAE/U+0BBF: "" TAMIL LETTER MA/TAMIL VOWEL SIGN I
   3460         // U+0BB4/U+0BCD: "" TAMIL LETTER LLLA/TAMIL SIGN VIRAMA
   3461         /* keylabel_to_alpha */ "\u0BA4\u0BAE\u0BBF\u0BB4\u0BCD",
   3462         /* morekeys_e ~ */
   3463         null, null, null, null, null, null, null,
   3464         /* ~ morekeys_s */
   3465         // U+0DBB/U+0DD4: "" SINHALA LETTER RAYANNA/SINHALA VOWEL SIGN KETTI PAA-PILLA
   3466         /* keyspec_currency */ "\u0DBB\u0DD4",
   3467     };
   3468 
   3469     /* Locale ta_SG: Tamil (Singapore) */
   3470     private static final String[] TEXTS_ta_SG = {
   3471         /* morekeys_a ~ */
   3472         null, null, null,
   3473         /* ~ morekeys_u */
   3474         // Label for "switch to alphabetic" key.
   3475         // U+0BA4: "" TAMIL LETTER TA
   3476         // U+0BAE/U+0BBF: "" TAMIL LETTER MA/TAMIL VOWEL SIGN I
   3477         // U+0BB4/U+0BCD: "" TAMIL LETTER LLLA/TAMIL SIGN VIRAMA
   3478         /* keylabel_to_alpha */ "\u0BA4\u0BAE\u0BBF\u0BB4\u0BCD",
   3479     };
   3480 
   3481     /* Locale te_IN: Telugu (India) */
   3482     private static final String[] TEXTS_te_IN = {
   3483         /* morekeys_a ~ */
   3484         null, null, null,
   3485         /* ~ morekeys_u */
   3486         // Label for "switch to alphabetic" key.
   3487         // U+0C05: "" TELUGU LETTER A
   3488         // U+0C06: "" TELUGU LETTER AA
   3489         // U+0C07: "" TELUGU LETTER I
   3490         /* keylabel_to_alpha */ "\u0C05\u0C06\u0C07",
   3491         /* morekeys_e ~ */
   3492         null, null, null, null, null, null, null,
   3493         /* ~ morekeys_s */
   3494         // U+20B9: "" INDIAN RUPEE SIGN
   3495         /* keyspec_currency */ "\u20B9",
   3496     };
   3497 
   3498     /* Locale th: Thai */
   3499     private static final String[] TEXTS_th = {
   3500         /* morekeys_a ~ */
   3501         null, null, null,
   3502         /* ~ morekeys_u */
   3503         // Label for "switch to alphabetic" key.
   3504         // U+0E01: "" THAI CHARACTER KO KAI
   3505         // U+0E02: "" THAI CHARACTER KHO KHAI
   3506         // U+0E04: "" THAI CHARACTER KHO KHWAI
   3507         /* keylabel_to_alpha */ "\u0E01\u0E02\u0E04",
   3508         /* morekeys_e ~ */
   3509         null, null, null, null, null, null, null,
   3510         /* ~ morekeys_s */
   3511         // U+0E3F: "" THAI CURRENCY SYMBOL BAHT
   3512         /* keyspec_currency */ "\u0E3F",
   3513     };
   3514 
   3515     /* Locale tl: Tagalog */
   3516     private static final String[] TEXTS_tl = {
   3517         // U+00E1: "" LATIN SMALL LETTER A WITH ACUTE
   3518         // U+00E0: "" LATIN SMALL LETTER A WITH GRAVE
   3519         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
   3520         // U+00E2: "" LATIN SMALL LETTER A WITH CIRCUMFLEX
   3521         // U+00E3: "" LATIN SMALL LETTER A WITH TILDE
   3522         // U+00E5: "" LATIN SMALL LETTER A WITH RING ABOVE
   3523         // U+0105: "" LATIN SMALL LETTER A WITH OGONEK
   3524         // U+00E6: "" LATIN SMALL LETTER AE
   3525         // U+0101: "" LATIN SMALL LETTER A WITH MACRON
   3526         // U+00AA: "" FEMININE ORDINAL INDICATOR
   3527         /* morekeys_a */ "\u00E1,\u00E0,\u00E4,\u00E2,\u00E3,\u00E5,\u0105,\u00E6,\u0101,\u00AA",
   3528         // U+00F3: "" LATIN SMALL LETTER O WITH ACUTE
   3529         // U+00F2: "" LATIN SMALL LETTER O WITH GRAVE
   3530         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
   3531         // U+00F4: "" LATIN SMALL LETTER O WITH CIRCUMFLEX
   3532         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
   3533         // U+00F8: "" LATIN SMALL LETTER O WITH STROKE
   3534         // U+0153: "" LATIN SMALL LIGATURE OE
   3535         // U+014D: "" LATIN SMALL LETTER O WITH MACRON
   3536         // U+00BA: "" MASCULINE ORDINAL INDICATOR
   3537         /* morekeys_o */ "\u00F3,\u00F2,\u00F6,\u00F4,\u00F5,\u00F8,\u0153,\u014D,\u00BA",
   3538         // U+00FA: "" LATIN SMALL LETTER U WITH ACUTE
   3539         // U+00FC: "" LATIN SMALL LETTER U WITH DIAERESIS
   3540         // U+00F9: "" LATIN SMALL LETTER U WITH GRAVE
   3541         // U+00FB: "" LATIN SMALL LETTER U WITH CIRCUMFLEX
   3542         // U+016B: "" LATIN SMALL LETTER U WITH MACRON
   3543         /* morekeys_u */ "\u00FA,\u00FC,\u00F9,\u00FB,\u016B",
   3544         /* keylabel_to_alpha */ null,
   3545         // U+00E9: "" LATIN SMALL LETTER E WITH ACUTE
   3546         // U+00E8: "" LATIN SMALL LETTER E WITH GRAVE
   3547         // U+00EB: "" LATIN SMALL LETTER E WITH DIAERESIS
   3548         // U+00EA: "" LATIN SMALL LETTER E WITH CIRCUMFLEX
   3549         // U+0119: "" LATIN SMALL LETTER E WITH OGONEK
   3550         // U+0117: "" LATIN SMALL LETTER E WITH DOT ABOVE
   3551         // U+0113: "" LATIN SMALL LETTER E WITH MACRON
   3552         /* morekeys_e */ "\u00E9,\u00E8,\u00EB,\u00EA,\u0119,\u0117,\u0113",
   3553         // U+00ED: "" LATIN SMALL LETTER I WITH ACUTE
   3554         // U+00EF: "" LATIN SMALL LETTER I WITH DIAERESIS
   3555         // U+00EC: "" LATIN SMALL LETTER I WITH GRAVE
   3556         // U+00EE: "" LATIN SMALL LETTER I WITH CIRCUMFLEX
   3557         // U+012F: "" LATIN SMALL LETTER I WITH OGONEK
   3558         // U+012B: "" LATIN SMALL LETTER I WITH MACRON
   3559         /* morekeys_i */ "\u00ED,\u00EF,\u00EC,\u00EE,\u012F,\u012B",
   3560         // U+00E7: "" LATIN SMALL LETTER C WITH CEDILLA
   3561         // U+0107: "" LATIN SMALL LETTER C WITH ACUTE
   3562         // U+010D: "" LATIN SMALL LETTER C WITH CARON
   3563         /* morekeys_c */ "\u00E7,\u0107,\u010D",
   3564         /* double_quotes */ null,
   3565         // U+00F1: "" LATIN SMALL LETTER N WITH TILDE
   3566         // U+0144: "" LATIN SMALL LETTER N WITH ACUTE
   3567         /* morekeys_n */ "\u00F1,\u0144",
   3568     };
   3569 
   3570     /* Locale tr: Turkish */
   3571     private static final String[] TEXTS_tr = {
   3572         // U+00E2: "" LATIN SMALL LETTER A WITH CIRCUMFLEX
   3573         /* morekeys_a */ "\u00E2",
   3574         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
   3575         // U+00F4: "" LATIN SMALL LETTER O WITH CIRCUMFLEX
   3576         // U+0153: "" LATIN SMALL LIGATURE OE
   3577         // U+00F2: "" LATIN SMALL LETTER O WITH GRAVE
   3578         // U+00F3: "" LATIN SMALL LETTER O WITH ACUTE
   3579         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
   3580         // U+00F8: "" LATIN SMALL LETTER O WITH STROKE
   3581         // U+014D: "" LATIN SMALL LETTER O WITH MACRON
   3582         /* morekeys_o */ "\u00F6,\u00F4,\u0153,\u00F2,\u00F3,\u00F5,\u00F8,\u014D",
   3583         // U+00FC: "" LATIN SMALL LETTER U WITH DIAERESIS
   3584         // U+00FB: "" LATIN SMALL LETTER U WITH CIRCUMFLEX
   3585         // U+00F9: "" LATIN SMALL LETTER U WITH GRAVE
   3586         // U+00FA: "" LATIN SMALL LETTER U WITH ACUTE
   3587         // U+016B: "" LATIN SMALL LETTER U WITH MACRON
   3588         /* morekeys_u */ "\u00FC,\u00FB,\u00F9,\u00FA,\u016B",
   3589         /* keylabel_to_alpha */ null,
   3590         /* morekeys_e */ null,
   3591         // U+0131: "" LATIN SMALL LETTER DOTLESS I
   3592         // U+00EE: "" LATIN SMALL LETTER I WITH CIRCUMFLEX
   3593         // U+00EF: "" LATIN SMALL LETTER I WITH DIAERESIS
   3594         // U+00EC: "" LATIN SMALL LETTER I WITH GRAVE
   3595         // U+00ED: "" LATIN SMALL LETTER I WITH ACUTE
   3596         // U+012F: "" LATIN SMALL LETTER I WITH OGONEK
   3597         // U+012B: "" LATIN SMALL LETTER I WITH MACRON
   3598         /* morekeys_i */ "\u0131,\u00EE,\u00EF,\u00EC,\u00ED,\u012F,\u012B",
   3599         // U+00E7: "" LATIN SMALL LETTER C WITH CEDILLA
   3600         // U+0107: "" LATIN SMALL LETTER C WITH ACUTE
   3601         // U+010D: "" LATIN SMALL LETTER C WITH CARON
   3602         /* morekeys_c */ "\u00E7,\u0107,\u010D",
   3603         /* double_quotes ~ */
   3604         null, null, null,
   3605         /* ~ single_quotes */
   3606         // U+015F: "" LATIN SMALL LETTER S WITH CEDILLA
   3607         // U+00DF: "" LATIN SMALL LETTER SHARP S
   3608         // U+015B: "" LATIN SMALL LETTER S WITH ACUTE
   3609         // U+0161: "" LATIN SMALL LETTER S WITH CARON
   3610         /* morekeys_s */ "\u015F,\u00DF,\u015B,\u0161",
   3611         /* keyspec_currency ~ */
   3612         null, null, null, null, null, null,
   3613         /* ~ morekeys_l */
   3614         // U+011F: "" LATIN SMALL LETTER G WITH BREVE
   3615         /* morekeys_g */ "\u011F",
   3616     };
   3617 
   3618     /* Locale uk: Ukrainian */
   3619     private static final String[] TEXTS_uk = {
   3620         /* morekeys_a ~ */
   3621         null, null, null,
   3622         /* ~ morekeys_u */
   3623         // Label for "switch to alphabetic" key.
   3624         // U+0410: "" CYRILLIC CAPITAL LETTER A
   3625         // U+0411: "" CYRILLIC CAPITAL LETTER BE
   3626         // U+0412: "" CYRILLIC CAPITAL LETTER VE
   3627         /* keylabel_to_alpha */ "\u0410\u0411\u0412",
   3628         /* morekeys_e ~ */
   3629         null, null, null,
   3630         /* ~ morekeys_c */
   3631         /* double_quotes */ "!text/double_9qm_lqm",
   3632         /* morekeys_n */ null,
   3633         /* single_quotes */ "!text/single_9qm_lqm",
   3634         /* morekeys_s */ null,
   3635         // U+20B4: "" HRYVNIA SIGN
   3636         /* keyspec_currency */ "\u20B4",
   3637         /* morekeys_y ~ */
   3638         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   3639         /* ~ morekeys_nordic_row2_10 */
   3640         // U+0449: "" CYRILLIC SMALL LETTER SHCHA
   3641         /* keyspec_east_slavic_row1_9 */ "\u0449",
   3642         // U+0456: "" CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
   3643         /* keyspec_east_slavic_row2_2 */ "\u0456",
   3644         // U+0454: "" CYRILLIC SMALL LETTER UKRAINIAN IE
   3645         /* keyspec_east_slavic_row2_11 */ "\u0454",
   3646         // U+0438: "" CYRILLIC SMALL LETTER I
   3647         /* keyspec_east_slavic_row3_5 */ "\u0438",
   3648         // U+044A: "" CYRILLIC SMALL LETTER HARD SIGN
   3649         /* morekeys_cyrillic_soft_sign */ "\u044A",
   3650         /* keyspec_symbols_1 ~ */
   3651         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   3652         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   3653         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   3654         null, null, null, null, null, null, null,
   3655         /* ~ morekeys_w */
   3656         // U+0457: "" CYRILLIC SMALL LETTER YI
   3657         /* morekeys_east_slavic_row2_2 */ "\u0457",
   3658         /* morekeys_cyrillic_u */ null,
   3659         /* morekeys_cyrillic_en */ null,
   3660         // U+0491: "" CYRILLIC SMALL LETTER GHE WITH UPTURN
   3661         /* morekeys_cyrillic_ghe */ "\u0491",
   3662     };
   3663 
   3664     /* Locale vi: Vietnamese */
   3665     private static final String[] TEXTS_vi = {
   3666         // U+00E0: "" LATIN SMALL LETTER A WITH GRAVE
   3667         // U+00E1: "" LATIN SMALL LETTER A WITH ACUTE
   3668         // U+1EA3: "" LATIN SMALL LETTER A WITH HOOK ABOVE
   3669         // U+00E3: "" LATIN SMALL LETTER A WITH TILDE
   3670         // U+1EA1: "" LATIN SMALL LETTER A WITH DOT BELOW
   3671         // U+0103: "" LATIN SMALL LETTER A WITH BREVE
   3672         // U+1EB1: "" LATIN SMALL LETTER A WITH BREVE AND GRAVE
   3673         // U+1EAF: "" LATIN SMALL LETTER A WITH BREVE AND ACUTE
   3674         // U+1EB3: "" LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
   3675         // U+1EB5: "" LATIN SMALL LETTER A WITH BREVE AND TILDE
   3676         // U+1EB7: "" LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
   3677         // U+00E2: "" LATIN SMALL LETTER A WITH CIRCUMFLEX
   3678         // U+1EA7: "" LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
   3679         // U+1EA5: "" LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
   3680         // U+1EA9: "" LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
   3681         // U+1EAB: "" LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
   3682         // U+1EAD: "" LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
   3683         /* morekeys_a */ "\u00E0,\u00E1,\u1EA3,\u00E3,\u1EA1,\u0103,\u1EB1,\u1EAF,\u1EB3,\u1EB5,\u1EB7,\u00E2,\u1EA7,\u1EA5,\u1EA9,\u1EAB,\u1EAD",
   3684         // U+00F2: "" LATIN SMALL LETTER O WITH GRAVE
   3685         // U+00F3: "" LATIN SMALL LETTER O WITH ACUTE
   3686         // U+1ECF: "" LATIN SMALL LETTER O WITH HOOK ABOVE
   3687         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
   3688         // U+1ECD: "" LATIN SMALL LETTER O WITH DOT BELOW
   3689         // U+00F4: "" LATIN SMALL LETTER O WITH CIRCUMFLEX
   3690         // U+1ED3: "" LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
   3691         // U+1ED1: "" LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
   3692         // U+1ED5: "" LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
   3693         // U+1ED7: "" LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
   3694         // U+1ED9: "" LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
   3695         // U+01A1: "" LATIN SMALL LETTER O WITH HORN
   3696         // U+1EDD: "" LATIN SMALL LETTER O WITH HORN AND GRAVE
   3697         // U+1EDB: "" LATIN SMALL LETTER O WITH HORN AND ACUTE
   3698         // U+1EDF: "" LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
   3699         // U+1EE1: "" LATIN SMALL LETTER O WITH HORN AND TILDE
   3700         // U+1EE3: "" LATIN SMALL LETTER O WITH HORN AND DOT BELOW
   3701         /* morekeys_o */ "\u00F2,\u00F3,\u1ECF,\u00F5,\u1ECD,\u00F4,\u1ED3,\u1ED1,\u1ED5,\u1ED7,\u1ED9,\u01A1,\u1EDD,\u1EDB,\u1EDF,\u1EE1,\u1EE3",
   3702         // U+00F9: "" LATIN SMALL LETTER U WITH GRAVE
   3703         // U+00FA: "" LATIN SMALL LETTER U WITH ACUTE
   3704         // U+1EE7: "" LATIN SMALL LETTER U WITH HOOK ABOVE
   3705         // U+0169: "" LATIN SMALL LETTER U WITH TILDE
   3706         // U+1EE5: "" LATIN SMALL LETTER U WITH DOT BELOW
   3707         // U+01B0: "" LATIN SMALL LETTER U WITH HORN
   3708         // U+1EEB: "" LATIN SMALL LETTER U WITH HORN AND GRAVE
   3709         // U+1EE9: "" LATIN SMALL LETTER U WITH HORN AND ACUTE
   3710         // U+1EED: "" LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
   3711         // U+1EEF: "" LATIN SMALL LETTER U WITH HORN AND TILDE
   3712         // U+1EF1: "" LATIN SMALL LETTER U WITH HORN AND DOT BELOW
   3713         /* morekeys_u */ "\u00F9,\u00FA,\u1EE7,\u0169,\u1EE5,\u01B0,\u1EEB,\u1EE9,\u1EED,\u1EEF,\u1EF1",
   3714         /* keylabel_to_alpha */ null,
   3715         // U+00E8: "" LATIN SMALL LETTER E WITH GRAVE
   3716         // U+00E9: "" LATIN SMALL LETTER E WITH ACUTE
   3717         // U+1EBB: "" LATIN SMALL LETTER E WITH HOOK ABOVE
   3718         // U+1EBD: "" LATIN SMALL LETTER E WITH TILDE
   3719         // U+1EB9: "" LATIN SMALL LETTER E WITH DOT BELOW
   3720         // U+00EA: "" LATIN SMALL LETTER E WITH CIRCUMFLEX
   3721         // U+1EC1: "" LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
   3722         // U+1EBF: "" LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
   3723         // U+1EC3: "" LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
   3724         // U+1EC5: "" LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
   3725         // U+1EC7: "" LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
   3726         /* morekeys_e */ "\u00E8,\u00E9,\u1EBB,\u1EBD,\u1EB9,\u00EA,\u1EC1,\u1EBF,\u1EC3,\u1EC5,\u1EC7",
   3727         // U+00EC: "" LATIN SMALL LETTER I WITH GRAVE
   3728         // U+00ED: "" LATIN SMALL LETTER I WITH ACUTE
   3729         // U+1EC9: "" LATIN SMALL LETTER I WITH HOOK ABOVE
   3730         // U+0129: "" LATIN SMALL LETTER I WITH TILDE
   3731         // U+1ECB: "" LATIN SMALL LETTER I WITH DOT BELOW
   3732         /* morekeys_i */ "\u00EC,\u00ED,\u1EC9,\u0129,\u1ECB",
   3733         /* morekeys_c ~ */
   3734         null, null, null, null, null,
   3735         /* ~ morekeys_s */
   3736         // U+20AB: "" DONG SIGN
   3737         /* keyspec_currency */ "\u20AB",
   3738         // U+1EF3: "" LATIN SMALL LETTER Y WITH GRAVE
   3739         // U+00FD: "" LATIN SMALL LETTER Y WITH ACUTE
   3740         // U+1EF7: "" LATIN SMALL LETTER Y WITH HOOK ABOVE
   3741         // U+1EF9: "" LATIN SMALL LETTER Y WITH TILDE
   3742         // U+1EF5: "" LATIN SMALL LETTER Y WITH DOT BELOW
   3743         /* morekeys_y */ "\u1EF3,\u00FD,\u1EF7,\u1EF9,\u1EF5",
   3744         // U+0111: "" LATIN SMALL LETTER D WITH STROKE
   3745         /* morekeys_d */ "\u0111",
   3746     };
   3747 
   3748     /* Locale zu: Zulu */
   3749     private static final String[] TEXTS_zu = {
   3750         // This is the same as English
   3751         // U+00E0: "" LATIN SMALL LETTER A WITH GRAVE
   3752         // U+00E1: "" LATIN SMALL LETTER A WITH ACUTE
   3753         // U+00E2: "" LATIN SMALL LETTER A WITH CIRCUMFLEX
   3754         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
   3755         // U+00E6: "" LATIN SMALL LETTER AE
   3756         // U+00E3: "" LATIN SMALL LETTER A WITH TILDE
   3757         // U+00E5: "" LATIN SMALL LETTER A WITH RING ABOVE
   3758         // U+0101: "" LATIN SMALL LETTER A WITH MACRON
   3759         /* morekeys_a */ "\u00E0,\u00E1,\u00E2,\u00E4,\u00E6,\u00E3,\u00E5,\u0101",
   3760         // U+00F3: "" LATIN SMALL LETTER O WITH ACUTE
   3761         // U+00F4: "" LATIN SMALL LETTER O WITH CIRCUMFLEX
   3762         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
   3763         // U+00F2: "" LATIN SMALL LETTER O WITH GRAVE
   3764         // U+0153: "" LATIN SMALL LIGATURE OE
   3765         // U+00F8: "" LATIN SMALL LETTER O WITH STROKE
   3766         // U+014D: "" LATIN SMALL LETTER O WITH MACRON
   3767         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
   3768         /* morekeys_o */ "\u00F3,\u00F4,\u00F6,\u00F2,\u0153,\u00F8,\u014D,\u00F5",
   3769         // U+00FA: "" LATIN SMALL LETTER U WITH ACUTE
   3770         // U+00FB: "" LATIN SMALL LETTER U WITH CIRCUMFLEX
   3771         // U+00FC: "" LATIN SMALL LETTER U WITH DIAERESIS
   3772         // U+00F9: "" LATIN SMALL LETTER U WITH GRAVE
   3773         // U+016B: "" LATIN SMALL LETTER U WITH MACRON
   3774         /* morekeys_u */ "\u00FA,\u00FB,\u00FC,\u00F9,\u016B",
   3775         /* keylabel_to_alpha */ null,
   3776         // U+00E9: "" LATIN SMALL LETTER E WITH ACUTE
   3777         // U+00E8: "" LATIN SMALL LETTER E WITH GRAVE
   3778         // U+00EA: "" LATIN SMALL LETTER E WITH CIRCUMFLEX
   3779         // U+00EB: "" LATIN SMALL LETTER E WITH DIAERESIS
   3780         // U+0113: "" LATIN SMALL LETTER E WITH MACRON
   3781         /* morekeys_e */ "\u00E9,\u00E8,\u00EA,\u00EB,\u0113",
   3782         // U+00ED: "" LATIN SMALL LETTER I WITH ACUTE
   3783         // U+00EE: "" LATIN SMALL LETTER I WITH CIRCUMFLEX
   3784         // U+00EF: "" LATIN SMALL LETTER I WITH DIAERESIS
   3785         // U+012B: "" LATIN SMALL LETTER I WITH MACRON
   3786         // U+00EC: "" LATIN SMALL LETTER I WITH GRAVE
   3787         /* morekeys_i */ "\u00ED,\u00EE,\u00EF,\u012B,\u00EC",
   3788         // U+00E7: "" LATIN SMALL LETTER C WITH CEDILLA
   3789         /* morekeys_c */ "\u00E7",
   3790         /* double_quotes */ null,
   3791         // U+00F1: "" LATIN SMALL LETTER N WITH TILDE
   3792         /* morekeys_n */ "\u00F1",
   3793         /* single_quotes */ null,
   3794         // U+00DF: "" LATIN SMALL LETTER SHARP S
   3795         /* morekeys_s */ "\u00DF",
   3796     };
   3797 
   3798     /* Locale zz: Alphabet */
   3799     private static final String[] TEXTS_zz = {
   3800         // U+00E0: "" LATIN SMALL LETTER A WITH GRAVE
   3801         // U+00E1: "" LATIN SMALL LETTER A WITH ACUTE
   3802         // U+00E2: "" LATIN SMALL LETTER A WITH CIRCUMFLEX
   3803         // U+00E3: "" LATIN SMALL LETTER A WITH TILDE
   3804         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
   3805         // U+00E5: "" LATIN SMALL LETTER A WITH RING ABOVE
   3806         // U+00E6: "" LATIN SMALL LETTER AE
   3807         // U+0101: "" LATIN SMALL LETTER A WITH MACRON
   3808         // U+0103: "" LATIN SMALL LETTER A WITH BREVE
   3809         // U+0105: "" LATIN SMALL LETTER A WITH OGONEK
   3810         // U+00AA: "" FEMININE ORDINAL INDICATOR
   3811         /* morekeys_a */ "\u00E0,\u00E1,\u00E2,\u00E3,\u00E4,\u00E5,\u00E6,\u0101,\u0103,\u0105,\u00AA",
   3812         // U+00F2: "" LATIN SMALL LETTER O WITH GRAVE
   3813         // U+00F3: "" LATIN SMALL LETTER O WITH ACUTE
   3814         // U+00F4: "" LATIN SMALL LETTER O WITH CIRCUMFLEX
   3815         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
   3816         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
   3817         // U+00F8: "" LATIN SMALL LETTER O WITH STROKE
   3818         // U+014D: "" LATIN SMALL LETTER O WITH MACRON
   3819         // U+014F: "" LATIN SMALL LETTER O WITH BREVE
   3820         // U+0151: "" LATIN SMALL LETTER O WITH DOUBLE ACUTE
   3821         // U+0153: "" LATIN SMALL LIGATURE OE
   3822         // U+00BA: "" MASCULINE ORDINAL INDICATOR
   3823         /* morekeys_o */ "\u00F2,\u00F3,\u00F4,\u00F5,\u00F6,\u00F8,\u014D,\u014F,\u0151,\u0153,\u00BA",
   3824         // U+00F9: "" LATIN SMALL LETTER U WITH GRAVE
   3825         // U+00FA: "" LATIN SMALL LETTER U WITH ACUTE
   3826         // U+00FB: "" LATIN SMALL LETTER U WITH CIRCUMFLEX
   3827         // U+00FC: "" LATIN SMALL LETTER U WITH DIAERESIS
   3828         // U+0169: "" LATIN SMALL LETTER U WITH TILDE
   3829         // U+016B: "" LATIN SMALL LETTER U WITH MACRON
   3830         // U+016D: "" LATIN SMALL LETTER U WITH BREVE
   3831         // U+016F: "" LATIN SMALL LETTER U WITH RING ABOVE
   3832         // U+0171: "" LATIN SMALL LETTER U WITH DOUBLE ACUTE
   3833         // U+0173: "" LATIN SMALL LETTER U WITH OGONEK
   3834         /* morekeys_u */ "\u00F9,\u00FA,\u00FB,\u00FC,\u0169,\u016B,\u016D,\u016F,\u0171,\u0173",
   3835         /* keylabel_to_alpha */ null,
   3836         // U+00E8: "" LATIN SMALL LETTER E WITH GRAVE
   3837         // U+00E9: "" LATIN SMALL LETTER E WITH ACUTE
   3838         // U+00EA: "" LATIN SMALL LETTER E WITH CIRCUMFLEX
   3839         // U+00EB: "" LATIN SMALL LETTER E WITH DIAERESIS
   3840         // U+0113: "" LATIN SMALL LETTER E WITH MACRON
   3841         // U+0115: "" LATIN SMALL LETTER E WITH BREVE
   3842         // U+0117: "" LATIN SMALL LETTER E WITH DOT ABOVE
   3843         // U+0119: "" LATIN SMALL LETTER E WITH OGONEK
   3844         // U+011B: "" LATIN SMALL LETTER E WITH CARON
   3845         /* morekeys_e */ "\u00E8,\u00E9,\u00EA,\u00EB,\u0113,\u0115,\u0117,\u0119,\u011B",
   3846         // U+00EC: "" LATIN SMALL LETTER I WITH GRAVE
   3847         // U+00ED: "" LATIN SMALL LETTER I WITH ACUTE
   3848         // U+00EE: "" LATIN SMALL LETTER I WITH CIRCUMFLEX
   3849         // U+00EF: "" LATIN SMALL LETTER I WITH DIAERESIS
   3850         // U+0129: "" LATIN SMALL LETTER I WITH TILDE
   3851         // U+012B: "" LATIN SMALL LETTER I WITH MACRON
   3852         // U+012D: "" LATIN SMALL LETTER I WITH BREVE
   3853         // U+012F: "" LATIN SMALL LETTER I WITH OGONEK
   3854         // U+0131: "" LATIN SMALL LETTER DOTLESS I
   3855         // U+0133: "" LATIN SMALL LIGATURE IJ
   3856         /* morekeys_i */ "\u00EC,\u00ED,\u00EE,\u00EF,\u0129,\u012B,\u012D,\u012F,\u0131,\u0133",
   3857         // U+00E7: "" LATIN SMALL LETTER C WITH CEDILLA
   3858         // U+0107: "" LATIN SMALL LETTER C WITH ACUTE
   3859         // U+0109: "" LATIN SMALL LETTER C WITH CIRCUMFLEX
   3860         // U+010B: "" LATIN SMALL LETTER C WITH DOT ABOVE
   3861         // U+010D: "" LATIN SMALL LETTER C WITH CARON
   3862         /* morekeys_c */ "\u00E7,\u0107,\u0109,\u010B,\u010D",
   3863         /* double_quotes */ null,
   3864         // U+00F1: "" LATIN SMALL LETTER N WITH TILDE
   3865         // U+0144: "" LATIN SMALL LETTER N WITH ACUTE
   3866         // U+0146: "" LATIN SMALL LETTER N WITH CEDILLA
   3867         // U+0148: "" LATIN SMALL LETTER N WITH CARON
   3868         // U+0149: "" LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
   3869         // U+014B: "" LATIN SMALL LETTER ENG
   3870         /* morekeys_n */ "\u00F1,\u0144,\u0146,\u0148,\u0149,\u014B",
   3871         /* single_quotes */ null,
   3872         // U+00DF: "" LATIN SMALL LETTER SHARP S
   3873         // U+015B: "" LATIN SMALL LETTER S WITH ACUTE
   3874         // U+015D: "" LATIN SMALL LETTER S WITH CIRCUMFLEX
   3875         // U+015F: "" LATIN SMALL LETTER S WITH CEDILLA
   3876         // U+0161: "" LATIN SMALL LETTER S WITH CARON
   3877         // U+017F: "" LATIN SMALL LETTER LONG S
   3878         /* morekeys_s */ "\u00DF,\u015B,\u015D,\u015F,\u0161,\u017F",
   3879         /* keyspec_currency */ null,
   3880         // U+00FD: "" LATIN SMALL LETTER Y WITH ACUTE
   3881         // U+0177: "" LATIN SMALL LETTER Y WITH CIRCUMFLEX
   3882         // U+00FF: "" LATIN SMALL LETTER Y WITH DIAERESIS
   3883         // U+0133: "" LATIN SMALL LIGATURE IJ
   3884         /* morekeys_y */ "\u00FD,\u0177,\u00FF,\u0133",
   3885         // U+010F: "" LATIN SMALL LETTER D WITH CARON
   3886         // U+0111: "" LATIN SMALL LETTER D WITH STROKE
   3887         // U+00F0: "" LATIN SMALL LETTER ETH
   3888         /* morekeys_d */ "\u010F,\u0111,\u00F0",
   3889         // U+017A: "" LATIN SMALL LETTER Z WITH ACUTE
   3890         // U+017C: "" LATIN SMALL LETTER Z WITH DOT ABOVE
   3891         // U+017E: "" LATIN SMALL LETTER Z WITH CARON
   3892         /* morekeys_z */ "\u017A,\u017C,\u017E",
   3893         // U+00FE: "" LATIN SMALL LETTER THORN
   3894         // U+0163: "" LATIN SMALL LETTER T WITH CEDILLA
   3895         // U+0165: "" LATIN SMALL LETTER T WITH CARON
   3896         // U+0167: "" LATIN SMALL LETTER T WITH STROKE
   3897         /* morekeys_t */ "\u00FE,\u0163,\u0165,\u0167",
   3898         // U+013A: "" LATIN SMALL LETTER L WITH ACUTE
   3899         // U+013C: "" LATIN SMALL LETTER L WITH CEDILLA
   3900         // U+013E: "" LATIN SMALL LETTER L WITH CARON
   3901         // U+0140: "" LATIN SMALL LETTER L WITH MIDDLE DOT
   3902         // U+0142: "" LATIN SMALL LETTER L WITH STROKE
   3903         /* morekeys_l */ "\u013A,\u013C,\u013E,\u0140,\u0142",
   3904         // U+011D: "" LATIN SMALL LETTER G WITH CIRCUMFLEX
   3905         // U+011F: "" LATIN SMALL LETTER G WITH BREVE
   3906         // U+0121: "" LATIN SMALL LETTER G WITH DOT ABOVE
   3907         // U+0123: "" LATIN SMALL LETTER G WITH CEDILLA
   3908         /* morekeys_g */ "\u011D,\u011F,\u0121,\u0123",
   3909         /* single_angle_quotes */ null,
   3910         /* double_angle_quotes */ null,
   3911         // U+0155: "" LATIN SMALL LETTER R WITH ACUTE
   3912         // U+0157: "" LATIN SMALL LETTER R WITH CEDILLA
   3913         // U+0159: "" LATIN SMALL LETTER R WITH CARON
   3914         /* morekeys_r */ "\u0155,\u0157,\u0159",
   3915         // U+0137: "" LATIN SMALL LETTER K WITH CEDILLA
   3916         // U+0138: "" LATIN SMALL LETTER KRA
   3917         /* morekeys_k */ "\u0137,\u0138",
   3918         /* morekeys_cyrillic_ie ~ */
   3919         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   3920         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   3921         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   3922         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   3923         /* ~ morekeys_question */
   3924         // U+0125: "" LATIN SMALL LETTER H WITH CIRCUMFLEX
   3925         /* morekeys_h */ "\u0125",
   3926         // U+0175: "" LATIN SMALL LETTER W WITH CIRCUMFLEX
   3927         /* morekeys_w */ "\u0175",
   3928         /* morekeys_east_slavic_row2_2 ~ */
   3929         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   3930         null, null, null, null, null, null, null, null, null, null, null, null,
   3931         /* ~ morekeys_v */
   3932         // U+0135: "" LATIN SMALL LETTER J WITH CIRCUMFLEX
   3933         /* morekeys_j */ "\u0135",
   3934     };
   3935 
   3936     private static final Object[] LOCALES_AND_TEXTS = {
   3937     // "locale", TEXT_ARRAY,  /* numberOfNonNullText/lengthOf_TEXT_ARRAY localeName */
   3938         "DEFAULT", TEXTS_DEFAULT, /* 168/168 DEFAULT */
   3939         "af"     , TEXTS_af,    /*   7/ 13 Afrikaans */
   3940         "ar"     , TEXTS_ar,    /*  55/110 Arabic */
   3941         "az_AZ"  , TEXTS_az_AZ, /*   8/ 18 Azerbaijani (Azerbaijan) */
   3942         "be_BY"  , TEXTS_be_BY, /*   9/ 32 Belarusian (Belarus) */
   3943         "bg"     , TEXTS_bg,    /*   2/  8 Bulgarian */
   3944         "bn_IN"  , TEXTS_bn_IN, /*   2/ 12 Bengali (India) */
   3945         "ca"     , TEXTS_ca,    /*  11/ 96 Catalan */
   3946         "cs"     , TEXTS_cs,    /*  17/ 21 Czech */
   3947         "da"     , TEXTS_da,    /*  19/ 54 Danish */
   3948         "de"     , TEXTS_de,    /*  16/ 62 German */
   3949         "el"     , TEXTS_el,    /*   1/  4 Greek */
   3950         "en"     , TEXTS_en,    /*   8/ 11 English */
   3951         "eo"     , TEXTS_eo,    /*  26/118 Esperanto */
   3952         "es"     , TEXTS_es,    /*   8/ 55 Spanish */
   3953         "et_EE"  , TEXTS_et_EE, /*  22/ 27 Estonian (Estonia) */
   3954         "eu_ES"  , TEXTS_eu_ES, /*   7/  9 Basque (Spain) */
   3955         "fa"     , TEXTS_fa,    /*  58/125 Persian */
   3956         "fi"     , TEXTS_fi,    /*  10/ 54 Finnish */
   3957         "fr"     , TEXTS_fr,    /*  13/ 62 French */
   3958         "gl_ES"  , TEXTS_gl_ES, /*   7/  9 Gallegan (Spain) */
   3959         "hi"     , TEXTS_hi,    /*  23/ 53 Hindi */
   3960         "hr"     , TEXTS_hr,    /*   9/ 20 Croatian */
   3961         "hu"     , TEXTS_hu,    /*   9/ 20 Hungarian */
   3962         "hy_AM"  , TEXTS_hy_AM, /*   9/126 Armenian (Armenia) */
   3963         "is"     , TEXTS_is,    /*  10/ 16 Icelandic */
   3964         "it"     , TEXTS_it,    /*  11/ 62 Italian */
   3965         "iw"     , TEXTS_iw,    /*  20/123 Hebrew */
   3966         "ka_GE"  , TEXTS_ka_GE, /*   3/ 10 Georgian (Georgia) */
   3967         "kk"     , TEXTS_kk,    /*  15/121 Kazakh */
   3968         "km_KH"  , TEXTS_km_KH, /*   2/122 Khmer (Cambodia) */
   3969         "kn_IN"  , TEXTS_kn_IN, /*   2/ 12 Kannada (India) */
   3970         "ky"     , TEXTS_ky,    /*  10/ 89 Kirghiz */
   3971         "lo_LA"  , TEXTS_lo_LA, /*   2/ 12 Lao (Laos) */
   3972         "lt"     , TEXTS_lt,    /*  18/ 22 Lithuanian */
   3973         "lv"     , TEXTS_lv,    /*  18/ 22 Latvian */
   3974         "mk"     , TEXTS_mk,    /*   9/ 94 Macedonian */
   3975         "ml_IN"  , TEXTS_ml_IN, /*   2/ 12 Malayalam (India) */
   3976         "mn_MN"  , TEXTS_mn_MN, /*   2/ 12 Mongolian (Mongolia) */
   3977         "mr_IN"  , TEXTS_mr_IN, /*  23/ 53 Marathi (India) */
   3978         "my_MM"  , TEXTS_my_MM, /*   8/104 Burmese (Myanmar) */
   3979         "nb"     , TEXTS_nb,    /*  11/ 54 Norwegian Bokml */
   3980         "ne_NP"  , TEXTS_ne_NP, /*  23/ 53 Nepali (Nepal) */
   3981         "nl"     , TEXTS_nl,    /*   9/ 13 Dutch */
   3982         "pl"     , TEXTS_pl,    /*  10/ 17 Polish */
   3983         "pt"     , TEXTS_pt,    /*   6/  7 Portuguese */
   3984         "rm"     , TEXTS_rm,    /*   1/  2 Raeto-Romance */
   3985         "ro"     , TEXTS_ro,    /*   6/ 16 Romanian */
   3986         "ru"     , TEXTS_ru,    /*   9/ 32 Russian */
   3987         "si_LK"  , TEXTS_si_LK, /*   2/ 12 Sinhalese (Sri Lanka) */
   3988         "sk"     , TEXTS_sk,    /*  20/ 22 Slovak */
   3989         "sl"     , TEXTS_sl,    /*   8/ 20 Slovenian */
   3990         "sr"     , TEXTS_sr,    /*  11/ 94 Serbian */
   3991         "sv"     , TEXTS_sv,    /*  21/ 54 Swedish */
   3992         "sw"     , TEXTS_sw,    /*   9/ 18 Swahili */
   3993         "ta_IN"  , TEXTS_ta_IN, /*   2/ 12 Tamil (India) */
   3994         "ta_LK"  , TEXTS_ta_LK, /*   2/ 12 Tamil (Sri Lanka) */
   3995         "ta_SG"  , TEXTS_ta_SG, /*   1/  4 Tamil (Singapore) */
   3996         "te_IN"  , TEXTS_te_IN, /*   2/ 12 Telugu (India) */
   3997         "th"     , TEXTS_th,    /*   2/ 12 Thai */
   3998         "tl"     , TEXTS_tl,    /*   7/  9 Tagalog */
   3999         "tr"     , TEXTS_tr,    /*   7/ 18 Turkish */
   4000         "uk"     , TEXTS_uk,    /*  11/ 88 Ukrainian */
   4001         "vi"     , TEXTS_vi,    /*   8/ 14 Vietnamese */
   4002         "zu"     , TEXTS_zu,    /*   8/ 11 Zulu */
   4003         "zz"     , TEXTS_zz,    /*  19/112 Alphabet */
   4004     };
   4005 
   4006     static {
   4007         for (int index = 0; index < NAMES.length; index++) {
   4008             sNameToIndexesMap.put(NAMES[index], index);
   4009         }
   4010 
   4011         for (int i = 0; i < LOCALES_AND_TEXTS.length; i += 2) {
   4012             final String locale = (String)LOCALES_AND_TEXTS[i];
   4013             final String[] textsTable = (String[])LOCALES_AND_TEXTS[i + 1];
   4014             sLocaleToTextsTableMap.put(locale, textsTable);
   4015             sTextsTableToLocaleMap.put(textsTable, locale);
   4016         }
   4017     }
   4018 }
   4019