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