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