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