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