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