Merge "Read options from attributes"
diff --git a/java/res/values-be/bools.xml b/java/res/values-be-rBY/bools.xml
similarity index 100%
rename from java/res/values-be/bools.xml
rename to java/res/values-be-rBY/bools.xml
diff --git a/java/res/values-be/strings-action-keys.xml b/java/res/values-be-rBY/strings-action-keys.xml
similarity index 100%
rename from java/res/values-be/strings-action-keys.xml
rename to java/res/values-be-rBY/strings-action-keys.xml
diff --git a/java/res/values-be/strings-appname.xml b/java/res/values-be/strings-appname.xml
deleted file mode 100644
index 2f9593b..0000000
--- a/java/res/values-be/strings-appname.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/*
-**
-** Copyright 2013, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="english_ime_name" msgid="5940510615957428904">"Клавіятура Android (AOSP)"</string>
-    <string name="spell_checker_service_name" msgid="1254221805440242662">"Iнструмент праверкi правапiсу для Android (AOSP)"</string>
-    <string name="english_ime_settings" msgid="5760361067176802794">"Налады клавіятуры Android (AOSP)"</string>
-    <string name="android_spell_checker_settings" msgid="6123949487832861885">"Налады інструмента праверкі правапісу для Android (AOSP)"</string>
-</resources>
diff --git a/java/res/values-be/strings.xml b/java/res/values-be/strings.xml
deleted file mode 100644
index c7aac0c..0000000
--- a/java/res/values-be/strings.xml
+++ /dev/null
@@ -1,247 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 
-/*
-**
-** Copyright 2008, 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.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="english_ime_input_options" msgid="3909945612939668554">"Параметры ўводу"</string>
-    <string name="english_ime_research_log" msgid="8492602295696577851">"Каманды гiсторыя даследаванняў"</string>
-    <string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Шукаць імёны кантактаў"</string>
-    <string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Модуль праверкі правапісу выкарыстоўвае запісы са спісу кантактаў"</string>
-    <string name="vibrate_on_keypress" msgid="5258079494276955460">"Вібрацыя пры націску клавіш"</string>
-    <string name="sound_on_keypress" msgid="6093592297198243644">"Гук пры націску"</string>
-    <string name="popup_on_keypress" msgid="123894815723512944">"Па націску на клавішы ўсплывае акно"</string>
-    <string name="general_category" msgid="1859088467017573195">"Агульныя"</string>
-    <string name="correction_category" msgid="2236750915056607613">"Выпраўленне тэксту"</string>
-    <string name="gesture_typing_category" msgid="497263612130532630">"Набор жэстамі"</string>
-    <string name="misc_category" msgid="6894192814868233453">"Іншыя параметры"</string>
-    <string name="advanced_settings" msgid="362895144495591463">"Адмысловыя налады"</string>
-    <string name="advanced_settings_summary" msgid="4487980456152830271">"Функцыi для спецыялістаў"</string>
-    <string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Перакл. да інш. спос. ув."</string>
-    <string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"Кнопка пераключэння мовы звязана i з iншымi спосабамi ўводу"</string>
-    <string name="show_language_switch_key" msgid="5915478828318774384">"Кнопка пераключэння мовы"</string>
-    <string name="show_language_switch_key_summary" msgid="7343403647474265713">"Паказваць, калі ўключана некалькі моў ўводу"</string>
-    <string name="sliding_key_input_preview" msgid="6604262359510068370">"Iндыкатар слайд-шоу"</string>
-    <string name="sliding_key_input_preview_summary" msgid="6340524345729093886">"Паказаць візуальны сігнал падчас слiзгання клавiш Shift або Symbol"</string>
-    <string name="key_preview_popup_dismiss_delay" msgid="6213164897443068248">"Затрым. скр. падк. клав."</string>
-    <string name="key_preview_popup_dismiss_no_delay" msgid="2096123151571458064">"Няма затрымкі"</string>
-    <string name="key_preview_popup_dismiss_default_delay" msgid="2166964333903906734">"Па змаўчанні"</string>
-    <string name="abbreviation_unit_milliseconds" msgid="8700286094028323363">"<xliff:g id="MILLISECONDS">%s</xliff:g> мс"</string>
-    <!-- no translation found for settings_system_default (6268225104743331821) -->
-    <skip />
-    <string name="use_contacts_dict" msgid="4435317977804180815">"Прапан. імёны кантактаў"</string>
-    <string name="use_contacts_dict_summary" msgid="6599983334507879959">"Выкарыстоўваць імёны са спісу кантактаў для прапаноў і выпраўл."</string>
-    <string name="use_double_space_period" msgid="8781529969425082860">"Падвойны iнтэрвал"</string>
-    <string name="use_double_space_period_summary" msgid="6532892187247952799">"Падвойнае нацiсканне на прабел ўстаўляе iнтэрвал з наступным прабелам"</string>
-    <string name="auto_cap" msgid="1719746674854628252">"Аўтаматычна рабіць вялікія літары"</string>
-    <string name="auto_cap_summary" msgid="7934452761022946874">"Пісаць з загалоўнай літары першае слова ў кожным сказе"</string>
-    <string name="edit_personal_dictionary" msgid="3996910038952940420">"Персанальны слоўнік"</string>
-    <string name="configure_dictionaries_title" msgid="4238652338556902049">"Дадатковыя слоўнікі"</string>
-    <string name="main_dictionary" msgid="4798763781818361168">"Асноўны слоўнік"</string>
-    <string name="prefs_show_suggestions" msgid="8026799663445531637">"Паказаць прапановы на выпраўленне"</string>
-    <string name="prefs_show_suggestions_summary" msgid="1583132279498502825">"Паказваць прапанаваныя словы падчас набору тэксту"</string>
-    <string name="prefs_suggestion_visibility_show_name" msgid="3219916594067551303">"Заўсёды паказваць"</string>
-    <string name="prefs_suggestion_visibility_show_only_portrait_name" msgid="3859783767435239118">"Паказаць у партрэтным рэжыме"</string>
-    <string name="prefs_suggestion_visibility_hide_name" msgid="6309143926422234673">"Заўседы хаваць"</string>
-    <string name="prefs_block_potentially_offensive_title" msgid="5078480071057408934">"Блакіраваць абразлівыя словы"</string>
-    <string name="prefs_block_potentially_offensive_summary" msgid="2371835479734991364">"Не прапануйце патэнцыяльна абразлівых слоў"</string>
-    <string name="auto_correction" msgid="7630720885194996950">"Аўтавыпраўленне"</string>
-    <string name="auto_correction_summary" msgid="5625751551134658006">"Прабелы і пунктуацыйныя знакі дазваляюць аўтаматычна выпраўляць памылкова ўведзеныя словы"</string>
-    <string name="auto_correction_threshold_mode_off" msgid="8470882665417944026">"Адключаны"</string>
-    <string name="auto_correction_threshold_mode_modest" msgid="8788366690620799097">"Сціплы"</string>
-    <!-- no translation found for auto_correction_threshold_mode_aggressive (7319007299148899623) -->
-    <skip />
-    <!-- no translation found for auto_correction_threshold_mode_very_aggressive (1853309024129480416) -->
-    <skip />
-    <string name="bigram_prediction" msgid="1084449187723948550">"Падказкi для наступнага слова"</string>
-    <string name="bigram_prediction_summary" msgid="3896362682751109677">"Выкарыстоўваць папярэдняе слова, каб атрымлiваць падказкi"</string>
-    <string name="gesture_input" msgid="826951152254563827">"Уключыць набор жэстамі"</string>
-    <string name="gesture_input_summary" msgid="9180350639305731231">"Уводзьце слова, перасоўваючы палец па літарах"</string>
-    <string name="gesture_preview_trail" msgid="3802333369335722221">"Паказаць след жэста"</string>
-    <string name="gesture_floating_preview_text" msgid="4443240334739381053">"Дынамічны плаваючы прагляд"</string>
-    <string name="gesture_floating_preview_text_summary" msgid="4472696213996203533">"Праглядаць прапанаванае слова падчас жэсту"</string>
-    <string name="added_word" msgid="8993883354622484372">"<xliff:g id="WORD">%s</xliff:g> : Захаваныя"</string>
-    <string name="spoken_use_headphones" msgid="896961781287283493">"Каб праслухаць паролi, падключыце гарнiтуру."</string>
-    <string name="spoken_current_text_is" msgid="2485723011272583845">"Бягучы тэкст %s"</string>
-    <string name="spoken_no_text_entered" msgid="7479685225597344496">"Тэкст не ўведзены"</string>
-    <!-- no translation found for spoken_auto_correct (8005997889020109763) -->
-    <skip />
-    <!-- no translation found for spoken_auto_correct_obscured (6276420476908833791) -->
-    <skip />
-    <string name="spoken_description_unknown" msgid="3197434010402179157">"Клавішны код %d"</string>
-    <string name="spoken_description_shift" msgid="244197883292549308">"Зрух"</string>
-    <string name="spoken_description_shift_shifted" msgid="1681877323344195035">"Shift уключаны (націснiце, каб адключыць)"</string>
-    <string name="spoken_description_caps_lock" msgid="3276478269526304432">"Caps Lock уключаны (націснiце, каб адключыць)"</string>
-    <string name="spoken_description_delete" msgid="8740376944276199801">"Выдаліць"</string>
-    <string name="spoken_description_to_symbol" msgid="5486340107500448969">"Сімвалы"</string>
-    <string name="spoken_description_to_alpha" msgid="23129338819771807">"Літары"</string>
-    <string name="spoken_description_to_numeric" msgid="591752092685161732">"Лічбы"</string>
-    <string name="spoken_description_settings" msgid="4627462689603838099">"Налады"</string>
-    <string name="spoken_description_tab" msgid="2667716002663482248">"Укладка"</string>
-    <string name="spoken_description_space" msgid="2582521050049860859">"Прабел"</string>
-    <string name="spoken_description_mic" msgid="615536748882611950">"Галасавы ўвод"</string>
-    <string name="spoken_description_smiley" msgid="2256309826200113918">"Смайлік"</string>
-    <string name="spoken_description_return" msgid="8178083177238315647">"Увод"</string>
-    <string name="spoken_description_search" msgid="1247236163755920808">"Пошук"</string>
-    <string name="spoken_description_dot" msgid="40711082435231673">"Кропка"</string>
-    <string name="spoken_description_language_switch" msgid="5507091328222331316">"Пераключыць мову"</string>
-    <string name="spoken_description_action_next" msgid="8636078276664150324">"Далей"</string>
-    <string name="spoken_description_action_previous" msgid="800872415009336208">"Назад"</string>
-    <string name="spoken_description_shiftmode_on" msgid="5700440798609574589">"Shift уключаны"</string>
-    <string name="spoken_description_shiftmode_locked" msgid="593175803181701830">"Caps Lock уключаны"</string>
-    <string name="spoken_description_shiftmode_off" msgid="657219998449174808">"Shift адключаны"</string>
-    <string name="spoken_description_mode_symbol" msgid="7183343879909747642">"Рэжым знакаў"</string>
-    <string name="spoken_description_mode_alpha" msgid="3528307674390156956">"Рэжым лiтар"</string>
-    <string name="spoken_description_mode_phone" msgid="6520207943132026264">"Рэжым тэлефона"</string>
-    <string name="spoken_description_mode_phone_shift" msgid="5499629753962641227">"Рэжым тэлефонных знакаў"</string>
-    <string name="announce_keyboard_hidden" msgid="8718927835531429807">"Клавіятура схавана"</string>
-    <string name="announce_keyboard_mode" msgid="4729081055438508321">"Паказана клавiятура ў рэжыме \" <xliff:g id="MODE">%s</xliff:g>\""</string>
-    <string name="keyboard_mode_date" msgid="3137520166817128102">"дата"</string>
-    <string name="keyboard_mode_date_time" msgid="339593358488851072">"дата i час"</string>
-    <string name="keyboard_mode_email" msgid="6216248078128294262">"электронная пошта"</string>
-    <string name="keyboard_mode_im" msgid="1137405089766557048">"абмен паведамленнямі"</string>
-    <string name="keyboard_mode_number" msgid="7991623440699957069">"нумар"</string>
-    <string name="keyboard_mode_phone" msgid="6851627527401433229">"тэлефон"</string>
-    <string name="keyboard_mode_text" msgid="6479436687899701619">"тэкст"</string>
-    <string name="keyboard_mode_time" msgid="4381856885582143277">"час"</string>
-    <string name="keyboard_mode_url" msgid="1519819835514911218">"URL"</string>
-    <string name="voice_input" msgid="3583258583521397548">"Ключ галасавога ўводу"</string>
-    <string name="configure_input_method" msgid="373356270290742459">"Налада метадаў уводу"</string>
-    <string name="language_selection_title" msgid="1651299598555326750">"Мовы ўводу"</string>
-    <string name="send_feedback" msgid="1780431884109392046">"Адправіць водгук"</string>
-    <string name="select_language" msgid="3693815588777926848">"Мовы ўводу"</string>
-    <string name="hint_add_to_dictionary" msgid="573678656946085380">"Дакраніцеся зноў, каб захаваць"</string>
-    <string name="has_dictionary" msgid="6071847973466625007">"Слоўнік даступны"</string>
-    <string name="prefs_enable_log" msgid="6620424505072963557">"Уключыць зваротную сувязь з карыстальнікамі"</string>
-    <string name="prefs_description_log" msgid="7525225584555429211">"Дапамажыце палепшыць гэты рэдактар ​​метаду ўводу, аўтаматычна адпраўляючы статыстыку выкарыстання і справаздачы аб збоях Google."</string>
-    <string name="keyboard_layout" msgid="8451164783510487501">"Тэма клавіятуры"</string>
-    <string name="subtype_en_GB" msgid="88170601942311355">"Англійская (ЗК)"</string>
-    <string name="subtype_en_US" msgid="6160452336634534239">"Англійская (ЗША)"</string>
-    <string name="subtype_es_US" msgid="5583145191430180200">"iспанская (ЗША)"</string>
-    <string name="subtype_with_layout_en_GB" msgid="2179097748724725906">"Англійская (Вялікабрытанія) (<xliff:g id="LAYOUT">%s</xliff:g>)"</string>
-    <string name="subtype_with_layout_en_US" msgid="1362581347576714579">"Англійская (ЗША) (<xliff:g id="LAYOUT">%s</xliff:g>)"</string>
-    <string name="subtype_with_layout_es_US" msgid="6261791057007890189">"iспанская (ЗША) ( <xliff:g id="LAYOUT">%s</xliff:g> )"</string>
-    <!-- no translation found for subtype_nepali_traditional (9032247506728040447) -->
-    <skip />
-    <!-- no translation found for subtype_no_language (7137390094240139495) -->
-    <skip />
-    <!-- no translation found for subtype_no_language_qwerty (244337630616742604) -->
-    <skip />
-    <!-- no translation found for subtype_no_language_qwertz (443066912507547976) -->
-    <skip />
-    <!-- no translation found for subtype_no_language_azerty (8144348527575640087) -->
-    <skip />
-    <!-- no translation found for subtype_no_language_dvorak (1564494667584718094) -->
-    <skip />
-    <!-- no translation found for subtype_no_language_colemak (5837418400010302623) -->
-    <skip />
-    <!-- no translation found for subtype_no_language_pcqwerty (5354918232046200018) -->
-    <skip />
-    <!-- no translation found for subtype_emoji (7483586578074549196) -->
-    <skip />
-    <string name="custom_input_styles_title" msgid="8429952441821251512">"Карыстальніцкія стылі ўводу"</string>
-    <string name="add_style" msgid="6163126614514489951">"Дадаць стыль"</string>
-    <string name="add" msgid="8299699805688017798">"Дадаць"</string>
-    <string name="remove" msgid="4486081658752944606">"Выдаліць"</string>
-    <string name="save" msgid="7646738597196767214">"Захаваць"</string>
-    <string name="subtype_locale" msgid="8576443440738143764">"Мова"</string>
-    <string name="keyboard_layout_set" msgid="4309233698194565609">"Раскладка"</string>
-    <string name="custom_input_style_note_message" msgid="8826731320846363423">"Карыстальніцкі метад уводу павінен быць уключаны, перш чым пачаць выкарыстоўваць яго. Жадаеце ўключыць яго зараз?"</string>
-    <string name="enable" msgid="5031294444630523247">"Уключыць"</string>
-    <string name="not_now" msgid="6172462888202790482">"Не цяпер"</string>
-    <string name="custom_input_style_already_exists" msgid="8008728952215449707">"Такі метад уводу ўжо існуе: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
-    <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Рэжым даследвання выкарыстальнасці"</string>
-    <string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Затрымка доўгага націску клавішы"</string>
-    <string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Працягласць вібрацыі пры націску клавіш"</string>
-    <string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Гучнасць гуку пры націску клавіш"</string>
-    <string name="prefs_read_external_dictionary" msgid="2588931418575013067">"Чытанне знешняга файла слоўніка"</string>
-    <string name="read_external_dictionary_no_files_message" msgid="4947420942224623792">"У папцы загрузак няма файлаў слоўніка"</string>
-    <string name="read_external_dictionary_multiple_files_title" msgid="7637749044265808628">"Вылучыце файл слоўніка для ўсталёўкі"</string>
-    <string name="read_external_dictionary_confirm_install_message" msgid="6898610163768980870">"Сапраўды ўсталяваць гэты файл на мове: <xliff:g id="LOCALE_NAME">%s</xliff:g>?"</string>
-    <string name="error" msgid="8940763624668513648">"Была памылка"</string>
-    <string name="button_default" msgid="3988017840431881491">"Па змаўчанні"</string>
-    <string name="setup_welcome_title" msgid="6112821709832031715">"Вітаем у прыкладанні <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
-    <string name="setup_welcome_additional_description" msgid="8150252008545768953">"з уводам жэстамі"</string>
-    <string name="setup_start_action" msgid="8936036460897347708">"Пачаць"</string>
-    <string name="setup_next_action" msgid="371821437915144603">"Далей"</string>
-    <string name="setup_steps_title" msgid="6400373034871816182">"Наладка прыкладання <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
-    <string name="setup_step1_title" msgid="3147967630253462315">"Уключыць прыкладанне <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
-    <string name="setup_step1_instruction" msgid="2578631936624637241">"Праверце прыкладанне \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" на сваёй мове і параметры ўводу. Гэта дасць магчымасць дазволіць яму працаваць на вашай прыладзе."</string>
-    <string name="setup_step1_finished_instruction" msgid="10761482004957994">"Прыкладанне <xliff:g id="APPLICATION_NAME">%s</xliff:g> ужо ўключана для вашай мовы і параметраў уводу, так што гэты крок зроблены. Пераходзім да наступнага!"</string>
-    <string name="setup_step1_action" msgid="4366513534999901728">"Уключыць у наладах"</string>
-    <string name="setup_step2_title" msgid="6860725447906690594">"Пераключыцца на прыкладанне <xliff:g id="APPLICATION_NAME">%s</xliff:g>."</string>
-    <string name="setup_step2_instruction" msgid="9141481964870023336">"Выберыце \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" як актыўны метад уводу тэксту."</string>
-    <string name="setup_step2_action" msgid="1660330307159824337">"Пераключэнне метадаў уводу"</string>
-    <string name="setup_step3_title" msgid="3154757183631490281">"Усё гатова!"</string>
-    <string name="setup_step3_instruction" msgid="8025981829605426000">"Цяпер вы можаце ўводзіць ўсе свае любімыя прыкладанні з iмем <xliff:g id="APPLICATION_NAME">%s</xliff:g>."</string>
-    <string name="setup_step3_action" msgid="600879797256942259">"Наладка дадатковых моў"</string>
-    <string name="setup_finish_action" msgid="276559243409465389">"Гатова"</string>
-    <string name="show_setup_wizard_icon" msgid="5008028590593710830">"Паказаць значок прыкладання"</string>
-    <string name="show_setup_wizard_icon_summary" msgid="4119998322536880213">"Паказаць значок прыкладання ў панэлi запуску"</string>
-    <string name="app_name" msgid="6320102637491234792">"Пастаўшчык слоўніка"</string>
-    <string name="dictionary_provider_name" msgid="3027315045397363079">"Пастаўшчык слоўніка"</string>
-    <string name="dictionary_service_name" msgid="6237472350693511448">"Слоўнік"</string>
-    <string name="download_description" msgid="6014835283119198591">"Інфармацыя абнаўлення слоўніка"</string>
-    <string name="dictionary_settings_title" msgid="8091417676045693313">"Дадатковыя слоўнікі"</string>
-    <string name="dictionary_install_over_metered_network_prompt" msgid="3587517870006332980">"Даступны слоўнік"</string>
-    <string name="dictionary_settings_summary" msgid="5305694987799824349">"Налады для слоўнікаў"</string>
-    <string name="user_dictionaries" msgid="3582332055892252845">"Карыстальніцкія слоўнікі"</string>
-    <string name="default_user_dict_pref_name" msgid="1625055720489280530">"Карыстацкі слоўнік"</string>
-    <string name="dictionary_available" msgid="4728975345815214218">"Даступны слоўнік"</string>
-    <string name="dictionary_downloading" msgid="2982650524622620983">"Спампоўваецца зараз"</string>
-    <string name="dictionary_installed" msgid="8081558343559342962">"Усталявана"</string>
-    <string name="dictionary_disabled" msgid="8950383219564621762">"Усталявана, адключана"</string>
-    <string name="cannot_connect_to_dict_service" msgid="9216933695765732398">"Праблема падключэння да слоўніка"</string>
-    <string name="no_dictionaries_available" msgid="8039920716566132611">"Слоўнікаў няма"</string>
-    <string name="check_for_updates_now" msgid="8087688440916388581">"Абнавіць"</string>
-    <string name="last_update" msgid="730467549913588780">"Апошняе абнаўленне"</string>
-    <string name="message_updating" msgid="4457761393932375219">"Праверка наяўнасці абнаўленняў"</string>
-    <string name="message_loading" msgid="8689096636874758814">"Загрузка..."</string>
-    <string name="main_dict_description" msgid="3072821352793492143">"Асноўны слоўнік"</string>
-    <string name="cancel" msgid="6830980399865683324">"Адмяніць"</string>
-    <string name="install_dict" msgid="180852772562189365">"Усталяваць"</string>
-    <string name="cancel_download_dict" msgid="7843340278507019303">"Адмена"</string>
-    <string name="delete_dict" msgid="756853268088330054">"Выдаліць"</string>
-    <string name="should_download_over_metered_prompt" msgid="2878629598667658845">"Для выбранай мовы на мабільнай прыладзе ёсць слоўнік.&lt;br/&gt; Мы рэкамендуем &lt;b&gt;спампаваць&lt;/b&gt; слоўнік для мовы \"<xliff:g id="LANGUAGE">%1$s</xliff:g>\" для паляпшэння зручнасці набору.&lt;br/&gt; &lt;br/&gt; Спампоўка можа заняць хвіліну або дзве ў 3G-сетках. Калі ў вас няма &lt;b&gt;безлімітнага тарыфнага плану перадачы дадзеных&lt;/b&gt;, могуць прымяняцца дадатковыя плацяжы&lt;br/&gt;. Калі вы не ведаеце дакладна, які ў вас тарыфны план, мы рэкамендуем знайсці падлучэнне да сеткі Wi-Fi, каб пачаць аўтаматычную спампоўку.&lt;br/&gt; &lt;br/&gt; Парада: можна спампоўваць і выдаляць слоўнікі, перайшоўшы ў раздзел &lt;b&gt;Мова і ўвод&lt;/b&gt; у меню &lt;b&gt;Налады&lt;/b&gt; вашай мабільнай прылады."</string>
-    <string name="download_over_metered" msgid="1643065851159409546">"Спампаваць зараз (<xliff:g id="SIZE_IN_MEGABYTES">%1$.1f</xliff:g>МБ)"</string>
-    <string name="do_not_download_over_metered" msgid="2176209579313941583">"Спампаваць праз Wi-Fi"</string>
-    <string name="dict_available_notification_title" msgid="6514288591959117288">"Слоўнік для мовы \"<xliff:g id="LANGUAGE">%1$s</xliff:g>\""</string>
-    <string name="dict_available_notification_description" msgid="1075194169443163487">"Нацiснiце, каб прагледзець i спампаваць"</string>
-    <string name="toast_downloading_suggestions" msgid="1313027353588566660">"Загрузка: прапановы для мовы \"<xliff:g id="LANGUAGE">%1$s</xliff:g>\" хутка з\'явяцца."</string>
-    <string name="version_text" msgid="2715354215568469385">"Версія <xliff:g id="VERSION_NUMBER">%1$s</xliff:g>"</string>
-    <string name="user_dict_settings_add_menu_title" msgid="1254195365689387076">"Дадаць"</string>
-    <string name="user_dict_settings_add_dialog_title" msgid="4096700390211748168">"Дадаць у слоўнік"</string>
-    <string name="user_dict_settings_add_screen_title" msgid="5818914331629278758">"Выраз"</string>
-    <string name="user_dict_settings_add_dialog_more_options" msgid="5671682004887093112">"Дадатковыя параметры"</string>
-    <string name="user_dict_settings_add_dialog_less_options" msgid="2716586567241724126">"Асн. параметры"</string>
-    <string name="user_dict_settings_add_dialog_confirm" msgid="4703129507388332950">"OК"</string>
-    <string name="user_dict_settings_add_word_option_name" msgid="6665558053408962865">"Слова:"</string>
-    <string name="user_dict_settings_add_shortcut_option_name" msgid="3094731590655523777">"Шлях хуткага доступу:"</string>
-    <string name="user_dict_settings_add_locale_option_name" msgid="4738643440987277705">"Мова:"</string>
-    <string name="user_dict_settings_add_word_hint" msgid="4902434148985906707">"Увядзіце слова"</string>
-    <string name="user_dict_settings_add_shortcut_hint" msgid="2265453012555060178">"Дадатковы цэтлiк"</string>
-    <string name="user_dict_settings_edit_dialog_title" msgid="3765774633869590352">"Рэдагаваць слова"</string>
-    <string name="user_dict_settings_context_menu_edit_title" msgid="6812255903472456302">"Рэдагаваць"</string>
-    <string name="user_dict_settings_context_menu_delete_title" msgid="8142932447689461181">"Выдаліць"</string>
-    <string name="user_dict_settings_empty_text" msgid="558499587532668203">"У вашым карыстальніцкім слоўніку няма ніводнага слова. Вы можаце дадаваць словы, дакранаючыся да кнопкі \"+\" у пункце меню \"Дадаць\"."</string>
-    <string name="user_dict_settings_all_languages" msgid="8276126583216298886">"Для ўсіх моў"</string>
-    <string name="user_dict_settings_more_languages" msgid="7131268499685180461">"Іншыя мовы..."</string>
-    <string name="user_dict_settings_delete" msgid="110413335187193859">"Выдаліць"</string>
-    <string name="user_dict_fast_scroll_alphabet" msgid="5431919401558285473">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
-</resources>
diff --git a/java/res/xml/method.xml b/java/res/xml/method.xml
index 26ceb89..78e771f 100644
--- a/java/res/xml/method.xml
+++ b/java/res/xml/method.xml
@@ -25,7 +25,7 @@
     af: Afrikaans/qwerty
     ar: Arabic/arabic
     (az: Azerbaijani/qwerty)  # disabled temporarily. waiting for string resources.
-    be: Belarusian/east_slavic
+    be_BY: Belarusian/east_slavic
     bg: Bulgarian/bulgarian
     bg: Bulgarian/bulgarian_bds
     ca: Catalan/spanish
@@ -144,7 +144,7 @@
     <subtype android:icon="@drawable/ic_ime_switcher_dark"
             android:label="@string/subtype_generic"
             android:subtypeId="0x1dc3a859"
-            android:imeSubtypeLocale="be"
+            android:imeSubtypeLocale="be_BY"
             android:imeSubtypeMode="keyboard"
             android:imeSubtypeExtraValue="KeyboardLayoutSet=east_slavic,EmojiCapable"
             android:isAsciiCapable="false"
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsSet.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsSet.java
index 39d2689..f1b5bc1 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsSet.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsSet.java
@@ -680,8 +680,8 @@
         /* 15 */ "\u011F",
     };
 
-    /* Language be: Belarusian */
-    private static final String[] LANGUAGE_be = {
+    /* Language be_BY: Belarusian (Belarus) */
+    private static final String[] LANGUAGE_be_BY = {
         /* 0~ */
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
         null, null, null, null, null, null, null, null, null, null,
@@ -1297,8 +1297,8 @@
         /* 125 */ "\u00F1",
     };
 
-    /* Language et: Estonian */
-    private static final String[] LANGUAGE_et = {
+    /* Language et_EE: Estonian (Estonia) */
+    private static final String[] LANGUAGE_et_EE = {
         // U+00E4: "ä" LATIN SMALL LETTER A WITH DIAERESIS
         // U+0101: "ā" LATIN SMALL LETTER A WITH MACRON
         // U+00E0: "à" LATIN SMALL LETTER A WITH GRAVE
@@ -1803,8 +1803,8 @@
         /* 55 */ "!text/double_raqm_laqm",
     };
 
-    /* Language hy: Armenian */
-    private static final String[] LANGUAGE_hy = {
+    /* Language hy_AM: Armenian (Armenia) */
+    private static final String[] LANGUAGE_hy_AM = {
         /* 0~ */
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
@@ -2015,8 +2015,8 @@
         /* 67 */ "!fixedColumnOrder!3,\u203A|\u2039,\u2265|\u2264,\u00BB|\u00AB",
     };
 
-    /* Language ka: Georgian */
-    private static final String[] LANGUAGE_ka = {
+    /* Language ka_GE: Georgian (Georgia) */
+    private static final String[] LANGUAGE_ka_GE = {
         /* 0~ */
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
@@ -2082,8 +2082,8 @@
         /* 51 */ "\u0410\u0411\u0412",
     };
 
-    /* Language km: Khmer */
-    private static final String[] LANGUAGE_km = {
+    /* Language km_KH: Khmer (Cambodia) */
+    private static final String[] LANGUAGE_km_KH = {
         /* 0~ */
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
@@ -2145,8 +2145,8 @@
         /* 51 */ "\u0410\u0411\u0412",
     };
 
-    /* Language lo: Lao */
-    private static final String[] LANGUAGE_lo = {
+    /* Language lo_LA: Lao (Laos) */
+    private static final String[] LANGUAGE_lo_LA = {
         /* 0~ */
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
@@ -2389,8 +2389,8 @@
         /* 53 */ "!text/double_9qm_lqm",
     };
 
-    /* Language mn: Mongolian */
-    private static final String[] LANGUAGE_mn = {
+    /* Language mn_MN: Mongolian (Mongolia) */
+    private static final String[] LANGUAGE_mn_MN = {
         /* 0~ */
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
         null, null, null, null, null, null, null, null, null, null, null, null, null, null, null,
@@ -3521,12 +3521,14 @@
         /* 19 */ "\u0175",
     };
 
+    // 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", LANGUAGE_az, /* Azerbaijani */
-        "be", LANGUAGE_be, /* Belarusian */
+        "be" /* "be_BY" */, LANGUAGE_be_BY, /* Belarusian (Belarus) */
         "bg", LANGUAGE_bg, /* Bulgarian */
         "ca", LANGUAGE_ca, /* Catalan */
         "cs", LANGUAGE_cs, /* Czech */
@@ -3536,26 +3538,26 @@
         "en", LANGUAGE_en, /* English */
         "eo", LANGUAGE_eo, /* Esperanto */
         "es", LANGUAGE_es, /* Spanish */
-        "et", LANGUAGE_et, /* Estonian */
+        "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", LANGUAGE_hy, /* Armenian */
+        "hy" /* "hy_AM" */, LANGUAGE_hy_AM, /* Armenian (Armenia) */
         "is", LANGUAGE_is, /* Icelandic */
         "it", LANGUAGE_it, /* Italian */
         "iw", LANGUAGE_iw, /* Hebrew */
-        "ka", LANGUAGE_ka, /* Georgian */
+        "ka" /* "ka_GE" */, LANGUAGE_ka_GE, /* Georgian (Georgia) */
         "kk", LANGUAGE_kk, /* Kazakh */
-        "km", LANGUAGE_km, /* Khmer */
+        "km" /* "km_KH" */, LANGUAGE_km_KH, /* Khmer (Cambodia) */
         "ky", LANGUAGE_ky, /* Kirghiz */
-        "lo", LANGUAGE_lo, /* Lao */
+        "lo" /* "lo_LA" */, LANGUAGE_lo_LA, /* Lao (Laos) */
         "lt", LANGUAGE_lt, /* Lithuanian */
         "lv", LANGUAGE_lv, /* Latvian */
         "mk", LANGUAGE_mk, /* Macedonian */
-        "mn", LANGUAGE_mn, /* Mongolian */
+        "mn" /* "mn_MN" */, LANGUAGE_mn_MN, /* Mongolian (Mongolia) */
         "nb", LANGUAGE_nb, /* Norwegian Bokmål */
         "ne", LANGUAGE_ne, /* Nepali */
         "nl", LANGUAGE_nl, /* Dutch */
diff --git a/java/src/com/android/inputmethod/latin/Dictionary.java b/java/src/com/android/inputmethod/latin/Dictionary.java
index d2b32cd..e0452484 100644
--- a/java/src/com/android/inputmethod/latin/Dictionary.java
+++ b/java/src/com/android/inputmethod/latin/Dictionary.java
@@ -55,7 +55,7 @@
     // User history dictionary internal to LatinIME.
     public static final String TYPE_USER_HISTORY = "history";
     // Personalization dictionary.
-    public static final String TYPE_PERSONALIZATION_PREDICTION_IN_JAVA = "personalization";
+    public static final String TYPE_PERSONALIZATION = "personalization";
     public final String mDictType;
 
     public Dictionary(final String dictType) {
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index 416e78b..6a10131 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -77,9 +77,9 @@
 import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
 import com.android.inputmethod.latin.define.ProductionFlag;
 import com.android.inputmethod.latin.personalization.DictionaryDecayBroadcastReciever;
+import com.android.inputmethod.latin.personalization.PersonalizationDictionary;
 import com.android.inputmethod.latin.personalization.PersonalizationDictionarySessionRegister;
 import com.android.inputmethod.latin.personalization.PersonalizationHelper;
-import com.android.inputmethod.latin.personalization.PersonalizationPredictionDictionary;
 import com.android.inputmethod.latin.personalization.UserHistoryDictionary;
 import com.android.inputmethod.latin.settings.Settings;
 import com.android.inputmethod.latin.settings.SettingsActivity;
@@ -181,7 +181,7 @@
     private boolean mIsMainDictionaryAvailable;
     private UserBinaryDictionary mUserDictionary;
     private UserHistoryDictionary mUserHistoryDictionary;
-    private PersonalizationPredictionDictionary mPersonalizationPredictionDictionary;
+    private PersonalizationDictionary mPersonalizationDictionary;
     private boolean mIsUserDictionaryAvailable;
 
     private LastComposedWord mLastComposedWord = LastComposedWord.NOT_A_COMPOSED_WORD;
@@ -645,9 +645,9 @@
         mUserHistoryDictionary = PersonalizationHelper.getUserHistoryDictionary(
                 this, subtypeLocale);
         newSuggest.setUserHistoryDictionary(mUserHistoryDictionary);
-        mPersonalizationPredictionDictionary =
-                PersonalizationHelper.getPersonalizationPredictionDictionary(this, subtypeLocale);
-        newSuggest.setPersonalizationPredictionDictionary(mPersonalizationPredictionDictionary);
+        mPersonalizationDictionary =
+                PersonalizationHelper.getPersonalizationDictionary(this, subtypeLocale);
+        newSuggest.setPersonalizationDictionary(mPersonalizationDictionary);
 
         final Suggest oldSuggest = mSuggest;
         resetContactsDictionary(null != oldSuggest ? oldSuggest.getContactsDictionary() : null);
diff --git a/java/src/com/android/inputmethod/latin/Suggest.java b/java/src/com/android/inputmethod/latin/Suggest.java
index 043faaf..0ecb411 100644
--- a/java/src/com/android/inputmethod/latin/Suggest.java
+++ b/java/src/com/android/inputmethod/latin/Suggest.java
@@ -24,7 +24,7 @@
 import com.android.inputmethod.annotations.UsedForTesting;
 import com.android.inputmethod.keyboard.ProximityInfo;
 import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
-import com.android.inputmethod.latin.personalization.PersonalizationPredictionDictionary;
+import com.android.inputmethod.latin.personalization.PersonalizationDictionary;
 import com.android.inputmethod.latin.personalization.UserHistoryDictionary;
 import com.android.inputmethod.latin.settings.Settings;
 import com.android.inputmethod.latin.utils.AutoCorrectionUtils;
@@ -88,7 +88,7 @@
         if (Settings.readUseOnlyPersonalizationDictionaryForDebug(
                 PreferenceManager.getDefaultSharedPreferences(context))) {
             mOnlyDictionarySetForDebug = new HashSet<String>();
-            mOnlyDictionarySetForDebug.add(Dictionary.TYPE_PERSONALIZATION_PREDICTION_IN_JAVA);
+            mOnlyDictionarySetForDebug.add(Dictionary.TYPE_PERSONALIZATION);
         }
     }
 
@@ -192,10 +192,10 @@
         addOrReplaceDictionaryInternal(Dictionary.TYPE_USER_HISTORY, userHistoryDictionary);
     }
 
-    public void setPersonalizationPredictionDictionary(
-            final PersonalizationPredictionDictionary personalizationPredictionDictionary) {
-        addOrReplaceDictionaryInternal(Dictionary.TYPE_PERSONALIZATION_PREDICTION_IN_JAVA,
-                personalizationPredictionDictionary);
+    public void setPersonalizationDictionary(
+            final PersonalizationDictionary personalizationDictionary) {
+        addOrReplaceDictionaryInternal(Dictionary.TYPE_PERSONALIZATION,
+                personalizationDictionary);
     }
 
     public void setAutoCorrectionThreshold(float threshold) {
diff --git a/java/src/com/android/inputmethod/latin/personalization/DecayingExpandableBinaryDictionaryBase.java b/java/src/com/android/inputmethod/latin/personalization/DecayingExpandableBinaryDictionaryBase.java
index faa9896..386e123 100644
--- a/java/src/com/android/inputmethod/latin/personalization/DecayingExpandableBinaryDictionaryBase.java
+++ b/java/src/com/android/inputmethod/latin/personalization/DecayingExpandableBinaryDictionaryBase.java
@@ -27,7 +27,6 @@
 import com.android.inputmethod.latin.makedict.DictDecoder;
 import com.android.inputmethod.latin.makedict.FormatSpec;
 import com.android.inputmethod.latin.makedict.UnsupportedFormatException;
-import com.android.inputmethod.latin.utils.CollectionUtils;
 import com.android.inputmethod.latin.utils.UserHistoryDictIOUtils;
 import com.android.inputmethod.latin.utils.UserHistoryDictIOUtils.OnAddWordListener;
 
@@ -61,12 +60,6 @@
 
     private final String mFileName;
 
-    private final ArrayList<PersonalizationDictionaryUpdateSession> mSessions =
-            CollectionUtils.newArrayList();
-
-    // Should always be false except when we use this class for test
-    @UsedForTesting boolean mIsTest = false;
-
     /* package */ DecayingExpandableBinaryDictionaryBase(final Context context,
             final Locale locale, final String dictionaryType, final String fileName) {
         super(context, fileName, locale, dictionaryType, true);
@@ -83,7 +76,6 @@
             dumpAllWordsForDebug();
         }
         // Flush pending writes.
-        // TODO: Remove after this class become to use a dynamic binary dictionary.
         asyncFlushBinaryDictionary();
     }
 
@@ -165,25 +157,11 @@
         }
     }
 
-    public void cancelAddingUserHistory(final String word0, final String word1) {
-        removeBigramDynamically(word0, word1);
-    }
-
     @Override
     protected void loadDictionaryAsync() {
         // Never loaded to memory in Java side.
     }
 
-    public void registerUpdateSession(PersonalizationDictionaryUpdateSession session) {
-        session.setPredictionDictionary(this);
-        mSessions.add(session);
-        session.onDictionaryReady();
-    }
-
-    public void unRegisterUpdateSession(PersonalizationDictionaryUpdateSession session) {
-        mSessions.remove(session);
-    }
-
     @UsedForTesting
     public void dumpAllWordsForDebug() {
         runAfterGcForDebug(new Runnable() {
diff --git a/java/src/com/android/inputmethod/latin/personalization/PersonalizationDictionary.java b/java/src/com/android/inputmethod/latin/personalization/PersonalizationDictionary.java
new file mode 100644
index 0000000..413a951
--- /dev/null
+++ b/java/src/com/android/inputmethod/latin/personalization/PersonalizationDictionary.java
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2013 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.
+ */
+
+package com.android.inputmethod.latin.personalization;
+
+import com.android.inputmethod.latin.Dictionary;
+import com.android.inputmethod.latin.ExpandableBinaryDictionary;
+import com.android.inputmethod.latin.utils.CollectionUtils;
+
+import java.util.ArrayList;
+import java.util.Locale;
+
+import android.content.Context;
+
+public class PersonalizationDictionary extends DecayingExpandableBinaryDictionaryBase {
+    private static final String NAME = PersonalizationDictionary.class.getSimpleName();
+
+    private final ArrayList<PersonalizationDictionaryUpdateSession> mSessions =
+            CollectionUtils.newArrayList();
+
+    /* package */ PersonalizationDictionary(final Context context, final Locale locale) {
+        super(context, locale, Dictionary.TYPE_PERSONALIZATION,
+                getDictionaryFileName(locale.toString()));
+    }
+
+    private static String getDictionaryFileName(final String locale) {
+        return NAME + "." + locale + ExpandableBinaryDictionary.DICT_FILE_EXTENSION;
+    }
+
+    public void registerUpdateSession(PersonalizationDictionaryUpdateSession session) {
+        session.setPredictionDictionary(this);
+        mSessions.add(session);
+        session.onDictionaryReady();
+    }
+
+    public void unRegisterUpdateSession(PersonalizationDictionaryUpdateSession session) {
+        mSessions.remove(session);
+    }
+}
diff --git a/java/src/com/android/inputmethod/latin/personalization/PersonalizationDictionarySessionRegister.java b/java/src/com/android/inputmethod/latin/personalization/PersonalizationDictionarySessionRegister.java
index c1833ff..542bda6 100644
--- a/java/src/com/android/inputmethod/latin/personalization/PersonalizationDictionarySessionRegister.java
+++ b/java/src/com/android/inputmethod/latin/personalization/PersonalizationDictionarySessionRegister.java
@@ -20,18 +20,18 @@
 import android.content.res.Configuration;
 
 public class PersonalizationDictionarySessionRegister {
-    public static void init(Context context) {
+    public static void init(final Context context) {
     }
 
     public static void onConfigurationChanged(final Context context, final Configuration conf) {
     }
 
-    public static void onUpdateData(Context context, String type) {
+    public static void onUpdateData(final Context context, final String type) {
     }
 
-    public static void onRemoveData(Context context, String type) {
+    public static void onRemoveData(final Context context, final String type) {
     }
 
-    public static void onDestroy(Context context) {
+    public static void onDestroy(final Context context) {
     }
 }
diff --git a/java/src/com/android/inputmethod/latin/personalization/PersonalizationDictionaryUpdateSession.java b/java/src/com/android/inputmethod/latin/personalization/PersonalizationDictionaryUpdateSession.java
index 0187a38..6135476 100644
--- a/java/src/com/android/inputmethod/latin/personalization/PersonalizationDictionaryUpdateSession.java
+++ b/java/src/com/android/inputmethod/latin/personalization/PersonalizationDictionaryUpdateSession.java
@@ -30,7 +30,7 @@
  * dictionary.
  */
 public abstract class PersonalizationDictionaryUpdateSession {
-    public WeakReference<DecayingExpandableBinaryDictionaryBase> mPredictionDictionary;
+    public WeakReference<PersonalizationDictionary> mDictionary;
     public final Locale mSystemLocale;
 
     public PersonalizationDictionaryUpdateSession(final Locale locale) {
@@ -39,43 +39,42 @@
 
     public abstract void onDictionaryReady();
 
-    public abstract void onDictionaryClosed(Context context);
+    public abstract void onDictionaryClosed(final Context context);
 
-    public void setPredictionDictionary(DecayingExpandableBinaryDictionaryBase dictionary) {
-        mPredictionDictionary =
-                new WeakReference<DecayingExpandableBinaryDictionaryBase>(dictionary);
+    public void setPredictionDictionary(final PersonalizationDictionary dictionary) {
+        mDictionary = new WeakReference<PersonalizationDictionary>(dictionary);
     }
 
-    protected DecayingExpandableBinaryDictionaryBase getPredictionDictionary() {
-        return mPredictionDictionary == null ? null : mPredictionDictionary.get();
+    protected PersonalizationDictionary getDictionary() {
+        return mDictionary == null ? null : mDictionary.get();
     }
 
-    private void unsetPredictionDictionary() {
-        final DecayingExpandableBinaryDictionaryBase dictionary = getPredictionDictionary();
+    private void unsetDictionary() {
+        final PersonalizationDictionary dictionary = getDictionary();
         if (dictionary == null) {
             return;
         }
         dictionary.unRegisterUpdateSession(this);
     }
 
-    public void clearAndFlushPredictionDictionary(Context context) {
-        final DecayingExpandableBinaryDictionaryBase dictionary = getPredictionDictionary();
+    public void clearAndFlushDictionary(final Context context) {
+        final PersonalizationDictionary dictionary = getDictionary();
         if (dictionary == null) {
             return;
         }
         dictionary.clearAndFlushDictionary();
     }
 
-    public void closeSession(Context context) {
-        unsetPredictionDictionary();
+    public void closeSession(final Context context) {
+        unsetDictionary();
         onDictionaryClosed(context);
     }
 
     // TODO: Support multi locale.
-    public void addMultipleDictionaryEntriesToPersonalizationDictionary(
+    public void addMultipleDictionaryEntriesToDictionary(
             final ArrayList<LanguageModelParam> languageModelParams,
             final ExpandableBinaryDictionary.AddMultipleDictionaryEntriesCallback callback) {
-        final DecayingExpandableBinaryDictionaryBase dictionary = getPredictionDictionary();
+        final PersonalizationDictionary dictionary = getDictionary();
         if (dictionary == null) {
             if (callback != null) {
                 callback.onFinished();
diff --git a/java/src/com/android/inputmethod/latin/personalization/PersonalizationHelper.java b/java/src/com/android/inputmethod/latin/personalization/PersonalizationHelper.java
index 56a8574..d55cae1 100644
--- a/java/src/com/android/inputmethod/latin/personalization/PersonalizationHelper.java
+++ b/java/src/com/android/inputmethod/latin/personalization/PersonalizationHelper.java
@@ -30,11 +30,8 @@
     private static final boolean DEBUG = false;
     private static final ConcurrentHashMap<String, SoftReference<UserHistoryDictionary>>
             sLangUserHistoryDictCache = CollectionUtils.newConcurrentHashMap();
-
-    private static final ConcurrentHashMap<String,
-            SoftReference<PersonalizationPredictionDictionary>>
-                    sLangPersonalizationPredictionDictCache =
-                            CollectionUtils.newConcurrentHashMap();
+    private static final ConcurrentHashMap<String, SoftReference<PersonalizationDictionary>>
+            sLangPersonalizationDictCache = CollectionUtils.newConcurrentHashMap();
 
     public static UserHistoryDictionary getUserHistoryDictionary(
             final Context context, final Locale locale) {
@@ -72,31 +69,30 @@
     }
 
     public static void registerPersonalizationDictionaryUpdateSession(final Context context,
-            final PersonalizationDictionaryUpdateSession session, Locale locale) {
-        final PersonalizationPredictionDictionary predictionDictionary =
-                getPersonalizationPredictionDictionary(context, locale);
-        predictionDictionary.registerUpdateSession(session);
+            final PersonalizationDictionaryUpdateSession session, final Locale locale) {
+        final PersonalizationDictionary personalizationDictionary =
+                getPersonalizationDictionary(context, locale);
+        personalizationDictionary.registerUpdateSession(session);
     }
 
-    public static PersonalizationPredictionDictionary getPersonalizationPredictionDictionary(
+    public static PersonalizationDictionary getPersonalizationDictionary(
             final Context context, final Locale locale) {
         final String localeStr = locale.toString();
-        synchronized (sLangPersonalizationPredictionDictCache) {
-            if (sLangPersonalizationPredictionDictCache.containsKey(localeStr)) {
-                final SoftReference<PersonalizationPredictionDictionary> ref =
-                        sLangPersonalizationPredictionDictCache.get(localeStr);
-                final PersonalizationPredictionDictionary dict = ref == null ? null : ref.get();
+        synchronized (sLangPersonalizationDictCache) {
+            if (sLangPersonalizationDictCache.containsKey(localeStr)) {
+                final SoftReference<PersonalizationDictionary> ref =
+                        sLangPersonalizationDictCache.get(localeStr);
+                final PersonalizationDictionary dict = ref == null ? null : ref.get();
                 if (dict != null) {
                     if (DEBUG) {
-                        Log.w(TAG, "Use cached PersonalizationPredictionDictionary for " + locale);
+                        Log.w(TAG, "Use cached PersonalizationDictionary for " + locale);
                     }
                     return dict;
                 }
             }
-            final PersonalizationPredictionDictionary dict =
-                    new PersonalizationPredictionDictionary(context, locale);
-            sLangPersonalizationPredictionDictCache.put(
-                    localeStr, new SoftReference<PersonalizationPredictionDictionary>(dict));
+            final PersonalizationDictionary dict = new PersonalizationDictionary(context, locale);
+            sLangPersonalizationDictCache.put(
+                    localeStr, new SoftReference<PersonalizationDictionary>(dict));
             return dict;
         }
     }
diff --git a/java/src/com/android/inputmethod/latin/personalization/PersonalizationPredictionDictionary.java b/java/src/com/android/inputmethod/latin/personalization/PersonalizationPredictionDictionary.java
deleted file mode 100644
index 6e0f253..0000000
--- a/java/src/com/android/inputmethod/latin/personalization/PersonalizationPredictionDictionary.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2013 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.
- */
-
-package com.android.inputmethod.latin.personalization;
-
-import com.android.inputmethod.latin.Dictionary;
-import com.android.inputmethod.latin.ExpandableBinaryDictionary;
-
-import java.util.Locale;
-
-import android.content.Context;
-
-// TODO: Rename to PersonalizationDictionary.
-public class PersonalizationPredictionDictionary extends DecayingExpandableBinaryDictionaryBase {
-    private static final String NAME = PersonalizationPredictionDictionary.class.getSimpleName();
-
-    /* package */ PersonalizationPredictionDictionary(final Context context, final Locale locale) {
-        super(context, locale, Dictionary.TYPE_PERSONALIZATION_PREDICTION_IN_JAVA,
-                getDictionaryFileName(locale.toString()));
-    }
-
-    private static String getDictionaryFileName(final String locale) {
-        return NAME + "." + locale + ExpandableBinaryDictionary.DICT_FILE_EXTENSION;
-    }
-}
diff --git a/java/src/com/android/inputmethod/latin/personalization/UserHistoryDictionary.java b/java/src/com/android/inputmethod/latin/personalization/UserHistoryDictionary.java
index 60370d8..975224f 100644
--- a/java/src/com/android/inputmethod/latin/personalization/UserHistoryDictionary.java
+++ b/java/src/com/android/inputmethod/latin/personalization/UserHistoryDictionary.java
@@ -38,4 +38,8 @@
     private static String getDictionaryFileName(final String locale) {
         return NAME + "." + locale + ExpandableBinaryDictionary.DICT_FILE_EXTENSION;
     }
+
+    public void cancelAddingUserHistory(final String word0, final String word1) {
+        removeBigramDynamically(word0, word1);
+    }
 }
diff --git a/java/src/com/android/inputmethod/latin/utils/LocaleUtils.java b/java/src/com/android/inputmethod/latin/utils/LocaleUtils.java
index b4ff849..0c55484 100644
--- a/java/src/com/android/inputmethod/latin/utils/LocaleUtils.java
+++ b/java/src/com/android/inputmethod/latin/utils/LocaleUtils.java
@@ -165,12 +165,14 @@
      * Creates a locale from a string specification.
      */
     public static Locale constructLocaleFromString(final String localeStr) {
-        if (localeStr == null)
+        if (localeStr == null) {
             return null;
+        }
         synchronized (sLocaleCache) {
-            if (sLocaleCache.containsKey(localeStr))
-                return sLocaleCache.get(localeStr);
-            Locale retval = null;
+            Locale retval = sLocaleCache.get(localeStr);
+            if (retval != null) {
+                return retval;
+            }
             String[] localeParams = localeStr.split("_", 3);
             if (localeParams.length == 1) {
                 retval = new Locale(localeParams[0]);
diff --git a/tools/make-keyboard-text/res/com/android/inputmethod/keyboard/internal/KeyboardTextsSet.tmpl b/tools/make-keyboard-text/res/com/android/inputmethod/keyboard/internal/KeyboardTextsSet.tmpl
index 072daa4..a8ac981 100644
--- a/tools/make-keyboard-text/res/com/android/inputmethod/keyboard/internal/KeyboardTextsSet.tmpl
+++ b/tools/make-keyboard-text/res/com/android/inputmethod/keyboard/internal/KeyboardTextsSet.tmpl
@@ -113,6 +113,8 @@
     };
 
     /* @TEXTS@ */
+    // 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 = {
         /* @LANGUAGES_AND_TEXTS@ */
     };
diff --git a/tools/make-keyboard-text/res/values-be/donottranslate-more-keys.xml b/tools/make-keyboard-text/res/values-be-rBY/donottranslate-more-keys.xml
similarity index 100%
rename from tools/make-keyboard-text/res/values-be/donottranslate-more-keys.xml
rename to tools/make-keyboard-text/res/values-be-rBY/donottranslate-more-keys.xml
diff --git a/tools/make-keyboard-text/res/values-et/donottranslate-more-keys.xml b/tools/make-keyboard-text/res/values-et-rEE/donottranslate-more-keys.xml
similarity index 100%
rename from tools/make-keyboard-text/res/values-et/donottranslate-more-keys.xml
rename to tools/make-keyboard-text/res/values-et-rEE/donottranslate-more-keys.xml
diff --git a/tools/make-keyboard-text/res/values-hy/donottranslate-more-keys.xml b/tools/make-keyboard-text/res/values-hy-rAM/donottranslate-more-keys.xml
similarity index 100%
rename from tools/make-keyboard-text/res/values-hy/donottranslate-more-keys.xml
rename to tools/make-keyboard-text/res/values-hy-rAM/donottranslate-more-keys.xml
diff --git a/tools/make-keyboard-text/res/values-ka/donottranslate-more-keys.xml b/tools/make-keyboard-text/res/values-ka-rGE/donottranslate-more-keys.xml
similarity index 100%
rename from tools/make-keyboard-text/res/values-ka/donottranslate-more-keys.xml
rename to tools/make-keyboard-text/res/values-ka-rGE/donottranslate-more-keys.xml
diff --git a/tools/make-keyboard-text/res/values-km/donottranslate-more-keys.xml b/tools/make-keyboard-text/res/values-km-rKH/donottranslate-more-keys.xml
similarity index 100%
rename from tools/make-keyboard-text/res/values-km/donottranslate-more-keys.xml
rename to tools/make-keyboard-text/res/values-km-rKH/donottranslate-more-keys.xml
diff --git a/tools/make-keyboard-text/res/values-lo/donottranslate-more-keys.xml b/tools/make-keyboard-text/res/values-lo-rLA/donottranslate-more-keys.xml
similarity index 100%
rename from tools/make-keyboard-text/res/values-lo/donottranslate-more-keys.xml
rename to tools/make-keyboard-text/res/values-lo-rLA/donottranslate-more-keys.xml
diff --git a/tools/make-keyboard-text/res/values-mn/donottranslate-more-keys.xml b/tools/make-keyboard-text/res/values-mn-rMN/donottranslate-more-keys.xml
similarity index 100%
rename from tools/make-keyboard-text/res/values-mn/donottranslate-more-keys.xml
rename to tools/make-keyboard-text/res/values-mn-rMN/donottranslate-more-keys.xml
diff --git a/tools/make-keyboard-text/src/com/android/inputmethod/keyboard/tools/LocaleUtils.java b/tools/make-keyboard-text/src/com/android/inputmethod/keyboard/tools/LocaleUtils.java
new file mode 100644
index 0000000..9fdc1f6
--- /dev/null
+++ b/tools/make-keyboard-text/src/com/android/inputmethod/keyboard/tools/LocaleUtils.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2013 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.
+ */
+
+package com.android.inputmethod.keyboard.tools;
+
+import java.util.HashMap;
+import java.util.Locale;
+
+/**
+ * A class to help with handling Locales in string form.
+ *
+ * This is a subset of com/android/inputmethod/latin/utils/LocaleUtils.java in order to use
+ * for the make-keyboard-text tool.
+ */
+public final class LocaleUtils {
+    private LocaleUtils() {
+        // Intentional empty constructor for utility class.
+    }
+
+    private static final HashMap<String, Locale> sLocaleCache = new HashMap<String, Locale>();
+
+    /**
+     * Creates a locale from a string specification.
+     */
+    public static Locale constructLocaleFromString(final String localeStr) {
+        if (localeStr == null) {
+            return null;
+        }
+        synchronized (sLocaleCache) {
+            Locale retval = sLocaleCache.get(localeStr);
+            if (retval != null) {
+                return retval;
+            }
+            String[] localeParams = localeStr.split("_", 3);
+            if (localeParams.length == 1) {
+                retval = new Locale(localeParams[0]);
+            } else if (localeParams.length == 2) {
+                retval = new Locale(localeParams[0], localeParams[1]);
+            } else if (localeParams.length == 3) {
+                retval = new Locale(localeParams[0], localeParams[1], localeParams[2]);
+            }
+            if (retval != null) {
+                sLocaleCache.put(localeStr, retval);
+            }
+            return retval;
+        }
+    }
+}
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 2643e01..a883830 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
@@ -37,7 +37,7 @@
     private static final String MARK_DEFAULT_TEXTS = "@DEFAULT_TEXTS@";
     private static final String MARK_TEXTS = "@TEXTS@";
     private static final String MARK_LANGUAGES_AND_TEXTS = "@LANGUAGES_AND_TEXTS@";
-    private static final String DEFAUT_LANGUAGE_NAME = "DEFAULT";
+    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";
 
@@ -72,7 +72,7 @@
         final int languagePos = dirName.indexOf('-');
         if (languagePos < 0) {
             // Default resource.
-            return DEFAUT_LANGUAGE_NAME;
+            return DEFAULT_LANGUAGE_NAME;
         }
         final String language = dirName.substring(languagePos + 1);
         final int countryPos = language.indexOf("-r");
@@ -84,10 +84,12 @@
 
     public void writeToJava(final String outDir) {
         final ArrayList<String> list = JarUtils.getNameListing(mJar, JAVA_TEMPLATE);
-        if (list.isEmpty())
+        if (list.isEmpty()) {
             throw new RuntimeException("Can't find java template " + JAVA_TEMPLATE);
-        if (list.size() > 1)
+        }
+        if (list.size() > 1) {
             throw new RuntimeException("Found multiple java template " + JAVA_TEMPLATE);
+        }
         final String template = list.get(0);
         final String javaPackage = template.substring(0, template.lastIndexOf('/'));
         PrintStream ps = null;
@@ -131,7 +133,7 @@
     }
 
     private void dumpNames(final PrintStream out) {
-        final StringResourceMap defaultResMap = mResourcesMap.get(DEFAUT_LANGUAGE_NAME);
+        final StringResourceMap defaultResMap = mResourcesMap.get(DEFAULT_LANGUAGE_NAME);
         int id = 0;
         for (final StringResource res : defaultResMap.getResources()) {
             out.format("        /* %2d */ \"%s\",\n", id, res.mName);
@@ -141,17 +143,17 @@
     }
 
     private void dumpDefaultTexts(final PrintStream out) {
-        final StringResourceMap defaultResMap = mResourcesMap.get(DEFAUT_LANGUAGE_NAME);
+        final StringResourceMap defaultResMap = mResourcesMap.get(DEFAULT_LANGUAGE_NAME);
         dumpTextsInternal(out, defaultResMap, defaultResMap);
     }
 
     private void dumpTexts(final PrintStream out) {
-        final StringResourceMap defaultResMap = mResourcesMap.get(DEFAUT_LANGUAGE_NAME);
+        final StringResourceMap defaultResMap = mResourcesMap.get(DEFAULT_LANGUAGE_NAME);
         final ArrayList<String> allLanguages = new ArrayList<String>();
         allLanguages.addAll(mResourcesMap.keySet());
         Collections.sort(allLanguages);
         for (final String language : allLanguages) {
-            if (language.equals(DEFAUT_LANGUAGE_NAME)) {
+            if (language.equals(DEFAULT_LANGUAGE_NAME)) {
                 continue;
             }
             out.format("    /* Language %s: %s */\n", language, getLanguageDisplayName(language));
@@ -174,17 +176,22 @@
         allLanguages.addAll(mResourcesMap.keySet());
         Collections.sort(allLanguages);
         for (final String language : allLanguages) {
-            out.format("        \"%s\", " + ARRAY_NAME_FOR_LANGUAGE + ", /* %s */\n",
-                    language, language, getLanguageDisplayName(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));
         }
     }
 
     private static String getLanguageDisplayName(final String language) {
-        if (language.equals(NO_LANGUAGE_CODE)) {
+        final Locale locale = LocaleUtils.constructLocaleFromString(language);
+        if (locale.getLanguage().equals(NO_LANGUAGE_CODE)) {
             return NO_LANGUAGE_DISPLAY_NAME;
-        } else {
-            return new Locale(language).getDisplayLanguage();
         }
+        return locale.getDisplayName(Locale.ENGLISH);
     }
 
     private static void dumpTextsInternal(final PrintStream out, final StringResourceMap resMap,