Merge "Import translations. DO NOT MERGE"
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.java
index 14991f5..a9eeeb0 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.java
@@ -124,71 +124,71 @@
         /* 58 */ "more_keys_for_currency",
         /* 59 */ "more_keys_for_punctuation",
         /* 60 */ "more_keys_for_tablet_punctuation",
-        /* 61 */ "more_keys_for_star",
-        /* 62 */ "more_keys_for_bullet",
-        /* 63 */ "more_keys_for_plus",
-        /* 64 */ "more_keys_for_left_parenthesis",
-        /* 65 */ "more_keys_for_right_parenthesis",
-        /* 66 */ "more_keys_for_less_than",
-        /* 67 */ "more_keys_for_greater_than",
-        /* 68 */ "more_keys_for_arabic_diacritics",
-        /* 69 */ "keylabel_for_symbols_1",
-        /* 70 */ "keylabel_for_symbols_2",
-        /* 71 */ "keylabel_for_symbols_3",
-        /* 72 */ "keylabel_for_symbols_4",
-        /* 73 */ "keylabel_for_symbols_5",
-        /* 74 */ "keylabel_for_symbols_6",
-        /* 75 */ "keylabel_for_symbols_7",
-        /* 76 */ "keylabel_for_symbols_8",
-        /* 77 */ "keylabel_for_symbols_9",
-        /* 78 */ "keylabel_for_symbols_0",
-        /* 79 */ "label_to_symbol_key",
-        /* 80 */ "label_to_symbol_with_microphone_key",
-        /* 81 */ "additional_more_keys_for_symbols_1",
-        /* 82 */ "additional_more_keys_for_symbols_2",
-        /* 83 */ "additional_more_keys_for_symbols_3",
-        /* 84 */ "additional_more_keys_for_symbols_4",
-        /* 85 */ "additional_more_keys_for_symbols_5",
-        /* 86 */ "additional_more_keys_for_symbols_6",
-        /* 87 */ "additional_more_keys_for_symbols_7",
-        /* 88 */ "additional_more_keys_for_symbols_8",
-        /* 89 */ "additional_more_keys_for_symbols_9",
-        /* 90 */ "additional_more_keys_for_symbols_0",
-        /* 91 */ "more_keys_for_symbols_1",
-        /* 92 */ "more_keys_for_symbols_2",
-        /* 93 */ "more_keys_for_symbols_3",
-        /* 94 */ "more_keys_for_symbols_4",
-        /* 95 */ "more_keys_for_symbols_5",
-        /* 96 */ "more_keys_for_symbols_6",
-        /* 97 */ "more_keys_for_symbols_7",
-        /* 98 */ "more_keys_for_symbols_8",
-        /* 99 */ "more_keys_for_symbols_9",
-        /* 100 */ "more_keys_for_symbols_0",
-        /* 101 */ "keylabel_for_comma",
-        /* 102 */ "more_keys_for_comma",
-        /* 103 */ "keylabel_for_tablet_comma",
-        /* 104 */ "keyhintlabel_for_tablet_comma",
-        /* 105 */ "more_keys_for_tablet_comma",
-        /* 106 */ "keylabel_for_period",
-        /* 107 */ "keyhintlabel_for_period",
-        /* 108 */ "more_keys_for_period",
-        /* 109 */ "keylabel_for_tablet_period",
-        /* 110 */ "keyhintlabel_for_tablet_period",
-        /* 111 */ "more_keys_for_tablet_period",
-        /* 112 */ "keylabel_for_symbols_question",
-        /* 113 */ "keylabel_for_symbols_semicolon",
-        /* 114 */ "keylabel_for_symbols_percent",
-        /* 115 */ "more_keys_for_exclamation",
-        /* 116 */ "more_keys_for_question",
-        /* 117 */ "more_keys_for_symbols_semicolon",
-        /* 118 */ "more_keys_for_symbols_percent",
-        /* 119 */ "more_keys_for_q",
-        /* 120 */ "more_keys_for_x",
-        /* 121 */ "keylabel_for_q",
-        /* 122 */ "keylabel_for_w",
-        /* 123 */ "keylabel_for_y",
-        /* 124 */ "keylabel_for_x",
-        /* 125 */ "keylabel_for_spanish_row2_10",
+        /* 61 */ "keylabel_for_spanish_row2_10",
+        /* 62 */ "more_keys_for_star",
+        /* 63 */ "more_keys_for_bullet",
+        /* 64 */ "more_keys_for_plus",
+        /* 65 */ "more_keys_for_left_parenthesis",
+        /* 66 */ "more_keys_for_right_parenthesis",
+        /* 67 */ "more_keys_for_less_than",
+        /* 68 */ "more_keys_for_greater_than",
+        /* 69 */ "more_keys_for_arabic_diacritics",
+        /* 70 */ "keylabel_for_symbols_1",
+        /* 71 */ "keylabel_for_symbols_2",
+        /* 72 */ "keylabel_for_symbols_3",
+        /* 73 */ "keylabel_for_symbols_4",
+        /* 74 */ "keylabel_for_symbols_5",
+        /* 75 */ "keylabel_for_symbols_6",
+        /* 76 */ "keylabel_for_symbols_7",
+        /* 77 */ "keylabel_for_symbols_8",
+        /* 78 */ "keylabel_for_symbols_9",
+        /* 79 */ "keylabel_for_symbols_0",
+        /* 80 */ "label_to_symbol_key",
+        /* 81 */ "label_to_symbol_with_microphone_key",
+        /* 82 */ "additional_more_keys_for_symbols_1",
+        /* 83 */ "additional_more_keys_for_symbols_2",
+        /* 84 */ "additional_more_keys_for_symbols_3",
+        /* 85 */ "additional_more_keys_for_symbols_4",
+        /* 86 */ "additional_more_keys_for_symbols_5",
+        /* 87 */ "additional_more_keys_for_symbols_6",
+        /* 88 */ "additional_more_keys_for_symbols_7",
+        /* 89 */ "additional_more_keys_for_symbols_8",
+        /* 90 */ "additional_more_keys_for_symbols_9",
+        /* 91 */ "additional_more_keys_for_symbols_0",
+        /* 92 */ "more_keys_for_symbols_1",
+        /* 93 */ "more_keys_for_symbols_2",
+        /* 94 */ "more_keys_for_symbols_3",
+        /* 95 */ "more_keys_for_symbols_4",
+        /* 96 */ "more_keys_for_symbols_5",
+        /* 97 */ "more_keys_for_symbols_6",
+        /* 98 */ "more_keys_for_symbols_7",
+        /* 99 */ "more_keys_for_symbols_8",
+        /* 100 */ "more_keys_for_symbols_9",
+        /* 101 */ "more_keys_for_symbols_0",
+        /* 102 */ "keylabel_for_comma",
+        /* 103 */ "more_keys_for_comma",
+        /* 104 */ "keylabel_for_tablet_comma",
+        /* 105 */ "keyhintlabel_for_tablet_comma",
+        /* 106 */ "more_keys_for_tablet_comma",
+        /* 107 */ "keylabel_for_period",
+        /* 108 */ "keyhintlabel_for_period",
+        /* 109 */ "more_keys_for_period",
+        /* 110 */ "keylabel_for_tablet_period",
+        /* 111 */ "keyhintlabel_for_tablet_period",
+        /* 112 */ "more_keys_for_tablet_period",
+        /* 113 */ "keylabel_for_symbols_question",
+        /* 114 */ "keylabel_for_symbols_semicolon",
+        /* 115 */ "keylabel_for_symbols_percent",
+        /* 116 */ "more_keys_for_exclamation",
+        /* 117 */ "more_keys_for_question",
+        /* 118 */ "more_keys_for_symbols_semicolon",
+        /* 119 */ "more_keys_for_symbols_percent",
+        /* 120 */ "more_keys_for_q",
+        /* 121 */ "more_keys_for_x",
+        /* 122 */ "keylabel_for_q",
+        /* 123 */ "keylabel_for_w",
+        /* 124 */ "keylabel_for_y",
+        /* 125 */ "keylabel_for_x",
         /* 126 */ "more_keys_for_am_pm",
         /* 127 */ "settings_as_more_key",
         /* 128 */ "shortcut_as_more_key",
@@ -247,105 +247,105 @@
         /* 58 */ "$,\u00A2,\u20AC,\u00A3,\u00A5,\u20B1",
         /* 59 */ "!fixedColumnOrder!8,;,/,(,),#,!,\\,,?,&,\\%,+,\",-,:,',@",
         /* 60 */ "!fixedColumnOrder!7,;,/,(,),#,',\\,,&,\\%,+,\",-,:,@",
+        // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE
+        /* 61 */ "\u00F1",
         // U+2020: "†" DAGGER
         // U+2021: "‡" DOUBLE DAGGER
         // U+2605: "★" BLACK STAR
-        /* 61 */ "\u2020,\u2021,\u2605",
+        /* 62 */ "\u2020,\u2021,\u2605",
         // U+266A: "♪" EIGHTH NOTE
         // U+2665: "♥" BLACK HEART SUIT
         // U+2660: "♠" BLACK SPADE SUIT
         // U+2666: "♦" BLACK DIAMOND SUIT
         // U+2663: "♣" BLACK CLUB SUIT
-        /* 62 */ "\u266A,\u2665,\u2660,\u2666,\u2663",
+        /* 63 */ "\u266A,\u2665,\u2660,\u2666,\u2663",
         // U+00B1: "±" PLUS-MINUS SIGN
-        /* 63 */ "\u00B1",
+        /* 64 */ "\u00B1",
         // The all letters need to be mirrored are found at
         // http://www.unicode.org/Public/6.1.0/ucd/BidiMirroring.txt
-        /* 64 */ "!fixedColumnOrder!3,<,{,[",
-        /* 65 */ "!fixedColumnOrder!3,>,},]",
+        /* 65 */ "!fixedColumnOrder!3,<,{,[",
+        /* 66 */ "!fixedColumnOrder!3,>,},]",
         // U+2039: "‹" SINGLE LEFT-POINTING ANGLE QUOTATION MARK
         // U+203A: "›" SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
         // U+2264: "≤" LESS-THAN OR EQUAL TO
         // U+2265: "≥" GREATER-THAN EQUAL TO
         // U+00AB: "«" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
         // U+00BB: "»" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-        /* 66 */ "!fixedColumnOrder!3,\u2039,\u2264,\u00AB",
-        /* 67 */ "!fixedColumnOrder!3,\u203A,\u2265,\u00BB",
-        /* 68 */ EMPTY,
-        /* 69 */ "1",
-        /* 70 */ "2",
-        /* 71 */ "3",
-        /* 72 */ "4",
-        /* 73 */ "5",
-        /* 74 */ "6",
-        /* 75 */ "7",
-        /* 76 */ "8",
-        /* 77 */ "9",
-        /* 78 */ "0",
+        /* 67 */ "!fixedColumnOrder!3,\u2039,\u2264,\u00AB",
+        /* 68 */ "!fixedColumnOrder!3,\u203A,\u2265,\u00BB",
+        /* 69 */ EMPTY,
+        /* 70 */ "1",
+        /* 71 */ "2",
+        /* 72 */ "3",
+        /* 73 */ "4",
+        /* 74 */ "5",
+        /* 75 */ "6",
+        /* 76 */ "7",
+        /* 77 */ "8",
+        /* 78 */ "9",
+        /* 79 */ "0",
         // Label for "switch to symbols" key.
-        /* 79 */ "?123",
+        /* 80 */ "?123",
         // Label for "switch to symbols with microphone" key. This string shouldn't include the "mic"
         // part because it'll be appended by the code.
-        /* 80 */ "123",
-        /* 81~ */
+        /* 81 */ "123",
+        /* 82~ */
         EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY,
-        /* ~90 */
+        /* ~91 */
         // U+00B9: "¹" SUPERSCRIPT ONE
         // U+00BD: "½" VULGAR FRACTION ONE HALF
         // U+2153: "⅓" VULGAR FRACTION ONE THIRD
         // U+00BC: "¼" VULGAR FRACTION ONE QUARTER
         // U+215B: "⅛" VULGAR FRACTION ONE EIGHTH
-        /* 91 */ "\u00B9,\u00BD,\u2153,\u00BC,\u215B",
+        /* 92 */ "\u00B9,\u00BD,\u2153,\u00BC,\u215B",
         // U+00B2: "²" SUPERSCRIPT TWO
         // U+2154: "⅔" VULGAR FRACTION TWO THIRDS
-        /* 92 */ "\u00B2,\u2154",
+        /* 93 */ "\u00B2,\u2154",
         // U+00B3: "³" SUPERSCRIPT THREE
         // U+00BE: "¾" VULGAR FRACTION THREE QUARTERS
         // U+215C: "⅜" VULGAR FRACTION THREE EIGHTHS
-        /* 93 */ "\u00B3,\u00BE,\u215C",
+        /* 94 */ "\u00B3,\u00BE,\u215C",
         // U+2074: "⁴" SUPERSCRIPT FOUR
-        /* 94 */ "\u2074",
+        /* 95 */ "\u2074",
         // U+215D: "⅝" VULGAR FRACTION FIVE EIGHTHS
-        /* 95 */ "\u215D",
-        /* 96 */ EMPTY,
+        /* 96 */ "\u215D",
+        /* 97 */ EMPTY,
         // U+215E: "⅞" VULGAR FRACTION SEVEN EIGHTHS
-        /* 97 */ "\u215E",
-        /* 98 */ EMPTY,
+        /* 98 */ "\u215E",
         /* 99 */ EMPTY,
+        /* 100 */ EMPTY,
         // U+207F: "ⁿ" SUPERSCRIPT LATIN SMALL LETTER N
         // U+2205: "∅" EMPTY SET
-        /* 100 */ "\u207F,\u2205",
+        /* 101 */ "\u207F,\u2205",
         // Comma key
-        /* 101 */ ",",
-        /* 102 */ EMPTY,
-        /* 103 */ ",",
-        /* 104 */ EMPTY,
+        /* 102 */ ",",
+        /* 103 */ EMPTY,
+        /* 104 */ ",",
         /* 105 */ EMPTY,
+        /* 106 */ EMPTY,
         // Period key
-        /* 106 */ ".",
-        /* 107 */ EMPTY,
-        /* 108 */ "!text/more_keys_for_punctuation",
-        /* 109 */ ".",
-        /* 110 */ EMPTY,
-        /* 111 */ "!text/more_keys_for_tablet_punctuation",
-        /* 112 */ "?",
-        /* 113 */ ";",
-        /* 114 */ "%",
+        /* 107 */ ".",
+        /* 108 */ EMPTY,
+        /* 109 */ "!text/more_keys_for_punctuation",
+        /* 110 */ ".",
+        /* 111 */ EMPTY,
+        /* 112 */ "!text/more_keys_for_tablet_punctuation",
+        /* 113 */ "?",
+        /* 114 */ ";",
+        /* 115 */ "%",
         // U+00A1: "¡" INVERTED EXCLAMATION MARK
-        /* 115 */ "\u00A1",
+        /* 116 */ "\u00A1",
         // U+00BF: "¿" INVERTED QUESTION MARK
-        /* 116 */ "\u00BF",
-        /* 117 */ EMPTY,
+        /* 117 */ "\u00BF",
+        /* 118 */ EMPTY,
         // U+2030: "‰" PER MILLE SIGN
-        /* 118 */ "\u2030",
-        /* 119 */ EMPTY,
+        /* 119 */ "\u2030",
         /* 120 */ EMPTY,
-        /* 121 */ "q",
-        /* 122 */ "w",
-        /* 123 */ "y",
-        /* 124 */ "x",
-        // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE
-        /* 125 */ "\u00F1",
+        /* 121 */ EMPTY,
+        /* 122 */ "q",
+        /* 123 */ "w",
+        /* 124 */ "y",
+        /* 125 */ "x",
         /* 126 */ "!fixedColumnOrder!2,!hasLabels!,!text/label_time_am,!text/label_time_pm",
         /* 127 */ "!icon/settings_key|!code/key_settings",
         /* 128 */ "!icon/shortcut_key|!code/key_shortcut",
@@ -488,26 +488,27 @@
         /* ~58 */
         /* 59 */ "!fixedColumnOrder!8,\",\',#,-,:,!,\u060C,\u061F,@,&,\\%,+,\u061B,/,(|),)|(",
         /* 60 */ null,
+        /* 61 */ null,
         // U+2605: "★" BLACK STAR
         // U+066D: "٭" ARABIC FIVE POINTED STAR
-        /* 61 */ "\u2605,\u066D",
+        /* 62 */ "\u2605,\u066D",
         // U+266A: "♪" EIGHTH NOTE
-        /* 62 */ "\u266A",
-        /* 63 */ null,
+        /* 63 */ "\u266A",
+        /* 64 */ null,
         // The all letters need to be mirrored are found at
         // http://www.unicode.org/Public/6.1.0/ucd/BidiMirroring.txt
         // U+FD3E: "﴾" ORNATE LEFT PARENTHESIS
         // U+FD3F: "﴿" ORNATE RIGHT PARENTHESIS
-        /* 64 */ "!fixedColumnOrder!4,\uFD3E|\uFD3F,<|>,{|},[|]",
-        /* 65 */ "!fixedColumnOrder!4,\uFD3F|\uFD3E,>|<,}|{,]|[",
+        /* 65 */ "!fixedColumnOrder!4,\uFD3E|\uFD3F,<|>,{|},[|]",
+        /* 66 */ "!fixedColumnOrder!4,\uFD3F|\uFD3E,>|<,}|{,]|[",
         // U+2264: "≤" LESS-THAN OR EQUAL TO
         // U+2265: "≥" GREATER-THAN EQUAL TO
         // U+00AB: "«" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
         // U+00BB: "»" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
         // U+2039: "‹" SINGLE LEFT-POINTING ANGLE QUOTATION MARK
         // U+203A: "›" SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
-        /* 66 */ "!fixedColumnOrder!3,\u2039|\u203A,\u2264|\u2265,\u00AB|\u00BB",
-        /* 67 */ "!fixedColumnOrder!3,\u203A|\u2039,\u2265|\u2264,\u00BB|\u00AB",
+        /* 67 */ "!fixedColumnOrder!3,\u2039|\u203A,\u2264|\u2265,\u00AB|\u00BB",
+        /* 68 */ "!fixedColumnOrder!3,\u203A|\u2039,\u2265|\u2264,\u00BB|\u00AB",
         // U+0655: "ٕ" ARABIC HAMZA BELOW
         // U+0654: "ٔ" ARABIC HAMZA ABOVE
         // U+0652: "ْ" ARABIC SUKUN
@@ -524,74 +525,74 @@
         // U+0640: "ـ" ARABIC TATWEEL
         // In order to make Tatweel easily distinguishable from other punctuations, we use consecutive Tatweels only for its displayed label.
         // Note: The space character is needed as a preceding letter to draw Arabic diacritics characters correctly.
-        /* 68 */ "!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",
+        /* 69 */ "!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",
         // U+0661: "١" ARABIC-INDIC DIGIT ONE
-        /* 69 */ "\u0661",
+        /* 70 */ "\u0661",
         // U+0662: "٢" ARABIC-INDIC DIGIT TWO
-        /* 70 */ "\u0662",
+        /* 71 */ "\u0662",
         // U+0663: "٣" ARABIC-INDIC DIGIT THREE
-        /* 71 */ "\u0663",
+        /* 72 */ "\u0663",
         // U+0664: "٤" ARABIC-INDIC DIGIT FOUR
-        /* 72 */ "\u0664",
+        /* 73 */ "\u0664",
         // U+0665: "٥" ARABIC-INDIC DIGIT FIVE
-        /* 73 */ "\u0665",
+        /* 74 */ "\u0665",
         // U+0666: "٦" ARABIC-INDIC DIGIT SIX
-        /* 74 */ "\u0666",
+        /* 75 */ "\u0666",
         // U+0667: "٧" ARABIC-INDIC DIGIT SEVEN
-        /* 75 */ "\u0667",
+        /* 76 */ "\u0667",
         // U+0668: "٨" ARABIC-INDIC DIGIT EIGHT
-        /* 76 */ "\u0668",
+        /* 77 */ "\u0668",
         // U+0669: "٩" ARABIC-INDIC DIGIT NINE
-        /* 77 */ "\u0669",
+        /* 78 */ "\u0669",
         // U+0660: "٠" ARABIC-INDIC DIGIT ZERO
-        /* 78 */ "\u0660",
+        /* 79 */ "\u0660",
         // Label for "switch to symbols" key.
         // U+061F: "؟" ARABIC QUESTION MARK
-        /* 79 */ "\u0663\u0662\u0661\u061F",
+        /* 80 */ "\u0663\u0662\u0661\u061F",
         // Label for "switch to symbols with microphone" key. This string shouldn't include the "mic"
         // part because it'll be appended by the code.
-        /* 80 */ "\u0663\u0662\u0661",
-        /* 81 */ "1",
-        /* 82 */ "2",
-        /* 83 */ "3",
-        /* 84 */ "4",
-        /* 85 */ "5",
-        /* 86 */ "6",
-        /* 87 */ "7",
-        /* 88 */ "8",
-        /* 89 */ "9",
+        /* 81 */ "\u0663\u0662\u0661",
+        /* 82 */ "1",
+        /* 83 */ "2",
+        /* 84 */ "3",
+        /* 85 */ "4",
+        /* 86 */ "5",
+        /* 87 */ "6",
+        /* 88 */ "7",
+        /* 89 */ "8",
+        /* 90 */ "9",
         // U+066B: "٫" ARABIC DECIMAL SEPARATOR
         // U+066C: "٬" ARABIC THOUSANDS SEPARATOR
-        /* 90 */ "0,\u066B,\u066C",
-        /* 91~ */
+        /* 91 */ "0,\u066B,\u066C",
+        /* 92~ */
         null, null, null, null, null, null, null, null, null, null,
-        /* ~100 */
+        /* ~101 */
         // U+060C: "،" ARABIC COMMA
-        /* 101 */ "\u060C",
-        /* 102 */ "\\,",
+        /* 102 */ "\u060C",
+        /* 103 */ "\\,",
         // U+061F: "؟" ARABIC QUESTION MARK
         // U+060C: "،" ARABIC COMMA
         // U+061B: "؛" ARABIC SEMICOLON
-        /* 103 */ "\u060C",
-        /* 104 */ "\u061F",
-        /* 105 */ "!fixedColumnOrder!4,:,!,\u061F,\u061B,-,/,\",\'",
-        /* 106 */ null,
+        /* 104 */ "\u060C",
+        /* 105 */ "\u061F",
+        /* 106 */ "!fixedColumnOrder!4,:,!,\u061F,\u061B,-,/,\",\'",
+        /* 107 */ null,
         // U+0651: "ّ" ARABIC SHADDA
-        /* 107 */ "\u0651",
-        /* 108 */ "!text/more_keys_for_arabic_diacritics",
-        /* 109 */ null,
-        /* 110 */ "\u0651",
-        /* 111 */ "!text/more_keys_for_arabic_diacritics",
-        /* 112 */ "\u061F",
-        /* 113 */ "\u061B",
+        /* 108 */ "\u0651",
+        /* 109 */ "!text/more_keys_for_arabic_diacritics",
+        /* 110 */ null,
+        /* 111 */ "\u0651",
+        /* 112 */ "!text/more_keys_for_arabic_diacritics",
+        /* 113 */ "\u061F",
+        /* 114 */ "\u061B",
         // U+066A: "٪" ARABIC PERCENT SIGN
-        /* 114 */ "\u066A",
-        /* 115 */ null,
+        /* 115 */ "\u066A",
+        /* 116 */ null,
         // U+00BF: "¿" INVERTED QUESTION MARK
-        /* 116 */ "?,\u00BF",
-        /* 117 */ ";",
+        /* 117 */ "?,\u00BF",
+        /* 118 */ ";",
         // U+2030: "‰" PER MILLE SIGN
-        /* 118 */ "\\%,\u2030",
+        /* 119 */ "\\%,\u2030",
     };
 
     /* Language az_AZ: Azerbaijani (Azerbaijan) */
@@ -762,15 +763,8 @@
         // U+00B7: "·" MIDDLE DOT
         /* 59 */ "!fixedColumnOrder!9,;,/,(,),#,\u00B7,!,\\,,?,&,\\%,+,\",-,:,',@",
         /* 60 */ "!fixedColumnOrder!8,;,/,(,),#,\u00B7,',\\,,&,\\%,+,\",-,:,@",
-        /* 61~ */
-        null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
-        null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
-        null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
-        null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
-        null, null, null, null,
-        /* ~124 */
         // U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA
-        /* 125 */ "\u00E7",
+        /* 61 */ "\u00E7",
     };
 
     /* Language cs: Czech */
@@ -1165,24 +1159,26 @@
         /* 20~ */
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
-        null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
-        null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
-        null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
-        null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
-        null, null, null, null, null, null, null, null, null,
-        /* ~118 */
-        /* 119 */ "q",
-        /* 120 */ "x",
-        // U+015D: "ŝ" LATIN SMALL LETTER S WITH CIRCUMFLEX
-        /* 121 */ "\u015D",
-        // U+011D: "ĝ" LATIN SMALL LETTER G WITH CIRCUMFLEX
-        /* 122 */ "\u011D",
-        // U+016D: "ŭ" LATIN SMALL LETTER U WITH BREVE
-        /* 123 */ "\u016D",
-        // U+0109: "ĉ" LATIN SMALL LETTER C WITH CIRCUMFLEX
-        /* 124 */ "\u0109",
+        null, null, null, null, null, null, null, null, null, null, null,
+        /* ~60 */
         // U+0135: "ĵ" LATIN SMALL LETTER J WITH CIRCUMFLEX
-        /* 125 */ "\u0135",
+        /* 61 */ "\u0135",
+        /* 62~ */
+        null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
+        null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
+        null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
+        null, null, null, null, null, null, null, null, null, null, null, null, null,
+        /* ~119 */
+        /* 120 */ "q",
+        /* 121 */ "x",
+        // U+015D: "ŝ" LATIN SMALL LETTER S WITH CIRCUMFLEX
+        /* 122 */ "\u015D",
+        // U+011D: "ĝ" LATIN SMALL LETTER G WITH CIRCUMFLEX
+        /* 123 */ "\u011D",
+        // U+016D: "ŭ" LATIN SMALL LETTER U WITH BREVE
+        /* 124 */ "\u016D",
+        // U+0109: "ĉ" LATIN SMALL LETTER C WITH CIRCUMFLEX
+        /* 125 */ "\u0109",
     };
 
     /* Language es: Spanish */
@@ -1381,26 +1377,27 @@
         // U+061B: "؛" ARABIC SEMICOLON
         /* 59 */ "!fixedColumnOrder!8,\",\',#,-,:,!,\u060C,\u061F,@,&,\\%,+,\u061B,/,(|),)|(",
         /* 60 */ null,
+        /* 61 */ null,
         // U+2605: "★" BLACK STAR
         // U+066D: "٭" ARABIC FIVE POINTED STAR
-        /* 61 */ "\u2605,\u066D",
+        /* 62 */ "\u2605,\u066D",
         // U+266A: "♪" EIGHTH NOTE
-        /* 62 */ "\u266A",
-        /* 63 */ null,
+        /* 63 */ "\u266A",
+        /* 64 */ null,
         // The all letters need to be mirrored are found at
         // http://www.unicode.org/Public/6.1.0/ucd/BidiMirroring.txt
         // U+FD3E: "﴾" ORNATE LEFT PARENTHESIS
         // U+FD3F: "﴿" ORNATE RIGHT PARENTHESIS
-        /* 64 */ "!fixedColumnOrder!4,\uFD3E|\uFD3F,<|>,{|},[|]",
-        /* 65 */ "!fixedColumnOrder!4,\uFD3F|\uFD3E,>|<,}|{,]|[",
+        /* 65 */ "!fixedColumnOrder!4,\uFD3E|\uFD3F,<|>,{|},[|]",
+        /* 66 */ "!fixedColumnOrder!4,\uFD3F|\uFD3E,>|<,}|{,]|[",
         // U+2264: "≤" LESS-THAN OR EQUAL TO
         // U+2265: "≥" GREATER-THAN EQUAL TO
         // U+00AB: "«" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
         // U+00BB: "»" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
         // U+2039: "‹" SINGLE LEFT-POINTING ANGLE QUOTATION MARK
         // U+203A: "›" SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
-        /* 66 */ "!fixedColumnOrder!3,\u2039|\u203A,\u2264|\u2265,<|>",
-        /* 67 */ "!fixedColumnOrder!3,\u203A|\u2039,\u2265|\u2264,>|<",
+        /* 67 */ "!fixedColumnOrder!3,\u2039|\u203A,\u2264|\u2265,<|>",
+        /* 68 */ "!fixedColumnOrder!3,\u203A|\u2039,\u2265|\u2264,>|<",
         // U+0655: "ٕ" ARABIC HAMZA BELOW
         // U+0652: "ْ" ARABIC SUKUN
         // U+0651: "ّ" ARABIC SHADDA
@@ -1417,76 +1414,76 @@
         // U+0640: "ـ" ARABIC TATWEEL
         // In order to make Tatweel easily distinguishable from other punctuations, we use consecutive Tatweels only for its displayed label.
         // Note: The space character is needed as a preceding letter to draw Arabic diacritics characters correctly.
-        /* 68 */ "!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",
+        /* 69 */ "!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",
         // U+06F1: "۱" EXTENDED ARABIC-INDIC DIGIT ONE
-        /* 69 */ "\u06F1",
+        /* 70 */ "\u06F1",
         // U+06F2: "۲" EXTENDED ARABIC-INDIC DIGIT TWO
-        /* 70 */ "\u06F2",
+        /* 71 */ "\u06F2",
         // U+06F3: "۳" EXTENDED ARABIC-INDIC DIGIT THREE
-        /* 71 */ "\u06F3",
+        /* 72 */ "\u06F3",
         // U+06F4: "۴" EXTENDED ARABIC-INDIC DIGIT FOUR
-        /* 72 */ "\u06F4",
+        /* 73 */ "\u06F4",
         // U+06F5: "۵" EXTENDED ARABIC-INDIC DIGIT FIVE
-        /* 73 */ "\u06F5",
+        /* 74 */ "\u06F5",
         // U+06F6: "۶" EXTENDED ARABIC-INDIC DIGIT SIX
-        /* 74 */ "\u06F6",
+        /* 75 */ "\u06F6",
         // U+06F7: "۷" EXTENDED ARABIC-INDIC DIGIT SEVEN
-        /* 75 */ "\u06F7",
+        /* 76 */ "\u06F7",
         // U+06F8: "۸" EXTENDED ARABIC-INDIC DIGIT EIGHT
-        /* 76 */ "\u06F8",
+        /* 77 */ "\u06F8",
         // U+06F9: "۹" EXTENDED ARABIC-INDIC DIGIT NINE
-        /* 77 */ "\u06F9",
+        /* 78 */ "\u06F9",
         // U+06F0: "۰" EXTENDED ARABIC-INDIC DIGIT ZERO
-        /* 78 */ "\u06F0",
+        /* 79 */ "\u06F0",
         // Label for "switch to symbols" key.
         // U+061F: "؟" ARABIC QUESTION MARK
-        /* 79 */ "\u06F3\u06F2\u06F1\u061F",
+        /* 80 */ "\u06F3\u06F2\u06F1\u061F",
         // Label for "switch to symbols with microphone" key. This string shouldn't include the "mic"
         // part because it'll be appended by the code.
-        /* 80 */ "\u06F3\u06F2\u06F1",
-        /* 81 */ "1",
-        /* 82 */ "2",
-        /* 83 */ "3",
-        /* 84 */ "4",
-        /* 85 */ "5",
-        /* 86 */ "6",
-        /* 87 */ "7",
-        /* 88 */ "8",
-        /* 89 */ "9",
+        /* 81 */ "\u06F3\u06F2\u06F1",
+        /* 82 */ "1",
+        /* 83 */ "2",
+        /* 84 */ "3",
+        /* 85 */ "4",
+        /* 86 */ "5",
+        /* 87 */ "6",
+        /* 88 */ "7",
+        /* 89 */ "8",
+        /* 90 */ "9",
         // U+066B: "٫" ARABIC DECIMAL SEPARATOR
         // U+066C: "٬" ARABIC THOUSANDS SEPARATOR
-        /* 90 */ "0,\u066B,\u066C",
-        /* 91~ */
+        /* 91 */ "0,\u066B,\u066C",
+        /* 92~ */
         null, null, null, null, null, null, null, null, null, null,
-        /* ~100 */
+        /* ~101 */
         // U+060C: "،" ARABIC COMMA
-        /* 101 */ "\u060C",
-        /* 102 */ "\\,",
+        /* 102 */ "\u060C",
+        /* 103 */ "\\,",
         // U+060C: "،" ARABIC COMMA
         // U+061B: "؛" ARABIC SEMICOLON
         // U+061F: "؟" ARABIC QUESTION MARK
         // U+00AB: "«" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
         // U+00BB: "»" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
-        /* 103 */ "\u060C",
-        /* 104 */ "\u061F",
-        /* 105 */ "!fixedColumnOrder!4,:,!,\u061F,\u061B,-,/,\u00AB|\u00BB,\u00BB|\u00AB",
-        /* 106 */ null,
+        /* 104 */ "\u060C",
+        /* 105 */ "\u061F",
+        /* 106 */ "!fixedColumnOrder!4,:,!,\u061F,\u061B,-,/,\u00AB|\u00BB,\u00BB|\u00AB",
+        /* 107 */ null,
         // U+064B: "ً" ARABIC FATHATAN
-        /* 107 */ "\u064B",
-        /* 108 */ "!text/more_keys_for_arabic_diacritics",
-        /* 109 */ null,
-        /* 110 */ "\u064B",
-        /* 111 */ "!text/more_keys_for_arabic_diacritics",
-        /* 112 */ "\u061F",
-        /* 113 */ "\u061B",
+        /* 108 */ "\u064B",
+        /* 109 */ "!text/more_keys_for_arabic_diacritics",
+        /* 110 */ null,
+        /* 111 */ "\u064B",
+        /* 112 */ "!text/more_keys_for_arabic_diacritics",
+        /* 113 */ "\u061F",
+        /* 114 */ "\u061B",
         // U+066A: "٪" ARABIC PERCENT SIGN
-        /* 114 */ "\u066A",
-        /* 115 */ null,
+        /* 115 */ "\u066A",
+        /* 116 */ null,
         // U+00BF: "¿" INVERTED QUESTION MARK
-        /* 116 */ "?,\u00BF",
-        /* 117 */ ";",
+        /* 117 */ "?,\u00BF",
+        /* 118 */ ";",
         // U+2030: "‰" PER MILLE SIGN
-        /* 118 */ "\\%,\u2030",
+        /* 119 */ "\\%,\u2030",
     };
 
     /* Language fi: Finnish */
@@ -1625,43 +1622,43 @@
         // U+20B9: "₹" INDIAN RUPEE SIGN
         /* 57 */ "\u20B9",
         /* 58~ */
-        null, null, null, null, null, null, null, null, null, null, null,
-        /* ~68 */
+        null, null, null, null, null, null, null, null, null, null, null, null,
+        /* ~69 */
         // U+0967: "१" DEVANAGARI DIGIT ONE
-        /* 69 */ "\u0967",
+        /* 70 */ "\u0967",
         // U+0968: "२" DEVANAGARI DIGIT TWO
-        /* 70 */ "\u0968",
+        /* 71 */ "\u0968",
         // U+0969: "३" DEVANAGARI DIGIT THREE
-        /* 71 */ "\u0969",
+        /* 72 */ "\u0969",
         // U+096A: "४" DEVANAGARI DIGIT FOUR
-        /* 72 */ "\u096A",
+        /* 73 */ "\u096A",
         // U+096B: "५" DEVANAGARI DIGIT FIVE
-        /* 73 */ "\u096B",
+        /* 74 */ "\u096B",
         // U+096C: "६" DEVANAGARI DIGIT SIX
-        /* 74 */ "\u096C",
+        /* 75 */ "\u096C",
         // U+096D: "७" DEVANAGARI DIGIT SEVEN
-        /* 75 */ "\u096D",
+        /* 76 */ "\u096D",
         // U+096E: "८" DEVANAGARI DIGIT EIGHT
-        /* 76 */ "\u096E",
+        /* 77 */ "\u096E",
         // U+096F: "९" DEVANAGARI DIGIT NINE
-        /* 77 */ "\u096F",
+        /* 78 */ "\u096F",
         // U+0966: "०" DEVANAGARI DIGIT ZERO
-        /* 78 */ "\u0966",
+        /* 79 */ "\u0966",
         // Label for "switch to symbols" key.
-        /* 79 */ "?\u0967\u0968\u0969",
+        /* 80 */ "?\u0967\u0968\u0969",
         // Label for "switch to symbols with microphone" key. This string shouldn't include the "mic"
         // part because it'll be appended by the code.
-        /* 80 */ "\u0967\u0968\u0969",
-        /* 81 */ "1",
-        /* 82 */ "2",
-        /* 83 */ "3",
-        /* 84 */ "4",
-        /* 85 */ "5",
-        /* 86 */ "6",
-        /* 87 */ "7",
-        /* 88 */ "8",
-        /* 89 */ "9",
-        /* 90 */ "0",
+        /* 81 */ "\u0967\u0968\u0969",
+        /* 82 */ "1",
+        /* 83 */ "2",
+        /* 84 */ "3",
+        /* 85 */ "4",
+        /* 86 */ "5",
+        /* 87 */ "6",
+        /* 88 */ "7",
+        /* 89 */ "8",
+        /* 90 */ "9",
+        /* 91 */ "0",
     };
 
     /* Language hr: Croatian */
@@ -1775,32 +1772,32 @@
         /* 60~ */
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
-        null, null, null, null, null, null, null, null, null, null, null, null, null,
-        /* ~102 */
+        null, null, null, null, null, null, null, null, null, null, null, null, null, null,
+        /* ~103 */
         // U+058F: "֏" ARMENIAN DRAM SIGN
         // TODO: Enable this when we have glyph for the following letter
         // <string name="keylabel_for_currency">&#x058F;</string>
         // 
         // U+055D: "՝" ARMENIAN COMMA
-        /* 103 */ "\u055D",
-        /* 104 */ null,
+        /* 104 */ "\u055D",
         /* 105 */ null,
+        /* 106 */ null,
         // U+0589: "։" ARMENIAN FULL STOP
-        /* 106 */ "\u0589",
-        /* 107 */ null,
+        /* 107 */ "\u0589",
         /* 108 */ null,
-        /* 109 */ "\u0589",
-        /* 110 */ null,
-        /* 111 */ "!text/more_keys_for_punctuation",
-        /* 112~ */
+        /* 109 */ null,
+        /* 110 */ "\u0589",
+        /* 111 */ null,
+        /* 112 */ "!text/more_keys_for_punctuation",
+        /* 113~ */
         null, null, null,
-        /* ~114 */
+        /* ~115 */
         // U+055C: "՜" ARMENIAN EXCLAMATION MARK
         // U+00A1: "¡" INVERTED EXCLAMATION MARK
-        /* 115 */ "\u055C,\u00A1",
+        /* 116 */ "\u055C,\u00A1",
         // U+055E: "՞" ARMENIAN QUESTION MARK
         // U+00BF: "¿" INVERTED QUESTION MARK
-        /* 116 */ "\u055E,\u00BF",
+        /* 117 */ "\u055E,\u00BF",
     };
 
     /* Language is: Icelandic */
@@ -1947,24 +1944,25 @@
         /* 58 */ null,
         /* 59 */ "!fixedColumnOrder!8,;,/,(|),)|(,#,!,\\,,?,&,\\%,+,\",-,:,',@",
         /* 60 */ "!fixedColumnOrder!7,;,/,(|),)|(,#,',\\,,&,\\%,+,\",-,:,@",
+        /* 61 */ null,
         // U+2605: "★" BLACK STAR
-        /* 61 */ "\u2605",
-        /* 62 */ null,
+        /* 62 */ "\u2605",
+        /* 63 */ null,
         // U+00B1: "±" PLUS-MINUS SIGN
         // U+FB29: "﬩" HEBREW LETTER ALTERNATIVE PLUS SIGN
-        /* 63 */ "\u00B1,\uFB29",
+        /* 64 */ "\u00B1,\uFB29",
         // The all letters need to be mirrored are found at
         // http://www.unicode.org/Public/6.1.0/ucd/BidiMirroring.txt
-        /* 64 */ "!fixedColumnOrder!3,<|>,{|},[|]",
-        /* 65 */ "!fixedColumnOrder!3,>|<,}|{,]|[",
+        /* 65 */ "!fixedColumnOrder!3,<|>,{|},[|]",
+        /* 66 */ "!fixedColumnOrder!3,>|<,}|{,]|[",
         // U+2264: "≤" LESS-THAN OR EQUAL TO
         // U+2265: "≥" GREATER-THAN EQUAL TO
         // U+00AB: "«" LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
         // U+00BB: "»" RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
         // U+2039: "‹" SINGLE LEFT-POINTING ANGLE QUOTATION MARK
         // U+203A: "›" SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
-        /* 66 */ "!fixedColumnOrder!3,\u2039|\u203A,\u2264|\u2265,\u00AB|\u00BB",
-        /* 67 */ "!fixedColumnOrder!3,\u203A|\u2039,\u2265|\u2264,\u00BB|\u00AB",
+        /* 67 */ "!fixedColumnOrder!3,\u2039|\u203A,\u2264|\u2265,\u00AB|\u00BB",
+        /* 68 */ "!fixedColumnOrder!3,\u203A|\u2039,\u2265|\u2264,\u00BB|\u00AB",
     };
 
     /* Language ka_GE: Georgian (Georgia) */
@@ -2433,43 +2431,43 @@
         // U+0930/U+0941/U+002E "रु." NEPALESE RUPEE SIGN
         /* 57 */ "\u0930\u0941.",
         /* 58~ */
-        null, null, null, null, null, null, null, null, null, null, null,
-        /* ~68 */
+        null, null, null, null, null, null, null, null, null, null, null, null,
+        /* ~69 */
         // U+0967: "१" DEVANAGARI DIGIT ONE
-        /* 69 */ "\u0967",
+        /* 70 */ "\u0967",
         // U+0968: "२" DEVANAGARI DIGIT TWO
-        /* 70 */ "\u0968",
+        /* 71 */ "\u0968",
         // U+0969: "३" DEVANAGARI DIGIT THREE
-        /* 71 */ "\u0969",
+        /* 72 */ "\u0969",
         // U+096A: "४" DEVANAGARI DIGIT FOUR
-        /* 72 */ "\u096A",
+        /* 73 */ "\u096A",
         // U+096B: "५" DEVANAGARI DIGIT FIVE
-        /* 73 */ "\u096B",
+        /* 74 */ "\u096B",
         // U+096C: "६" DEVANAGARI DIGIT SIX
-        /* 74 */ "\u096C",
+        /* 75 */ "\u096C",
         // U+096D: "७" DEVANAGARI DIGIT SEVEN
-        /* 75 */ "\u096D",
+        /* 76 */ "\u096D",
         // U+096E: "८" DEVANAGARI DIGIT EIGHT
-        /* 76 */ "\u096E",
+        /* 77 */ "\u096E",
         // U+096F: "९" DEVANAGARI DIGIT NINE
-        /* 77 */ "\u096F",
+        /* 78 */ "\u096F",
         // U+0966: "०" DEVANAGARI DIGIT ZERO
-        /* 78 */ "\u0966",
+        /* 79 */ "\u0966",
         // Label for "switch to symbols" key.
-        /* 79 */ "?\u0967\u0968\u0969",
+        /* 80 */ "?\u0967\u0968\u0969",
         // Label for "switch to symbols with microphone" key. This string shouldn't include the "mic"
         // part because it'll be appended by the code.
-        /* 80 */ "\u0967\u0968\u0969",
-        /* 81 */ "1",
-        /* 82 */ "2",
-        /* 83 */ "3",
-        /* 84 */ "4",
-        /* 85 */ "5",
-        /* 86 */ "6",
-        /* 87 */ "7",
-        /* 88 */ "8",
-        /* 89 */ "9",
-        /* 90 */ "0",
+        /* 81 */ "\u0967\u0968\u0969",
+        /* 82 */ "1",
+        /* 83 */ "2",
+        /* 84 */ "3",
+        /* 85 */ "4",
+        /* 86 */ "5",
+        /* 87 */ "6",
+        /* 88 */ "7",
+        /* 89 */ "8",
+        /* 90 */ "9",
+        /* 91 */ "0",
     };
 
     /* Language nl: Dutch */
@@ -3476,60 +3474,61 @@
     // TODO: Use the language + "_" + region representation for the locale string key.
     // Currently we are dropping the region from the key.
     private static final Object[] LANGUAGES_AND_TEXTS = {
-        "DEFAULT", LANGUAGE_DEFAULT, /* default */
-        "af", LANGUAGE_af, /* Afrikaans */
-        "ar", LANGUAGE_ar, /* Arabic */
-        "az" /* "az_AZ" */, LANGUAGE_az_AZ, /* Azerbaijani (Azerbaijan) */
-        "be" /* "be_BY" */, LANGUAGE_be_BY, /* Belarusian (Belarus) */
-        "bg", LANGUAGE_bg, /* Bulgarian */
-        "ca", LANGUAGE_ca, /* Catalan */
-        "cs", LANGUAGE_cs, /* Czech */
-        "da", LANGUAGE_da, /* Danish */
-        "de", LANGUAGE_de, /* German */
-        "el", LANGUAGE_el, /* Greek */
-        "en", LANGUAGE_en, /* English */
-        "eo", LANGUAGE_eo, /* Esperanto */
-        "es", LANGUAGE_es, /* Spanish */
-        "et" /* "et_EE" */, LANGUAGE_et_EE, /* Estonian (Estonia) */
-        "fa", LANGUAGE_fa, /* Persian */
-        "fi", LANGUAGE_fi, /* Finnish */
-        "fr", LANGUAGE_fr, /* French */
-        "hi", LANGUAGE_hi, /* Hindi */
-        "hr", LANGUAGE_hr, /* Croatian */
-        "hu", LANGUAGE_hu, /* Hungarian */
-        "hy" /* "hy_AM" */, LANGUAGE_hy_AM, /* Armenian (Armenia) */
-        "is", LANGUAGE_is, /* Icelandic */
-        "it", LANGUAGE_it, /* Italian */
-        "iw", LANGUAGE_iw, /* Hebrew */
-        "ka" /* "ka_GE" */, LANGUAGE_ka_GE, /* Georgian (Georgia) */
-        "kk", LANGUAGE_kk, /* Kazakh */
-        "km" /* "km_KH" */, LANGUAGE_km_KH, /* Khmer (Cambodia) */
-        "ky", LANGUAGE_ky, /* Kirghiz */
-        "lo" /* "lo_LA" */, LANGUAGE_lo_LA, /* Lao (Laos) */
-        "lt", LANGUAGE_lt, /* Lithuanian */
-        "lv", LANGUAGE_lv, /* Latvian */
-        "mk", LANGUAGE_mk, /* Macedonian */
-        "mn" /* "mn_MN" */, LANGUAGE_mn_MN, /* Mongolian (Mongolia) */
-        "nb", LANGUAGE_nb, /* Norwegian Bokmål */
-        "ne" /* "ne_NP" */, LANGUAGE_ne_NP, /* Nepali (Nepal) */
-        "nl", LANGUAGE_nl, /* Dutch */
-        "pl", LANGUAGE_pl, /* Polish */
-        "pt", LANGUAGE_pt, /* Portuguese */
-        "rm", LANGUAGE_rm, /* Raeto-Romance */
-        "ro", LANGUAGE_ro, /* Romanian */
-        "ru", LANGUAGE_ru, /* Russian */
-        "sk", LANGUAGE_sk, /* Slovak */
-        "sl", LANGUAGE_sl, /* Slovenian */
-        "sr", LANGUAGE_sr, /* Serbian */
-        "sv", LANGUAGE_sv, /* Swedish */
-        "sw", LANGUAGE_sw, /* Swahili */
-        "th", LANGUAGE_th, /* Thai */
-        "tl", LANGUAGE_tl, /* Tagalog */
-        "tr", LANGUAGE_tr, /* Turkish */
-        "uk", LANGUAGE_uk, /* Ukrainian */
-        "vi", LANGUAGE_vi, /* Vietnamese */
-        "zu", LANGUAGE_zu, /* Zulu */
-        "zz", LANGUAGE_zz, /* Alphabet */
+    // "locale", TEXT_ARRAY,  /* numberOfNonNullText/lengthOf_TEXT_ARRAY localeName */
+        "DEFAULT", LANGUAGE_DEFAULT, /* 156/156 default */
+        "af", LANGUAGE_af,    /*   8/  9 Afrikaans */
+        "ar", LANGUAGE_ar,    /*  48/120 Arabic */
+        "az", LANGUAGE_az_AZ, /*   8/ 16 Azerbaijani (Azerbaijan) */
+        "be", LANGUAGE_be_BY, /*  10/ 54 Belarusian (Belarus) */
+        "bg", LANGUAGE_bg,    /*   2/ 54 Bulgarian */
+        "ca", LANGUAGE_ca,    /*  11/ 62 Catalan */
+        "cs", LANGUAGE_cs,    /*  17/ 56 Czech */
+        "da", LANGUAGE_da,    /*  19/ 56 Danish */
+        "de", LANGUAGE_de,    /*  16/ 56 German */
+        "el", LANGUAGE_el,    /*   1/ 52 Greek */
+        "en", LANGUAGE_en,    /*   8/  8 English */
+        "eo", LANGUAGE_eo,    /*  26/126 Esperanto */
+        "es", LANGUAGE_es,    /*   8/ 60 Spanish */
+        "et", LANGUAGE_et_EE, /*  22/ 54 Estonian (Estonia) */
+        "fa", LANGUAGE_fa,    /*  49/120 Persian */
+        "fi", LANGUAGE_fi,    /*  10/ 25 Finnish */
+        "fr", LANGUAGE_fr,    /*  13/ 51 French */
+        "hi", LANGUAGE_hi,    /*  24/ 92 Hindi */
+        "hr", LANGUAGE_hr,    /*   9/ 56 Croatian */
+        "hu", LANGUAGE_hu,    /*   9/ 56 Hungarian */
+        "hy", LANGUAGE_hy_AM, /*   7/118 Armenian (Armenia) */
+        "is", LANGUAGE_is,    /*  13/ 54 Icelandic */
+        "it", LANGUAGE_it,    /*   5/  5 Italian */
+        "iw", LANGUAGE_iw,    /*  14/ 69 Hebrew */
+        "ka", LANGUAGE_ka_GE, /*   3/ 54 Georgian (Georgia) */
+        "kk", LANGUAGE_kk,    /*  16/ 52 Kazakh */
+        "km", LANGUAGE_km_KH, /*   2/ 57 Khmer (Cambodia) */
+        "ky", LANGUAGE_ky,    /*  11/ 52 Kirghiz */
+        "lo", LANGUAGE_lo_LA, /*   2/ 58 Lao (Laos) */
+        "lt", LANGUAGE_lt,    /*  18/ 54 Lithuanian */
+        "lv", LANGUAGE_lv,    /*  18/ 54 Latvian */
+        "mk", LANGUAGE_mk,    /*   9/ 54 Macedonian */
+        "mn", LANGUAGE_mn_MN, /*   2/ 58 Mongolian (Mongolia) */
+        "nb", LANGUAGE_nb,    /*  11/ 54 Norwegian Bokmål */
+        "ne", LANGUAGE_ne_NP, /*  24/ 92 Nepali (Nepal) */
+        "nl", LANGUAGE_nl,    /*   9/ 54 Dutch */
+        "pl", LANGUAGE_pl,    /*  10/ 54 Polish */
+        "pt", LANGUAGE_pt,    /*   6/  8 Portuguese */
+        "rm", LANGUAGE_rm,    /*   1/  4 Raeto-Romance */
+        "ro", LANGUAGE_ro,    /*   6/ 54 Romanian */
+        "ru", LANGUAGE_ru,    /*  10/ 54 Russian */
+        "sk", LANGUAGE_sk,    /*  20/ 56 Slovak */
+        "sl", LANGUAGE_sl,    /*   8/ 56 Slovenian */
+        "sr", LANGUAGE_sr,    /*  11/ 56 Serbian */
+        "sv", LANGUAGE_sv,    /*  21/ 56 Swedish */
+        "sw", LANGUAGE_sw,    /*   9/ 16 Swahili */
+        "th", LANGUAGE_th,    /*   2/ 58 Thai */
+        "tl", LANGUAGE_tl,    /*   7/  8 Tagalog */
+        "tr", LANGUAGE_tr,    /*   7/ 16 Turkish */
+        "uk", LANGUAGE_uk,    /*  12/ 58 Ukrainian */
+        "vi", LANGUAGE_vi,    /*   8/ 58 Vietnamese */
+        "zu", LANGUAGE_zu,    /*   8/  8 Zulu */
+        "zz", LANGUAGE_zz,    /*  19/ 20 Alphabet */
     };
 
     static {
diff --git a/tools/make-keyboard-text/res/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.tmpl b/tools/make-keyboard-text/res/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.tmpl
index d95de29..eadeb1e 100644
--- a/tools/make-keyboard-text/res/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.tmpl
+++ b/tools/make-keyboard-text/res/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.tmpl
@@ -77,6 +77,7 @@
     // TODO: Use the language + "_" + region representation for the locale string key.
     // Currently we are dropping the region from the key.
     private static final Object[] LANGUAGES_AND_TEXTS = {
+    // "locale", TEXT_ARRAY,  /* numberOfNonNullText/lengthOf_TEXT_ARRAY localeName */
         /* @LANGUAGES_AND_TEXTS@ */
     };
 
diff --git a/tools/make-keyboard-text/res/values/donottranslate-more-keys.xml b/tools/make-keyboard-text/res/values/donottranslate-more-keys.xml
index 46eab57..7f1c803 100644
--- a/tools/make-keyboard-text/res/values/donottranslate-more-keys.xml
+++ b/tools/make-keyboard-text/res/values/donottranslate-more-keys.xml
@@ -85,6 +85,8 @@
     <string name="more_keys_for_currency">$,&#x00A2;,&#x20AC;,&#x00A3;,&#x00A5;,&#x20B1;</string>
     <string name="more_keys_for_punctuation">"!fixedColumnOrder!8,;,/,(,),#,!,\\,,\?,&amp;,\\%,+,\",-,:,',\@"</string>
     <string name="more_keys_for_tablet_punctuation">"!fixedColumnOrder!7,;,/,(,),#,',\\,,&amp;,\\%,+,\",-,:,\@"</string>
+    <!-- U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE -->
+    <string name="keylabel_for_spanish_row2_10">&#x00F1;</string>
     <!-- U+2020: "†" DAGGER
          U+2021: "‡" DOUBLE DAGGER
          U+2605: "★" BLACK STAR -->
@@ -189,8 +191,6 @@
     <string name="keylabel_for_w">w</string>
     <string name="keylabel_for_y">y</string>
     <string name="keylabel_for_x">x</string>
-    <!-- U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE -->
-    <string name="keylabel_for_spanish_row2_10">&#x00F1;</string>
     <string name="more_keys_for_am_pm">!fixedColumnOrder!2,!hasLabels!,\@string/label_time_am,\@string/label_time_pm</string>
     <string name="settings_as_more_key">!icon/settings_key|!code/key_settings</string>
     <string name="shortcut_as_more_key">!icon/shortcut_key|!code/key_shortcut</string>
diff --git a/tools/make-keyboard-text/src/com/android/inputmethod/keyboard/tools/ArrayInitializerFormatter.java b/tools/make-keyboard-text/src/com/android/inputmethod/keyboard/tools/ArrayInitializerFormatter.java
index 331003e..d2763e0 100644
--- a/tools/make-keyboard-text/src/com/android/inputmethod/keyboard/tools/ArrayInitializerFormatter.java
+++ b/tools/make-keyboard-text/src/com/android/inputmethod/keyboard/tools/ArrayInitializerFormatter.java
@@ -29,12 +29,16 @@
     private int mBufferedLen;
     private int mBufferedIndex = Integer.MIN_VALUE;
 
-    public ArrayInitializerFormatter(PrintStream out, int width, String indent) {
+    public ArrayInitializerFormatter(final PrintStream out, final int width, final String indent) {
         mOut = out;
         mMaxWidth = width - indent.length();
         mIndent = indent;
     }
 
+    public int getCurrentIndex() {
+        return mCurrentIndex;
+    }
+
     public void flush() {
         if (mBuffer.length() == 0) {
             return;
@@ -59,13 +63,13 @@
         mBufferedLen = 0;
     }
 
-    public void outCommentLines(String lines) {
+    public void outCommentLines(final String lines) {
         flush();
         mOut.print(lines);
         mFixedElement = null;
     }
 
-    public void outElement(String element) {
+    public void outElement(final String element) {
         if (!element.equals(mFixedElement)) {
             flush();
             mBufferedIndex = mCurrentIndex;
diff --git a/tools/make-keyboard-text/src/com/android/inputmethod/keyboard/tools/MoreKeysResources.java b/tools/make-keyboard-text/src/com/android/inputmethod/keyboard/tools/MoreKeysResources.java
index dddb3d6..97a12d7 100644
--- a/tools/make-keyboard-text/src/com/android/inputmethod/keyboard/tools/MoreKeysResources.java
+++ b/tools/make-keyboard-text/src/com/android/inputmethod/keyboard/tools/MoreKeysResources.java
@@ -38,7 +38,6 @@
     private static final String MARK_TEXTS = "@TEXTS@";
     private static final String MARK_LANGUAGES_AND_TEXTS = "@LANGUAGES_AND_TEXTS@";
     private static final String DEFAULT_LANGUAGE_NAME = "DEFAULT";
-    private static final String ARRAY_NAME_FOR_LANGUAGE = "LANGUAGE_%s";
     private static final String EMPTY_STRING_VAR = "EMPTY";
 
     private static final String NO_LANGUAGE_CODE = "zz";
@@ -144,7 +143,12 @@
 
     private void dumpDefaultTexts(final PrintStream out) {
         final StringResourceMap defaultResMap = mResourcesMap.get(DEFAULT_LANGUAGE_NAME);
-        dumpTextsInternal(out, defaultResMap, defaultResMap);
+        final int outputArraySize = dumpTextsInternal(out, defaultResMap, defaultResMap);
+        defaultResMap.setOutputArraySize(outputArraySize);
+    }
+
+    private static String getArrayNameForLanguage(final String language) {
+        return "LANGUAGE_" + language;
     }
 
     private void dumpTexts(final PrintStream out) {
@@ -157,8 +161,8 @@
                 continue;
             }
             out.format("    /* Language %s: %s */\n", language, getLanguageDisplayName(language));
-            out.format("    private static final String[] " + ARRAY_NAME_FOR_LANGUAGE + " = {\n",
-                    language);
+            out.format("    private static final String[] " + getArrayNameForLanguage(language)
+                    + " = {\n");
             final StringResourceMap resMap = mResourcesMap.get(language);
             for (final StringResource res : resMap.getResources()) {
                 if (!defaultResMap.contains(res.mName)) {
@@ -166,7 +170,8 @@
                             + " doesn't have default resource");
                 }
             }
-            dumpTextsInternal(out, resMap, defaultResMap);
+            final int outputArraySize = dumpTextsInternal(out, resMap, defaultResMap);
+            resMap.setOutputArraySize(outputArraySize);
             out.format("    };\n\n");
         }
     }
@@ -176,13 +181,15 @@
         allLanguages.addAll(mResourcesMap.keySet());
         Collections.sort(allLanguages);
         for (final String language : allLanguages) {
+            final StringResourceMap resMap = mResourcesMap.get(language);
             final Locale locale = LocaleUtils.constructLocaleFromString(language);
-            // If we use a different key, dump the original as comment for now.
             final String languageKeyToDump = locale.getCountry().isEmpty()
                     ? String.format("\"%s\"", language)
-                    : String.format("\"%s\" /* \"%s\" */", locale.getLanguage(), language);
-            out.format("        %s, " + ARRAY_NAME_FOR_LANGUAGE + ", /* %s */\n",
-                    languageKeyToDump, language, getLanguageDisplayName(language));
+                    : String.format("\"%s\"", locale.getLanguage());
+            out.format("        %s, %-15s /* %3d/%3d %s */\n",
+                    languageKeyToDump, getArrayNameForLanguage(language) + ",",
+                    resMap.getResources().size(), resMap.getOutputArraySize(),
+                    getLanguageDisplayName(language));
         }
     }
 
@@ -194,10 +201,11 @@
         return locale.getDisplayName(Locale.ENGLISH);
     }
 
-    private static void dumpTextsInternal(final PrintStream out, final StringResourceMap resMap,
+    private static int dumpTextsInternal(final PrintStream out, final StringResourceMap resMap,
             final StringResourceMap defaultResMap) {
         final ArrayInitializerFormatter formatter =
                 new ArrayInitializerFormatter(out, 100, "        ");
+        int outputArraySize = 0;
         boolean successiveNull = false;
         for (final StringResource defaultRes : defaultResMap.getResources()) {
             if (resMap.contains(defaultRes.mName)) {
@@ -212,6 +220,7 @@
                     formatter.outElement(String.format("\"%s\",", escaped));
                 }
                 successiveNull = false;
+                outputArraySize = formatter.getCurrentIndex();
             } else {
                 formatter.outElement("null,");
                 successiveNull = true;
@@ -220,6 +229,7 @@
         if (!successiveNull) {
             formatter.flush();
         }
+        return outputArraySize;
     }
 
     private static String addPrefix(final String prefix, final String lines) {
diff --git a/tools/make-keyboard-text/src/com/android/inputmethod/keyboard/tools/StringResourceMap.java b/tools/make-keyboard-text/src/com/android/inputmethod/keyboard/tools/StringResourceMap.java
index cc7ff6a..4eff8a2 100644
--- a/tools/make-keyboard-text/src/com/android/inputmethod/keyboard/tools/StringResourceMap.java
+++ b/tools/make-keyboard-text/src/com/android/inputmethod/keyboard/tools/StringResourceMap.java
@@ -39,6 +39,12 @@
     // Name to string resource map.
     private final Map<String, StringResource> mResourcesMap;
 
+    // The length of String[] that is created from this {@link StringResourceMap}. The length is
+    // calculated in {@link MoreKeysResources#dumpTexts(OutputStream)} and recorded by
+    // {@link #setOutputArraySize(int)}. The recorded length is used as a part of comment by
+    // {@link MoreKeysResources#dumpLanguageMap(OutputStream)} via {@link #getOutputArraySize()}.
+    private int mOutputArraySize;
+
     public StringResourceMap(final InputStream is) {
         final StringResourceHandler handler = new StringResourceHandler();
         final SAXParserFactory factory = SAXParserFactory.newInstance();
@@ -77,6 +83,14 @@
         return mResourcesMap.get(name);
     }
 
+    public void setOutputArraySize(final int arraySize) {
+        mOutputArraySize = arraySize;
+    }
+
+    public int getOutputArraySize() {
+        return mOutputArraySize;
+    }
+
     static class StringResourceHandler extends DefaultHandler2 {
         private static final String TAG_RESOURCES = "resources";
         private static final String TAG_STRING = "string";