diff options
Diffstat (limited to 'java')
-rwxr-xr-x | java/res/drawable-en-hdpi/sym_keyboard_feedback_delete.png | bin | 1278 -> 0 bytes | |||
-rw-r--r-- | java/res/drawable-hdpi/btn_keyboard_normal_metal.9.png | bin | 0 -> 7614 bytes | |||
-rw-r--r-- | java/res/drawable-hdpi/btn_keyboard_toggle_off.png | bin | 0 -> 1425 bytes | |||
-rw-r--r-- | java/res/drawable-hdpi/btn_keyboard_toggle_on.png | bin | 0 -> 1733 bytes | |||
-rw-r--r-- | java/res/drawable-hdpi/btn_led_off.9.png | bin | 0 -> 1279 bytes | |||
-rw-r--r-- | java/res/drawable-hdpi/btn_led_on.9.png | bin | 0 -> 1607 bytes | |||
-rw-r--r-- | java/res/drawable-hdpi/dialog_top_dark_bottom_medium.9.png | bin | 0 -> 49933 bytes | |||
-rwxr-xr-x | java/res/drawable-hdpi/dialog_top_dark_bottom_medium.png | bin | 1976 -> 0 bytes | |||
-rw-r--r-- | java/res/drawable-hdpi/voice_swipe_hint.png | bin | 0 -> 5965 bytes | |||
-rw-r--r-- | java/res/drawable-land-mdpi/btn_keyboard_key_normal_off.9.png | bin | 860 -> 0 bytes | |||
-rw-r--r-- | java/res/drawable-land-mdpi/btn_keyboard_key_normal_on.9.png | bin | 926 -> 0 bytes | |||
-rw-r--r-- | java/res/drawable-land-mdpi/btn_keyboard_key_pressed_off.9.png | bin | 836 -> 0 bytes | |||
-rw-r--r-- | java/res/drawable-land-mdpi/btn_keyboard_key_pressed_on.9.png | bin | 886 -> 0 bytes | |||
-rw-r--r-- | java/res/drawable-mdpi/btn_keyboard_normal_metal.9.png (renamed from java/res/drawable/btn_keyboard_normal_metal.9.png) | bin | 5069 -> 5069 bytes | |||
-rw-r--r-- | java/res/drawable-mdpi/btn_keyboard_toggle_off.png (renamed from java/res/drawable/btn_keyboard_toggle_off.png) | bin | 693 -> 693 bytes | |||
-rw-r--r-- | java/res/drawable-mdpi/btn_keyboard_toggle_on.png (renamed from java/res/drawable/btn_keyboard_toggle_on.png) | bin | 812 -> 812 bytes | |||
-rw-r--r-- | java/res/drawable-mdpi/btn_led_off.9.png (renamed from java/res/drawable/btn_led_off.9.png) | bin | 505 -> 505 bytes | |||
-rw-r--r-- | java/res/drawable-mdpi/btn_led_on.9.png (renamed from java/res/drawable/btn_led_on.9.png) | bin | 575 -> 575 bytes | |||
-rw-r--r-- | java/res/drawable-mdpi/cancel.png (renamed from java/res/drawable/cancel.png) | bin | 1259 -> 1259 bytes | |||
-rw-r--r-- | java/res/drawable-mdpi/caution.png (renamed from java/res/drawable/caution.png) | bin | 1100 -> 1100 bytes | |||
-rw-r--r-- | java/res/drawable-mdpi/dialog_top_dark_bottom_medium.9.png (renamed from java/res/drawable/dialog_top_dark_bottom_medium.9.png) | bin | 1574 -> 1574 bytes | |||
-rw-r--r-- | java/res/drawable-mdpi/ic_dialog_alert_large.png (renamed from java/res/drawable/ic_dialog_alert_large.png) | bin | 4089 -> 4089 bytes | |||
-rw-r--r-- | java/res/drawable-mdpi/ic_dialog_voice_input.png (renamed from java/res/drawable/ic_dialog_voice_input.png) | bin | 1040 -> 1040 bytes | |||
-rw-r--r-- | java/res/drawable-mdpi/ic_dialog_wave_0_0.png (renamed from java/res/drawable/ic_dialog_wave_0_0.png) | bin | 8471 -> 8471 bytes | |||
-rw-r--r-- | java/res/drawable-mdpi/ic_dialog_wave_1_3.png (renamed from java/res/drawable/ic_dialog_wave_1_3.png) | bin | 9017 -> 9017 bytes | |||
-rw-r--r-- | java/res/drawable-mdpi/ic_dialog_wave_2_3.png (renamed from java/res/drawable/ic_dialog_wave_2_3.png) | bin | 9614 -> 9614 bytes | |||
-rw-r--r-- | java/res/drawable-mdpi/ic_dialog_wave_3_3.png (renamed from java/res/drawable/ic_dialog_wave_3_3.png) | bin | 10089 -> 10089 bytes | |||
-rw-r--r-- | java/res/drawable-mdpi/ic_dialog_wave_4_3.png (renamed from java/res/drawable/ic_dialog_wave_4_3.png) | bin | 10514 -> 10514 bytes | |||
-rw-r--r-- | java/res/drawable-mdpi/mic_slash.png (renamed from java/res/drawable/mic_slash.png) | bin | 3098 -> 3098 bytes | |||
-rw-r--r-- | java/res/drawable-mdpi/ok_cancel.png (renamed from java/res/drawable/ok_cancel.png) | bin | 8453 -> 8453 bytes | |||
-rw-r--r-- | java/res/drawable-mdpi/speak_now_level0.png (renamed from java/res/drawable/speak_now_level0.png) | bin | 3263 -> 3263 bytes | |||
-rw-r--r-- | java/res/drawable-mdpi/speak_now_level1.png (renamed from java/res/drawable/speak_now_level1.png) | bin | 3572 -> 3572 bytes | |||
-rw-r--r-- | java/res/drawable-mdpi/speak_now_level2.png (renamed from java/res/drawable/speak_now_level2.png) | bin | 3974 -> 3974 bytes | |||
-rw-r--r-- | java/res/drawable-mdpi/speak_now_level3.png (renamed from java/res/drawable/speak_now_level3.png) | bin | 4270 -> 4270 bytes | |||
-rw-r--r-- | java/res/drawable-mdpi/speak_now_level4.png (renamed from java/res/drawable/speak_now_level4.png) | bin | 4241 -> 4241 bytes | |||
-rw-r--r-- | java/res/drawable-mdpi/speak_now_level5.png (renamed from java/res/drawable/speak_now_level5.png) | bin | 4252 -> 4252 bytes | |||
-rw-r--r-- | java/res/drawable-mdpi/speak_now_level6.png (renamed from java/res/drawable/speak_now_level6.png) | bin | 2201 -> 2201 bytes | |||
-rw-r--r-- | java/res/drawable-mdpi/voice_ime_background.9.png (renamed from java/res/drawable/voice_ime_background.9.png) | bin | 20661 -> 20661 bytes | |||
-rw-r--r-- | java/res/drawable-mdpi/voice_swipe_hint.png (renamed from java/res/drawable/voice_swipe_hint.png) | bin | 3111 -> 3111 bytes | |||
-rw-r--r-- | java/res/drawable-mdpi/working.png (renamed from java/res/drawable/working.png) | bin | 33111 -> 33111 bytes | |||
-rw-r--r-- | java/res/values-cs/strings.xml | 16 | ||||
-rw-r--r-- | java/res/values-da/strings.xml | 16 | ||||
-rw-r--r-- | java/res/values-de/strings.xml | 16 | ||||
-rw-r--r-- | java/res/values-el/strings.xml | 16 | ||||
-rw-r--r-- | java/res/values-es-rUS/strings.xml | 16 | ||||
-rw-r--r-- | java/res/values-es/strings.xml | 16 | ||||
-rw-r--r-- | java/res/values-fr/strings.xml | 16 | ||||
-rw-r--r-- | java/res/values-it/strings.xml | 16 | ||||
-rw-r--r-- | java/res/values-ja/strings.xml | 16 | ||||
-rw-r--r-- | java/res/values-ko/strings.xml | 16 | ||||
-rw-r--r-- | java/res/values-nb/strings.xml | 16 | ||||
-rw-r--r-- | java/res/values-nl/strings.xml | 16 | ||||
-rw-r--r-- | java/res/values-pl/strings.xml | 16 | ||||
-rw-r--r-- | java/res/values-pt-rPT/strings.xml | 16 | ||||
-rw-r--r-- | java/res/values-pt/strings.xml | 16 | ||||
-rw-r--r-- | java/res/values-ru/strings.xml | 16 | ||||
-rw-r--r-- | java/res/values-sv/strings.xml | 16 | ||||
-rw-r--r-- | java/res/values-tr/strings.xml | 16 | ||||
-rw-r--r-- | java/res/values-zh-rCN/strings.xml | 16 | ||||
-rw-r--r-- | java/res/values-zh-rTW/strings.xml | 16 | ||||
-rw-r--r-- | java/src/com/android/inputmethod/latin/AutoDictionary.java | 10 | ||||
-rw-r--r-- | java/src/com/android/inputmethod/latin/BinaryDictionary.java | 10 | ||||
-rwxr-xr-x | java/src/com/android/inputmethod/latin/CandidateView.java | 6 | ||||
-rw-r--r-- | java/src/com/android/inputmethod/latin/ContactsDictionary.java | 4 | ||||
-rw-r--r-- | java/src/com/android/inputmethod/latin/ExpandableDictionary.java | 85 | ||||
-rw-r--r-- | java/src/com/android/inputmethod/latin/LatinIME.java | 48 | ||||
-rwxr-xr-x | java/src/com/android/inputmethod/latin/Suggest.java | 14 | ||||
-rw-r--r-- | java/src/com/android/inputmethod/latin/UserBigramDictionary.java | 402 |
68 files changed, 758 insertions, 141 deletions
diff --git a/java/res/drawable-en-hdpi/sym_keyboard_feedback_delete.png b/java/res/drawable-en-hdpi/sym_keyboard_feedback_delete.png Binary files differdeleted file mode 100755 index ca7637552..000000000 --- a/java/res/drawable-en-hdpi/sym_keyboard_feedback_delete.png +++ /dev/null diff --git a/java/res/drawable-hdpi/btn_keyboard_normal_metal.9.png b/java/res/drawable-hdpi/btn_keyboard_normal_metal.9.png Binary files differnew file mode 100644 index 000000000..b29d6d174 --- /dev/null +++ b/java/res/drawable-hdpi/btn_keyboard_normal_metal.9.png diff --git a/java/res/drawable-hdpi/btn_keyboard_toggle_off.png b/java/res/drawable-hdpi/btn_keyboard_toggle_off.png Binary files differnew file mode 100644 index 000000000..bfe78402f --- /dev/null +++ b/java/res/drawable-hdpi/btn_keyboard_toggle_off.png diff --git a/java/res/drawable-hdpi/btn_keyboard_toggle_on.png b/java/res/drawable-hdpi/btn_keyboard_toggle_on.png Binary files differnew file mode 100644 index 000000000..0a1221e97 --- /dev/null +++ b/java/res/drawable-hdpi/btn_keyboard_toggle_on.png diff --git a/java/res/drawable-hdpi/btn_led_off.9.png b/java/res/drawable-hdpi/btn_led_off.9.png Binary files differnew file mode 100644 index 000000000..a60f96539 --- /dev/null +++ b/java/res/drawable-hdpi/btn_led_off.9.png diff --git a/java/res/drawable-hdpi/btn_led_on.9.png b/java/res/drawable-hdpi/btn_led_on.9.png Binary files differnew file mode 100644 index 000000000..c90260967 --- /dev/null +++ b/java/res/drawable-hdpi/btn_led_on.9.png diff --git a/java/res/drawable-hdpi/dialog_top_dark_bottom_medium.9.png b/java/res/drawable-hdpi/dialog_top_dark_bottom_medium.9.png Binary files differnew file mode 100644 index 000000000..ab6c036c3 --- /dev/null +++ b/java/res/drawable-hdpi/dialog_top_dark_bottom_medium.9.png diff --git a/java/res/drawable-hdpi/dialog_top_dark_bottom_medium.png b/java/res/drawable-hdpi/dialog_top_dark_bottom_medium.png Binary files differdeleted file mode 100755 index 7c79a4f90..000000000 --- a/java/res/drawable-hdpi/dialog_top_dark_bottom_medium.png +++ /dev/null diff --git a/java/res/drawable-hdpi/voice_swipe_hint.png b/java/res/drawable-hdpi/voice_swipe_hint.png Binary files differnew file mode 100644 index 000000000..130f83a9c --- /dev/null +++ b/java/res/drawable-hdpi/voice_swipe_hint.png diff --git a/java/res/drawable-land-mdpi/btn_keyboard_key_normal_off.9.png b/java/res/drawable-land-mdpi/btn_keyboard_key_normal_off.9.png Binary files differdeleted file mode 100644 index bda9b8394..000000000 --- a/java/res/drawable-land-mdpi/btn_keyboard_key_normal_off.9.png +++ /dev/null diff --git a/java/res/drawable-land-mdpi/btn_keyboard_key_normal_on.9.png b/java/res/drawable-land-mdpi/btn_keyboard_key_normal_on.9.png Binary files differdeleted file mode 100644 index 0c16ed509..000000000 --- a/java/res/drawable-land-mdpi/btn_keyboard_key_normal_on.9.png +++ /dev/null diff --git a/java/res/drawable-land-mdpi/btn_keyboard_key_pressed_off.9.png b/java/res/drawable-land-mdpi/btn_keyboard_key_pressed_off.9.png Binary files differdeleted file mode 100644 index bdcf06e1b..000000000 --- a/java/res/drawable-land-mdpi/btn_keyboard_key_pressed_off.9.png +++ /dev/null diff --git a/java/res/drawable-land-mdpi/btn_keyboard_key_pressed_on.9.png b/java/res/drawable-land-mdpi/btn_keyboard_key_pressed_on.9.png Binary files differdeleted file mode 100644 index 79621a9e6..000000000 --- a/java/res/drawable-land-mdpi/btn_keyboard_key_pressed_on.9.png +++ /dev/null diff --git a/java/res/drawable/btn_keyboard_normal_metal.9.png b/java/res/drawable-mdpi/btn_keyboard_normal_metal.9.png Binary files differindex f4fe0a8a0..f4fe0a8a0 100644 --- a/java/res/drawable/btn_keyboard_normal_metal.9.png +++ b/java/res/drawable-mdpi/btn_keyboard_normal_metal.9.png diff --git a/java/res/drawable/btn_keyboard_toggle_off.png b/java/res/drawable-mdpi/btn_keyboard_toggle_off.png Binary files differindex 21399a4f3..21399a4f3 100644 --- a/java/res/drawable/btn_keyboard_toggle_off.png +++ b/java/res/drawable-mdpi/btn_keyboard_toggle_off.png diff --git a/java/res/drawable/btn_keyboard_toggle_on.png b/java/res/drawable-mdpi/btn_keyboard_toggle_on.png Binary files differindex 22d5683e2..22d5683e2 100644 --- a/java/res/drawable/btn_keyboard_toggle_on.png +++ b/java/res/drawable-mdpi/btn_keyboard_toggle_on.png diff --git a/java/res/drawable/btn_led_off.9.png b/java/res/drawable-mdpi/btn_led_off.9.png Binary files differindex 68ce7a67a..68ce7a67a 100644 --- a/java/res/drawable/btn_led_off.9.png +++ b/java/res/drawable-mdpi/btn_led_off.9.png diff --git a/java/res/drawable/btn_led_on.9.png b/java/res/drawable-mdpi/btn_led_on.9.png Binary files differindex fe77abb08..fe77abb08 100644 --- a/java/res/drawable/btn_led_on.9.png +++ b/java/res/drawable-mdpi/btn_led_on.9.png diff --git a/java/res/drawable/cancel.png b/java/res/drawable-mdpi/cancel.png Binary files differindex 081532bec..081532bec 100644 --- a/java/res/drawable/cancel.png +++ b/java/res/drawable-mdpi/cancel.png diff --git a/java/res/drawable/caution.png b/java/res/drawable-mdpi/caution.png Binary files differindex eaef53425..eaef53425 100644 --- a/java/res/drawable/caution.png +++ b/java/res/drawable-mdpi/caution.png diff --git a/java/res/drawable/dialog_top_dark_bottom_medium.9.png b/java/res/drawable-mdpi/dialog_top_dark_bottom_medium.9.png Binary files differindex cf7ecaf1e..cf7ecaf1e 100644 --- a/java/res/drawable/dialog_top_dark_bottom_medium.9.png +++ b/java/res/drawable-mdpi/dialog_top_dark_bottom_medium.9.png diff --git a/java/res/drawable/ic_dialog_alert_large.png b/java/res/drawable-mdpi/ic_dialog_alert_large.png Binary files differindex 2d4a164a7..2d4a164a7 100644 --- a/java/res/drawable/ic_dialog_alert_large.png +++ b/java/res/drawable-mdpi/ic_dialog_alert_large.png diff --git a/java/res/drawable/ic_dialog_voice_input.png b/java/res/drawable-mdpi/ic_dialog_voice_input.png Binary files differindex d28914132..d28914132 100644 --- a/java/res/drawable/ic_dialog_voice_input.png +++ b/java/res/drawable-mdpi/ic_dialog_voice_input.png diff --git a/java/res/drawable/ic_dialog_wave_0_0.png b/java/res/drawable-mdpi/ic_dialog_wave_0_0.png Binary files differindex 9c3c28f37..9c3c28f37 100644 --- a/java/res/drawable/ic_dialog_wave_0_0.png +++ b/java/res/drawable-mdpi/ic_dialog_wave_0_0.png diff --git a/java/res/drawable/ic_dialog_wave_1_3.png b/java/res/drawable-mdpi/ic_dialog_wave_1_3.png Binary files differindex d33bd0d9b..d33bd0d9b 100644 --- a/java/res/drawable/ic_dialog_wave_1_3.png +++ b/java/res/drawable-mdpi/ic_dialog_wave_1_3.png diff --git a/java/res/drawable/ic_dialog_wave_2_3.png b/java/res/drawable-mdpi/ic_dialog_wave_2_3.png Binary files differindex 5094a6e6c..5094a6e6c 100644 --- a/java/res/drawable/ic_dialog_wave_2_3.png +++ b/java/res/drawable-mdpi/ic_dialog_wave_2_3.png diff --git a/java/res/drawable/ic_dialog_wave_3_3.png b/java/res/drawable-mdpi/ic_dialog_wave_3_3.png Binary files differindex 69917564d..69917564d 100644 --- a/java/res/drawable/ic_dialog_wave_3_3.png +++ b/java/res/drawable-mdpi/ic_dialog_wave_3_3.png diff --git a/java/res/drawable/ic_dialog_wave_4_3.png b/java/res/drawable-mdpi/ic_dialog_wave_4_3.png Binary files differindex af5a84c31..af5a84c31 100644 --- a/java/res/drawable/ic_dialog_wave_4_3.png +++ b/java/res/drawable-mdpi/ic_dialog_wave_4_3.png diff --git a/java/res/drawable/mic_slash.png b/java/res/drawable-mdpi/mic_slash.png Binary files differindex 0b0fb5803..0b0fb5803 100644 --- a/java/res/drawable/mic_slash.png +++ b/java/res/drawable-mdpi/mic_slash.png diff --git a/java/res/drawable/ok_cancel.png b/java/res/drawable-mdpi/ok_cancel.png Binary files differindex 0601d3231..0601d3231 100644 --- a/java/res/drawable/ok_cancel.png +++ b/java/res/drawable-mdpi/ok_cancel.png diff --git a/java/res/drawable/speak_now_level0.png b/java/res/drawable-mdpi/speak_now_level0.png Binary files differindex abc845466..abc845466 100644 --- a/java/res/drawable/speak_now_level0.png +++ b/java/res/drawable-mdpi/speak_now_level0.png diff --git a/java/res/drawable/speak_now_level1.png b/java/res/drawable-mdpi/speak_now_level1.png Binary files differindex 67cb235bf..67cb235bf 100644 --- a/java/res/drawable/speak_now_level1.png +++ b/java/res/drawable-mdpi/speak_now_level1.png diff --git a/java/res/drawable/speak_now_level2.png b/java/res/drawable-mdpi/speak_now_level2.png Binary files differindex 1e07f26c6..1e07f26c6 100644 --- a/java/res/drawable/speak_now_level2.png +++ b/java/res/drawable-mdpi/speak_now_level2.png diff --git a/java/res/drawable/speak_now_level3.png b/java/res/drawable-mdpi/speak_now_level3.png Binary files differindex 31991daee..31991daee 100644 --- a/java/res/drawable/speak_now_level3.png +++ b/java/res/drawable-mdpi/speak_now_level3.png diff --git a/java/res/drawable/speak_now_level4.png b/java/res/drawable-mdpi/speak_now_level4.png Binary files differindex 7363ca892..7363ca892 100644 --- a/java/res/drawable/speak_now_level4.png +++ b/java/res/drawable-mdpi/speak_now_level4.png diff --git a/java/res/drawable/speak_now_level5.png b/java/res/drawable-mdpi/speak_now_level5.png Binary files differindex 9034908f4..9034908f4 100644 --- a/java/res/drawable/speak_now_level5.png +++ b/java/res/drawable-mdpi/speak_now_level5.png diff --git a/java/res/drawable/speak_now_level6.png b/java/res/drawable-mdpi/speak_now_level6.png Binary files differindex 3eaa9bdad..3eaa9bdad 100644 --- a/java/res/drawable/speak_now_level6.png +++ b/java/res/drawable-mdpi/speak_now_level6.png diff --git a/java/res/drawable/voice_ime_background.9.png b/java/res/drawable-mdpi/voice_ime_background.9.png Binary files differindex 67802492a..67802492a 100644 --- a/java/res/drawable/voice_ime_background.9.png +++ b/java/res/drawable-mdpi/voice_ime_background.9.png diff --git a/java/res/drawable/voice_swipe_hint.png b/java/res/drawable-mdpi/voice_swipe_hint.png Binary files differindex bb8873251..bb8873251 100644 --- a/java/res/drawable/voice_swipe_hint.png +++ b/java/res/drawable-mdpi/voice_swipe_hint.png diff --git a/java/res/drawable/working.png b/java/res/drawable-mdpi/working.png Binary files differindex 6246a6d1c..6246a6d1c 100644 --- a/java/res/drawable/working.png +++ b/java/res/drawable-mdpi/working.png diff --git a/java/res/values-cs/strings.xml b/java/res/values-cs/strings.xml index 4bc1f5543..5abbab0d5 100644 --- a/java/res/values-cs/strings.xml +++ b/java/res/values-cs/strings.xml @@ -39,14 +39,15 @@ <string name="auto_cap" msgid="1719746674854628252">"Velká písmena automaticky"</string> <string name="auto_cap_summary" msgid="3260681697600786825">"Zahájit větu velkým písmenem"</string> <string name="auto_punctuate" msgid="7276672334264521751">"Automatická interpunkce"</string> - <!-- no translation found for auto_punctuate_summary (6589441565817502132) --> - <skip /> + <string name="auto_punctuate_summary" msgid="6589441565817502132"></string> <string name="quick_fixes" msgid="5353213327680897927">"Rychlé opravy"</string> <string name="quick_fixes_summary" msgid="3405028402510332373">"Opravuje nejčastější chyby při psaní"</string> <string name="show_suggestions" msgid="507074425254289133">"Zobrazit návrhy"</string> <string name="show_suggestions_summary" msgid="1989672863935759654">"Zobrazovat navržená slova během psaní"</string> <string name="auto_complete" msgid="1103196318775486023">"Automatické dokončování"</string> <string name="auto_complete_summary" msgid="6113149638718274624">"Stisknutím mezerníku nebo interpunkčního znaménka automaticky vložíte zvýrazněné slovo."</string> + <string name="bigram_suggestion" msgid="1323347224043514969">"Návrh Bigram"</string> + <string name="bigram_suggestion_summary" msgid="4383845146070101531">"Použít předchozí slovo ke zlepšení návrhu"</string> <string-array name="prediction_modes"> <item msgid="4870266572388153286">"Žádný"</item> <item msgid="1669461741568287396">"Základní"</item> @@ -89,8 +90,7 @@ <string name="voice_hint_dialog_message" msgid="6892342981545727994">"Chcete-li použít hlasový vstup, stiskněte tlačítko mikrofonu nebo přejeďte prstem přes klávesnici na obrazovce."</string> <string name="voice_listening" msgid="467518160751321844">"Mluvte"</string> <string name="voice_working" msgid="6666937792815731889">"Probíhá zpracování"</string> - <!-- no translation found for voice_initializing (661962047129906646) --> - <skip /> + <string name="voice_initializing" msgid="661962047129906646"></string> <string name="voice_error" msgid="5140896300312186162">"Chyba. Zkuste to prosím znovu."</string> <string name="voice_network_error" msgid="6649556447401862563">"Připojení se nezdařilo."</string> <string name="voice_too_much_speech" msgid="5746973620134227376">"Chyba, řeč je příliš dlouhá."</string> @@ -130,4 +130,12 @@ <string name="language_selection_summary" msgid="187110938289512256">"Jazyk můžete změnit posunutím prstu po mezerníku."</string> <string name="hint_add_to_dictionary" msgid="8058519710062071085">"← Uložte slovo opětovným klepnutím"</string> <string name="has_dictionary" msgid="6071847973466625007">"K dispozici je slovník"</string> + <!-- no translation found for prefs_enable_log (6620424505072963557) --> + <skip /> + <!-- no translation found for prefs_description_log (5827825607258246003) --> + <skip /> + <!-- no translation found for keyboard_layout (437433231038683666) --> + <skip /> + <!-- no translation found for prefs_debug_mode (3889340783846594980) --> + <skip /> </resources> diff --git a/java/res/values-da/strings.xml b/java/res/values-da/strings.xml index 750d67b20..03a3aaa3c 100644 --- a/java/res/values-da/strings.xml +++ b/java/res/values-da/strings.xml @@ -39,14 +39,15 @@ <string name="auto_cap" msgid="1719746674854628252">"Skriv aut. med stort"</string> <string name="auto_cap_summary" msgid="3260681697600786825">"Første bogstav i en sætning skrives med stort"</string> <string name="auto_punctuate" msgid="7276672334264521751">"Foretag automatisk tegnsætning"</string> - <!-- no translation found for auto_punctuate_summary (6589441565817502132) --> - <skip /> + <string name="auto_punctuate_summary" msgid="6589441565817502132"></string> <string name="quick_fixes" msgid="5353213327680897927">"Hurtige løsninger"</string> <string name="quick_fixes_summary" msgid="3405028402510332373">"Retter almindelige stavefejl"</string> <string name="show_suggestions" msgid="507074425254289133">"Vis forslag"</string> <string name="show_suggestions_summary" msgid="1989672863935759654">"Vis ordforslag under indtastning"</string> <string name="auto_complete" msgid="1103196318775486023">"Udfyld automatisk"</string> <string name="auto_complete_summary" msgid="6113149638718274624">"Mellemrumstast og tegnsætning indsætter automatisk fremhævet ord"</string> + <string name="bigram_suggestion" msgid="1323347224043514969">"Bigram-forslag"</string> + <string name="bigram_suggestion_summary" msgid="4383845146070101531">"Brug forrige ord for at forbedre forslag"</string> <string-array name="prediction_modes"> <item msgid="4870266572388153286">"Ingen"</item> <item msgid="1669461741568287396">"Grundlæggende"</item> @@ -89,8 +90,7 @@ <string name="voice_hint_dialog_message" msgid="6892342981545727994">"For at bruge stemme-input skal du trykke på knappen mikrofon eller lade glide fingeren hen over skærmtastaturet."</string> <string name="voice_listening" msgid="467518160751321844">"Tal nu"</string> <string name="voice_working" msgid="6666937792815731889">"Arbejder"</string> - <!-- no translation found for voice_initializing (661962047129906646) --> - <skip /> + <string name="voice_initializing" msgid="661962047129906646"></string> <string name="voice_error" msgid="5140896300312186162">"Fejl. Prøv igen."</string> <string name="voice_network_error" msgid="6649556447401862563">"Kunne ikke oprette forbindelse"</string> <string name="voice_too_much_speech" msgid="5746973620134227376">"Fejl. For meget tale."</string> @@ -130,4 +130,12 @@ <string name="language_selection_summary" msgid="187110938289512256">"Træk fingeren på mellemrumstasten for at skifte sprog"</string> <string name="hint_add_to_dictionary" msgid="8058519710062071085">"← Tast igen for at gemme"</string> <string name="has_dictionary" msgid="6071847973466625007">"Ordbog er tilgængelig"</string> + <!-- no translation found for prefs_enable_log (6620424505072963557) --> + <skip /> + <!-- no translation found for prefs_description_log (5827825607258246003) --> + <skip /> + <!-- no translation found for keyboard_layout (437433231038683666) --> + <skip /> + <!-- no translation found for prefs_debug_mode (3889340783846594980) --> + <skip /> </resources> diff --git a/java/res/values-de/strings.xml b/java/res/values-de/strings.xml index ed6408dde..9e11d5453 100644 --- a/java/res/values-de/strings.xml +++ b/java/res/values-de/strings.xml @@ -39,14 +39,15 @@ <string name="auto_cap" msgid="1719746674854628252">"Autom. Groß-/Kleinschr."</string> <string name="auto_cap_summary" msgid="3260681697600786825">"Sätze mit Großbuchstaben beginnen"</string> <string name="auto_punctuate" msgid="7276672334264521751">"Autom. Zeichensetzung"</string> - <!-- no translation found for auto_punctuate_summary (6589441565817502132) --> - <skip /> + <string name="auto_punctuate_summary" msgid="6589441565817502132"></string> <string name="quick_fixes" msgid="5353213327680897927">"Quick Fixes"</string> <string name="quick_fixes_summary" msgid="3405028402510332373">"Korrigiert gängige Tippfehler"</string> <string name="show_suggestions" msgid="507074425254289133">"Vorschläge anzeigen"</string> <string name="show_suggestions_summary" msgid="1989672863935759654">"Vorgeschlagene Wörter während des Tippens anzeigen"</string> <string name="auto_complete" msgid="1103196318775486023">"Autom. vervollständigen"</string> <string name="auto_complete_summary" msgid="6113149638718274624">"Leertaste und Interpunktion fügen autom. ein markiertes Wort ein"</string> + <string name="bigram_suggestion" msgid="1323347224043514969">"Bigramm-Vorschläge"</string> + <string name="bigram_suggestion_summary" msgid="4383845146070101531">"Zur Verbesserung des Vorschlags vorheriges Wort verwenden"</string> <string-array name="prediction_modes"> <item msgid="4870266572388153286">"Kein"</item> <item msgid="1669461741568287396">"Standard"</item> @@ -89,8 +90,7 @@ <string name="voice_hint_dialog_message" msgid="6892342981545727994">"Um die Spracheingabe zu verwenden, drücken Sie die Mikrofontaste oder ziehen Sie Ihren Finger über die Bildschirmtastatur."</string> <string name="voice_listening" msgid="467518160751321844">"Jetzt sprechen"</string> <string name="voice_working" msgid="6666937792815731889">"Vorgang läuft"</string> - <!-- no translation found for voice_initializing (661962047129906646) --> - <skip /> + <string name="voice_initializing" msgid="661962047129906646"></string> <string name="voice_error" msgid="5140896300312186162">"Fehler. Versuchen Sie es erneut.."</string> <string name="voice_network_error" msgid="6649556447401862563">"Keine Verbindung"</string> <string name="voice_too_much_speech" msgid="5746973620134227376">"Fehler – Text zu lang"</string> @@ -130,4 +130,12 @@ <string name="language_selection_summary" msgid="187110938289512256">"Finger über die Leertaste bewegen, um die Eingabesprache zu wechseln"</string> <string name="hint_add_to_dictionary" msgid="8058519710062071085">"← Zum Speichern erneut tippen"</string> <string name="has_dictionary" msgid="6071847973466625007">"Wörterbuch verfügbar"</string> + <!-- no translation found for prefs_enable_log (6620424505072963557) --> + <skip /> + <!-- no translation found for prefs_description_log (5827825607258246003) --> + <skip /> + <!-- no translation found for keyboard_layout (437433231038683666) --> + <skip /> + <!-- no translation found for prefs_debug_mode (3889340783846594980) --> + <skip /> </resources> diff --git a/java/res/values-el/strings.xml b/java/res/values-el/strings.xml index c4a50771a..5dea3806a 100644 --- a/java/res/values-el/strings.xml +++ b/java/res/values-el/strings.xml @@ -39,14 +39,15 @@ <string name="auto_cap" msgid="1719746674854628252">"Αυτόματη χρήση κεφαλαίων"</string> <string name="auto_cap_summary" msgid="3260681697600786825">"Κεφαλαίο το πρώτο γράμμα της πρότασης"</string> <string name="auto_punctuate" msgid="7276672334264521751">"Αυτόματος τονισμός"</string> - <!-- no translation found for auto_punctuate_summary (6589441565817502132) --> - <skip /> + <string name="auto_punctuate_summary" msgid="6589441565817502132"></string> <string name="quick_fixes" msgid="5353213327680897927">"Γρήγορες διορθώσεις"</string> <string name="quick_fixes_summary" msgid="3405028402510332373">"Διορθώνει συνηθισμένα λάθη πληκτρολόγησης"</string> <string name="show_suggestions" msgid="507074425254289133">"Εμφάνιση υποδείξεων"</string> <string name="show_suggestions_summary" msgid="1989672863935759654">"Προβολή προτεινόμενων λέξεων κατά την πληκτρολόγηση"</string> <string name="auto_complete" msgid="1103196318775486023">"Αυτόματη συμπλήρωση"</string> <string name="auto_complete_summary" msgid="6113149638718274624">"Τα πλήκ.διαστήμ.και τονισμού εισάγ.αυτόμ.την επιλ.λέξη"</string> + <string name="bigram_suggestion" msgid="1323347224043514969">"Προτάσεις bigram"</string> + <string name="bigram_suggestion_summary" msgid="4383845146070101531">"Χρήση προηγούμενης λέξης για τη βελτίωση πρότασης"</string> <string-array name="prediction_modes"> <item msgid="4870266572388153286">"Καμία"</item> <item msgid="1669461741568287396">"Βασική"</item> @@ -89,8 +90,7 @@ <string name="voice_hint_dialog_message" msgid="6892342981545727994">"Για να χρησιμοποιήσετε τις φωνητικές εντολές, πιέστε το κουμπί μικροφώνου ή σύρετε το δάχτυλό σας κατά μήκος του πληκτρολογίου της οθόνης."</string> <string name="voice_listening" msgid="467518160751321844">"Μιλήστε τώρα"</string> <string name="voice_working" msgid="6666937792815731889">"Σε λειτουργία"</string> - <!-- no translation found for voice_initializing (661962047129906646) --> - <skip /> + <string name="voice_initializing" msgid="661962047129906646"></string> <string name="voice_error" msgid="5140896300312186162">"Σφάλμα. Δοκιμάστε ξανά."</string> <string name="voice_network_error" msgid="6649556447401862563">"Δεν ήταν δυνατή η σύνδεση"</string> <string name="voice_too_much_speech" msgid="5746973620134227376">"Σφάλμα, πολλές λέξεις."</string> @@ -130,4 +130,12 @@ <string name="language_selection_summary" msgid="187110938289512256">"Σύρετε το δάχτυλο στο πλήκτρο διαστήματος για να αλλάξετε γλώσσα"</string> <string name="hint_add_to_dictionary" msgid="8058519710062071085">"← Πατήστε ξανά για αποθήκευση"</string> <string name="has_dictionary" msgid="6071847973466625007">"Λεξικό διαθέσιμο"</string> + <!-- no translation found for prefs_enable_log (6620424505072963557) --> + <skip /> + <!-- no translation found for prefs_description_log (5827825607258246003) --> + <skip /> + <!-- no translation found for keyboard_layout (437433231038683666) --> + <skip /> + <!-- no translation found for prefs_debug_mode (3889340783846594980) --> + <skip /> </resources> diff --git a/java/res/values-es-rUS/strings.xml b/java/res/values-es-rUS/strings.xml index cd17dba31..f94f7f78b 100644 --- a/java/res/values-es-rUS/strings.xml +++ b/java/res/values-es-rUS/strings.xml @@ -39,14 +39,15 @@ <string name="auto_cap" msgid="1719746674854628252">"Mayúsculas automáticas"</string> <string name="auto_cap_summary" msgid="3260681697600786825">"Poner en mayúscula el inicio de una oración"</string> <string name="auto_punctuate" msgid="7276672334264521751">"Puntuación automática"</string> - <!-- no translation found for auto_punctuate_summary (6589441565817502132) --> - <skip /> + <string name="auto_punctuate_summary" msgid="6589441565817502132"></string> <string name="quick_fixes" msgid="5353213327680897927">"Arreglos rápidos"</string> <string name="quick_fixes_summary" msgid="3405028402510332373">"Corrige errores de escritura comunes"</string> <string name="show_suggestions" msgid="507074425254289133">"Mostrar sugerencias"</string> <string name="show_suggestions_summary" msgid="1989672863935759654">"Mostrar palabras sugeridas mientras escribe"</string> <string name="auto_complete" msgid="1103196318775486023">"Completar automát."</string> <string name="auto_complete_summary" msgid="6113149638718274624">"La barra espaciadora o la puntuación insertan automáticamente la palabra resaltada."</string> + <string name="bigram_suggestion" msgid="1323347224043514969">"Sugerencias de Vigoran"</string> + <string name="bigram_suggestion_summary" msgid="4383845146070101531">"Utiliza la palabra anterior para mejorar la sugerencia"</string> <string-array name="prediction_modes"> <item msgid="4870266572388153286">"Ninguno"</item> <item msgid="1669461741568287396">"Básico"</item> @@ -89,8 +90,7 @@ <string name="voice_hint_dialog_message" msgid="6892342981545727994">"Para realizar entrada por voz, presiona el botón del micrófono o desliza tus dedos por el teclado en pantalla."</string> <string name="voice_listening" msgid="467518160751321844">"Habla ahora"</string> <string name="voice_working" msgid="6666937792815731889">"Procesando"</string> - <!-- no translation found for voice_initializing (661962047129906646) --> - <skip /> + <string name="voice_initializing" msgid="661962047129906646"></string> <string name="voice_error" msgid="5140896300312186162">"Error. Vuelve a intentarlo."</string> <string name="voice_network_error" msgid="6649556447401862563">"No se pudo establecer la conexión."</string> <string name="voice_too_much_speech" msgid="5746973620134227376">"Error, demasiado discurso."</string> @@ -130,4 +130,12 @@ <string name="language_selection_summary" msgid="187110938289512256">"Deslizarse manualmente por la barra espaciadora para cambiar el idioma"</string> <string name="hint_add_to_dictionary" msgid="8058519710062071085">"← Presionar nuevamente para guardar"</string> <string name="has_dictionary" msgid="6071847973466625007">"Diccionario disponible"</string> + <!-- no translation found for prefs_enable_log (6620424505072963557) --> + <skip /> + <!-- no translation found for prefs_description_log (5827825607258246003) --> + <skip /> + <!-- no translation found for keyboard_layout (437433231038683666) --> + <skip /> + <!-- no translation found for prefs_debug_mode (3889340783846594980) --> + <skip /> </resources> diff --git a/java/res/values-es/strings.xml b/java/res/values-es/strings.xml index fbe3ad347..1c8f02bba 100644 --- a/java/res/values-es/strings.xml +++ b/java/res/values-es/strings.xml @@ -39,14 +39,15 @@ <string name="auto_cap" msgid="1719746674854628252">"Uso de mayúsculas auto."</string> <string name="auto_cap_summary" msgid="3260681697600786825">"Escribir en mayúscula el principio de la frase"</string> <string name="auto_punctuate" msgid="7276672334264521751">"Puntuación automática"</string> - <!-- no translation found for auto_punctuate_summary (6589441565817502132) --> - <skip /> + <string name="auto_punctuate_summary" msgid="6589441565817502132"></string> <string name="quick_fixes" msgid="5353213327680897927">"Correcciones rápidas"</string> <string name="quick_fixes_summary" msgid="3405028402510332373">"Corrige los errores tipográficos que se cometen con más frecuencia."</string> <string name="show_suggestions" msgid="507074425254289133">"Mostrar sugerencias"</string> <string name="show_suggestions_summary" msgid="1989672863935759654">"Muestra las palabras sugeridas mientras se escribe."</string> <string name="auto_complete" msgid="1103196318775486023">"Autocompletar"</string> <string name="auto_complete_summary" msgid="6113149638718274624">"La barra espaciadora y los signos de puntuación insertan automáticamente la palabra resaltada."</string> + <string name="bigram_suggestion" msgid="1323347224043514969">"Sugerencias de bigramas"</string> + <string name="bigram_suggestion_summary" msgid="4383845146070101531">"Usar palabra anterior para mejorar sugerencias"</string> <string-array name="prediction_modes"> <item msgid="4870266572388153286">"Ninguno"</item> <item msgid="1669461741568287396">"Básico"</item> @@ -89,8 +90,7 @@ <string name="voice_hint_dialog_message" msgid="6892342981545727994">"Para utilizar la función de introducción de voz, pulsa el botón de micrófono o desliza el dedo por el teclado en pantalla."</string> <string name="voice_listening" msgid="467518160751321844">"Hablar ahora"</string> <string name="voice_working" msgid="6666937792815731889">"En curso"</string> - <!-- no translation found for voice_initializing (661962047129906646) --> - <skip /> + <string name="voice_initializing" msgid="661962047129906646"></string> <string name="voice_error" msgid="5140896300312186162">"Se ha producido un error. Inténtalo de nuevo."</string> <string name="voice_network_error" msgid="6649556447401862563">"No se ha podido establecer conexión."</string> <string name="voice_too_much_speech" msgid="5746973620134227376">"Se ha producido un error debido a un exceso de introducción de datos de voz."</string> @@ -130,4 +130,12 @@ <string name="language_selection_summary" msgid="187110938289512256">"Deslizar el dedo por la barra espaciadora para cambiar el idioma"</string> <string name="hint_add_to_dictionary" msgid="8058519710062071085">"← Volver a tocar para guardar"</string> <string name="has_dictionary" msgid="6071847973466625007">"Hay un diccionario disponible."</string> + <!-- no translation found for prefs_enable_log (6620424505072963557) --> + <skip /> + <!-- no translation found for prefs_description_log (5827825607258246003) --> + <skip /> + <!-- no translation found for keyboard_layout (437433231038683666) --> + <skip /> + <!-- no translation found for prefs_debug_mode (3889340783846594980) --> + <skip /> </resources> diff --git a/java/res/values-fr/strings.xml b/java/res/values-fr/strings.xml index 2cabe40d9..74a0a4edf 100644 --- a/java/res/values-fr/strings.xml +++ b/java/res/values-fr/strings.xml @@ -39,14 +39,15 @@ <string name="auto_cap" msgid="1719746674854628252">"Majuscules auto"</string> <string name="auto_cap_summary" msgid="3260681697600786825">"Mettre en majuscule la première lettre de chaque phrase"</string> <string name="auto_punctuate" msgid="7276672334264521751">"Ponctuation automatique"</string> - <!-- no translation found for auto_punctuate_summary (6589441565817502132) --> - <skip /> + <string name="auto_punctuate_summary" msgid="6589441565817502132"></string> <string name="quick_fixes" msgid="5353213327680897927">"Corrections rapides"</string> <string name="quick_fixes_summary" msgid="3405028402510332373">"Corrige les fautes de frappe courantes"</string> <string name="show_suggestions" msgid="507074425254289133">"Afficher les suggestions"</string> <string name="show_suggestions_summary" msgid="1989672863935759654">"Afficher les suggestions de terme lors de la saisie"</string> <string name="auto_complete" msgid="1103196318775486023">"Saisie semi-automatique"</string> <string name="auto_complete_summary" msgid="6113149638718274624">"Insérer auto. le terme surligné avec barre espace/ponctuation"</string> + <string name="bigram_suggestion" msgid="1323347224043514969">"Suggestions de type bigramme"</string> + <string name="bigram_suggestion_summary" msgid="4383845146070101531">"Améliorer la suggestion en fonction du mot précédent"</string> <string-array name="prediction_modes"> <item msgid="4870266572388153286">"Aucun"</item> <item msgid="1669461741568287396">"Simple"</item> @@ -89,8 +90,7 @@ <string name="voice_hint_dialog_message" msgid="6892342981545727994">"Pour utiliser la saisie vocale, appuyez sur la touche du microphone ou faites glisser votre doigt sur le clavier à l\'écran."</string> <string name="voice_listening" msgid="467518160751321844">"Parlez maintenant"</string> <string name="voice_working" msgid="6666937792815731889">"Traitement en cours"</string> - <!-- no translation found for voice_initializing (661962047129906646) --> - <skip /> + <string name="voice_initializing" msgid="661962047129906646"></string> <string name="voice_error" msgid="5140896300312186162">"Erreur. Veuillez réessayer."</string> <string name="voice_network_error" msgid="6649556447401862563">"Connexion impossible"</string> <string name="voice_too_much_speech" msgid="5746973620134227376">"Erreur, discours trop long."</string> @@ -130,4 +130,12 @@ <string name="language_selection_summary" msgid="187110938289512256">"Faites glisser votre doigt sur la barre d\'espacement pour changer la langue."</string> <string name="hint_add_to_dictionary" msgid="8058519710062071085">"← Appuyer de nouveau pour enregistrer"</string> <string name="has_dictionary" msgid="6071847973466625007">"Dictionnaire disponible"</string> + <!-- no translation found for prefs_enable_log (6620424505072963557) --> + <skip /> + <!-- no translation found for prefs_description_log (5827825607258246003) --> + <skip /> + <!-- no translation found for keyboard_layout (437433231038683666) --> + <skip /> + <!-- no translation found for prefs_debug_mode (3889340783846594980) --> + <skip /> </resources> diff --git a/java/res/values-it/strings.xml b/java/res/values-it/strings.xml index 8100175b3..52c0b741e 100644 --- a/java/res/values-it/strings.xml +++ b/java/res/values-it/strings.xml @@ -39,14 +39,15 @@ <string name="auto_cap" msgid="1719746674854628252">"Maiuscole automatiche"</string> <string name="auto_cap_summary" msgid="3260681697600786825">"Rendi maiuscole le iniziali delle frasi"</string> <string name="auto_punctuate" msgid="7276672334264521751">"Punteggiatura automat."</string> - <!-- no translation found for auto_punctuate_summary (6589441565817502132) --> - <skip /> + <string name="auto_punctuate_summary" msgid="6589441565817502132"></string> <string name="quick_fixes" msgid="5353213327680897927">"Correzioni veloci"</string> <string name="quick_fixes_summary" msgid="3405028402510332373">"Corregge gli errori di digitazione più comuni"</string> <string name="show_suggestions" msgid="507074425254289133">"Mostra suggerimenti"</string> <string name="show_suggestions_summary" msgid="1989672863935759654">"Visualizza le parole suggerite durante la digitazione"</string> <string name="auto_complete" msgid="1103196318775486023">"Completamento autom."</string> <string name="auto_complete_summary" msgid="6113149638718274624">"Barra spaziatrice e punteggiatura inseriscono la parola evidenziata"</string> + <string name="bigram_suggestion" msgid="1323347224043514969">"Suggerimenti sui bigrammi"</string> + <string name="bigram_suggestion_summary" msgid="4383845146070101531">"Utilizza parola precedente per migliorare il suggerimento"</string> <string-array name="prediction_modes"> <item msgid="4870266572388153286">"Nessuna"</item> <item msgid="1669461741568287396">"Base"</item> @@ -89,8 +90,7 @@ <string name="voice_hint_dialog_message" msgid="6892342981545727994">"Per utilizzare i comandi vocali, premi il pulsante del microfono o fai scorrere il dito sulla tastiera sullo schermo."</string> <string name="voice_listening" msgid="467518160751321844">"Parla ora"</string> <string name="voice_working" msgid="6666937792815731889">"Elaborazione in corso"</string> - <!-- no translation found for voice_initializing (661962047129906646) --> - <skip /> + <string name="voice_initializing" msgid="661962047129906646"></string> <string name="voice_error" msgid="5140896300312186162">"Errore. Riprova più tardi."</string> <string name="voice_network_error" msgid="6649556447401862563">"Impossibile connettersi."</string> <string name="voice_too_much_speech" msgid="5746973620134227376">"Errore: conversazione troppo lunga."</string> @@ -130,4 +130,12 @@ <string name="language_selection_summary" msgid="187110938289512256">"Scorri il dito sulla barra spaziatrice per cambiare la lingua"</string> <string name="hint_add_to_dictionary" msgid="8058519710062071085">"← Tocca di nuovo per salvare"</string> <string name="has_dictionary" msgid="6071847973466625007">"Dizionario disponibile"</string> + <!-- no translation found for prefs_enable_log (6620424505072963557) --> + <skip /> + <!-- no translation found for prefs_description_log (5827825607258246003) --> + <skip /> + <!-- no translation found for keyboard_layout (437433231038683666) --> + <skip /> + <!-- no translation found for prefs_debug_mode (3889340783846594980) --> + <skip /> </resources> diff --git a/java/res/values-ja/strings.xml b/java/res/values-ja/strings.xml index 7867684cb..58a49a238 100644 --- a/java/res/values-ja/strings.xml +++ b/java/res/values-ja/strings.xml @@ -39,14 +39,15 @@ <string name="auto_cap" msgid="1719746674854628252">"自動大文字変換"</string> <string name="auto_cap_summary" msgid="3260681697600786825">"英字入力で文頭文字を大文字にする"</string> <string name="auto_punctuate" msgid="7276672334264521751">"句読点を自動入力"</string> - <!-- no translation found for auto_punctuate_summary (6589441565817502132) --> - <skip /> + <string name="auto_punctuate_summary" msgid="6589441565817502132"></string> <string name="quick_fixes" msgid="5353213327680897927">"クイックフィックス"</string> <string name="quick_fixes_summary" msgid="3405028402510332373">"よくある誤字・脱字を修正します"</string> <string name="show_suggestions" msgid="507074425254289133">"入力候補を表示"</string> <string name="show_suggestions_summary" msgid="1989672863935759654">"入力時に入力候補を表示する"</string> <string name="auto_complete" msgid="1103196318775486023">"オートコンプリート"</string> <string name="auto_complete_summary" msgid="6113149638718274624">"反転表示されている変換候補をスペースまたは句読点キーで挿入する"</string> + <string name="bigram_suggestion" msgid="1323347224043514969">"バイグラム入力候補表示"</string> + <string name="bigram_suggestion_summary" msgid="4383845146070101531">"直前の単語から入力候補を予測します"</string> <string-array name="prediction_modes"> <item msgid="4870266572388153286">"なし"</item> <item msgid="1669461741568287396">"基本"</item> @@ -89,8 +90,7 @@ <string name="voice_hint_dialog_message" msgid="6892342981545727994">"音声入力するには、マイクボタンを押すか画面キーボードをスワイプしてください。"</string> <string name="voice_listening" msgid="467518160751321844">"お話しください"</string> <string name="voice_working" msgid="6666937792815731889">"処理中"</string> - <!-- no translation found for voice_initializing (661962047129906646) --> - <skip /> + <string name="voice_initializing" msgid="661962047129906646"></string> <string name="voice_error" msgid="5140896300312186162">"エラーです。もう一度お試しください。"</string> <string name="voice_network_error" msgid="6649556447401862563">"接続できませんでした"</string> <string name="voice_too_much_speech" msgid="5746973620134227376">"音声が長すぎてエラーになりました。"</string> @@ -130,4 +130,12 @@ <string name="language_selection_summary" msgid="187110938289512256">"スペースバーで指をスライドさせて言語を変更する"</string> <string name="hint_add_to_dictionary" msgid="8058519710062071085">"←保存するにはもう一度タップ"</string> <string name="has_dictionary" msgid="6071847973466625007">"辞書を利用できます"</string> + <!-- no translation found for prefs_enable_log (6620424505072963557) --> + <skip /> + <!-- no translation found for prefs_description_log (5827825607258246003) --> + <skip /> + <!-- no translation found for keyboard_layout (437433231038683666) --> + <skip /> + <!-- no translation found for prefs_debug_mode (3889340783846594980) --> + <skip /> </resources> diff --git a/java/res/values-ko/strings.xml b/java/res/values-ko/strings.xml index 94d1ff4ef..804526d39 100644 --- a/java/res/values-ko/strings.xml +++ b/java/res/values-ko/strings.xml @@ -39,14 +39,15 @@ <string name="auto_cap" msgid="1719746674854628252">"자동 대문자화"</string> <string name="auto_cap_summary" msgid="3260681697600786825">"문장의 첫 글자를 대문자로 표시"</string> <string name="auto_punctuate" msgid="7276672334264521751">"자동 구두점 입력"</string> - <!-- no translation found for auto_punctuate_summary (6589441565817502132) --> - <skip /> + <string name="auto_punctuate_summary" msgid="6589441565817502132"></string> <string name="quick_fixes" msgid="5353213327680897927">"빠른 수정"</string> <string name="quick_fixes_summary" msgid="3405028402510332373">"자주 발생하는 오타를 수정합니다."</string> <string name="show_suggestions" msgid="507074425254289133">"추천 단어 표시"</string> <string name="show_suggestions_summary" msgid="1989672863935759654">"글자를 입력하는 동안 추천 단어를 표시"</string> <string name="auto_complete" msgid="1103196318775486023">"자동 완성"</string> <string name="auto_complete_summary" msgid="6113149638718274624">"스페이스바와 문장부호 키로 강조 표시된 단어를 자동 삽입"</string> + <string name="bigram_suggestion" msgid="1323347224043514969">"Bigram 추천"</string> + <string name="bigram_suggestion_summary" msgid="4383845146070101531">"이전 단어를 사용하여 추천 기능 개선"</string> <string-array name="prediction_modes"> <item msgid="4870266572388153286">"없음"</item> <item msgid="1669461741568287396">"기본"</item> @@ -89,8 +90,7 @@ <string name="voice_hint_dialog_message" msgid="6892342981545727994">"음성 입력을 사용하려면 마이크 버튼을 누르거나 터치 키보드 위로 손가락을 미끄러지듯 움직이세요."</string> <string name="voice_listening" msgid="467518160751321844">"지금 말하세요."</string> <string name="voice_working" msgid="6666937792815731889">"인식 중"</string> - <!-- no translation found for voice_initializing (661962047129906646) --> - <skip /> + <string name="voice_initializing" msgid="661962047129906646"></string> <string name="voice_error" msgid="5140896300312186162">"오류가 발생했습니다. 다시 시도해 보세요."</string> <string name="voice_network_error" msgid="6649556447401862563">"연결할 수 없습니다."</string> <string name="voice_too_much_speech" msgid="5746973620134227376">"음성을 너무 많이 입력했습니다."</string> @@ -130,4 +130,12 @@ <string name="language_selection_summary" msgid="187110938289512256">"손가락을 스페이스바에서 미끄러지듯 움직여 언어 변경"</string> <string name="hint_add_to_dictionary" msgid="8058519710062071085">"← 저장하려면 다시 누르세요."</string> <string name="has_dictionary" msgid="6071847973466625007">"사전 사용 가능"</string> + <!-- no translation found for prefs_enable_log (6620424505072963557) --> + <skip /> + <!-- no translation found for prefs_description_log (5827825607258246003) --> + <skip /> + <!-- no translation found for keyboard_layout (437433231038683666) --> + <skip /> + <!-- no translation found for prefs_debug_mode (3889340783846594980) --> + <skip /> </resources> diff --git a/java/res/values-nb/strings.xml b/java/res/values-nb/strings.xml index 041d07eb3..4ff056ec5 100644 --- a/java/res/values-nb/strings.xml +++ b/java/res/values-nb/strings.xml @@ -39,14 +39,15 @@ <string name="auto_cap" msgid="1719746674854628252">"Stor forbokstav"</string> <string name="auto_cap_summary" msgid="3260681697600786825">"Start automatisk setninger med stor bokstav"</string> <string name="auto_punctuate" msgid="7276672334264521751">"Automatisk punktum"</string> - <!-- no translation found for auto_punctuate_summary (6589441565817502132) --> - <skip /> + <string name="auto_punctuate_summary" msgid="6589441565817502132"></string> <string name="quick_fixes" msgid="5353213327680897927">"Autokorrektur"</string> <string name="quick_fixes_summary" msgid="3405028402510332373">"Retter vanlige stavefeil"</string> <string name="show_suggestions" msgid="507074425254289133">"Vis forslag"</string> <string name="show_suggestions_summary" msgid="1989672863935759654">"Vis foreslåtte ord under skriving"</string> <string name="auto_complete" msgid="1103196318775486023">"Autofullføring"</string> <string name="auto_complete_summary" msgid="6113149638718274624">"Mellomrom og punktum setter automatisk inn valgt ord"</string> + <string name="bigram_suggestion" msgid="1323347224043514969">"Bigram-forslag"</string> + <string name="bigram_suggestion_summary" msgid="4383845146070101531">"Bruk forrige ord til å forbedre forslaget"</string> <string-array name="prediction_modes"> <item msgid="4870266572388153286">"Ingen"</item> <item msgid="1669461741568287396">"Grunnleggende"</item> @@ -89,8 +90,7 @@ <string name="voice_hint_dialog_message" msgid="6892342981545727994">"Du bruker talekommandoer ved å trykke på mikrofonknappen eller skyve fingeren over tastaturet på skjermen."</string> <string name="voice_listening" msgid="467518160751321844">"Snakk nå"</string> <string name="voice_working" msgid="6666937792815731889">"Arbeider"</string> - <!-- no translation found for voice_initializing (661962047129906646) --> - <skip /> + <string name="voice_initializing" msgid="661962047129906646"></string> <string name="voice_error" msgid="5140896300312186162">"Feil. Prøv på nytt."</string> <string name="voice_network_error" msgid="6649556447401862563">"Kunne ikke koble til"</string> <string name="voice_too_much_speech" msgid="5746973620134227376">"Feil – for mye tale"</string> @@ -130,4 +130,12 @@ <string name="language_selection_summary" msgid="187110938289512256">"Dra fingeren på mellomromstasten for å endre språk"</string> <string name="hint_add_to_dictionary" msgid="8058519710062071085">"← Trykk på nytt for å lagre"</string> <string name="has_dictionary" msgid="6071847973466625007">"Ordbok tilgjengelig"</string> + <!-- no translation found for prefs_enable_log (6620424505072963557) --> + <skip /> + <!-- no translation found for prefs_description_log (5827825607258246003) --> + <skip /> + <!-- no translation found for keyboard_layout (437433231038683666) --> + <skip /> + <!-- no translation found for prefs_debug_mode (3889340783846594980) --> + <skip /> </resources> diff --git a/java/res/values-nl/strings.xml b/java/res/values-nl/strings.xml index 00b197bf1..e65e67ccb 100644 --- a/java/res/values-nl/strings.xml +++ b/java/res/values-nl/strings.xml @@ -39,14 +39,15 @@ <string name="auto_cap" msgid="1719746674854628252">"Auto-hoofdlettergebruik"</string> <string name="auto_cap_summary" msgid="3260681697600786825">"Hoofdletter gebruiken aan het begin van een zin"</string> <string name="auto_punctuate" msgid="7276672334264521751">"Automatische interpunctie"</string> - <!-- no translation found for auto_punctuate_summary (6589441565817502132) --> - <skip /> + <string name="auto_punctuate_summary" msgid="6589441565817502132"></string> <string name="quick_fixes" msgid="5353213327680897927">"Snelle oplossingen"</string> <string name="quick_fixes_summary" msgid="3405028402510332373">"Hiermee worden veelvoorkomende typefouten gecorrigeerd"</string> <string name="show_suggestions" msgid="507074425254289133">"Suggesties weergeven"</string> <string name="show_suggestions_summary" msgid="1989672863935759654">"Voorgestelde woorden weergeven tijdens typen"</string> <string name="auto_complete" msgid="1103196318775486023">"Auto-aanvullen"</string> <string name="auto_complete_summary" msgid="6113149638718274624">"Gemarkeerd woord automatisch invoegen met spatiebalk en interpunctie"</string> + <string name="bigram_suggestion" msgid="1323347224043514969">"Digram-suggesties"</string> + <string name="bigram_suggestion_summary" msgid="4383845146070101531">"Vorig woord gebruiken om suggestie te verbeteren"</string> <string-array name="prediction_modes"> <item msgid="4870266572388153286">"Geen"</item> <item msgid="1669461741568287396">"Basis"</item> @@ -89,8 +90,7 @@ <string name="voice_hint_dialog_message" msgid="6892342981545727994">"Als u spraakinvoer gebruikt, drukt u op de microfoonknop of schuift u uw vinger over het schermtoetsenbord."</string> <string name="voice_listening" msgid="467518160751321844">"Nu spreken"</string> <string name="voice_working" msgid="6666937792815731889">"Wordt uitgevoerd"</string> - <!-- no translation found for voice_initializing (661962047129906646) --> - <skip /> + <string name="voice_initializing" msgid="661962047129906646"></string> <string name="voice_error" msgid="5140896300312186162">"Fout. Probeer het opnieuw."</string> <string name="voice_network_error" msgid="6649556447401862563">"Kan geen verbinding maken"</string> <string name="voice_too_much_speech" msgid="5746973620134227376">"Fout, te lange spraakinvoer."</string> @@ -130,4 +130,12 @@ <string name="language_selection_summary" msgid="187110938289512256">"Schuif uw vinger over de spatiebalk om de taal te wijzigen"</string> <string name="hint_add_to_dictionary" msgid="8058519710062071085">"← Tik nogmaals om op te slaan"</string> <string name="has_dictionary" msgid="6071847973466625007">"Woordenboek beschikbaar"</string> + <!-- no translation found for prefs_enable_log (6620424505072963557) --> + <skip /> + <!-- no translation found for prefs_description_log (5827825607258246003) --> + <skip /> + <!-- no translation found for keyboard_layout (437433231038683666) --> + <skip /> + <!-- no translation found for prefs_debug_mode (3889340783846594980) --> + <skip /> </resources> diff --git a/java/res/values-pl/strings.xml b/java/res/values-pl/strings.xml index 0c72727ce..7026f02c6 100644 --- a/java/res/values-pl/strings.xml +++ b/java/res/values-pl/strings.xml @@ -39,14 +39,15 @@ <string name="auto_cap" msgid="1719746674854628252">"Wstawiaj wielkie litery"</string> <string name="auto_cap_summary" msgid="3260681697600786825">"Zamieniaj na wielką pierwszą literę zdania"</string> <string name="auto_punctuate" msgid="7276672334264521751">"Automatyczna interpunkcja"</string> - <!-- no translation found for auto_punctuate_summary (6589441565817502132) --> - <skip /> + <string name="auto_punctuate_summary" msgid="6589441565817502132"></string> <string name="quick_fixes" msgid="5353213327680897927">"Szybkie poprawki"</string> <string name="quick_fixes_summary" msgid="3405028402510332373">"Poprawia częste błędy wpisywania"</string> <string name="show_suggestions" msgid="507074425254289133">"Pokaż sugestie"</string> <string name="show_suggestions_summary" msgid="1989672863935759654">"Wyświetl sugerowane słowa podczas wpisywania"</string> <string name="auto_complete" msgid="1103196318775486023">"Autouzupełnianie"</string> <string name="auto_complete_summary" msgid="6113149638718274624">"Spacja i znaki przestankowe wstawiają wyróżnione słowo"</string> + <string name="bigram_suggestion" msgid="1323347224043514969">"Sugestie dla bigramów"</string> + <string name="bigram_suggestion_summary" msgid="4383845146070101531">"Używaj poprzedniego wyrazu, aby polepszyć sugestię"</string> <string-array name="prediction_modes"> <item msgid="4870266572388153286">"Brak"</item> <item msgid="1669461741568287396">"Podstawowy"</item> @@ -89,8 +90,7 @@ <string name="voice_hint_dialog_message" msgid="6892342981545727994">"Aby skorzystać z wprowadzania głosowego, naciśnij przycisk mikrofonu lub przesuń palcem po klawiaturze ekranowej."</string> <string name="voice_listening" msgid="467518160751321844">"Mów teraz"</string> <string name="voice_working" msgid="6666937792815731889">"W toku"</string> - <!-- no translation found for voice_initializing (661962047129906646) --> - <skip /> + <string name="voice_initializing" msgid="661962047129906646"></string> <string name="voice_error" msgid="5140896300312186162">"Błąd. Spróbuj ponownie."</string> <string name="voice_network_error" msgid="6649556447401862563">"Nie można nawiązać połączenia"</string> <string name="voice_too_much_speech" msgid="5746973620134227376">"Błąd, zbyt długa wypowiedź."</string> @@ -130,4 +130,12 @@ <string name="language_selection_summary" msgid="187110938289512256">"Przesuń palcem po spacji, aby zmienić język"</string> <string name="hint_add_to_dictionary" msgid="8058519710062071085">"← Dotknij ponownie, aby zapisać"</string> <string name="has_dictionary" msgid="6071847973466625007">"Słownik dostępny"</string> + <!-- no translation found for prefs_enable_log (6620424505072963557) --> + <skip /> + <!-- no translation found for prefs_description_log (5827825607258246003) --> + <skip /> + <!-- no translation found for keyboard_layout (437433231038683666) --> + <skip /> + <!-- no translation found for prefs_debug_mode (3889340783846594980) --> + <skip /> </resources> diff --git a/java/res/values-pt-rPT/strings.xml b/java/res/values-pt-rPT/strings.xml index 35a9cb715..d94d84f35 100644 --- a/java/res/values-pt-rPT/strings.xml +++ b/java/res/values-pt-rPT/strings.xml @@ -39,14 +39,15 @@ <string name="auto_cap" msgid="1719746674854628252">"Letras maiúsculas automáticas"</string> <string name="auto_cap_summary" msgid="3260681697600786825">"Colocar inicial maiúscula no início de uma frase"</string> <string name="auto_punctuate" msgid="7276672334264521751">"Pontuação automática"</string> - <!-- no translation found for auto_punctuate_summary (6589441565817502132) --> - <skip /> + <string name="auto_punctuate_summary" msgid="6589441565817502132"></string> <string name="quick_fixes" msgid="5353213327680897927">"Correcções rápidas"</string> <string name="quick_fixes_summary" msgid="3405028402510332373">"Corrige os erros de escrita comuns"</string> <string name="show_suggestions" msgid="507074425254289133">"Mostrar sugestões"</string> <string name="show_suggestions_summary" msgid="1989672863935759654">"Apresentar sugestões de palavras ao escrever"</string> <string name="auto_complete" msgid="1103196318775486023">"Conclusão automática"</string> <string name="auto_complete_summary" msgid="6113149638718274624">"A barra de espaços e a pontuação inserem automaticamente uma palavra realçada"</string> + <string name="bigram_suggestion" msgid="1323347224043514969">"Sugestões Bigram"</string> + <string name="bigram_suggestion_summary" msgid="4383845146070101531">"Utilizar a palavra anterior para melhorar a sugestão"</string> <string-array name="prediction_modes"> <item msgid="4870266572388153286">"Nenhum"</item> <item msgid="1669461741568287396">"Básico"</item> @@ -89,8 +90,7 @@ <string name="voice_hint_dialog_message" msgid="6892342981545727994">"Para utilizar a entrada de voz, prima o botão do microfone ou deslize o dedo no teclado do ecrã."</string> <string name="voice_listening" msgid="467518160751321844">"Falar agora"</string> <string name="voice_working" msgid="6666937792815731889">"A executar"</string> - <!-- no translation found for voice_initializing (661962047129906646) --> - <skip /> + <string name="voice_initializing" msgid="661962047129906646"></string> <string name="voice_error" msgid="5140896300312186162">"Erro. Tente novamente."</string> <string name="voice_network_error" msgid="6649556447401862563">"Não foi possível ligar"</string> <string name="voice_too_much_speech" msgid="5746973620134227376">"Erro, discurso demasiado longo."</string> @@ -130,4 +130,12 @@ <string name="language_selection_summary" msgid="187110938289512256">"Deslize o dedo pela barra de espaço para alterar o idioma"</string> <string name="hint_add_to_dictionary" msgid="8058519710062071085">"← Toque novamente para guardar"</string> <string name="has_dictionary" msgid="6071847973466625007">"Dicionário disponível"</string> + <!-- no translation found for prefs_enable_log (6620424505072963557) --> + <skip /> + <!-- no translation found for prefs_description_log (5827825607258246003) --> + <skip /> + <!-- no translation found for keyboard_layout (437433231038683666) --> + <skip /> + <!-- no translation found for prefs_debug_mode (3889340783846594980) --> + <skip /> </resources> diff --git a/java/res/values-pt/strings.xml b/java/res/values-pt/strings.xml index 235fd65ac..a20ecccea 100644 --- a/java/res/values-pt/strings.xml +++ b/java/res/values-pt/strings.xml @@ -39,14 +39,15 @@ <string name="auto_cap" msgid="1719746674854628252">"Capitaliz. automática"</string> <string name="auto_cap_summary" msgid="3260681697600786825">"Colocar em maiúscula o início de uma frase"</string> <string name="auto_punctuate" msgid="7276672334264521751">"Pontuação automática"</string> - <!-- no translation found for auto_punctuate_summary (6589441565817502132) --> - <skip /> + <string name="auto_punctuate_summary" msgid="6589441565817502132"></string> <string name="quick_fixes" msgid="5353213327680897927">"Reparos rápidos"</string> <string name="quick_fixes_summary" msgid="3405028402510332373">"Corrige erros comuns de digitação"</string> <string name="show_suggestions" msgid="507074425254289133">"Mostrar sugestões"</string> <string name="show_suggestions_summary" msgid="1989672863935759654">"Exibir sugestões de palavras durante a digitação"</string> <string name="auto_complete" msgid="1103196318775486023">"Conclusão automática"</string> <string name="auto_complete_summary" msgid="6113149638718274624">"Barra de espaço e pontuação inserem a palavra destacada"</string> + <string name="bigram_suggestion" msgid="1323347224043514969">"Sugestões de bigrama"</string> + <string name="bigram_suggestion_summary" msgid="4383845146070101531">"Usar palavra anterior para melhorar a sugestão"</string> <string-array name="prediction_modes"> <item msgid="4870266572388153286">"Nenhum"</item> <item msgid="1669461741568287396">"Básico"</item> @@ -89,8 +90,7 @@ <string name="voice_hint_dialog_message" msgid="6892342981545727994">"Para usar a entrada de voz, pressione o botão com o microfone ou deslize o dedo sobre o teclado na tela."</string> <string name="voice_listening" msgid="467518160751321844">"Fale agora"</string> <string name="voice_working" msgid="6666937792815731889">"Trabalhando"</string> - <!-- no translation found for voice_initializing (661962047129906646) --> - <skip /> + <string name="voice_initializing" msgid="661962047129906646"></string> <string name="voice_error" msgid="5140896300312186162">"Erro. Tente novamente."</string> <string name="voice_network_error" msgid="6649556447401862563">"Não foi possível conectar"</string> <string name="voice_too_much_speech" msgid="5746973620134227376">"Erro, fala muito longa."</string> @@ -130,4 +130,12 @@ <string name="language_selection_summary" msgid="187110938289512256">"Deslize o dedo na barra de espaços para alterar o idioma"</string> <string name="hint_add_to_dictionary" msgid="8058519710062071085">"← Toque novamente para salvar"</string> <string name="has_dictionary" msgid="6071847973466625007">"Dicionário disponível"</string> + <!-- no translation found for prefs_enable_log (6620424505072963557) --> + <skip /> + <!-- no translation found for prefs_description_log (5827825607258246003) --> + <skip /> + <!-- no translation found for keyboard_layout (437433231038683666) --> + <skip /> + <!-- no translation found for prefs_debug_mode (3889340783846594980) --> + <skip /> </resources> diff --git a/java/res/values-ru/strings.xml b/java/res/values-ru/strings.xml index e27402c7f..a1b680ed3 100644 --- a/java/res/values-ru/strings.xml +++ b/java/res/values-ru/strings.xml @@ -39,14 +39,15 @@ <string name="auto_cap" msgid="1719746674854628252">"Автоподст. заглавных"</string> <string name="auto_cap_summary" msgid="3260681697600786825">"Делать заглавной первую букву предложения"</string> <string name="auto_punctuate" msgid="7276672334264521751">"Автопунктуация"</string> - <!-- no translation found for auto_punctuate_summary (6589441565817502132) --> - <skip /> + <string name="auto_punctuate_summary" msgid="6589441565817502132"></string> <string name="quick_fixes" msgid="5353213327680897927">"Быстрое исправление"</string> <string name="quick_fixes_summary" msgid="3405028402510332373">"Исправлять распространенные опечатки"</string> <string name="show_suggestions" msgid="507074425254289133">"Предлагать варианты"</string> <string name="show_suggestions_summary" msgid="1989672863935759654">"Предлагать варианты слов во время ввода"</string> <string name="auto_complete" msgid="1103196318775486023">"Автозавершение"</string> <string name="auto_complete_summary" msgid="6113149638718274624">"При нажатии пробела вставлять предложенное слово"</string> + <string name="bigram_suggestion" msgid="1323347224043514969">"Биграммные подсказки "</string> + <string name="bigram_suggestion_summary" msgid="4383845146070101531">"Используйте предыдущее слово, чтобы исправить подсказку"</string> <string-array name="prediction_modes"> <item msgid="4870266572388153286">"Нет"</item> <item msgid="1669461741568287396">"Основной"</item> @@ -89,8 +90,7 @@ <string name="voice_hint_dialog_message" msgid="6892342981545727994">"Чтобы использовать голосовой ввод, нажмите кнопку микрофона или проведите пальцем по экранной клавиатуре."</string> <string name="voice_listening" msgid="467518160751321844">"Говорите"</string> <string name="voice_working" msgid="6666937792815731889">"Выполняется обработка"</string> - <!-- no translation found for voice_initializing (661962047129906646) --> - <skip /> + <string name="voice_initializing" msgid="661962047129906646"></string> <string name="voice_error" msgid="5140896300312186162">"Ошибка. Повторите попытку."</string> <string name="voice_network_error" msgid="6649556447401862563">"Ошибка подключения"</string> <string name="voice_too_much_speech" msgid="5746973620134227376">"Слишком длинная фраза"</string> @@ -130,4 +130,12 @@ <string name="language_selection_summary" msgid="187110938289512256">"Для изменения языка проведите пальцем по пробелу"</string> <string name="hint_add_to_dictionary" msgid="8058519710062071085">"← Нажмите повторно, чтобы сохранить"</string> <string name="has_dictionary" msgid="6071847973466625007">"Доступен словарь"</string> + <!-- no translation found for prefs_enable_log (6620424505072963557) --> + <skip /> + <!-- no translation found for prefs_description_log (5827825607258246003) --> + <skip /> + <!-- no translation found for keyboard_layout (437433231038683666) --> + <skip /> + <!-- no translation found for prefs_debug_mode (3889340783846594980) --> + <skip /> </resources> diff --git a/java/res/values-sv/strings.xml b/java/res/values-sv/strings.xml index 9c6c22159..82f652997 100644 --- a/java/res/values-sv/strings.xml +++ b/java/res/values-sv/strings.xml @@ -39,14 +39,15 @@ <string name="auto_cap" msgid="1719746674854628252">"Automatiska versaler"</string> <string name="auto_cap_summary" msgid="3260681697600786825">"Använd versal i början av mening"</string> <string name="auto_punctuate" msgid="7276672334264521751">"Automatiska punkter"</string> - <!-- no translation found for auto_punctuate_summary (6589441565817502132) --> - <skip /> + <string name="auto_punctuate_summary" msgid="6589441565817502132"></string> <string name="quick_fixes" msgid="5353213327680897927">"Snabba lösningar"</string> <string name="quick_fixes_summary" msgid="3405028402510332373">"Åtgärdar automatiskt vanliga misstag"</string> <string name="show_suggestions" msgid="507074425254289133">"Visa förslag"</string> <string name="show_suggestions_summary" msgid="1989672863935759654">"Visar ordförslag när du skriver"</string> <string name="auto_complete" msgid="1103196318775486023">"Komplettera automatiskt"</string> <string name="auto_complete_summary" msgid="6113149638718274624">"Blanksteg och punkt infogar automatiskt markerat ord"</string> + <string name="bigram_suggestion" msgid="1323347224043514969">"Bigramförslag"</string> + <string name="bigram_suggestion_summary" msgid="4383845146070101531">"Förbättra förslaget med föregående ord"</string> <string-array name="prediction_modes"> <item msgid="4870266572388153286">"Inget"</item> <item msgid="1669461741568287396">"Grundinställningar"</item> @@ -89,8 +90,7 @@ <string name="voice_hint_dialog_message" msgid="6892342981545727994">"Om du vill använda röstinmatning trycker du på mikrofonknappen eller drar fingret över tangentbordet på skärmen."</string> <string name="voice_listening" msgid="467518160751321844">"Tala nu"</string> <string name="voice_working" msgid="6666937792815731889">"Fungerar"</string> - <!-- no translation found for voice_initializing (661962047129906646) --> - <skip /> + <string name="voice_initializing" msgid="661962047129906646"></string> <string name="voice_error" msgid="5140896300312186162">"Fel. Försök igen."</string> <string name="voice_network_error" msgid="6649556447401862563">"Det gick inte att ansluta"</string> <string name="voice_too_much_speech" msgid="5746973620134227376">"Fel, för mycket tal."</string> @@ -130,4 +130,12 @@ <string name="language_selection_summary" msgid="187110938289512256">"Dra med fingret på blanksteg om du vill ändra språk"</string> <string name="hint_add_to_dictionary" msgid="8058519710062071085">"← Peka igen för att spara"</string> <string name="has_dictionary" msgid="6071847973466625007">"En ordlista är tillgänglig"</string> + <!-- no translation found for prefs_enable_log (6620424505072963557) --> + <skip /> + <!-- no translation found for prefs_description_log (5827825607258246003) --> + <skip /> + <!-- no translation found for keyboard_layout (437433231038683666) --> + <skip /> + <!-- no translation found for prefs_debug_mode (3889340783846594980) --> + <skip /> </resources> diff --git a/java/res/values-tr/strings.xml b/java/res/values-tr/strings.xml index 0fbdc7da3..820327b0a 100644 --- a/java/res/values-tr/strings.xml +++ b/java/res/values-tr/strings.xml @@ -39,14 +39,15 @@ <string name="auto_cap" msgid="1719746674854628252">"Otomatik olarak büyük harf yap"</string> <string name="auto_cap_summary" msgid="3260681697600786825">"Cümlenin baş harfini büyük yap"</string> <string name="auto_punctuate" msgid="7276672334264521751">"Otomatik noktalama"</string> - <!-- no translation found for auto_punctuate_summary (6589441565817502132) --> - <skip /> + <string name="auto_punctuate_summary" msgid="6589441565817502132"></string> <string name="quick_fixes" msgid="5353213327680897927">"Hızlı onarımlar"</string> <string name="quick_fixes_summary" msgid="3405028402510332373">"Yaygın olarak yapılan yazım hatalarını düzeltir"</string> <string name="show_suggestions" msgid="507074425254289133">"Önerileri göster"</string> <string name="show_suggestions_summary" msgid="1989672863935759654">"Yazarken önerilen kelimeleri görüntüle"</string> <string name="auto_complete" msgid="1103196318775486023">"Otomatik tamamla"</string> <string name="auto_complete_summary" msgid="6113149638718274624">"Boşluk tuşu ve noktalama vurgulanan kelimeyi otomatik ekler"</string> + <string name="bigram_suggestion" msgid="1323347224043514969">"Bigram Önerileri"</string> + <string name="bigram_suggestion_summary" msgid="4383845146070101531">"Öneriyi geliştirmek için önceki kelimeyi kullanın"</string> <string-array name="prediction_modes"> <item msgid="4870266572388153286">"Yok"</item> <item msgid="1669461741568287396">"Temel"</item> @@ -89,8 +90,7 @@ <string name="voice_hint_dialog_message" msgid="6892342981545727994">"Ses girişini kullanmak için mikrofon düğmesine basın veya parmağınızı dokunmatik klavye üzerinde kaydırın."</string> <string name="voice_listening" msgid="467518160751321844">"Şimdi konuşun"</string> <string name="voice_working" msgid="6666937792815731889">"Çalışıyor"</string> - <!-- no translation found for voice_initializing (661962047129906646) --> - <skip /> + <string name="voice_initializing" msgid="661962047129906646"></string> <string name="voice_error" msgid="5140896300312186162">"Hata. Lütfen tekrar deneyin."</string> <string name="voice_network_error" msgid="6649556447401862563">"Bağlanamadı"</string> <string name="voice_too_much_speech" msgid="5746973620134227376">"Hata, çok uzun konuşma."</string> @@ -130,4 +130,12 @@ <string name="language_selection_summary" msgid="187110938289512256">"Dili değiştirmek için parmağınızı boşluk çubuğu üzerinde kaydırın"</string> <string name="hint_add_to_dictionary" msgid="8058519710062071085">"← Kaydetmek için tekrar dokunun"</string> <string name="has_dictionary" msgid="6071847973466625007">"Sözlük kullanılabilir"</string> + <!-- no translation found for prefs_enable_log (6620424505072963557) --> + <skip /> + <!-- no translation found for prefs_description_log (5827825607258246003) --> + <skip /> + <!-- no translation found for keyboard_layout (437433231038683666) --> + <skip /> + <!-- no translation found for prefs_debug_mode (3889340783846594980) --> + <skip /> </resources> diff --git a/java/res/values-zh-rCN/strings.xml b/java/res/values-zh-rCN/strings.xml index 9c9b25708..953c93b5a 100644 --- a/java/res/values-zh-rCN/strings.xml +++ b/java/res/values-zh-rCN/strings.xml @@ -39,14 +39,15 @@ <string name="auto_cap" msgid="1719746674854628252">"自动大写"</string> <string name="auto_cap_summary" msgid="3260681697600786825">"句首字母大写"</string> <string name="auto_punctuate" msgid="7276672334264521751">"自动加标点"</string> - <!-- no translation found for auto_punctuate_summary (6589441565817502132) --> - <skip /> + <string name="auto_punctuate_summary" msgid="6589441565817502132"></string> <string name="quick_fixes" msgid="5353213327680897927">"快速纠正"</string> <string name="quick_fixes_summary" msgid="3405028402510332373">"纠正常见的输入错误"</string> <string name="show_suggestions" msgid="507074425254289133">"显示建议"</string> <string name="show_suggestions_summary" msgid="1989672863935759654">"输入时启用联想提示"</string> <string name="auto_complete" msgid="1103196318775486023">"自动填写"</string> <string name="auto_complete_summary" msgid="6113149638718274624">"按空格键和标点符号时自动插入突出显示的字词"</string> + <string name="bigram_suggestion" msgid="1323347224043514969">"双连词建议"</string> + <string name="bigram_suggestion_summary" msgid="4383845146070101531">"使用以前的字词改进建议"</string> <string-array name="prediction_modes"> <item msgid="4870266572388153286">"无"</item> <item msgid="1669461741568287396">"基本模式"</item> @@ -89,8 +90,7 @@ <string name="voice_hint_dialog_message" msgid="6892342981545727994">"要使用语音输入,请按麦克风按钮或者在屏幕键盘上滑动手指。"</string> <string name="voice_listening" msgid="467518160751321844">"请开始说话"</string> <string name="voice_working" msgid="6666937792815731889">"正在处理"</string> - <!-- no translation found for voice_initializing (661962047129906646) --> - <skip /> + <string name="voice_initializing" msgid="661962047129906646"></string> <string name="voice_error" msgid="5140896300312186162">"出错,请重试。"</string> <string name="voice_network_error" msgid="6649556447401862563">"无法连接"</string> <string name="voice_too_much_speech" msgid="5746973620134227376">"出错,语音过长。"</string> @@ -130,4 +130,12 @@ <string name="language_selection_summary" msgid="187110938289512256">"在空格键上滑动手指可更改语言"</string> <string name="hint_add_to_dictionary" msgid="8058519710062071085">"← 再次点按即可保存"</string> <string name="has_dictionary" msgid="6071847973466625007">"提供字典"</string> + <!-- no translation found for prefs_enable_log (6620424505072963557) --> + <skip /> + <!-- no translation found for prefs_description_log (5827825607258246003) --> + <skip /> + <!-- no translation found for keyboard_layout (437433231038683666) --> + <skip /> + <!-- no translation found for prefs_debug_mode (3889340783846594980) --> + <skip /> </resources> diff --git a/java/res/values-zh-rTW/strings.xml b/java/res/values-zh-rTW/strings.xml index 4f83be405..7748589cb 100644 --- a/java/res/values-zh-rTW/strings.xml +++ b/java/res/values-zh-rTW/strings.xml @@ -39,14 +39,15 @@ <string name="auto_cap" msgid="1719746674854628252">"自動大寫"</string> <string name="auto_cap_summary" msgid="3260681697600786825">"句首字母大寫"</string> <string name="auto_punctuate" msgid="7276672334264521751">"自動標點"</string> - <!-- no translation found for auto_punctuate_summary (6589441565817502132) --> - <skip /> + <string name="auto_punctuate_summary" msgid="6589441565817502132"></string> <string name="quick_fixes" msgid="5353213327680897927">"快速修正"</string> <string name="quick_fixes_summary" msgid="3405028402510332373">"修正一般打字錯誤"</string> <string name="show_suggestions" msgid="507074425254289133">"顯示建議"</string> <string name="show_suggestions_summary" msgid="1989672863935759654">"打字時顯示建議字詞"</string> <string name="auto_complete" msgid="1103196318775486023">"自動完成"</string> <string name="auto_complete_summary" msgid="6113149638718274624">"在反白顯示的字詞處自動插入空白鍵和標點符號鍵盤"</string> + <string name="bigram_suggestion" msgid="1323347224043514969">"雙連詞建議"</string> + <string name="bigram_suggestion_summary" msgid="4383845146070101531">"使用前一個字詞來改善建議"</string> <string-array name="prediction_modes"> <item msgid="4870266572388153286">"無"</item> <item msgid="1669461741568287396">"基本模式"</item> @@ -89,8 +90,7 @@ <string name="voice_hint_dialog_message" msgid="6892342981545727994">"如要使用語音輸入,按下 [麥克風] 按鈕,或將手指滑過螢幕小鍵盤即可。"</string> <string name="voice_listening" msgid="467518160751321844">"請說話"</string> <string name="voice_working" msgid="6666937792815731889">"辨識中"</string> - <!-- no translation found for voice_initializing (661962047129906646) --> - <skip /> + <string name="voice_initializing" msgid="661962047129906646"></string> <string name="voice_error" msgid="5140896300312186162">"發生錯誤,請再試一次。"</string> <string name="voice_network_error" msgid="6649556447401862563">"無法連線"</string> <string name="voice_too_much_speech" msgid="5746973620134227376">"錯誤:語音內容過長。"</string> @@ -130,4 +130,12 @@ <string name="language_selection_summary" msgid="187110938289512256">"以手指在空白鍵上滑動可變更語言"</string> <string name="hint_add_to_dictionary" msgid="8058519710062071085">"← 再次輕按可儲存"</string> <string name="has_dictionary" msgid="6071847973466625007">"可使用字典"</string> + <!-- no translation found for prefs_enable_log (6620424505072963557) --> + <skip /> + <!-- no translation found for prefs_description_log (5827825607258246003) --> + <skip /> + <!-- no translation found for keyboard_layout (437433231038683666) --> + <skip /> + <!-- no translation found for prefs_debug_mode (3889340783846594980) --> + <skip /> </resources> diff --git a/java/src/com/android/inputmethod/latin/AutoDictionary.java b/java/src/com/android/inputmethod/latin/AutoDictionary.java index 94331d3f2..4fbb5b012 100644 --- a/java/src/com/android/inputmethod/latin/AutoDictionary.java +++ b/java/src/com/android/inputmethod/latin/AutoDictionary.java @@ -83,14 +83,14 @@ public class AutoDictionary extends ExpandableDictionary { sDictProjectionMap.put(COLUMN_LOCALE, COLUMN_LOCALE); } - private static DatabaseHelper mOpenHelper = null; + private static DatabaseHelper sOpenHelper = null; public AutoDictionary(Context context, LatinIME ime, String locale, int dicTypeId) { super(context, dicTypeId); mIme = ime; mLocale = locale; - if (mOpenHelper == null) { - mOpenHelper = new DatabaseHelper(getContext()); + if (sOpenHelper == null) { + sOpenHelper = new DatabaseHelper(getContext()); } if (mLocale != null && mLocale.length() > 1) { loadDictionary(); @@ -169,7 +169,7 @@ public class AutoDictionary extends ExpandableDictionary { // Nothing pending? Return if (mPendingWrites.isEmpty()) return; // Create a background thread to write the pending entries - new UpdateDbTask(getContext(), mOpenHelper, mPendingWrites, mLocale).execute(); + new UpdateDbTask(getContext(), sOpenHelper, mPendingWrites, mLocale).execute(); // Create a new map for writing new entries into while the old one is written to db mPendingWrites = new HashMap<String, Integer>(); } @@ -209,7 +209,7 @@ public class AutoDictionary extends ExpandableDictionary { qb.setProjectionMap(sDictProjectionMap); // Get the database and run the query - SQLiteDatabase db = mOpenHelper.getReadableDatabase(); + SQLiteDatabase db = sOpenHelper.getReadableDatabase(); Cursor c = qb.query(db, null, selection, selectionArgs, null, null, DEFAULT_SORT_ORDER); return c; diff --git a/java/src/com/android/inputmethod/latin/BinaryDictionary.java b/java/src/com/android/inputmethod/latin/BinaryDictionary.java index e2c0c4ccc..69c2b94f2 100644 --- a/java/src/com/android/inputmethod/latin/BinaryDictionary.java +++ b/java/src/com/android/inputmethod/latin/BinaryDictionary.java @@ -42,8 +42,8 @@ public class BinaryDictionary extends Dictionary { private static final String TAG = "BinaryDictionary"; private static final int MAX_ALTERNATIVES = 16; - private static final int MAX_WORDS = 16; - private static final int MAX_BIGRAMS = 255; // TODO Probably don't need all 255 + private static final int MAX_WORDS = 18; + private static final int MAX_BIGRAMS = 60; private static final int TYPED_LETTER_MULTIPLIER = 2; private static final boolean ENABLE_MISSED_CHARACTERS = true; @@ -140,8 +140,10 @@ public class BinaryDictionary extends Dictionary { Log.w(TAG, "No available memory for binary dictionary"); } finally { try { - for (int i = 0;i < is.length; i++) { - is[i].close(); + if (is != null) { + for (int i = 0; i < is.length; i++) { + is[i].close(); + } } } catch (IOException e) { Log.w(TAG, "Failed to close input stream"); diff --git a/java/src/com/android/inputmethod/latin/CandidateView.java b/java/src/com/android/inputmethod/latin/CandidateView.java index faf72c996..7fcc3d532 100755 --- a/java/src/com/android/inputmethod/latin/CandidateView.java +++ b/java/src/com/android/inputmethod/latin/CandidateView.java @@ -341,6 +341,12 @@ public class CandidateView extends View { mShowingAddToDictionary = true; } + public boolean dismissAddToDictionaryHint() { + if (!mShowingAddToDictionary) return false; + clear(); + return true; + } + public void scrollPrev() { int i = 0; final int count = Math.min(mSuggestions.size(), MAX_SUGGESTIONS); diff --git a/java/src/com/android/inputmethod/latin/ContactsDictionary.java b/java/src/com/android/inputmethod/latin/ContactsDictionary.java index 756782887..ab75868cf 100644 --- a/java/src/com/android/inputmethod/latin/ContactsDictionary.java +++ b/java/src/com/android/inputmethod/latin/ContactsDictionary.java @@ -125,8 +125,8 @@ public class ContactsDictionary extends ExpandableDictionary { super.addWord(word, FREQUENCY_FOR_CONTACTS); if (!TextUtils.isEmpty(prevWord)) { // TODO Do not add email address - super.addBigrams(prevWord, word, - FREQUENCY_FOR_CONTACTS_BIGRAM); + // Not so critical + super.setBigram(prevWord, word, FREQUENCY_FOR_CONTACTS_BIGRAM); } prevWord = word; } diff --git a/java/src/com/android/inputmethod/latin/ExpandableDictionary.java b/java/src/com/android/inputmethod/latin/ExpandableDictionary.java index 53f9ed8c8..e954c0818 100644 --- a/java/src/com/android/inputmethod/latin/ExpandableDictionary.java +++ b/java/src/com/android/inputmethod/latin/ExpandableDictionary.java @@ -20,8 +20,6 @@ import java.util.LinkedList; import android.content.Context; import android.os.AsyncTask; -import android.os.SystemClock; -import android.util.Log; /** * Base class for an in-memory dictionary that can grow dynamically and can @@ -325,12 +323,21 @@ public class ExpandableDictionary extends Dictionary { } } + protected int setBigram(String word1, String word2, int frequency) { + return addOrSetBigram(word1, word2, frequency, false); + } + + protected int addBigram(String word1, String word2, int frequency) { + return addOrSetBigram(word1, word2, frequency, true); + } + /** * Adds bigrams to the in-memory trie structure that is being used to retrieve any word - * @param addFrequency adding frequency of the pair + * @param frequency frequency for this bigrams + * @param addFrequency if true, it adds to current frequency * @return returns the final frequency */ - protected int addBigrams(String word1, String word2, int addFrequency) { + private int addOrSetBigram(String word1, String word2, int frequency, boolean addFrequency) { Node firstWord = searchWord(mRoots, word1, 0, null); Node secondWord = searchWord(mRoots, word2, 0, null); LinkedList<NextWord> bigram = firstWord.ngrams; @@ -340,14 +347,18 @@ public class ExpandableDictionary extends Dictionary { } else { for (NextWord nw : bigram) { if (nw.word == secondWord) { - nw.frequency += addFrequency; + if (addFrequency) { + nw.frequency += frequency; + } else { + nw.frequency = frequency; + } return nw.frequency; } } } - NextWord nw = new NextWord(secondWord, addFrequency); + NextWord nw = new NextWord(secondWord, frequency); firstWord.ngrams.add(nw); - return addFrequency; + return frequency; } /** @@ -385,22 +396,44 @@ public class ExpandableDictionary extends Dictionary { return searchWord(childNode.children, word, depth + 1, childNode); } - @Override - public void getBigrams(final WordComposer codes, final CharSequence previousWord, - final WordCallback callback, int[] nextLettersFrequencies) { + // @VisibleForTesting + boolean reloadDictionaryIfRequired() { synchronized (mUpdatingLock) { // If we need to update, start off a background task if (mRequiresReload) startDictionaryLoadingTaskLocked(); // Currently updating contacts, don't return any results. - if (mUpdatingDictionary) return; + return mUpdatingDictionary; } + } + private void runReverseLookUp(final CharSequence previousWord, final WordCallback callback) { Node prevWord = searchNode(mRoots, previousWord, 0, previousWord.length()); if (prevWord != null && prevWord.ngrams != null) { reverseLookUp(prevWord.ngrams, callback); } } + @Override + public void getBigrams(final WordComposer codes, final CharSequence previousWord, + final WordCallback callback, int[] nextLettersFrequencies) { + if (!reloadDictionaryIfRequired()) { + runReverseLookUp(previousWord, callback); + } + } + + /** + * Used only for testing purposes + * This function will wait for loading from database to be done + */ + void waitForDictionaryLoading() { + while (mUpdatingDictionary) { + try { + Thread.sleep(100); + } catch (InterruptedException e) { + } + } + } + /** * reverseLookUp retrieves the full word given a list of terminal nodes and adds those words * through callback. @@ -413,15 +446,18 @@ public class ExpandableDictionary extends Dictionary { for (NextWord nextWord : terminalNodes) { node = nextWord.word; freq = nextWord.frequency; - sb.setLength(0); - do { - sb.insert(0, node.code); - node = node.parent; - } while(node != null); - - // TODO better way to feed char array? - callback.addWord(sb.toString().toCharArray(), 0, sb.length(), freq, mDicTypeId, - DataType.BIGRAM); + // TODO Not the best way to limit suggestion threshold + if (freq >= UserBigramDictionary.SUGGEST_THRESHOLD) { + sb.setLength(0); + do { + sb.insert(0, node.code); + node = node.parent; + } while(node != null); + + // TODO better way to feed char array? + callback.addWord(sb.toString().toCharArray(), 0, sb.length(), freq, mDicTypeId, + DataType.BIGRAM); + } } } @@ -460,18 +496,11 @@ public class ExpandableDictionary extends Dictionary { @Override protected Void doInBackground(Void... v) { loadDictionaryAsync(); - return null; - } - - @Override - protected void onPostExecute(Void result) { - // TODO Auto-generated method stub synchronized (mUpdatingLock) { mUpdatingDictionary = false; } - super.onPostExecute(result); + return null; } - } static char toLowerCase(char c) { diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java index bbca316a4..3ee9fe8eb 100644 --- a/java/src/com/android/inputmethod/latin/LatinIME.java +++ b/java/src/com/android/inputmethod/latin/LatinIME.java @@ -163,8 +163,7 @@ public class LatinIME extends InputMethodService KeyboardSwitcher mKeyboardSwitcher; private UserDictionary mUserDictionary; - // User Bigram is disabled for now - //private UserBigramDictionary mUserBigramDictionary; + private UserBigramDictionary mUserBigramDictionary; private ContactsDictionary mContactsDictionary; private AutoDictionary mAutoDictionary; @@ -454,15 +453,12 @@ public class LatinIME extends InputMethodService mAutoDictionary.close(); } mAutoDictionary = new AutoDictionary(this, this, mInputLocale, Suggest.DIC_AUTO); - // User Bigram is disabled for now - /* if (mUserBigramDictionary != null) { mUserBigramDictionary.close(); } mUserBigramDictionary = new UserBigramDictionary(this, this, mInputLocale, - Suggest.DIC_USERBIGRAM); + Suggest.DIC_USER); mSuggest.setUserBigramDictionary(mUserBigramDictionary); - */ mSuggest.setUserDictionary(mUserDictionary); mSuggest.setContactsDictionary(mContactsDictionary); mSuggest.setAutoDictionary(mAutoDictionary); @@ -698,8 +694,7 @@ public class LatinIME extends InputMethodService mKeyboardSwitcher.getInputView().closing(); } if (mAutoDictionary != null) mAutoDictionary.flushPendingWrites(); - // User Bigram is disabled for now - //if (mUserBigramDictionary != null) mUserBigramDictionary.flushPendingWrites(); + if (mUserBigramDictionary != null) mUserBigramDictionary.flushPendingWrites(); } @Override @@ -1060,6 +1055,9 @@ public class LatinIME extends InputMethodService public boolean addWordToDictionary(String word) { mUserDictionary.addWord(word, 128); + // Suggestion strip should be updated after the operation of adding word to the + // user dictionary + postUpdateSuggestions(); return true; } @@ -1211,9 +1209,20 @@ public class LatinIME extends InputMethodService } else if (mEnteredText != null && sameAsTextBeforeCursor(ic, mEnteredText)) { ic.deleteSurroundingText(mEnteredText.length(), 0); } else if (deleteChar) { - sendDownUpKeyEvents(KeyEvent.KEYCODE_DEL); - if (mDeleteCount > DELETE_ACCELERATE_AT) { + if (mCandidateView != null && mCandidateView.dismissAddToDictionaryHint()) { + // Go back to the suggestion mode if the user canceled the + // "Tap again to save". + // NOTE: In gerenal, we don't revert the word when backspacing + // from a manual suggestion pick. We deliberately chose a + // different behavior only in the case of picking the first + // suggestion (typed word). It's intentional to have made this + // inconsistent with backspacing after selecting other suggestions. + revertLastWord(deleteChar); + } else { sendDownUpKeyEvents(KeyEvent.KEYCODE_DEL); + if (mDeleteCount > DELETE_ACCELERATE_AT) { + sendDownUpKeyEvents(KeyEvent.KEYCODE_DEL); + } } } mJustRevertedSeparator = null; @@ -1305,6 +1314,11 @@ public class LatinIME extends InputMethodService mVoiceInput.incrementTextModificationInsertPunctuationCount(1); } + // Should dismiss the "Tap again to save" message when handling separator + if (mCandidateView != null && mCandidateView.dismissAddToDictionaryHint()) { + postUpdateSuggestions(); + } + boolean pickedDefault = false; // Handle separator InputConnection ic = getCurrentInputConnection(); @@ -1375,6 +1389,11 @@ public class LatinIME extends InputMethodService mWord.reset(); return; } + // Skip if result is null. It happens in some edge case. + if (TextUtils.isEmpty(result)) { + return; + } + // Make a copy of the CharSequence, since it is/could be a mutable CharSequence final String resultCopy = result.toString(); TypedWordAlternatives entry = new TypedWordAlternatives(resultCopy, @@ -1983,15 +2002,14 @@ public class LatinIME extends InputMethodService && !mSuggest.isValidWord(suggestion.toString().toLowerCase()))) { mAutoDictionary.addWord(suggestion.toString(), frequencyDelta); } - // User Bigram is disabled for now - /* + if (mUserBigramDictionary != null) { - CharSequence prevWord = EditingUtil.getPreviousWord(getCurrentInputConnection()); + CharSequence prevWord = EditingUtil.getPreviousWord(getCurrentInputConnection(), + mSentenceSeparators); if (!TextUtils.isEmpty(prevWord)) { - mUserBigramDictionary.addBigrams(prevWord.toString(), suggestion.toString(), 1); + mUserBigramDictionary.addBigrams(prevWord.toString(), suggestion.toString()); } } - */ } } diff --git a/java/src/com/android/inputmethod/latin/Suggest.java b/java/src/com/android/inputmethod/latin/Suggest.java index cfb691021..a96737f5c 100755 --- a/java/src/com/android/inputmethod/latin/Suggest.java +++ b/java/src/com/android/inputmethod/latin/Suggest.java @@ -78,12 +78,13 @@ public class Suggest implements Dictionary.WordCallback { private Dictionary mUserBigramDictionary; private int mPrefMaxSuggestions = 12; - private int mPrefMaxBigrams = 255; + + private static final int PREF_MAX_BIGRAMS = 60; private boolean mAutoTextEnabled; private int[] mPriorities = new int[mPrefMaxSuggestions]; - private int[] mBigramPriorities = new int[mPrefMaxBigrams]; + private int[] mBigramPriorities = new int[PREF_MAX_BIGRAMS]; // Handle predictive correction for only the first 1280 characters for performance reasons // If we support scripts that need latin characters beyond that, we should probably use some @@ -92,7 +93,7 @@ public class Suggest implements Dictionary.WordCallback { // latin characters. private int[] mNextLettersFrequencies = new int[1280]; private ArrayList<CharSequence> mSuggestions = new ArrayList<CharSequence>(); - private ArrayList<CharSequence> mBigramSuggestions = new ArrayList<CharSequence>(); + ArrayList<CharSequence> mBigramSuggestions = new ArrayList<CharSequence>(); private ArrayList<CharSequence> mStringPool = new ArrayList<CharSequence>(); private boolean mHaveCorrection; private CharSequence mOriginalWord; @@ -173,7 +174,7 @@ public class Suggest implements Dictionary.WordCallback { } mPrefMaxSuggestions = maxSuggestions; mPriorities = new int[mPrefMaxSuggestions]; - mBigramPriorities = new int[mPrefMaxBigrams]; + mBigramPriorities = new int[PREF_MAX_BIGRAMS]; collectGarbage(mSuggestions, mPrefMaxSuggestions); while (mStringPool.size() < mPrefMaxSuggestions) { StringBuilder sb = new StringBuilder(getApproxMaxWordLength()); @@ -242,7 +243,7 @@ public class Suggest implements Dictionary.WordCallback { || mCorrectionMode == CORRECTION_BASIC)) { // At first character typed, search only the bigrams Arrays.fill(mBigramPriorities, 0); - collectGarbage(mBigramSuggestions, mPrefMaxBigrams); + collectGarbage(mBigramSuggestions, PREF_MAX_BIGRAMS); if (!TextUtils.isEmpty(prevWordForBigram)) { CharSequence lowerPrevWord = prevWordForBigram.toString().toLowerCase(); @@ -401,7 +402,7 @@ public class Suggest implements Dictionary.WordCallback { if(dataType == Dictionary.DataType.BIGRAM) { suggestions = mBigramSuggestions; priorities = mBigramPriorities; - prefMaxSuggestions = mPrefMaxBigrams; + prefMaxSuggestions = PREF_MAX_BIGRAMS; } else { suggestions = mSuggestions; priorities = mPriorities; @@ -443,7 +444,6 @@ public class Suggest implements Dictionary.WordCallback { pos++; } } - if (pos >= prefMaxSuggestions) { return true; } diff --git a/java/src/com/android/inputmethod/latin/UserBigramDictionary.java b/java/src/com/android/inputmethod/latin/UserBigramDictionary.java new file mode 100644 index 000000000..c3eab94f1 --- /dev/null +++ b/java/src/com/android/inputmethod/latin/UserBigramDictionary.java @@ -0,0 +1,402 @@ +/* + * Copyright (C) 2010 Google Inc. + * + * 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; + +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; + +import android.content.ContentValues; +import android.content.Context; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteOpenHelper; +import android.database.sqlite.SQLiteQueryBuilder; +import android.os.AsyncTask; +import android.provider.BaseColumns; +import android.util.Log; + +/** + * Stores all the pairs user types in databases. Prune the database if the size + * gets too big. Unlike AutoDictionary, it even stores the pairs that are already + * in the dictionary. + */ +public class UserBigramDictionary extends ExpandableDictionary { + private static final String TAG = "UserBigramDictionary"; + + /** Any pair being typed or picked */ + private static final int FREQUENCY_FOR_TYPED = 2; + + /** Maximum frequency for all pairs */ + private static final int FREQUENCY_MAX = 127; + + /** + * If this pair is typed 6 times, it would be suggested. + * Should be smaller than ContactsDictionary.FREQUENCY_FOR_CONTACTS_BIGRAM + */ + protected static final int SUGGEST_THRESHOLD = 6 * FREQUENCY_FOR_TYPED; + + /** Maximum number of pairs. Pruning will start when databases goes above this number. */ + private static int sMaxUserBigrams = 10000; + + /** + * When it hits maximum bigram pair, it will delete until you are left with + * only (sMaxUserBigrams - sDeleteUserBigrams) pairs. + * Do not keep this number small to avoid deleting too often. + */ + private static int sDeleteUserBigrams = 1000; + + /** + * Database version should increase if the database structure changes + */ + private static final int DATABASE_VERSION = 1; + + private static final String DATABASE_NAME = "userbigram_dict.db"; + + /** Name of the words table in the database */ + private static final String MAIN_TABLE_NAME = "main"; + // TODO: Consume less space by using a unique id for locale instead of the whole + // 2-5 character string. (Same TODO from AutoDictionary) + private static final String MAIN_COLUMN_ID = BaseColumns._ID; + private static final String MAIN_COLUMN_WORD1 = "word1"; + private static final String MAIN_COLUMN_WORD2 = "word2"; + private static final String MAIN_COLUMN_LOCALE = "locale"; + + /** Name of the frequency table in the database */ + private static final String FREQ_TABLE_NAME = "frequency"; + private static final String FREQ_COLUMN_ID = BaseColumns._ID; + private static final String FREQ_COLUMN_PAIR_ID = "pair_id"; + private static final String FREQ_COLUMN_FREQUENCY = "freq"; + + private final LatinIME mIme; + + /** Locale for which this auto dictionary is storing words */ + private String mLocale; + + private HashSet<Bigram> mPendingWrites = new HashSet<Bigram>(); + private final Object mPendingWritesLock = new Object(); + private static volatile boolean sUpdatingDB = false; + + private final static HashMap<String, String> sDictProjectionMap; + + static { + sDictProjectionMap = new HashMap<String, String>(); + sDictProjectionMap.put(MAIN_COLUMN_ID, MAIN_COLUMN_ID); + sDictProjectionMap.put(MAIN_COLUMN_WORD1, MAIN_COLUMN_WORD1); + sDictProjectionMap.put(MAIN_COLUMN_WORD2, MAIN_COLUMN_WORD2); + sDictProjectionMap.put(MAIN_COLUMN_LOCALE, MAIN_COLUMN_LOCALE); + + sDictProjectionMap.put(FREQ_COLUMN_ID, FREQ_COLUMN_ID); + sDictProjectionMap.put(FREQ_COLUMN_PAIR_ID, FREQ_COLUMN_PAIR_ID); + sDictProjectionMap.put(FREQ_COLUMN_FREQUENCY, FREQ_COLUMN_FREQUENCY); + } + + private static DatabaseHelper sOpenHelper = null; + + private static class Bigram { + String word1; + String word2; + int frequency; + + Bigram(String word1, String word2, int frequency) { + this.word1 = word1; + this.word2 = word2; + this.frequency = frequency; + } + + @Override + public boolean equals(Object bigram) { + Bigram bigram2 = (Bigram) bigram; + return (word1.equals(bigram2.word1) && word2.equals(bigram2.word2)); + } + + @Override + public int hashCode() { + return (word1 + " " + word2).hashCode(); + } + } + + public void setDatabaseMax(int maxUserBigram) { + sMaxUserBigrams = maxUserBigram; + } + + public void setDatabaseDelete(int deleteUserBigram) { + sDeleteUserBigrams = deleteUserBigram; + } + + public UserBigramDictionary(Context context, LatinIME ime, String locale, int dicTypeId) { + super(context, dicTypeId); + mIme = ime; + mLocale = locale; + if (sOpenHelper == null) { + sOpenHelper = new DatabaseHelper(getContext()); + } + if (mLocale != null && mLocale.length() > 1) { + loadDictionary(); + } + } + + @Override + public void close() { + flushPendingWrites(); + // Don't close the database as locale changes will require it to be reopened anyway + // Also, the database is written to somewhat frequently, so it needs to be kept alive + // throughout the life of the process. + // mOpenHelper.close(); + super.close(); + } + + /** + * Pair will be added to the userbigram database. + */ + public int addBigrams(String word1, String word2) { + // remove caps + if (mIme != null && mIme.getCurrentWord().isAutoCapitalized()) { + word2 = Character.toLowerCase(word2.charAt(0)) + word2.substring(1); + } + + int freq = super.addBigram(word1, word2, FREQUENCY_FOR_TYPED); + if (freq > FREQUENCY_MAX) freq = FREQUENCY_MAX; + synchronized (mPendingWritesLock) { + if (freq == FREQUENCY_FOR_TYPED || mPendingWrites.isEmpty()) { + mPendingWrites.add(new Bigram(word1, word2, freq)); + } else { + Bigram bi = new Bigram(word1, word2, freq); + mPendingWrites.remove(bi); + mPendingWrites.add(bi); + } + } + + return freq; + } + + /** + * Schedules a background thread to write any pending words to the database. + */ + public void flushPendingWrites() { + synchronized (mPendingWritesLock) { + // Nothing pending? Return + if (mPendingWrites.isEmpty()) return; + // Create a background thread to write the pending entries + new UpdateDbTask(getContext(), sOpenHelper, mPendingWrites, mLocale).execute(); + // Create a new map for writing new entries into while the old one is written to db + mPendingWrites = new HashSet<Bigram>(); + } + } + + /** Used for testing purpose **/ + void waitUntilUpdateDBDone() { + synchronized (mPendingWritesLock) { + while (sUpdatingDB) { + try { + Thread.sleep(100); + } catch (InterruptedException e) { + } + } + return; + } + } + + @Override + public void loadDictionaryAsync() { + // Load the words that correspond to the current input locale + Cursor cursor = query(MAIN_COLUMN_LOCALE + "=?", new String[] { mLocale }); + try { + if (cursor.moveToFirst()) { + int word1Index = cursor.getColumnIndex(MAIN_COLUMN_WORD1); + int word2Index = cursor.getColumnIndex(MAIN_COLUMN_WORD2); + int frequencyIndex = cursor.getColumnIndex(FREQ_COLUMN_FREQUENCY); + while (!cursor.isAfterLast()) { + String word1 = cursor.getString(word1Index); + String word2 = cursor.getString(word2Index); + int frequency = cursor.getInt(frequencyIndex); + // Safeguard against adding really long words. Stack may overflow due + // to recursive lookup + if (word1.length() < MAX_WORD_LENGTH && word2.length() < MAX_WORD_LENGTH) { + super.setBigram(word1, word2, frequency); + } + cursor.moveToNext(); + } + } + } finally { + cursor.close(); + } + } + + /** + * Query the database + */ + private Cursor query(String selection, String[] selectionArgs) { + SQLiteQueryBuilder qb = new SQLiteQueryBuilder(); + + // main INNER JOIN frequency ON (main._id=freq.pair_id) + qb.setTables(MAIN_TABLE_NAME + " INNER JOIN " + FREQ_TABLE_NAME + " ON (" + + MAIN_TABLE_NAME + "." + MAIN_COLUMN_ID + "=" + FREQ_TABLE_NAME + "." + + FREQ_COLUMN_PAIR_ID +")"); + + qb.setProjectionMap(sDictProjectionMap); + + // Get the database and run the query + SQLiteDatabase db = sOpenHelper.getReadableDatabase(); + Cursor c = qb.query(db, + new String[] { MAIN_COLUMN_WORD1, MAIN_COLUMN_WORD2, FREQ_COLUMN_FREQUENCY }, + selection, selectionArgs, null, null, null); + return c; + } + + /** + * This class helps open, create, and upgrade the database file. + */ + private static class DatabaseHelper extends SQLiteOpenHelper { + + DatabaseHelper(Context context) { + super(context, DATABASE_NAME, null, DATABASE_VERSION); + } + + @Override + public void onCreate(SQLiteDatabase db) { + db.execSQL("PRAGMA foreign_keys = ON;"); + db.execSQL("CREATE TABLE " + MAIN_TABLE_NAME + " (" + + MAIN_COLUMN_ID + " INTEGER PRIMARY KEY," + + MAIN_COLUMN_WORD1 + " TEXT," + + MAIN_COLUMN_WORD2 + " TEXT," + + MAIN_COLUMN_LOCALE + " TEXT" + + ");"); + db.execSQL("CREATE TABLE " + FREQ_TABLE_NAME + " (" + + FREQ_COLUMN_ID + " INTEGER PRIMARY KEY," + + FREQ_COLUMN_PAIR_ID + " INTEGER," + + FREQ_COLUMN_FREQUENCY + " INTEGER," + + "FOREIGN KEY(" + FREQ_COLUMN_PAIR_ID + ") REFERENCES " + MAIN_TABLE_NAME + + "(" + MAIN_COLUMN_ID + ")" + " ON DELETE CASCADE" + + ");"); + } + + @Override + public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { + Log.w(TAG, "Upgrading database from version " + oldVersion + " to " + + newVersion + ", which will destroy all old data"); + db.execSQL("DROP TABLE IF EXISTS " + MAIN_TABLE_NAME); + db.execSQL("DROP TABLE IF EXISTS " + FREQ_TABLE_NAME); + onCreate(db); + } + } + + /** + * Async task to write pending words to the database so that it stays in sync with + * the in-memory trie. + */ + private static class UpdateDbTask extends AsyncTask<Void, Void, Void> { + private final HashSet<Bigram> mMap; + private final DatabaseHelper mDbHelper; + private final String mLocale; + + public UpdateDbTask(Context context, DatabaseHelper openHelper, + HashSet<Bigram> pendingWrites, String locale) { + mMap = pendingWrites; + mLocale = locale; + mDbHelper = openHelper; + } + + /** Prune any old data if the database is getting too big. */ + private void checkPruneData(SQLiteDatabase db) { + db.execSQL("PRAGMA foreign_keys = ON;"); + Cursor c = db.query(FREQ_TABLE_NAME, new String[] { FREQ_COLUMN_PAIR_ID }, + null, null, null, null, null); + try { + int totalRowCount = c.getCount(); + // prune out old data if we have too much data + if (totalRowCount > sMaxUserBigrams) { + int numDeleteRows = (totalRowCount - sMaxUserBigrams) + sDeleteUserBigrams; + int pairIdColumnId = c.getColumnIndex(FREQ_COLUMN_PAIR_ID); + c.moveToFirst(); + int count = 0; + while (count < numDeleteRows && !c.isAfterLast()) { + String pairId = c.getString(pairIdColumnId); + // Deleting from MAIN table will delete the frequencies + // due to FOREIGN KEY .. ON DELETE CASCADE + db.delete(MAIN_TABLE_NAME, MAIN_COLUMN_ID + "=?", + new String[] { pairId }); + c.moveToNext(); + count++; + } + } + } finally { + c.close(); + } + } + + @Override + protected void onPreExecute() { + sUpdatingDB = true; + } + + @Override + protected Void doInBackground(Void... v) { + SQLiteDatabase db = mDbHelper.getWritableDatabase(); + db.execSQL("PRAGMA foreign_keys = ON;"); + // Write all the entries to the db + Iterator<Bigram> iterator = mMap.iterator(); + while (iterator.hasNext()) { + Bigram bi = iterator.next(); + + // find pair id + Cursor c = db.query(MAIN_TABLE_NAME, new String[] { MAIN_COLUMN_ID }, + MAIN_COLUMN_WORD1 + "=? AND " + MAIN_COLUMN_WORD2 + "=? AND " + + MAIN_COLUMN_LOCALE + "=?", + new String[] { bi.word1, bi.word2, mLocale }, null, null, null); + + int pairId; + if (c.moveToFirst()) { + // existing pair + pairId = c.getInt(c.getColumnIndex(MAIN_COLUMN_ID)); + db.delete(FREQ_TABLE_NAME, FREQ_COLUMN_PAIR_ID + "=?", + new String[] { Integer.toString(pairId) }); + } else { + // new pair + Long pairIdLong = db.insert(MAIN_TABLE_NAME, null, + getContentValues(bi.word1, bi.word2, mLocale)); + pairId = pairIdLong.intValue(); + } + c.close(); + + // insert new frequency + long s = db.insert(FREQ_TABLE_NAME, null, + getFrequencyContentValues(pairId, bi.frequency)); + } + checkPruneData(db); + sUpdatingDB = false; + + return null; + } + + private ContentValues getContentValues(String word1, String word2, String locale) { + ContentValues values = new ContentValues(3); + values.put(MAIN_COLUMN_WORD1, word1); + values.put(MAIN_COLUMN_WORD2, word2); + values.put(MAIN_COLUMN_LOCALE, locale); + return values; + } + + private ContentValues getFrequencyContentValues(int pairId, int frequency) { + ContentValues values = new ContentValues(2); + values.put(FREQ_COLUMN_PAIR_ID, pairId); + values.put(FREQ_COLUMN_FREQUENCY, frequency); + return values; + } + } + +} |