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