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