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