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