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