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