Home | History | Annotate | Download | only in internal
      1 /*
      2  * Copyright (C) 2012 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 android.content.Context;
     20 import android.content.res.Resources;
     21 
     22 import com.android.inputmethod.annotations.UsedForTesting;
     23 import com.android.inputmethod.latin.CollectionUtils;
     24 
     25 import java.util.HashMap;
     26 
     27 /**
     28  * !!!!! DO NOT EDIT THIS FILE !!!!!
     29  *
     30  * This file is generated by tools/maketext. The base template file is
     31  *   tools/maketext/res/com/android/inputmethod/keyboard/internal/KeyboardTextsSet.tmpl
     32  *
     33  * This file must be updated when any text resources in keyboard layout files have been changed.
     34  * These text resources are referred as "!text/<resource_name>" in keyboard XML definitions,
     35  * and should be defined in
     36  *   tools/maketext/res/values-<locale>/donottranslate-more-keys.xml
     37  *
     38  * To update this file, please run the following commands.
     39  *   $ cd $ANDROID_BUILD_TOP
     40  *   $ mmm packages/inputmethods/LatinIME/tools/maketext
     41  *   $ maketext -java packages/inputmethods/LatinIME/java/src
     42  *
     43  * The updated source file will be generated to the following path (this file).
     44  *   packages/inputmethods/LatinIME/java/src/com/android/inputmethod/keyboard/internal/
     45  *   KeyboardTextsSet.java
     46  */
     47 public final class KeyboardTextsSet {
     48     // Language to texts map.
     49     private static final HashMap<String, String[]> sLocaleToTextsMap = CollectionUtils.newHashMap();
     50     private static final HashMap<String, Integer> sNameToIdsMap = CollectionUtils.newHashMap();
     51 
     52     private String[] mTexts;
     53     // Resource name to text map.
     54     private HashMap<String, String> mResourceNameToTextsMap = CollectionUtils.newHashMap();
     55 
     56     public void setLanguage(final String language) {
     57         mTexts = sLocaleToTextsMap.get(language);
     58         if (mTexts == null) {
     59             mTexts = LANGUAGE_DEFAULT;
     60         }
     61     }
     62 
     63     public void loadStringResources(final Context context) {
     64         final int referenceId = context.getApplicationInfo().labelRes;
     65         loadStringResourcesInternal(context, RESOURCE_NAMES, referenceId);
     66     }
     67 
     68     @UsedForTesting
     69     void loadStringResourcesInternal(final Context context, final String[] resourceNames,
     70             final int referenceId) {
     71         final Resources res = context.getResources();
     72         final String packageName = res.getResourcePackageName(referenceId);
     73         for (final String resName : resourceNames) {
     74             final int resId = res.getIdentifier(resName, "string", packageName);
     75             mResourceNameToTextsMap.put(resName, res.getString(resId));
     76         }
     77     }
     78 
     79     public String getText(final String name) {
     80         String text = mResourceNameToTextsMap.get(name);
     81         if (text != null) {
     82             return text;
     83         }
     84         final Integer id = sNameToIdsMap.get(name);
     85         if (id == null) throw new RuntimeException("Unknown label: " + name);
     86         text = (id < mTexts.length) ? mTexts[id] : null;
     87         return (text == null) ? LANGUAGE_DEFAULT[id] : text;
     88     }
     89 
     90     private static final String[] RESOURCE_NAMES = {
     91         // These texts' name should be aligned with the @string/<name> in values/strings.xml.
     92         // Labels for action.
     93         "label_go_key",
     94         // "label_search_key",
     95         "label_send_key",
     96         "label_next_key",
     97         "label_done_key",
     98         "label_previous_key",
     99         // Other labels.
    100         "label_pause_key",
    101         "label_wait_key",
    102     };
    103 
    104     private static final String[] NAMES = {
    105         /*  0 */ "more_keys_for_a",
    106         /*  1 */ "more_keys_for_e",
    107         /*  2 */ "more_keys_for_i",
    108         /*  3 */ "more_keys_for_o",
    109         /*  4 */ "more_keys_for_u",
    110         /*  5 */ "more_keys_for_s",
    111         /*  6 */ "more_keys_for_n",
    112         /*  7 */ "more_keys_for_c",
    113         /*  8 */ "more_keys_for_y",
    114         /*  9 */ "more_keys_for_d",
    115         /* 10 */ "more_keys_for_r",
    116         /* 11 */ "more_keys_for_t",
    117         /* 12 */ "more_keys_for_z",
    118         /* 13 */ "more_keys_for_k",
    119         /* 14 */ "more_keys_for_l",
    120         /* 15 */ "more_keys_for_g",
    121         /* 16 */ "more_keys_for_v",
    122         /* 17 */ "more_keys_for_h",
    123         /* 18 */ "more_keys_for_j",
    124         /* 19 */ "more_keys_for_w",
    125         /* 20 */ "keylabel_for_nordic_row1_11",
    126         /* 21 */ "keylabel_for_nordic_row2_10",
    127         /* 22 */ "keylabel_for_nordic_row2_11",
    128         /* 23 */ "more_keys_for_nordic_row2_10",
    129         /* 24 */ "more_keys_for_nordic_row2_11",
    130         /* 25 */ "keylabel_for_east_slavic_row1_9",
    131         /* 26 */ "keylabel_for_east_slavic_row1_12",
    132         /* 27 */ "keylabel_for_east_slavic_row2_1",
    133         /* 28 */ "keylabel_for_east_slavic_row2_11",
    134         /* 29 */ "keylabel_for_east_slavic_row3_5",
    135         /* 30 */ "more_keys_for_cyrillic_u",
    136         /* 31 */ "more_keys_for_cyrillic_en",
    137         /* 32 */ "more_keys_for_cyrillic_ghe",
    138         /* 33 */ "more_keys_for_east_slavic_row2_1",
    139         /* 34 */ "more_keys_for_cyrillic_o",
    140         /* 35 */ "more_keys_for_cyrillic_soft_sign",
    141         /* 36 */ "keylabel_for_south_slavic_row1_6",
    142         /* 37 */ "keylabel_for_south_slavic_row2_11",
    143         /* 38 */ "keylabel_for_south_slavic_row3_1",
    144         /* 39 */ "keylabel_for_south_slavic_row3_8",
    145         /* 40 */ "more_keys_for_cyrillic_ie",
    146         /* 41 */ "more_keys_for_cyrillic_i",
    147         /* 42 */ "label_to_alpha_key",
    148         /* 43 */ "single_quotes",
    149         /* 44 */ "double_quotes",
    150         /* 45 */ "single_angle_quotes",
    151         /* 46 */ "double_angle_quotes",
    152         /* 47 */ "more_keys_for_currency_dollar",
    153         /* 48 */ "keylabel_for_currency_generic",
    154         /* 49 */ "more_keys_for_currency_generic",
    155         /* 50 */ "more_keys_for_punctuation",
    156         /* 51 */ "more_keys_for_star",
    157         /* 52 */ "more_keys_for_bullet",
    158         /* 53 */ "more_keys_for_plus",
    159         /* 54 */ "more_keys_for_left_parenthesis",
    160         /* 55 */ "more_keys_for_right_parenthesis",
    161         /* 56 */ "more_keys_for_less_than",
    162         /* 57 */ "more_keys_for_greater_than",
    163         /* 58 */ "more_keys_for_arabic_diacritics",
    164         /* 59 */ "keyhintlabel_for_arabic_diacritics",
    165         /* 60 */ "keylabel_for_symbols_1",
    166         /* 61 */ "keylabel_for_symbols_2",
    167         /* 62 */ "keylabel_for_symbols_3",
    168         /* 63 */ "keylabel_for_symbols_4",
    169         /* 64 */ "keylabel_for_symbols_5",
    170         /* 65 */ "keylabel_for_symbols_6",
    171         /* 66 */ "keylabel_for_symbols_7",
    172         /* 67 */ "keylabel_for_symbols_8",
    173         /* 68 */ "keylabel_for_symbols_9",
    174         /* 69 */ "keylabel_for_symbols_0",
    175         /* 70 */ "label_to_symbol_key",
    176         /* 71 */ "label_to_symbol_with_microphone_key",
    177         /* 72 */ "additional_more_keys_for_symbols_1",
    178         /* 73 */ "additional_more_keys_for_symbols_2",
    179         /* 74 */ "additional_more_keys_for_symbols_3",
    180         /* 75 */ "additional_more_keys_for_symbols_4",
    181         /* 76 */ "additional_more_keys_for_symbols_5",
    182         /* 77 */ "additional_more_keys_for_symbols_6",
    183         /* 78 */ "additional_more_keys_for_symbols_7",
    184         /* 79 */ "additional_more_keys_for_symbols_8",
    185         /* 80 */ "additional_more_keys_for_symbols_9",
    186         /* 81 */ "additional_more_keys_for_symbols_0",
    187         /* 82 */ "more_keys_for_symbols_1",
    188         /* 83 */ "more_keys_for_symbols_2",
    189         /* 84 */ "more_keys_for_symbols_3",
    190         /* 85 */ "more_keys_for_symbols_4",
    191         /* 86 */ "more_keys_for_symbols_5",
    192         /* 87 */ "more_keys_for_symbols_6",
    193         /* 88 */ "more_keys_for_symbols_7",
    194         /* 89 */ "more_keys_for_symbols_8",
    195         /* 90 */ "more_keys_for_symbols_9",
    196         /* 91 */ "more_keys_for_symbols_0",
    197         /* 92 */ "keylabel_for_comma",
    198         /* 93 */ "more_keys_for_comma",
    199         /* 94 */ "keylabel_for_symbols_question",
    200         /* 95 */ "keylabel_for_symbols_semicolon",
    201         /* 96 */ "keylabel_for_symbols_percent",
    202         /* 97 */ "more_keys_for_symbols_exclamation",
    203         /* 98 */ "more_keys_for_symbols_question",
    204         /* 99 */ "more_keys_for_symbols_semicolon",
    205         /* 100 */ "more_keys_for_symbols_percent",
    206         /* 101 */ "keylabel_for_tablet_comma",
    207         /* 102 */ "keyhintlabel_for_tablet_comma",
    208         /* 103 */ "more_keys_for_tablet_comma",
    209         /* 104 */ "keyhintlabel_for_tablet_period",
    210         /* 105 */ "more_keys_for_tablet_period",
    211         /* 106 */ "keylabel_for_apostrophe",
    212         /* 107 */ "keyhintlabel_for_apostrophe",
    213         /* 108 */ "more_keys_for_apostrophe",
    214         /* 109 */ "more_keys_for_q",
    215         /* 110 */ "more_keys_for_x",
    216         /* 111 */ "keylabel_for_q",
    217         /* 112 */ "keylabel_for_w",
    218         /* 113 */ "keylabel_for_y",
    219         /* 114 */ "keylabel_for_x",
    220         /* 115 */ "keylabel_for_spanish_row2_10",
    221         /* 116 */ "more_keys_for_am_pm",
    222         /* 117 */ "settings_as_more_key",
    223         /* 118 */ "shortcut_as_more_key",
    224         /* 119 */ "action_next_as_more_key",
    225         /* 120 */ "action_previous_as_more_key",
    226         /* 121 */ "label_to_more_symbol_key",
    227         /* 122 */ "label_to_more_symbol_for_tablet_key",
    228         /* 123 */ "label_tab_key",
    229         /* 124 */ "label_to_phone_numeric_key",
    230         /* 125 */ "label_to_phone_symbols_key",
    231         /* 126 */ "label_time_am",
    232         /* 127 */ "label_time_pm",
    233         /* 128 */ "label_to_symbol_key_pcqwerty",
    234         /* 129 */ "keylabel_for_popular_domain",
    235         /* 130 */ "more_keys_for_popular_domain",
    236         /* 131 */ "more_keys_for_smiley",
    237         /* 132 */ "single_laqm_raqm",
    238         /* 133 */ "single_laqm_raqm_rtl",
    239         /* 134 */ "single_raqm_laqm",
    240         /* 135 */ "double_laqm_raqm",
    241         /* 136 */ "double_laqm_raqm_rtl",
    242         /* 137 */ "double_raqm_laqm",
    243         /* 138 */ "single_lqm_rqm",
    244         /* 139 */ "single_9qm_lqm",
    245         /* 140 */ "single_9qm_rqm",
    246         /* 141 */ "double_lqm_rqm",
    247         /* 142 */ "double_9qm_lqm",
    248         /* 143 */ "double_9qm_rqm",
    249         /* 144 */ "more_keys_for_single_quote",
    250         /* 145 */ "more_keys_for_double_quote",
    251         /* 146 */ "more_keys_for_tablet_double_quote",
    252     };
    253 
    254     private static final String EMPTY = "";
    255 
    256     /* Default texts */
    257     private static final String[] LANGUAGE_DEFAULT = {
    258         /* 0~ */
    259         EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY,
    260         EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY,
    261         EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY,
    262         EMPTY, EMPTY, EMPTY,
    263         /* ~41 */
    264         // Label for "switch to alphabetic" key.
    265         /* 42 */ "ABC",
    266         /* 43 */ "!text/single_lqm_rqm",
    267         /* 44 */ "!text/double_lqm_rqm",
    268         /* 45 */ "!text/single_laqm_raqm",
    269         /* 46 */ "!text/double_laqm_raqm",
    270         // U+00A2: "" CENT SIGN
    271         // U+00A3: "" POUND SIGN
    272         // U+20AC: "" EURO SIGN
    273         // U+00A5: "" YEN SIGN
    274         // U+20B1: "" PESO SIGN
    275         /* 47 */ "\u00A2,\u00A3,\u20AC,\u00A5,\u20B1",
    276         /* 48 */ "$",
    277         /* 49 */ "$,\u00A2,\u20AC,\u00A3,\u00A5,\u20B1",
    278         /* 50 */ "!fixedColumnOrder!8,\",\',#,-,:,!,\\,,?,@,&,\\%,+,;,/,(,)",
    279         // U+2020: "" DAGGER
    280         // U+2021: "" DOUBLE DAGGER
    281         // U+2605: "" BLACK STAR
    282         /* 51 */ "\u2020,\u2021,\u2605",
    283         // U+266A: "" EIGHTH NOTE
    284         // U+2665: "" BLACK HEART SUIT
    285         // U+2660: "" BLACK SPADE SUIT
    286         // U+2666: "" BLACK DIAMOND SUIT
    287         // U+2663: "" BLACK CLUB SUIT
    288         /* 52 */ "\u266A,\u2665,\u2660,\u2666,\u2663",
    289         // U+00B1: "" PLUS-MINUS SIGN
    290         /* 53 */ "\u00B1",
    291         // The all letters need to be mirrored are found at
    292         // http://www.unicode.org/Public/6.1.0/ucd/BidiMirroring.txt
    293         /* 54 */ "!fixedColumnOrder!3,<,{,[",
    294         /* 55 */ "!fixedColumnOrder!3,>,},]",
    295         // U+2039: "" SINGLE LEFT-POINTING ANGLE QUOTATION MARK
    296         // U+203A: "" SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
    297         // U+2264: "" LESS-THAN OR EQUAL TO
    298         // U+2265: "" GREATER-THAN EQUAL TO
    299         // U+00AB: "" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
    300         // U+00BB: "" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
    301         /* 56 */ "!fixedColumnOrder!3,\u2039,\u2264,\u00AB",
    302         /* 57 */ "!fixedColumnOrder!3,\u203A,\u2265,\u00BB",
    303         /* 58 */ EMPTY,
    304         /* 59 */ EMPTY,
    305         /* 60 */ "1",
    306         /* 61 */ "2",
    307         /* 62 */ "3",
    308         /* 63 */ "4",
    309         /* 64 */ "5",
    310         /* 65 */ "6",
    311         /* 66 */ "7",
    312         /* 67 */ "8",
    313         /* 68 */ "9",
    314         /* 69 */ "0",
    315         // Label for "switch to symbols" key.
    316         /* 70 */ "?123",
    317         // Label for "switch to symbols with microphone" key. This string shouldn't include the "mic"
    318         // part because it'll be appended by the code.
    319         /* 71 */ "123",
    320         /* 72~ */
    321         EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY,
    322         /* ~81 */
    323         // U+00B9: "" SUPERSCRIPT ONE
    324         // U+00BD: "" VULGAR FRACTION ONE HALF
    325         // U+2153: "" VULGAR FRACTION ONE THIRD
    326         // U+00BC: "" VULGAR FRACTION ONE QUARTER
    327         // U+215B: "" VULGAR FRACTION ONE EIGHTH
    328         /* 82 */ "\u00B9,\u00BD,\u2153,\u00BC,\u215B",
    329         // U+00B2: "" SUPERSCRIPT TWO
    330         // U+2154: "" VULGAR FRACTION TWO THIRDS
    331         /* 83 */ "\u00B2,\u2154",
    332         // U+00B3: "" SUPERSCRIPT THREE
    333         // U+00BE: "" VULGAR FRACTION THREE QUARTERS
    334         // U+215C: "" VULGAR FRACTION THREE EIGHTHS
    335         /* 84 */ "\u00B3,\u00BE,\u215C",
    336         // U+2074: "" SUPERSCRIPT FOUR
    337         /* 85 */ "\u2074",
    338         // U+215D: "" VULGAR FRACTION FIVE EIGHTHS
    339         /* 86 */ "\u215D",
    340         /* 87 */ EMPTY,
    341         // U+215E: "" VULGAR FRACTION SEVEN EIGHTHS
    342         /* 88 */ "\u215E",
    343         /* 89 */ EMPTY,
    344         /* 90 */ EMPTY,
    345         // U+207F: "" SUPERSCRIPT LATIN SMALL LETTER N
    346         // U+2205: "" EMPTY SET
    347         /* 91 */ "\u207F,\u2205",
    348         /* 92 */ ",",
    349         /* 93 */ EMPTY,
    350         /* 94 */ "?",
    351         /* 95 */ ";",
    352         /* 96 */ "%",
    353         // U+00A1: "" INVERTED EXCLAMATION MARK
    354         /* 97 */ "\u00A1",
    355         // U+00BF: "" INVERTED QUESTION MARK
    356         /* 98 */ "\u00BF",
    357         /* 99 */ EMPTY,
    358         // U+2030: "" PER MILLE SIGN
    359         /* 100 */ "\u2030",
    360         /* 101 */ ",",
    361         /* 102 */ "!",
    362         /* 103 */ "!",
    363         /* 104 */ "?",
    364         /* 105 */ "?",
    365         /* 106 */ "\'",
    366         /* 107 */ "\"",
    367         /* 108 */ "\"",
    368         /* 109 */ EMPTY,
    369         /* 110 */ EMPTY,
    370         /* 111 */ "q",
    371         /* 112 */ "w",
    372         /* 113 */ "y",
    373         /* 114 */ "x",
    374         // U+00F1: "" LATIN SMALL LETTER N WITH TILDE
    375         /* 115 */ "\u00F1",
    376         /* 116 */ "!fixedColumnOrder!2,!hasLabels!,!text/label_time_am,!text/label_time_pm",
    377         /* 117 */ "!icon/settings_key|!code/key_settings",
    378         /* 118 */ "!icon/shortcut_key|!code/key_shortcut",
    379         /* 119 */ "!hasLabels!,!text/label_next_key|!code/key_action_next",
    380         /* 120 */ "!hasLabels!,!text/label_previous_key|!code/key_action_previous",
    381         // Label for "switch to more symbol" modifier key.  Must be short to fit on key!
    382         /* 121 */ "= \\ <",
    383         // Label for "switch to more symbol" modifier key on tablets.  Must be short to fit on key!
    384         /* 122 */ "~ \\ {",
    385         // Label for "Tab" key.  Must be short to fit on key!
    386         /* 123 */ "Tab",
    387         // Label for "switch to phone numeric" key.  Must be short to fit on key!
    388         /* 124 */ "123",
    389         // Label for "switch to phone symbols" key.  Must be short to fit on key!
    390         // U+FF0A: "" FULLWIDTH ASTERISK
    391         // U+FF03: "" FULLWIDTH NUMBER SIGN
    392         /* 125 */ "\uFF0A\uFF03",
    393         // Key label for "ante meridiem"
    394         /* 126 */ "AM",
    395         // Key label for "post meridiem"
    396         /* 127 */ "PM",
    397         // Label for "switch to symbols" key on PC QWERTY layout
    398         /* 128 */ "Sym",
    399         /* 129 */ ".com",
    400         // popular web domains for the locale - most popular, displayed on the keyboard
    401         /* 130 */ "!hasLabels!,.net,.org,.gov,.edu",
    402         /* 131 */ "!fixedColumnOrder!5,!hasLabels!,=-O|=-O ,:-P|:-P ,;-)|;-) ,:-(|:-( ,:-)|:-) ,:-!|:-! ,:-$|:-$ ,B-)|B-) ,:O|:O ,:-*|:-* ,:-D|:-D ,:\'(|:\'( ,:-\\\\|:-\\\\ ,O:-)|O:-) ,:-[|:-[ ",
    403         // U+2039: "" SINGLE LEFT-POINTING ANGLE QUOTATION MARK
    404         // U+203A: "" SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
    405         // U+00AB: "" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
    406         // U+00BB: "" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
    407         // The following characters don't need BIDI mirroring.
    408         // U+2018: "" LEFT SINGLE QUOTATION MARK
    409         // U+2019: "" RIGHT SINGLE QUOTATION MARK
    410         // U+201A: "" SINGLE LOW-9 QUOTATION MARK
    411         // U+201C: "" LEFT DOUBLE QUOTATION MARK
    412         // U+201D: "" RIGHT DOUBLE QUOTATION MARK
    413         // U+201E: "" DOUBLE LOW-9 QUOTATION MARK
    414         // Abbreviations are:
    415         // laqm: LEFT-POINTING ANGLE QUOTATION MARK
    416         // raqm: RIGHT-POINTING ANGLE QUOTATION MARK
    417         // rtl: Right-To-Left script order
    418         // lqm: LEFT QUOTATION MARK
    419         // rqm: RIGHT QUOTATION MARK
    420         // 9qm: LOW-9 QUOTATION MARK
    421         // The following each quotation mark pair consist of
    422         // <opening quotation mark>, <closing quotation mark>
    423         // and is named after (single|double)_<opening quotation mark>_<closing quotation mark>.
    424         /* 132 */ "\u2039,\u203A",
    425         /* 133 */ "\u2039|\u203A,\u203A|\u2039",
    426         /* 134 */ "\u203A,\u2039",
    427         /* 135 */ "\u00AB,\u00BB",
    428         /* 136 */ "\u00AB|\u00BB,\u00BB|\u00AB",
    429         /* 137 */ "\u00BB,\u00AB",
    430         // The following each quotation mark triplet consists of
    431         // <another quotation mark>, <opening quotation mark>, <closing quotation mark>
    432         // and is named after (single|double)_<opening quotation mark>_<closing quotation mark>.
    433         /* 138 */ "\u201A,\u2018,\u2019",
    434         /* 139 */ "\u2019,\u201A,\u2018",
    435         /* 140 */ "\u2018,\u201A,\u2019",
    436         /* 141 */ "\u201E,\u201C,\u201D",
    437         /* 142 */ "\u201D,\u201E,\u201C",
    438         /* 143 */ "\u201C,\u201E,\u201D",
    439         /* 144 */ "!fixedColumnOrder!5,!text/single_quotes,!text/single_angle_quotes",
    440         /* 145 */ "!fixedColumnOrder!5,!text/double_quotes,!text/double_angle_quotes",
    441         /* 146 */ "!fixedColumnOrder!6,!text/double_quotes,!text/single_quotes,!text/double_angle_quotes,!text/single_angle_quotes",
    442     };
    443 
    444     /* Language af: Afrikaans */
    445     private static final String[] LANGUAGE_af = {
    446         // This is the same as Dutch except more keys of y and demoting vowels with diaeresis.
    447         // U+00E1: "" LATIN SMALL LETTER A WITH ACUTE
    448         // U+00E2: "" LATIN SMALL LETTER A WITH CIRCUMFLEX
    449         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
    450         // U+00E0: "" LATIN SMALL LETTER A WITH GRAVE
    451         // U+00E6: "" LATIN SMALL LETTER AE
    452         // U+00E3: "" LATIN SMALL LETTER A WITH TILDE
    453         // U+00E5: "" LATIN SMALL LETTER A WITH RING ABOVE
    454         // U+0101: "" LATIN SMALL LETTER A WITH MACRON
    455         /* 0 */ "\u00E1,\u00E2,\u00E4,\u00E0,\u00E6,\u00E3,\u00E5,\u0101",
    456         // U+00E9: "" LATIN SMALL LETTER E WITH ACUTE
    457         // U+00E8: "" LATIN SMALL LETTER E WITH GRAVE
    458         // U+00EA: "" LATIN SMALL LETTER E WITH CIRCUMFLEX
    459         // U+00EB: "" LATIN SMALL LETTER E WITH DIAERESIS
    460         // U+0119: "" LATIN SMALL LETTER E WITH OGONEK
    461         // U+0117: "" LATIN SMALL LETTER E WITH DOT ABOVE
    462         // U+0113: "" LATIN SMALL LETTER E WITH MACRON
    463         /* 1 */ "\u00E9,\u00E8,\u00EA,\u00EB,\u0119,\u0117,\u0113",
    464         // U+00ED: "" LATIN SMALL LETTER I WITH ACUTE
    465         // U+00EC: "" LATIN SMALL LETTER I WITH GRAVE
    466         // U+00EF: "" LATIN SMALL LETTER I WITH DIAERESIS
    467         // U+00EE: "" LATIN SMALL LETTER I WITH CIRCUMFLEX
    468         // U+012F: "" LATIN SMALL LETTER I WITH OGONEK
    469         // U+012B: "" LATIN SMALL LETTER I WITH MACRON
    470         // U+0133: "" LATIN SMALL LIGATURE IJ
    471         /* 2 */ "\u00ED,\u00EC,\u00EF,\u00EE,\u012F,\u012B,\u0133",
    472         // U+00F3: "" LATIN SMALL LETTER O WITH ACUTE
    473         // U+00F4: "" LATIN SMALL LETTER O WITH CIRCUMFLEX
    474         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
    475         // U+00F2: "" LATIN SMALL LETTER O WITH GRAVE
    476         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
    477         // U+0153: "" LATIN SMALL LIGATURE OE
    478         // U+00F8: "" LATIN SMALL LETTER O WITH STROKE
    479         // U+014D: "" LATIN SMALL LETTER O WITH MACRON
    480         /* 3 */ "\u00F3,\u00F4,\u00F6,\u00F2,\u00F5,\u0153,\u00F8,\u014D",
    481         // U+00FA: "" LATIN SMALL LETTER U WITH ACUTE
    482         // U+00FB: "" LATIN SMALL LETTER U WITH CIRCUMFLEX
    483         // U+00FC: "" LATIN SMALL LETTER U WITH DIAERESIS
    484         // U+00F9: "" LATIN SMALL LETTER U WITH GRAVE
    485         // U+016B: "" LATIN SMALL LETTER U WITH MACRON
    486         /* 4 */ "\u00FA,\u00FB,\u00FC,\u00F9,\u016B",
    487         /* 5 */ null,
    488         // U+00F1: "" LATIN SMALL LETTER N WITH TILDE
    489         // U+0144: "" LATIN SMALL LETTER N WITH ACUTE
    490         /* 6 */ "\u00F1,\u0144",
    491         /* 7 */ null,
    492         // U+00FD: "" LATIN SMALL LETTER Y WITH ACUTE
    493         // U+0133: "" LATIN SMALL LIGATURE IJ
    494         /* 8 */ "\u00FD,\u0133",
    495     };
    496 
    497     /* Language ar: Arabic */
    498     private static final String[] LANGUAGE_ar = {
    499         /* 0~ */
    500         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
    501         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
    502         null, null, null, null, null, null, null, null, null, null, null, null,
    503         /* ~41 */
    504         // Label for "switch to alphabetic" key.
    505         // U+0623: "" ARABIC LETTER ALEF
    506         // U+200C: ZERO WIDTH NON-JOINER
    507         // U+0628: "" ARABIC LETTER BEH
    508         // U+062C: "" ARABIC LETTER PEH
    509         /* 42 */ "\u0623\u200C\u0628\u200C\u062C",
    510         /* 43 */ null,
    511         /* 44 */ null,
    512         /* 45 */ "!text/single_laqm_raqm_rtl",
    513         /* 46 */ "!text/double_laqm_raqm_rtl",
    514         /* 47~ */
    515         null, null, null,
    516         /* ~49 */
    517         // U+061F: "" ARABIC QUESTION MARK
    518         // U+060C: "" ARABIC COMMA
    519         // U+061B: "" ARABIC SEMICOLON
    520         /* 50 */ "!fixedColumnOrder!8,\",\',#,-,:,!,\u060C,\u061F,@,&,\\%,+,\u061B,/,(,)",
    521         // U+2605: "" BLACK STAR
    522         // U+066D: "" ARABIC FIVE POINTED STAR
    523         /* 51 */ "\u2605,\u066D",
    524         // U+266A: "" EIGHTH NOTE
    525         /* 52 */ "\u266A",
    526         /* 53 */ null,
    527         // The all letters need to be mirrored are found at
    528         // http://www.unicode.org/Public/6.1.0/ucd/BidiMirroring.txt
    529         // U+FD3E: "" ORNATE LEFT PARENTHESIS
    530         // U+FD3F: "" ORNATE RIGHT PARENTHESIS
    531         /* 54 */ "!fixedColumnOrder!4,\uFD3E|\uFD3F,<|>,{|},[|]",
    532         /* 55 */ "!fixedColumnOrder!4,\uFD3F|\uFD3E,>|<,}|{,]|[",
    533         // U+2264: "" LESS-THAN OR EQUAL TO
    534         // U+2265: "" GREATER-THAN EQUAL TO
    535         // U+00AB: "" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
    536         // U+00BB: "" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
    537         // U+2039: "" SINGLE LEFT-POINTING ANGLE QUOTATION MARK
    538         // U+203A: "" SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
    539         /* 56 */ "!fixedColumnOrder!3,\u2039|\u203A,\u2264|\u2265,\u00AB|\u00BB",
    540         /* 57 */ "!fixedColumnOrder!3,\u203A|\u2039,\u2265|\u2264,\u00BB|\u00AB",
    541         // U+0655: "" ARABIC HAMZA BELOW
    542         // U+0654: "" ARABIC HAMZA ABOVE
    543         // U+0652: "" ARABIC SUKUN
    544         // U+064D: "" ARABIC KASRATAN
    545         // U+064C: "" ARABIC DAMMATAN
    546         // U+064B: "" ARABIC FATHATAN
    547         // U+0651: "" ARABIC SHADDA
    548         // U+0656: "" ARABIC SUBSCRIPT ALEF
    549         // U+0670: "" ARABIC LETTER SUPERSCRIPT ALEF
    550         // U+0653: "" ARABIC MADDAH ABOVE
    551         // U+0650: "" ARABIC KASRA
    552         // U+064F: "" ARABIC DAMMA
    553         // U+064E: "" ARABIC FATHA
    554         // U+0640: "" ARABIC TATWEEL
    555         // In order to make Tatweel easily distinguishable from other punctuations, we use consecutive Tatweels only for its displayed label.
    556         // Note: The space character is needed as a preceding letter to draw Arabic diacritics characters correctly.
    557         /* 58 */ "!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",
    558         /* 59 */ "\u0651",
    559         // U+0661: "" ARABIC-INDIC DIGIT ONE
    560         /* 60 */ "\u0661",
    561         // U+0662: "" ARABIC-INDIC DIGIT TWO
    562         /* 61 */ "\u0662",
    563         // U+0663: "" ARABIC-INDIC DIGIT THREE
    564         /* 62 */ "\u0663",
    565         // U+0664: "" ARABIC-INDIC DIGIT FOUR
    566         /* 63 */ "\u0664",
    567         // U+0665: "" ARABIC-INDIC DIGIT FIVE
    568         /* 64 */ "\u0665",
    569         // U+0666: "" ARABIC-INDIC DIGIT SIX
    570         /* 65 */ "\u0666",
    571         // U+0667: "" ARABIC-INDIC DIGIT SEVEN
    572         /* 66 */ "\u0667",
    573         // U+0668: "" ARABIC-INDIC DIGIT EIGHT
    574         /* 67 */ "\u0668",
    575         // U+0669: "" ARABIC-INDIC DIGIT NINE
    576         /* 68 */ "\u0669",
    577         // U+0660: "" ARABIC-INDIC DIGIT ZERO
    578         /* 69 */ "\u0660",
    579         // Label for "switch to symbols" key.
    580         // U+061F: "" ARABIC QUESTION MARK
    581         /* 70 */ "\u0663\u0662\u0661\u061F",
    582         // Label for "switch to symbols with microphone" key. This string shouldn't include the "mic"
    583         // part because it'll be appended by the code.
    584         /* 71 */ "\u0663\u0662\u0661",
    585         /* 72 */ "1",
    586         /* 73 */ "2",
    587         /* 74 */ "3",
    588         /* 75 */ "4",
    589         /* 76 */ "5",
    590         /* 77 */ "6",
    591         /* 78 */ "7",
    592         /* 79 */ "8",
    593         /* 80 */ "9",
    594         // U+066B: "" ARABIC DECIMAL SEPARATOR
    595         // U+066C: "" ARABIC THOUSANDS SEPARATOR
    596         /* 81 */ "0,\u066B,\u066C",
    597         /* 82~ */
    598         null, null, null, null, null, null, null, null, null, null,
    599         /* ~91 */
    600         // U+060C: "" ARABIC COMMA
    601         /* 92 */ "\u060C",
    602         /* 93 */ "\\,",
    603         /* 94 */ "\u061F",
    604         /* 95 */ "\u061B",
    605         // U+066A: "" ARABIC PERCENT SIGN
    606         /* 96 */ "\u066A",
    607         /* 97 */ null,
    608         /* 98 */ "?",
    609         /* 99 */ ";",
    610         // U+2030: "" PER MILLE SIGN
    611         /* 100 */ "\\%,\u2030",
    612         /* 101~ */
    613         null, null, null, null, null,
    614         /* ~105 */
    615         // U+060C: "" ARABIC COMMA
    616         // U+061B: "" ARABIC SEMICOLON
    617         // U+061F: "" ARABIC QUESTION MARK
    618         /* 106 */ "\u060C",
    619         /* 107 */ "\u061F",
    620         /* 108 */ "\u061F,\u061B,!,:,-,/,\',\"",
    621     };
    622 
    623     /* Language be: Belarusian */
    624     private static final String[] LANGUAGE_be = {
    625         /* 0~ */
    626         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
    627         null, null, null, null, null, null, null, null, null, null,
    628         /* ~24 */
    629         // U+045E: "" CYRILLIC SMALL LETTER SHORT U
    630         /* 25 */ "\u045E",
    631         // U+0451: "" CYRILLIC SMALL LETTER IO
    632         /* 26 */ "\u0451",
    633         // U+044B: "" CYRILLIC SMALL LETTER YERU
    634         /* 27 */ "\u044B",
    635         // U+044D: "" CYRILLIC SMALL LETTER E
    636         /* 28 */ "\u044D",
    637         // U+0456: "" CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
    638         /* 29 */ "\u0456",
    639         /* 30~ */
    640         null, null, null, null, null,
    641         /* ~34 */
    642         // U+044A: "" CYRILLIC SMALL LETTER HARD SIGN
    643         /* 35 */ "\u044A",
    644         /* 36~ */
    645         null, null, null, null,
    646         /* ~39 */
    647         // U+0451: "" CYRILLIC SMALL LETTER IO
    648         /* 40 */ "\u0451",
    649         /* 41 */ null,
    650         // Label for "switch to alphabetic" key.
    651         // U+0410: "" CYRILLIC CAPITAL LETTER A
    652         // U+0411: "" CYRILLIC CAPITAL LETTER BE
    653         // U+0412: "" CYRILLIC CAPITAL LETTER VE
    654         /* 42 */ "\u0410\u0411\u0412",
    655         /* 43 */ "!text/single_9qm_lqm",
    656         /* 44 */ "!text/double_9qm_lqm",
    657     };
    658 
    659     /* Language bg: Bulgarian */
    660     private static final String[] LANGUAGE_bg = {
    661         /* 0~ */
    662         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
    663         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
    664         null, null, null, null, null, null, null, null, null, null, null, null,
    665         /* ~41 */
    666         // Label for "switch to alphabetic" key.
    667         // U+0410: "" CYRILLIC CAPITAL LETTER A
    668         // U+0411: "" CYRILLIC CAPITAL LETTER BE
    669         // U+0412: "" CYRILLIC CAPITAL LETTER VE
    670         /* 42 */ "\u0410\u0411\u0412",
    671         /* 43 */ null,
    672         // single_quotes of Bulgarian is default single_quotes_right_left.
    673         /* 44 */ "!text/double_9qm_lqm",
    674     };
    675 
    676     /* Language ca: Catalan */
    677     private static final String[] LANGUAGE_ca = {
    678         // U+00E0: "" LATIN SMALL LETTER A WITH GRAVE
    679         // U+00E1: "" LATIN SMALL LETTER A WITH ACUTE
    680         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
    681         // U+00E2: "" LATIN SMALL LETTER A WITH CIRCUMFLEX
    682         // U+00E3: "" LATIN SMALL LETTER A WITH TILDE
    683         // U+00E5: "" LATIN SMALL LETTER A WITH RING ABOVE
    684         // U+0105: "" LATIN SMALL LETTER A WITH OGONEK
    685         // U+00E6: "" LATIN SMALL LETTER AE
    686         // U+0101: "" LATIN SMALL LETTER A WITH MACRON
    687         // U+00AA: "" FEMININE ORDINAL INDICATOR
    688         /* 0 */ "\u00E0,\u00E1,\u00E4,\u00E2,\u00E3,\u00E5,\u0105,\u00E6,\u0101,\u00AA",
    689         // U+00E8: "" LATIN SMALL LETTER E WITH GRAVE
    690         // U+00E9: "" LATIN SMALL LETTER E WITH ACUTE
    691         // U+00EB: "" LATIN SMALL LETTER E WITH DIAERESIS
    692         // U+00EA: "" LATIN SMALL LETTER E WITH CIRCUMFLEX
    693         // U+0119: "" LATIN SMALL LETTER E WITH OGONEK
    694         // U+0117: "" LATIN SMALL LETTER E WITH DOT ABOVE
    695         // U+0113: "" LATIN SMALL LETTER E WITH MACRON
    696         /* 1 */ "\u00E8,\u00E9,\u00EB,\u00EA,\u0119,\u0117,\u0113",
    697         // U+00ED: "" LATIN SMALL LETTER I WITH ACUTE
    698         // U+00EF: "" LATIN SMALL LETTER I WITH DIAERESIS
    699         // U+00EC: "" LATIN SMALL LETTER I WITH GRAVE
    700         // U+00EE: "" LATIN SMALL LETTER I WITH CIRCUMFLEX
    701         // U+012F: "" LATIN SMALL LETTER I WITH OGONEK
    702         // U+012B: "" LATIN SMALL LETTER I WITH MACRON
    703         /* 2 */ "\u00ED,\u00EF,\u00EC,\u00EE,\u012F,\u012B",
    704         // U+00F2: "" LATIN SMALL LETTER O WITH GRAVE
    705         // U+00F3: "" LATIN SMALL LETTER O WITH ACUTE
    706         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
    707         // U+00F4: "" LATIN SMALL LETTER O WITH CIRCUMFLEX
    708         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
    709         // U+00F8: "" LATIN SMALL LETTER O WITH STROKE
    710         // U+0153: "" LATIN SMALL LIGATURE OE
    711         // U+014D: "" LATIN SMALL LETTER O WITH MACRON
    712         // U+00BA: "" MASCULINE ORDINAL INDICATOR
    713         /* 3 */ "\u00F2,\u00F3,\u00F6,\u00F4,\u00F5,\u00F8,\u0153,\u014D,\u00BA",
    714         // U+00FA: "" LATIN SMALL LETTER U WITH ACUTE
    715         // U+00FC: "" LATIN SMALL LETTER U WITH DIAERESIS
    716         // U+00F9: "" LATIN SMALL LETTER U WITH GRAVE
    717         // U+00FB: "" LATIN SMALL LETTER U WITH CIRCUMFLEX
    718         // U+016B: "" LATIN SMALL LETTER U WITH MACRON
    719         /* 4 */ "\u00FA,\u00FC,\u00F9,\u00FB,\u016B",
    720         /* 5 */ null,
    721         // U+00F1: "" LATIN SMALL LETTER N WITH TILDE
    722         // U+0144: "" LATIN SMALL LETTER N WITH ACUTE
    723         /* 6 */ "\u00F1,\u0144",
    724         // U+00E7: "" LATIN SMALL LETTER C WITH CEDILLA
    725         // U+0107: "" LATIN SMALL LETTER C WITH ACUTE
    726         // U+010D: "" LATIN SMALL LETTER C WITH CARON
    727         /* 7 */ "\u00E7,\u0107,\u010D",
    728         /* 8~ */
    729         null, null, null, null, null, null,
    730         /* ~13 */
    731         // U+0140: "" LATIN SMALL LETTER L WITH MIDDLE DOT
    732         // U+0142: "" LATIN SMALL LETTER L WITH STROKE
    733         /* 14 */ "\u0140,\u0142",
    734     };
    735 
    736     /* Language cs: Czech */
    737     private static final String[] LANGUAGE_cs = {
    738         // U+00E1: "" LATIN SMALL LETTER A WITH ACUTE
    739         // U+00E0: "" LATIN SMALL LETTER A WITH GRAVE
    740         // U+00E2: "" LATIN SMALL LETTER A WITH CIRCUMFLEX
    741         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
    742         // U+00E6: "" LATIN SMALL LETTER AE
    743         // U+00E3: "" LATIN SMALL LETTER A WITH TILDE
    744         // U+00E5: "" LATIN SMALL LETTER A WITH RING ABOVE
    745         // U+0101: "" LATIN SMALL LETTER A WITH MACRON
    746         /* 0 */ "\u00E1,\u00E0,\u00E2,\u00E4,\u00E6,\u00E3,\u00E5,\u0101",
    747         // U+00E9: "" LATIN SMALL LETTER E WITH ACUTE
    748         // U+011B: "" LATIN SMALL LETTER E WITH CARON
    749         // U+00E8: "" LATIN SMALL LETTER E WITH GRAVE
    750         // U+00EA: "" LATIN SMALL LETTER E WITH CIRCUMFLEX
    751         // U+00EB: "" LATIN SMALL LETTER E WITH DIAERESIS
    752         // U+0119: "" LATIN SMALL LETTER E WITH OGONEK
    753         // U+0117: "" LATIN SMALL LETTER E WITH DOT ABOVE
    754         // U+0113: "" LATIN SMALL LETTER E WITH MACRON
    755         /* 1 */ "\u00E9,\u011B,\u00E8,\u00EA,\u00EB,\u0119,\u0117,\u0113",
    756         // U+00ED: "" LATIN SMALL LETTER I WITH ACUTE
    757         // U+00EE: "" LATIN SMALL LETTER I WITH CIRCUMFLEX
    758         // U+00EF: "" LATIN SMALL LETTER I WITH DIAERESIS
    759         // U+00EC: "" LATIN SMALL LETTER I WITH GRAVE
    760         // U+012F: "" LATIN SMALL LETTER I WITH OGONEK
    761         // U+012B: "" LATIN SMALL LETTER I WITH MACRON
    762         /* 2 */ "\u00ED,\u00EE,\u00EF,\u00EC,\u012F,\u012B",
    763         // U+00F3: "" LATIN SMALL LETTER O WITH ACUTE
    764         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
    765         // U+00F4: "" LATIN SMALL LETTER O WITH CIRCUMFLEX
    766         // U+00F2: "" LATIN SMALL LETTER O WITH GRAVE
    767         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
    768         // U+0153: "" LATIN SMALL LIGATURE OE
    769         // U+00F8: "" LATIN SMALL LETTER O WITH STROKE
    770         // U+014D: "" LATIN SMALL LETTER O WITH MACRON
    771         /* 3 */ "\u00F3,\u00F6,\u00F4,\u00F2,\u00F5,\u0153,\u00F8,\u014D",
    772         // U+00FA: "" LATIN SMALL LETTER U WITH ACUTE
    773         // U+016F: "" LATIN SMALL LETTER U WITH RING ABOVE
    774         // U+00FB: "" LATIN SMALL LETTER U WITH CIRCUMFLEX
    775         // U+00FC: "" LATIN SMALL LETTER U WITH DIAERESIS
    776         // U+00F9: "" LATIN SMALL LETTER U WITH GRAVE
    777         // U+016B: "" LATIN SMALL LETTER U WITH MACRON
    778         /* 4 */ "\u00FA,\u016F,\u00FB,\u00FC,\u00F9,\u016B",
    779         // U+0161: "" LATIN SMALL LETTER S WITH CARON
    780         // U+00DF: "" LATIN SMALL LETTER SHARP S
    781         // U+015B: "" LATIN SMALL LETTER S WITH ACUTE
    782         /* 5 */ "\u0161,\u00DF,\u015B",
    783         // U+0148: "" LATIN SMALL LETTER N WITH CARON
    784         // U+00F1: "" LATIN SMALL LETTER N WITH TILDE
    785         // U+0144: "" LATIN SMALL LETTER N WITH ACUTE
    786         /* 6 */ "\u0148,\u00F1,\u0144",
    787         // U+010D: "" LATIN SMALL LETTER C WITH CARON
    788         // U+00E7: "" LATIN SMALL LETTER C WITH CEDILLA
    789         // U+0107: "" LATIN SMALL LETTER C WITH ACUTE
    790         /* 7 */ "\u010D,\u00E7,\u0107",
    791         // U+00FD: "" LATIN SMALL LETTER Y WITH ACUTE
    792         // U+00FF: "" LATIN SMALL LETTER Y WITH DIAERESIS
    793         /* 8 */ "\u00FD,\u00FF",
    794         // U+010F: "" LATIN SMALL LETTER D WITH CARON
    795         /* 9 */ "\u010F",
    796         // U+0159: "" LATIN SMALL LETTER R WITH CARON
    797         /* 10 */ "\u0159",
    798         // U+0165: "" LATIN SMALL LETTER T WITH CARON
    799         /* 11 */ "\u0165",
    800         // U+017E: "" LATIN SMALL LETTER Z WITH CARON
    801         // U+017A: "" LATIN SMALL LETTER Z WITH ACUTE
    802         // U+017C: "" LATIN SMALL LETTER Z WITH DOT ABOVE
    803         /* 12 */ "\u017E,\u017A,\u017C",
    804         /* 13~ */
    805         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
    806         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
    807         /* ~42 */
    808         /* 43 */ "!text/single_9qm_lqm",
    809         /* 44 */ "!text/double_9qm_lqm",
    810         /* 45 */ "!text/single_raqm_laqm",
    811         /* 46 */ "!text/double_raqm_laqm",
    812     };
    813 
    814     /* Language da: Danish */
    815     private static final String[] LANGUAGE_da = {
    816         // U+00E1: "" LATIN SMALL LETTER A WITH ACUTE
    817         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
    818         // U+00E0: "" LATIN SMALL LETTER A WITH GRAVE
    819         // U+00E2: "" LATIN SMALL LETTER A WITH CIRCUMFLEX
    820         // U+00E3: "" LATIN SMALL LETTER A WITH TILDE
    821         // U+0101: "" LATIN SMALL LETTER A WITH MACRON
    822         /* 0 */ "\u00E1,\u00E4,\u00E0,\u00E2,\u00E3,\u0101",
    823         // U+00E9: "" LATIN SMALL LETTER E WITH ACUTE
    824         // U+00EB: "" LATIN SMALL LETTER E WITH DIAERESIS
    825         /* 1 */ "\u00E9,\u00EB",
    826         // U+00ED: "" LATIN SMALL LETTER I WITH ACUTE
    827         // U+00EF: "" LATIN SMALL LETTER I WITH DIAERESIS
    828         /* 2 */ "\u00ED,\u00EF",
    829         // U+00F3: "" LATIN SMALL LETTER O WITH ACUTE
    830         // U+00F4: "" LATIN SMALL LETTER O WITH CIRCUMFLEX
    831         // U+00F2: "" LATIN SMALL LETTER O WITH GRAVE
    832         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
    833         // U+0153: "" LATIN SMALL LIGATURE OE
    834         // U+014D: "" LATIN SMALL LETTER O WITH MACRON
    835         /* 3 */ "\u00F3,\u00F4,\u00F2,\u00F5,\u0153,\u014D",
    836         // U+00FA: "" LATIN SMALL LETTER U WITH ACUTE
    837         // U+00FC: "" LATIN SMALL LETTER U WITH DIAERESIS
    838         // U+00FB: "" LATIN SMALL LETTER U WITH CIRCUMFLEX
    839         // U+00F9: "" LATIN SMALL LETTER U WITH GRAVE
    840         // U+016B: "" LATIN SMALL LETTER U WITH MACRON
    841         /* 4 */ "\u00FA,\u00FC,\u00FB,\u00F9,\u016B",
    842         // U+00DF: "" LATIN SMALL LETTER SHARP S
    843         // U+015B: "" LATIN SMALL LETTER S WITH ACUTE
    844         // U+0161: "" LATIN SMALL LETTER S WITH CARON
    845         /* 5 */ "\u00DF,\u015B,\u0161",
    846         // U+00F1: "" LATIN SMALL LETTER N WITH TILDE
    847         // U+0144: "" LATIN SMALL LETTER N WITH ACUTE
    848         /* 6 */ "\u00F1,\u0144",
    849         /* 7 */ null,
    850         // U+00FD: "" LATIN SMALL LETTER Y WITH ACUTE
    851         // U+00FF: "" LATIN SMALL LETTER Y WITH DIAERESIS
    852         /* 8 */ "\u00FD,\u00FF",
    853         // U+00F0: "" LATIN SMALL LETTER ETH
    854         /* 9 */ "\u00F0",
    855         /* 10~ */
    856         null, null, null, null,
    857         /* ~13 */
    858         // U+0142: "" LATIN SMALL LETTER L WITH STROKE
    859         /* 14 */ "\u0142",
    860         /* 15~ */
    861         null, null, null, null, null,
    862         /* ~19 */
    863         // U+00E5: "" LATIN SMALL LETTER A WITH RING ABOVE
    864         /* 20 */ "\u00E5",
    865         // U+00E6: "" LATIN SMALL LETTER AE
    866         /* 21 */ "\u00E6",
    867         // U+00F8: "" LATIN SMALL LETTER O WITH STROKE
    868         /* 22 */ "\u00F8",
    869         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
    870         /* 23 */ "\u00E4",
    871         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
    872         /* 24 */ "\u00F6",
    873         /* 25~ */
    874         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
    875         null, null, null,
    876         /* ~42 */
    877         /* 43 */ "!text/single_9qm_lqm",
    878         /* 44 */ "!text/double_9qm_lqm",
    879         /* 45 */ "!text/single_raqm_laqm",
    880         /* 46 */ "!text/double_raqm_laqm",
    881     };
    882 
    883     /* Language de: German */
    884     private static final String[] LANGUAGE_de = {
    885         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
    886         // U+00E2: "" LATIN SMALL LETTER A WITH CIRCUMFLEX
    887         // U+00E0: "" LATIN SMALL LETTER A WITH GRAVE
    888         // U+00E1: "" LATIN SMALL LETTER A WITH ACUTE
    889         // U+00E6: "" LATIN SMALL LETTER AE
    890         // U+00E3: "" LATIN SMALL LETTER A WITH TILDE
    891         // U+00E5: "" LATIN SMALL LETTER A WITH RING ABOVE
    892         // U+0101: "" LATIN SMALL LETTER A WITH MACRON
    893         /* 0 */ "\u00E4,\u00E2,\u00E0,\u00E1,\u00E6,\u00E3,\u00E5,\u0101",
    894         // U+00E9: "" LATIN SMALL LETTER E WITH ACUTE
    895         // U+00E8: "" LATIN SMALL LETTER E WITH GRAVE
    896         // U+00EA: "" LATIN SMALL LETTER E WITH CIRCUMFLEX
    897         // U+00EB: "" LATIN SMALL LETTER E WITH DIAERESIS
    898         // U+0117: "" LATIN SMALL LETTER E WITH DOT ABOVE
    899         /* 1 */ "\u00E9,\u00E8,\u00EA,\u00EB,\u0117",
    900         /* 2 */ null,
    901         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
    902         // U+00F4: "" LATIN SMALL LETTER O WITH CIRCUMFLEX
    903         // U+00F2: "" LATIN SMALL LETTER O WITH GRAVE
    904         // U+00F3: "" LATIN SMALL LETTER O WITH ACUTE
    905         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
    906         // U+0153: "" LATIN SMALL LIGATURE OE
    907         // U+00F8: "" LATIN SMALL LETTER O WITH STROKE
    908         // U+014D: "" LATIN SMALL LETTER O WITH MACRON
    909         /* 3 */ "\u00F6,\u00F4,\u00F2,\u00F3,\u00F5,\u0153,\u00F8,\u014D",
    910         // U+00FC: "" LATIN SMALL LETTER U WITH DIAERESIS
    911         // U+00FB: "" LATIN SMALL LETTER U WITH CIRCUMFLEX
    912         // U+00F9: "" LATIN SMALL LETTER U WITH GRAVE
    913         // U+00FA: "" LATIN SMALL LETTER U WITH ACUTE
    914         // U+016B: "" LATIN SMALL LETTER U WITH MACRON
    915         /* 4 */ "\u00FC,\u00FB,\u00F9,\u00FA,\u016B",
    916         // U+00DF: "" LATIN SMALL LETTER SHARP S
    917         // U+015B: "" LATIN SMALL LETTER S WITH ACUTE
    918         // U+0161: "" LATIN SMALL LETTER S WITH CARON
    919         /* 5 */ "\u00DF,\u015B,\u0161",
    920         // U+00F1: "" LATIN SMALL LETTER N WITH TILDE
    921         // U+0144: "" LATIN SMALL LETTER N WITH ACUTE
    922         /* 6 */ "\u00F1,\u0144",
    923         /* 7~ */
    924         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
    925         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
    926         null, null, null, null, null, null,
    927         /* ~42 */
    928         /* 43 */ "!text/single_9qm_lqm",
    929         /* 44 */ "!text/double_9qm_lqm",
    930         /* 45 */ "!text/single_raqm_laqm",
    931         /* 46 */ "!text/double_raqm_laqm",
    932     };
    933 
    934     /* Language el: Greek */
    935     private static final String[] LANGUAGE_el = {
    936         /* 0~ */
    937         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
    938         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
    939         null, null, null, null, null, null, null, null, null, null, null, null,
    940         /* ~41 */
    941         // Label for "switch to alphabetic" key.
    942         // U+0391: "" GREEK CAPITAL LETTER ALPHA
    943         // U+0392: "" GREEK CAPITAL LETTER BETA
    944         // U+0393: "" GREEK CAPITAL LETTER GAMMA
    945         /* 42 */ "\u0391\u0392\u0393",
    946     };
    947 
    948     /* Language en: English */
    949     private static final String[] LANGUAGE_en = {
    950         // U+00E0: "" LATIN SMALL LETTER A WITH GRAVE
    951         // U+00E1: "" LATIN SMALL LETTER A WITH ACUTE
    952         // U+00E2: "" LATIN SMALL LETTER A WITH CIRCUMFLEX
    953         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
    954         // U+00E6: "" LATIN SMALL LETTER AE
    955         // U+00E3: "" LATIN SMALL LETTER A WITH TILDE
    956         // U+00E5: "" LATIN SMALL LETTER A WITH RING ABOVE
    957         // U+0101: "" LATIN SMALL LETTER A WITH MACRON
    958         /* 0 */ "\u00E0,\u00E1,\u00E2,\u00E4,\u00E6,\u00E3,\u00E5,\u0101",
    959         // U+00E8: "" LATIN SMALL LETTER E WITH GRAVE
    960         // U+00E9: "" LATIN SMALL LETTER E WITH ACUTE
    961         // U+00EA: "" LATIN SMALL LETTER E WITH CIRCUMFLEX
    962         // U+00EB: "" LATIN SMALL LETTER E WITH DIAERESIS
    963         // U+0113: "" LATIN SMALL LETTER E WITH MACRON
    964         /* 1 */ "\u00E8,\u00E9,\u00EA,\u00EB,\u0113",
    965         // U+00EE: "" LATIN SMALL LETTER I WITH CIRCUMFLEX
    966         // U+00EF: "" LATIN SMALL LETTER I WITH DIAERESIS
    967         // U+00ED: "" LATIN SMALL LETTER I WITH ACUTE
    968         // U+012B: "" LATIN SMALL LETTER I WITH MACRON
    969         // U+00EC: "" LATIN SMALL LETTER I WITH GRAVE
    970         /* 2 */ "\u00EE,\u00EF,\u00ED,\u012B,\u00EC",
    971         // U+00F4: "" LATIN SMALL LETTER O WITH CIRCUMFLEX
    972         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
    973         // U+00F2: "" LATIN SMALL LETTER O WITH GRAVE
    974         // U+00F3: "" LATIN SMALL LETTER O WITH ACUTE
    975         // U+0153: "" LATIN SMALL LIGATURE OE
    976         // U+00F8: "" LATIN SMALL LETTER O WITH STROKE
    977         // U+014D: "" LATIN SMALL LETTER O WITH MACRON
    978         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
    979         /* 3 */ "\u00F4,\u00F6,\u00F2,\u00F3,\u0153,\u00F8,\u014D,\u00F5",
    980         // U+00FB: "" LATIN SMALL LETTER U WITH CIRCUMFLEX
    981         // U+00FC: "" LATIN SMALL LETTER U WITH DIAERESIS
    982         // U+00F9: "" LATIN SMALL LETTER U WITH GRAVE
    983         // U+00FA: "" LATIN SMALL LETTER U WITH ACUTE
    984         // U+016B: "" LATIN SMALL LETTER U WITH MACRON
    985         /* 4 */ "\u00FB,\u00FC,\u00F9,\u00FA,\u016B",
    986         // U+00DF: "" LATIN SMALL LETTER SHARP S
    987         /* 5 */ "\u00DF",
    988         // U+00F1: "" LATIN SMALL LETTER N WITH TILDE
    989         /* 6 */ "\u00F1",
    990         // U+00E7: "" LATIN SMALL LETTER C WITH CEDILLA
    991         /* 7 */ "\u00E7",
    992     };
    993 
    994     /* Language eo: Esperanto */
    995     private static final String[] LANGUAGE_eo = {
    996         // U+00E1: "" LATIN SMALL LETTER A WITH ACUTE
    997         // U+00E0: "" LATIN SMALL LETTER A WITH GRAVE
    998         // U+00E2: "" LATIN SMALL LETTER A WITH CIRCUMFLEX
    999         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
   1000         // U+00E6: "" LATIN SMALL LETTER AE
   1001         // U+00E3: "" LATIN SMALL LETTER A WITH TILDE
   1002         // U+00E5: "" LATIN SMALL LETTER A WITH RING ABOVE
   1003         // U+0101: "" LATIN SMALL LETTER A WITH MACRON
   1004         // U+0103: "" LATIN SMALL LETTER A WITH BREVE
   1005         // U+0105: "" LATIN SMALL LETTER A WITH OGONEK
   1006         // U+00AA: "" FEMININE ORDINAL INDICATOR
   1007         /* 0 */ "\u00E1,\u00E0,\u00E2,\u00E4,\u00E6,\u00E3,\u00E5,\u0101,\u0103,\u0105,\u00AA",
   1008         // U+00E9: "" LATIN SMALL LETTER E WITH ACUTE
   1009         // U+011B: "" LATIN SMALL LETTER E WITH CARON
   1010         // U+00E8: "" LATIN SMALL LETTER E WITH GRAVE
   1011         // U+00EA: "" LATIN SMALL LETTER E WITH CIRCUMFLEX
   1012         // U+00EB: "" LATIN SMALL LETTER E WITH DIAERESIS
   1013         // U+0119: "" LATIN SMALL LETTER E WITH OGONEK
   1014         // U+0117: "" LATIN SMALL LETTER E WITH DOT ABOVE
   1015         // U+0113: "" LATIN SMALL LETTER E WITH MACRON
   1016         /* 1 */ "\u00E9,\u011B,\u00E8,\u00EA,\u00EB,\u0119,\u0117,\u0113",
   1017         // U+00ED: "" LATIN SMALL LETTER I WITH ACUTE
   1018         // U+00EE: "" LATIN SMALL LETTER I WITH CIRCUMFLEX
   1019         // U+00EF: "" LATIN SMALL LETTER I WITH DIAERESIS
   1020         // U+0129: "" LATIN SMALL LETTER I WITH TILDE
   1021         // U+00EC: "" LATIN SMALL LETTER I WITH GRAVE
   1022         // U+012F: "" LATIN SMALL LETTER I WITH OGONEK
   1023         // U+012B: "" LATIN SMALL LETTER I WITH MACRON
   1024         // U+0131: "" LATIN SMALL LETTER DOTLESS I
   1025         // U+0133: "" LATIN SMALL LIGATURE IJ
   1026         /* 2 */ "\u00ED,\u00EE,\u00EF,\u0129,\u00EC,\u012F,\u012B,\u0131,\u0133",
   1027         // U+00F3: "" LATIN SMALL LETTER O WITH ACUTE
   1028         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
   1029         // U+00F4: "" LATIN SMALL LETTER O WITH CIRCUMFLEX
   1030         // U+00F2: "" LATIN SMALL LETTER O WITH GRAVE
   1031         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
   1032         // U+0153: "" LATIN SMALL LIGATURE OE
   1033         // U+00F8: "" LATIN SMALL LETTER O WITH STROKE
   1034         // U+014D: "" LATIN SMALL LETTER O WITH MACRON
   1035         // U+0151: "" LATIN SMALL LETTER O WITH DOUBLE ACUTE
   1036         // U+00BA: "" MASCULINE ORDINAL INDICATOR
   1037         /* 3 */ "\u00F3,\u00F6,\u00F4,\u00F2,\u00F5,\u0153,\u00F8,\u014D,\u0151,\u00BA",
   1038         // U+00FA: "" LATIN SMALL LETTER U WITH ACUTE
   1039         // U+016F: "" LATIN SMALL LETTER U WITH RING ABOVE
   1040         // U+00FB: "" LATIN SMALL LETTER U WITH CIRCUMFLEX
   1041         // U+00FC: "" LATIN SMALL LETTER U WITH DIAERESIS
   1042         // U+00F9: "" LATIN SMALL LETTER U WITH GRAVE
   1043         // U+016B: "" LATIN SMALL LETTER U WITH MACRON
   1044         // U+0169: "" LATIN SMALL LETTER U WITH TILDE
   1045         // U+0171: "" LATIN SMALL LETTER U WITH DOUBLE ACUTE
   1046         // U+0173: "" LATIN SMALL LETTER U WITH OGONEK
   1047         // U+00B5: "" MICRO SIGN
   1048         /* 4 */ "\u00FA,\u016F,\u00FB,\u00FC,\u00F9,\u016B,\u0169,\u0171,\u0173,\u00B5",
   1049         // U+00DF: "" LATIN SMALL LETTER SHARP S
   1050         // U+0161: "" LATIN SMALL LETTER S WITH CARON
   1051         // U+015B: "" LATIN SMALL LETTER S WITH ACUTE
   1052         // U+0219: "" LATIN SMALL LETTER S WITH COMMA BELOW
   1053         // U+015F: "" LATIN SMALL LETTER S WITH CEDILLA
   1054         /* 5 */ "\u00DF,\u0161,\u015B,\u0219,\u015F",
   1055         // U+00F1: "" LATIN SMALL LETTER N WITH TILDE
   1056         // U+0144: "" LATIN SMALL LETTER N WITH ACUTE
   1057         // U+0146: "" LATIN SMALL LETTER N WITH CEDILLA
   1058         // U+0148: "" LATIN SMALL LETTER N WITH CARON
   1059         // U+0149: "" LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
   1060         // U+014B: "" LATIN SMALL LETTER ENG
   1061         /* 6 */ "\u00F1,\u0144,\u0146,\u0148,\u0149,\u014B",
   1062         // U+0107: "" LATIN SMALL LETTER C WITH ACUTE
   1063         // U+010D: "" LATIN SMALL LETTER C WITH CARON
   1064         // U+00E7: "" LATIN SMALL LETTER C WITH CEDILLA
   1065         // U+010B: "" LATIN SMALL LETTER C WITH DOT ABOVE
   1066         /* 7 */ "\u0107,\u010D,\u00E7,\u010B",
   1067         // U+00FD: "" LATIN SMALL LETTER Y WITH ACUTE
   1068         // U+0177: "" LATIN SMALL LETTER Y WITH CIRCUMFLEX
   1069         // U+00FF: "" LATIN SMALL LETTER Y WITH DIAERESIS
   1070         // U+00FE: "" LATIN SMALL LETTER THORN
   1071         /* 8 */ "y,\u00FD,\u0177,\u00FF,\u00FE",
   1072         // U+00F0: "" LATIN SMALL LETTER ETH
   1073         // U+010F: "" LATIN SMALL LETTER D WITH CARON
   1074         // U+0111: "" LATIN SMALL LETTER D WITH STROKE
   1075         /* 9 */ "\u00F0,\u010F,\u0111",
   1076         // U+0159: "" LATIN SMALL LETTER R WITH CARON
   1077         // U+0155: "" LATIN SMALL LETTER R WITH ACUTE
   1078         // U+0157: "" LATIN SMALL LETTER R WITH CEDILLA
   1079         /* 10 */ "\u0159,\u0155,\u0157",
   1080         // U+0165: "" LATIN SMALL LETTER T WITH CARON
   1081         // U+021B: "" LATIN SMALL LETTER T WITH COMMA BELOW
   1082         // U+0163: "" LATIN SMALL LETTER T WITH CEDILLA
   1083         // U+0167: "" LATIN SMALL LETTER T WITH STROKE
   1084         /* 11 */ "\u0165,\u021B,\u0163,\u0167",
   1085         // U+017A: "" LATIN SMALL LETTER Z WITH ACUTE
   1086         // U+017C: "" LATIN SMALL LETTER Z WITH DOT ABOVE
   1087         // U+017E: "" LATIN SMALL LETTER Z WITH CARON
   1088         /* 12 */ "\u017A,\u017C,\u017E",
   1089         // U+0137: "" LATIN SMALL LETTER K WITH CEDILLA
   1090         // U+0138: "" LATIN SMALL LETTER KRA
   1091         /* 13 */ "\u0137,\u0138",
   1092         // U+013A: "" LATIN SMALL LETTER L WITH ACUTE
   1093         // U+013C: "" LATIN SMALL LETTER L WITH CEDILLA
   1094         // U+013E: "" LATIN SMALL LETTER L WITH CARON
   1095         // U+0140: "" LATIN SMALL LETTER L WITH MIDDLE DOT
   1096         // U+0142: "" LATIN SMALL LETTER L WITH STROKE
   1097         /* 14 */ "\u013A,\u013C,\u013E,\u0140,\u0142",
   1098         // U+011F: "" LATIN SMALL LETTER G WITH BREVE
   1099         // U+0121: "" LATIN SMALL LETTER G WITH DOT ABOVE
   1100         // U+0123: "" LATIN SMALL LETTER G WITH CEDILLA
   1101         /* 15 */ "\u011F,\u0121,\u0123",
   1102         // U+0175: "" LATIN SMALL LETTER W WITH CIRCUMFLEX
   1103         /* 16 */ "w,\u0175",
   1104         // U+0125: "" LATIN SMALL LETTER H WITH CIRCUMFLEX
   1105         // U+0127: "" LATIN SMALL LETTER H WITH STROKE
   1106         /* 17 */ "\u0125,\u0127",
   1107         /* 18 */ null,
   1108         // U+0175: "" LATIN SMALL LETTER W WITH CIRCUMFLEX
   1109         /* 19 */ "w,\u0175",
   1110         /* 20~ */
   1111         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   1112         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   1113         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   1114         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   1115         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   1116         null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   1117         /* ~108 */
   1118         /* 109 */ "q",
   1119         /* 110 */ "x",
   1120         // U+015D: "" LATIN SMALL LETTER S WITH CIRCUMFLEX
   1121         /* 111 */ "\u015D",
   1122         // U+011D: "" LATIN SMALL LETTER G WITH CIRCUMFLEX
   1123         /* 112 */ "\u011D",
   1124         // U+016D: "" LATIN SMALL LETTER U WITH BREVE
   1125         /* 113 */ "\u016D",
   1126         // U+0109: "" LATIN SMALL LETTER C WITH CIRCUMFLEX
   1127         /* 114 */ "\u0109",
   1128         // U+0135: "" LATIN SMALL LETTER J WITH CIRCUMFLEX
   1129         /* 115 */ "\u0135",
   1130     };
   1131 
   1132     /* Language es: Spanish */
   1133     private static final String[] LANGUAGE_es = {
   1134         // U+00E1: "" LATIN SMALL LETTER A WITH ACUTE
   1135         // U+00E0: "" LATIN SMALL LETTER A WITH GRAVE
   1136         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
   1137         // U+00E2: "" LATIN SMALL LETTER A WITH CIRCUMFLEX
   1138         // U+00E3: "" LATIN SMALL LETTER A WITH TILDE
   1139         // U+00E5: "" LATIN SMALL LETTER A WITH RING ABOVE
   1140         // U+0105: "" LATIN SMALL LETTER A WITH OGONEK
   1141         // U+00E6: "" LATIN SMALL LETTER AE
   1142         // U+0101: "" LATIN SMALL LETTER A WITH MACRON
   1143         // U+00AA: "" FEMININE ORDINAL INDICATOR
   1144         /* 0 */ "\u00E1,\u00E0,\u00E4,\u00E2,\u00E3,\u00E5,\u0105,\u00E6,\u0101,\u00AA",
   1145         // U+00E9: "" LATIN SMALL LETTER E WITH ACUTE
   1146         // U+00E8: "" LATIN SMALL LETTER E WITH GRAVE
   1147         // U+00EB: "" LATIN SMALL LETTER E WITH DIAERESIS
   1148         // U+00EA: "" LATIN SMALL LETTER E WITH CIRCUMFLEX
   1149         // U+0119: "" LATIN SMALL LETTER E WITH OGONEK
   1150         // U+0117: "" LATIN SMALL LETTER E WITH DOT ABOVE
   1151         // U+0113: "" LATIN SMALL LETTER E WITH MACRON
   1152         /* 1 */ "\u00E9,\u00E8,\u00EB,\u00EA,\u0119,\u0117,\u0113",
   1153         // U+00ED: "" LATIN SMALL LETTER I WITH ACUTE
   1154         // U+00EF: "" LATIN SMALL LETTER I WITH DIAERESIS
   1155         // U+00EC: "" LATIN SMALL LETTER I WITH GRAVE
   1156         // U+00EE: "" LATIN SMALL LETTER I WITH CIRCUMFLEX
   1157         // U+012F: "" LATIN SMALL LETTER I WITH OGONEK
   1158         // U+012B: "" LATIN SMALL LETTER I WITH MACRON
   1159         /* 2 */ "\u00ED,\u00EF,\u00EC,\u00EE,\u012F,\u012B",
   1160         // U+00F3: "" LATIN SMALL LETTER O WITH ACUTE
   1161         // U+00F2: "" LATIN SMALL LETTER O WITH GRAVE
   1162         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
   1163         // U+00F4: "" LATIN SMALL LETTER O WITH CIRCUMFLEX
   1164         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
   1165         // U+00F8: "" LATIN SMALL LETTER O WITH STROKE
   1166         // U+0153: "" LATIN SMALL LIGATURE OE
   1167         // U+014D: "" LATIN SMALL LETTER O WITH MACRON
   1168         // U+00BA: "" MASCULINE ORDINAL INDICATOR
   1169         /* 3 */ "\u00F3,\u00F2,\u00F6,\u00F4,\u00F5,\u00F8,\u0153,\u014D,\u00BA",
   1170         // U+00FA: "" LATIN SMALL LETTER U WITH ACUTE
   1171         // U+00FC: "" LATIN SMALL LETTER U WITH DIAERESIS
   1172         // U+00F9: "" LATIN SMALL LETTER U WITH GRAVE
   1173         // U+00FB: "" LATIN SMALL LETTER U WITH CIRCUMFLEX
   1174         // U+016B: "" LATIN SMALL LETTER U WITH MACRON
   1175         /* 4 */ "\u00FA,\u00FC,\u00F9,\u00FB,\u016B",
   1176         /* 5 */ null,
   1177         // U+00F1: "" LATIN SMALL LETTER N WITH TILDE
   1178         // U+0144: "" LATIN SMALL LETTER N WITH ACUTE
   1179         /* 6 */ "\u00F1,\u0144",
   1180         // U+00E7: "" LATIN SMALL LETTER C WITH CEDILLA
   1181         // U+0107: "" LATIN SMALL LETTER C WITH ACUTE
   1182         // U+010D: "" LATIN SMALL LETTER C WITH CARON
   1183         /* 7 */ "\u00E7,\u0107,\u010D",
   1184         /* 8~ */
   1185         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   1186         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   1187         null, null, null, null, null, null, null, null, null, null, null, null,
   1188         /* ~49 */
   1189         // U+00A1: "" INVERTED EXCLAMATION MARK
   1190         // U+00BF: "" INVERTED QUESTION MARK
   1191         /* 50 */ "!fixedColumnOrder!9,\u00A1,\",\',#,-,:,!,\\,,?,\u00BF,@,&,\\%,+,;,/,(,)",
   1192         /* 51~ */
   1193         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   1194         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   1195         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   1196         null, null, null, null, null, null, null,
   1197         /* ~102 */
   1198         // U+00A1: "" INVERTED EXCLAMATION MARK
   1199         /* 103 */ "!,\u00A1",
   1200         /* 104 */ null,
   1201         // U+00BF: "" INVERTED QUESTION MARK
   1202         /* 105 */ "?,\u00BF",
   1203         /* 106 */ "\"",
   1204         /* 107 */ "\'",
   1205         /* 108 */ "\'",
   1206     };
   1207 
   1208     /* Language et: Estonian */
   1209     private static final String[] LANGUAGE_et = {
   1210         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
   1211         // U+0101: "" LATIN SMALL LETTER A WITH MACRON
   1212         // U+00E0: "" LATIN SMALL LETTER A WITH GRAVE
   1213         // U+00E1: "" LATIN SMALL LETTER A WITH ACUTE
   1214         // U+00E2: "" LATIN SMALL LETTER A WITH CIRCUMFLEX
   1215         // U+00E3: "" LATIN SMALL LETTER A WITH TILDE
   1216         // U+00E5: "" LATIN SMALL LETTER A WITH RING ABOVE
   1217         // U+00E6: "" LATIN SMALL LETTER AE
   1218         // U+0105: "" LATIN SMALL LETTER A WITH OGONEK
   1219         /* 0 */ "\u00E4,\u0101,\u00E0,\u00E1,\u00E2,\u00E3,\u00E5,\u00E6,\u0105",
   1220         // U+0113: "" LATIN SMALL LETTER E WITH MACRON
   1221         // U+00E8: "" LATIN SMALL LETTER E WITH GRAVE
   1222         // U+0117: "" LATIN SMALL LETTER E WITH DOT ABOVE
   1223         // U+00E9: "" LATIN SMALL LETTER E WITH ACUTE
   1224         // U+00EA: "" LATIN SMALL LETTER E WITH CIRCUMFLEX
   1225         // U+00EB: "" LATIN SMALL LETTER E WITH DIAERESIS
   1226         // U+0119: "" LATIN SMALL LETTER E WITH OGONEK
   1227         // U+011B: "" LATIN SMALL LETTER E WITH CARON
   1228         /* 1 */ "\u0113,\u00E8,\u0117,\u00E9,\u00EA,\u00EB,\u0119,\u011B",
   1229         // U+012B: "" LATIN SMALL LETTER I WITH MACRON
   1230         // U+00EC: "" LATIN SMALL LETTER I WITH GRAVE
   1231         // U+012F: "" LATIN SMALL LETTER I WITH OGONEK
   1232         // U+00ED: "" LATIN SMALL LETTER I WITH ACUTE
   1233         // U+00EE: "" LATIN SMALL LETTER I WITH CIRCUMFLEX
   1234         // U+00EF: "" LATIN SMALL LETTER I WITH DIAERESIS
   1235         // U+0131: "" LATIN SMALL LETTER DOTLESS I
   1236         /* 2 */ "\u012B,\u00EC,\u012F,\u00ED,\u00EE,\u00EF,\u0131",
   1237         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
   1238         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
   1239         // U+00F2: "" LATIN SMALL LETTER O WITH GRAVE
   1240         // U+00F3: "" LATIN SMALL LETTER O WITH ACUTE
   1241         // U+00F4: "" LATIN SMALL LETTER O WITH CIRCUMFLEX
   1242         // U+0153: "" LATIN SMALL LIGATURE OE
   1243         // U+0151: "" LATIN SMALL LETTER O WITH DOUBLE ACUTE
   1244         // U+00F8: "" LATIN SMALL LETTER O WITH STROKE
   1245         /* 3 */ "\u00F6,\u00F5,\u00F2,\u00F3,\u00F4,\u0153,\u0151,\u00F8",
   1246         // U+00FC: "" LATIN SMALL LETTER U WITH DIAERESIS
   1247         // U+016B: "" LATIN SMALL LETTER U WITH MACRON
   1248         // U+0173: "" LATIN SMALL LETTER U WITH OGONEK
   1249         // U+00F9: "" LATIN SMALL LETTER U WITH GRAVE
   1250         // U+00FA: "" LATIN SMALL LETTER U WITH ACUTE
   1251         // U+00FB: "" LATIN SMALL LETTER U WITH CIRCUMFLEX
   1252         // U+016F: "" LATIN SMALL LETTER U WITH RING ABOVE
   1253         // U+0171: "" LATIN SMALL LETTER U WITH DOUBLE ACUTE
   1254         /* 4 */ "\u00FC,\u016B,\u0173,\u00F9,\u00FA,\u00FB,\u016F,\u0171",
   1255         // U+0161: "" LATIN SMALL LETTER S WITH CARON
   1256         // U+00DF: "" LATIN SMALL LETTER SHARP S
   1257         // U+015B: "" LATIN SMALL LETTER S WITH ACUTE
   1258         // U+015F: "" LATIN SMALL LETTER S WITH CEDILLA
   1259         /* 5 */ "\u0161,\u00DF,\u015B,\u015F",
   1260         // U+0146: "" LATIN SMALL LETTER N WITH CEDILLA
   1261         // U+00F1: "" LATIN SMALL LETTER N WITH TILDE
   1262         // U+0144: "" LATIN SMALL LETTER N WITH ACUTE
   1263         // U+0144: "" LATIN SMALL LETTER N WITH ACUTE
   1264         /* 6 */ "\u0146,\u00F1,\u0144,\u0144",
   1265         // U+010D: "" LATIN SMALL LETTER C WITH CARON
   1266         // U+00E7: "" LATIN SMALL LETTER C WITH CEDILLA
   1267         // U+0107: "" LATIN SMALL LETTER C WITH ACUTE
   1268         /* 7 */ "\u010D,\u00E7,\u0107",
   1269         // U+00FD: "" LATIN SMALL LETTER Y WITH ACUTE
   1270         // U+00FF: "" LATIN SMALL LETTER Y WITH DIAERESIS
   1271         /* 8 */ "\u00FD,\u00FF",
   1272         // U+010F: "" LATIN SMALL LETTER D WITH CARON
   1273         /* 9 */ "\u010F",
   1274         // U+0157: "" LATIN SMALL LETTER R WITH CEDILLA
   1275         // U+0159: "" LATIN SMALL LETTER R WITH CARON
   1276         // U+0155: "" LATIN SMALL LETTER R WITH ACUTE
   1277         /* 10 */ "\u0157,\u0159,\u0155",
   1278         // U+0163: "" LATIN SMALL LETTER T WITH CEDILLA
   1279         // U+0165: "" LATIN SMALL LETTER T WITH CARON
   1280         /* 11 */ "\u0163,\u0165",
   1281         // U+017E: "" LATIN SMALL LETTER Z WITH CARON
   1282         // U+017C: "" LATIN SMALL LETTER Z WITH DOT ABOVE
   1283         // U+017A: "" LATIN SMALL LETTER Z WITH ACUTE
   1284         /* 12 */ "\u017E,\u017C,\u017A",
   1285         // U+0137: "" LATIN SMALL LETTER K WITH CEDILLA
   1286         /* 13 */ "\u0137",
   1287         // U+013C: "" LATIN SMALL LETTER L WITH CEDILLA
   1288         // U+0142: "" LATIN SMALL LETTER L WITH STROKE
   1289         // U+013A: "" LATIN SMALL LETTER L WITH ACUTE
   1290         // U+013E: "" LATIN SMALL LETTER L WITH CARON
   1291         /* 14 */ "\u013C,\u0142,\u013A,\u013E",
   1292         // U+0123: "" LATIN SMALL LETTER G WITH CEDILLA
   1293         // U+011F: "" LATIN SMALL LETTER G WITH BREVE
   1294         /* 15 */ "\u0123,\u011F",
   1295         /* 16~ */
   1296         null, null, null, null,
   1297         /* ~19 */
   1298         // U+00FC: "" LATIN SMALL LETTER U WITH DIAERESIS
   1299         /* 20 */ "\u00FC",
   1300         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
   1301         /* 21 */ "\u00F6",
   1302         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
   1303         /* 22 */ "\u00E4",
   1304         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
   1305         /* 23 */ "\u00F5",
   1306         /* 24~ */
   1307         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   1308         null, null, null, null,
   1309         /* ~42 */
   1310         /* 43 */ "!text/single_9qm_lqm",
   1311         /* 44 */ "!text/double_9qm_lqm",
   1312     };
   1313 
   1314     /* Language fa: Persian */
   1315     private static final String[] LANGUAGE_fa = {
   1316         /* 0~ */
   1317         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   1318         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   1319         null, null, null, null, null, null, null, null, null, null, null, null,
   1320         /* ~41 */
   1321         // Label for "switch to alphabetic" key.
   1322         // U+0627: "" ARABIC LETTER ALEF
   1323         // U+200C: ZERO WIDTH NON-JOINER
   1324         // U+0628: "" ARABIC LETTER BEH
   1325         // U+067E: "" ARABIC LETTER PEH
   1326         /* 42 */ "\u0627\u200C\u0628\u200C\u067E",
   1327         /* 43 */ null,
   1328         /* 44 */ null,
   1329         /* 45 */ "!text/single_laqm_raqm_rtl",
   1330         /* 46 */ "!text/double_laqm_raqm_rtl",
   1331         /* 47~ */
   1332         null, null, null,
   1333         /* ~49 */
   1334         // U+061F: "" ARABIC QUESTION MARK
   1335         // U+060C: "" ARABIC COMMA
   1336         // U+061B: "" ARABIC SEMICOLON
   1337         /* 50 */ "!fixedColumnOrder!8,\",\',#,-,:,!,\u060C,\u061F,@,&,\\%,+,\u061B,/,(,)",
   1338         // U+2605: "" BLACK STAR
   1339         // U+066D: "" ARABIC FIVE POINTED STAR
   1340         /* 51 */ "\u2605,\u066D",
   1341         // U+266A: "" EIGHTH NOTE
   1342         /* 52 */ "\u266A",
   1343         /* 53 */ null,
   1344         // The all letters need to be mirrored are found at
   1345         // http://www.unicode.org/Public/6.1.0/ucd/BidiMirroring.txt
   1346         // U+FD3E: "" ORNATE LEFT PARENTHESIS
   1347         // U+FD3F: "" ORNATE RIGHT PARENTHESIS
   1348         /* 54 */ "!fixedColumnOrder!4,\uFD3E|\uFD3F,<|>,{|},[|]",
   1349         /* 55 */ "!fixedColumnOrder!4,\uFD3F|\uFD3E,>|<,}|{,]|[",
   1350         // U+2264: "" LESS-THAN OR EQUAL TO
   1351         // U+2265: "" GREATER-THAN EQUAL TO
   1352         // U+00AB: "" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
   1353         // U+00BB: "" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
   1354         // U+2039: "" SINGLE LEFT-POINTING ANGLE QUOTATION MARK
   1355         // U+203A: "" SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
   1356         /* 56 */ "!fixedColumnOrder!3,\u2039|\u203A,\u2264|\u2265,<|>",
   1357         /* 57 */ "!fixedColumnOrder!3,\u203A|\u2039,\u2265|\u2264,>|<",
   1358         // U+0655: "" ARABIC HAMZA BELOW
   1359         // U+0652: "" ARABIC SUKUN
   1360         // U+0651: "" ARABIC SHADDA
   1361         // U+064C: "" ARABIC DAMMATAN
   1362         // U+064D: "" ARABIC KASRATAN
   1363         // U+064B: "" ARABIC FATHATAN
   1364         // U+0654: "" ARABIC HAMZA ABOVE
   1365         // U+0656: "" ARABIC SUBSCRIPT ALEF
   1366         // U+0670: "" ARABIC LETTER SUPERSCRIPT ALEF
   1367         // U+0653: "" ARABIC MADDAH ABOVE
   1368         // U+064F: "" ARABIC DAMMA
   1369         // U+0650: "" ARABIC KASRA
   1370         // U+064E: "" ARABIC FATHA
   1371         // U+0640: "" ARABIC TATWEEL
   1372         // In order to make Tatweel easily distinguishable from other punctuations, we use consecutive Tatweels only for its displayed label.
   1373         // Note: The space character is needed as a preceding letter to draw Arabic diacritics characters correctly.
   1374         /* 58 */ "!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",
   1375         /* 59 */ "\u064B",
   1376         // U+06F1: "" EXTENDED ARABIC-INDIC DIGIT ONE
   1377         /* 60 */ "\u06F1",
   1378         // U+06F2: "" EXTENDED ARABIC-INDIC DIGIT TWO
   1379         /* 61 */ "\u06F2",
   1380         // U+06F3: "" EXTENDED ARABIC-INDIC DIGIT THREE
   1381         /* 62 */ "\u06F3",
   1382         // U+06F4: "" EXTENDED ARABIC-INDIC DIGIT FOUR
   1383         /* 63 */ "\u06F4",
   1384         // U+06F5: "" EXTENDED ARABIC-INDIC DIGIT FIVE
   1385         /* 64 */ "\u06F5",
   1386         // U+06F6: "" EXTENDED ARABIC-INDIC DIGIT SIX
   1387         /* 65 */ "\u06F6",
   1388         // U+06F7: "" EXTENDED ARABIC-INDIC DIGIT SEVEN
   1389         /* 66 */ "\u06F7",
   1390         // U+06F8: "" EXTENDED ARABIC-INDIC DIGIT EIGHT
   1391         /* 67 */ "\u06F8",
   1392         // U+06F9: "" EXTENDED ARABIC-INDIC DIGIT NINE
   1393         /* 68 */ "\u06F9",
   1394         // U+06F0: "" EXTENDED ARABIC-INDIC DIGIT ZERO
   1395         /* 69 */ "\u06F0",
   1396         // Label for "switch to symbols" key.
   1397         // U+061F: "" ARABIC QUESTION MARK
   1398         /* 70 */ "\u06F3\u06F2\u06F1\u061F",
   1399         // Label for "switch to symbols with microphone" key. This string shouldn't include the "mic"
   1400         // part because it'll be appended by the code.
   1401         /* 71 */ "\u06F3\u06F2\u06F1",
   1402         /* 72 */ "1",
   1403         /* 73 */ "2",
   1404         /* 74 */ "3",
   1405         /* 75 */ "4",
   1406         /* 76 */ "5",
   1407         /* 77 */ "6",
   1408         /* 78 */ "7",
   1409         /* 79 */ "8",
   1410         /* 80 */ "9",
   1411         // U+066B: "" ARABIC DECIMAL SEPARATOR
   1412         // U+066C: "" ARABIC THOUSANDS SEPARATOR
   1413         /* 81 */ "0,\u066B,\u066C",
   1414         /* 82~ */
   1415         null, null, null, null, null, null, null, null, null, null,
   1416         /* ~91 */
   1417         // U+060C: "" ARABIC COMMA
   1418         /* 92 */ "\u060C",
   1419         /* 93 */ "\\,",
   1420         /* 94 */ "\u061F",
   1421         /* 95 */ "\u061B",
   1422         // U+066A: "" ARABIC PERCENT SIGN
   1423         /* 96 */ "\u066A",
   1424         /* 97 */ null,
   1425         /* 98 */ "?",
   1426         /* 99 */ ";",
   1427         // U+2030: "" PER MILLE SIGN
   1428         /* 100 */ "\\%,\u2030",
   1429         // U+060C: "" ARABIC COMMA
   1430         // U+061B: "" ARABIC SEMICOLON
   1431         // U+061F: "" ARABIC QUESTION MARK
   1432         // U+00AB: "" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
   1433         // U+00BB: "" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
   1434         /* 101 */ "\u060C",
   1435         /* 102 */ "!",
   1436         /* 103 */ "!,\\,",
   1437         /* 104 */ "\u061F",
   1438         /* 105 */ "\u061F,?",
   1439         /* 106 */ "\u060C",
   1440         /* 107 */ "\u061F",
   1441         /* 108 */ "!fixedColumnOrder!4,:,!,\u061F,\u061B,-,/,\u00AB|\u00BB,\u00BB|\u00AB",
   1442     };
   1443 
   1444     /* Language fi: Finnish */
   1445     private static final String[] LANGUAGE_fi = {
   1446         // U+00E6: "" LATIN SMALL LETTER AE
   1447         // U+00E0: "" LATIN SMALL LETTER A WITH GRAVE
   1448         // U+00E1: "" LATIN SMALL LETTER A WITH ACUTE
   1449         // U+00E2: "" LATIN SMALL LETTER A WITH CIRCUMFLEX
   1450         // U+00E3: "" LATIN SMALL LETTER A WITH TILDE
   1451         // U+0101: "" LATIN SMALL LETTER A WITH MACRON
   1452         /* 0 */ "\u00E6,\u00E0,\u00E1,\u00E2,\u00E3,\u0101",
   1453         /* 1 */ null,
   1454         /* 2 */ null,
   1455         // U+00F8: "" LATIN SMALL LETTER O WITH STROKE
   1456         // U+00F4: "" LATIN SMALL LETTER O WITH CIRCUMFLEX
   1457         // U+00F2: "" LATIN SMALL LETTER O WITH GRAVE
   1458         // U+00F3: "" LATIN SMALL LETTER O WITH ACUTE
   1459         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
   1460         // U+0153: "" LATIN SMALL LIGATURE OE
   1461         // U+014D: "" LATIN SMALL LETTER O WITH MACRON
   1462         /* 3 */ "\u00F8,\u00F4,\u00F2,\u00F3,\u00F5,\u0153,\u014D",
   1463         // U+00FC: "" LATIN SMALL LETTER U WITH DIAERESIS
   1464         /* 4 */ "\u00FC",
   1465         // U+0161: "" LATIN SMALL LETTER S WITH CARON
   1466         // U+00DF: "" LATIN SMALL LETTER SHARP S
   1467         // U+015B: "" LATIN SMALL LETTER S WITH ACUTE
   1468         /* 5 */ "\u0161,\u00DF,\u015B",
   1469         /* 6~ */
   1470         null, null, null, null, null, null,
   1471         /* ~11 */
   1472         // U+017E: "" LATIN SMALL LETTER Z WITH CARON
   1473         // U+017A: "" LATIN SMALL LETTER Z WITH ACUTE
   1474         // U+017C: "" LATIN SMALL LETTER Z WITH DOT ABOVE
   1475         /* 12 */ "\u017E,\u017A,\u017C",
   1476         /* 13~ */
   1477         null, null, null, null, null, null, null,
   1478         /* ~19 */
   1479         // U+00E5: "" LATIN SMALL LETTER A WITH RING ABOVE
   1480         /* 20 */ "\u00E5",
   1481         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
   1482         /* 21 */ "\u00F6",
   1483         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
   1484         /* 22 */ "\u00E4",
   1485         // U+00F8: "" LATIN SMALL LETTER O WITH STROKE
   1486         /* 23 */ "\u00F8",
   1487         // U+00E6: "" LATIN SMALL LETTER AE
   1488         /* 24 */ "\u00E6",
   1489     };
   1490 
   1491     /* Language fr: French */
   1492     private static final String[] LANGUAGE_fr = {
   1493         // U+00E0: "" LATIN SMALL LETTER A WITH GRAVE
   1494         // U+00E2: "" LATIN SMALL LETTER A WITH CIRCUMFLEX
   1495         // U+00E6: "" LATIN SMALL LETTER AE
   1496         // U+00E1: "" LATIN SMALL LETTER A WITH ACUTE
   1497         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
   1498         // U+00E3: "" LATIN SMALL LETTER A WITH TILDE
   1499         // U+00E5: "" LATIN SMALL LETTER A WITH RING ABOVE
   1500         // U+0101: "" LATIN SMALL LETTER A WITH MACRON
   1501         // U+00AA: "" FEMININE ORDINAL INDICATOR
   1502         /* 0 */ "\u00E0,\u00E2,%,\u00E6,\u00E1,\u00E4,\u00E3,\u00E5,\u0101,\u00AA",
   1503         // U+00E9: "" LATIN SMALL LETTER E WITH ACUTE
   1504         // U+00E8: "" LATIN SMALL LETTER E WITH GRAVE
   1505         // U+00EA: "" LATIN SMALL LETTER E WITH CIRCUMFLEX
   1506         // U+00EB: "" LATIN SMALL LETTER E WITH DIAERESIS
   1507         // U+0119: "" LATIN SMALL LETTER E WITH OGONEK
   1508         // U+0117: "" LATIN SMALL LETTER E WITH DOT ABOVE
   1509         // U+0113: "" LATIN SMALL LETTER E WITH MACRON
   1510         /* 1 */ "\u00E9,\u00E8,\u00EA,\u00EB,%,\u0119,\u0117,\u0113",
   1511         // U+00EE: "" LATIN SMALL LETTER I WITH CIRCUMFLEX
   1512         // U+00EF: "" LATIN SMALL LETTER I WITH DIAERESIS
   1513         // U+00EC: "" LATIN SMALL LETTER I WITH GRAVE
   1514         // U+00ED: "" LATIN SMALL LETTER I WITH ACUTE
   1515         // U+012F: "" LATIN SMALL LETTER I WITH OGONEK
   1516         // U+012B: "" LATIN SMALL LETTER I WITH MACRON
   1517         /* 2 */ "\u00EE,%,\u00EF,\u00EC,\u00ED,\u012F,\u012B",
   1518         // U+00F4: "" LATIN SMALL LETTER O WITH CIRCUMFLEX
   1519         // U+0153: "" LATIN SMALL LIGATURE OE
   1520         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
   1521         // U+00F2: "" LATIN SMALL LETTER O WITH GRAVE
   1522         // U+00F3: "" LATIN SMALL LETTER O WITH ACUTE
   1523         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
   1524         // U+00F8: "" LATIN SMALL LETTER O WITH STROKE
   1525         // U+014D: "" LATIN SMALL LETTER O WITH MACRON
   1526         // U+00BA: "" MASCULINE ORDINAL INDICATOR
   1527         /* 3 */ "\u00F4,\u0153,%,\u00F6,\u00F2,\u00F3,\u00F5,\u00F8,\u014D,\u00BA",
   1528         // U+00F9: "" LATIN SMALL LETTER U WITH GRAVE
   1529         // U+00FB: "" LATIN SMALL LETTER U WITH CIRCUMFLEX
   1530         // U+00FC: "" LATIN SMALL LETTER U WITH DIAERESIS
   1531         // U+00FA: "" LATIN SMALL LETTER U WITH ACUTE
   1532         // U+016B: "" LATIN SMALL LETTER U WITH MACRON
   1533         /* 4 */ "\u00F9,\u00FB,%,\u00FC,\u00FA,\u016B",
   1534         /* 5 */ null,
   1535         /* 6 */ null,
   1536         // U+00E7: "" LATIN SMALL LETTER C WITH CEDILLA
   1537         // U+0107: "" LATIN SMALL LETTER C WITH ACUTE
   1538         // U+010D: "" LATIN SMALL LETTER C WITH CARON
   1539         /* 7 */ "\u00E7,\u0107,\u010D",
   1540         // U+00FF: "" LATIN SMALL LETTER Y WITH DIAERESIS
   1541         /* 8 */ "%,\u00FF",
   1542     };
   1543 
   1544     /* Language hi: Hindi */
   1545     private static final String[] LANGUAGE_hi = {
   1546         /* 0~ */
   1547         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   1548         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   1549         null, null, null, null, null, null, null, null, null, null, null, null,
   1550         /* ~41 */
   1551         // Label for "switch to alphabetic" key.
   1552         // U+0915: "" DEVANAGARI LETTER KA
   1553         // U+0916: "" DEVANAGARI LETTER KHA
   1554         // U+0917: "" DEVANAGARI LETTER GA
   1555         /* 42 */ "\u0915\u0916\u0917",
   1556         /* 43~ */
   1557         null, null, null, null, null,
   1558         /* ~47 */
   1559         // U+20B9: "" INDIAN RUPEE SIGN
   1560         /* 48 */ "\u20B9",
   1561         /* 49~ */
   1562         null, null, null, null, null, null, null, null, null, null, null,
   1563         /* ~59 */
   1564         // U+0967: "" DEVANAGARI DIGIT ONE
   1565         /* 60 */ "\u0967",
   1566         // U+0968: "" DEVANAGARI DIGIT TWO
   1567         /* 61 */ "\u0968",
   1568         // U+0969: "" DEVANAGARI DIGIT THREE
   1569         /* 62 */ "\u0969",
   1570         // U+096A: "" DEVANAGARI DIGIT FOUR
   1571         /* 63 */ "\u096A",
   1572         // U+096B: "" DEVANAGARI DIGIT FIVE
   1573         /* 64 */ "\u096B",
   1574         // U+096C: "" DEVANAGARI DIGIT SIX
   1575         /* 65 */ "\u096C",
   1576         // U+096D: "" DEVANAGARI DIGIT SEVEN
   1577         /* 66 */ "\u096D",
   1578         // U+096E: "" DEVANAGARI DIGIT EIGHT
   1579         /* 67 */ "\u096E",
   1580         // U+096F: "" DEVANAGARI DIGIT NINE
   1581         /* 68 */ "\u096F",
   1582         // U+0966: "" DEVANAGARI DIGIT ZERO
   1583         /* 69 */ "\u0966",
   1584         // Label for "switch to symbols" key.
   1585         /* 70 */ "?\u0967\u0968\u0969",
   1586         // Label for "switch to symbols with microphone" key. This string shouldn't include the "mic"
   1587         // part because it'll be appended by the code.
   1588         /* 71 */ "\u0967\u0968\u0969",
   1589         /* 72 */ "1",
   1590         /* 73 */ "2",
   1591         /* 74 */ "3",
   1592         /* 75 */ "4",
   1593         /* 76 */ "5",
   1594         /* 77 */ "6",
   1595         /* 78 */ "7",
   1596         /* 79 */ "8",
   1597         /* 80 */ "9",
   1598         /* 81 */ "0",
   1599     };
   1600 
   1601     /* Language hr: Croatian */
   1602     private static final String[] LANGUAGE_hr = {
   1603         /* 0~ */
   1604         null, null, null, null, null,
   1605         /* ~4 */
   1606         // U+0161: "" LATIN SMALL LETTER S WITH CARON
   1607         // U+015B: "" LATIN SMALL LETTER S WITH ACUTE
   1608         // U+00DF: "" LATIN SMALL LETTER SHARP S
   1609         /* 5 */ "\u0161,\u015B,\u00DF",
   1610         // U+00F1: "" LATIN SMALL LETTER N WITH TILDE
   1611         // U+0144: "" LATIN SMALL LETTER N WITH ACUTE
   1612         /* 6 */ "\u00F1,\u0144",
   1613         // U+010D: "" LATIN SMALL LETTER C WITH CARON
   1614         // U+0107: "" LATIN SMALL LETTER C WITH ACUTE
   1615         // U+00E7: "" LATIN SMALL LETTER C WITH CEDILLA
   1616         /* 7 */ "\u010D,\u0107,\u00E7",
   1617         /* 8 */ null,
   1618         // U+0111: "" LATIN SMALL LETTER D WITH STROKE
   1619         /* 9 */ "\u0111",
   1620         /* 10 */ null,
   1621         /* 11 */ null,
   1622         // U+017E: "" LATIN SMALL LETTER Z WITH CARON
   1623         // U+017A: "" LATIN SMALL LETTER Z WITH ACUTE
   1624         // U+017C: "" LATIN SMALL LETTER Z WITH DOT ABOVE
   1625         /* 12 */ "\u017E,\u017A,\u017C",
   1626         /* 13~ */
   1627         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   1628         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   1629         /* ~42 */
   1630         /* 43 */ "!text/single_9qm_rqm",
   1631         /* 44 */ "!text/double_9qm_rqm",
   1632         /* 45 */ "!text/single_raqm_laqm",
   1633         /* 46 */ "!text/double_raqm_laqm",
   1634     };
   1635 
   1636     /* Language hu: Hungarian */
   1637     private static final String[] LANGUAGE_hu = {
   1638         // U+00E1: "" LATIN SMALL LETTER A WITH ACUTE
   1639         // U+00E0: "" LATIN SMALL LETTER A WITH GRAVE
   1640         // U+00E2: "" LATIN SMALL LETTER A WITH CIRCUMFLEX
   1641         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
   1642         // U+00E6: "" LATIN SMALL LETTER AE
   1643         // U+00E3: "" LATIN SMALL LETTER A WITH TILDE
   1644         // U+00E5: "" LATIN SMALL LETTER A WITH RING ABOVE
   1645         // U+0101: "" LATIN SMALL LETTER A WITH MACRON
   1646         /* 0 */ "\u00E1,\u00E0,\u00E2,\u00E4,\u00E6,\u00E3,\u00E5,\u0101",
   1647         // U+00E9: "" LATIN SMALL LETTER E WITH ACUTE
   1648         // U+00E8: "" LATIN SMALL LETTER E WITH GRAVE
   1649         // U+00EA: "" LATIN SMALL LETTER E WITH CIRCUMFLEX
   1650         // U+00EB: "" LATIN SMALL LETTER E WITH DIAERESIS
   1651         // U+0119: "" LATIN SMALL LETTER E WITH OGONEK
   1652         // U+0117: "" LATIN SMALL LETTER E WITH DOT ABOVE
   1653         // U+0113: "" LATIN SMALL LETTER E WITH MACRON
   1654         /* 1 */ "\u00E9,\u00E8,\u00EA,\u00EB,\u0119,\u0117,\u0113",
   1655         // U+00ED: "" LATIN SMALL LETTER I WITH ACUTE
   1656         // U+00EE: "" LATIN SMALL LETTER I WITH CIRCUMFLEX
   1657         // U+00EF: "" LATIN SMALL LETTER I WITH DIAERESIS
   1658         // U+00EC: "" LATIN SMALL LETTER I WITH GRAVE
   1659         // U+012F: "" LATIN SMALL LETTER I WITH OGONEK
   1660         // U+012B: "" LATIN SMALL LETTER I WITH MACRON
   1661         /* 2 */ "\u00ED,\u00EE,\u00EF,\u00EC,\u012F,\u012B",
   1662         // U+00F3: "" LATIN SMALL LETTER O WITH ACUTE
   1663         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
   1664         // U+0151: "" LATIN SMALL LETTER O WITH DOUBLE ACUTE
   1665         // U+00F4: "" LATIN SMALL LETTER O WITH CIRCUMFLEX
   1666         // U+00F2: "" LATIN SMALL LETTER O WITH GRAVE
   1667         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
   1668         // U+0153: "" LATIN SMALL LIGATURE OE
   1669         // U+00F8: "" LATIN SMALL LETTER O WITH STROKE
   1670         // U+014D: "" LATIN SMALL LETTER O WITH MACRON
   1671         /* 3 */ "\u00F3,\u00F6,\u0151,\u00F4,\u00F2,\u00F5,\u0153,\u00F8,\u014D",
   1672         // U+00FA: "" LATIN SMALL LETTER U WITH ACUTE
   1673         // U+00FC: "" LATIN SMALL LETTER U WITH DIAERESIS
   1674         // U+0171: "" LATIN SMALL LETTER U WITH DOUBLE ACUTE
   1675         // U+00FB: "" LATIN SMALL LETTER U WITH CIRCUMFLEX
   1676         // U+00F9: "" LATIN SMALL LETTER U WITH GRAVE
   1677         // U+016B: "" LATIN SMALL LETTER U WITH MACRON
   1678         /* 4 */ "\u00FA,\u00FC,\u0171,\u00FB,\u00F9,\u016B",
   1679         /* 5~ */
   1680         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   1681         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   1682         null, null, null, null, null, null, null, null,
   1683         /* ~42 */
   1684         /* 43 */ "!text/single_9qm_rqm",
   1685         /* 44 */ "!text/double_9qm_rqm",
   1686         /* 45 */ "!text/single_raqm_laqm",
   1687         /* 46 */ "!text/double_raqm_laqm",
   1688     };
   1689 
   1690     /* Language is: Icelandic */
   1691     private static final String[] LANGUAGE_is = {
   1692         // U+00E1: "" LATIN SMALL LETTER A WITH ACUTE
   1693         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
   1694         // U+00E6: "" LATIN SMALL LETTER AE
   1695         // U+00E5: "" LATIN SMALL LETTER A WITH RING ABOVE
   1696         // U+00E0: "" LATIN SMALL LETTER A WITH GRAVE
   1697         // U+00E2: "" LATIN SMALL LETTER A WITH CIRCUMFLEX
   1698         // U+00E3: "" LATIN SMALL LETTER A WITH TILDE
   1699         // U+0101: "" LATIN SMALL LETTER A WITH MACRON
   1700         /* 0 */ "\u00E1,\u00E4,\u00E6,\u00E5,\u00E0,\u00E2,\u00E3,\u0101",
   1701         // U+00E9: "" LATIN SMALL LETTER E WITH ACUTE
   1702         // U+00EB: "" LATIN SMALL LETTER E WITH DIAERESIS
   1703         // U+00E8: "" LATIN SMALL LETTER E WITH GRAVE
   1704         // U+00EA: "" LATIN SMALL LETTER E WITH CIRCUMFLEX
   1705         // U+0119: "" LATIN SMALL LETTER E WITH OGONEK
   1706         // U+0117: "" LATIN SMALL LETTER E WITH DOT ABOVE
   1707         // U+0113: "" LATIN SMALL LETTER E WITH MACRON
   1708         /* 1 */ "\u00E9,\u00EB,\u00E8,\u00EA,\u0119,\u0117,\u0113",
   1709         // U+00ED: "" LATIN SMALL LETTER I WITH ACUTE
   1710         // U+00EF: "" LATIN SMALL LETTER I WITH DIAERESIS
   1711         // U+00EE: "" LATIN SMALL LETTER I WITH CIRCUMFLEX
   1712         // U+00EC: "" LATIN SMALL LETTER I WITH GRAVE
   1713         // U+012F: "" LATIN SMALL LETTER I WITH OGONEK
   1714         // U+012B: "" LATIN SMALL LETTER I WITH MACRON
   1715         /* 2 */ "\u00ED,\u00EF,\u00EE,\u00EC,\u012F,\u012B",
   1716         // U+00F3: "" LATIN SMALL LETTER O WITH ACUTE
   1717         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
   1718         // U+00F4: "" LATIN SMALL LETTER O WITH CIRCUMFLEX
   1719         // U+00F2: "" LATIN SMALL LETTER O WITH GRAVE
   1720         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
   1721         // U+0153: "" LATIN SMALL LIGATURE OE
   1722         // U+00F8: "" LATIN SMALL LETTER O WITH STROKE
   1723         // U+014D: "" LATIN SMALL LETTER O WITH MACRON
   1724         /* 3 */ "\u00F3,\u00F6,\u00F4,\u00F2,\u00F5,\u0153,\u00F8,\u014D",
   1725         // U+00FA: "" LATIN SMALL LETTER U WITH ACUTE
   1726         // U+00FC: "" LATIN SMALL LETTER U WITH DIAERESIS
   1727         // U+00FB: "" LATIN SMALL LETTER U WITH CIRCUMFLEX
   1728         // U+00F9: "" LATIN SMALL LETTER U WITH GRAVE
   1729         // U+016B: "" LATIN SMALL LETTER U WITH MACRON
   1730         /* 4 */ "\u00FA,\u00FC,\u00FB,\u00F9,\u016B",
   1731         /* 5~ */
   1732         null, null, null,
   1733         /* ~7 */
   1734         // U+00FD: "" LATIN SMALL LETTER Y WITH ACUTE
   1735         // U+00FF: "" LATIN SMALL LETTER Y WITH DIAERESIS
   1736         /* 8 */ "\u00FD,\u00FF",
   1737         // U+00F0: "" LATIN SMALL LETTER ETH
   1738         /* 9 */ "\u00F0",
   1739         /* 10 */ null,
   1740         // U+00FE: "" LATIN SMALL LETTER THORN
   1741         /* 11 */ "\u00FE",
   1742         /* 12~ */
   1743         null, null, null, null, null, null, null, null,
   1744         /* ~19 */
   1745         // U+00F0: "" LATIN SMALL LETTER ETH
   1746         /* 20 */ "\u00F0",
   1747         // U+00E6: "" LATIN SMALL LETTER AE
   1748         /* 21 */ "\u00E6",
   1749         // U+00FE: "" LATIN SMALL LETTER THORN
   1750         /* 22 */ "\u00FE",
   1751         /* 23~ */
   1752         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   1753         null, null, null, null, null,
   1754         /* ~42 */
   1755         /* 43 */ "!text/single_9qm_lqm",
   1756         /* 44 */ "!text/double_9qm_lqm",
   1757     };
   1758 
   1759     /* Language it: Italian */
   1760     private static final String[] LANGUAGE_it = {
   1761         // U+00E0: "" LATIN SMALL LETTER A WITH GRAVE
   1762         // U+00E1: "" LATIN SMALL LETTER A WITH ACUTE
   1763         // U+00E2: "" LATIN SMALL LETTER A WITH CIRCUMFLEX
   1764         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
   1765         // U+00E6: "" LATIN SMALL LETTER AE
   1766         // U+00E3: "" LATIN SMALL LETTER A WITH TILDE
   1767         // U+00E5: "" LATIN SMALL LETTER A WITH RING ABOVE
   1768         // U+0101: "" LATIN SMALL LETTER A WITH MACRON
   1769         // U+00AA: "" FEMININE ORDINAL INDICATOR
   1770         /* 0 */ "\u00E0,\u00E1,\u00E2,\u00E4,\u00E6,\u00E3,\u00E5,\u0101,\u00AA",
   1771         // U+00E8: "" LATIN SMALL LETTER E WITH GRAVE
   1772         // U+00E9: "" LATIN SMALL LETTER E WITH ACUTE
   1773         // U+00EA: "" LATIN SMALL LETTER E WITH CIRCUMFLEX
   1774         // U+00EB: "" LATIN SMALL LETTER E WITH DIAERESIS
   1775         // U+0119: "" LATIN SMALL LETTER E WITH OGONEK
   1776         // U+0117: "" LATIN SMALL LETTER E WITH DOT ABOVE
   1777         // U+0113: "" LATIN SMALL LETTER E WITH MACRON
   1778         /* 1 */ "\u00E8,\u00E9,\u00EA,\u00EB,\u0119,\u0117,\u0113",
   1779         // U+00EC: "" LATIN SMALL LETTER I WITH GRAVE
   1780         // U+00ED: "" LATIN SMALL LETTER I WITH ACUTE
   1781         // U+00EE: "" LATIN SMALL LETTER I WITH CIRCUMFLEX
   1782         // U+00EF: "" LATIN SMALL LETTER I WITH DIAERESIS
   1783         // U+012F: "" LATIN SMALL LETTER I WITH OGONEK
   1784         // U+012B: "" LATIN SMALL LETTER I WITH MACRON
   1785         /* 2 */ "\u00EC,\u00ED,\u00EE,\u00EF,\u012F,\u012B",
   1786         // U+00F2: "" LATIN SMALL LETTER O WITH GRAVE
   1787         // U+00F3: "" LATIN SMALL LETTER O WITH ACUTE
   1788         // U+00F4: "" LATIN SMALL LETTER O WITH CIRCUMFLEX
   1789         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
   1790         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
   1791         // U+0153: "" LATIN SMALL LIGATURE OE
   1792         // U+00F8: "" LATIN SMALL LETTER O WITH STROKE
   1793         // U+014D: "" LATIN SMALL LETTER O WITH MACRON
   1794         // U+00BA: "" MASCULINE ORDINAL INDICATOR
   1795         /* 3 */ "\u00F2,\u00F3,\u00F4,\u00F6,\u00F5,\u0153,\u00F8,\u014D,\u00BA",
   1796         // U+00F9: "" LATIN SMALL LETTER U WITH GRAVE
   1797         // U+00FA: "" LATIN SMALL LETTER U WITH ACUTE
   1798         // U+00FB: "" LATIN SMALL LETTER U WITH CIRCUMFLEX
   1799         // U+00FC: "" LATIN SMALL LETTER U WITH DIAERESIS
   1800         // U+016B: "" LATIN SMALL LETTER U WITH MACRON
   1801         /* 4 */ "\u00F9,\u00FA,\u00FB,\u00FC,\u016B",
   1802     };
   1803 
   1804     /* Language iw: Hebrew */
   1805     private static final String[] LANGUAGE_iw = {
   1806         /* 0~ */
   1807         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   1808         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   1809         null, null, null, null, null, null, null, null, null, null, null, null,
   1810         /* ~41 */
   1811         // Label for "switch to alphabetic" key.
   1812         // U+05D0: "" HEBREW LETTER ALEF
   1813         // U+05D1: "" HEBREW LETTER BET
   1814         // U+05D2: "" HEBREW LETTER GIMEL
   1815         /* 42 */ "\u05D0\u05D1\u05D2",
   1816         // The following characters don't need BIDI mirroring.
   1817         // U+2018: "" LEFT SINGLE QUOTATION MARK
   1818         // U+2019: "" RIGHT SINGLE QUOTATION MARK
   1819         // U+201A: "" SINGLE LOW-9 QUOTATION MARK
   1820         // U+201C: "" LEFT DOUBLE QUOTATION MARK
   1821         // U+201D: "" RIGHT DOUBLE QUOTATION MARK
   1822         // U+201E: "" DOUBLE LOW-9 QUOTATION MARK
   1823         /* 43 */ "\u2018,\u2019,\u201A",
   1824         /* 44 */ "\u201C,\u201D,\u201E",
   1825         /* 45 */ "!text/single_laqm_raqm_rtl",
   1826         /* 46 */ "!text/double_laqm_raqm_rtl",
   1827         /* 47~ */
   1828         null, null, null, null,
   1829         /* ~50 */
   1830         // U+2605: "" BLACK STAR
   1831         /* 51 */ "\u2605",
   1832         /* 52 */ null,
   1833         // U+00B1: "" PLUS-MINUS SIGN
   1834         // U+FB29: "" HEBREW LETTER ALTERNATIVE PLUS SIGN
   1835         /* 53 */ "\u00B1,\uFB29",
   1836         // The all letters need to be mirrored are found at
   1837         // http://www.unicode.org/Public/6.1.0/ucd/BidiMirroring.txt
   1838         /* 54 */ "!fixedColumnOrder!3,<|>,{|},[|]",
   1839         /* 55 */ "!fixedColumnOrder!3,>|<,}|{,]|[",
   1840         // U+2264: "" LESS-THAN OR EQUAL TO
   1841         // U+2265: "" GREATER-THAN EQUAL TO
   1842         // U+00AB: "" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
   1843         // U+00BB: "" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
   1844         // U+2039: "" SINGLE LEFT-POINTING ANGLE QUOTATION MARK
   1845         // U+203A: "" SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
   1846         /* 56 */ "!fixedColumnOrder!3,\u2039|\u203A,\u2264|\u2265,\u00AB|\u00BB",
   1847         /* 57 */ "!fixedColumnOrder!3,\u203A|\u2039,\u2265|\u2264,\u00BB|\u00AB",
   1848     };
   1849 
   1850     /* Language ka: Georgian */
   1851     private static final String[] LANGUAGE_ka = {
   1852         /* 0~ */
   1853         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   1854         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   1855         null, null, null, null, null, null, null, null, null, null, null, null,
   1856         /* ~41 */
   1857         // Label for "switch to alphabetic" key.
   1858         // U+10D0: "" GEORGIAN LETTER AN
   1859         // U+10D1: "" GEORGIAN LETTER BAN
   1860         // U+10D2: "" GEORGIAN LETTER GAN
   1861         /* 42 */ "\u10D0\u10D1\u10D2",
   1862         /* 43 */ "!text/single_9qm_lqm",
   1863         /* 44 */ "!text/double_9qm_lqm",
   1864     };
   1865 
   1866     /* Language ky: Kirghiz */
   1867     private static final String[] LANGUAGE_ky = {
   1868         /* 0~ */
   1869         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   1870         null, null, null, null, null, null, null, null, null, null,
   1871         /* ~24 */
   1872         // U+0449: "" CYRILLIC SMALL LETTER SHCHA
   1873         /* 25 */ "\u0449",
   1874         // U+044A: "" CYRILLIC SMALL LETTER HARD SIGN
   1875         /* 26 */ "\u044A",
   1876         // U+044B: "" CYRILLIC SMALL LETTER YERU
   1877         /* 27 */ "\u044B",
   1878         // U+044D: "" CYRILLIC SMALL LETTER E
   1879         /* 28 */ "\u044D",
   1880         // U+0438: "" CYRILLIC SMALL LETTER I
   1881         /* 29 */ "\u0438",
   1882         // U+04AF: "" CYRILLIC SMALL LETTER STRAIGHT U
   1883         /* 30 */ "\u04AF",
   1884         // U+04A3: "" CYRILLIC SMALL LETTER EN WITH DESCENDER
   1885         /* 31 */ "\u04A3",
   1886         /* 32 */ null,
   1887         /* 33 */ null,
   1888         // U+04E9: "" CYRILLIC SMALL LETTER BARRED O
   1889         /* 34 */ "\u04E9",
   1890         // U+044A: "" CYRILLIC SMALL LETTER HARD SIGN
   1891         /* 35 */ "\u044A",
   1892         /* 36~ */
   1893         null, null, null, null,
   1894         /* ~39 */
   1895         // U+0451: "" CYRILLIC SMALL LETTER IO
   1896         /* 40 */ "\u0451",
   1897         /* 41 */ null,
   1898         // Label for "switch to alphabetic" key.
   1899         // U+0410: "" CYRILLIC CAPITAL LETTER A
   1900         // U+0411: "" CYRILLIC CAPITAL LETTER BE
   1901         // U+0412: "" CYRILLIC CAPITAL LETTER VE
   1902         /* 42 */ "\u0410\u0411\u0412",
   1903     };
   1904 
   1905     /* Language lt: Lithuanian */
   1906     private static final String[] LANGUAGE_lt = {
   1907         // U+0105: "" LATIN SMALL LETTER A WITH OGONEK
   1908         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
   1909         // U+0101: "" LATIN SMALL LETTER A WITH MACRON
   1910         // U+00E0: "" LATIN SMALL LETTER A WITH GRAVE
   1911         // U+00E1: "" LATIN SMALL LETTER A WITH ACUTE
   1912         // U+00E2: "" LATIN SMALL LETTER A WITH CIRCUMFLEX
   1913         // U+00E3: "" LATIN SMALL LETTER A WITH TILDE
   1914         // U+00E5: "" LATIN SMALL LETTER A WITH RING ABOVE
   1915         // U+00E6: "" LATIN SMALL LETTER AE
   1916         /* 0 */ "\u0105,\u00E4,\u0101,\u00E0,\u00E1,\u00E2,\u00E3,\u00E5,\u00E6",
   1917         // U+0117: "" LATIN SMALL LETTER E WITH DOT ABOVE
   1918         // U+0119: "" LATIN SMALL LETTER E WITH OGONEK
   1919         // U+0113: "" LATIN SMALL LETTER E WITH MACRON
   1920         // U+00E8: "" LATIN SMALL LETTER E WITH GRAVE
   1921         // U+00E9: "" LATIN SMALL LETTER E WITH ACUTE
   1922         // U+00EA: "" LATIN SMALL LETTER E WITH CIRCUMFLEX
   1923         // U+00EB: "" LATIN SMALL LETTER E WITH DIAERESIS
   1924         // U+011B: "" LATIN SMALL LETTER E WITH CARON
   1925         /* 1 */ "\u0117,\u0119,\u0113,\u00E8,\u00E9,\u00EA,\u00EB,\u011B",
   1926         // U+012F: "" LATIN SMALL LETTER I WITH OGONEK
   1927         // U+012B: "" LATIN SMALL LETTER I WITH MACRON
   1928         // U+00EC: "" LATIN SMALL LETTER I WITH GRAVE
   1929         // U+00ED: "" LATIN SMALL LETTER I WITH ACUTE
   1930         // U+00EE: "" LATIN SMALL LETTER I WITH CIRCUMFLEX
   1931         // U+00EF: "" LATIN SMALL LETTER I WITH DIAERESIS
   1932         // U+0131: "" LATIN SMALL LETTER DOTLESS I
   1933         /* 2 */ "\u012F,\u012B,\u00EC,\u00ED,\u00EE,\u00EF,\u0131",
   1934         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
   1935         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
   1936         // U+00F2: "" LATIN SMALL LETTER O WITH GRAVE
   1937         // U+00F3: "" LATIN SMALL LETTER O WITH ACUTE
   1938         // U+00F4: "" LATIN SMALL LETTER O WITH CIRCUMFLEX
   1939         // U+0153: "" LATIN SMALL LIGATURE OE
   1940         // U+0151: "" LATIN SMALL LETTER O WITH DOUBLE ACUTE
   1941         // U+00F8: "" LATIN SMALL LETTER O WITH STROKE
   1942         /* 3 */ "\u00F6,\u00F5,\u00F2,\u00F3,\u00F4,\u0153,\u0151,\u00F8",
   1943         // U+016B: "" LATIN SMALL LETTER U WITH MACRON
   1944         // U+0173: "" LATIN SMALL LETTER U WITH OGONEK
   1945         // U+00FC: "" LATIN SMALL LETTER U WITH DIAERESIS
   1946         // U+016B: "" LATIN SMALL LETTER U WITH MACRON
   1947         // U+00F9: "" LATIN SMALL LETTER U WITH GRAVE
   1948         // U+00FA: "" LATIN SMALL LETTER U WITH ACUTE
   1949         // U+00FB: "" LATIN SMALL LETTER U WITH CIRCUMFLEX
   1950         // U+016F: "" LATIN SMALL LETTER U WITH RING ABOVE
   1951         // U+0171: "" LATIN SMALL LETTER U WITH DOUBLE ACUTE
   1952         /* 4 */ "\u016B,\u0173,\u00FC,\u016B,\u00F9,\u00FA,\u00FB,\u016F,\u0171",
   1953         // U+0161: "" LATIN SMALL LETTER S WITH CARON
   1954         // U+00DF: "" LATIN SMALL LETTER SHARP S
   1955         // U+015B: "" LATIN SMALL LETTER S WITH ACUTE
   1956         // U+015F: "" LATIN SMALL LETTER S WITH CEDILLA
   1957         /* 5 */ "\u0161,\u00DF,\u015B,\u015F",
   1958         // U+0146: "" LATIN SMALL LETTER N WITH CEDILLA
   1959         // U+00F1: "" LATIN SMALL LETTER N WITH TILDE
   1960         // U+0144: "" LATIN SMALL LETTER N WITH ACUTE
   1961         // U+0144: "" LATIN SMALL LETTER N WITH ACUTE
   1962         /* 6 */ "\u0146,\u00F1,\u0144,\u0144",
   1963         // U+010D: "" LATIN SMALL LETTER C WITH CARON
   1964         // U+00E7: "" LATIN SMALL LETTER C WITH CEDILLA
   1965         // U+0107: "" LATIN SMALL LETTER C WITH ACUTE
   1966         /* 7 */ "\u010D,\u00E7,\u0107",
   1967         // U+00FD: "" LATIN SMALL LETTER Y WITH ACUTE
   1968         // U+00FF: "" LATIN SMALL LETTER Y WITH DIAERESIS
   1969         /* 8 */ "\u00FD,\u00FF",
   1970         // U+010F: "" LATIN SMALL LETTER D WITH CARON
   1971         /* 9 */ "\u010F",
   1972         // U+0157: "" LATIN SMALL LETTER R WITH CEDILLA
   1973         // U+0159: "" LATIN SMALL LETTER R WITH CARON
   1974         // U+0155: "" LATIN SMALL LETTER R WITH ACUTE
   1975         /* 10 */ "\u0157,\u0159,\u0155",
   1976         // U+0163: "" LATIN SMALL LETTER T WITH CEDILLA
   1977         // U+0165: "" LATIN SMALL LETTER T WITH CARON
   1978         /* 11 */ "\u0163,\u0165",
   1979         // U+017E: "" LATIN SMALL LETTER Z WITH CARON
   1980         // U+017C: "" LATIN SMALL LETTER Z WITH DOT ABOVE
   1981         // U+017A: "" LATIN SMALL LETTER Z WITH ACUTE
   1982         /* 12 */ "\u017E,\u017C,\u017A",
   1983         // U+0137: "" LATIN SMALL LETTER K WITH CEDILLA
   1984         /* 13 */ "\u0137",
   1985         // U+013C: "" LATIN SMALL LETTER L WITH CEDILLA
   1986         // U+0142: "" LATIN SMALL LETTER L WITH STROKE
   1987         // U+013A: "" LATIN SMALL LETTER L WITH ACUTE
   1988         // U+013E: "" LATIN SMALL LETTER L WITH CARON
   1989         /* 14 */ "\u013C,\u0142,\u013A,\u013E",
   1990         // U+0123: "" LATIN SMALL LETTER G WITH CEDILLA
   1991         // U+011F: "" LATIN SMALL LETTER G WITH BREVE
   1992         /* 15 */ "\u0123,\u011F",
   1993         /* 16~ */
   1994         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   1995         null, null, null, null, null, null, null, null, null, null, null, null,
   1996         /* ~42 */
   1997         /* 43 */ "!text/single_9qm_lqm",
   1998         /* 44 */ "!text/double_9qm_lqm",
   1999     };
   2000 
   2001     /* Language lv: Latvian */
   2002     private static final String[] LANGUAGE_lv = {
   2003         // U+0101: "" LATIN SMALL LETTER A WITH MACRON
   2004         // U+00E0: "" LATIN SMALL LETTER A WITH GRAVE
   2005         // U+00E1: "" LATIN SMALL LETTER A WITH ACUTE
   2006         // U+00E2: "" LATIN SMALL LETTER A WITH CIRCUMFLEX
   2007         // U+00E3: "" LATIN SMALL LETTER A WITH TILDE
   2008         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
   2009         // U+00E5: "" LATIN SMALL LETTER A WITH RING ABOVE
   2010         // U+00E6: "" LATIN SMALL LETTER AE
   2011         // U+0105: "" LATIN SMALL LETTER A WITH OGONEK
   2012         /* 0 */ "\u0101,\u00E0,\u00E1,\u00E2,\u00E3,\u00E4,\u00E5,\u00E6,\u0105",
   2013         // U+0113: "" LATIN SMALL LETTER E WITH MACRON
   2014         // U+0117: "" LATIN SMALL LETTER E WITH DOT ABOVE
   2015         // U+00E8: "" LATIN SMALL LETTER E WITH GRAVE
   2016         // U+00E9: "" LATIN SMALL LETTER E WITH ACUTE
   2017         // U+00EA: "" LATIN SMALL LETTER E WITH CIRCUMFLEX
   2018         // U+00EB: "" LATIN SMALL LETTER E WITH DIAERESIS
   2019         // U+0119: "" LATIN SMALL LETTER E WITH OGONEK
   2020         // U+011B: "" LATIN SMALL LETTER E WITH CARON
   2021         /* 1 */ "\u0113,\u0117,\u00E8,\u00E9,\u00EA,\u00EB,\u0119,\u011B",
   2022         // U+012B: "" LATIN SMALL LETTER I WITH MACRON
   2023         // U+012F: "" LATIN SMALL LETTER I WITH OGONEK
   2024         // U+00EC: "" LATIN SMALL LETTER I WITH GRAVE
   2025         // U+00ED: "" LATIN SMALL LETTER I WITH ACUTE
   2026         // U+00EE: "" LATIN SMALL LETTER I WITH CIRCUMFLEX
   2027         // U+00EF: "" LATIN SMALL LETTER I WITH DIAERESIS
   2028         // U+0131: "" LATIN SMALL LETTER DOTLESS I
   2029         /* 2 */ "\u012B,\u012F,\u00EC,\u00ED,\u00EE,\u00EF,\u0131",
   2030         // U+00F2: "" LATIN SMALL LETTER O WITH GRAVE
   2031         // U+00F3: "" LATIN SMALL LETTER O WITH ACUTE
   2032         // U+00F4: "" LATIN SMALL LETTER O WITH CIRCUMFLEX
   2033         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
   2034         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
   2035         // U+0153: "" LATIN SMALL LIGATURE OE
   2036         // U+0151: "" LATIN SMALL LETTER O WITH DOUBLE ACUTE
   2037         // U+00F8: "" LATIN SMALL LETTER O WITH STROKE
   2038         /* 3 */ "\u00F2,\u00F3,\u00F4,\u00F5,\u00F6,\u0153,\u0151,\u00F8",
   2039         // U+016B: "" LATIN SMALL LETTER U WITH MACRON
   2040         // U+0173: "" LATIN SMALL LETTER U WITH OGONEK
   2041         // U+00F9: "" LATIN SMALL LETTER U WITH GRAVE
   2042         // U+00FA: "" LATIN SMALL LETTER U WITH ACUTE
   2043         // U+00FB: "" LATIN SMALL LETTER U WITH CIRCUMFLEX
   2044         // U+00FC: "" LATIN SMALL LETTER U WITH DIAERESIS
   2045         // U+016F: "" LATIN SMALL LETTER U WITH RING ABOVE
   2046         // U+0171: "" LATIN SMALL LETTER U WITH DOUBLE ACUTE
   2047         /* 4 */ "\u016B,\u0173,\u00F9,\u00FA,\u00FB,\u00FC,\u016F,\u0171",
   2048         // U+0161: "" LATIN SMALL LETTER S WITH CARON
   2049         // U+00DF: "" LATIN SMALL LETTER SHARP S
   2050         // U+015B: "" LATIN SMALL LETTER S WITH ACUTE
   2051         // U+015F: "" LATIN SMALL LETTER S WITH CEDILLA
   2052         /* 5 */ "\u0161,\u00DF,\u015B,\u015F",
   2053         // U+0146: "" LATIN SMALL LETTER N WITH CEDILLA
   2054         // U+00F1: "" LATIN SMALL LETTER N WITH TILDE
   2055         // U+0144: "" LATIN SMALL LETTER N WITH ACUTE
   2056         // U+0144: "" LATIN SMALL LETTER N WITH ACUTE
   2057         /* 6 */ "\u0146,\u00F1,\u0144,\u0144",
   2058         // U+010D: "" LATIN SMALL LETTER C WITH CARON
   2059         // U+00E7: "" LATIN SMALL LETTER C WITH CEDILLA
   2060         // U+0107: "" LATIN SMALL LETTER C WITH ACUTE
   2061         /* 7 */ "\u010D,\u00E7,\u0107",
   2062         // U+00FD: "" LATIN SMALL LETTER Y WITH ACUTE
   2063         // U+00FF: "" LATIN SMALL LETTER Y WITH DIAERESIS
   2064         /* 8 */ "\u00FD,\u00FF",
   2065         // U+010F: "" LATIN SMALL LETTER D WITH CARON
   2066         /* 9 */ "\u010F",
   2067         // U+0157: "" LATIN SMALL LETTER R WITH CEDILLA
   2068         // U+0159: "" LATIN SMALL LETTER R WITH CARON
   2069         // U+0155: "" LATIN SMALL LETTER R WITH ACUTE
   2070         /* 10 */ "\u0157,\u0159,\u0155",
   2071         // U+0163: "" LATIN SMALL LETTER T WITH CEDILLA
   2072         // U+0165: "" LATIN SMALL LETTER T WITH CARON
   2073         /* 11 */ "\u0163,\u0165",
   2074         // U+017E: "" LATIN SMALL LETTER Z WITH CARON
   2075         // U+017C: "" LATIN SMALL LETTER Z WITH DOT ABOVE
   2076         // U+017A: "" LATIN SMALL LETTER Z WITH ACUTE
   2077         /* 12 */ "\u017E,\u017C,\u017A",
   2078         // U+0137: "" LATIN SMALL LETTER K WITH CEDILLA
   2079         /* 13 */ "\u0137",
   2080         // U+013C: "" LATIN SMALL LETTER L WITH CEDILLA
   2081         // U+0142: "" LATIN SMALL LETTER L WITH STROKE
   2082         // U+013A: "" LATIN SMALL LETTER L WITH ACUTE
   2083         // U+013E: "" LATIN SMALL LETTER L WITH CARON
   2084         /* 14 */ "\u013C,\u0142,\u013A,\u013E",
   2085         // U+0123: "" LATIN SMALL LETTER G WITH CEDILLA
   2086         // U+011F: "" LATIN SMALL LETTER G WITH BREVE
   2087         /* 15 */ "\u0123,\u011F",
   2088         /* 16~ */
   2089         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2090         null, null, null, null, null, null, null, null, null, null, null, null,
   2091         /* ~42 */
   2092         /* 43 */ "!text/single_9qm_lqm",
   2093         /* 44 */ "!text/double_9qm_lqm",
   2094     };
   2095 
   2096     /* Language mk: Macedonian */
   2097     private static final String[] LANGUAGE_mk = {
   2098         /* 0~ */
   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,
   2102         /* ~35 */
   2103         // U+0455: "" CYRILLIC SMALL LETTER DZE
   2104         /* 36 */ "\u0455",
   2105         // U+045C: "" CYRILLIC SMALL LETTER KJE
   2106         /* 37 */ "\u045C",
   2107         // U+0437: "" CYRILLIC SMALL LETTER ZE
   2108         /* 38 */ "\u0437",
   2109         // U+0453: "" CYRILLIC SMALL LETTER GJE
   2110         /* 39 */ "\u0453",
   2111         // U+0450: "" CYRILLIC SMALL LETTER IE WITH GRAVE
   2112         /* 40 */ "\u0450",
   2113         // U+045D: "" CYRILLIC SMALL LETTER I WITH GRAVE
   2114         /* 41 */ "\u045D",
   2115         // Label for "switch to alphabetic" key.
   2116         // U+0410: "" CYRILLIC CAPITAL LETTER A
   2117         // U+0411: "" CYRILLIC CAPITAL LETTER BE
   2118         // U+0412: "" CYRILLIC CAPITAL LETTER VE
   2119         /* 42 */ "\u0410\u0411\u0412",
   2120         /* 43 */ "!text/single_9qm_lqm",
   2121         /* 44 */ "!text/double_9qm_lqm",
   2122     };
   2123 
   2124     /* Language mn: Mongolian */
   2125     private static final String[] LANGUAGE_mn = {
   2126         /* 0~ */
   2127         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2128         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2129         null, null, null, null, null, null, null, null, null, null, null, null,
   2130         /* ~41 */
   2131         // Label for "switch to alphabetic" key.
   2132         // U+0410: "" CYRILLIC CAPITAL LETTER A
   2133         // U+0411: "" CYRILLIC CAPITAL LETTER BE
   2134         // U+0412: "" CYRILLIC CAPITAL LETTER VE
   2135         /* 42 */ "\u0410\u0411\u0412",
   2136         /* 43~ */
   2137         null, null, null, null, null,
   2138         /* ~47 */
   2139         // U+20AE: "" TUGRIK SIGN
   2140         /* 48 */ "\u20AE",
   2141     };
   2142 
   2143     /* Language nb: Norwegian Bokml */
   2144     private static final String[] LANGUAGE_nb = {
   2145         // U+00E0: "" LATIN SMALL LETTER A WITH GRAVE
   2146         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
   2147         // U+00E1: "" LATIN SMALL LETTER A WITH ACUTE
   2148         // U+00E2: "" LATIN SMALL LETTER A WITH CIRCUMFLEX
   2149         // U+00E3: "" LATIN SMALL LETTER A WITH TILDE
   2150         // U+0101: "" LATIN SMALL LETTER A WITH MACRON
   2151         /* 0 */ "\u00E0,\u00E4,\u00E1,\u00E2,\u00E3,\u0101",
   2152         // U+00E9: "" LATIN SMALL LETTER E WITH ACUTE
   2153         // U+00E8: "" LATIN SMALL LETTER E WITH GRAVE
   2154         // U+00EA: "" LATIN SMALL LETTER E WITH CIRCUMFLEX
   2155         // U+00EB: "" LATIN SMALL LETTER E WITH DIAERESIS
   2156         // U+0119: "" LATIN SMALL LETTER E WITH OGONEK
   2157         // U+0117: "" LATIN SMALL LETTER E WITH DOT ABOVE
   2158         // U+0113: "" LATIN SMALL LETTER E WITH MACRON
   2159         /* 1 */ "\u00E9,\u00E8,\u00EA,\u00EB,\u0119,\u0117,\u0113",
   2160         /* 2 */ null,
   2161         // U+00F4: "" LATIN SMALL LETTER O WITH CIRCUMFLEX
   2162         // U+00F2: "" LATIN SMALL LETTER O WITH GRAVE
   2163         // U+00F3: "" LATIN SMALL LETTER O WITH ACUTE
   2164         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
   2165         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
   2166         // U+0153: "" LATIN SMALL LIGATURE OE
   2167         // U+014D: "" LATIN SMALL LETTER O WITH MACRON
   2168         /* 3 */ "\u00F4,\u00F2,\u00F3,\u00F6,\u00F5,\u0153,\u014D",
   2169         // U+00FC: "" LATIN SMALL LETTER U WITH DIAERESIS
   2170         // U+00FB: "" LATIN SMALL LETTER U WITH CIRCUMFLEX
   2171         // U+00F9: "" LATIN SMALL LETTER U WITH GRAVE
   2172         // U+00FA: "" LATIN SMALL LETTER U WITH ACUTE
   2173         // U+016B: "" LATIN SMALL LETTER U WITH MACRON
   2174         /* 4 */ "\u00FC,\u00FB,\u00F9,\u00FA,\u016B",
   2175         /* 5~ */
   2176         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2177         /* ~19 */
   2178         // U+00E5: "" LATIN SMALL LETTER A WITH RING ABOVE
   2179         /* 20 */ "\u00E5",
   2180         // U+00F8: "" LATIN SMALL LETTER O WITH STROKE
   2181         /* 21 */ "\u00F8",
   2182         // U+00E6: "" LATIN SMALL LETTER AE
   2183         /* 22 */ "\u00E6",
   2184         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
   2185         /* 23 */ "\u00F6",
   2186         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
   2187         /* 24 */ "\u00E4",
   2188         /* 25~ */
   2189         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2190         null, null, null,
   2191         /* ~42 */
   2192         /* 43 */ "!text/single_9qm_rqm",
   2193         /* 44 */ "!text/double_9qm_rqm",
   2194     };
   2195 
   2196     /* Language nl: Dutch */
   2197     private static final String[] LANGUAGE_nl = {
   2198         // U+00E1: "" LATIN SMALL LETTER A WITH ACUTE
   2199         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
   2200         // U+00E2: "" LATIN SMALL LETTER A WITH CIRCUMFLEX
   2201         // U+00E0: "" LATIN SMALL LETTER A WITH GRAVE
   2202         // U+00E6: "" LATIN SMALL LETTER AE
   2203         // U+00E3: "" LATIN SMALL LETTER A WITH TILDE
   2204         // U+00E5: "" LATIN SMALL LETTER A WITH RING ABOVE
   2205         // U+0101: "" LATIN SMALL LETTER A WITH MACRON
   2206         /* 0 */ "\u00E1,\u00E4,\u00E2,\u00E0,\u00E6,\u00E3,\u00E5,\u0101",
   2207         // U+00E9: "" LATIN SMALL LETTER E WITH ACUTE
   2208         // U+00EB: "" LATIN SMALL LETTER E WITH DIAERESIS
   2209         // U+00EA: "" LATIN SMALL LETTER E WITH CIRCUMFLEX
   2210         // U+00E8: "" LATIN SMALL LETTER E WITH GRAVE
   2211         // U+0119: "" LATIN SMALL LETTER E WITH OGONEK
   2212         // U+0117: "" LATIN SMALL LETTER E WITH DOT ABOVE
   2213         // U+0113: "" LATIN SMALL LETTER E WITH MACRON
   2214         /* 1 */ "\u00E9,\u00EB,\u00EA,\u00E8,\u0119,\u0117,\u0113",
   2215         // U+00ED: "" LATIN SMALL LETTER I WITH ACUTE
   2216         // U+00EF: "" LATIN SMALL LETTER I WITH DIAERESIS
   2217         // U+00EC: "" LATIN SMALL LETTER I WITH GRAVE
   2218         // U+00EE: "" LATIN SMALL LETTER I WITH CIRCUMFLEX
   2219         // U+012F: "" LATIN SMALL LETTER I WITH OGONEK
   2220         // U+012B: "" LATIN SMALL LETTER I WITH MACRON
   2221         // U+0133: "" LATIN SMALL LIGATURE IJ
   2222         /* 2 */ "\u00ED,\u00EF,\u00EC,\u00EE,\u012F,\u012B,\u0133",
   2223         // U+00F3: "" LATIN SMALL LETTER O WITH ACUTE
   2224         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
   2225         // U+00F4: "" LATIN SMALL LETTER O WITH CIRCUMFLEX
   2226         // U+00F2: "" LATIN SMALL LETTER O WITH GRAVE
   2227         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
   2228         // U+0153: "" LATIN SMALL LIGATURE OE
   2229         // U+00F8: "" LATIN SMALL LETTER O WITH STROKE
   2230         // U+014D: "" LATIN SMALL LETTER O WITH MACRON
   2231         /* 3 */ "\u00F3,\u00F6,\u00F4,\u00F2,\u00F5,\u0153,\u00F8,\u014D",
   2232         // U+00FA: "" LATIN SMALL LETTER U WITH ACUTE
   2233         // U+00FC: "" LATIN SMALL LETTER U WITH DIAERESIS
   2234         // U+00FB: "" LATIN SMALL LETTER U WITH CIRCUMFLEX
   2235         // U+00F9: "" LATIN SMALL LETTER U WITH GRAVE
   2236         // U+016B: "" LATIN SMALL LETTER U WITH MACRON
   2237         /* 4 */ "\u00FA,\u00FC,\u00FB,\u00F9,\u016B",
   2238         /* 5 */ null,
   2239         // U+00F1: "" LATIN SMALL LETTER N WITH TILDE
   2240         // U+0144: "" LATIN SMALL LETTER N WITH ACUTE
   2241         /* 6 */ "\u00F1,\u0144",
   2242         /* 7 */ null,
   2243         // U+0133: "" LATIN SMALL LIGATURE IJ
   2244         /* 8 */ "\u0133",
   2245         /* 9~ */
   2246         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2247         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2248         null, null, null, null,
   2249         /* ~42 */
   2250         /* 43 */ "!text/single_9qm_rqm",
   2251         /* 44 */ "!text/double_9qm_rqm",
   2252     };
   2253 
   2254     /* Language pl: Polish */
   2255     private static final String[] LANGUAGE_pl = {
   2256         // U+0105: "" LATIN SMALL LETTER A WITH OGONEK
   2257         // U+00E1: "" LATIN SMALL LETTER A WITH ACUTE
   2258         // U+00E0: "" LATIN SMALL LETTER A WITH GRAVE
   2259         // U+00E2: "" LATIN SMALL LETTER A WITH CIRCUMFLEX
   2260         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
   2261         // U+00E6: "" LATIN SMALL LETTER AE
   2262         // U+00E3: "" LATIN SMALL LETTER A WITH TILDE
   2263         // U+00E5: "" LATIN SMALL LETTER A WITH RING ABOVE
   2264         // U+0101: "" LATIN SMALL LETTER A WITH MACRON
   2265         /* 0 */ "\u0105,\u00E1,\u00E0,\u00E2,\u00E4,\u00E6,\u00E3,\u00E5,\u0101",
   2266         // U+0119: "" LATIN SMALL LETTER E WITH OGONEK
   2267         // U+00E8: "" LATIN SMALL LETTER E WITH GRAVE
   2268         // U+00E9: "" LATIN SMALL LETTER E WITH ACUTE
   2269         // U+00EA: "" LATIN SMALL LETTER E WITH CIRCUMFLEX
   2270         // U+00EB: "" LATIN SMALL LETTER E WITH DIAERESIS
   2271         // U+0117: "" LATIN SMALL LETTER E WITH DOT ABOVE
   2272         // U+0113: "" LATIN SMALL LETTER E WITH MACRON
   2273         /* 1 */ "\u0119,\u00E8,\u00E9,\u00EA,\u00EB,\u0117,\u0113",
   2274         /* 2 */ null,
   2275         // U+00F3: "" LATIN SMALL LETTER O WITH ACUTE
   2276         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
   2277         // U+00F4: "" LATIN SMALL LETTER O WITH CIRCUMFLEX
   2278         // U+00F2: "" LATIN SMALL LETTER O WITH GRAVE
   2279         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
   2280         // U+0153: "" LATIN SMALL LIGATURE OE
   2281         // U+00F8: "" LATIN SMALL LETTER O WITH STROKE
   2282         // U+014D: "" LATIN SMALL LETTER O WITH MACRON
   2283         /* 3 */ "\u00F3,\u00F6,\u00F4,\u00F2,\u00F5,\u0153,\u00F8,\u014D",
   2284         /* 4 */ null,
   2285         // U+015B: "" LATIN SMALL LETTER S WITH ACUTE
   2286         // U+00DF: "" LATIN SMALL LETTER SHARP S
   2287         // U+0161: "" LATIN SMALL LETTER S WITH CARON
   2288         /* 5 */ "\u015B,\u00DF,\u0161",
   2289         // U+0144: "" LATIN SMALL LETTER N WITH ACUTE
   2290         // U+00F1: "" LATIN SMALL LETTER N WITH TILDE
   2291         /* 6 */ "\u0144,\u00F1",
   2292         // U+0107: "" LATIN SMALL LETTER C WITH ACUTE
   2293         // U+00E7: "" LATIN SMALL LETTER C WITH CEDILLA
   2294         // U+010D: "" LATIN SMALL LETTER C WITH CARON
   2295         /* 7 */ "\u0107,\u00E7,\u010D",
   2296         /* 8~ */
   2297         null, null, null, null,
   2298         /* ~11 */
   2299         // U+017C: "" LATIN SMALL LETTER Z WITH DOT ABOVE
   2300         // U+017A: "" LATIN SMALL LETTER Z WITH ACUTE
   2301         // U+017E: "" LATIN SMALL LETTER Z WITH CARON
   2302         /* 12 */ "\u017C,\u017A,\u017E",
   2303         /* 13 */ null,
   2304         // U+0142: "" LATIN SMALL LETTER L WITH STROKE
   2305         /* 14 */ "\u0142",
   2306         /* 15~ */
   2307         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2308         null, null, null, null, null, null, null, null, null, null, null, null, null,
   2309         /* ~42 */
   2310         /* 43 */ "!text/single_9qm_rqm",
   2311         /* 44 */ "!text/double_9qm_rqm",
   2312     };
   2313 
   2314     /* Language pt: Portuguese */
   2315     private static final String[] LANGUAGE_pt = {
   2316         // U+00E1: "" LATIN SMALL LETTER A WITH ACUTE
   2317         // U+00E3: "" LATIN SMALL LETTER A WITH TILDE
   2318         // U+00E0: "" LATIN SMALL LETTER A WITH GRAVE
   2319         // U+00E2: "" LATIN SMALL LETTER A WITH CIRCUMFLEX
   2320         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
   2321         // U+00E5: "" LATIN SMALL LETTER A WITH RING ABOVE
   2322         // U+00E6: "" LATIN SMALL LETTER AE
   2323         // U+00AA: "" FEMININE ORDINAL INDICATOR
   2324         /* 0 */ "\u00E1,\u00E3,\u00E0,\u00E2,\u00E4,\u00E5,\u00E6,\u00AA",
   2325         // U+00E9: "" LATIN SMALL LETTER E WITH ACUTE
   2326         // U+00EA: "" LATIN SMALL LETTER E WITH CIRCUMFLEX
   2327         // U+00E8: "" LATIN SMALL LETTER E WITH GRAVE
   2328         // U+0119: "" LATIN SMALL LETTER E WITH OGONEK
   2329         // U+0117: "" LATIN SMALL LETTER E WITH DOT ABOVE
   2330         // U+0113: "" LATIN SMALL LETTER E WITH MACRON
   2331         // U+00EB: "" LATIN SMALL LETTER E WITH DIAERESIS
   2332         /* 1 */ "\u00E9,\u00EA,\u00E8,\u0119,\u0117,\u0113,\u00EB",
   2333         // U+00ED: "" LATIN SMALL LETTER I WITH ACUTE
   2334         // U+00EE: "" LATIN SMALL LETTER I WITH CIRCUMFLEX
   2335         // U+00EC: "" LATIN SMALL LETTER I WITH GRAVE
   2336         // U+00EF: "" LATIN SMALL LETTER I WITH DIAERESIS
   2337         // U+012F: "" LATIN SMALL LETTER I WITH OGONEK
   2338         // U+012B: "" LATIN SMALL LETTER I WITH MACRON
   2339         /* 2 */ "\u00ED,\u00EE,\u00EC,\u00EF,\u012F,\u012B",
   2340         // U+00F3: "" LATIN SMALL LETTER O WITH ACUTE
   2341         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
   2342         // U+00F4: "" LATIN SMALL LETTER O WITH CIRCUMFLEX
   2343         // U+00F2: "" LATIN SMALL LETTER O WITH GRAVE
   2344         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
   2345         // U+0153: "" LATIN SMALL LIGATURE OE
   2346         // U+00F8: "" LATIN SMALL LETTER O WITH STROKE
   2347         // U+014D: "" LATIN SMALL LETTER O WITH MACRON
   2348         // U+00BA: "" MASCULINE ORDINAL INDICATOR
   2349         /* 3 */ "\u00F3,\u00F5,\u00F4,\u00F2,\u00F6,\u0153,\u00F8,\u014D,\u00BA",
   2350         // U+00FA: "" LATIN SMALL LETTER U WITH ACUTE
   2351         // U+00FC: "" LATIN SMALL LETTER U WITH DIAERESIS
   2352         // U+00F9: "" LATIN SMALL LETTER U WITH GRAVE
   2353         // U+00FB: "" LATIN SMALL LETTER U WITH CIRCUMFLEX
   2354         // U+016B: "" LATIN SMALL LETTER U WITH MACRON
   2355         /* 4 */ "\u00FA,\u00FC,\u00F9,\u00FB,\u016B",
   2356         /* 5 */ null,
   2357         /* 6 */ null,
   2358         // U+00E7: "" LATIN SMALL LETTER C WITH CEDILLA
   2359         // U+010D: "" LATIN SMALL LETTER C WITH CARON
   2360         // U+0107: "" LATIN SMALL LETTER C WITH ACUTE
   2361         /* 7 */ "\u00E7,\u010D,\u0107",
   2362     };
   2363 
   2364     /* Language rm: Raeto-Romance */
   2365     private static final String[] LANGUAGE_rm = {
   2366         /* 0~ */
   2367         null, null, null,
   2368         /* ~2 */
   2369         // U+00F2: "" LATIN SMALL LETTER O WITH GRAVE
   2370         // U+00F3: "" LATIN SMALL LETTER O WITH ACUTE
   2371         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
   2372         // U+00F4: "" LATIN SMALL LETTER O WITH CIRCUMFLEX
   2373         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
   2374         // U+0153: "" LATIN SMALL LIGATURE OE
   2375         // U+00F8: "" LATIN SMALL LETTER O WITH STROKE
   2376         /* 3 */ "\u00F2,\u00F3,\u00F6,\u00F4,\u00F5,\u0153,\u00F8",
   2377     };
   2378 
   2379     /* Language ro: Romanian */
   2380     private static final String[] LANGUAGE_ro = {
   2381         // U+00E2: "" LATIN SMALL LETTER A WITH CIRCUMFLEX
   2382         // U+00E3: "" LATIN SMALL LETTER A WITH TILDE
   2383         // U+0103: "" LATIN SMALL LETTER A WITH BREVE
   2384         // U+00E0: "" LATIN SMALL LETTER A WITH GRAVE
   2385         // U+00E1: "" LATIN SMALL LETTER A WITH ACUTE
   2386         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
   2387         // U+00E6: "" LATIN SMALL LETTER AE
   2388         // U+00E5: "" LATIN SMALL LETTER A WITH RING ABOVE
   2389         // U+0101: "" LATIN SMALL LETTER A WITH MACRON
   2390         /* 0 */ "\u00E2,\u00E3,\u0103,\u00E0,\u00E1,\u00E4,\u00E6,\u00E5,\u0101",
   2391         /* 1 */ null,
   2392         // U+00EE: "" LATIN SMALL LETTER I WITH CIRCUMFLEX
   2393         // U+00EF: "" LATIN SMALL LETTER I WITH DIAERESIS
   2394         // U+00EC: "" LATIN SMALL LETTER I WITH GRAVE
   2395         // U+00ED: "" LATIN SMALL LETTER I WITH ACUTE
   2396         // U+012F: "" LATIN SMALL LETTER I WITH OGONEK
   2397         // U+012B: "" LATIN SMALL LETTER I WITH MACRON
   2398         /* 2 */ "\u00EE,\u00EF,\u00EC,\u00ED,\u012F,\u012B",
   2399         /* 3 */ null,
   2400         /* 4 */ null,
   2401         // U+0219: "" LATIN SMALL LETTER S WITH COMMA BELOW
   2402         // U+00DF: "" LATIN SMALL LETTER SHARP S
   2403         // U+015B: "" LATIN SMALL LETTER S WITH ACUTE
   2404         // U+0161: "" LATIN SMALL LETTER S WITH CARON
   2405         /* 5 */ "\u0219,\u00DF,\u015B,\u0161",
   2406         /* 6~ */
   2407         null, null, null, null, null,
   2408         /* ~10 */
   2409         // U+021B: "" LATIN SMALL LETTER T WITH COMMA BELOW
   2410         /* 11 */ "\u021B",
   2411         /* 12~ */
   2412         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2413         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2414         null,
   2415         /* ~42 */
   2416         /* 43 */ "!text/single_9qm_rqm",
   2417         /* 44 */ "!text/double_9qm_rqm",
   2418     };
   2419 
   2420     /* Language ru: Russian */
   2421     private static final String[] LANGUAGE_ru = {
   2422         /* 0~ */
   2423         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2424         null, null, null, null, null, null, null, null, null, null,
   2425         /* ~24 */
   2426         // U+0449: "" CYRILLIC SMALL LETTER SHCHA
   2427         /* 25 */ "\u0449",
   2428         // U+044A: "" CYRILLIC SMALL LETTER HARD SIGN
   2429         /* 26 */ "\u044A",
   2430         // U+044B: "" CYRILLIC SMALL LETTER YERU
   2431         /* 27 */ "\u044B",
   2432         // U+044D: "" CYRILLIC SMALL LETTER E
   2433         /* 28 */ "\u044D",
   2434         // U+0438: "" CYRILLIC SMALL LETTER I
   2435         /* 29 */ "\u0438",
   2436         /* 30~ */
   2437         null, null, null, null, null,
   2438         /* ~34 */
   2439         // U+044A: "" CYRILLIC SMALL LETTER HARD SIGN
   2440         /* 35 */ "\u044A",
   2441         /* 36~ */
   2442         null, null, null, null,
   2443         /* ~39 */
   2444         // U+0451: "" CYRILLIC SMALL LETTER IO
   2445         /* 40 */ "\u0451",
   2446         /* 41 */ null,
   2447         // Label for "switch to alphabetic" key.
   2448         // U+0410: "" CYRILLIC CAPITAL LETTER A
   2449         // U+0411: "" CYRILLIC CAPITAL LETTER BE
   2450         // U+0412: "" CYRILLIC CAPITAL LETTER VE
   2451         /* 42 */ "\u0410\u0411\u0412",
   2452         /* 43 */ "!text/single_9qm_lqm",
   2453         /* 44 */ "!text/double_9qm_lqm",
   2454     };
   2455 
   2456     /* Language sk: Slovak */
   2457     private static final String[] LANGUAGE_sk = {
   2458         // U+00E1: "" LATIN SMALL LETTER A WITH ACUTE
   2459         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
   2460         // U+0101: "" LATIN SMALL LETTER A WITH MACRON
   2461         // U+00E0: "" LATIN SMALL LETTER A WITH GRAVE
   2462         // U+00E2: "" LATIN SMALL LETTER A WITH CIRCUMFLEX
   2463         // U+00E3: "" LATIN SMALL LETTER A WITH TILDE
   2464         // U+00E5: "" LATIN SMALL LETTER A WITH RING ABOVE
   2465         // U+00E6: "" LATIN SMALL LETTER AE
   2466         // U+0105: "" LATIN SMALL LETTER A WITH OGONEK
   2467         /* 0 */ "\u00E1,\u00E4,\u0101,\u00E0,\u00E2,\u00E3,\u00E5,\u00E6,\u0105",
   2468         // U+00E9: "" LATIN SMALL LETTER E WITH ACUTE
   2469         // U+011B: "" LATIN SMALL LETTER E WITH CARON
   2470         // U+0113: "" LATIN SMALL LETTER E WITH MACRON
   2471         // U+0117: "" LATIN SMALL LETTER E WITH DOT ABOVE
   2472         // U+00E8: "" LATIN SMALL LETTER E WITH GRAVE
   2473         // U+00EA: "" LATIN SMALL LETTER E WITH CIRCUMFLEX
   2474         // U+00EB: "" LATIN SMALL LETTER E WITH DIAERESIS
   2475         // U+0119: "" LATIN SMALL LETTER E WITH OGONEK
   2476         /* 1 */ "\u00E9,\u011B,\u0113,\u0117,\u00E8,\u00EA,\u00EB,\u0119",
   2477         // U+00ED: "" LATIN SMALL LETTER I WITH ACUTE
   2478         // U+012B: "" LATIN SMALL LETTER I WITH MACRON
   2479         // U+012F: "" LATIN SMALL LETTER I WITH OGONEK
   2480         // U+00EC: "" LATIN SMALL LETTER I WITH GRAVE
   2481         // U+00EE: "" LATIN SMALL LETTER I WITH CIRCUMFLEX
   2482         // U+00EF: "" LATIN SMALL LETTER I WITH DIAERESIS
   2483         // U+0131: "" LATIN SMALL LETTER DOTLESS I
   2484         /* 2 */ "\u00ED,\u012B,\u012F,\u00EC,\u00EE,\u00EF,\u0131",
   2485         // U+00F4: "" LATIN SMALL LETTER O WITH CIRCUMFLEX
   2486         // U+00F3: "" LATIN SMALL LETTER O WITH ACUTE
   2487         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
   2488         // U+00F2: "" LATIN SMALL LETTER O WITH GRAVE
   2489         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
   2490         // U+0153: "" LATIN SMALL LIGATURE OE
   2491         // U+0151: "" LATIN SMALL LETTER O WITH DOUBLE ACUTE
   2492         // U+00F8: "" LATIN SMALL LETTER O WITH STROKE
   2493         /* 3 */ "\u00F4,\u00F3,\u00F6,\u00F2,\u00F5,\u0153,\u0151,\u00F8",
   2494         // U+00FA: "" LATIN SMALL LETTER U WITH ACUTE
   2495         // U+016F: "" LATIN SMALL LETTER U WITH RING ABOVE
   2496         // U+00FC: "" LATIN SMALL LETTER U WITH DIAERESIS
   2497         // U+016B: "" LATIN SMALL LETTER U WITH MACRON
   2498         // U+0173: "" LATIN SMALL LETTER U WITH OGONEK
   2499         // U+00F9: "" LATIN SMALL LETTER U WITH GRAVE
   2500         // U+00FB: "" LATIN SMALL LETTER U WITH CIRCUMFLEX
   2501         // U+0171: "" LATIN SMALL LETTER U WITH DOUBLE ACUTE
   2502         /* 4 */ "\u00FA,\u016F,\u00FC,\u016B,\u0173,\u00F9,\u00FB,\u0171",
   2503         // U+0161: "" LATIN SMALL LETTER S WITH CARON
   2504         // U+00DF: "" LATIN SMALL LETTER SHARP S
   2505         // U+015B: "" LATIN SMALL LETTER S WITH ACUTE
   2506         // U+015F: "" LATIN SMALL LETTER S WITH CEDILLA
   2507         /* 5 */ "\u0161,\u00DF,\u015B,\u015F",
   2508         // U+0148: "" LATIN SMALL LETTER N WITH CARON
   2509         // U+0146: "" LATIN SMALL LETTER N WITH CEDILLA
   2510         // U+00F1: "" LATIN SMALL LETTER N WITH TILDE
   2511         // U+0144: "" LATIN SMALL LETTER N WITH ACUTE
   2512         // U+0144: "" LATIN SMALL LETTER N WITH ACUTE
   2513         /* 6 */ "\u0148,\u0146,\u00F1,\u0144,\u0144",
   2514         // U+010D: "" LATIN SMALL LETTER C WITH CARON
   2515         // U+00E7: "" LATIN SMALL LETTER C WITH CEDILLA
   2516         // U+0107: "" LATIN SMALL LETTER C WITH ACUTE
   2517         /* 7 */ "\u010D,\u00E7,\u0107",
   2518         // U+00FD: "" LATIN SMALL LETTER Y WITH ACUTE
   2519         // U+00FF: "" LATIN SMALL LETTER Y WITH DIAERESIS
   2520         /* 8 */ "\u00FD,\u00FF",
   2521         // U+010F: "" LATIN SMALL LETTER D WITH CARON
   2522         /* 9 */ "\u010F",
   2523         // U+0155: "" LATIN SMALL LETTER R WITH ACUTE
   2524         // U+0159: "" LATIN SMALL LETTER R WITH CARON
   2525         // U+0157: "" LATIN SMALL LETTER R WITH CEDILLA
   2526         /* 10 */ "\u0155,\u0159,\u0157",
   2527         // U+0165: "" LATIN SMALL LETTER T WITH CARON
   2528         // U+0163: "" LATIN SMALL LETTER T WITH CEDILLA
   2529         /* 11 */ "\u0165,\u0163",
   2530         // U+017E: "" LATIN SMALL LETTER Z WITH CARON
   2531         // U+017C: "" LATIN SMALL LETTER Z WITH DOT ABOVE
   2532         // U+017A: "" LATIN SMALL LETTER Z WITH ACUTE
   2533         /* 12 */ "\u017E,\u017C,\u017A",
   2534         // U+0137: "" LATIN SMALL LETTER K WITH CEDILLA
   2535         /* 13 */ "\u0137",
   2536         // U+013E: "" LATIN SMALL LETTER L WITH CARON
   2537         // U+013A: "" LATIN SMALL LETTER L WITH ACUTE
   2538         // U+013C: "" LATIN SMALL LETTER L WITH CEDILLA
   2539         // U+0142: "" LATIN SMALL LETTER L WITH STROKE
   2540         /* 14 */ "\u013E,\u013A,\u013C,\u0142",
   2541         // U+0123: "" LATIN SMALL LETTER G WITH CEDILLA
   2542         // U+011F: "" LATIN SMALL LETTER G WITH BREVE
   2543         /* 15 */ "\u0123,\u011F",
   2544         /* 16~ */
   2545         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2546         null, null, null, null, null, null, null, null, null, null, null, null,
   2547         /* ~42 */
   2548         /* 43 */ "!text/single_9qm_lqm",
   2549         /* 44 */ "!text/double_9qm_lqm",
   2550         /* 45 */ "!text/single_raqm_laqm",
   2551         /* 46 */ "!text/double_raqm_laqm",
   2552     };
   2553 
   2554     /* Language sl: Slovenian */
   2555     private static final String[] LANGUAGE_sl = {
   2556         /* 0~ */
   2557         null, null, null, null, null,
   2558         /* ~4 */
   2559         // U+0161: "" LATIN SMALL LETTER S WITH CARON
   2560         /* 5 */ "\u0161",
   2561         /* 6 */ null,
   2562         // U+010D: "" LATIN SMALL LETTER C WITH CARON
   2563         // U+0107: "" LATIN SMALL LETTER C WITH ACUTE
   2564         /* 7 */ "\u010D,\u0107",
   2565         /* 8 */ null,
   2566         // U+0111: "" LATIN SMALL LETTER D WITH STROKE
   2567         /* 9 */ "\u0111",
   2568         /* 10 */ null,
   2569         /* 11 */ null,
   2570         // U+017E: "" LATIN SMALL LETTER Z WITH CARON
   2571         /* 12 */ "\u017E",
   2572         /* 13~ */
   2573         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2574         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2575         /* ~42 */
   2576         /* 43 */ "!text/single_9qm_lqm",
   2577         /* 44 */ "!text/double_9qm_lqm",
   2578         /* 45 */ "!text/single_raqm_laqm",
   2579         /* 46 */ "!text/double_raqm_laqm",
   2580     };
   2581 
   2582     /* Language sr: Serbian */
   2583     private static final String[] LANGUAGE_sr = {
   2584         /* 0~ */
   2585         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2586         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2587         null, null, null, null, null, null,
   2588         /* ~35 */
   2589         // TODO: Move these to sr-Latn once we can handle IETF language tag with script name specified.
   2590         // BEGIN: More keys definitions for Serbian (Latin)
   2591         // U+0161: "" LATIN SMALL LETTER S WITH CARON
   2592         // U+00DF: "" LATIN SMALL LETTER SHARP S
   2593         // U+015B: "" LATIN SMALL LETTER S WITH ACUTE
   2594         // <string name="more_keys_for_s">&#x0161;,&#x00DF;,&#x015B;</string>
   2595         // U+010D: "" LATIN SMALL LETTER C WITH CARON
   2596         // U+00E7: "" LATIN SMALL LETTER C WITH CEDILLA
   2597         // U+0107: "" LATIN SMALL LETTER C WITH ACUTE
   2598         // <string name="more_keys_for_c">&#x010D;,&#x00E7;,&#x0107;</string>
   2599         // U+010F: "" LATIN SMALL LETTER D WITH CARON
   2600         // <string name="more_keys_for_d">&#x010F;</string>
   2601         // U+017E: "" LATIN SMALL LETTER Z WITH CARON
   2602         // U+017A: "" LATIN SMALL LETTER Z WITH ACUTE
   2603         // U+017C: "" LATIN SMALL LETTER Z WITH DOT ABOVE
   2604         // <string name="more_keys_for_z">&#x017E;,&#x017A;,&#x017C;</string>
   2605         // END: More keys definitions for Serbian (Latin)
   2606         // BEGIN: More keys definitions for Serbian (Cyrillic)
   2607         // U+0437: "" CYRILLIC SMALL LETTER ZE
   2608         /* 36 */ "\u0437",
   2609         // U+045B: "" CYRILLIC SMALL LETTER TSHE
   2610         /* 37 */ "\u045B",
   2611         // U+0455: "" CYRILLIC SMALL LETTER DZE
   2612         /* 38 */ "\u0455",
   2613         // U+0452: "" CYRILLIC SMALL LETTER DJE
   2614         /* 39 */ "\u0452",
   2615         // U+0450: "" CYRILLIC SMALL LETTER IE WITH GRAVE
   2616         /* 40 */ "\u0450",
   2617         // U+045D: "" CYRILLIC SMALL LETTER I WITH GRAVE
   2618         /* 41 */ "\u045D",
   2619         // END: More keys definitions for Serbian (Cyrillic)
   2620         // Label for "switch to alphabetic" key.
   2621         // U+0410: "" CYRILLIC CAPITAL LETTER A
   2622         // U+0411: "" CYRILLIC CAPITAL LETTER BE
   2623         // U+0412: "" CYRILLIC CAPITAL LETTER VE
   2624         /* 42 */ "\u0410\u0411\u0412",
   2625         /* 43 */ "!text/single_9qm_lqm",
   2626         /* 44 */ "!text/double_9qm_lqm",
   2627         /* 45 */ "!text/single_raqm_laqm",
   2628         /* 46 */ "!text/double_raqm_laqm",
   2629     };
   2630 
   2631     /* Language sv: Swedish */
   2632     private static final String[] LANGUAGE_sv = {
   2633         /* 0 */ null,
   2634         // U+00E9: "" LATIN SMALL LETTER E WITH ACUTE
   2635         // U+00E8: "" LATIN SMALL LETTER E WITH GRAVE
   2636         // U+00EA: "" LATIN SMALL LETTER E WITH CIRCUMFLEX
   2637         // U+00EB: "" LATIN SMALL LETTER E WITH DIAERESIS
   2638         // U+0119: "" LATIN SMALL LETTER E WITH OGONEK
   2639         /* 1 */ "\u00E9,\u00E8,\u00EA,\u00EB,\u0119",
   2640         /* 2 */ null,
   2641         // U+0153: "" LATIN SMALL LIGATURE OE
   2642         // U+00F4: "" LATIN SMALL LETTER O WITH CIRCUMFLEX
   2643         // U+00F2: "" LATIN SMALL LETTER O WITH GRAVE
   2644         // U+00F3: "" LATIN SMALL LETTER O WITH ACUTE
   2645         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
   2646         // U+014D: "" LATIN SMALL LETTER O WITH MACRON
   2647         /* 3 */ "\u0153,\u00F4,\u00F2,\u00F3,\u00F5,\u014D",
   2648         // U+00FC: "" LATIN SMALL LETTER U WITH DIAERESIS
   2649         // U+00FB: "" LATIN SMALL LETTER U WITH CIRCUMFLEX
   2650         // U+00F9: "" LATIN SMALL LETTER U WITH GRAVE
   2651         // U+00FA: "" LATIN SMALL LETTER U WITH ACUTE
   2652         // U+016B: "" LATIN SMALL LETTER U WITH MACRON
   2653         /* 4 */ "\u00FC,\u00FB,\u00F9,\u00FA,\u016B",
   2654         // U+00DF: "" LATIN SMALL LETTER SHARP S
   2655         // U+015B: "" LATIN SMALL LETTER S WITH ACUTE
   2656         // U+0161: "" LATIN SMALL LETTER S WITH CARON
   2657         /* 5 */ "\u00DF,\u015B,\u0161",
   2658         /* 6~ */
   2659         null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2660         /* ~19 */
   2661         // U+00E5: "" LATIN SMALL LETTER A WITH RING ABOVE
   2662         /* 20 */ "\u00E5",
   2663         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
   2664         /* 21 */ "\u00F6",
   2665         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
   2666         /* 22 */ "\u00E4",
   2667         // U+00F8: "" LATIN SMALL LETTER O WITH STROKE
   2668         /* 23 */ "\u00F8",
   2669         // U+00E6: "" LATIN SMALL LETTER AE
   2670         /* 24 */ "\u00E6",
   2671         /* 25~ */
   2672         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2673         null, null, null, null, null,
   2674         /* ~44 */
   2675         /* 45 */ "!text/single_raqm_laqm",
   2676         /* 46 */ "!text/double_raqm_laqm",
   2677     };
   2678 
   2679     /* Language sw: Swahili */
   2680     private static final String[] LANGUAGE_sw = {
   2681         // This is the same as English except more_keys_for_g.
   2682         // U+00E0: "" LATIN SMALL LETTER A WITH GRAVE
   2683         // U+00E1: "" LATIN SMALL LETTER A WITH ACUTE
   2684         // U+00E2: "" LATIN SMALL LETTER A WITH CIRCUMFLEX
   2685         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
   2686         // U+00E6: "" LATIN SMALL LETTER AE
   2687         // U+00E3: "" LATIN SMALL LETTER A WITH TILDE
   2688         // U+00E5: "" LATIN SMALL LETTER A WITH RING ABOVE
   2689         // U+0101: "" LATIN SMALL LETTER A WITH MACRON
   2690         /* 0 */ "\u00E0,\u00E1,\u00E2,\u00E4,\u00E6,\u00E3,\u00E5,\u0101",
   2691         // U+00E8: "" LATIN SMALL LETTER E WITH GRAVE
   2692         // U+00E9: "" LATIN SMALL LETTER E WITH ACUTE
   2693         // U+00EA: "" LATIN SMALL LETTER E WITH CIRCUMFLEX
   2694         // U+00EB: "" LATIN SMALL LETTER E WITH DIAERESIS
   2695         // U+0113: "" LATIN SMALL LETTER E WITH MACRON
   2696         /* 1 */ "\u00E8,\u00E9,\u00EA,\u00EB,\u0113",
   2697         // U+00EE: "" LATIN SMALL LETTER I WITH CIRCUMFLEX
   2698         // U+00EF: "" LATIN SMALL LETTER I WITH DIAERESIS
   2699         // U+00ED: "" LATIN SMALL LETTER I WITH ACUTE
   2700         // U+012B: "" LATIN SMALL LETTER I WITH MACRON
   2701         // U+00EC: "" LATIN SMALL LETTER I WITH GRAVE
   2702         /* 2 */ "\u00EE,\u00EF,\u00ED,\u012B,\u00EC",
   2703         // U+00F4: "" LATIN SMALL LETTER O WITH CIRCUMFLEX
   2704         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
   2705         // U+00F2: "" LATIN SMALL LETTER O WITH GRAVE
   2706         // U+00F3: "" LATIN SMALL LETTER O WITH ACUTE
   2707         // U+0153: "" LATIN SMALL LIGATURE OE
   2708         // U+00F8: "" LATIN SMALL LETTER O WITH STROKE
   2709         // U+014D: "" LATIN SMALL LETTER O WITH MACRON
   2710         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
   2711         /* 3 */ "\u00F4,\u00F6,\u00F2,\u00F3,\u0153,\u00F8,\u014D,\u00F5",
   2712         // U+00FB: "" LATIN SMALL LETTER U WITH CIRCUMFLEX
   2713         // U+00FC: "" LATIN SMALL LETTER U WITH DIAERESIS
   2714         // U+00F9: "" LATIN SMALL LETTER U WITH GRAVE
   2715         // U+00FA: "" LATIN SMALL LETTER U WITH ACUTE
   2716         // U+016B: "" LATIN SMALL LETTER U WITH MACRON
   2717         /* 4 */ "\u00FB,\u00FC,\u00F9,\u00FA,\u016B",
   2718         // U+00DF: "" LATIN SMALL LETTER SHARP S
   2719         /* 5 */ "\u00DF",
   2720         // U+00F1: "" LATIN SMALL LETTER N WITH TILDE
   2721         /* 6 */ "\u00F1",
   2722         // U+00E7: "" LATIN SMALL LETTER C WITH CEDILLA
   2723         /* 7 */ "\u00E7",
   2724         /* 8~ */
   2725         null, null, null, null, null, null, null,
   2726         /* ~14 */
   2727         /* 15 */ "g\'",
   2728     };
   2729 
   2730     /* Language th: Thai */
   2731     private static final String[] LANGUAGE_th = {
   2732         /* 0~ */
   2733         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2734         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2735         null, null, null, null, null, null, null, null, null, null, null, null,
   2736         /* ~41 */
   2737         // Label for "switch to alphabetic" key.
   2738         // U+0E01: "" THAI CHARACTER KO KAI
   2739         // U+0E02: "" THAI CHARACTER KHO KHAI
   2740         // U+0E04: "" THAI CHARACTER KHO KHWAI
   2741         /* 42 */ "\u0E01\u0E02\u0E04",
   2742         /* 43~ */
   2743         null, null, null, null, null,
   2744         /* ~47 */
   2745         // U+0E3F: "" THAI CURRENCY SYMBOL BAHT
   2746         /* 48 */ "\u0E3F",
   2747     };
   2748 
   2749     /* Language tl: Tagalog */
   2750     private static final String[] LANGUAGE_tl = {
   2751         // U+00E1: "" LATIN SMALL LETTER A WITH ACUTE
   2752         // U+00E0: "" LATIN SMALL LETTER A WITH GRAVE
   2753         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
   2754         // U+00E2: "" LATIN SMALL LETTER A WITH CIRCUMFLEX
   2755         // U+00E3: "" LATIN SMALL LETTER A WITH TILDE
   2756         // U+00E5: "" LATIN SMALL LETTER A WITH RING ABOVE
   2757         // U+0105: "" LATIN SMALL LETTER A WITH OGONEK
   2758         // U+00E6: "" LATIN SMALL LETTER AE
   2759         // U+0101: "" LATIN SMALL LETTER A WITH MACRON
   2760         // U+00AA: "" FEMININE ORDINAL INDICATOR
   2761         /* 0 */ "\u00E1,\u00E0,\u00E4,\u00E2,\u00E3,\u00E5,\u0105,\u00E6,\u0101,\u00AA",
   2762         // U+00E9: "" LATIN SMALL LETTER E WITH ACUTE
   2763         // U+00E8: "" LATIN SMALL LETTER E WITH GRAVE
   2764         // U+00EB: "" LATIN SMALL LETTER E WITH DIAERESIS
   2765         // U+00EA: "" LATIN SMALL LETTER E WITH CIRCUMFLEX
   2766         // U+0119: "" LATIN SMALL LETTER E WITH OGONEK
   2767         // U+0117: "" LATIN SMALL LETTER E WITH DOT ABOVE
   2768         // U+0113: "" LATIN SMALL LETTER E WITH MACRON
   2769         /* 1 */ "\u00E9,\u00E8,\u00EB,\u00EA,\u0119,\u0117,\u0113",
   2770         // U+00ED: "" LATIN SMALL LETTER I WITH ACUTE
   2771         // U+00EF: "" LATIN SMALL LETTER I WITH DIAERESIS
   2772         // U+00EC: "" LATIN SMALL LETTER I WITH GRAVE
   2773         // U+00EE: "" LATIN SMALL LETTER I WITH CIRCUMFLEX
   2774         // U+012F: "" LATIN SMALL LETTER I WITH OGONEK
   2775         // U+012B: "" LATIN SMALL LETTER I WITH MACRON
   2776         /* 2 */ "\u00ED,\u00EF,\u00EC,\u00EE,\u012F,\u012B",
   2777         // U+00F3: "" LATIN SMALL LETTER O WITH ACUTE
   2778         // U+00F2: "" LATIN SMALL LETTER O WITH GRAVE
   2779         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
   2780         // U+00F4: "" LATIN SMALL LETTER O WITH CIRCUMFLEX
   2781         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
   2782         // U+00F8: "" LATIN SMALL LETTER O WITH STROKE
   2783         // U+0153: "" LATIN SMALL LIGATURE OE
   2784         // U+014D: "" LATIN SMALL LETTER O WITH MACRON
   2785         // U+00BA: "" MASCULINE ORDINAL INDICATOR
   2786         /* 3 */ "\u00F3,\u00F2,\u00F6,\u00F4,\u00F5,\u00F8,\u0153,\u014D,\u00BA",
   2787         // U+00FA: "" LATIN SMALL LETTER U WITH ACUTE
   2788         // U+00FC: "" LATIN SMALL LETTER U WITH DIAERESIS
   2789         // U+00F9: "" LATIN SMALL LETTER U WITH GRAVE
   2790         // U+00FB: "" LATIN SMALL LETTER U WITH CIRCUMFLEX
   2791         // U+016B: "" LATIN SMALL LETTER U WITH MACRON
   2792         /* 4 */ "\u00FA,\u00FC,\u00F9,\u00FB,\u016B",
   2793         /* 5 */ null,
   2794         // U+00F1: "" LATIN SMALL LETTER N WITH TILDE
   2795         // U+0144: "" LATIN SMALL LETTER N WITH ACUTE
   2796         /* 6 */ "\u00F1,\u0144",
   2797         // U+00E7: "" LATIN SMALL LETTER C WITH CEDILLA
   2798         // U+0107: "" LATIN SMALL LETTER C WITH ACUTE
   2799         // U+010D: "" LATIN SMALL LETTER C WITH CARON
   2800         /* 7 */ "\u00E7,\u0107,\u010D",
   2801     };
   2802 
   2803     /* Language tr: Turkish */
   2804     private static final String[] LANGUAGE_tr = {
   2805         // U+00E2: "" LATIN SMALL LETTER A WITH CIRCUMFLEX
   2806         /* 0 */ "\u00E2",
   2807         /* 1 */ null,
   2808         // U+0131: "" LATIN SMALL LETTER DOTLESS I
   2809         // U+00EE: "" LATIN SMALL LETTER I WITH CIRCUMFLEX
   2810         // U+00EF: "" LATIN SMALL LETTER I WITH DIAERESIS
   2811         // U+00EC: "" LATIN SMALL LETTER I WITH GRAVE
   2812         // U+00ED: "" LATIN SMALL LETTER I WITH ACUTE
   2813         // U+012F: "" LATIN SMALL LETTER I WITH OGONEK
   2814         // U+012B: "" LATIN SMALL LETTER I WITH MACRON
   2815         /* 2 */ "\u0131,\u00EE,\u00EF,\u00EC,\u00ED,\u012F,\u012B",
   2816         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
   2817         // U+00F4: "" LATIN SMALL LETTER O WITH CIRCUMFLEX
   2818         // U+0153: "" LATIN SMALL LIGATURE OE
   2819         // U+00F2: "" LATIN SMALL LETTER O WITH GRAVE
   2820         // U+00F3: "" LATIN SMALL LETTER O WITH ACUTE
   2821         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
   2822         // U+00F8: "" LATIN SMALL LETTER O WITH STROKE
   2823         // U+014D: "" LATIN SMALL LETTER O WITH MACRON
   2824         /* 3 */ "\u00F6,\u00F4,\u0153,\u00F2,\u00F3,\u00F5,\u00F8,\u014D",
   2825         // U+00FC: "" LATIN SMALL LETTER U WITH DIAERESIS
   2826         // U+00FB: "" LATIN SMALL LETTER U WITH CIRCUMFLEX
   2827         // U+00F9: "" LATIN SMALL LETTER U WITH GRAVE
   2828         // U+00FA: "" LATIN SMALL LETTER U WITH ACUTE
   2829         // U+016B: "" LATIN SMALL LETTER U WITH MACRON
   2830         /* 4 */ "\u00FC,\u00FB,\u00F9,\u00FA,\u016B",
   2831         // U+015F: "" LATIN SMALL LETTER S WITH CEDILLA
   2832         // U+00DF: "" LATIN SMALL LETTER SHARP S
   2833         // U+015B: "" LATIN SMALL LETTER S WITH ACUTE
   2834         // U+0161: "" LATIN SMALL LETTER S WITH CARON
   2835         /* 5 */ "\u015F,\u00DF,\u015B,\u0161",
   2836         /* 6 */ null,
   2837         // U+00E7: "" LATIN SMALL LETTER C WITH CEDILLA
   2838         // U+0107: "" LATIN SMALL LETTER C WITH ACUTE
   2839         // U+010D: "" LATIN SMALL LETTER C WITH CARON
   2840         /* 7 */ "\u00E7,\u0107,\u010D",
   2841         /* 8~ */
   2842         null, null, null, null, null, null, null,
   2843         /* ~14 */
   2844         // U+011F: "" LATIN SMALL LETTER G WITH BREVE
   2845         /* 15 */ "\u011F",
   2846     };
   2847 
   2848     /* Language uk: Ukrainian */
   2849     private static final String[] LANGUAGE_uk = {
   2850         /* 0~ */
   2851         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2852         null, null, null, null, null, null, null, null, null, null,
   2853         /* ~24 */
   2854         // U+0449: "" CYRILLIC SMALL LETTER SHCHA
   2855         /* 25 */ "\u0449",
   2856         // U+0457: "" CYRILLIC SMALL LETTER YI
   2857         /* 26 */ "\u0457",
   2858         // U+0456: "" CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
   2859         /* 27 */ "\u0456",
   2860         // U+0454: "" CYRILLIC SMALL LETTER UKRAINIAN IE
   2861         /* 28 */ "\u0454",
   2862         // U+0438: "" CYRILLIC SMALL LETTER I
   2863         /* 29 */ "\u0438",
   2864         /* 30 */ null,
   2865         /* 31 */ null,
   2866         // U+0491: "" CYRILLIC SMALL LETTER GHE WITH UPTURN
   2867         /* 32 */ "\u0491",
   2868         // U+0457: "" CYRILLIC SMALL LETTER YI
   2869         /* 33 */ "\u0457",
   2870         /* 34 */ null,
   2871         // U+044A: "" CYRILLIC SMALL LETTER HARD SIGN
   2872         /* 35 */ "\u044A",
   2873         /* 36~ */
   2874         null, null, null, null, null, null,
   2875         /* ~41 */
   2876         // Label for "switch to alphabetic" key.
   2877         // U+0410: "" CYRILLIC CAPITAL LETTER A
   2878         // U+0411: "" CYRILLIC CAPITAL LETTER BE
   2879         // U+0412: "" CYRILLIC CAPITAL LETTER VE
   2880         /* 42 */ "\u0410\u0411\u0412",
   2881         /* 43 */ "!text/single_9qm_lqm",
   2882         /* 44 */ "!text/double_9qm_lqm",
   2883         /* 45~ */
   2884         null, null, null,
   2885         /* ~47 */
   2886         // U+20B4: "" HRYVNIA SIGN
   2887         /* 48 */ "\u20B4",
   2888     };
   2889 
   2890     /* Language vi: Vietnamese */
   2891     private static final String[] LANGUAGE_vi = {
   2892         // U+00E0: "" LATIN SMALL LETTER A WITH GRAVE
   2893         // U+00E1: "" LATIN SMALL LETTER A WITH ACUTE
   2894         // U+1EA3: "" LATIN SMALL LETTER A WITH HOOK ABOVE
   2895         // U+00E3: "" LATIN SMALL LETTER A WITH TILDE
   2896         // U+1EA1: "" LATIN SMALL LETTER A WITH DOT BELOW
   2897         // U+0103: "" LATIN SMALL LETTER A WITH BREVE
   2898         // U+1EB1: "" LATIN SMALL LETTER A WITH BREVE AND GRAVE
   2899         // U+1EAF: "" LATIN SMALL LETTER A WITH BREVE AND ACUTE
   2900         // U+1EB3: "" LATIN SMALL LETTER A WITH BREVE AND HOOK ABOVE
   2901         // U+1EB5: "" LATIN SMALL LETTER A WITH BREVE AND TILDE
   2902         // U+1EB7: "" LATIN SMALL LETTER A WITH BREVE AND DOT BELOW
   2903         // U+00E2: "" LATIN SMALL LETTER A WITH CIRCUMFLEX
   2904         // U+1EA7: "" LATIN SMALL LETTER A WITH CIRCUMFLEX AND GRAVE
   2905         // U+1EA5: "" LATIN SMALL LETTER A WITH CIRCUMFLEX AND ACUTE
   2906         // U+1EA9: "" LATIN SMALL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
   2907         // U+1EAB: "" LATIN SMALL LETTER A WITH CIRCUMFLEX AND TILDE
   2908         // U+1EAD: "" LATIN SMALL LETTER A WITH CIRCUMFLEX AND DOT BELOW
   2909         /* 0 */ "\u00E0,\u00E1,\u1EA3,\u00E3,\u1EA1,\u0103,\u1EB1,\u1EAF,\u1EB3,\u1EB5,\u1EB7,\u00E2,\u1EA7,\u1EA5,\u1EA9,\u1EAB,\u1EAD",
   2910         // U+00E8: "" LATIN SMALL LETTER E WITH GRAVE
   2911         // U+00E9: "" LATIN SMALL LETTER E WITH ACUTE
   2912         // U+1EBB: "" LATIN SMALL LETTER E WITH HOOK ABOVE
   2913         // U+1EBD: "" LATIN SMALL LETTER E WITH TILDE
   2914         // U+1EB9: "" LATIN SMALL LETTER E WITH DOT BELOW
   2915         // U+00EA: "" LATIN SMALL LETTER E WITH CIRCUMFLEX
   2916         // U+1EC1: "" LATIN SMALL LETTER E WITH CIRCUMFLEX AND GRAVE
   2917         // U+1EBF: "" LATIN SMALL LETTER E WITH CIRCUMFLEX AND ACUTE
   2918         // U+1EC3: "" LATIN SMALL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
   2919         // U+1EC5: "" LATIN SMALL LETTER E WITH CIRCUMFLEX AND TILDE
   2920         // U+1EC7: "" LATIN SMALL LETTER E WITH CIRCUMFLEX AND DOT BELOW
   2921         /* 1 */ "\u00E8,\u00E9,\u1EBB,\u1EBD,\u1EB9,\u00EA,\u1EC1,\u1EBF,\u1EC3,\u1EC5,\u1EC7",
   2922         // U+00EC: "" LATIN SMALL LETTER I WITH GRAVE
   2923         // U+00ED: "" LATIN SMALL LETTER I WITH ACUTE
   2924         // U+1EC9: "" LATIN SMALL LETTER I WITH HOOK ABOVE
   2925         // U+0129: "" LATIN SMALL LETTER I WITH TILDE
   2926         // U+1ECB: "" LATIN SMALL LETTER I WITH DOT BELOW
   2927         /* 2 */ "\u00EC,\u00ED,\u1EC9,\u0129,\u1ECB",
   2928         // U+00F2: "" LATIN SMALL LETTER O WITH GRAVE
   2929         // U+00F3: "" LATIN SMALL LETTER O WITH ACUTE
   2930         // U+1ECF: "" LATIN SMALL LETTER O WITH HOOK ABOVE
   2931         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
   2932         // U+1ECD: "" LATIN SMALL LETTER O WITH DOT BELOW
   2933         // U+00F4: "" LATIN SMALL LETTER O WITH CIRCUMFLEX
   2934         // U+1ED3: "" LATIN SMALL LETTER O WITH CIRCUMFLEX AND GRAVE
   2935         // U+1ED1: "" LATIN SMALL LETTER O WITH CIRCUMFLEX AND ACUTE
   2936         // U+1ED5: "" LATIN SMALL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
   2937         // U+1ED7: "" LATIN SMALL LETTER O WITH CIRCUMFLEX AND TILDE
   2938         // U+1ED9: "" LATIN SMALL LETTER O WITH CIRCUMFLEX AND DOT BELOW
   2939         // U+01A1: "" LATIN SMALL LETTER O WITH HORN
   2940         // U+1EDD: "" LATIN SMALL LETTER O WITH HORN AND GRAVE
   2941         // U+1EDB: "" LATIN SMALL LETTER O WITH HORN AND ACUTE
   2942         // U+1EDF: "" LATIN SMALL LETTER O WITH HORN AND HOOK ABOVE
   2943         // U+1EE1: "" LATIN SMALL LETTER O WITH HORN AND TILDE
   2944         // U+1EE3: "" LATIN SMALL LETTER O WITH HORN AND DOT BELOW
   2945         /* 3 */ "\u00F2,\u00F3,\u1ECF,\u00F5,\u1ECD,\u00F4,\u1ED3,\u1ED1,\u1ED5,\u1ED7,\u1ED9,\u01A1,\u1EDD,\u1EDB,\u1EDF,\u1EE1,\u1EE3",
   2946         // U+00F9: "" LATIN SMALL LETTER U WITH GRAVE
   2947         // U+00FA: "" LATIN SMALL LETTER U WITH ACUTE
   2948         // U+1EE7: "" LATIN SMALL LETTER U WITH HOOK ABOVE
   2949         // U+0169: "" LATIN SMALL LETTER U WITH TILDE
   2950         // U+1EE5: "" LATIN SMALL LETTER U WITH DOT BELOW
   2951         // U+01B0: "" LATIN SMALL LETTER U WITH HORN
   2952         // U+1EEB: "" LATIN SMALL LETTER U WITH HORN AND GRAVE
   2953         // U+1EE9: "" LATIN SMALL LETTER U WITH HORN AND ACUTE
   2954         // U+1EED: "" LATIN SMALL LETTER U WITH HORN AND HOOK ABOVE
   2955         // U+1EEF: "" LATIN SMALL LETTER U WITH HORN AND TILDE
   2956         // U+1EF1: "" LATIN SMALL LETTER U WITH HORN AND DOT BELOW
   2957         /* 4 */ "\u00F9,\u00FA,\u1EE7,\u0169,\u1EE5,\u01B0,\u1EEB,\u1EE9,\u1EED,\u1EEF,\u1EF1",
   2958         /* 5~ */
   2959         null, null, null,
   2960         /* ~7 */
   2961         // U+1EF3: "" LATIN SMALL LETTER Y WITH GRAVE
   2962         // U+00FD: "" LATIN SMALL LETTER Y WITH ACUTE
   2963         // U+1EF7: "" LATIN SMALL LETTER Y WITH HOOK ABOVE
   2964         // U+1EF9: "" LATIN SMALL LETTER Y WITH TILDE
   2965         // U+1EF5: "" LATIN SMALL LETTER Y WITH DOT BELOW
   2966         /* 8 */ "\u1EF3,\u00FD,\u1EF7,\u1EF9,\u1EF5",
   2967         // U+0111: "" LATIN SMALL LETTER D WITH STROKE
   2968         /* 9 */ "\u0111",
   2969         /* 10~ */
   2970         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2971         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
   2972         null, null, null, null, null, null, null, null,
   2973         /* ~47 */
   2974         // U+20AB: "" DONG SIGN
   2975         /* 48 */ "\u20AB",
   2976     };
   2977 
   2978     /* Language zu: Zulu */
   2979     private static final String[] LANGUAGE_zu = {
   2980         // This is the same as English
   2981         // U+00E0: "" LATIN SMALL LETTER A WITH GRAVE
   2982         // U+00E1: "" LATIN SMALL LETTER A WITH ACUTE
   2983         // U+00E2: "" LATIN SMALL LETTER A WITH CIRCUMFLEX
   2984         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
   2985         // U+00E6: "" LATIN SMALL LETTER AE
   2986         // U+00E3: "" LATIN SMALL LETTER A WITH TILDE
   2987         // U+00E5: "" LATIN SMALL LETTER A WITH RING ABOVE
   2988         // U+0101: "" LATIN SMALL LETTER A WITH MACRON
   2989         /* 0 */ "\u00E0,\u00E1,\u00E2,\u00E4,\u00E6,\u00E3,\u00E5,\u0101",
   2990         // U+00E8: "" LATIN SMALL LETTER E WITH GRAVE
   2991         // U+00E9: "" LATIN SMALL LETTER E WITH ACUTE
   2992         // U+00EA: "" LATIN SMALL LETTER E WITH CIRCUMFLEX
   2993         // U+00EB: "" LATIN SMALL LETTER E WITH DIAERESIS
   2994         // U+0113: "" LATIN SMALL LETTER E WITH MACRON
   2995         /* 1 */ "\u00E8,\u00E9,\u00EA,\u00EB,\u0113",
   2996         // U+00EE: "" LATIN SMALL LETTER I WITH CIRCUMFLEX
   2997         // U+00EF: "" LATIN SMALL LETTER I WITH DIAERESIS
   2998         // U+00ED: "" LATIN SMALL LETTER I WITH ACUTE
   2999         // U+012B: "" LATIN SMALL LETTER I WITH MACRON
   3000         // U+00EC: "" LATIN SMALL LETTER I WITH GRAVE
   3001         /* 2 */ "\u00EE,\u00EF,\u00ED,\u012B,\u00EC",
   3002         // U+00F4: "" LATIN SMALL LETTER O WITH CIRCUMFLEX
   3003         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
   3004         // U+00F2: "" LATIN SMALL LETTER O WITH GRAVE
   3005         // U+00F3: "" LATIN SMALL LETTER O WITH ACUTE
   3006         // U+0153: "" LATIN SMALL LIGATURE OE
   3007         // U+00F8: "" LATIN SMALL LETTER O WITH STROKE
   3008         // U+014D: "" LATIN SMALL LETTER O WITH MACRON
   3009         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
   3010         /* 3 */ "\u00F4,\u00F6,\u00F2,\u00F3,\u0153,\u00F8,\u014D,\u00F5",
   3011         // U+00FB: "" LATIN SMALL LETTER U WITH CIRCUMFLEX
   3012         // U+00FC: "" LATIN SMALL LETTER U WITH DIAERESIS
   3013         // U+00F9: "" LATIN SMALL LETTER U WITH GRAVE
   3014         // U+00FA: "" LATIN SMALL LETTER U WITH ACUTE
   3015         // U+016B: "" LATIN SMALL LETTER U WITH MACRON
   3016         /* 4 */ "\u00FB,\u00FC,\u00F9,\u00FA,\u016B",
   3017         // U+00DF: "" LATIN SMALL LETTER SHARP S
   3018         /* 5 */ "\u00DF",
   3019         // U+00F1: "" LATIN SMALL LETTER N WITH TILDE
   3020         /* 6 */ "\u00F1",
   3021         // U+00E7: "" LATIN SMALL LETTER C WITH CEDILLA
   3022         /* 7 */ "\u00E7",
   3023     };
   3024 
   3025     /* Language zz: No language */
   3026     private static final String[] LANGUAGE_zz = {
   3027         // U+00E0: "" LATIN SMALL LETTER A WITH GRAVE
   3028         // U+00E1: "" LATIN SMALL LETTER A WITH ACUTE
   3029         // U+00E2: "" LATIN SMALL LETTER A WITH CIRCUMFLEX
   3030         // U+00E3: "" LATIN SMALL LETTER A WITH TILDE
   3031         // U+00E4: "" LATIN SMALL LETTER A WITH DIAERESIS
   3032         // U+00E5: "" LATIN SMALL LETTER A WITH RING ABOVE
   3033         // U+00E6: "" LATIN SMALL LETTER AE
   3034         // U+0101: "" LATIN SMALL LETTER A WITH MACRON
   3035         // U+0103: "" LATIN SMALL LETTER A WITH BREVE
   3036         // U+0105: "" LATIN SMALL LETTER A WITH OGONEK
   3037         // U+00AA: "" FEMININE ORDINAL INDICATOR
   3038         /* 0 */ "\u00E0,\u00E1,\u00E2,\u00E3,\u00E4,\u00E5,\u00E6,\u00E3,\u00E5,\u0101,\u0103,\u0105,\u00AA",
   3039         // U+00E8: "" LATIN SMALL LETTER E WITH GRAVE
   3040         // U+00E9: "" LATIN SMALL LETTER E WITH ACUTE
   3041         // U+00EA: "" LATIN SMALL LETTER E WITH CIRCUMFLEX
   3042         // U+00EB: "" LATIN SMALL LETTER E WITH DIAERESIS
   3043         // U+0113: "" LATIN SMALL LETTER E WITH MACRON
   3044         // U+0115: "" LATIN SMALL LETTER E WITH BREVE
   3045         // U+0117: "" LATIN SMALL LETTER E WITH DOT ABOVE
   3046         // U+0119: "" LATIN SMALL LETTER E WITH OGONEK
   3047         // U+011B: "" LATIN SMALL LETTER E WITH CARON
   3048         /* 1 */ "\u00E8,\u00E9,\u00EA,\u00EB,\u0113,\u0115,\u0117,\u0119,\u011B",
   3049         // U+00EC: "" LATIN SMALL LETTER I WITH GRAVE
   3050         // U+00ED: "" LATIN SMALL LETTER I WITH ACUTE
   3051         // U+00EE: "" LATIN SMALL LETTER I WITH CIRCUMFLEX
   3052         // U+00EF: "" LATIN SMALL LETTER I WITH DIAERESIS
   3053         // U+0129: "" LATIN SMALL LETTER I WITH TILDE
   3054         // U+012B: "" LATIN SMALL LETTER I WITH MACRON
   3055         // U+012D: "" LATIN SMALL LETTER I WITH BREVE
   3056         // U+012F: "" LATIN SMALL LETTER I WITH OGONEK
   3057         // U+0131: "" LATIN SMALL LETTER DOTLESS I
   3058         // U+0133: "" LATIN SMALL LIGATURE IJ
   3059         /* 2 */ "\u00EC,\u00ED,\u00EE,\u00EF,\u0129,\u012B,\u012D,\u012F,\u0131,\u0133",
   3060         // U+00F2: "" LATIN SMALL LETTER O WITH GRAVE
   3061         // U+00F3: "" LATIN SMALL LETTER O WITH ACUTE
   3062         // U+00F4: "" LATIN SMALL LETTER O WITH CIRCUMFLEX
   3063         // U+00F5: "" LATIN SMALL LETTER O WITH TILDE
   3064         // U+00F6: "" LATIN SMALL LETTER O WITH DIAERESIS
   3065         // U+00F8: "" LATIN SMALL LETTER O WITH STROKE
   3066         // U+014D: "" LATIN SMALL LETTER O WITH MACRON
   3067         // U+014F: "" LATIN SMALL LETTER O WITH BREVE
   3068         // U+0151: "" LATIN SMALL LETTER O WITH DOUBLE ACUTE
   3069         // U+0153: "" LATIN SMALL LIGATURE OE
   3070         // U+00BA: "" MASCULINE ORDINAL INDICATOR
   3071         /* 3 */ "\u00F2,\u00F3,\u00F4,\u00F5,\u00F6,\u00F8,\u014D,\u014F,\u0151,\u0153,\u00BA",
   3072         // U+00F9: "" LATIN SMALL LETTER U WITH GRAVE
   3073         // U+00FA: "" LATIN SMALL LETTER U WITH ACUTE
   3074         // U+00FB: "" LATIN SMALL LETTER U WITH CIRCUMFLEX
   3075         // U+00FC: "" LATIN SMALL LETTER U WITH DIAERESIS
   3076         // U+0169: "" LATIN SMALL LETTER U WITH TILDE
   3077         // U+016B: "" LATIN SMALL LETTER U WITH MACRON
   3078         // U+016D: "" LATIN SMALL LETTER U WITH BREVE
   3079         // U+016F: "" LATIN SMALL LETTER U WITH RING ABOVE
   3080         // U+0171: "" LATIN SMALL LETTER U WITH DOUBLE ACUTE
   3081         // U+0173: "" LATIN SMALL LETTER U WITH OGONEK
   3082         /* 4 */ "\u00F9,\u00FA,\u00FB,\u00FC,\u0169,\u016B,\u016D,\u016F,\u0171,\u0173",
   3083         // U+00DF: "" LATIN SMALL LETTER SHARP S
   3084         // U+015B: "" LATIN SMALL LETTER S WITH ACUTE
   3085         // U+015D: "" LATIN SMALL LETTER S WITH CIRCUMFLEX
   3086         // U+015F: "" LATIN SMALL LETTER S WITH CEDILLA
   3087         // U+0161: "" LATIN SMALL LETTER S WITH CARON
   3088         // U+017F: "" LATIN SMALL LETTER LONG S
   3089         /* 5 */ "\u00DF,\u015B,\u015D,\u015F,\u0161,\u017F",
   3090         // U+00F1: "" LATIN SMALL LETTER N WITH TILDE
   3091         // U+0144: "" LATIN SMALL LETTER N WITH ACUTE
   3092         // U+0146: "" LATIN SMALL LETTER N WITH CEDILLA
   3093         // U+0148: "" LATIN SMALL LETTER N WITH CARON
   3094         // U+0149: "" LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
   3095         // U+014B: "" LATIN SMALL LETTER ENG
   3096         /* 6 */ "\u00F1,\u0144,\u0146,\u0148,\u0149,\u014B",
   3097         // U+00E7: "" LATIN SMALL LETTER C WITH CEDILLA
   3098         // U+0107: "" LATIN SMALL LETTER C WITH ACUTE
   3099         // U+0109: "" LATIN SMALL LETTER C WITH CIRCUMFLEX
   3100         // U+010B: "" LATIN SMALL LETTER C WITH DOT ABOVE
   3101         // U+010D: "" LATIN SMALL LETTER C WITH CARON
   3102         /* 7 */ "\u00E7,\u0107,\u0109,\u010B,\u010D",
   3103         // U+00FD: "" LATIN SMALL LETTER Y WITH ACUTE
   3104         // U+0177: "" LATIN SMALL LETTER Y WITH CIRCUMFLEX
   3105         // U+00FF: "" LATIN SMALL LETTER Y WITH DIAERESIS
   3106         // U+0133: "" LATIN SMALL LIGATURE IJ
   3107         /* 8 */ "\u00FD,\u0177,\u00FF,\u0133",
   3108         // U+010F: "" LATIN SMALL LETTER D WITH CARON
   3109         // U+0111: "" LATIN SMALL LETTER D WITH STROKE
   3110         // U+00F0: "" LATIN SMALL LETTER ETH
   3111         /* 9 */ "\u010F,\u0111,\u00F0",
   3112         // U+0155: "" LATIN SMALL LETTER R WITH ACUTE
   3113         // U+0157: "" LATIN SMALL LETTER R WITH CEDILLA
   3114         // U+0159: "" LATIN SMALL LETTER R WITH CARON
   3115         /* 10 */ "\u0155,\u0157,\u0159",
   3116         // U+00FE: "" LATIN SMALL LETTER THORN
   3117         // U+0163: "" LATIN SMALL LETTER T WITH CEDILLA
   3118         // U+0165: "" LATIN SMALL LETTER T WITH CARON
   3119         // U+0167: "" LATIN SMALL LETTER T WITH STROKE
   3120         /* 11 */ "\u00FE,\u0163,\u0165,\u0167",
   3121         // U+017A: "" LATIN SMALL LETTER Z WITH ACUTE
   3122         // U+017C: "" LATIN SMALL LETTER Z WITH DOT ABOVE
   3123         // U+017E: "" LATIN SMALL LETTER Z WITH CARON
   3124         /* 12 */ "\u017A,\u017C,\u017E",
   3125         // U+0137: "" LATIN SMALL LETTER K WITH CEDILLA
   3126         // U+0138: "" LATIN SMALL LETTER KRA
   3127         /* 13 */ "\u0137,\u0138",
   3128         // U+013A: "" LATIN SMALL LETTER L WITH ACUTE
   3129         // U+013C: "" LATIN SMALL LETTER L WITH CEDILLA
   3130         // U+013E: "" LATIN SMALL LETTER L WITH CARON
   3131         // U+0140: "" LATIN SMALL LETTER L WITH MIDDLE DOT
   3132         // U+0142: "" LATIN SMALL LETTER L WITH STROKE
   3133         /* 14 */ "\u013A,\u013C,\u013E,\u0140,\u0142",
   3134         // U+011D: "" LATIN SMALL LETTER G WITH CIRCUMFLEX
   3135         // U+011F: "" LATIN SMALL LETTER G WITH BREVE
   3136         // U+0121: "" LATIN SMALL LETTER G WITH DOT ABOVE
   3137         // U+0123: "" LATIN SMALL LETTER G WITH CEDILLA
   3138         /* 15 */ "\u011D,\u011F,\u0121,\u0123",
   3139         /* 16 */ null,
   3140         // U+0125: "" LATIN SMALL LETTER H WITH CIRCUMFLEX
   3141         /* 17 */ "\u0125",
   3142         // U+0135: "" LATIN SMALL LETTER J WITH CIRCUMFLEX
   3143         /* 18 */ "\u0135",
   3144         // U+0175: "" LATIN SMALL LETTER W WITH CIRCUMFLEX
   3145         /* 19 */ "\u0175",
   3146     };
   3147 
   3148     private static final Object[] LANGUAGES_AND_TEXTS = {
   3149         "DEFAULT", LANGUAGE_DEFAULT, /* default */
   3150         "af", LANGUAGE_af, /* Afrikaans */
   3151         "ar", LANGUAGE_ar, /* Arabic */
   3152         "be", LANGUAGE_be, /* Belarusian */
   3153         "bg", LANGUAGE_bg, /* Bulgarian */
   3154         "ca", LANGUAGE_ca, /* Catalan */
   3155         "cs", LANGUAGE_cs, /* Czech */
   3156         "da", LANGUAGE_da, /* Danish */
   3157         "de", LANGUAGE_de, /* German */
   3158         "el", LANGUAGE_el, /* Greek */
   3159         "en", LANGUAGE_en, /* English */
   3160         "eo", LANGUAGE_eo, /* Esperanto */
   3161         "es", LANGUAGE_es, /* Spanish */
   3162         "et", LANGUAGE_et, /* Estonian */
   3163         "fa", LANGUAGE_fa, /* Persian */
   3164         "fi", LANGUAGE_fi, /* Finnish */
   3165         "fr", LANGUAGE_fr, /* French */
   3166         "hi", LANGUAGE_hi, /* Hindi */
   3167         "hr", LANGUAGE_hr, /* Croatian */
   3168         "hu", LANGUAGE_hu, /* Hungarian */
   3169         "is", LANGUAGE_is, /* Icelandic */
   3170         "it", LANGUAGE_it, /* Italian */
   3171         "iw", LANGUAGE_iw, /* Hebrew */
   3172         "ka", LANGUAGE_ka, /* Georgian */
   3173         "ky", LANGUAGE_ky, /* Kirghiz */
   3174         "lt", LANGUAGE_lt, /* Lithuanian */
   3175         "lv", LANGUAGE_lv, /* Latvian */
   3176         "mk", LANGUAGE_mk, /* Macedonian */
   3177         "mn", LANGUAGE_mn, /* Mongolian */
   3178         "nb", LANGUAGE_nb, /* Norwegian Bokml */
   3179         "nl", LANGUAGE_nl, /* Dutch */
   3180         "pl", LANGUAGE_pl, /* Polish */
   3181         "pt", LANGUAGE_pt, /* Portuguese */
   3182         "rm", LANGUAGE_rm, /* Raeto-Romance */
   3183         "ro", LANGUAGE_ro, /* Romanian */
   3184         "ru", LANGUAGE_ru, /* Russian */
   3185         "sk", LANGUAGE_sk, /* Slovak */
   3186         "sl", LANGUAGE_sl, /* Slovenian */
   3187         "sr", LANGUAGE_sr, /* Serbian */
   3188         "sv", LANGUAGE_sv, /* Swedish */
   3189         "sw", LANGUAGE_sw, /* Swahili */
   3190         "th", LANGUAGE_th, /* Thai */
   3191         "tl", LANGUAGE_tl, /* Tagalog */
   3192         "tr", LANGUAGE_tr, /* Turkish */
   3193         "uk", LANGUAGE_uk, /* Ukrainian */
   3194         "vi", LANGUAGE_vi, /* Vietnamese */
   3195         "zu", LANGUAGE_zu, /* Zulu */
   3196         "zz", LANGUAGE_zz, /* No language */
   3197     };
   3198 
   3199     static {
   3200         int id = 0;
   3201         for (final String name : NAMES) {
   3202             sNameToIdsMap.put(name, id++);
   3203         }
   3204 
   3205         for (int i = 0; i < LANGUAGES_AND_TEXTS.length; i += 2) {
   3206             final String language = (String)LANGUAGES_AND_TEXTS[i];
   3207             final String[] texts = (String[])LANGUAGES_AND_TEXTS[i + 1];
   3208             sLocaleToTextsMap.put(language, texts);
   3209         }
   3210     }
   3211 }
   3212