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