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