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