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