Add Bengali keyboard layout

This is a preliminary keyboard layout.

Bug: 10028755
Change-Id: I365fb8e942a60d4b690a4af95fcd35bf73fffbe4
diff --git a/java/res/xml-sw600dp/rows_bengali.xml b/java/res/xml-sw600dp/rows_bengali.xml
new file mode 100644
index 0000000..b1e7878
--- /dev/null
+++ b/java/res/xml-sw600dp/rows_bengali.xml
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2014, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<merge
+    xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+    <include
+        latin:keyboardLayout="@xml/key_styles_common" />
+    <Row
+        latin:keyWidth="8.182%p"
+    >
+        <include
+            latin:keyboardLayout="@xml/rowkeys_bengali1" />
+        <Key
+            latin:keyStyle="deleteKeyStyle"
+            latin:keyWidth="fillRight" />
+    </Row>
+    <Row
+        latin:keyWidth="8.182%p"
+    >
+        <include
+            latin:keyboardLayout="@xml/rowkeys_bengali2" />
+        <Key
+            latin:keyStyle="enterKeyStyle"
+            latin:keyWidth="fillRight" />
+    </Row>
+    <Row
+        latin:keyWidth="8.182%p"
+    >
+        <include
+            latin:keyboardLayout="@xml/rowkeys_bengali3" />
+        <include
+            latin:keyboardLayout="@xml/keys_exclamation_question" />
+    </Row>
+    <include
+        latin:keyboardLayout="@xml/row_qwerty4" />
+</merge>
diff --git a/java/res/xml/kbd_bengali.xml b/java/res/xml/kbd_bengali.xml
new file mode 100644
index 0000000..879a897
--- /dev/null
+++ b/java/res/xml/kbd_bengali.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2014, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<Keyboard
+    xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+    <include
+        latin:keyboardLayout="@xml/rows_bengali" />
+</Keyboard>
diff --git a/java/res/xml/key_styles_currency.xml b/java/res/xml/key_styles_currency.xml
index 0bb2bb4..f576d04 100644
--- a/java/res/xml/key_styles_currency.xml
+++ b/java/res/xml/key_styles_currency.xml
@@ -92,28 +92,17 @@
             <include
                 latin:keyboardLayout="@xml/key_styles_currency_euro" />
         </case>
-        <!-- fa: Persian (Rial and Afgahni)
-             hi: Hindi (Indian Rupee)
-             iw: Hebrew (New Sheqel)
-             lo: Lao (Kip)
-             mn: Mongolian (Tugrik)
-             ne: Nepali (Nepalese Rupee)
-             th: Thai (Baht)
-             uk: Ukrainian (Hryvnia)
-             vi: Vietnamese (Dong)  -->
-        <!-- TODO: The currency sign of Turkish Lira was created in 2012 and assigned U+20BA for
-             its unicode, although there is no font glyph for it as of November 2012. -->
-        <!-- TODO: The currency sign of Armenian Dram was created in 2012 and assigned U+058F for
-             its unicode, although there is no font glyph for it as of September 2013. -->
+        <!-- IN: India (Rupee) -->
         <case
-            latin:languageCode="fa|hi|iw|lo|mn|ne|th|uk|vi"
+            latin:countryCode="IN"
         >
-            <!-- U+00A3: "£" POUND SIGN
+            <!-- U+20B9: "₹" INDIAN RUPEE SIGN
+                 U+00A3: "£" POUND SIGN
                  U+20AC: "€" EURO SIGN
                  U+00A2: "¢" CENT SIGN -->
             <key-style
                 latin:styleName="currencyKeyStyle"
-                latin:keySpec="!text/keyspec_currency"
+                latin:keySpec="&#x20B9;"
                 latin:moreKeys="!text/morekeys_currency" />
             <key-style
                 latin:styleName="moreCurrency1KeyStyle"
@@ -129,17 +118,29 @@
                 latin:styleName="moreCurrency4KeyStyle"
                 latin:keySpec="&#x00A2;" />
         </case>
-        <!-- IN: India (Rupee) -->
+        <!-- bn: Bengali (Bangladesh Taka)
+             fa: Persian (Rial and Afgahni)
+             hi: Hindi (Indian Rupee)
+             iw: Hebrew (New Sheqel)
+             lo: Lao (Kip)
+             mn: Mongolian (Tugrik)
+             ne: Nepali (Nepalese Rupee)
+             th: Thai (Baht)
+             uk: Ukrainian (Hryvnia)
+             vi: Vietnamese (Dong)  -->
+        <!-- TODO: The currency sign of Turkish Lira was created in 2012 and assigned U+20BA for
+             its unicode, although there is no font glyph for it as of November 2012. -->
+        <!-- TODO: The currency sign of Armenian Dram was created in 2012 and assigned U+058F for
+             its unicode, although there is no font glyph for it as of September 2013. -->
         <case
-            latin:countryCode="IN"
+            latin:languageCode="bn|fa|hi|iw|lo|mn|ne|th|uk|vi"
         >
-            <!-- U+20B9: "₹" INDIAN RUPEE SIGN
-                 U+00A3: "£" POUND SIGN
+            <!-- U+00A3: "£" POUND SIGN
                  U+20AC: "€" EURO SIGN
                  U+00A2: "¢" CENT SIGN -->
             <key-style
                 latin:styleName="currencyKeyStyle"
-                latin:keySpec="&#x20B9;"
+                latin:keySpec="!text/keyspec_currency"
                 latin:moreKeys="!text/morekeys_currency" />
             <key-style
                 latin:styleName="moreCurrency1KeyStyle"
diff --git a/java/res/xml/keyboard_layout_set_bengali.xml b/java/res/xml/keyboard_layout_set_bengali.xml
new file mode 100644
index 0000000..6e40e6d
--- /dev/null
+++ b/java/res/xml/keyboard_layout_set_bengali.xml
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2014, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<KeyboardLayoutSet
+    xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin">
+    <Element
+        latin:elementName="alphabet"
+        latin:elementKeyboard="@xml/kbd_bengali"
+        latin:enableProximityCharsCorrection="true" />
+    <Element
+        latin:elementName="symbols"
+        latin:elementKeyboard="@xml/kbd_symbols" />
+    <Element
+        latin:elementName="symbolsShifted"
+        latin:elementKeyboard="@xml/kbd_symbols_shift" />
+    <Element
+        latin:elementName="phone"
+        latin:elementKeyboard="@xml/kbd_phone" />
+    <Element
+        latin:elementName="phoneSymbols"
+        latin:elementKeyboard="@xml/kbd_phone_symbols" />
+    <Element
+        latin:elementName="number"
+        latin:elementKeyboard="@xml/kbd_number" />
+</KeyboardLayoutSet>
diff --git a/java/res/xml/method.xml b/java/res/xml/method.xml
index 68dce8a..67be242 100644
--- a/java/res/xml/method.xml
+++ b/java/res/xml/method.xml
@@ -28,6 +28,7 @@
     be_BY: Belarusian (Belarus)/east_slavic
     bg: Bulgarian/bulgarian
     bg: Bulgarian/bulgarian_bds
+    (bn_IN: Bengali (India)/bengali)  # This is a preliminary keyboard layout.
     ca: Catalan/spanish
     cs: Czech/qwertz
     da: Danish/nordic
@@ -171,6 +172,16 @@
             android:imeSubtypeExtraValue="KeyboardLayoutSet=bulgarian_bds,EmojiCapable"
             android:isAsciiCapable="false"
     />
+    <!-- TODO: This bengali keyboard is a preliminary layout.
+               This isn't based on the final specification. -->
+    <subtype android:icon="@drawable/ic_ime_switcher_dark"
+            android:label="@string/subtype_generic"
+            android:subtypeId="0xbff5986c"
+            android:imeSubtypeLocale="bn_IN"
+            android:imeSubtypeMode="keyboard"
+            android:imeSubtypeExtraValue="KeyboardLayoutSet=bengali,EmojiCapable"
+            android:isAsciiCapable="false"
+    />
     <subtype android:icon="@drawable/ic_ime_switcher_dark"
             android:label="@string/subtype_generic"
             android:subtypeId="0xd2e520d5"
diff --git a/java/res/xml/rowkeys_bengali1.xml b/java/res/xml/rowkeys_bengali1.xml
new file mode 100644
index 0000000..c137d12
--- /dev/null
+++ b/java/res/xml/rowkeys_bengali1.xml
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2014, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<merge
+    xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+    <!-- U+0994: "ঔ" BENGALI LETTER AU
+         U+09E7: "১" BENGALI DIGIT ONE -->
+    <Key
+        latin:keySpec="&#x0994;"
+        latin:keyHintLabel="&#x09E7;"
+        latin:additionalMoreKeys="&#x09E7;,1"
+        latin:keyLabelFlags="fontNormal" />
+    <!-- U+0990: "ঐ" BENGALI LETTER AI
+         U+09E8: "২" BENGALI DIGIT TWO -->
+    <Key
+        latin:keySpec="&#x0990;"
+        latin:keyHintLabel="&#x09E8;"
+        latin:additionalMoreKeys="&#x09E8;,2"
+        latin:keyLabelFlags="fontNormal" />
+    <!-- U+0986: "আ" BENGALI LETTER AA
+         U+09E9: "৩" BENGALI DIGIT THREE -->
+    <Key
+        latin:keySpec="&#x0986;"
+        latin:keyHintLabel="&#x09E9;"
+        latin:additionalMoreKeys="&#x09E9;,3"
+        latin:keyLabelFlags="fontNormal" />
+    <!-- U+0988: "ঈ" BENGALI LETTER II
+         U+09EA: "৪" BENGALI DIGIT FOUR -->
+    <Key
+        latin:keySpec="&#x0988;"
+        latin:keyHintLabel="&#x09EA;"
+        latin:additionalMoreKeys="&#x09EA;,4"
+        latin:keyLabelFlags="fontNormal" />
+    <!-- U+098A: "ঊ" BENGALI LETTER UU
+         U+09EB: "৫" BENGALI DIGIT FIVE -->
+    <Key
+        latin:keySpec="&#x098A;"
+        latin:keyHintLabel="&#x09EB;"
+        latin:additionalMoreKeys="&#x09EB;,5"
+        latin:keyLabelFlags="fontNormal" />
+    <!-- U+09AC: "ব" BENGALI LETTER BA
+         U+09AD: "ভ" BENGALI LETTER BHA
+         U+09EC: "৬" BENGALI DIGIT SIX -->
+    <Key
+        latin:keySpec="&#x09AC;"
+        latin:moreKeys="&#x09AD;,%"
+        latin:keyHintLabel="&#x09EC;"
+        latin:additionalMoreKeys="&#x09EC;,6"
+        latin:keyLabelFlags="fontNormal" />
+    <!-- U+09B9: "হ" BENGALI LETTER HA
+         U+09ED: "৭" BENGALI DIGIT SEVEN -->
+    <Key
+        latin:keySpec="&#x09B9;"
+        latin:keyHintLabel="&#x09ED;"
+        latin:additionalMoreKeys="&#x09ED;,7"
+        latin:keyLabelFlags="fontNormal" />
+    <!-- U+0997: "গ" BENGALI LETTER GA
+         U+0998: "ঘ" BENGALI LETTER GHA
+         U+09EE: "৮" BENGALI DIGIT EIGHT -->
+    <Key
+        latin:keySpec="&#x0997;"
+        latin:moreKeys="&#x0998;,%"
+        latin:keyHintLabel="&#x09EE;"
+        latin:additionalMoreKeys="&#x09EE;,8"
+        latin:keyLabelFlags="fontNormal" />
+    <!-- U+09A6: "দ" BENGALI LETTER DA
+         U+09A7: "ধ" BENGALI LETTER DHA
+         U+09EF: "৯" BENGALI DIGIT NINE -->
+    <Key
+        latin:keySpec="&#x09A6;"
+        latin:moreKeys="&#x09A7;,%"
+        latin:keyHintLabel="&#x09EF;"
+        latin:additionalMoreKeys="&#x09EF;,9"
+        latin:keyLabelFlags="fontNormal" />
+    <!-- U+099C: "জ" BENGALI LETTER JA
+         U+099D: "ঝ" BENGALI LETTER JHA
+         U+099C/U+09CD/U+099E: "জ্ঞ" BENGALI LETTER JA/BENGALI SIGN VIRAMA/BENGALI LETTER NYA
+         U+09E6: "০" BENGALI DIGIT ZERO -->
+    <Key
+        latin:keySpec="&#x099C;"
+        latin:moreKeys="&#x099D;,&#x099C;&#x09CD;&#x099E;,%"
+        latin:keyHintLabel="&#x09E6;"
+        latin:additionalMoreKeys="&#x09E6;,0"
+        latin:keyLabelFlags="fontNormal" />
+    <!-- U+09A1: "ড" BENGALI LETTER DDA
+         U+09A1/U+09BC: "ড়" BENGALI LETTER DDA/BENGALI SIGN NUKTA -->
+    <Key
+        latin:keySpec="&#x09A1;"
+        latin:moreKeys="&#x09A1;&#x09BC;"
+        latin:keyLabelFlags="fontNormal" />
+</merge>
diff --git a/java/res/xml/rowkeys_bengali2.xml b/java/res/xml/rowkeys_bengali2.xml
new file mode 100644
index 0000000..589ce01
--- /dev/null
+++ b/java/res/xml/rowkeys_bengali2.xml
@@ -0,0 +1,94 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2014, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<merge
+    xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+    <!-- U+0993: "ও" BENGALI LETTER O
+         U+09CB: "ো" BENGALI VOWEL SIGN O -->
+    <Key
+        latin:keySpec="&#x0993;"
+        latin:moreKeys="&#x09CB;"
+        latin:keyLabelFlags="fontNormal" />
+    <!-- U+098F: "এ" BENGALI LETTER E
+         U+09C7: "ে" BENGALI VOWEL SIGN E -->
+    <Key
+        latin:keySpec="&#x098F;"
+        latin:moreKeys="&#x09C7;"
+        latin:keyLabelFlags="fontNormal" />
+    <!-- U+0985: "অ" BENGALI LETTER A
+         U+09CD: "্" BENGALI SIGN VIRAMA -->
+    <Key
+        latin:keySpec="&#x0985;"
+        latin:moreKeys="&#x09CD;"
+        latin:keyLabelFlags="fontNormal" />
+    <!-- U+0987: "ই" BENGALI LETTER I
+         U+09BF: "ি" BENGALI VOWEL SIGN I -->
+    <Key
+        latin:keySpec="&#x0987;"
+        latin:moreKeys="&#x09BF;"
+        latin:keyLabelFlags="fontNormal" />
+    <!-- U+0989: "উ" BENGALI LETTER U
+         U+09C1: "ু" BENGALI VOWEL SIGN U -->
+    <Key
+        latin:keySpec="&#x0989;"
+        latin:moreKeys="&#x09C1;"
+        latin:keyLabelFlags="fontNormal" />
+    <!-- U+09AA: "প" BENGALI LETTER PA
+         U+09AB: "ফ" BENGALI LETTER PHA -->
+    <Key
+        latin:keySpec="&#x09AA;"
+        latin:moreKeys="&#x09AB;"
+        latin:keyLabelFlags="fontNormal" />
+    <!-- U+09B0: "র" BENGALI LETTER RA
+         U+09C3: "ৃ" BENGALI VOWEL SIGN VOCALIC R
+         U+098B: "ঋ" BENGALI LETTER VOCALIC R
+         U+09A4/U+09CD/U+09B0: "ত্র" BENGALI LETTER TA/BENGALI SIGN VIRAMA/BENGALI LETTER RA -->
+    <Key
+        latin:keySpec="&#x09B0;"
+        latin:moreKeys="&#x09C3;,&#x098B;,&#x09A4;&#x09CD;&#x09B0;"
+        latin:keyLabelFlags="fontNormal" />
+    <!-- U+0995: "ক" BENGALI LETTER KA
+         U+0996: "খ" BENGALI LETTER KHA -->
+    <Key
+        latin:keySpec="&#x0995;"
+        latin:moreKeys="&#x0996;"
+        latin:keyLabelFlags="fontNormal" />
+    <!-- U+09A4: "ত" BENGALI LETTER TA
+         U+09CE: "ৎ" BENGALI LETTER KHANDA TA
+         U+09A5: "থ" BENGALI LETTER THA
+         U+09A4/U+09CD/U+09A4: "ত্ত" BENGALI LETTER TA/BENGALI SIGN VIRAMA/BENGALI LETTER TA -->
+    <Key
+        latin:keySpec="&#x09A4;"
+        latin:moreKeys="&#x09CE;,&#x09A5;,&#x09A4;&#x09CD;&#x09A4;"
+        latin:keyLabelFlags="fontNormal" />
+    <!-- U+099A: "চ" BENGALI LETTER CA
+         U+099B: "ছ" BENGALI LETTER CHA -->
+    <Key
+        latin:keySpec="&#x099A;"
+        latin:moreKeys="&#x099B;"
+        latin:keyLabelFlags="fontNormal" />
+    <!-- U+099F: "ট" BENGALI LETTER TTA
+         U+09A0: "ঠ" BENGALI LETTER TTHA -->
+    <Key
+        latin:keySpec="&#x099F;"
+        latin:moreKeys="&#x09A0;"
+        latin:keyLabelFlags="fontNormal" />
+</merge>
diff --git a/java/res/xml/rowkeys_bengali3.xml b/java/res/xml/rowkeys_bengali3.xml
new file mode 100644
index 0000000..b6d4685
--- /dev/null
+++ b/java/res/xml/rowkeys_bengali3.xml
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2014, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<merge
+    xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+    <!-- U+0981: "ঁ" BENGALI SIGN CANDRABINDU
+         U+0983: "ঃ" BENGALI SIGN VISARGA
+         U+0982: "ং" BENGALI SIGN ANUSVARA -->
+    <Key
+        latin:keySpec="&#x0981;"
+        latin:moreKeys="&#x0983;,&#x0982;"
+        latin:keyLabelFlags="fontNormal" />
+    <!-- U+09A2: "ঢ" BENGALI LETTER DDHA
+         U+09A2/U+09BC: "ঢ়" BENGALI LETTER DDHA/BENGALI SIGN NUKTA -->
+    <Key
+        latin:keySpec="&#x09A2;"
+        latin:moreKeys="&#x09A2;&#x09BC;"
+        latin:keyLabelFlags="fontNormal" />
+    <!-- U+09AE: "ম" BENGALI LETTER MA -->
+    <Key
+        latin:keySpec="&#x09AE;"
+        latin:keyLabelFlags="fontNormal" />
+    <!-- U+09A8: "ন" BENGALI LETTER NA
+         U+09A3: "ণ" BENGALI LETTER NNA -->
+    <Key
+        latin:keySpec="&#x09A8;"
+        latin:moreKeys="&#x09A3;"
+        latin:keyLabelFlags="fontNormal" />
+    <!-- U+099E: "ঞ" BENGALI LETTER NYA
+         U+0999: "ঙ" BENGALI LETTER NGA
+         U+099E/U+09CD/U+099C: "ঞ্জ" BENGALI LETTER NYA/BENGALI SIGN VIRAMA/BENGALI LETTER JA -->
+    <Key
+        latin:keySpec="&#x099E;"
+        latin:moreKeys="&#x0999;,&#x099E;&#x09CD;&#x099C;"
+        latin:keyLabelFlags="fontNormal" />
+    <!-- U+09B2: "ল" BENGALI LETTER LA -->
+    <Key
+        latin:keySpec="&#x09B2;"
+        latin:keyLabelFlags="fontNormal" />
+    <!-- U+09B7: "ষ" BENGALI LETTER SSA
+         U+0995/U+09CD/U+09B7: "ক্ষ" BENGALI LETTER KA/BENGALI SIGN VIRAMA/BENGALI LETTER SSA -->
+    <Key
+        latin:keySpec="&#x09B7;"
+        latin:moreKeys="&#x0995;&#x09CD;&#x09B7;"
+        latin:keyLabelFlags="fontNormal" />
+    <!-- U+09B8: "স" BENGALI LETTER SA
+         U+09B6: "শ" BENGALI LETTER SHA -->
+    <Key
+        latin:keySpec="&#x09B8;"
+        latin:moreKeys="&#x09B6;"
+        latin:keyLabelFlags="fontNormal" />
+    <!-- U+09DF: "য়" BENGALI LETTER YYA
+         U+09AF: "য" BENGALI LETTER YA -->
+    <Key
+        latin:keySpec="&#x09DF;"
+        latin:moreKeys="&#x09AF;"
+        latin:keyLabelFlags="fontNormal" />
+    <!-- U+0964: "।" DEVANAGARI DANDA
+         U+0965: "॥" DEVANAGARI DOUBLE DANDA -->
+    <Key
+        latin:keySpec="&#x0964;"
+        latin:moreKeys="&#x0965;"
+        latin:keyLabelFlags="fontNormal" />
+</merge>
diff --git a/java/res/xml/rows_bengali.xml b/java/res/xml/rows_bengali.xml
new file mode 100644
index 0000000..890f935
--- /dev/null
+++ b/java/res/xml/rows_bengali.xml
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+**
+** Copyright 2014, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+**     http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+-->
+
+<merge
+    xmlns:latin="http://schemas.android.com/apk/res/com.android.inputmethod.latin"
+>
+    <include
+        latin:keyboardLayout="@xml/key_styles_common" />
+    <Row
+        latin:keyWidth="9.091%p"
+    >
+        <include
+            latin:keyboardLayout="@xml/rowkeys_bengali1" />
+    </Row>
+    <Row
+            latin:keyWidth="9.091%p"
+    >
+        <include
+            latin:keyboardLayout="@xml/rowkeys_bengali2" />
+    </Row>
+    <Row
+        latin:keyWidth="9.091%p"
+    >
+        <include
+            latin:keyboardLayout="@xml/rowkeys_bengali3" />
+        <Key
+            latin:keyStyle="deleteKeyStyle"
+            latin:keyWidth="fillRight" />
+    </Row>
+    <include
+        latin:keyboardLayout="@xml/row_qwerty4" />
+</merge>
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.java
index 13b174e..6afc621 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.java
@@ -88,8 +88,8 @@
         /*   2:30 */ "morekeys_u",
         /*   3:29 */ "morekeys_e",
         /*   4:28 */ "morekeys_i",
-        /*   5:23 */ "morekeys_c",
-        /*   6:23 */ "keylabel_to_alpha",
+        /*   5:24 */ "keylabel_to_alpha",
+        /*   6:23 */ "morekeys_c",
         /*   7:23 */ "double_quotes",
         /*   8:22 */ "morekeys_n",
         /*   9:22 */ "single_quotes",
@@ -97,9 +97,9 @@
         /*  11:14 */ "morekeys_y",
         /*  12:13 */ "morekeys_d",
         /*  13:12 */ "morekeys_z",
-        /*  14:10 */ "morekeys_t",
-        /*  15:10 */ "morekeys_l",
-        /*  16:10 */ "keyspec_currency",
+        /*  14:11 */ "keyspec_currency",
+        /*  15:10 */ "morekeys_t",
+        /*  16:10 */ "morekeys_l",
         /*  17: 9 */ "morekeys_g",
         /*  18: 9 */ "single_angle_quotes",
         /*  19: 9 */ "double_angle_quotes",
@@ -258,18 +258,21 @@
     /* Default texts */
     private static final String[] TEXTS_DEFAULT = {
         /* morekeys_a ~ */
-        EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY,
-        /* ~ morekeys_c */
+        EMPTY, EMPTY, EMPTY, EMPTY, EMPTY,
+        /* ~ morekeys_i */
         // Label for "switch to alphabetic" key.
         /* keylabel_to_alpha */ "ABC",
+        /* morekeys_c */ EMPTY,
         /* double_quotes */ "!text/double_lqm_rqm",
         /* morekeys_n */ EMPTY,
         /* single_quotes */ "!text/single_lqm_rqm",
         /* morekeys_s ~ */
-        EMPTY, EMPTY, EMPTY, EMPTY, EMPTY, EMPTY,
-        /* ~ morekeys_l */
+        EMPTY, EMPTY, EMPTY, EMPTY,
+        /* ~ morekeys_z */
         /* keyspec_currency */ "$",
-        /* morekeys_g */ EMPTY,
+        /* morekeys_t ~ */
+        EMPTY, EMPTY, EMPTY,
+        /* ~ morekeys_g */
         /* single_angle_quotes */ "!text/single_laqm_raqm",
         /* double_angle_quotes */ "!text/double_laqm_raqm",
         /* morekeys_r ~ */
@@ -507,7 +510,7 @@
         // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON
         // U+0133: "ij" LATIN SMALL LIGATURE IJ
         /* morekeys_i */ "\u00ED,\u00EC,\u00EF,\u00EE,\u012F,\u012B,\u0133",
-        /* morekeys_c ~ */
+        /* keylabel_to_alpha ~ */
         null, null, null,
         /* ~ double_quotes */
         // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE
@@ -523,17 +526,17 @@
     /* Locale ar: Arabic */
     private static final String[] TEXTS_ar = {
         /* morekeys_a ~ */
-        null, null, null, null, null, null,
-        /* ~ morekeys_c */
+        null, null, null, null, null,
+        /* ~ morekeys_i */
         // Label for "switch to alphabetic" key.
         // U+0623: "أ" ARABIC LETTER ALEF WITH HAMZA ABOVE
         // U+200C: ZERO WIDTH NON-JOINER
         // U+0628: "ب" ARABIC LETTER BEH
         // U+062C: "ج" ARABIC LETTER JEEM
         /* keylabel_to_alpha */ "\u0623\u200C\u0628\u200C\u062C",
-        /* double_quotes ~ */
+        /* morekeys_c ~ */
         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,
         /* ~ morekeys_cyrillic_soft_sign */
         // U+0661: "١" ARABIC-INDIC DIGIT ONE
         /* keyspec_symbols_1 */ "\u0661",
@@ -681,12 +684,13 @@
         // U+012F: "į" LATIN SMALL LETTER I WITH OGONEK
         // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON
         /* morekeys_i */ "\u0131,\u00EE,\u00EF,\u00EC,\u00ED,\u012F,\u012B",
+        /* keylabel_to_alpha */ null,
         // U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA
         // U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE
         // U+010D: "č" LATIN SMALL LETTER C WITH CARON
         /* morekeys_c */ "\u00E7,\u0107,\u010D",
-        /* keylabel_to_alpha ~ */
-        null, null, null, null,
+        /* double_quotes ~ */
+        null, null, null,
         /* ~ single_quotes */
         // U+015F: "ş" LATIN SMALL LETTER S WITH CEDILLA
         // U+00DF: "ß" LATIN SMALL LETTER SHARP S
@@ -695,7 +699,7 @@
         /* morekeys_s */ "\u015F,\u00DF,\u015B,\u0161",
         /* morekeys_y ~ */
         null, null, null, null, null, null,
-        /* ~ keyspec_currency */
+        /* ~ morekeys_l */
         // U+011F: "ğ" LATIN SMALL LETTER G WITH BREVE
         /* morekeys_g */ "\u011F",
     };
@@ -703,13 +707,14 @@
     /* Locale be_BY: Belarusian (Belarus) */
     private static final String[] TEXTS_be_BY = {
         /* morekeys_a ~ */
-        null, null, null, null, null, null,
-        /* ~ morekeys_c */
+        null, null, null, null, null,
+        /* ~ morekeys_i */
         // Label for "switch to alphabetic" key.
         // U+0410: "А" CYRILLIC CAPITAL LETTER A
         // U+0411: "Б" CYRILLIC CAPITAL LETTER BE
         // U+0412: "В" CYRILLIC CAPITAL LETTER VE
         /* keylabel_to_alpha */ "\u0410\u0411\u0412",
+        /* morekeys_c */ null,
         /* double_quotes */ "!text/double_9qm_lqm",
         /* morekeys_n */ null,
         /* single_quotes */ "!text/single_9qm_lqm",
@@ -736,17 +741,35 @@
     /* Locale bg: Bulgarian */
     private static final String[] TEXTS_bg = {
         /* morekeys_a ~ */
-        null, null, null, null, null, null,
-        /* ~ morekeys_c */
+        null, null, null, null, null,
+        /* ~ morekeys_i */
         // Label for "switch to alphabetic" key.
         // U+0410: "А" CYRILLIC CAPITAL LETTER A
         // U+0411: "Б" CYRILLIC CAPITAL LETTER BE
         // U+0412: "В" CYRILLIC CAPITAL LETTER VE
         /* keylabel_to_alpha */ "\u0410\u0411\u0412",
+        /* morekeys_c */ null,
         // single_quotes of Bulgarian is default single_quotes_right_left.
         /* double_quotes */ "!text/double_9qm_lqm",
     };
 
+    /* Locale bn: Bengali */
+    private static final String[] TEXTS_bn = {
+        /* morekeys_a ~ */
+        null, null, null, null, null,
+        /* ~ morekeys_i */
+        // Label for "switch to alphabetic" key.
+        // U+0995: "क" BENGALI LETTER KA
+        // U+0996: "ख" BENGALI LETTER KHA
+        // U+0997: "ग" BENGALI LETTER GA
+        /* keylabel_to_alpha */ "\u0995\u0996\u0997",
+        /* morekeys_c ~ */
+        null, null, null, null, null, null, null, null,
+        /* ~ morekeys_z */
+        // U+09F3: "৳" BENGALI RUPEE SIGN
+        /* keyspec_currency */ "\u09F3",
+    };
+
     /* Locale ca: Catalan */
     private static final String[] TEXTS_ca = {
         // U+00E0: "à" LATIN SMALL LETTER A WITH GRAVE
@@ -791,25 +814,25 @@
         // U+012F: "į" LATIN SMALL LETTER I WITH OGONEK
         // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON
         /* morekeys_i */ "\u00ED,\u00EF,\u00EC,\u00EE,\u012F,\u012B",
+        /* keylabel_to_alpha */ null,
         // U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA
         // U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE
         // U+010D: "č" LATIN SMALL LETTER C WITH CARON
         /* morekeys_c */ "\u00E7,\u0107,\u010D",
-        /* keylabel_to_alpha */ null,
         /* double_quotes */ null,
         // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE
         // U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE
         /* morekeys_n */ "\u00F1,\u0144",
         /* single_quotes ~ */
-        null, null, null, null, null, null,
+        null, null, null, null, null, null, null,
         /* ~ morekeys_t */
         // U+00B7: "·" MIDDLE DOT
         // U+0142: "ł" LATIN SMALL LETTER L WITH STROKE
         /* morekeys_l */ "l\u00B7l,\u0142",
-        /* keyspec_currency ~ */
+        /* morekeys_g ~ */
         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,
         /* ~ morekeys_nordic_row2_11 */
         // U+00B7: "·" MIDDLE DOT
         /* morekeys_punctuation */ "!autoColumnOrder!9,\\,,?,!,\u00B7,#,),(,/,;,',@,:,-,\",+,\\%,&",
@@ -866,11 +889,11 @@
         // U+012F: "į" LATIN SMALL LETTER I WITH OGONEK
         // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON
         /* morekeys_i */ "\u00ED,\u00EE,\u00EF,\u00EC,\u012F,\u012B",
+        /* keylabel_to_alpha */ null,
         // U+010D: "č" LATIN SMALL LETTER C WITH CARON
         // U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA
         // U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE
         /* morekeys_c */ "\u010D,\u00E7,\u0107",
-        /* keylabel_to_alpha */ null,
         /* double_quotes */ "!text/double_9qm_lqm",
         // U+0148: "ň" LATIN SMALL LETTER N WITH CARON
         // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE
@@ -890,11 +913,11 @@
         // U+017A: "ź" LATIN SMALL LETTER Z WITH ACUTE
         // U+017C: "ż" LATIN SMALL LETTER Z WITH DOT ABOVE
         /* morekeys_z */ "\u017E,\u017A,\u017C",
+        /* keyspec_currency */ null,
         // U+0165: "ť" LATIN SMALL LETTER T WITH CARON
         /* morekeys_t */ "\u0165",
-        /* morekeys_l ~ */
-        null, null, null,
-        /* ~ morekeys_g */
+        /* morekeys_l */ null,
+        /* morekeys_g */ null,
         /* single_angle_quotes */ "!text/single_raqm_laqm",
         /* double_angle_quotes */ "!text/double_raqm_laqm",
         // U+0159: "ř" LATIN SMALL LETTER R WITH CARON
@@ -929,8 +952,8 @@
         // U+00ED: "í" LATIN SMALL LETTER I WITH ACUTE
         // U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS
         /* morekeys_i */ "\u00ED,\u00EF",
-        /* morekeys_c */ null,
         /* keylabel_to_alpha */ null,
+        /* morekeys_c */ null,
         /* double_quotes */ "!text/double_9qm_lqm",
         // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE
         // U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE
@@ -945,11 +968,11 @@
         /* morekeys_y */ "\u00FD,\u00FF",
         // U+00F0: "ð" LATIN SMALL LETTER ETH
         /* morekeys_d */ "\u00F0",
-        /* morekeys_z */ null,
-        /* morekeys_t */ null,
+        /* morekeys_z ~ */
+        null, null, null,
+        /* ~ morekeys_t */
         // U+0142: "ł" LATIN SMALL LETTER L WITH STROKE
         /* morekeys_l */ "\u0142",
-        /* keyspec_currency */ null,
         /* morekeys_g */ null,
         /* single_angle_quotes */ "!text/single_raqm_laqm",
         /* double_angle_quotes */ "!text/double_raqm_laqm",
@@ -1006,7 +1029,7 @@
         /* morekeys_e */ "\u00E9,\u00E8,\u00EA,\u00EB,\u0117",
         /* morekeys_i ~ */
         null, null, null,
-        /* ~ keylabel_to_alpha */
+        /* ~ morekeys_c */
         /* double_quotes */ "!text/double_9qm_lqm",
         // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE
         // U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE
@@ -1043,8 +1066,8 @@
     /* Locale el: Greek */
     private static final String[] TEXTS_el = {
         /* morekeys_a ~ */
-        null, null, null, null, null, null,
-        /* ~ morekeys_c */
+        null, null, null, null, null,
+        /* ~ morekeys_i */
         // Label for "switch to alphabetic" key.
         // U+0391: "Α" GREEK CAPITAL LETTER ALPHA
         // U+0392: "Β" GREEK CAPITAL LETTER BETA
@@ -1090,9 +1113,9 @@
         // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON
         // U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE
         /* morekeys_i */ "\u00ED,\u00EE,\u00EF,\u012B,\u00EC",
+        /* keylabel_to_alpha */ null,
         // U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA
         /* morekeys_c */ "\u00E7",
-        /* keylabel_to_alpha */ null,
         /* double_quotes */ null,
         // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE
         /* morekeys_n */ "\u00F1",
@@ -1156,12 +1179,12 @@
         // U+0131: "ı" LATIN SMALL LETTER DOTLESS I
         // U+0133: "ij" LATIN SMALL LIGATURE IJ
         /* morekeys_i */ "\u00ED,\u00EE,\u00EF,\u0129,\u00EC,\u012F,\u012B,\u0131,\u0133",
+        /* keylabel_to_alpha */ null,
         // U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE
         // U+010D: "č" LATIN SMALL LETTER C WITH CARON
         // U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA
         // U+010B: "ċ" LATIN SMALL LETTER C WITH DOT ABOVE
         /* morekeys_c */ "\u0107,\u010D,\u00E7,\u010B",
-        /* keylabel_to_alpha */ null,
         /* double_quotes */ null,
         // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE
         // U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE
@@ -1190,6 +1213,7 @@
         // U+017C: "ż" LATIN SMALL LETTER Z WITH DOT ABOVE
         // U+017E: "ž" LATIN SMALL LETTER Z WITH CARON
         /* morekeys_z */ "\u017A,\u017C,\u017E",
+        /* keyspec_currency */ null,
         // U+0165: "ť" LATIN SMALL LETTER T WITH CARON
         // U+021B: "ț" LATIN SMALL LETTER T WITH COMMA BELOW
         // U+0163: "ţ" LATIN SMALL LETTER T WITH CEDILLA
@@ -1201,7 +1225,6 @@
         // U+0140: "ŀ" LATIN SMALL LETTER L WITH MIDDLE DOT
         // U+0142: "ł" LATIN SMALL LETTER L WITH STROKE
         /* morekeys_l */ "\u013A,\u013C,\u013E,\u0140,\u0142",
-        /* keyspec_currency */ null,
         // U+011F: "ğ" LATIN SMALL LETTER G WITH BREVE
         // U+0121: "ġ" LATIN SMALL LETTER G WITH DOT ABOVE
         // U+0123: "ģ" LATIN SMALL LETTER G WITH CEDILLA
@@ -1293,11 +1316,11 @@
         // U+012F: "į" LATIN SMALL LETTER I WITH OGONEK
         // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON
         /* morekeys_i */ "\u00ED,\u00EF,\u00EC,\u00EE,\u012F,\u012B",
+        /* keylabel_to_alpha */ null,
         // U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA
         // U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE
         // U+010D: "č" LATIN SMALL LETTER C WITH CARON
         /* morekeys_c */ "\u00E7,\u0107,\u010D",
-        /* keylabel_to_alpha */ null,
         /* double_quotes */ null,
         // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE
         // U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE
@@ -1359,11 +1382,11 @@
         // U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS
         // U+0131: "ı" LATIN SMALL LETTER DOTLESS I
         /* morekeys_i */ "\u012B,\u00EC,\u012F,\u00ED,\u00EE,\u00EF,\u0131",
+        /* keylabel_to_alpha */ null,
         // U+010D: "č" LATIN SMALL LETTER C WITH CARON
         // U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA
         // U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE
         /* morekeys_c */ "\u010D,\u00E7,\u0107",
-        /* keylabel_to_alpha */ null,
         /* double_quotes */ "!text/double_9qm_lqm",
         // U+0146: "ņ" LATIN SMALL LETTER N WITH CEDILLA
         // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE
@@ -1384,6 +1407,7 @@
         // U+017C: "ż" LATIN SMALL LETTER Z WITH DOT ABOVE
         // U+017A: "ź" LATIN SMALL LETTER Z WITH ACUTE
         /* morekeys_z */ "\u017E,\u017C,\u017A",
+        /* keyspec_currency */ null,
         // U+0163: "ţ" LATIN SMALL LETTER T WITH CEDILLA
         // U+0165: "ť" LATIN SMALL LETTER T WITH CARON
         /* morekeys_t */ "\u0163,\u0165",
@@ -1392,7 +1416,6 @@
         // U+013A: "ĺ" LATIN SMALL LETTER L WITH ACUTE
         // U+013E: "ľ" LATIN SMALL LETTER L WITH CARON
         /* morekeys_l */ "\u013C,\u0142,\u013A,\u013E",
-        /* keyspec_currency */ null,
         // U+0123: "ģ" LATIN SMALL LETTER G WITH CEDILLA
         // U+011F: "ğ" LATIN SMALL LETTER G WITH BREVE
         /* morekeys_g */ "\u0123,\u011F",
@@ -1459,11 +1482,11 @@
         // U+012F: "į" LATIN SMALL LETTER I WITH OGONEK
         // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON
         /* morekeys_i */ "\u00ED,\u00EF,\u00EC,\u00EE,\u012F,\u012B",
+        /* keylabel_to_alpha */ null,
         // U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA
         // U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE
         // U+010D: "č" LATIN SMALL LETTER C WITH CARON
         /* morekeys_c */ "\u00E7,\u0107,\u010D",
-        /* keylabel_to_alpha */ null,
         /* double_quotes */ null,
         // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE
         // U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE
@@ -1473,21 +1496,22 @@
     /* Locale fa: Persian */
     private static final String[] TEXTS_fa = {
         /* morekeys_a ~ */
-        null, null, null, null, null, null,
-        /* ~ morekeys_c */
+        null, null, null, null, null,
+        /* ~ morekeys_i */
         // Label for "switch to alphabetic" key.
         // U+0627: "ا" ARABIC LETTER ALEF
         // U+200C: ZERO WIDTH NON-JOINER
         // U+0628: "ب" ARABIC LETTER BEH
         // U+067E: "پ" ARABIC LETTER PEH
         /* keylabel_to_alpha */ "\u0627\u200C\u0628\u200C\u067E",
-        /* double_quotes ~ */
-        null, null, null, null, null, null, null, null, null,
-        /* ~ morekeys_l */
+        /* morekeys_c ~ */
+        null, null, null, null, null, null, null, null,
+        /* ~ morekeys_z */
         // U+FDFC: "﷼" RIAL SIGN
         /* keyspec_currency */ "\uFDFC",
-        /* morekeys_g ~ */
+        /* morekeys_t ~ */
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
+        null, null,
         /* ~ morekeys_cyrillic_soft_sign */
         // U+06F1: "۱" EXTENDED ARABIC-INDIC DIGIT ONE
         /* keyspec_symbols_1 */ "\u06F1",
@@ -1645,7 +1669,7 @@
         // U+017A: "ź" LATIN SMALL LETTER Z WITH ACUTE
         // U+017C: "ż" LATIN SMALL LETTER Z WITH DOT ABOVE
         /* morekeys_z */ "\u017E,\u017A,\u017C",
-        /* morekeys_t ~ */
+        /* keyspec_currency ~ */
         null, null, null, null, null, null, null, null, null,
         /* ~ morekeys_cyrillic_ie */
         // U+00E5: "å" LATIN SMALL LETTER A WITH RING ABOVE
@@ -1707,12 +1731,13 @@
         // U+012F: "į" LATIN SMALL LETTER I WITH OGONEK
         // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON
         /* morekeys_i */ "\u00EE,%,\u00EF,\u00EC,\u00ED,\u012F,\u012B",
+        /* keylabel_to_alpha */ null,
         // U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA
         // U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE
         // U+010D: "č" LATIN SMALL LETTER C WITH CARON
         /* morekeys_c */ "\u00E7,%,\u0107,\u010D",
-        /* keylabel_to_alpha ~ */
-        null, null, null, null, null,
+        /* double_quotes ~ */
+        null, null, null, null,
         /* ~ morekeys_s */
         // U+00FF: "ÿ" LATIN SMALL LETTER Y WITH DIAERESIS
         /* morekeys_y */ "%,\u00FF",
@@ -1779,11 +1804,11 @@
         // U+012F: "į" LATIN SMALL LETTER I WITH OGONEK
         // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON
         /* morekeys_i */ "\u00ED,\u00EF,\u00EC,\u00EE,\u012F,\u012B",
+        /* keylabel_to_alpha */ null,
         // U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA
         // U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE
         // U+010D: "č" LATIN SMALL LETTER C WITH CARON
         /* morekeys_c */ "\u00E7,\u0107,\u010D",
-        /* keylabel_to_alpha */ null,
         /* double_quotes */ null,
         // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE
         // U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE
@@ -1793,20 +1818,21 @@
     /* Locale hi: Hindi */
     private static final String[] TEXTS_hi = {
         /* morekeys_a ~ */
-        null, null, null, null, null, null,
-        /* ~ morekeys_c */
+        null, null, null, null, null,
+        /* ~ morekeys_i */
         // Label for "switch to alphabetic" key.
         // U+0915: "क" DEVANAGARI LETTER KA
         // U+0916: "ख" DEVANAGARI LETTER KHA
         // U+0917: "ग" DEVANAGARI LETTER GA
         /* keylabel_to_alpha */ "\u0915\u0916\u0917",
-        /* double_quotes ~ */
-        null, null, null, null, null, null, null, null, null,
-        /* ~ morekeys_l */
+        /* morekeys_c ~ */
+        null, null, null, null, null, null, null, null,
+        /* ~ morekeys_z */
         // U+20B9: "₹" INDIAN RUPEE SIGN
         /* keyspec_currency */ "\u20B9",
-        /* morekeys_g ~ */
+        /* morekeys_t ~ */
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
+        null, null,
         /* ~ morekeys_cyrillic_soft_sign */
         // U+0967: "१" DEVANAGARI DIGIT ONE
         /* keyspec_symbols_1 */ "\u0967",
@@ -1845,13 +1871,12 @@
     /* Locale hr: Croatian */
     private static final String[] TEXTS_hr = {
         /* morekeys_a ~ */
-        null, null, null, null, null,
-        /* ~ morekeys_i */
+        null, null, null, null, null, null,
+        /* ~ keylabel_to_alpha */
         // U+010D: "č" LATIN SMALL LETTER C WITH CARON
         // U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE
         // U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA
         /* morekeys_c */ "\u010D,\u0107,\u00E7",
-        /* keylabel_to_alpha */ null,
         /* double_quotes */ "!text/double_9qm_rqm",
         // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE
         // U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE
@@ -1868,7 +1893,7 @@
         // U+017A: "ź" LATIN SMALL LETTER Z WITH ACUTE
         // U+017C: "ż" LATIN SMALL LETTER Z WITH DOT ABOVE
         /* morekeys_z */ "\u017E,\u017A,\u017C",
-        /* morekeys_t ~ */
+        /* keyspec_currency ~ */
         null, null, null, null,
         /* ~ morekeys_g */
         /* single_angle_quotes */ "!text/single_raqm_laqm",
@@ -1918,8 +1943,8 @@
         // U+012F: "į" LATIN SMALL LETTER I WITH OGONEK
         // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON
         /* morekeys_i */ "\u00ED,\u00EE,\u00EF,\u00EC,\u012F,\u012B",
-        /* morekeys_c */ null,
         /* keylabel_to_alpha */ null,
+        /* morekeys_c */ null,
         /* double_quotes */ "!text/double_9qm_rqm",
         /* morekeys_n */ null,
         /* single_quotes */ "!text/single_9qm_rqm",
@@ -1933,18 +1958,18 @@
     /* Locale hy_AM: Armenian (Armenia) */
     private static final String[] TEXTS_hy_AM = {
         /* morekeys_a ~ */
-        null, null, null, null, null, null,
-        /* ~ morekeys_c */
+        null, null, null, null, null,
+        /* ~ morekeys_i */
         // Label for "switch to alphabetic" key.
         // U+0531: "Ա" ARMENIAN CAPITAL LETTER AYB
         // U+0532: "Բ" ARMENIAN CAPITAL LETTER BEN
         // U+0533: "Գ" ARMENIAN CAPITAL LETTER GIM
         /* keylabel_to_alpha */ "\u0531\u0532\u0533",
-        /* double_quotes ~ */
+        /* morekeys_c ~ */
         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,
         /* ~ morekeys_nordic_row2_11 */
         // U+055E: "՞" ARMENIAN QUESTION MARK
         // U+055C: "՜" ARMENIAN EXCLAMATION MARK
@@ -2029,8 +2054,8 @@
         // U+012F: "į" LATIN SMALL LETTER I WITH OGONEK
         // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON
         /* morekeys_i */ "\u00ED,\u00EF,\u00EE,\u00EC,\u012F,\u012B",
-        /* morekeys_c */ null,
         /* keylabel_to_alpha */ null,
+        /* morekeys_c */ null,
         /* double_quotes */ "!text/double_9qm_lqm",
         /* morekeys_n */ null,
         /* single_quotes */ "!text/single_9qm_lqm",
@@ -2041,6 +2066,7 @@
         // U+00F0: "ð" LATIN SMALL LETTER ETH
         /* morekeys_d */ "\u00F0",
         /* morekeys_z */ null,
+        /* keyspec_currency */ null,
         // U+00FE: "þ" LATIN SMALL LETTER THORN
         /* morekeys_t */ "\u00FE",
     };
@@ -2088,7 +2114,7 @@
         // U+012F: "į" LATIN SMALL LETTER I WITH OGONEK
         // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON
         /* morekeys_i */ "\u00EC,\u00ED,\u00EE,\u00EF,\u012F,\u012B",
-        /* morekeys_c ~ */
+        /* keylabel_to_alpha ~ */
         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,
@@ -2111,25 +2137,27 @@
     /* Locale iw: Hebrew */
     private static final String[] TEXTS_iw = {
         /* morekeys_a ~ */
-        null, null, null, null, null, null,
-        /* ~ morekeys_c */
+        null, null, null, null, null,
+        /* ~ morekeys_i */
         // Label for "switch to alphabetic" key.
         // U+05D0: "א" HEBREW LETTER ALEF
         // U+05D1: "ב" HEBREW LETTER BET
         // U+05D2: "ג" HEBREW LETTER GIMEL
         /* keylabel_to_alpha */ "\u05D0\u05D1\u05D2",
+        /* morekeys_c */ null,
         /* double_quotes */ "!text/double_rqm_9qm",
         /* morekeys_n */ null,
         /* single_quotes */ "!text/single_rqm_9qm",
         /* morekeys_s ~ */
-        null, null, null, null, null, null,
-        /* ~ morekeys_l */
+        null, null, null, null,
+        /* ~ morekeys_z */
         // U+20AA: "₪" NEW SHEQEL SIGN
         /* keyspec_currency */ "\u20AA",
-        /* morekeys_g ~ */
+        /* morekeys_t ~ */
         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,
         /* ~ morekeys_swiss_row2_11 */
         // U+2605: "★" BLACK STAR
         /* morekeys_star */ "\u2605",
@@ -2168,13 +2196,14 @@
     /* Locale ka_GE: Georgian (Georgia) */
     private static final String[] TEXTS_ka_GE = {
         /* morekeys_a ~ */
-        null, null, null, null, null, null,
-        /* ~ morekeys_c */
+        null, null, null, null, null,
+        /* ~ morekeys_i */
         // Label for "switch to alphabetic" key.
         // U+10D0: "ა" GEORGIAN LETTER AN
         // U+10D1: "ბ" GEORGIAN LETTER BAN
         // U+10D2: "გ" GEORGIAN LETTER GAN
         /* keylabel_to_alpha */ "\u10D0\u10D1\u10D2",
+        /* morekeys_c */ null,
         /* double_quotes */ "!text/double_9qm_lqm",
         /* morekeys_n */ null,
         /* single_quotes */ "!text/single_9qm_lqm",
@@ -2183,15 +2212,16 @@
     /* Locale kk: Kazakh */
     private static final String[] TEXTS_kk = {
         /* morekeys_a ~ */
-        null, null, null, null, null, null,
-        /* ~ morekeys_c */
+        null, null, null, null, null,
+        /* ~ morekeys_i */
         // Label for "switch to alphabetic" key.
         // U+0410: "А" CYRILLIC CAPITAL LETTER A
         // U+0411: "Б" CYRILLIC CAPITAL LETTER BE
         // U+0412: "В" CYRILLIC CAPITAL LETTER VE
         /* keylabel_to_alpha */ "\u0410\u0411\u0412",
-        /* double_quotes ~ */
+        /* morekeys_c ~ */
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
+        null,
         /* ~ morekeys_k */
         // U+0451: "ё" CYRILLIC SMALL LETTER IO
         /* morekeys_cyrillic_ie */ "\u0451",
@@ -2240,14 +2270,14 @@
     /* Locale km_KH: Khmer (Cambodia) */
     private static final String[] TEXTS_km_KH = {
         /* morekeys_a ~ */
-        null, null, null, null, null, null,
-        /* ~ morekeys_c */
+        null, null, null, null, null,
+        /* ~ morekeys_i */
         // Label for "switch to alphabetic" key.
         // U+1780: "ក" KHMER LETTER KA
         // U+1781: "ខ" KHMER LETTER KHA
         // U+1782: "គ" KHMER LETTER KO
         /* keylabel_to_alpha */ "\u1780\u1781\u1782",
-        /* double_quotes ~ */
+        /* morekeys_c ~ */
         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,
@@ -2255,7 +2285,7 @@
         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,
         /* ~ morekeys_cyrillic_a */
         // U+17DB: "៛" KHMER CURRENCY SYMBOL RIEL
         /* morekeys_currency_dollar */ "\u17DB,\u00A2,\u00A3,\u20AC,\u00A5,\u20B1",
@@ -2264,15 +2294,16 @@
     /* Locale ky: Kirghiz */
     private static final String[] TEXTS_ky = {
         /* morekeys_a ~ */
-        null, null, null, null, null, null,
-        /* ~ morekeys_c */
+        null, null, null, null, null,
+        /* ~ morekeys_i */
         // Label for "switch to alphabetic" key.
         // U+0410: "А" CYRILLIC CAPITAL LETTER A
         // U+0411: "Б" CYRILLIC CAPITAL LETTER BE
         // U+0412: "В" CYRILLIC CAPITAL LETTER VE
         /* keylabel_to_alpha */ "\u0410\u0411\u0412",
-        /* double_quotes ~ */
+        /* morekeys_c ~ */
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
+        null,
         /* ~ morekeys_k */
         // U+0451: "ё" CYRILLIC SMALL LETTER IO
         /* morekeys_cyrillic_ie */ "\u0451",
@@ -2307,16 +2338,16 @@
     /* Locale lo_LA: Lao (Laos) */
     private static final String[] TEXTS_lo_LA = {
         /* morekeys_a ~ */
-        null, null, null, null, null, null,
-        /* ~ morekeys_c */
+        null, null, null, null, null,
+        /* ~ morekeys_i */
         // Label for "switch to alphabetic" key.
         // U+0E81: "ກ" LAO LETTER KO
         // U+0E82: "ຂ" LAO LETTER KHO SUNG
         // U+0E84: "ຄ" LAO LETTER KHO TAM
         /* keylabel_to_alpha */ "\u0E81\u0E82\u0E84",
-        /* double_quotes ~ */
-        null, null, null, null, null, null, null, null, null,
-        /* ~ morekeys_l */
+        /* morekeys_c ~ */
+        null, null, null, null, null, null, null, null,
+        /* ~ morekeys_z */
         // U+20AD: "₭" KIP SIGN
         /* keyspec_currency */ "\u20AD",
     };
@@ -2369,11 +2400,11 @@
         // U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS
         // U+0131: "ı" LATIN SMALL LETTER DOTLESS I
         /* morekeys_i */ "\u012F,\u012B,\u00EC,\u00ED,\u00EE,\u00EF,\u0131",
+        /* keylabel_to_alpha */ null,
         // U+010D: "č" LATIN SMALL LETTER C WITH CARON
         // U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA
         // U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE
         /* morekeys_c */ "\u010D,\u00E7,\u0107",
-        /* keylabel_to_alpha */ null,
         /* double_quotes */ "!text/double_9qm_lqm",
         // U+0146: "ņ" LATIN SMALL LETTER N WITH CEDILLA
         // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE
@@ -2394,6 +2425,7 @@
         // U+017C: "ż" LATIN SMALL LETTER Z WITH DOT ABOVE
         // U+017A: "ź" LATIN SMALL LETTER Z WITH ACUTE
         /* morekeys_z */ "\u017E,\u017C,\u017A",
+        /* keyspec_currency */ null,
         // U+0163: "ţ" LATIN SMALL LETTER T WITH CEDILLA
         // U+0165: "ť" LATIN SMALL LETTER T WITH CARON
         /* morekeys_t */ "\u0163,\u0165",
@@ -2402,7 +2434,6 @@
         // U+013A: "ĺ" LATIN SMALL LETTER L WITH ACUTE
         // U+013E: "ľ" LATIN SMALL LETTER L WITH CARON
         /* morekeys_l */ "\u013C,\u0142,\u013A,\u013E",
-        /* keyspec_currency */ null,
         // U+0123: "ģ" LATIN SMALL LETTER G WITH CEDILLA
         // U+011F: "ğ" LATIN SMALL LETTER G WITH BREVE
         /* morekeys_g */ "\u0123,\u011F",
@@ -2463,11 +2494,11 @@
         // U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS
         // U+0131: "ı" LATIN SMALL LETTER DOTLESS I
         /* morekeys_i */ "\u012B,\u012F,\u00EC,\u00ED,\u00EE,\u00EF,\u0131",
+        /* keylabel_to_alpha */ null,
         // U+010D: "č" LATIN SMALL LETTER C WITH CARON
         // U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA
         // U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE
         /* morekeys_c */ "\u010D,\u00E7,\u0107",
-        /* keylabel_to_alpha */ null,
         /* double_quotes */ "!text/double_9qm_lqm",
         // U+0146: "ņ" LATIN SMALL LETTER N WITH CEDILLA
         // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE
@@ -2488,6 +2519,7 @@
         // U+017C: "ż" LATIN SMALL LETTER Z WITH DOT ABOVE
         // U+017A: "ź" LATIN SMALL LETTER Z WITH ACUTE
         /* morekeys_z */ "\u017E,\u017C,\u017A",
+        /* keyspec_currency */ null,
         // U+0163: "ţ" LATIN SMALL LETTER T WITH CEDILLA
         // U+0165: "ť" LATIN SMALL LETTER T WITH CARON
         /* morekeys_t */ "\u0163,\u0165",
@@ -2496,7 +2528,6 @@
         // U+013A: "ĺ" LATIN SMALL LETTER L WITH ACUTE
         // U+013E: "ľ" LATIN SMALL LETTER L WITH CARON
         /* morekeys_l */ "\u013C,\u0142,\u013A,\u013E",
-        /* keyspec_currency */ null,
         // U+0123: "ģ" LATIN SMALL LETTER G WITH CEDILLA
         // U+011F: "ğ" LATIN SMALL LETTER G WITH BREVE
         /* morekeys_g */ "\u0123,\u011F",
@@ -2513,13 +2544,14 @@
     /* Locale mk: Macedonian */
     private static final String[] TEXTS_mk = {
         /* morekeys_a ~ */
-        null, null, null, null, null, null,
-        /* ~ morekeys_c */
+        null, null, null, null, null,
+        /* ~ morekeys_i */
         // Label for "switch to alphabetic" key.
         // U+0410: "А" CYRILLIC CAPITAL LETTER A
         // U+0411: "Б" CYRILLIC CAPITAL LETTER BE
         // U+0412: "В" CYRILLIC CAPITAL LETTER VE
         /* keylabel_to_alpha */ "\u0410\u0411\u0412",
+        /* morekeys_c */ null,
         /* double_quotes */ "!text/double_9qm_lqm",
         /* morekeys_n */ null,
         /* single_quotes */ "!text/single_9qm_lqm",
@@ -2550,16 +2582,16 @@
     /* Locale mn_MN: Mongolian (Mongolia) */
     private static final String[] TEXTS_mn_MN = {
         /* morekeys_a ~ */
-        null, null, null, null, null, null,
-        /* ~ morekeys_c */
+        null, null, null, null, null,
+        /* ~ morekeys_i */
         // Label for "switch to alphabetic" key.
         // U+0410: "А" CYRILLIC CAPITAL LETTER A
         // U+0411: "Б" CYRILLIC CAPITAL LETTER BE
         // U+0412: "В" CYRILLIC CAPITAL LETTER VE
         /* keylabel_to_alpha */ "\u0410\u0411\u0412",
-        /* double_quotes ~ */
-        null, null, null, null, null, null, null, null, null,
-        /* ~ morekeys_l */
+        /* morekeys_c ~ */
+        null, null, null, null, null, null, null, null,
+        /* ~ morekeys_z */
         // U+20AE: "₮" TUGRIK SIGN
         /* keyspec_currency */ "\u20AE",
     };
@@ -2567,20 +2599,21 @@
     /* Locale mr_IN: Marathi (India) */
     private static final String[] TEXTS_mr_IN = {
         /* morekeys_a ~ */
-        null, null, null, null, null, null,
-        /* ~ morekeys_c */
+        null, null, null, null, null,
+        /* ~ morekeys_i */
         // Label for "switch to alphabetic" key.
         // U+0915: "क" DEVANAGARI LETTER KA
         // U+0916: "ख" DEVANAGARI LETTER KHA
         // U+0917: "ग" DEVANAGARI LETTER GA
         /* keylabel_to_alpha */ "\u0915\u0916\u0917",
-        /* double_quotes ~ */
-        null, null, null, null, null, null, null, null, null,
-        /* ~ morekeys_l */
+        /* morekeys_c ~ */
+        null, null, null, null, null, null, null, null,
+        /* ~ morekeys_z */
         // U+20B9: "₹" INDIAN RUPEE SIGN
         /* keyspec_currency */ "\u20B9",
-        /* morekeys_g ~ */
+        /* morekeys_t ~ */
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
+        null, null,
         /* ~ morekeys_cyrillic_soft_sign */
         // U+0967: "१" DEVANAGARI DIGIT ONE
         /* keyspec_symbols_1 */ "\u0967",
@@ -2619,18 +2652,18 @@
     /* Locale my_MM: Burmese (Myanmar) */
     private static final String[] TEXTS_my_MM = {
         /* morekeys_a ~ */
-        null, null, null, null, null, null,
-        /* ~ morekeys_c */
+        null, null, null, null, null,
+        /* ~ morekeys_i */
         // Label for "switch to alphabetic" key.
         // U+1000: "က" MYANMAR LETTER KA
         // U+1001: "ခ" MYANMAR LETTER KHA
         // U+1002: "ဂ" MYANMAR LETTER GA
         /* keylabel_to_alpha */ "\u1000\u1001\u1002",
-        /* double_quotes ~ */
+        /* morekeys_c ~ */
         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,
         /* ~ morekeys_nordic_row2_11 */
         /* morekeys_punctuation */ "!autoColumnOrder!9,\u104A,.,?,!,#,),(,/,;,...,',@,:,-,\",+,\\%,&",
         // U+104A: "၊" MYANMAR SIGN LITTLE SECTION
@@ -2687,7 +2720,7 @@
         /* morekeys_e */ "\u00E9,\u00E8,\u00EA,\u00EB,\u0119,\u0117,\u0113",
         /* morekeys_i ~ */
         null, null, null,
-        /* ~ keylabel_to_alpha */
+        /* ~ morekeys_c */
         /* double_quotes */ "!text/double_9qm_rqm",
         /* morekeys_n */ null,
         /* single_quotes */ "!text/single_9qm_rqm",
@@ -2713,20 +2746,21 @@
     /* Locale ne_NP: Nepali (Nepal) */
     private static final String[] TEXTS_ne_NP = {
         /* morekeys_a ~ */
-        null, null, null, null, null, null,
-        /* ~ morekeys_c */
+        null, null, null, null, null,
+        /* ~ morekeys_i */
         // Label for "switch to alphabetic" key.
         // U+0915: "क" DEVANAGARI LETTER KA
         // U+0916: "ख" DEVANAGARI LETTER KHA
         // U+0917: "ग" DEVANAGARI LETTER GA
         /* keylabel_to_alpha */ "\u0915\u0916\u0917",
-        /* double_quotes ~ */
-        null, null, null, null, null, null, null, null, null,
-        /* ~ morekeys_l */
+        /* morekeys_c ~ */
+        null, null, null, null, null, null, null, null,
+        /* ~ morekeys_z */
         // U+0930/U+0941/U+002E "रु." NEPALESE RUPEE SIGN
         /* keyspec_currency */ "\u0930\u0941.",
-        /* morekeys_g ~ */
+        /* morekeys_t ~ */
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
+        null, null,
         /* ~ morekeys_cyrillic_soft_sign */
         // U+0967: "१" DEVANAGARI DIGIT ONE
         /* keyspec_symbols_1 */ "\u0967",
@@ -2804,8 +2838,8 @@
         // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON
         // U+0133: "ij" LATIN SMALL LIGATURE IJ
         /* morekeys_i */ "\u00ED,\u00EF,\u00EC,\u00EE,\u012F,\u012B,\u0133",
-        /* morekeys_c */ null,
         /* keylabel_to_alpha */ null,
+        /* morekeys_c */ null,
         /* double_quotes */ "!text/double_9qm_rqm",
         // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE
         // U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE
@@ -2847,11 +2881,11 @@
         // U+0113: "ē" LATIN SMALL LETTER E WITH MACRON
         /* morekeys_e */ "\u0119,\u00E8,\u00E9,\u00EA,\u00EB,\u0117,\u0113",
         /* morekeys_i */ null,
+        /* keylabel_to_alpha */ null,
         // U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE
         // U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA
         // U+010D: "č" LATIN SMALL LETTER C WITH CARON
         /* morekeys_c */ "\u0107,\u00E7,\u010D",
-        /* keylabel_to_alpha */ null,
         /* double_quotes */ "!text/double_9qm_rqm",
         // U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE
         // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE
@@ -2867,6 +2901,7 @@
         // U+017A: "ź" LATIN SMALL LETTER Z WITH ACUTE
         // U+017E: "ž" LATIN SMALL LETTER Z WITH CARON
         /* morekeys_z */ "\u017C,\u017A,\u017E",
+        /* keyspec_currency */ null,
         /* morekeys_t */ null,
         // U+0142: "ł" LATIN SMALL LETTER L WITH STROKE
         /* morekeys_l */ "\u0142",
@@ -2914,6 +2949,7 @@
         // U+012F: "į" LATIN SMALL LETTER I WITH OGONEK
         // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON
         /* morekeys_i */ "\u00ED,\u00EE,\u00EC,\u00EF,\u012F,\u012B",
+        /* keylabel_to_alpha */ null,
         // U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA
         // U+010D: "č" LATIN SMALL LETTER C WITH CARON
         // U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE
@@ -2955,8 +2991,8 @@
         // U+012F: "į" LATIN SMALL LETTER I WITH OGONEK
         // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON
         /* morekeys_i */ "\u00EE,\u00EF,\u00EC,\u00ED,\u012F,\u012B",
-        /* morekeys_c */ null,
         /* keylabel_to_alpha */ null,
+        /* morekeys_c */ null,
         /* double_quotes */ "!text/double_9qm_rqm",
         /* morekeys_n */ null,
         /* single_quotes */ "!text/single_9qm_rqm",
@@ -2966,8 +3002,8 @@
         // U+0161: "š" LATIN SMALL LETTER S WITH CARON
         /* morekeys_s */ "\u0219,\u00DF,\u015B,\u0161",
         /* morekeys_y ~ */
-        null, null, null,
-        /* ~ morekeys_z */
+        null, null, null, null,
+        /* ~ keyspec_currency */
         // U+021B: "ț" LATIN SMALL LETTER T WITH COMMA BELOW
         /* morekeys_t */ "\u021B",
     };
@@ -2975,13 +3011,14 @@
     /* Locale ru: Russian */
     private static final String[] TEXTS_ru = {
         /* morekeys_a ~ */
-        null, null, null, null, null, null,
-        /* ~ morekeys_c */
+        null, null, null, null, null,
+        /* ~ morekeys_i */
         // Label for "switch to alphabetic" key.
         // U+0410: "А" CYRILLIC CAPITAL LETTER A
         // U+0411: "Б" CYRILLIC CAPITAL LETTER BE
         // U+0412: "В" CYRILLIC CAPITAL LETTER VE
         /* keylabel_to_alpha */ "\u0410\u0411\u0412",
+        /* morekeys_c */ null,
         /* double_quotes */ "!text/double_9qm_lqm",
         /* morekeys_n */ null,
         /* single_quotes */ "!text/single_9qm_lqm",
@@ -3008,8 +3045,8 @@
     /* Locale si_LK: Sinhalese (Sri Lanka) */
     private static final String[] TEXTS_si_LK = {
         /* morekeys_a ~ */
-        null, null, null, null, null, null,
-        /* ~ morekeys_c */
+        null, null, null, null, null,
+        /* ~ morekeys_i */
         // Label for "switch to alphabetic" key.
         // U+0D85: "අ" SINHALA LETTER AYANNA
         // U+0D86: "ආ" SINHALA LETTER AAYANNA
@@ -3063,11 +3100,11 @@
         // U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS
         // U+0131: "ı" LATIN SMALL LETTER DOTLESS I
         /* morekeys_i */ "\u00ED,\u012B,\u012F,\u00EC,\u00EE,\u00EF,\u0131",
+        /* keylabel_to_alpha */ null,
         // U+010D: "č" LATIN SMALL LETTER C WITH CARON
         // U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA
         // U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE
         /* morekeys_c */ "\u010D,\u00E7,\u0107",
-        /* keylabel_to_alpha */ null,
         /* double_quotes */ "!text/double_9qm_lqm",
         // U+0148: "ň" LATIN SMALL LETTER N WITH CARON
         // U+0146: "ņ" LATIN SMALL LETTER N WITH CEDILLA
@@ -3089,6 +3126,7 @@
         // U+017C: "ż" LATIN SMALL LETTER Z WITH DOT ABOVE
         // U+017A: "ź" LATIN SMALL LETTER Z WITH ACUTE
         /* morekeys_z */ "\u017E,\u017C,\u017A",
+        /* keyspec_currency */ null,
         // U+0165: "ť" LATIN SMALL LETTER T WITH CARON
         // U+0163: "ţ" LATIN SMALL LETTER T WITH CEDILLA
         /* morekeys_t */ "\u0165,\u0163",
@@ -3097,7 +3135,6 @@
         // U+013C: "ļ" LATIN SMALL LETTER L WITH CEDILLA
         // U+0142: "ł" LATIN SMALL LETTER L WITH STROKE
         /* morekeys_l */ "\u013E,\u013A,\u013C,\u0142",
-        /* keyspec_currency */ null,
         // U+0123: "ģ" LATIN SMALL LETTER G WITH CEDILLA
         // U+011F: "ğ" LATIN SMALL LETTER G WITH BREVE
         /* morekeys_g */ "\u0123,\u011F",
@@ -3114,12 +3151,11 @@
     /* Locale sl: Slovenian */
     private static final String[] TEXTS_sl = {
         /* morekeys_a ~ */
-        null, null, null, null, null,
-        /* ~ morekeys_i */
+        null, null, null, null, null, null,
+        /* ~ keylabel_to_alpha */
         // U+010D: "č" LATIN SMALL LETTER C WITH CARON
         // U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE
         /* morekeys_c */ "\u010D,\u0107",
-        /* keylabel_to_alpha */ null,
         /* double_quotes */ "!text/double_9qm_lqm",
         /* morekeys_n */ null,
         /* single_quotes */ "!text/single_9qm_lqm",
@@ -3130,7 +3166,7 @@
         /* morekeys_d */ "\u0111",
         // U+017E: "ž" LATIN SMALL LETTER Z WITH CARON
         /* morekeys_z */ "\u017E",
-        /* morekeys_t ~ */
+        /* keyspec_currency ~ */
         null, null, null, null,
         /* ~ morekeys_g */
         /* single_angle_quotes */ "!text/single_raqm_laqm",
@@ -3140,14 +3176,15 @@
     /* Locale sr: Serbian */
     private static final String[] TEXTS_sr = {
         /* morekeys_a ~ */
-        null, null, null, null, null, null,
-        /* ~ morekeys_c */
+        null, null, null, null, null,
+        /* ~ morekeys_i */
         // END: More keys definitions for Serbian (Cyrillic)
         // Label for "switch to alphabetic" key.
         // U+0410: "А" CYRILLIC CAPITAL LETTER A
         // U+0411: "Б" CYRILLIC CAPITAL LETTER BE
         // U+0412: "В" CYRILLIC CAPITAL LETTER VE
         /* keylabel_to_alpha */ "\u0410\u0411\u0412",
+        /* morekeys_c */ null,
         /* double_quotes */ "!text/double_9qm_lqm",
         /* morekeys_n */ null,
         /* single_quotes */ "!text/single_9qm_lqm",
@@ -3228,11 +3265,11 @@
         // U+00EE: "î" LATIN SMALL LETTER I WITH CIRCUMFLEX
         // U+00EF: "ï" LATIN SMALL LETTER I WITH DIAERESIS
         /* morekeys_i */ "\u00ED,\u00EC,\u00EE,\u00EF",
+        /* keylabel_to_alpha */ null,
         // U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA
         // U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE
         // U+010D: "č" LATIN SMALL LETTER C WITH CARON
         /* morekeys_c */ "\u00E7,\u0107,\u010D",
-        /* keylabel_to_alpha */ null,
         /* double_quotes */ null,
         // U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE
         // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE
@@ -3254,12 +3291,12 @@
         // U+017E: "ž" LATIN SMALL LETTER Z WITH CARON
         // U+017C: "ż" LATIN SMALL LETTER Z WITH DOT ABOVE
         /* morekeys_z */ "\u017A,\u017E,\u017C",
+        /* keyspec_currency */ null,
         // U+0165: "ť" LATIN SMALL LETTER T WITH CARON
         // U+00FE: "þ" LATIN SMALL LETTER THORN
         /* morekeys_t */ "\u0165,\u00FE",
         // U+0142: "ł" LATIN SMALL LETTER L WITH STROKE
         /* morekeys_l */ "\u0142",
-        /* keyspec_currency */ null,
         /* morekeys_g */ null,
         /* single_angle_quotes */ "!text/single_raqm_laqm",
         /* double_angle_quotes */ "!text/double_raqm_laqm",
@@ -3323,9 +3360,9 @@
         // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON
         // U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE
         /* morekeys_i */ "\u00EE,\u00EF,\u00ED,\u012B,\u00EC",
+        /* keylabel_to_alpha */ null,
         // U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA
         /* morekeys_c */ "\u00E7",
-        /* keylabel_to_alpha */ null,
         /* double_quotes */ null,
         // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE
         /* morekeys_n */ "\u00F1",
@@ -3334,23 +3371,23 @@
         /* morekeys_s */ "\u00DF",
         /* morekeys_y ~ */
         null, null, null, null, null, null,
-        /* ~ keyspec_currency */
+        /* ~ morekeys_l */
         /* morekeys_g */ "g\'",
     };
 
     /* Locale th: Thai */
     private static final String[] TEXTS_th = {
         /* morekeys_a ~ */
-        null, null, null, null, null, null,
-        /* ~ morekeys_c */
+        null, null, null, null, null,
+        /* ~ morekeys_i */
         // Label for "switch to alphabetic" key.
         // U+0E01: "ก" THAI CHARACTER KO KAI
         // U+0E02: "ข" THAI CHARACTER KHO KHAI
         // U+0E04: "ค" THAI CHARACTER KHO KHWAI
         /* keylabel_to_alpha */ "\u0E01\u0E02\u0E04",
-        /* double_quotes ~ */
-        null, null, null, null, null, null, null, null, null,
-        /* ~ morekeys_l */
+        /* morekeys_c ~ */
+        null, null, null, null, null, null, null, null,
+        /* ~ morekeys_z */
         // U+0E3F: "฿" THAI CURRENCY SYMBOL BAHT
         /* keyspec_currency */ "\u0E3F",
     };
@@ -3399,11 +3436,11 @@
         // U+012F: "į" LATIN SMALL LETTER I WITH OGONEK
         // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON
         /* morekeys_i */ "\u00ED,\u00EF,\u00EC,\u00EE,\u012F,\u012B",
+        /* keylabel_to_alpha */ null,
         // U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA
         // U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE
         // U+010D: "č" LATIN SMALL LETTER C WITH CARON
         /* morekeys_c */ "\u00E7,\u0107,\u010D",
-        /* keylabel_to_alpha */ null,
         /* double_quotes */ null,
         // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE
         // U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE
@@ -3438,12 +3475,13 @@
         // U+012F: "į" LATIN SMALL LETTER I WITH OGONEK
         // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON
         /* morekeys_i */ "\u0131,\u00EE,\u00EF,\u00EC,\u00ED,\u012F,\u012B",
+        /* keylabel_to_alpha */ null,
         // U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA
         // U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE
         // U+010D: "č" LATIN SMALL LETTER C WITH CARON
         /* morekeys_c */ "\u00E7,\u0107,\u010D",
-        /* keylabel_to_alpha ~ */
-        null, null, null, null,
+        /* double_quotes ~ */
+        null, null, null,
         /* ~ single_quotes */
         // U+015F: "ş" LATIN SMALL LETTER S WITH CEDILLA
         // U+00DF: "ß" LATIN SMALL LETTER SHARP S
@@ -3452,7 +3490,7 @@
         /* morekeys_s */ "\u015F,\u00DF,\u015B,\u0161",
         /* morekeys_y ~ */
         null, null, null, null, null, null,
-        /* ~ keyspec_currency */
+        /* ~ morekeys_l */
         // U+011F: "ğ" LATIN SMALL LETTER G WITH BREVE
         /* morekeys_g */ "\u011F",
     };
@@ -3460,23 +3498,24 @@
     /* Locale uk: Ukrainian */
     private static final String[] TEXTS_uk = {
         /* morekeys_a ~ */
-        null, null, null, null, null, null,
-        /* ~ morekeys_c */
+        null, null, null, null, null,
+        /* ~ morekeys_i */
         // Label for "switch to alphabetic" key.
         // U+0410: "А" CYRILLIC CAPITAL LETTER A
         // U+0411: "Б" CYRILLIC CAPITAL LETTER BE
         // U+0412: "В" CYRILLIC CAPITAL LETTER VE
         /* keylabel_to_alpha */ "\u0410\u0411\u0412",
+        /* morekeys_c */ null,
         /* double_quotes */ "!text/double_9qm_lqm",
         /* morekeys_n */ null,
         /* single_quotes */ "!text/single_9qm_lqm",
         /* morekeys_s ~ */
-        null, null, null, null, null, null,
-        /* ~ morekeys_l */
+        null, null, null, null,
+        /* ~ morekeys_z */
         // U+20B4: "₴" HRYVNIA SIGN
         /* keyspec_currency */ "\u20B4",
-        /* morekeys_g ~ */
-        null, null, null, null, null, null, null, null, null, null,
+        /* morekeys_t ~ */
+        null, null, null, null, null, null, null, null, null, null, null, null,
         /* ~ morekeys_nordic_row2_10 */
         // U+0449: "щ" CYRILLIC SMALL LETTER SHCHA
         /* keyspec_east_slavic_row1_9 */ "\u0449",
@@ -3570,7 +3609,7 @@
         // U+0129: "ĩ" LATIN SMALL LETTER I WITH TILDE
         // U+1ECB: "ị" LATIN SMALL LETTER I WITH DOT BELOW
         /* morekeys_i */ "\u00EC,\u00ED,\u1EC9,\u0129,\u1ECB",
-        /* morekeys_c ~ */
+        /* keylabel_to_alpha ~ */
         null, null, null, null, null, null,
         /* ~ morekeys_s */
         // U+1EF3: "ỳ" LATIN SMALL LETTER Y WITH GRAVE
@@ -3581,9 +3620,7 @@
         /* morekeys_y */ "\u1EF3,\u00FD,\u1EF7,\u1EF9,\u1EF5",
         // U+0111: "đ" LATIN SMALL LETTER D WITH STROKE
         /* morekeys_d */ "\u0111",
-        /* morekeys_z ~ */
-        null, null, null,
-        /* ~ morekeys_l */
+        /* morekeys_z */ null,
         // U+20AB: "₫" DONG SIGN
         /* keyspec_currency */ "\u20AB",
     };
@@ -3627,9 +3664,9 @@
         // U+012B: "ī" LATIN SMALL LETTER I WITH MACRON
         // U+00EC: "ì" LATIN SMALL LETTER I WITH GRAVE
         /* morekeys_i */ "\u00ED,\u00EE,\u00EF,\u012B,\u00EC",
+        /* keylabel_to_alpha */ null,
         // U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA
         /* morekeys_c */ "\u00E7",
-        /* keylabel_to_alpha */ null,
         /* double_quotes */ null,
         // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE
         /* morekeys_n */ "\u00F1",
@@ -3696,13 +3733,13 @@
         // U+0131: "ı" LATIN SMALL LETTER DOTLESS I
         // U+0133: "ij" LATIN SMALL LIGATURE IJ
         /* morekeys_i */ "\u00EC,\u00ED,\u00EE,\u00EF,\u0129,\u012B,\u012D,\u012F,\u0131,\u0133",
+        /* keylabel_to_alpha */ null,
         // U+00E7: "ç" LATIN SMALL LETTER C WITH CEDILLA
         // U+0107: "ć" LATIN SMALL LETTER C WITH ACUTE
         // U+0109: "ĉ" LATIN SMALL LETTER C WITH CIRCUMFLEX
         // U+010B: "ċ" LATIN SMALL LETTER C WITH DOT ABOVE
         // U+010D: "č" LATIN SMALL LETTER C WITH CARON
         /* morekeys_c */ "\u00E7,\u0107,\u0109,\u010B,\u010D",
-        /* keylabel_to_alpha */ null,
         /* double_quotes */ null,
         // U+00F1: "ñ" LATIN SMALL LETTER N WITH TILDE
         // U+0144: "ń" LATIN SMALL LETTER N WITH ACUTE
@@ -3732,6 +3769,7 @@
         // U+017C: "ż" LATIN SMALL LETTER Z WITH DOT ABOVE
         // U+017E: "ž" LATIN SMALL LETTER Z WITH CARON
         /* morekeys_z */ "\u017A,\u017C,\u017E",
+        /* keyspec_currency */ null,
         // U+00FE: "þ" LATIN SMALL LETTER THORN
         // U+0163: "ţ" LATIN SMALL LETTER T WITH CEDILLA
         // U+0165: "ť" LATIN SMALL LETTER T WITH CARON
@@ -3743,7 +3781,6 @@
         // U+0140: "ŀ" LATIN SMALL LETTER L WITH MIDDLE DOT
         // U+0142: "ł" LATIN SMALL LETTER L WITH STROKE
         /* morekeys_l */ "\u013A,\u013C,\u013E,\u0140,\u0142",
-        /* keyspec_currency */ null,
         // U+011D: "ĝ" LATIN SMALL LETTER G WITH CIRCUMFLEX
         // U+011F: "ğ" LATIN SMALL LETTER G WITH BREVE
         // U+0121: "ġ" LATIN SMALL LETTER G WITH DOT ABOVE
@@ -3784,11 +3821,12 @@
         "az_AZ"  , TEXTS_az_AZ, /*   8/ 18 Azerbaijani (Azerbaijan) */
         "be_BY"  , TEXTS_be_BY, /*   9/ 32 Belarusian (Belarus) */
         "bg"     , TEXTS_bg,    /*   2/  8 Bulgarian */
+        "bn"     , TEXTS_bn,    /*   2/ 15 Bengali */
         "ca"     , TEXTS_ca,    /*  11/ 95 Catalan */
         "cs"     , TEXTS_cs,    /*  17/ 21 Czech */
         "da"     , TEXTS_da,    /*  19/ 54 Danish */
         "de"     , TEXTS_de,    /*  16/ 62 German */
-        "el"     , TEXTS_el,    /*   1/  7 Greek */
+        "el"     , TEXTS_el,    /*   1/  6 Greek */
         "en"     , TEXTS_en,    /*   8/ 11 English */
         "eo"     , TEXTS_eo,    /*  26/118 Esperanto */
         "es"     , TEXTS_es,    /*   8/ 55 Spanish */
@@ -3802,39 +3840,39 @@
         "hr"     , TEXTS_hr,    /*   9/ 20 Croatian */
         "hu"     , TEXTS_hu,    /*   9/ 20 Hungarian */
         "hy_AM"  , TEXTS_hy_AM, /*   8/126 Armenian (Armenia) */
-        "is"     , TEXTS_is,    /*  10/ 15 Icelandic */
+        "is"     , TEXTS_is,    /*  10/ 16 Icelandic */
         "it"     , TEXTS_it,    /*  11/ 62 Italian */
         "iw"     , TEXTS_iw,    /*  20/123 Hebrew */
         "ka_GE"  , TEXTS_ka_GE, /*   3/ 10 Georgian (Georgia) */
         "kk"     , TEXTS_kk,    /*  15/121 Kazakh */
         "km_KH"  , TEXTS_km_KH, /*   2/122 Khmer (Cambodia) */
         "ky"     , TEXTS_ky,    /*  10/ 88 Kirghiz */
-        "lo_LA"  , TEXTS_lo_LA, /*   2/ 17 Lao (Laos) */
+        "lo_LA"  , TEXTS_lo_LA, /*   2/ 15 Lao (Laos) */
         "lt"     , TEXTS_lt,    /*  18/ 22 Lithuanian */
         "lv"     , TEXTS_lv,    /*  18/ 22 Latvian */
         "mk"     , TEXTS_mk,    /*   9/ 93 Macedonian */
-        "mn_MN"  , TEXTS_mn_MN, /*   2/ 17 Mongolian (Mongolia) */
+        "mn_MN"  , TEXTS_mn_MN, /*   2/ 15 Mongolian (Mongolia) */
         "mr_IN"  , TEXTS_mr_IN, /*  23/ 53 Marathi (India) */
         "my_MM"  , TEXTS_my_MM, /*   8/104 Burmese (Myanmar) */
         "nb"     , TEXTS_nb,    /*  11/ 54 Norwegian Bokmål */
         "ne_NP"  , TEXTS_ne_NP, /*  23/ 53 Nepali (Nepal) */
         "nl"     , TEXTS_nl,    /*   9/ 12 Dutch */
-        "pl"     , TEXTS_pl,    /*  10/ 16 Polish */
-        "pt"     , TEXTS_pt,    /*   6/  6 Portuguese */
+        "pl"     , TEXTS_pl,    /*  10/ 17 Polish */
+        "pt"     , TEXTS_pt,    /*   6/  7 Portuguese */
         "rm"     , TEXTS_rm,    /*   1/  2 Raeto-Romance */
-        "ro"     , TEXTS_ro,    /*   6/ 15 Romanian */
+        "ro"     , TEXTS_ro,    /*   6/ 16 Romanian */
         "ru"     , TEXTS_ru,    /*   9/ 32 Russian */
-        "si_LK"  , TEXTS_si_LK, /*   1/  7 Sinhalese (Sri Lanka) */
+        "si_LK"  , TEXTS_si_LK, /*   1/  6 Sinhalese (Sri Lanka) */
         "sk"     , TEXTS_sk,    /*  20/ 22 Slovak */
         "sl"     , TEXTS_sl,    /*   8/ 20 Slovenian */
         "sr"     , TEXTS_sr,    /*  11/ 93 Serbian */
         "sv"     , TEXTS_sv,    /*  21/ 54 Swedish */
         "sw"     , TEXTS_sw,    /*   9/ 18 Swahili */
-        "th"     , TEXTS_th,    /*   2/ 17 Thai */
+        "th"     , TEXTS_th,    /*   2/ 15 Thai */
         "tl"     , TEXTS_tl,    /*   7/  9 Tagalog */
         "tr"     , TEXTS_tr,    /*   7/ 18 Turkish */
         "uk"     , TEXTS_uk,    /*  11/ 87 Ukrainian */
-        "vi"     , TEXTS_vi,    /*   8/ 17 Vietnamese */
+        "vi"     , TEXTS_vi,    /*   8/ 15 Vietnamese */
         "zu"     , TEXTS_zu,    /*   8/ 11 Zulu */
         "zz"     , TEXTS_zz,    /*  19/112 Alphabet */
     };