aboutsummaryrefslogtreecommitdiffstats
path: root/java
diff options
context:
space:
mode:
Diffstat (limited to 'java')
-rw-r--r--java/proguard.flags5
-rw-r--r--java/res/drawable-hdpi/emoji_category_tab_selected_lxx_dark.9.pngbin137 -> 0 bytes
-rw-r--r--java/res/drawable-hdpi/emoji_category_tab_unselected_lxx_dark.9.pngbin142 -> 0 bytes
-rw-r--r--java/res/drawable-mdpi/emoji_category_tab_selected_lxx_dark.9.pngbin137 -> 0 bytes
-rw-r--r--java/res/drawable-mdpi/emoji_category_tab_unselected_lxx_dark.9.pngbin141 -> 0 bytes
-rw-r--r--java/res/drawable-xhdpi/emoji_category_tab_selected_lxx_dark.9.pngbin138 -> 0 bytes
-rw-r--r--java/res/drawable-xhdpi/emoji_category_tab_unselected_lxx_dark.9.pngbin143 -> 0 bytes
-rw-r--r--java/res/drawable-xxhdpi/emoji_category_tab_selected_lxx_dark.9.pngbin113 -> 0 bytes
-rw-r--r--java/res/drawable-xxhdpi/emoji_category_tab_unselected_lxx_dark.9.pngbin93 -> 0 bytes
-rw-r--r--java/res/layout/emoji_palettes_view.xml7
-rw-r--r--java/res/layout/research_feedback_activity.xml31
-rw-r--r--java/res/layout/research_feedback_fragment_layout.xml115
-rw-r--r--java/res/layout/research_feedback_layout.xml50
-rw-r--r--java/res/values-af/strings-action-keys.xml2
-rw-r--r--java/res/values-af/strings-talkback-descriptions.xml8
-rw-r--r--java/res/values-af/strings.xml4
-rw-r--r--java/res/values-am/strings-action-keys.xml2
-rw-r--r--java/res/values-am/strings-talkback-descriptions.xml8
-rw-r--r--java/res/values-am/strings.xml4
-rw-r--r--java/res/values-ar/strings-action-keys.xml2
-rw-r--r--java/res/values-ar/strings-talkback-descriptions.xml8
-rw-r--r--java/res/values-ar/strings.xml4
-rw-r--r--java/res/values-az-rAZ/strings-action-keys.xml2
-rw-r--r--java/res/values-az-rAZ/strings-emoji-descriptions.xml198
-rw-r--r--java/res/values-az-rAZ/strings-talkback-descriptions.xml8
-rw-r--r--java/res/values-az-rAZ/strings.xml4
-rw-r--r--java/res/values-bg/strings-action-keys.xml2
-rw-r--r--java/res/values-bg/strings-talkback-descriptions.xml8
-rw-r--r--java/res/values-bg/strings.xml4
-rw-r--r--java/res/values-ca/strings-action-keys.xml2
-rw-r--r--java/res/values-ca/strings-talkback-descriptions.xml8
-rw-r--r--java/res/values-ca/strings.xml4
-rw-r--r--java/res/values-cs/strings-action-keys.xml2
-rw-r--r--java/res/values-cs/strings-talkback-descriptions.xml8
-rw-r--r--java/res/values-cs/strings.xml4
-rw-r--r--java/res/values-da/strings-action-keys.xml2
-rw-r--r--java/res/values-da/strings-talkback-descriptions.xml8
-rw-r--r--java/res/values-da/strings.xml4
-rw-r--r--java/res/values-de/strings-action-keys.xml2
-rw-r--r--java/res/values-de/strings-talkback-descriptions.xml8
-rw-r--r--java/res/values-de/strings.xml4
-rw-r--r--java/res/values-el/strings-action-keys.xml2
-rw-r--r--java/res/values-el/strings-talkback-descriptions.xml8
-rw-r--r--java/res/values-el/strings.xml4
-rw-r--r--java/res/values-en-rGB/strings-action-keys.xml2
-rw-r--r--java/res/values-en-rGB/strings-talkback-descriptions.xml8
-rw-r--r--java/res/values-en-rGB/strings.xml4
-rw-r--r--java/res/values-en-rIN/strings-action-keys.xml2
-rw-r--r--java/res/values-en-rIN/strings-talkback-descriptions.xml8
-rw-r--r--java/res/values-en-rIN/strings.xml4
-rw-r--r--java/res/values-es-rUS/strings-action-keys.xml2
-rw-r--r--java/res/values-es-rUS/strings-talkback-descriptions.xml8
-rw-r--r--java/res/values-es-rUS/strings.xml4
-rw-r--r--java/res/values-es/strings-action-keys.xml2
-rw-r--r--java/res/values-es/strings-talkback-descriptions.xml8
-rw-r--r--java/res/values-es/strings.xml4
-rw-r--r--java/res/values-et-rEE/strings-action-keys.xml2
-rw-r--r--java/res/values-et-rEE/strings-talkback-descriptions.xml8
-rw-r--r--java/res/values-et-rEE/strings.xml4
-rw-r--r--java/res/values-fa/strings-action-keys.xml2
-rw-r--r--java/res/values-fa/strings-talkback-descriptions.xml8
-rw-r--r--java/res/values-fa/strings.xml4
-rw-r--r--java/res/values-fi/strings-action-keys.xml2
-rw-r--r--java/res/values-fi/strings-emoji-descriptions.xml846
-rw-r--r--java/res/values-fi/strings-talkback-descriptions.xml8
-rw-r--r--java/res/values-fi/strings.xml4
-rw-r--r--java/res/values-fr-rCA/strings-action-keys.xml2
-rw-r--r--java/res/values-fr-rCA/strings-talkback-descriptions.xml8
-rw-r--r--java/res/values-fr-rCA/strings.xml4
-rw-r--r--java/res/values-fr/strings-action-keys.xml2
-rw-r--r--java/res/values-fr/strings-talkback-descriptions.xml8
-rw-r--r--java/res/values-fr/strings.xml4
-rw-r--r--java/res/values-hi/strings-action-keys.xml2
-rw-r--r--java/res/values-hi/strings-talkback-descriptions.xml8
-rw-r--r--java/res/values-hi/strings.xml4
-rw-r--r--java/res/values-hr/strings-action-keys.xml2
-rw-r--r--java/res/values-hr/strings-talkback-descriptions.xml8
-rw-r--r--java/res/values-hr/strings.xml4
-rw-r--r--java/res/values-hu/strings-action-keys.xml2
-rw-r--r--java/res/values-hu/strings-talkback-descriptions.xml8
-rw-r--r--java/res/values-hu/strings.xml4
-rw-r--r--java/res/values-hy-rAM/strings-action-keys.xml2
-rw-r--r--java/res/values-hy-rAM/strings-emoji-descriptions.xml846
-rw-r--r--java/res/values-hy-rAM/strings-talkback-descriptions.xml8
-rw-r--r--java/res/values-hy-rAM/strings.xml4
-rw-r--r--java/res/values-in/strings-action-keys.xml2
-rw-r--r--java/res/values-in/strings-talkback-descriptions.xml23
-rw-r--r--java/res/values-in/strings.xml4
-rw-r--r--java/res/values-is/strings.xml4
-rw-r--r--java/res/values-it/strings-action-keys.xml2
-rw-r--r--java/res/values-it/strings-talkback-descriptions.xml8
-rw-r--r--java/res/values-it/strings.xml4
-rw-r--r--java/res/values-iw/strings-action-keys.xml2
-rw-r--r--java/res/values-iw/strings-talkback-descriptions.xml8
-rw-r--r--java/res/values-iw/strings.xml4
-rw-r--r--java/res/values-ja/strings-action-keys.xml2
-rw-r--r--java/res/values-ja/strings-talkback-descriptions.xml8
-rw-r--r--java/res/values-ja/strings.xml4
-rw-r--r--java/res/values-ka-rGE/strings-action-keys.xml2
-rw-r--r--java/res/values-ka-rGE/strings-emoji-descriptions.xml846
-rw-r--r--java/res/values-ka-rGE/strings-talkback-descriptions.xml8
-rw-r--r--java/res/values-ka-rGE/strings.xml4
-rw-r--r--java/res/values-kk/strings.xml4
-rw-r--r--java/res/values-km-rKH/strings-action-keys.xml2
-rw-r--r--java/res/values-km-rKH/strings-emoji-descriptions.xml846
-rw-r--r--java/res/values-km-rKH/strings-talkback-descriptions.xml8
-rw-r--r--java/res/values-km-rKH/strings.xml22
-rw-r--r--java/res/values-ko/strings-action-keys.xml2
-rw-r--r--java/res/values-ko/strings-talkback-descriptions.xml8
-rw-r--r--java/res/values-ko/strings.xml4
-rw-r--r--java/res/values-ky/strings.xml3
-rw-r--r--java/res/values-lo-rLA/strings-action-keys.xml2
-rw-r--r--java/res/values-lo-rLA/strings-emoji-descriptions.xml2400
-rw-r--r--java/res/values-lo-rLA/strings-talkback-descriptions.xml8
-rw-r--r--java/res/values-lo-rLA/strings.xml4
-rw-r--r--java/res/values-lt/strings-action-keys.xml2
-rw-r--r--java/res/values-lt/strings-talkback-descriptions.xml8
-rw-r--r--java/res/values-lt/strings.xml4
-rw-r--r--java/res/values-lv/strings-action-keys.xml2
-rw-r--r--java/res/values-lv/strings-talkback-descriptions.xml8
-rw-r--r--java/res/values-lv/strings.xml4
-rw-r--r--java/res/values-mk/strings.xml4
-rw-r--r--java/res/values-mn-rMN/strings-action-keys.xml2
-rw-r--r--java/res/values-mn-rMN/strings-talkback-descriptions.xml8
-rw-r--r--java/res/values-mn-rMN/strings.xml4
-rw-r--r--java/res/values-ms-rMY/strings-action-keys.xml2
-rw-r--r--java/res/values-ms-rMY/strings-emoji-descriptions.xml846
-rw-r--r--java/res/values-ms-rMY/strings-talkback-descriptions.xml8
-rw-r--r--java/res/values-ms-rMY/strings.xml4
-rw-r--r--java/res/values-nb/strings-action-keys.xml2
-rw-r--r--java/res/values-nb/strings-talkback-descriptions.xml8
-rw-r--r--java/res/values-nb/strings.xml4
-rw-r--r--java/res/values-ne-rNP/strings-action-keys.xml2
-rw-r--r--java/res/values-ne-rNP/strings-emoji-descriptions.xml2414
-rw-r--r--java/res/values-ne-rNP/strings-talkback-descriptions.xml8
-rw-r--r--java/res/values-ne-rNP/strings.xml4
-rw-r--r--java/res/values-nl/strings-action-keys.xml2
-rw-r--r--java/res/values-nl/strings-talkback-descriptions.xml8
-rw-r--r--java/res/values-nl/strings.xml4
-rw-r--r--java/res/values-pl/strings-action-keys.xml2
-rw-r--r--java/res/values-pl/strings-talkback-descriptions.xml8
-rw-r--r--java/res/values-pl/strings.xml4
-rw-r--r--java/res/values-pt-rPT/strings-action-keys.xml2
-rw-r--r--java/res/values-pt-rPT/strings-talkback-descriptions.xml8
-rw-r--r--java/res/values-pt-rPT/strings.xml4
-rw-r--r--java/res/values-pt/strings-action-keys.xml2
-rw-r--r--java/res/values-pt/strings-emoji-descriptions.xml846
-rw-r--r--java/res/values-pt/strings-talkback-descriptions.xml23
-rw-r--r--java/res/values-pt/strings.xml4
-rw-r--r--java/res/values-rm/strings.xml4
-rw-r--r--java/res/values-ro/strings-action-keys.xml2
-rw-r--r--java/res/values-ro/strings-emoji-descriptions.xml846
-rw-r--r--java/res/values-ro/strings-talkback-descriptions.xml8
-rw-r--r--java/res/values-ro/strings.xml4
-rw-r--r--java/res/values-ru/strings-action-keys.xml2
-rw-r--r--java/res/values-ru/strings-talkback-descriptions.xml8
-rw-r--r--java/res/values-ru/strings.xml4
-rw-r--r--java/res/values-sk/strings-action-keys.xml2
-rw-r--r--java/res/values-sk/strings-talkback-descriptions.xml8
-rw-r--r--java/res/values-sk/strings.xml4
-rw-r--r--java/res/values-sl/strings-action-keys.xml2
-rw-r--r--java/res/values-sl/strings-talkback-descriptions.xml8
-rw-r--r--java/res/values-sl/strings.xml4
-rw-r--r--java/res/values-sr/strings-action-keys.xml2
-rw-r--r--java/res/values-sr/strings-talkback-descriptions.xml8
-rw-r--r--java/res/values-sr/strings.xml4
-rw-r--r--java/res/values-sv/strings-action-keys.xml2
-rw-r--r--java/res/values-sv/strings-talkback-descriptions.xml8
-rw-r--r--java/res/values-sv/strings.xml4
-rw-r--r--java/res/values-sw/strings-action-keys.xml2
-rw-r--r--java/res/values-sw/strings-talkback-descriptions.xml8
-rw-r--r--java/res/values-sw/strings.xml4
-rw-r--r--java/res/values-th/strings-action-keys.xml2
-rw-r--r--java/res/values-th/strings-talkback-descriptions.xml8
-rw-r--r--java/res/values-th/strings.xml4
-rw-r--r--java/res/values-tl/strings-action-keys.xml2
-rw-r--r--java/res/values-tl/strings-talkback-descriptions.xml23
-rw-r--r--java/res/values-tl/strings.xml4
-rw-r--r--java/res/values-tr/strings-action-keys.xml2
-rw-r--r--java/res/values-tr/strings-talkback-descriptions.xml8
-rw-r--r--java/res/values-tr/strings.xml4
-rw-r--r--java/res/values-uk/strings-action-keys.xml2
-rw-r--r--java/res/values-uk/strings-talkback-descriptions.xml8
-rw-r--r--java/res/values-uk/strings.xml4
-rw-r--r--java/res/values-vi/strings-action-keys.xml2
-rw-r--r--java/res/values-vi/strings-talkback-descriptions.xml8
-rw-r--r--java/res/values-vi/strings.xml4
-rw-r--r--java/res/values-zh-rCN/strings-action-keys.xml2
-rw-r--r--java/res/values-zh-rCN/strings-talkback-descriptions.xml8
-rw-r--r--java/res/values-zh-rCN/strings.xml4
-rw-r--r--java/res/values-zh-rHK/strings-action-keys.xml2
-rw-r--r--java/res/values-zh-rHK/strings-talkback-descriptions.xml8
-rw-r--r--java/res/values-zh-rHK/strings.xml4
-rw-r--r--java/res/values-zh-rTW/strings-action-keys.xml2
-rw-r--r--java/res/values-zh-rTW/strings-talkback-descriptions.xml8
-rw-r--r--java/res/values-zh-rTW/strings.xml4
-rw-r--r--java/res/values-zu/strings-action-keys.xml2
-rw-r--r--java/res/values-zu/strings-talkback-descriptions.xml8
-rw-r--r--java/res/values-zu/strings.xml4
-rw-r--r--java/res/values/attrs.xml13
-rw-r--r--java/res/values/donottranslate.xml2
-rw-r--r--java/res/values/research_strings.xml41
-rw-r--r--java/res/values/strings-action-keys.xml2
-rw-r--r--java/res/values/strings-talkback-descriptions.xml4
-rw-r--r--java/res/values/strings.xml70
-rw-r--r--java/res/values/themes-common.xml2
-rw-r--r--java/res/values/themes-ics.xml16
-rw-r--r--java/res/values/themes-klp.xml16
-rw-r--r--java/res/values/themes-lxx-dark.xml14
-rw-r--r--java/res/values/urls.xml22
-rw-r--r--java/res/xml-sw600dp/key_styles_enter.xml15
-rw-r--r--java/res/xml/key_styles_enter.xml15
-rw-r--r--java/res/xml/prefs.xml1
-rw-r--r--java/res/xml/prefs_for_debug.xml11
-rw-r--r--java/src/com/android/inputmethod/accessibility/AccessibilityUtils.java2
-rw-r--r--java/src/com/android/inputmethod/accessibility/KeyCodeDescriptionMapper.java25
-rw-r--r--java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityDelegate.java231
-rw-r--r--java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityNodeProvider.java17
-rw-r--r--java/src/com/android/inputmethod/accessibility/MainKeyboardAccessibilityDelegate.java13
-rw-r--r--java/src/com/android/inputmethod/compat/SuggestionSpanUtils.java5
-rw-r--r--java/src/com/android/inputmethod/compat/ViewCompatUtils.java21
-rw-r--r--java/src/com/android/inputmethod/dictionarypack/ActionBatch.java3
-rw-r--r--java/src/com/android/inputmethod/dictionarypack/DictionaryDownloadProgressBar.java2
-rw-r--r--java/src/com/android/inputmethod/dictionarypack/DictionaryListInterfaceState.java6
-rw-r--r--java/src/com/android/inputmethod/dictionarypack/DictionaryProvider.java2
-rw-r--r--java/src/com/android/inputmethod/dictionarypack/DictionarySettingsFragment.java13
-rw-r--r--java/src/com/android/inputmethod/dictionarypack/LocaleUtils.java2
-rw-r--r--java/src/com/android/inputmethod/dictionarypack/MetadataDbHelper.java8
-rw-r--r--java/src/com/android/inputmethod/dictionarypack/MetadataHandler.java2
-rw-r--r--java/src/com/android/inputmethod/dictionarypack/MetadataParser.java4
-rw-r--r--java/src/com/android/inputmethod/dictionarypack/UpdateHandler.java10
-rw-r--r--java/src/com/android/inputmethod/event/CombinerChain.java14
-rw-r--r--java/src/com/android/inputmethod/event/MyanmarReordering.java3
-rw-r--r--java/src/com/android/inputmethod/keyboard/Keyboard.java9
-rw-r--r--java/src/com/android/inputmethod/keyboard/KeyboardLayoutSet.java9
-rw-r--r--java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java2
-rw-r--r--java/src/com/android/inputmethod/keyboard/KeyboardTheme.java14
-rw-r--r--java/src/com/android/inputmethod/keyboard/KeyboardView.java76
-rw-r--r--java/src/com/android/inputmethod/keyboard/MainKeyboardView.java50
-rw-r--r--java/src/com/android/inputmethod/keyboard/PointerTracker.java23
-rw-r--r--java/src/com/android/inputmethod/keyboard/ProximityInfo.java4
-rw-r--r--java/src/com/android/inputmethod/keyboard/emoji/DynamicGridKeyboard.java7
-rw-r--r--java/src/com/android/inputmethod/keyboard/emoji/EmojiCategory.java14
-rw-r--r--java/src/com/android/inputmethod/keyboard/emoji/EmojiCategoryPageIndicatorView.java17
-rw-r--r--java/src/com/android/inputmethod/keyboard/emoji/EmojiPageKeyboardView.java27
-rw-r--r--java/src/com/android/inputmethod/keyboard/emoji/EmojiPalettesAdapter.java15
-rw-r--r--java/src/com/android/inputmethod/keyboard/emoji/EmojiPalettesView.java29
-rw-r--r--java/src/com/android/inputmethod/keyboard/internal/DrawingPreviewPlacerView.java3
-rw-r--r--java/src/com/android/inputmethod/keyboard/internal/GestureTrailsDrawingPreview.java4
-rw-r--r--java/src/com/android/inputmethod/keyboard/internal/KeyPreviewChoreographer.java7
-rw-r--r--java/src/com/android/inputmethod/keyboard/internal/KeyStylesSet.java5
-rw-r--r--java/src/com/android/inputmethod/keyboard/internal/KeyboardCodesSet.java3
-rw-r--r--java/src/com/android/inputmethod/keyboard/internal/KeyboardIconsSet.java3
-rw-r--r--java/src/com/android/inputmethod/keyboard/internal/KeyboardParams.java7
-rw-r--r--java/src/com/android/inputmethod/keyboard/internal/KeyboardRow.java3
-rw-r--r--java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsSet.java4
-rw-r--r--java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.java10
-rw-r--r--java/src/com/android/inputmethod/keyboard/internal/KeysCache.java3
-rw-r--r--java/src/com/android/inputmethod/keyboard/internal/MoreKeySpec.java2
-rw-r--r--java/src/com/android/inputmethod/keyboard/internal/PointerTrackerQueue.java4
-rw-r--r--java/src/com/android/inputmethod/latin/BinaryDictionary.java142
-rw-r--r--java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java5
-rw-r--r--java/src/com/android/inputmethod/latin/BinaryDictionaryGetter.java5
-rw-r--r--java/src/com/android/inputmethod/latin/Constants.java3
-rw-r--r--java/src/com/android/inputmethod/latin/ContactsBinaryDictionary.java7
-rw-r--r--java/src/com/android/inputmethod/latin/DictionaryCollection.java11
-rw-r--r--java/src/com/android/inputmethod/latin/DictionaryFacilitator.java (renamed from java/src/com/android/inputmethod/latin/DictionaryFacilitatorForSuggest.java)53
-rw-r--r--java/src/com/android/inputmethod/latin/DictionaryFactory.java3
-rw-r--r--java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java29
-rw-r--r--java/src/com/android/inputmethod/latin/InputAttributes.java3
-rw-r--r--java/src/com/android/inputmethod/latin/LastComposedWord.java2
-rw-r--r--java/src/com/android/inputmethod/latin/LatinIME.java121
-rw-r--r--java/src/com/android/inputmethod/latin/LatinImeLogger.java74
-rw-r--r--java/src/com/android/inputmethod/latin/PrevWordsInfo.java35
-rw-r--r--java/src/com/android/inputmethod/latin/PunctuationSuggestions.java4
-rw-r--r--java/src/com/android/inputmethod/latin/RichInputConnection.java44
-rw-r--r--java/src/com/android/inputmethod/latin/RichInputMethodManager.java5
-rw-r--r--java/src/com/android/inputmethod/latin/SubtypeSwitcher.java3
-rw-r--r--java/src/com/android/inputmethod/latin/Suggest.java37
-rw-r--r--java/src/com/android/inputmethod/latin/SuggestedWords.java56
-rw-r--r--java/src/com/android/inputmethod/latin/WordComposer.java9
-rw-r--r--java/src/com/android/inputmethod/latin/debug/ExternalDictionaryGetterForDebug.java3
-rw-r--r--java/src/com/android/inputmethod/latin/define/ProductionFlag.java7
-rw-r--r--java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java170
-rw-r--r--java/src/com/android/inputmethod/latin/makedict/FormatSpec.java5
-rw-r--r--java/src/com/android/inputmethod/latin/makedict/WordProperty.java9
-rw-r--r--java/src/com/android/inputmethod/latin/personalization/AccountUtils.java4
-rw-r--r--java/src/com/android/inputmethod/latin/personalization/DecayingExpandableBinaryDictionaryBase.java1
-rw-r--r--java/src/com/android/inputmethod/latin/personalization/PersonalizationDataChunk.java37
-rw-r--r--java/src/com/android/inputmethod/latin/personalization/PersonalizationDictionarySessionRegistrar.java9
-rw-r--r--java/src/com/android/inputmethod/latin/personalization/PersonalizationHelper.java15
-rw-r--r--java/src/com/android/inputmethod/latin/personalization/UserHistoryDictionary.java9
-rw-r--r--java/src/com/android/inputmethod/latin/settings/AdditionalSubtypeSettings.java9
-rw-r--r--java/src/com/android/inputmethod/latin/settings/DebugSettings.java48
-rw-r--r--java/src/com/android/inputmethod/latin/settings/Settings.java9
-rw-r--r--java/src/com/android/inputmethod/latin/settings/SettingsFragment.java20
-rw-r--r--java/src/com/android/inputmethod/latin/settings/SettingsValues.java15
-rw-r--r--java/src/com/android/inputmethod/latin/setup/SetupStartIndicatorView.java6
-rw-r--r--java/src/com/android/inputmethod/latin/setup/SetupStepIndicatorView.java6
-rw-r--r--java/src/com/android/inputmethod/latin/setup/SetupWizardActivity.java3
-rw-r--r--java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java10
-rw-r--r--java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerSession.java8
-rw-r--r--java/src/com/android/inputmethod/latin/spellcheck/AndroidWordLevelSpellCheckerSession.java3
-rw-r--r--java/src/com/android/inputmethod/latin/spellcheck/DictAndKeyboard.java6
-rw-r--r--java/src/com/android/inputmethod/latin/spellcheck/DictionaryPool.java3
-rw-r--r--java/src/com/android/inputmethod/latin/suggestions/MoreSuggestions.java6
-rw-r--r--java/src/com/android/inputmethod/latin/suggestions/MoreSuggestionsView.java7
-rw-r--r--java/src/com/android/inputmethod/latin/suggestions/SuggestionStripView.java33
-rw-r--r--java/src/com/android/inputmethod/latin/userdictionary/UserDictionaryAddWordContents.java2
-rw-r--r--java/src/com/android/inputmethod/latin/userdictionary/UserDictionaryAddWordFragment.java4
-rw-r--r--java/src/com/android/inputmethod/latin/userdictionary/UserDictionaryList.java2
-rw-r--r--java/src/com/android/inputmethod/latin/utils/AdditionalSubtypeUtils.java3
-rw-r--r--java/src/com/android/inputmethod/latin/utils/AutoCorrectionUtils.java9
-rw-r--r--java/src/com/android/inputmethod/latin/utils/CapsModeUtils.java43
-rw-r--r--java/src/com/android/inputmethod/latin/utils/CollectionUtils.java76
-rw-r--r--java/src/com/android/inputmethod/latin/utils/CsvUtils.java2
-rw-r--r--java/src/com/android/inputmethod/latin/utils/DictionaryInfoUtils.java2
-rw-r--r--java/src/com/android/inputmethod/latin/utils/DistracterFilter.java182
-rw-r--r--java/src/com/android/inputmethod/latin/utils/DistracterFilterUsingSuggestion.java243
-rw-r--r--java/src/com/android/inputmethod/latin/utils/ExecutorUtils.java36
-rw-r--r--java/src/com/android/inputmethod/latin/utils/FragmentUtils.java4
-rw-r--r--java/src/com/android/inputmethod/latin/utils/JsonUtils.java2
-rw-r--r--java/src/com/android/inputmethod/latin/utils/LanguageModelParam.java45
-rw-r--r--java/src/com/android/inputmethod/latin/utils/LatinImeLoggerUtils.java77
-rw-r--r--java/src/com/android/inputmethod/latin/utils/LeakGuardHandlerWrapper.java2
-rw-r--r--java/src/com/android/inputmethod/latin/utils/LocaleUtils.java2
-rw-r--r--java/src/com/android/inputmethod/latin/utils/PrioritizedSerialExecutor.java122
-rw-r--r--java/src/com/android/inputmethod/latin/utils/ResourceUtils.java7
-rw-r--r--java/src/com/android/inputmethod/latin/utils/StringUtils.java3
-rw-r--r--java/src/com/android/inputmethod/latin/utils/SubtypeLocaleUtils.java13
-rw-r--r--java/src/com/android/inputmethod/latin/utils/TargetPackageInfoGetterTask.java3
-rw-r--r--java/src/com/android/inputmethod/latin/utils/TypefaceUtils.java4
-rw-r--r--java/src/com/android/inputmethod/latin/utils/UsabilityStudyLogUtils.java293
-rw-r--r--java/src/com/android/inputmethod/latin/utils/UserLogRingCharBuffer.java137
-rw-r--r--java/src/com/android/inputmethod/research/BootBroadcastReceiver.java34
-rw-r--r--java/src/com/android/inputmethod/research/FeedbackActivity.java38
-rw-r--r--java/src/com/android/inputmethod/research/FeedbackFragment.java131
-rw-r--r--java/src/com/android/inputmethod/research/FeedbackLayout.java62
-rw-r--r--java/src/com/android/inputmethod/research/FeedbackLog.java32
-rw-r--r--java/src/com/android/inputmethod/research/FixedLogBuffer.java174
-rw-r--r--java/src/com/android/inputmethod/research/JsonUtils.java162
-rw-r--r--java/src/com/android/inputmethod/research/LogBuffer.java73
-rw-r--r--java/src/com/android/inputmethod/research/LogStatement.java225
-rw-r--r--java/src/com/android/inputmethod/research/LogUnit.java496
-rw-r--r--java/src/com/android/inputmethod/research/LoggingUtils.java38
-rw-r--r--java/src/com/android/inputmethod/research/MainLogBuffer.java287
-rw-r--r--java/src/com/android/inputmethod/research/MotionEventReader.java326
-rw-r--r--java/src/com/android/inputmethod/research/Replayer.java150
-rw-r--r--java/src/com/android/inputmethod/research/ReplayerService.java65
-rw-r--r--java/src/com/android/inputmethod/research/ResearchLog.java298
-rw-r--r--java/src/com/android/inputmethod/research/ResearchLogDirectory.java113
-rw-r--r--java/src/com/android/inputmethod/research/ResearchLogger.java1885
-rw-r--r--java/src/com/android/inputmethod/research/ResearchSettings.java72
-rw-r--r--java/src/com/android/inputmethod/research/Statistics.java279
-rw-r--r--java/src/com/android/inputmethod/research/Uploader.java171
-rw-r--r--java/src/com/android/inputmethod/research/UploaderService.java88
-rw-r--r--java/src/com/android/inputmethod/research/ui/SplashScreen.java111
357 files changed, 9424 insertions, 11319 deletions
diff --git a/java/proguard.flags b/java/proguard.flags
index f7b7f2898..35b3ac3d3 100644
--- a/java/proguard.flags
+++ b/java/proguard.flags
@@ -17,7 +17,8 @@
# Keep classes that are used as a parameter type of methods that are also marked as keep
# to preserve changing those methods' signature.
--keep class com.android.inputmethod.latin.utils.LanguageModelParam
-keep class com.android.inputmethod.latin.AssetFileAddress
--keep class com.android.inputmethod.latin.makedict.ProbabilityInfo
-keep class com.android.inputmethod.latin.Dictionary
+-keep class com.android.inputmethod.latin.PrevWordsInfo
+-keep class com.android.inputmethod.latin.makedict.ProbabilityInfo
+-keep class com.android.inputmethod.latin.utils.LanguageModelParam
diff --git a/java/res/drawable-hdpi/emoji_category_tab_selected_lxx_dark.9.png b/java/res/drawable-hdpi/emoji_category_tab_selected_lxx_dark.9.png
deleted file mode 100644
index ca981f4f4..000000000
--- a/java/res/drawable-hdpi/emoji_category_tab_selected_lxx_dark.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-hdpi/emoji_category_tab_unselected_lxx_dark.9.png b/java/res/drawable-hdpi/emoji_category_tab_unselected_lxx_dark.9.png
deleted file mode 100644
index 10b1dd2cb..000000000
--- a/java/res/drawable-hdpi/emoji_category_tab_unselected_lxx_dark.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/emoji_category_tab_selected_lxx_dark.9.png b/java/res/drawable-mdpi/emoji_category_tab_selected_lxx_dark.9.png
deleted file mode 100644
index a08735cb4..000000000
--- a/java/res/drawable-mdpi/emoji_category_tab_selected_lxx_dark.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-mdpi/emoji_category_tab_unselected_lxx_dark.9.png b/java/res/drawable-mdpi/emoji_category_tab_unselected_lxx_dark.9.png
deleted file mode 100644
index 4cf8f5c41..000000000
--- a/java/res/drawable-mdpi/emoji_category_tab_unselected_lxx_dark.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/emoji_category_tab_selected_lxx_dark.9.png b/java/res/drawable-xhdpi/emoji_category_tab_selected_lxx_dark.9.png
deleted file mode 100644
index 65a54b813..000000000
--- a/java/res/drawable-xhdpi/emoji_category_tab_selected_lxx_dark.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xhdpi/emoji_category_tab_unselected_lxx_dark.9.png b/java/res/drawable-xhdpi/emoji_category_tab_unselected_lxx_dark.9.png
deleted file mode 100644
index 666b35471..000000000
--- a/java/res/drawable-xhdpi/emoji_category_tab_unselected_lxx_dark.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xxhdpi/emoji_category_tab_selected_lxx_dark.9.png b/java/res/drawable-xxhdpi/emoji_category_tab_selected_lxx_dark.9.png
deleted file mode 100644
index 084554f3d..000000000
--- a/java/res/drawable-xxhdpi/emoji_category_tab_selected_lxx_dark.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/drawable-xxhdpi/emoji_category_tab_unselected_lxx_dark.9.png b/java/res/drawable-xxhdpi/emoji_category_tab_unselected_lxx_dark.9.png
deleted file mode 100644
index 62547a90f..000000000
--- a/java/res/drawable-xxhdpi/emoji_category_tab_unselected_lxx_dark.9.png
+++ /dev/null
Binary files differ
diff --git a/java/res/layout/emoji_palettes_view.xml b/java/res/layout/emoji_palettes_view.xml
index e2933f96f..68fd37261 100644
--- a/java/res/layout/emoji_palettes_view.xml
+++ b/java/res/layout/emoji_palettes_view.xml
@@ -41,9 +41,7 @@
android:id="@android:id/tabs"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:divider="@null"
- android:tabStripEnabled="true"
- style="?attr/emojiTabWidgetStyle" />
+ android:divider="@null" />
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="0dip"
@@ -77,8 +75,7 @@
<com.android.inputmethod.keyboard.emoji.EmojiCategoryPageIndicatorView
android:id="@+id/emoji_category_page_id_view"
android:layout_width="match_parent"
- android:layout_height="2dip"
- style="?attr/emojiCategoryPageIndicatorViewStyle" />
+ android:layout_height="2dip" />
<LinearLayout
android:id="@+id/emoji_action_bar"
android:orientation="horizontal"
diff --git a/java/res/layout/research_feedback_activity.xml b/java/res/layout/research_feedback_activity.xml
deleted file mode 100644
index a6b8b8a43..000000000
--- a/java/res/layout/research_feedback_activity.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2012 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<com.android.inputmethod.research.FeedbackLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical"
- android:id="@+id/research_feedback_layout"
->
-
- <fragment
- android:id="@+id/research_feedback_fragment"
- android:name="com.android.inputmethod.research.FeedbackFragment"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- />
-</com.android.inputmethod.research.FeedbackLayout>
diff --git a/java/res/layout/research_feedback_fragment_layout.xml b/java/res/layout/research_feedback_fragment_layout.xml
deleted file mode 100644
index fb5c27815..000000000
--- a/java/res/layout/research_feedback_fragment_layout.xml
+++ /dev/null
@@ -1,115 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2012 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<!-- Adapted from frameworks/base/core/res/res/layout/alert_dialog_holo.xml. We
- want a dialog, but it must be its own activity so we can launch the soft
- keyboard on it. A regular dialog will not work since it would be launched from
- the IME. -->
-<ScrollView xmlns:android="http://schemas.android.com/apk/res/android">
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginStart="8dip"
- android:layout_marginEnd="8dip"
- android:orientation="vertical">
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical">
- <View android:layout_width="match_parent"
- android:layout_height="2dip"
- android:visibility="gone"
- android:background="@android:color/holo_blue_light" />
- <TextView
- style="?android:attr/windowTitleStyle"
- android:singleLine="true"
- android:ellipsize="end"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:minHeight="64dip"
- android:layout_marginLeft="16dip"
- android:layout_marginRight="16dip"
- android:gravity="center_vertical|left"
- android:text="@string/research_feedback_dialog_title" />
- <View
- android:layout_width="match_parent"
- android:layout_height="2dip"
- android:background="@android:color/holo_blue_light" />
- </LinearLayout>
-
- <EditText
- android:id="@+id/research_feedback_contents"
- android:layout_height="wrap_content"
- android:layout_width="match_parent"
- android:layout_gravity="fill_horizontal|center_vertical"
- android:layout_marginLeft="8dip"
- android:layout_marginRight="8dip"
- android:layout_marginBottom="8dip"
- android:layout_marginTop="8dip"
- android:minLines="2"
- android:scrollbars="vertical"
- android:hint="@string/research_feedback_hint"
- android:inputType="textMultiLine|textCapSentences">
- <requestFocus />
- </EditText>
- <CheckBox
- android:id="@+id/research_feedback_include_account_name"
- android:layout_height="wrap_content"
- android:layout_width="match_parent"
- android:layout_marginLeft="16dip"
- android:layout_marginRight="16dip"
- android:layout_marginBottom="8dip"
- android:checked="false"
- android:text="@string/research_feedback_include_account_name_label" />
- <CheckBox
- android:id="@+id/research_feedback_include_recording_checkbox"
- android:layout_height="wrap_content"
- android:layout_width="match_parent"
- android:layout_marginLeft="16dip"
- android:layout_marginRight="16dip"
- android:layout_marginBottom="8dip"
- android:checked="false"
- android:text="@string/research_feedback_include_recording_label" />
- <LinearLayout
- style="?android:attr/buttonBarStyle"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:layoutDirection="locale"
- android:measureWithLargestChild="true">
- <Button
- android:id="@+id/research_feedback_cancel_button"
- android:layout_width="wrap_content"
- android:layout_gravity="left"
- android:layout_weight="1"
- android:maxLines="2"
- style="?android:attr/buttonBarButtonStyle"
- android:textSize="14sp"
- android:text="@string/research_feedback_cancel"
- android:layout_height="wrap_content" />
- <Button
- android:id="@+id/research_feedback_send_button"
- android:layout_width="wrap_content"
- android:layout_gravity="right"
- android:layout_weight="1"
- android:maxLines="2"
- style="?android:attr/buttonBarButtonStyle"
- android:textSize="14sp"
- android:text="@string/research_feedback_send"
- android:layout_height="wrap_content" />
- </LinearLayout>
- </LinearLayout>
-</ScrollView>
diff --git a/java/res/layout/research_feedback_layout.xml b/java/res/layout/research_feedback_layout.xml
deleted file mode 100644
index bacd19101..000000000
--- a/java/res/layout/research_feedback_layout.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2012 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:orientation="vertical"
->
-
- <EditText
- android:id="@+id/research_feedback_contents"
- android:layout_height="wrap_content"
- android:layout_width="match_parent"
- android:layout_gravity="fill_horizontal|center_vertical"
- android:layout_marginLeft="8dip"
- android:layout_marginRight="8dip"
- android:layout_marginBottom="8dip"
- android:layout_marginTop="8dip"
- android:lines="2"
- android:hint="@string/research_feedback_hint"
- android:inputType="textMultiLine"
- android:imeOptions="flagNoFullscreen"
- android:focusable="true"
- >
- <requestFocus />
- </EditText>
-
- <CheckBox
- android:id="@+id/research_feedback_include_history"
- android:layout_height="wrap_content"
- android:layout_width="match_parent"
- android:layout_marginBottom="8dip"
- android:checked="true"
- android:text="@string/research_feedback_include_history_label"
- />
-</LinearLayout>
diff --git a/java/res/values-af/strings-action-keys.xml b/java/res/values-af/strings-action-keys.xml
index c5cd71ab7..bef175b16 100644
--- a/java/res/values-af/strings-action-keys.xml
+++ b/java/res/values-af/strings-action-keys.xml
@@ -25,6 +25,8 @@
<string name="label_previous_key" msgid="1421141755779895275">"Vorige"</string>
<string name="label_done_key" msgid="7564866296502630852">"Klaar"</string>
<string name="label_send_key" msgid="482252074224462163">"Stuur"</string>
+ <!-- no translation found for label_search_key (7965186050435796642) -->
+ <skip />
<string name="label_pause_key" msgid="2225922926459730642">"Laat wag"</string>
<string name="label_wait_key" msgid="5891247853595466039">"Wag"</string>
</resources>
diff --git a/java/res/values-af/strings-talkback-descriptions.xml b/java/res/values-af/strings-talkback-descriptions.xml
index 439b39119..aee891bf0 100644
--- a/java/res/values-af/strings-talkback-descriptions.xml
+++ b/java/res/values-af/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Plekke"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Simbole"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Emosiekone"</string>
+ <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+ <skip />
+ <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+ <skip />
</resources>
diff --git a/java/res/values-af/strings.xml b/java/res/values-af/strings.xml
index ce7cb18fc..187aa4b89 100644
--- a/java/res/values-af/strings.xml
+++ b/java/res/values-af/strings.xml
@@ -21,7 +21,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_input_options" msgid="3909945612939668554">"Invoeropsies"</string>
- <string name="english_ime_research_log" msgid="8492602295696577851">"Navorsing-loglêerbevele"</string>
<string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Soek kontakname op"</string>
<string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Speltoetser gebruik inskrywings uit jou kontaklys"</string>
<string name="vibrate_on_keypress" msgid="5258079494276955460">"Vibreer met sleuteldruk"</string>
@@ -84,8 +83,6 @@
<string name="select_language" msgid="3693815588777926848">"Invoertale"</string>
<string name="hint_add_to_dictionary" msgid="573678656946085380">"Raak weer om te stoor"</string>
<string name="has_dictionary" msgid="6071847973466625007">"Woordeboek beskikbaar"</string>
- <string name="prefs_enable_log" msgid="6620424505072963557">"Aktiveer gebruikerterugvoer"</string>
- <string name="prefs_description_log" msgid="7525225584555429211">"Help om hierdie invoermetode-redigeerder te verbeter deur gebruikstatistiek en omvalverslae outomaties te stuur"</string>
<string name="keyboard_layout" msgid="8451164783510487501">"Sleutelbordtema"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"Engels (VK)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"Engels (VS)"</string>
@@ -118,7 +115,6 @@
<string name="enable" msgid="5031294444630523247">"Aktiveer"</string>
<string name="not_now" msgid="6172462888202790482">"Nie nou nie"</string>
<string name="custom_input_style_already_exists" msgid="8008728952215449707">"Dieselfde invoerstyl bestaan ​​reeds: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
- <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Bruikbaarheidstudie-modus"</string>
<string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Vertraging van sleutellangdruk"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Sleuteldruk se vibrasie-tydsduur"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Sleuteldruk se klankvolume"</string>
diff --git a/java/res/values-am/strings-action-keys.xml b/java/res/values-am/strings-action-keys.xml
index 1813a86d8..26e45135b 100644
--- a/java/res/values-am/strings-action-keys.xml
+++ b/java/res/values-am/strings-action-keys.xml
@@ -25,6 +25,8 @@
<string name="label_previous_key" msgid="1421141755779895275">"ቀዳሚ"</string>
<string name="label_done_key" msgid="7564866296502630852">"ተደርጓል"</string>
<string name="label_send_key" msgid="482252074224462163">"ላክ"</string>
+ <!-- no translation found for label_search_key (7965186050435796642) -->
+ <skip />
<string name="label_pause_key" msgid="2225922926459730642">"ቆም በል"</string>
<string name="label_wait_key" msgid="5891247853595466039">"ጠብቅ"</string>
</resources>
diff --git a/java/res/values-am/strings-talkback-descriptions.xml b/java/res/values-am/strings-talkback-descriptions.xml
index 79c4d08ec..aab15878d 100644
--- a/java/res/values-am/strings-talkback-descriptions.xml
+++ b/java/res/values-am/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"ቦታዎች"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"ምልክቶች"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"ስሜት ገላጭ አዶዎች"</string>
+ <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+ <skip />
+ <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+ <skip />
</resources>
diff --git a/java/res/values-am/strings.xml b/java/res/values-am/strings.xml
index 32eed413b..651c642cb 100644
--- a/java/res/values-am/strings.xml
+++ b/java/res/values-am/strings.xml
@@ -21,7 +21,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_input_options" msgid="3909945612939668554">"ግቤት አማራጮች"</string>
- <string name="english_ime_research_log" msgid="8492602295696577851">"የጥናት የምዝግብ ማስታወሻ ትዕዛዞች"</string>
<string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"የእውቅያ ስሞችን ተመልከት"</string>
<string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"ፊደል አራሚ ከእውቅያ ዝርዝርህ የገቡትን ይጠቀማል"</string>
<string name="vibrate_on_keypress" msgid="5258079494276955460">"በቁልፍመጫንጊዜ አንዝር"</string>
@@ -84,8 +83,6 @@
<string name="select_language" msgid="3693815588777926848">"ቋንቋዎች አግቤት"</string>
<string name="hint_add_to_dictionary" msgid="573678656946085380">"ለማስቀመጥ እንደገና ንካ"</string>
<string name="has_dictionary" msgid="6071847973466625007">"መዝገበ ቃላት አለ"</string>
- <string name="prefs_enable_log" msgid="6620424505072963557">"የተጠቃሚ ግብረ ምላሽ አንቃ"</string>
- <string name="prefs_description_log" msgid="7525225584555429211">"አጠቃቀም ስታስቲክስ እና የብልሽት ሪፖርቶችን በራስ-ሰር በመላክ ይህን ግቤት ስልት አርታዒ እንዲሻሻል ያግዙ።"</string>
<string name="keyboard_layout" msgid="8451164783510487501">"የቁልፍ ሰሌዳ ገጽታ"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"እንግሊዘኛ (የታላቋ ብሪታንያ)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"እንግሊዘኛ (ዩ.ኤስ)"</string>
@@ -118,7 +115,6 @@
<string name="enable" msgid="5031294444630523247">"አንቃ"</string>
<string name="not_now" msgid="6172462888202790482">"አሁን አልፈልግም"</string>
<string name="custom_input_style_already_exists" msgid="8008728952215449707">"ተመሳሳዩ የግብዓት ቅጥ አስቀድሞ አለ፦ <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
- <string name="prefs_usability_study_mode" msgid="1261130555134595254">"የተገልጋይነት ጥናት ሁነታ"</string>
<string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"የሰሌዳ ቁልፍ ጠቅታ በመጫን መዘግየት"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"የቁልፍ ጭነት ንዝረት ርዝመት"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"የቁልፍ ጭነት ድምጽ መጠን"</string>
diff --git a/java/res/values-ar/strings-action-keys.xml b/java/res/values-ar/strings-action-keys.xml
index 481b22f20..1ee4f7a2d 100644
--- a/java/res/values-ar/strings-action-keys.xml
+++ b/java/res/values-ar/strings-action-keys.xml
@@ -25,6 +25,8 @@
<string name="label_previous_key" msgid="1421141755779895275">"سابق"</string>
<string name="label_done_key" msgid="7564866296502630852">"تم"</string>
<string name="label_send_key" msgid="482252074224462163">"إرسال"</string>
+ <!-- no translation found for label_search_key (7965186050435796642) -->
+ <skip />
<string name="label_pause_key" msgid="2225922926459730642">"توقف"</string>
<string name="label_wait_key" msgid="5891247853595466039">"انتظر"</string>
</resources>
diff --git a/java/res/values-ar/strings-talkback-descriptions.xml b/java/res/values-ar/strings-talkback-descriptions.xml
index a9110a7b5..1e5ec4494 100644
--- a/java/res/values-ar/strings-talkback-descriptions.xml
+++ b/java/res/values-ar/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"أماكن"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"رموز"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"رموز تعبيرية"</string>
+ <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+ <skip />
+ <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+ <skip />
</resources>
diff --git a/java/res/values-ar/strings.xml b/java/res/values-ar/strings.xml
index 13aef2a67..a907ba885 100644
--- a/java/res/values-ar/strings.xml
+++ b/java/res/values-ar/strings.xml
@@ -21,7 +21,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_input_options" msgid="3909945612939668554">"خيارات الإرسال"</string>
- <string name="english_ime_research_log" msgid="8492602295696577851">"أوامر سجلات البحث"</string>
<string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"بحث في أسماء جهات الاتصال"</string>
<string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"يستخدم المدقق الإملائي إدخالات من قائمة جهات الاتصال"</string>
<string name="vibrate_on_keypress" msgid="5258079494276955460">"اهتزاز عند ضغط مفتاح"</string>
@@ -84,8 +83,6 @@
<string name="select_language" msgid="3693815588777926848">"لغات الإدخال"</string>
<string name="hint_add_to_dictionary" msgid="573678656946085380">"المس مرة أخرى للحفظ"</string>
<string name="has_dictionary" msgid="6071847973466625007">"القاموس متاح"</string>
- <string name="prefs_enable_log" msgid="6620424505072963557">"تمكين ملاحظات المستخدم"</string>
- <string name="prefs_description_log" msgid="7525225584555429211">"المساعدة في تحسين محرر أسلوب الإدخال هذا من خلال إرسال إحصاءات الاستخدام وتقارير الأعطال تلقائيًا"</string>
<string name="keyboard_layout" msgid="8451164783510487501">"مظهر لوحة المفاتيح"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"الإنجليزية (المملكة المتحدة)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"الإنجليزية (الولايات المتحدة)"</string>
@@ -118,7 +115,6 @@
<string name="enable" msgid="5031294444630523247">"تمكين"</string>
<string name="not_now" msgid="6172462888202790482">"ليس الآن"</string>
<string name="custom_input_style_already_exists" msgid="8008728952215449707">"نمط الإدخال ذاته موجود من قبل: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
- <string name="prefs_usability_study_mode" msgid="1261130555134595254">"وضع سهولة الاستخدام"</string>
<string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"تأخير الضغط الطويل للمفاتيح"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"مدة اهتزاز الضغط على المفاتيح"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"مستوى صوت الضغط على المفاتيح"</string>
diff --git a/java/res/values-az-rAZ/strings-action-keys.xml b/java/res/values-az-rAZ/strings-action-keys.xml
index 513712c40..7f982d686 100644
--- a/java/res/values-az-rAZ/strings-action-keys.xml
+++ b/java/res/values-az-rAZ/strings-action-keys.xml
@@ -25,6 +25,8 @@
<string name="label_previous_key" msgid="1421141755779895275">"Öncəki"</string>
<string name="label_done_key" msgid="7564866296502630852">"Hazırdır"</string>
<string name="label_send_key" msgid="482252074224462163">"Göndər"</string>
+ <!-- no translation found for label_search_key (7965186050435796642) -->
+ <skip />
<string name="label_pause_key" msgid="2225922926459730642">"Pauza"</string>
<string name="label_wait_key" msgid="5891247853595466039">"Gözlə"</string>
</resources>
diff --git a/java/res/values-az-rAZ/strings-emoji-descriptions.xml b/java/res/values-az-rAZ/strings-emoji-descriptions.xml
index 60e9de947..a9bfb7763 100644
--- a/java/res/values-az-rAZ/strings-emoji-descriptions.xml
+++ b/java/res/values-az-rAZ/strings-emoji-descriptions.xml
@@ -25,7 +25,7 @@
<string name="spoken_emoji_203C" msgid="153340916701508663">"İki nida işarəsi"</string>
<string name="spoken_emoji_2049" msgid="4877256448299555371">"Suallı nida işarəsi"</string>
<string name="spoken_emoji_2122" msgid="9188440722954720429">"Ticarət nişanı"</string>
- <string name="spoken_emoji_2139" msgid="9114342638917304327">"Informasiya mənbəyi"</string>
+ <string name="spoken_emoji_2139" msgid="9114342638917304327">"İnformasiya mənbəyi"</string>
<string name="spoken_emoji_2194" msgid="8055202727034946680">"Sola-sağa ox"</string>
<string name="spoken_emoji_2195" msgid="8028122253301087407">"Yuxarı-aşağı ox"</string>
<string name="spoken_emoji_2196" msgid="4019164898967854363">"Şimal-qərb ox"</string>
@@ -55,7 +55,7 @@
<string name="spoken_emoji_2601" msgid="6205136889311537150">"Bulud"</string>
<string name="spoken_emoji_260E" msgid="8670395193046424238">"Qara telefon"</string>
<string name="spoken_emoji_2611" msgid="4530550203347054611">"Qeydli səsvermə qutusu"</string>
- <string name="spoken_emoji_2614" msgid="1612791247861229500">"Damcılı çətir"</string>
+ <string name="spoken_emoji_2614" msgid="1612791247861229500">"Yağışlı çətir"</string>
<string name="spoken_emoji_2615" msgid="3320562382424018588">"İsti içki"</string>
<string name="spoken_emoji_261D" msgid="4690554173549768467">"Yuxarı göstərən barmaq"</string>
<string name="spoken_emoji_263A" msgid="3170094381521989300">"Ağ gülümsəyən sima"</string>
@@ -63,7 +63,7 @@
<string name="spoken_emoji_2649" msgid="7694461245947059086">"Buğa"</string>
<string name="spoken_emoji_264A" msgid="1258074605878705030">"Əkizlər"</string>
<string name="spoken_emoji_264B" msgid="4409219914377810956">"Xərçəng"</string>
- <string name="spoken_emoji_264C" msgid="6520255367817054163">"Leo"</string>
+ <string name="spoken_emoji_264C" msgid="6520255367817054163">"Şir"</string>
<string name="spoken_emoji_264D" msgid="1504758945499854018">"Qız"</string>
<string name="spoken_emoji_264E" msgid="2354847104530633519">"Tərəzi"</string>
<string name="spoken_emoji_264F" msgid="5822933280406416112">"Əqrəb"</string>
@@ -74,12 +74,12 @@
<string name="spoken_emoji_2660" msgid="4541170554542412536">"Qara nizə"</string>
<string name="spoken_emoji_2663" msgid="3669352721942285724">"Qara xaç"</string>
<string name="spoken_emoji_2665" msgid="6347941599683765843">"Qara ürək"</string>
- <string name="spoken_emoji_2666" msgid="8296769213401115999">"Qara qaval"</string>
+ <string name="spoken_emoji_2666" msgid="8296769213401115999">"Qara romb"</string>
<string name="spoken_emoji_2668" msgid="7063148281053820386">"İsti bulaqlar"</string>
<string name="spoken_emoji_267B" msgid="21716857176812762">"Qara universal təkrar istifadə simvolu"</string>
<string name="spoken_emoji_267F" msgid="8833496533226475443">"Təkərli kreslo"</string>
<string name="spoken_emoji_2693" msgid="7443148847598433088">"Lövbər"</string>
- <string name="spoken_emoji_26A0" msgid="6272635532992727510">"Xəbərdarlıq"</string>
+ <string name="spoken_emoji_26A0" msgid="6272635532992727510">"Xəbərdarlıq işarəsi"</string>
<string name="spoken_emoji_26A1" msgid="5604749644693339145">"Yüksək voltaj simvolu"</string>
<string name="spoken_emoji_26AA" msgid="8005748091690377153">"Orta ağ çevrə"</string>
<string name="spoken_emoji_26AB" msgid="1655910278422753244">"Orta qara çevrə"</string>
@@ -91,12 +91,12 @@
<string name="spoken_emoji_26D4" msgid="2231451988209604130">"Giriş qadağası"</string>
<string name="spoken_emoji_26EA" msgid="7513319636103804907">"Kilsə"</string>
<string name="spoken_emoji_26F2" msgid="7134115206158891037">"Fəvvarə"</string>
- <string name="spoken_emoji_26F3" msgid="4912302210162075465">"Bayraqda deşik"</string>
+ <string name="spoken_emoji_26F3" msgid="4912302210162075465">"Deşikdə bayraq"</string>
<string name="spoken_emoji_26F5" msgid="4766328116769075217">"Yeklənli qayıq"</string>
<string name="spoken_emoji_26FA" msgid="5888017494809199037">"Çadır"</string>
<string name="spoken_emoji_26FD" msgid="2417060622927453534">"Yanacaq nasosu"</string>
<string name="spoken_emoji_2702" msgid="4005741160717451912">"Qara qayçı"</string>
- <string name="spoken_emoji_2705" msgid="164605766946697759">"Ağ ağır qeyd nişanı"</string>
+ <string name="spoken_emoji_2705" msgid="164605766946697759">"Ağ qalın qeyd nişanı"</string>
<string name="spoken_emoji_2708" msgid="7153840886849268988">"Təyyarə"</string>
<string name="spoken_emoji_2709" msgid="2217319160724311369">"Zərf"</string>
<string name="spoken_emoji_270A" msgid="508347232762319473">"Qaldırılmış yumruq"</string>
@@ -104,8 +104,8 @@
<string name="spoken_emoji_270C" msgid="1344288035704944581">"Qələbə əli"</string>
<string name="spoken_emoji_270F" msgid="6108251586067318718">"Karandaş"</string>
<string name="spoken_emoji_2712" msgid="6320544535087710482">"Qara pero"</string>
- <string name="spoken_emoji_2714" msgid="1968242800064001654">"Ağır qeyd nişanı"</string>
- <string name="spoken_emoji_2716" msgid="511941294762977228">"Ağır vurma x"</string>
+ <string name="spoken_emoji_2714" msgid="1968242800064001654">"Qalın qeyd nişanı"</string>
+ <string name="spoken_emoji_2716" msgid="511941294762977228">"Qalın x vurma işarəsi"</string>
<string name="spoken_emoji_2728" msgid="5650330815808691881">"Qığılcımlar"</string>
<string name="spoken_emoji_2733" msgid="8915809595141157327">"Səkkiz guşəli ulduz"</string>
<string name="spoken_emoji_2734" msgid="4846583547980754332">"Səkkiz guşəli qara ulduz"</string>
@@ -116,23 +116,23 @@
<string name="spoken_emoji_2753" msgid="6935897159942119808">"Qara sual işarəsi ornamenti"</string>
<string name="spoken_emoji_2754" msgid="7277504915105532954">"Ağ sual işarəsi ornamenti"</string>
<string name="spoken_emoji_2755" msgid="6853076969826960210">"Ağ nida işarəsi ornamenti"</string>
- <string name="spoken_emoji_2757" msgid="3707907828776912174">"Ağır nida işarəsi"</string>
+ <string name="spoken_emoji_2757" msgid="3707907828776912174">"Qalın nida işarəsi"</string>
<string name="spoken_emoji_2764" msgid="4214257843609432167">"Yüklü qara ürək"</string>
- <string name="spoken_emoji_2795" msgid="6563954833786162168">"Ağır toplama işarəsi"</string>
- <string name="spoken_emoji_2796" msgid="5990926508250772777">"Ağır çıxma işarəsi"</string>
- <string name="spoken_emoji_2797" msgid="24694184172879174">"Ağır bölmə işarəsi"</string>
+ <string name="spoken_emoji_2795" msgid="6563954833786162168">"Qalın toplama işarəsi"</string>
+ <string name="spoken_emoji_2796" msgid="5990926508250772777">"Qalın çıxma işarəsi"</string>
+ <string name="spoken_emoji_2797" msgid="24694184172879174">"Qalın bölmə işarəsi"</string>
<string name="spoken_emoji_27A1" msgid="3513434778263100580">"Qara sağa ox"</string>
- <string name="spoken_emoji_27B0" msgid="203395646864662198">"Buruq petlə"</string>
- <string name="spoken_emoji_27BF" msgid="4940514642375640510">"İkiqat buruq petlə"</string>
- <string name="spoken_emoji_2934" msgid="9062130477982973457">"Yuxarı əyilən sağa ox"</string>
- <string name="spoken_emoji_2935" msgid="6198710960720232074">"Aşağı əyilən sağa ox"</string>
+ <string name="spoken_emoji_27B0" msgid="203395646864662198">"Burulmuş halqa"</string>
+ <string name="spoken_emoji_27BF" msgid="4940514642375640510">"İki dəfə burulmuş halqa"</string>
+ <string name="spoken_emoji_2934" msgid="9062130477982973457">"Yuxarı sağa əyilən ox"</string>
+ <string name="spoken_emoji_2935" msgid="6198710960720232074">"Aşağı sağa əyilən ox"</string>
<string name="spoken_emoji_2B05" msgid="4813405635410707690">"Qara sola ox"</string>
<string name="spoken_emoji_2B06" msgid="1223172079106250748">"Qara yuxarı ox"</string>
<string name="spoken_emoji_2B07" msgid="1599124424746596150">"Qara aşağı ox"</string>
<string name="spoken_emoji_2B1B" msgid="3461247311988501626">"Qara böyük kvadrat"</string>
<string name="spoken_emoji_2B1C" msgid="5793146430145248915">"Ağ böyük kvadrat"</string>
<string name="spoken_emoji_2B50" msgid="3850845519526950524">"Ağ orta ulduz"</string>
- <string name="spoken_emoji_2B55" msgid="9137882158811541824">"Ağır böyük çevrə"</string>
+ <string name="spoken_emoji_2B55" msgid="9137882158811541824">"Böyük qalın çevrə"</string>
<string name="spoken_emoji_3030" msgid="4609172241893565639">"Dalğalı tire"</string>
<string name="spoken_emoji_303D" msgid="2545833934975907505">"Qismən dəyişmə işarəsi"</string>
<string name="spoken_emoji_3297" msgid="928912923628973800">"Çevrəli təbrik ideoqramı"</string>
@@ -163,18 +163,18 @@
<string name="spoken_emoji_1F234" msgid="3546951604285970768">"Kvadrat qəbul ideoqramı"</string>
<string name="spoken_emoji_1F235" msgid="5320186982841793711">"Kvadrat tam məşğulluq ideoqramı"</string>
<string name="spoken_emoji_1F236" msgid="879755752069393034">"Kvadrat ödənilmiş ideoqramı"</string>
- <string name="spoken_emoji_1F237" msgid="6741807001205851437">"Aylıq kvadrat ideoqraf"</string>
- <string name="spoken_emoji_1F238" msgid="5504414186438196912">"Kvadrat tətbiq ideoqrafı"</string>
- <string name="spoken_emoji_1F239" msgid="1634067311597618959">"Kvadrat endirim ideoqrafı"</string>
- <string name="spoken_emoji_1F23A" msgid="3107862957630169536">"Kvadrat biznes ideoqrafı"</string>
- <string name="spoken_emoji_1F250" msgid="6586943922806727907">"Çevrəli üstünlük ideoqrafı"</string>
- <string name="spoken_emoji_1F251" msgid="9099032855993346948">"Çevrəli qəbul ideoqrafı"</string>
+ <string name="spoken_emoji_1F237" msgid="6741807001205851437">"Aylıq kvadrat ideoqram"</string>
+ <string name="spoken_emoji_1F238" msgid="5504414186438196912">"Kvadrat tətbiq ideoqramı"</string>
+ <string name="spoken_emoji_1F239" msgid="1634067311597618959">"Kvadrat endirim ideoqramı"</string>
+ <string name="spoken_emoji_1F23A" msgid="3107862957630169536">"Kvadrat biznes ideoqramı"</string>
+ <string name="spoken_emoji_1F250" msgid="6586943922806727907">"Çevrəli üstünlük ideoqramı"</string>
+ <string name="spoken_emoji_1F251" msgid="9099032855993346948">"Çevrəli qəbul ideoqramı"</string>
<string name="spoken_emoji_1F300" msgid="4720098285295840383">"Siklon"</string>
<string name="spoken_emoji_1F301" msgid="3601962477653752974">"Dumanlı"</string>
<string name="spoken_emoji_1F302" msgid="3404357123421753593">"Bağlı çətir"</string>
<string name="spoken_emoji_1F303" msgid="3899301321538188206">"Ulduzlu gecə"</string>
<string name="spoken_emoji_1F304" msgid="2767148930689050040">"Dağların arxasından doğan günəş"</string>
- <string name="spoken_emoji_1F305" msgid="9165812924292061196">"Sunrise"</string>
+ <string name="spoken_emoji_1F305" msgid="9165812924292061196">"Günəşin doğuşu"</string>
<string name="spoken_emoji_1F306" msgid="5889294736109193104">"Toranlıqda şəhər peyzajı"</string>
<string name="spoken_emoji_1F307" msgid="2714290867291163713">"Binaların arxasında günün batması"</string>
<string name="spoken_emoji_1F308" msgid="688704703985173377">"Göy qurşağı"</string>
@@ -213,14 +213,14 @@
<string name="spoken_emoji_1F339" msgid="9128891447985256151">"Qızılgül"</string>
<string name="spoken_emoji_1F33A" msgid="2025828400095233078">"Əməköməci"</string>
<string name="spoken_emoji_1F33B" msgid="8163868254348448552">"Günəbaxan"</string>
- <string name="spoken_emoji_1F33C" msgid="6850371206262335812">"Blossom"</string>
+ <string name="spoken_emoji_1F33C" msgid="6850371206262335812">"Çiçək"</string>
<string name="spoken_emoji_1F33D" msgid="9033484052864509610">"Qarğıdalı qıçası"</string>
<string name="spoken_emoji_1F33E" msgid="2540173396638444120">"Düyü qıçası"</string>
<string name="spoken_emoji_1F33F" msgid="4384823344364908558">"Ot"</string>
<string name="spoken_emoji_1F340" msgid="3494255459156499305">"Dörd yarpaqlı yonca"</string>
<string name="spoken_emoji_1F341" msgid="4581959481754990158">"Ağcaqayın yarpağı"</string>
<string name="spoken_emoji_1F342" msgid="3119068426871821222">"Düşmüş yarpaq"</string>
- <string name="spoken_emoji_1F343" msgid="2663317495805149004">"Küləyin apardığı yarpaq"</string>
+ <string name="spoken_emoji_1F343" msgid="2663317495805149004">"Xəzan yarpağı"</string>
<string name="spoken_emoji_1F344" msgid="2738517881678722159">"Göbələk"</string>
<string name="spoken_emoji_1F345" msgid="6135288642349085554">"Pomidor"</string>
<string name="spoken_emoji_1F346" msgid="2075395322785406367">"Badımcan"</string>
@@ -245,11 +245,11 @@
<string name="spoken_emoji_1F359" msgid="3988148661730121958">"Düyü küftəsi"</string>
<string name="spoken_emoji_1F35A" msgid="1763824172198327268">"Bişmiş düyü"</string>
<string name="spoken_emoji_1F35B" msgid="62530406745717835">"Karri və düyü"</string>
- <string name="spoken_emoji_1F35C" msgid="7537756539198945509">"Buxarlı fincan"</string>
+ <string name="spoken_emoji_1F35C" msgid="7537756539198945509">"Buxarlanan kasa"</string>
<string name="spoken_emoji_1F35D" msgid="8173523083861875196">"Spagetti"</string>
<string name="spoken_emoji_1F35E" msgid="2935428307894662571">"Çörək"</string>
<string name="spoken_emoji_1F35F" msgid="4840297386785728443">"Fransızsayağı kartof"</string>
- <string name="spoken_emoji_1F360" msgid="4094659855684686801">"Qovulmuş şirin kartof"</string>
+ <string name="spoken_emoji_1F360" msgid="4094659855684686801">"Qovrulmuş şirin kartof"</string>
<string name="spoken_emoji_1F361" msgid="6475486395784096109">"Danqo"</string>
<string name="spoken_emoji_1F362" msgid="5004692577661076275">"Oden"</string>
<string name="spoken_emoji_1F363" msgid="1606603765717743806">"Suşi"</string>
@@ -267,7 +267,7 @@
<string name="spoken_emoji_1F36F" msgid="5577915387425169439">"Bal dibçəyi"</string>
<string name="spoken_emoji_1F370" msgid="7243244547866114951">"Dənəvər peçenye"</string>
<string name="spoken_emoji_1F371" msgid="6731527040552916358">"Bento qutusu"</string>
- <string name="spoken_emoji_1F372" msgid="1635035323832181733">"Qida dibçəyi"</string>
+ <string name="spoken_emoji_1F372" msgid="1635035323832181733">"Qazan"</string>
<string name="spoken_emoji_1F373" msgid="7799289534289221045">"Yeməkbişirmə"</string>
<string name="spoken_emoji_1F374" msgid="5973820884987069131">"Çəngəl-bıçaq"</string>
<string name="spoken_emoji_1F375" msgid="1074832087699617700">"Qulpsuz fincan"</string>
@@ -282,8 +282,8 @@
<string name="spoken_emoji_1F381" msgid="614180683680675444">"Bükülmüş hədiyyə"</string>
<string name="spoken_emoji_1F382" msgid="4720497171946687501">"Doğum günü tortu"</string>
<string name="spoken_emoji_1F383" msgid="3536505941578757623">"Jack fənəri"</string>
- <string name="spoken_emoji_1F384" msgid="1797870204479059004">"Midal yolkası"</string>
- <string name="spoken_emoji_1F385" msgid="1754174063483626367">"Noel ata"</string>
+ <string name="spoken_emoji_1F384" msgid="1797870204479059004">"Milad yolkası"</string>
+ <string name="spoken_emoji_1F385" msgid="1754174063483626367">"Şaxta Baba"</string>
<string name="spoken_emoji_1F386" msgid="2130445450758114746">"Fişəng"</string>
<string name="spoken_emoji_1F387" msgid="3403182563117999933">"Benqal odu fişəngi"</string>
<string name="spoken_emoji_1F388" msgid="2903047203723251804">"Şar"</string>
@@ -291,14 +291,14 @@
<string name="spoken_emoji_1F38A" msgid="6280428984773641322">"Konfetti topu"</string>
<string name="spoken_emoji_1F38B" msgid="4902225837479015489">"Tanabata ağacı"</string>
<string name="spoken_emoji_1F38C" msgid="7623268024030989365">"Çarpaz bayraqlar"</string>
- <string name="spoken_emoji_1F38D" msgid="8237542796124408528">"Küknar dekorasiya"</string>
+ <string name="spoken_emoji_1F38D" msgid="8237542796124408528">"Küknar dekorasiyası"</string>
<string name="spoken_emoji_1F38E" msgid="5373397476238212371">"Yapon kuklaları"</string>
<string name="spoken_emoji_1F38F" msgid="8754091376829552844">"Karp strimer"</string>
<string name="spoken_emoji_1F390" msgid="8903307048095431374">"Külək uğultusu"</string>
<string name="spoken_emoji_1F391" msgid="2134952069191911841">"Aya tamaşa mərasimi"</string>
<string name="spoken_emoji_1F392" msgid="6380405493914304737">"Məktəb çantası"</string>
<string name="spoken_emoji_1F393" msgid="6947890064872470996">"Akademik papaq"</string>
- <string name="spoken_emoji_1F3A0" msgid="3572095190082826057">"Karusel atı"</string>
+ <string name="spoken_emoji_1F3A0" msgid="3572095190082826057">"Karusel at"</string>
<string name="spoken_emoji_1F3A1" msgid="4300565511681058798">"Mənzərə çarxı"</string>
<string name="spoken_emoji_1F3A2" msgid="15486093912232140">"Dalğalı yelləncək"</string>
<string name="spoken_emoji_1F3A3" msgid="921739319504942924">"Qırmaq və balıq"</string>
@@ -307,7 +307,7 @@
<string name="spoken_emoji_1F3A6" msgid="26019057872319055">"Kino"</string>
<string name="spoken_emoji_1F3A7" msgid="837856608794094105">"Qulaqlıq"</string>
<string name="spoken_emoji_1F3A8" msgid="2332260356509244587">"Rəssam palitrası"</string>
- <string name="spoken_emoji_1F3A9" msgid="9045869366525115256">"Papaq"</string>
+ <string name="spoken_emoji_1F3A9" msgid="9045869366525115256">"Sehrbaz papağı"</string>
<string name="spoken_emoji_1F3AA" msgid="5728760354237132">"Sirk çadırı"</string>
<string name="spoken_emoji_1F3AB" msgid="1657997517193216284">"Bilet"</string>
<string name="spoken_emoji_1F3AC" msgid="4317366554314492152">"Çəkiliş lövhəsi"</string>
@@ -316,8 +316,8 @@
<string name="spoken_emoji_1F3AF" msgid="5420539221790296407">"Birbaşa zərbə"</string>
<string name="spoken_emoji_1F3B0" msgid="7440244806527891956">"Oyun avtomatı"</string>
<string name="spoken_emoji_1F3B1" msgid="545544382391379234">"Bilyard"</string>
- <string name="spoken_emoji_1F3B2" msgid="8302262034774787493">"Oyun ölüm"</string>
- <string name="spoken_emoji_1F3B3" msgid="5180870610771027520">"Bowling"</string>
+ <string name="spoken_emoji_1F3B2" msgid="8302262034774787493">"Zər oyunu"</string>
+ <string name="spoken_emoji_1F3B3" msgid="5180870610771027520">"Boulinq"</string>
<string name="spoken_emoji_1F3B4" msgid="4723852033266071564">"Güllü oyun kartları"</string>
<string name="spoken_emoji_1F3B5" msgid="1998470239850548554">"Musiqili qeyd"</string>
<string name="spoken_emoji_1F3B6" msgid="3827730457113941705">"Çoxsaylı musiqili qeyd"</string>
@@ -327,15 +327,15 @@
<string name="spoken_emoji_1F3BA" msgid="4284064120340683558">"Truba"</string>
<string name="spoken_emoji_1F3BB" msgid="2856598510069988745">"Skripka"</string>
<string name="spoken_emoji_1F3BC" msgid="1608424748821446230">"Musiqi qiyməti"</string>
- <string name="spoken_emoji_1F3BD" msgid="5490786111375627777">"Qaçan qurşaqlı köynək"</string>
+ <string name="spoken_emoji_1F3BD" msgid="5490786111375627777">"Kəmərli qaçış köynəyi"</string>
<string name="spoken_emoji_1F3BE" msgid="1851613105691627931">"Tennis raketi və topu"</string>
- <string name="spoken_emoji_1F3BF" msgid="6862405997423247921">"Ski və ski çəkməsi"</string>
+ <string name="spoken_emoji_1F3BF" msgid="6862405997423247921">"Xizək və xizək çəkməsi"</string>
<string name="spoken_emoji_1F3C0" msgid="7421420756115104085">"Basketbol və çənbər"</string>
<string name="spoken_emoji_1F3C1" msgid="6926537251677319922">"Dama-dama bayraq"</string>
<string name="spoken_emoji_1F3C2" msgid="5708596929237987082">"Snoubordçu"</string>
- <string name="spoken_emoji_1F3C3" msgid="5850982999510115824">"Qaçağan"</string>
- <string name="spoken_emoji_1F3C4" msgid="8468355585994639838">"Sörfer"</string>
- <string name="spoken_emoji_1F3C6" msgid="9094474706847545409">"Qənimət"</string>
+ <string name="spoken_emoji_1F3C3" msgid="5850982999510115824">"Qaçışçı"</string>
+ <string name="spoken_emoji_1F3C4" msgid="8468355585994639838">"Sörfçü"</string>
+ <string name="spoken_emoji_1F3C6" msgid="9094474706847545409">"Kubok"</string>
<string name="spoken_emoji_1F3C7" msgid="8172206200368370116">"At yarışması"</string>
<string name="spoken_emoji_1F3C8" msgid="5619171461277597709">"Amerikan futbolu"</string>
<string name="spoken_emoji_1F3C9" msgid="6371294008765871043">"Reqbi Futbolu"</string>
@@ -353,14 +353,14 @@
<string name="spoken_emoji_1F3EA" msgid="5081084413084360479">"Qarışıq mallar dükanı"</string>
<string name="spoken_emoji_1F3EB" msgid="7010966528205150525">"Məktəb"</string>
<string name="spoken_emoji_1F3EC" msgid="4845978861878295154">"Univermaq"</string>
- <string name="spoken_emoji_1F3ED" msgid="3980316226665215370">"Fabrika"</string>
+ <string name="spoken_emoji_1F3ED" msgid="3980316226665215370">"Zavod"</string>
<string name="spoken_emoji_1F3EE" msgid="1253964276770550248">"Izakaya fənəri"</string>
- <string name="spoken_emoji_1F3EF" msgid="1128975573507389883">"Yapon qəsri"</string>
- <string name="spoken_emoji_1F3F0" msgid="1544632297502291578">"Avropa qəsri"</string>
+ <string name="spoken_emoji_1F3EF" msgid="1128975573507389883">"Yapon qalası"</string>
+ <string name="spoken_emoji_1F3F0" msgid="1544632297502291578">"Avropa qalası"</string>
<string name="spoken_emoji_1F400" msgid="2063034795679578294">"Siçovul"</string>
<string name="spoken_emoji_1F401" msgid="6736421616217369594">"Siçan"</string>
<string name="spoken_emoji_1F402" msgid="7276670995895485604">"Öküz"</string>
- <string name="spoken_emoji_1F403" msgid="8045709541897118928">"Buyvol"</string>
+ <string name="spoken_emoji_1F403" msgid="8045709541897118928">"Su camışı"</string>
<string name="spoken_emoji_1F404" msgid="5240777285676662335">"İnək"</string>
<string name="spoken_emoji_1F406" msgid="5163461930159540018">"Leopard"</string>
<string name="spoken_emoji_1F407" msgid="6905370221172708160">"Dovşan"</string>
@@ -369,7 +369,7 @@
<string name="spoken_emoji_1F40A" msgid="1149626786411545043">"Timsah"</string>
<string name="spoken_emoji_1F40B" msgid="5199104921208397643">"Balina"</string>
<string name="spoken_emoji_1F40C" msgid="2704006052881702675">"İlbiz"</string>
- <string name="spoken_emoji_1F40D" msgid="8648186663643157522">"Ilan"</string>
+ <string name="spoken_emoji_1F40D" msgid="8648186663643157522">"İlan"</string>
<string name="spoken_emoji_1F40E" msgid="7219137467573327268">"At"</string>
<string name="spoken_emoji_1F40F" msgid="7834336676729040395">"Qoç"</string>
<string name="spoken_emoji_1F410" msgid="8686765722255775031">"Keçi"</string>
@@ -382,7 +382,7 @@
<string name="spoken_emoji_1F417" msgid="6836978415840795128">"Qaban"</string>
<string name="spoken_emoji_1F418" msgid="7926161463897783691">"Fil"</string>
<string name="spoken_emoji_1F419" msgid="1055233959755784186">"Osminoq"</string>
- <string name="spoken_emoji_1F41A" msgid="5195666556511558060">"Spiral qabıq"</string>
+ <string name="spoken_emoji_1F41A" msgid="5195666556511558060">"İlbiz qabığı"</string>
<string name="spoken_emoji_1F41B" msgid="7652480167465557832">"Böcək"</string>
<string name="spoken_emoji_1F41C" msgid="1123461148697574239">"Qarışqa"</string>
<string name="spoken_emoji_1F41D" msgid="718579308764058851">"Bal arısı"</string>
@@ -393,8 +393,8 @@
<string name="spoken_emoji_1F422" msgid="4106724877523329148">"Tısbağa"</string>
<string name="spoken_emoji_1F423" msgid="4077407945958691907">"Yumurtadan çıxan cücə"</string>
<string name="spoken_emoji_1F424" msgid="6911326019270172283">"Balaca cücə"</string>
- <string name="spoken_emoji_1F425" msgid="5466514196557885577">"Balaca cücə üz tərəfdən"</string>
- <string name="spoken_emoji_1F426" msgid="2163979138772892755">"Bird"</string>
+ <string name="spoken_emoji_1F425" msgid="5466514196557885577">"Önə baxan balaca cücə"</string>
+ <string name="spoken_emoji_1F426" msgid="2163979138772892755">"Quş"</string>
<string name="spoken_emoji_1F427" msgid="3585670324511212961">"Pinqvin"</string>
<string name="spoken_emoji_1F428" msgid="7955440808647898579">"Koala"</string>
<string name="spoken_emoji_1F429" msgid="5028269352809819035">"Pudel"</string>
@@ -407,7 +407,7 @@
<string name="spoken_emoji_1F430" msgid="525492897063150160">"Dovşan sifəti"</string>
<string name="spoken_emoji_1F431" msgid="6051358666235016851">"Pişik sifəti"</string>
<string name="spoken_emoji_1F432" msgid="7698001871193018305">"Əjdaha sifəti"</string>
- <string name="spoken_emoji_1F433" msgid="3762356053512899326">"Fontanlı balina"</string>
+ <string name="spoken_emoji_1F433" msgid="3762356053512899326">"Fontan vuran balina"</string>
<string name="spoken_emoji_1F434" msgid="3619943222159943226">"At sifəti"</string>
<string name="spoken_emoji_1F435" msgid="59199202683252958">"Meymun sifəti"</string>
<string name="spoken_emoji_1F436" msgid="340544719369009828">"İt sifəti"</string>
@@ -424,12 +424,12 @@
<string name="spoken_emoji_1F443" msgid="1491504447758933115">"Burun"</string>
<string name="spoken_emoji_1F444" msgid="3654613047946080332">"Ağız"</string>
<string name="spoken_emoji_1F445" msgid="7024905244040509204">"Dil"</string>
- <string name="spoken_emoji_1F446" msgid="2150365643636471745">"Ağ yuxarı göstərən bekhend indeks"</string>
- <string name="spoken_emoji_1F447" msgid="8794022344940891388">"Ağ aşağı göstərən bekhend indeks"</string>
- <string name="spoken_emoji_1F448" msgid="3261812959215550650">"Ağ sola göstərən bekhend indeks"</string>
- <string name="spoken_emoji_1F449" msgid="4764447975177805991">"Ağ sağa göstərən bekhend indeks"</string>
+ <string name="spoken_emoji_1F446" msgid="2150365643636471745">"Yuxarı işarə edən ağ rəngli əl indeksi"</string>
+ <string name="spoken_emoji_1F447" msgid="8794022344940891388">"Aşağı işarə edən ağ rəngli əl indeksi"</string>
+ <string name="spoken_emoji_1F448" msgid="3261812959215550650">"Sola işarə edən ağ rəngli əl indeksi"</string>
+ <string name="spoken_emoji_1F449" msgid="4764447975177805991">"Sağa işarə edən ağ rəngli əl indeksi"</string>
<string name="spoken_emoji_1F44A" msgid="7197417095486424841">"Yumruq işarəsi"</string>
- <string name="spoken_emoji_1F44B" msgid="1975968945250833117">"Yellənən ən işarəsi"</string>
+ <string name="spoken_emoji_1F44B" msgid="1975968945250833117">"Yellənən əl işarəsi"</string>
<string name="spoken_emoji_1F44C" msgid="3185919567897876562">"Ok əl işarəsi"</string>
<string name="spoken_emoji_1F44D" msgid="6182553970602667815">"Yuxarı baş barmaq işarəsi"</string>
<string name="spoken_emoji_1F44E" msgid="8030851867365111809">"Aşağı baş barmaq işarəsi"</string>
@@ -439,14 +439,14 @@
<string name="spoken_emoji_1F452" msgid="4567394011149905466">"Qadın papağı"</string>
<string name="spoken_emoji_1F453" msgid="5978410551173163010">"Eynək"</string>
<string name="spoken_emoji_1F454" msgid="348469036193323252">"Qalstuk"</string>
- <string name="spoken_emoji_1F455" msgid="5665118831861433578">"T-shirt"</string>
+ <string name="spoken_emoji_1F455" msgid="5665118831861433578">"Qısaqol köynək"</string>
<string name="spoken_emoji_1F456" msgid="1890991330923356408">"Cins"</string>
<string name="spoken_emoji_1F457" msgid="3904310482655702620">"Don"</string>
<string name="spoken_emoji_1F458" msgid="5704243858031107692">"Kimono"</string>
<string name="spoken_emoji_1F459" msgid="3553148747050035251">"Bikini"</string>
<string name="spoken_emoji_1F45A" msgid="1389654639484716101">"Qadın geyimi"</string>
<string name="spoken_emoji_1F45B" msgid="1113293170254222904">"Pulqabı"</string>
- <string name="spoken_emoji_1F45C" msgid="3410257778598006936">"Sumka"</string>
+ <string name="spoken_emoji_1F45C" msgid="3410257778598006936">"Çanta"</string>
<string name="spoken_emoji_1F45D" msgid="812176504300064819">"Kisə"</string>
<string name="spoken_emoji_1F45E" msgid="2901741399934723562">"Kişi ayaqqabısı"</string>
<string name="spoken_emoji_1F45F" msgid="6828566359287798863">"İdmançı ayaqqabısı"</string>
@@ -460,13 +460,13 @@
<string name="spoken_emoji_1F467" msgid="8237080594860144998">"Qız"</string>
<string name="spoken_emoji_1F468" msgid="6081300722526675382">"Kişi"</string>
<string name="spoken_emoji_1F469" msgid="1090140923076108158">"Qadın"</string>
- <string name="spoken_emoji_1F46A" msgid="5063570981942606595">"Ailəvi"</string>
+ <string name="spoken_emoji_1F46A" msgid="5063570981942606595">"Ailə"</string>
<string name="spoken_emoji_1F46B" msgid="6795882374287327952">"Qadın və kişi əl-ələ tutur"</string>
<string name="spoken_emoji_1F46C" msgid="6844464165783964495">"İki kişi əl-ələ tutur"</string>
<string name="spoken_emoji_1F46D" msgid="2316773068014053180">"İki qadın əl-ələ tutur"</string>
<string name="spoken_emoji_1F46E" msgid="5897625605860822401">"Polis içşisi"</string>
<string name="spoken_emoji_1F46F" msgid="7716871657717641490">"Dövşanqulaq qadın"</string>
- <string name="spoken_emoji_1F470" msgid="6409995400510338892">"Örtüklü gəlin"</string>
+ <string name="spoken_emoji_1F470" msgid="6409995400510338892">"Duvaqlı gəlin"</string>
<string name="spoken_emoji_1F471" msgid="3058247860441670806">"Sarı saçlı adam"</string>
<string name="spoken_emoji_1F472" msgid="3928854667819339142">"Qua pi maolu kişi"</string>
<string name="spoken_emoji_1F473" msgid="5921952095808988381">"Çalmalı kişi"</string>
@@ -480,29 +480,29 @@
<string name="spoken_emoji_1F47B" msgid="2608250873194079390">"Ruh"</string>
<string name="spoken_emoji_1F47C" msgid="3838699131276537421">"Uşaq mələk"</string>
<string name="spoken_emoji_1F47D" msgid="2874077455888369538">"Yad planetli"</string>
- <string name="spoken_emoji_1F47E" msgid="3642607168625579507">"Yad planetli monster"</string>
+ <string name="spoken_emoji_1F47E" msgid="3642607168625579507">"Yad planetli qulyabani"</string>
<string name="spoken_emoji_1F47F" msgid="441605977269926252">"İmp"</string>
<string name="spoken_emoji_1F480" msgid="3696253485164878739">"Kəllə"</string>
<string name="spoken_emoji_1F481" msgid="320408708521966893">"Qəbul bölməsi adamı"</string>
<string name="spoken_emoji_1F482" msgid="3424354860245608949">"Keşikçi"</string>
<string name="spoken_emoji_1F483" msgid="3221113594843849083">"Rəqqas"</string>
- <string name="spoken_emoji_1F484" msgid="7348014979080444885">"Pomada"</string>
- <string name="spoken_emoji_1F485" msgid="6133507975565116339">"Lak"</string>
- <string name="spoken_emoji_1F486" msgid="9085459968247394155">"Üz massajı"</string>
+ <string name="spoken_emoji_1F484" msgid="7348014979080444885">"Dodaq boyası"</string>
+ <string name="spoken_emoji_1F485" msgid="6133507975565116339">"Dırnaq boyası"</string>
+ <string name="spoken_emoji_1F486" msgid="9085459968247394155">"Üz masajı"</string>
<string name="spoken_emoji_1F487" msgid="1479113637259592150">"Saç düzümü"</string>
<string name="spoken_emoji_1F488" msgid="6922559285234100252">"Bərbərxana"</string>
<string name="spoken_emoji_1F489" msgid="8114863680950147305">"Şpris"</string>
<string name="spoken_emoji_1F48A" msgid="8526843630145963032">"Həb"</string>
- <string name="spoken_emoji_1F48B" msgid="2538528967897640292">"Öpüş"</string>
+ <string name="spoken_emoji_1F48B" msgid="2538528967897640292">"Öpüş izi"</string>
<string name="spoken_emoji_1F48C" msgid="1681173271652890232">"Sevgi məktubu"</string>
- <string name="spoken_emoji_1F48D" msgid="8259886164999042373">"Səs"</string>
+ <string name="spoken_emoji_1F48D" msgid="8259886164999042373">"Zəng"</string>
<string name="spoken_emoji_1F48E" msgid="8777981696011111101">"Qiymətli daş"</string>
- <string name="spoken_emoji_1F48F" msgid="741593675183677907">"Öp"</string>
+ <string name="spoken_emoji_1F48F" msgid="741593675183677907">"Öpüş"</string>
<string name="spoken_emoji_1F490" msgid="4482549128959806736">"Buket"</string>
<string name="spoken_emoji_1F491" msgid="2305245307882441500">"Ürəkli cütlük"</string>
<string name="spoken_emoji_1F492" msgid="3884119934804475732">"Toy"</string>
<string name="spoken_emoji_1F493" msgid="1208828371565525121">"Ürək döyüntüsü"</string>
- <string name="spoken_emoji_1F494" msgid="6198876398509338718">"Qırılmış ürək"</string>
+ <string name="spoken_emoji_1F494" msgid="6198876398509338718">"Sınmış qəlb"</string>
<string name="spoken_emoji_1F495" msgid="9206202744967130919">"İki ürək"</string>
<string name="spoken_emoji_1F496" msgid="5436953041732207775">"Parlaq ürək"</string>
<string name="spoken_emoji_1F497" msgid="7285142863951448473">"Böyüyən ürək"</string>
@@ -520,7 +520,7 @@
<string name="spoken_emoji_1F4A3" msgid="6378351742957821735">"Bomba"</string>
<string name="spoken_emoji_1F4A4" msgid="7217736258870346625">"Yuxu işarəsi"</string>
<string name="spoken_emoji_1F4A5" msgid="5401995723541239858">"Partlayış"</string>
- <string name="spoken_emoji_1F4A6" msgid="3837802182716483848">"Sıçrayan damcı işarəsi"</string>
+ <string name="spoken_emoji_1F4A6" msgid="3837802182716483848">"Tər işarəsi"</string>
<string name="spoken_emoji_1F4A7" msgid="5718438987757885141">"Damcı"</string>
<string name="spoken_emoji_1F4A8" msgid="4472108229720006377">"Tire simvolu"</string>
<string name="spoken_emoji_1F4A9" msgid="1240958472788430032">"Kakaşka"</string>
@@ -534,13 +534,13 @@
<string name="spoken_emoji_1F4B1" msgid="8339494003418572905">"Valyuta mübadiləsi"</string>
<string name="spoken_emoji_1F4B2" msgid="3179159430187243132">"Ağır dollar işarəsi"</string>
<string name="spoken_emoji_1F4B3" msgid="5375412518221759596">"Kredit kartı"</string>
- <string name="spoken_emoji_1F4B4" msgid="1068592463669453204">"Yen işarəsi əskinaz"</string>
+ <string name="spoken_emoji_1F4B4" msgid="1068592463669453204">"Yen işarəli əskinaz"</string>
<string name="spoken_emoji_1F4B5" msgid="1426708699891832564">"Dollar nişanlı əskinaz"</string>
<string name="spoken_emoji_1F4B6" msgid="8289249930736444837">"Avro işarəli əskinaz"</string>
<string name="spoken_emoji_1F4B7" msgid="5245100496860739429">"Funt işarəli əskinaz"</string>
<string name="spoken_emoji_1F4B8" msgid="4401099580477164440">"Qanadlı pul"</string>
<string name="spoken_emoji_1F4B9" msgid="647509393536679903">"Qalxan diaqram və yen işarəsi"</string>
- <string name="spoken_emoji_1F4BA" msgid="1269737854891046321">"Oturac"</string>
+ <string name="spoken_emoji_1F4BA" msgid="1269737854891046321">"Oturacaq"</string>
<string name="spoken_emoji_1F4BB" msgid="6252883563347816451">"Şəxsi kompüter"</string>
<string name="spoken_emoji_1F4BC" msgid="6182597732218446206">"Portfel"</string>
<string name="spoken_emoji_1F4BD" msgid="5820961044768829176">"Mini disk"</string>
@@ -549,17 +549,17 @@
<string name="spoken_emoji_1F4C0" msgid="491582501089694461">"DVD"</string>
<string name="spoken_emoji_1F4C1" msgid="6645461382494158111">"Fayl qovluğu"</string>
<string name="spoken_emoji_1F4C2" msgid="8095638715523765338">"Açıq fayl qovluğu"</string>
- <string name="spoken_emoji_1F4C3" msgid="3727274466173970142">"Əyilmiş səhifə"</string>
+ <string name="spoken_emoji_1F4C3" msgid="3727274466173970142">"Qatlanmış səhifə"</string>
<string name="spoken_emoji_1F4C4" msgid="4382570710795501612">"Səhifə"</string>
<string name="spoken_emoji_1F4C5" msgid="8693944622627762487">"Təqvim"</string>
- <string name="spoken_emoji_1F4C6" msgid="8469908708708424640">"Cırılan təqvim"</string>
+ <string name="spoken_emoji_1F4C6" msgid="8469908708708424640">"Qoparılan təqvim"</string>
<string name="spoken_emoji_1F4C7" msgid="2665313547987324495">"Kart indeksi"</string>
<string name="spoken_emoji_1F4C8" msgid="8007686702282833600">"Qalxan diaqram"</string>
<string name="spoken_emoji_1F4C9" msgid="2271951411192893684">"Düşən diaqram"</string>
<string name="spoken_emoji_1F4CA" msgid="3525692829622381444">"Panel diaqramı"</string>
<string name="spoken_emoji_1F4CB" msgid="977639227554095521">"Pano"</string>
- <string name="spoken_emoji_1F4CC" msgid="156107396088741574">"Kanselyar düyməsi"</string>
- <string name="spoken_emoji_1F4CD" msgid="4266572175361190231">"Yumru kanselyar düyməsi"</string>
+ <string name="spoken_emoji_1F4CC" msgid="156107396088741574">"Basmadüymə"</string>
+ <string name="spoken_emoji_1F4CD" msgid="4266572175361190231">"Yumru basmadüymə"</string>
<string name="spoken_emoji_1F4CE" msgid="6294288509864968290">"Skrepka"</string>
<string name="spoken_emoji_1F4CF" msgid="149679400831136810">"Düz xətkeş"</string>
<string name="spoken_emoji_1F4D0" msgid="8130339336619202915">"Üçbücaq xətkeş"</string>
@@ -578,12 +578,12 @@
<string name="spoken_emoji_1F4DD" msgid="2494006707147586786">"Memo"</string>
<string name="spoken_emoji_1F4DE" msgid="7883008605002117671">"Telefon qəbuledici"</string>
<string name="spoken_emoji_1F4DF" msgid="3538610110623780465">"Peycer"</string>
- <string name="spoken_emoji_1F4E0" msgid="2960778342609543077">"Fak cihazı"</string>
+ <string name="spoken_emoji_1F4E0" msgid="2960778342609543077">"Faks cihazı"</string>
<string name="spoken_emoji_1F4E1" msgid="6269733703719242108">"Peyk antennası"</string>
- <string name="spoken_emoji_1F4E2" msgid="1987535386302883116">"İctimai meqafon"</string>
- <string name="spoken_emoji_1F4E3" msgid="5588916572878599224">"Sevincli meqafon"</string>
- <string name="spoken_emoji_1F4E4" msgid="2063561529097749707">"Gedən sənəd siyirtməsi"</string>
- <string name="spoken_emoji_1F4E5" msgid="3232462702926143576">"Gələn sənəd siyirtməsi"</string>
+ <string name="spoken_emoji_1F4E2" msgid="1987535386302883116">"Dinamik səsyüksəldici"</string>
+ <string name="spoken_emoji_1F4E3" msgid="5588916572878599224">"Səsyüksəldici"</string>
+ <string name="spoken_emoji_1F4E4" msgid="2063561529097749707">"Göndəriləcək sənəd siyirməsi"</string>
+ <string name="spoken_emoji_1F4E5" msgid="3232462702926143576">"Gələn sənəd siyirməsi"</string>
<string name="spoken_emoji_1F4E6" msgid="3399454337197561635">"Paket"</string>
<string name="spoken_emoji_1F4E7" msgid="5557136988503873238">"E-poçt simvolu"</string>
<string name="spoken_emoji_1F4E8" msgid="30698793974124123">"Gələn zərf"</string>
@@ -600,23 +600,23 @@
<string name="spoken_emoji_1F4F3" msgid="5003984447315754658">"Vibrasiya rejimi"</string>
<string name="spoken_emoji_1F4F4" msgid="5549847566968306253">"Sönmüş mobil telefon"</string>
<string name="spoken_emoji_1F4F5" msgid="3660199448671699238">"Mobil telefon qadağası"</string>
- <string name="spoken_emoji_1F4F6" msgid="2676974903233268860">"Çubuqlu antenna"</string>
+ <string name="spoken_emoji_1F4F6" msgid="2676974903233268860">"Şəbəkə dalğası"</string>
<string name="spoken_emoji_1F4F7" msgid="2643891943105989039">"Kamera"</string>
<string name="spoken_emoji_1F4F9" msgid="4475626303058218048">"Videokamera"</string>
<string name="spoken_emoji_1F4FA" msgid="1079796186652960775">"Televiziya"</string>
<string name="spoken_emoji_1F4FB" msgid="3848729587403760645">"Radio"</string>
<string name="spoken_emoji_1F4FC" msgid="8370432508874310054">"Videokasset"</string>
- <string name="spoken_emoji_1F500" msgid="2389947994502144547">"Əyilmiş sağa oxlar"</string>
+ <string name="spoken_emoji_1F500" msgid="2389947994502144547">"Sağa əyilmiş oxlar"</string>
<string name="spoken_emoji_1F501" msgid="2132188352433347009">"Saat əqrəbi istiqamətində sağa və sola açıq çevrəli oxlar"</string>
<string name="spoken_emoji_1F502" msgid="2361976580513178391">"Çevrəyə alınmış saat əqrəbi istiqamətində sağa və sola açıq çevrəli oxlar"</string>
<string name="spoken_emoji_1F503" msgid="8936283551917858793">"Saat əqrəbi istiqamətində aşağı və yuxarı açıq çevrəli oxlar"</string>
<string name="spoken_emoji_1F504" msgid="708290317843535943">"Saat əqrəbi istiqaməti əksinə aşağı və yuxarı açıq çevrəli oxlar"</string>
<string name="spoken_emoji_1F505" msgid="6348909939004951860">"Alçaq parlaqlıq simvolu"</string>
<string name="spoken_emoji_1F506" msgid="4449609297521280173">"Yüksək parlaqlıq simvolu"</string>
- <string name="spoken_emoji_1F507" msgid="7136386694923708448">"Ləğv edilmə xəttli dinamik"</string>
+ <string name="spoken_emoji_1F507" msgid="7136386694923708448">"Ləğv edilmə xətli dinamik"</string>
<string name="spoken_emoji_1F508" msgid="5063567689831527865">"Dinamik"</string>
- <string name="spoken_emoji_1F509" msgid="3948050077992370791">"Bir səs xəttli dinamik"</string>
- <string name="spoken_emoji_1F50A" msgid="5818194948677277197">"Üç səs xəttli dinamik"</string>
+ <string name="spoken_emoji_1F509" msgid="3948050077992370791">"Bir xətli dinamik"</string>
+ <string name="spoken_emoji_1F50A" msgid="5818194948677277197">"Üç xətli dinamik"</string>
<string name="spoken_emoji_1F50B" msgid="8083470451266295876">"Batareya"</string>
<string name="spoken_emoji_1F50C" msgid="7793219132036431680">"Elektrik ştepseli"</string>
<string name="spoken_emoji_1F50D" msgid="8140244710637926780">"Sola əyilmiş lupa"</string>
@@ -624,18 +624,18 @@
<string name="spoken_emoji_1F50F" msgid="915079280472199605">"Dolma qələmli kilid"</string>
<string name="spoken_emoji_1F510" msgid="7658381761691758318">"Açarlı bağlı kilid"</string>
<string name="spoken_emoji_1F511" msgid="262319867774655688">"Açar"</string>
- <string name="spoken_emoji_1F512" msgid="5628688337255115175">"Kilidlə"</string>
+ <string name="spoken_emoji_1F512" msgid="5628688337255115175">"Kilid"</string>
<string name="spoken_emoji_1F513" msgid="8579201846619420981">"Açıq kilid"</string>
<string name="spoken_emoji_1F514" msgid="7027268683047322521">"Zəng"</string>
<string name="spoken_emoji_1F515" msgid="8903179856036069242">"Ləğv edilmiş zəng"</string>
<string name="spoken_emoji_1F516" msgid="108097933937925381">"Əlfəcin"</string>
<string name="spoken_emoji_1F517" msgid="2450846665734313397">"Link simvolu"</string>
<string name="spoken_emoji_1F518" msgid="7028220286841437832">"Radio düyməsi"</string>
- <string name="spoken_emoji_1F519" msgid="8211189165075445687">"Back with leftwards arrow above"</string>
- <string name="spoken_emoji_1F51A" msgid="823966751787338892">"End with leftwards arrow above"</string>
- <string name="spoken_emoji_1F51B" msgid="5920570742107943382">"On with exclamation mark with left right arrow above"</string>
- <string name="spoken_emoji_1F51C" msgid="110609810659826676">"Tezliklə üzərində sağa oxlarla"</string>
- <string name="spoken_emoji_1F51D" msgid="4087697222026095447">"Yuxarıda üzərində yuxarıya oxlarla"</string>
+ <string name="spoken_emoji_1F519" msgid="8211189165075445687">"Üzərində sola ox olan back simvolu"</string>
+ <string name="spoken_emoji_1F51A" msgid="823966751787338892">"Üzərində sola ox olan end simvolu"</string>
+ <string name="spoken_emoji_1F51B" msgid="5920570742107943382">"Üzərində sola sağa ox olan nida işarəli on simvolu"</string>
+ <string name="spoken_emoji_1F51C" msgid="110609810659826676">"Üzərində sağa ox olan soon simvolu"</string>
+ <string name="spoken_emoji_1F51D" msgid="4087697222026095447">"Üzərində yuxarı ox olan top simvolu"</string>
<string name="spoken_emoji_1F51E" msgid="8512873526157201775">"On səkkiz yaşdan aşağı qadağası"</string>
<string name="spoken_emoji_1F51F" msgid="8673370823728653973">"Klaviş qapağı on"</string>
<string name="spoken_emoji_1F520" msgid="7335109890337048900">"Böyük latın hərfləri üçün daxiletmə simvolu"</string>
@@ -704,7 +704,7 @@
<string name="spoken_emoji_1F604" msgid="5119021072966343531">"Açıq ağızlı, gülən gözlərlə gülümsəyən sima"</string>
<string name="spoken_emoji_1F605" msgid="6140813923973561735">"Açıq ağızlı, soyuq tərli gülümsəyən sima"</string>
<string name="spoken_emoji_1F606" msgid="3549936813966832799">"Açıq ağızlı, qapalı gözlü gülümsəyən sima"</string>
- <string name="spoken_emoji_1F607" msgid="2826424078212384817">"Nimbalı gülümsyən sima"</string>
+ <string name="spoken_emoji_1F607" msgid="2826424078212384817">"Nimbalı gülümsəyən sima"</string>
<string name="spoken_emoji_1F608" msgid="7343559595089811640">"Buynuzlu gülümsəyən sima"</string>
<string name="spoken_emoji_1F609" msgid="5481030187207504405">"Göz vuran sima"</string>
<string name="spoken_emoji_1F60A" msgid="5023337769148679767">"Gülən gözlərlə gülümsəyən sima"</string>
@@ -714,7 +714,7 @@
<string name="spoken_emoji_1F60E" msgid="441718886380605643">"Gün eynəkli gülümsəyən sima"</string>
<string name="spoken_emoji_1F60F" msgid="2674453144890180538">"Oğruncasına gülümsəyən sima"</string>
<string name="spoken_emoji_1F610" msgid="3225675825334102369">"Neytral sima"</string>
- <string name="spoken_emoji_1F611" msgid="7199179827619679668">"Ifadəsiz sima"</string>
+ <string name="spoken_emoji_1F611" msgid="7199179827619679668">"İfadəsiz sima"</string>
<string name="spoken_emoji_1F612" msgid="985081329745137998">"Bezmiş sima"</string>
<string name="spoken_emoji_1F613" msgid="5548607684830303562">"Soyuq tərli sima"</string>
<string name="spoken_emoji_1F614" msgid="3196305665259916390">"Fikirli sima"</string>
@@ -724,9 +724,9 @@
<string name="spoken_emoji_1F618" msgid="408207170572303753">"Öpüş atan sima"</string>
<string name="spoken_emoji_1F619" msgid="8645430335143153645">"Gülən gözlərlə öpən sima"</string>
<string name="spoken_emoji_1F61A" msgid="2882157190974340247">"Bağlı gözlərlə öpən sima"</string>
- <string name="spoken_emoji_1F61B" msgid="3765927202787211499">"Dil çıxardan sima"</string>
- <string name="spoken_emoji_1F61C" msgid="198943912107589389">"Dil çıxardan və göz vuran sima"</string>
- <string name="spoken_emoji_1F61D" msgid="7643546385877816182">"Qapalı gözlərlə dil çıxardan sima"</string>
+ <string name="spoken_emoji_1F61B" msgid="3765927202787211499">"Dil çıxaran sima"</string>
+ <string name="spoken_emoji_1F61C" msgid="198943912107589389">"Dil çıxaran və göz vuran sima"</string>
+ <string name="spoken_emoji_1F61D" msgid="7643546385877816182">"Qapalı gözlərlə dil çıxaran sima"</string>
<string name="spoken_emoji_1F61E" msgid="1528732952202098364">"Məyus sima"</string>
<string name="spoken_emoji_1F61F" msgid="1853664164636082404">"Narahat sima"</string>
<string name="spoken_emoji_1F620" msgid="6051942001307375830">"Hirsli sima"</string>
@@ -741,7 +741,7 @@
<string name="spoken_emoji_1F629" msgid="1411538490319190118">"Bezmiş sima"</string>
<string name="spoken_emoji_1F62A" msgid="4726686726690289969">"Yuxulu sima"</string>
<string name="spoken_emoji_1F62B" msgid="3221980473921623613">"Yorğun sima"</string>
- <string name="spoken_emoji_1F62C" msgid="4616356691941225182">"Qrimaslı sima"</string>
+ <string name="spoken_emoji_1F62C" msgid="4616356691941225182">"Qırışdırılmış sima"</string>
<string name="spoken_emoji_1F62D" msgid="4283677508698812232">"Hönkür-hönkür ağlayan sima"</string>
<string name="spoken_emoji_1F62E" msgid="726083405284353894">"Açıq ağızlı sima"</string>
<string name="spoken_emoji_1F62F" msgid="7746620088234710962">"Susmağa məcbur sima"</string>
@@ -811,10 +811,10 @@
<string name="spoken_emoji_1F6A3" msgid="8412962252222205387">"Avarlı qayıq"</string>
<string name="spoken_emoji_1F6A4" msgid="8867571300266339211">"Sürətli qayıq"</string>
<string name="spoken_emoji_1F6A5" msgid="7650260812741963884">"Horizontal svetofor"</string>
- <string name="spoken_emoji_1F6A6" msgid="485575967773793454">"Vertikal svetofor"</string>
+ <string name="spoken_emoji_1F6A6" msgid="485575967773793454">"Vertikal işıqfor"</string>
<string name="spoken_emoji_1F6A7" msgid="6411048933816976794">"Tikinti nişanı"</string>
<string name="spoken_emoji_1F6A8" msgid="6345717218374788364">"Yanar mayaklı polis maşınları"</string>
- <string name="spoken_emoji_1F6A9" msgid="6586380356807600412">"Postda üçbucaq bayraq"</string>
+ <string name="spoken_emoji_1F6A9" msgid="6586380356807600412">"Poçtda üçbucaq bayraq"</string>
<string name="spoken_emoji_1F6AA" msgid="8954448167261738885">"Qapı"</string>
<string name="spoken_emoji_1F6AB" msgid="5313946262888343544">"Giriş qadağası siqnalı"</string>
<string name="spoken_emoji_1F6AC" msgid="6946858177965948288">"Siqaret çəkmək simvolu"</string>
diff --git a/java/res/values-az-rAZ/strings-talkback-descriptions.xml b/java/res/values-az-rAZ/strings-talkback-descriptions.xml
index 0ff31f3b4..3a0596e56 100644
--- a/java/res/values-az-rAZ/strings-talkback-descriptions.xml
+++ b/java/res/values-az-rAZ/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Yerlər"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Simvollar"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Emotikonlar"</string>
+ <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+ <skip />
+ <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+ <skip />
</resources>
diff --git a/java/res/values-az-rAZ/strings.xml b/java/res/values-az-rAZ/strings.xml
index 5a40e9f14..f1f3e22ab 100644
--- a/java/res/values-az-rAZ/strings.xml
+++ b/java/res/values-az-rAZ/strings.xml
@@ -21,7 +21,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_input_options" msgid="3909945612939668554">"Daxiletmə seçimləri"</string>
- <string name="english_ime_research_log" msgid="8492602295696577851">"Araşdırma Jurnalı Əmrləri"</string>
<string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Kontakt adlarına baxın"</string>
<string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Orfoqrafik yoxlanış kontakt siyahınızdakı qeydlərdən istifadə edir"</string>
<string name="vibrate_on_keypress" msgid="5258079494276955460">"Vibrasiyalı klikləmə"</string>
@@ -84,8 +83,6 @@
<string name="select_language" msgid="3693815588777926848">"Daxiletmə dilləri"</string>
<string name="hint_add_to_dictionary" msgid="573678656946085380">"Yadda saxlamaq üçün yenidən toxunun"</string>
<string name="has_dictionary" msgid="6071847973466625007">"Lüğət mövcuddur"</string>
- <string name="prefs_enable_log" msgid="6620424505072963557">"İstifadəçi əks əlaqəsini aktiv et"</string>
- <string name="prefs_description_log" msgid="7525225584555429211">"İstifadə statistikası və xəta haqqında hesabatları avtomatik göndərməklə daxiletmə metodu redaktəsini təkmilləşdirməyə kömək edin."</string>
<string name="keyboard_layout" msgid="8451164783510487501">"Klaviatura teması"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"İngilis (BK)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"İngilis (ABŞ)"</string>
@@ -118,7 +115,6 @@
<string name="enable" msgid="5031294444630523247">"Aktiv et"</string>
<string name="not_now" msgid="6172462888202790482">"İndi yox"</string>
<string name="custom_input_style_already_exists" msgid="8008728952215449707">"Eyni daxiletmə üslubu artıq mövcuddur: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
- <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Rahat işləmə rejimi"</string>
<string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Klavişi uzun müddət basmada gecikmə"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Vibrasiyalı klikləmə müddəti"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Səsli klikləmə səsi"</string>
diff --git a/java/res/values-bg/strings-action-keys.xml b/java/res/values-bg/strings-action-keys.xml
index 13374a29c..3d295bba4 100644
--- a/java/res/values-bg/strings-action-keys.xml
+++ b/java/res/values-bg/strings-action-keys.xml
@@ -25,6 +25,8 @@
<string name="label_previous_key" msgid="1421141755779895275">"Назад"</string>
<string name="label_done_key" msgid="7564866296502630852">"Готово"</string>
<string name="label_send_key" msgid="482252074224462163">"Изпр."</string>
+ <!-- no translation found for label_search_key (7965186050435796642) -->
+ <skip />
<string name="label_pause_key" msgid="2225922926459730642">"Пауза"</string>
<string name="label_wait_key" msgid="5891247853595466039">"Изчакв."</string>
</resources>
diff --git a/java/res/values-bg/strings-talkback-descriptions.xml b/java/res/values-bg/strings-talkback-descriptions.xml
index 6997424c1..3f0ac83fc 100644
--- a/java/res/values-bg/strings-talkback-descriptions.xml
+++ b/java/res/values-bg/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Места"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Символи"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Емотикони"</string>
+ <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+ <skip />
+ <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+ <skip />
</resources>
diff --git a/java/res/values-bg/strings.xml b/java/res/values-bg/strings.xml
index 562e71b4f..c18b1083c 100644
--- a/java/res/values-bg/strings.xml
+++ b/java/res/values-bg/strings.xml
@@ -21,7 +21,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_input_options" msgid="3909945612939668554">"Опции за въвеждане"</string>
- <string name="english_ime_research_log" msgid="8492602295696577851">"Команди за рег. файл за проучвания"</string>
<string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Търсене на имена"</string>
<string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"За проверка на правописа се ползват записи от списъка с контакти"</string>
<string name="vibrate_on_keypress" msgid="5258079494276955460">"Да вибрира при натискане на клавиш"</string>
@@ -84,8 +83,6 @@
<string name="select_language" msgid="3693815588777926848">"Езици за въвеждане"</string>
<string name="hint_add_to_dictionary" msgid="573678656946085380">"Докоснете отново, за да запазите"</string>
<string name="has_dictionary" msgid="6071847973466625007">"Има достъп до речник"</string>
- <string name="prefs_enable_log" msgid="6620424505072963557">"Активиране на отзивите от потребителите"</string>
- <string name="prefs_description_log" msgid="7525225584555429211">"Помогнете за подобряването на този редактор за въвеждане чрез автоматично изпращане на статистически данни за употребата и сигнали за сривове"</string>
<string name="keyboard_layout" msgid="8451164783510487501">"Тема на клавиатурата"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"английски (Великобритания)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"английски (САЩ)"</string>
@@ -118,7 +115,6 @@
<string name="enable" msgid="5031294444630523247">"Активиране"</string>
<string name="not_now" msgid="6172462888202790482">"Не сега"</string>
<string name="custom_input_style_already_exists" msgid="8008728952215449707">"Същият стил на въвеждане вече съществува: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
- <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Режим за изучаване на използваемостта"</string>
<string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Забавяне при продълж. натискане"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Продълж. на вибриране при натискане"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Сила на звука при натиск. на клавиш"</string>
diff --git a/java/res/values-ca/strings-action-keys.xml b/java/res/values-ca/strings-action-keys.xml
index 9dcf219cc..5dcf4a337 100644
--- a/java/res/values-ca/strings-action-keys.xml
+++ b/java/res/values-ca/strings-action-keys.xml
@@ -25,6 +25,8 @@
<string name="label_previous_key" msgid="1421141755779895275">"Ant."</string>
<string name="label_done_key" msgid="7564866296502630852">"Fet"</string>
<string name="label_send_key" msgid="482252074224462163">"Envia"</string>
+ <!-- no translation found for label_search_key (7965186050435796642) -->
+ <skip />
<string name="label_pause_key" msgid="2225922926459730642">"Atura"</string>
<string name="label_wait_key" msgid="5891247853595466039">"Esp."</string>
</resources>
diff --git a/java/res/values-ca/strings-talkback-descriptions.xml b/java/res/values-ca/strings-talkback-descriptions.xml
index bd6077ad0..4097d9375 100644
--- a/java/res/values-ca/strings-talkback-descriptions.xml
+++ b/java/res/values-ca/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Llocs"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Símbols"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Emoticones"</string>
+ <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+ <skip />
+ <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+ <skip />
</resources>
diff --git a/java/res/values-ca/strings.xml b/java/res/values-ca/strings.xml
index e946ba78b..bb5b05413 100644
--- a/java/res/values-ca/strings.xml
+++ b/java/res/values-ca/strings.xml
@@ -21,7 +21,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_input_options" msgid="3909945612939668554">"Opcions d\'entrada"</string>
- <string name="english_ime_research_log" msgid="8492602295696577851">"Recerca d\'ordres de reg."</string>
<string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Cerca noms de contactes"</string>
<string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"El corrector ortogràfic utilitza entrades de la llista de contactes"</string>
<string name="vibrate_on_keypress" msgid="5258079494276955460">"Vibra en prémer tecles"</string>
@@ -84,8 +83,6 @@
<string name="select_language" msgid="3693815588777926848">"Idiomes d\'introducció"</string>
<string name="hint_add_to_dictionary" msgid="573678656946085380">"Torna a tocar per desar"</string>
<string name="has_dictionary" msgid="6071847973466625007">"Diccionari disponible"</string>
- <string name="prefs_enable_log" msgid="6620424505072963557">"Activa els comentaris de l\'usuari"</string>
- <string name="prefs_description_log" msgid="7525225584555429211">"Ajuda a millorar aquest editor de mètode d\'introducció de text mitjançant l\'enviament d\'estadístiques d\'ús i d\'informes d\'error."</string>
<string name="keyboard_layout" msgid="8451164783510487501">"Tema del teclat"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"Anglès (Regne Unit)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"Anglès (EUA)"</string>
@@ -118,7 +115,6 @@
<string name="enable" msgid="5031294444630523247">"Activa"</string>
<string name="not_now" msgid="6172462888202790482">"Ara no"</string>
<string name="custom_input_style_already_exists" msgid="8008728952215449707">"Ja existeix aquest estil d\'entrada: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
- <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Mode d\'estudi d\'usabilitat"</string>
<string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Retard en mantenir premut"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Durada vibració en prémer"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Volum del so en prémer tecles"</string>
diff --git a/java/res/values-cs/strings-action-keys.xml b/java/res/values-cs/strings-action-keys.xml
index e9545feca..0ff3506b5 100644
--- a/java/res/values-cs/strings-action-keys.xml
+++ b/java/res/values-cs/strings-action-keys.xml
@@ -25,6 +25,8 @@
<string name="label_previous_key" msgid="1421141755779895275">"Před."</string>
<string name="label_done_key" msgid="7564866296502630852">"Hot."</string>
<string name="label_send_key" msgid="482252074224462163">"Odes."</string>
+ <!-- no translation found for label_search_key (7965186050435796642) -->
+ <skip />
<string name="label_pause_key" msgid="2225922926459730642">"Pauza"</string>
<string name="label_wait_key" msgid="5891247853595466039">"Čekat"</string>
</resources>
diff --git a/java/res/values-cs/strings-talkback-descriptions.xml b/java/res/values-cs/strings-talkback-descriptions.xml
index 0e35c8239..dae9b7886 100644
--- a/java/res/values-cs/strings-talkback-descriptions.xml
+++ b/java/res/values-cs/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Místa"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Symboly"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Emotikony"</string>
+ <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+ <skip />
+ <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+ <skip />
</resources>
diff --git a/java/res/values-cs/strings.xml b/java/res/values-cs/strings.xml
index c093d8c50..b805d2820 100644
--- a/java/res/values-cs/strings.xml
+++ b/java/res/values-cs/strings.xml
@@ -21,7 +21,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_input_options" msgid="3909945612939668554">"Možnosti zadávání textu a dat"</string>
- <string name="english_ime_research_log" msgid="8492602295696577851">"Příkazy vývoj. protokolu"</string>
<string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Vyhledat kontakty"</string>
<string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Kontrola pravopisu používá záznamy z vašeho seznamu kontaktů."</string>
<string name="vibrate_on_keypress" msgid="5258079494276955460">"Při stisku klávesy vibrovat"</string>
@@ -84,8 +83,6 @@
<string name="select_language" msgid="3693815588777926848">"Vstupní jazyky"</string>
<string name="hint_add_to_dictionary" msgid="573678656946085380">"Opětovným dotykem provedete uložení"</string>
<string name="has_dictionary" msgid="6071847973466625007">"Slovník k dispozici"</string>
- <string name="prefs_enable_log" msgid="6620424505072963557">"Aktivovat zasílání statistik užívání a zpráv o selhání"</string>
- <string name="prefs_description_log" msgid="7525225584555429211">"Pomozte nám vylepšit tento editor pro zadávání dat automatickým zasíláním statistik využití a zpráv o selhání do Googlu."</string>
<string name="keyboard_layout" msgid="8451164783510487501">"Motiv klávesnice"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"angličtina (Velká Británie)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"angličtina (USA)"</string>
@@ -118,7 +115,6 @@
<string name="enable" msgid="5031294444630523247">"Povolit"</string>
<string name="not_now" msgid="6172462888202790482">"Teď ne"</string>
<string name="custom_input_style_already_exists" msgid="8008728952215449707">"Tento styl zadávání již existuje: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
- <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Režim studie použitelnosti"</string>
<string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Prodleva dlouhého stisknutí"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Délka vibrace u stisku klávesy"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Hlasitost stisknutí klávesy"</string>
diff --git a/java/res/values-da/strings-action-keys.xml b/java/res/values-da/strings-action-keys.xml
index 757dc00d4..96021e5a9 100644
--- a/java/res/values-da/strings-action-keys.xml
+++ b/java/res/values-da/strings-action-keys.xml
@@ -25,6 +25,8 @@
<string name="label_previous_key" msgid="1421141755779895275">"Forr."</string>
<string name="label_done_key" msgid="7564866296502630852">"Udfør"</string>
<string name="label_send_key" msgid="482252074224462163">"Send"</string>
+ <!-- no translation found for label_search_key (7965186050435796642) -->
+ <skip />
<string name="label_pause_key" msgid="2225922926459730642">"Pause"</string>
<string name="label_wait_key" msgid="5891247853595466039">"Vent"</string>
</resources>
diff --git a/java/res/values-da/strings-talkback-descriptions.xml b/java/res/values-da/strings-talkback-descriptions.xml
index 669c18375..53326b344 100644
--- a/java/res/values-da/strings-talkback-descriptions.xml
+++ b/java/res/values-da/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Steder"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Symboler"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Humørikoner"</string>
+ <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+ <skip />
+ <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+ <skip />
</resources>
diff --git a/java/res/values-da/strings.xml b/java/res/values-da/strings.xml
index 65025b7a8..36263c65e 100644
--- a/java/res/values-da/strings.xml
+++ b/java/res/values-da/strings.xml
@@ -21,7 +21,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_input_options" msgid="3909945612939668554">"Indstillinger for input"</string>
- <string name="english_ime_research_log" msgid="8492602295696577851">"Forskningslogkommandoer"</string>
<string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Anvend kontaktnavne"</string>
<string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Stavekontrollen bruger ord fra dine kontaktpersondata"</string>
<string name="vibrate_on_keypress" msgid="5258079494276955460">"Vibration ved tastetryk"</string>
@@ -84,8 +83,6 @@
<string name="select_language" msgid="3693815588777926848">"Inputsprog"</string>
<string name="hint_add_to_dictionary" msgid="573678656946085380">"Tryk igen for at gemme"</string>
<string name="has_dictionary" msgid="6071847973466625007">"Ordbog er tilgængelig"</string>
- <string name="prefs_enable_log" msgid="6620424505072963557">"Aktivér brugerfeedback"</string>
- <string name="prefs_description_log" msgid="7525225584555429211">"Vær med til at forbedre dette redigeringsværktøj til indtastningsmetode ved automatisk at sende anvendelsesstatistikker og rapporter om nedbrud til Google."</string>
<string name="keyboard_layout" msgid="8451164783510487501">"Tastaturtema"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"Engelsk (Storbritannien)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"Engelsk (USA)"</string>
@@ -118,7 +115,6 @@
<string name="enable" msgid="5031294444630523247">"Aktivér"</string>
<string name="not_now" msgid="6172462888202790482">"Ikke nu"</string>
<string name="custom_input_style_already_exists" msgid="8008728952215449707">"Denne inputstil findes allerede: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
- <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Tilstand for brugsstudie"</string>
<string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Forsinket langt tastetryk"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Vibrationstid ved tastetryk"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Lydstyrke ved tastetryk"</string>
diff --git a/java/res/values-de/strings-action-keys.xml b/java/res/values-de/strings-action-keys.xml
index 95d3d7119..b55c2802f 100644
--- a/java/res/values-de/strings-action-keys.xml
+++ b/java/res/values-de/strings-action-keys.xml
@@ -25,6 +25,8 @@
<string name="label_previous_key" msgid="1421141755779895275">"Zurück"</string>
<string name="label_done_key" msgid="7564866296502630852">"Fertig"</string>
<string name="label_send_key" msgid="482252074224462163">"Senden"</string>
+ <!-- no translation found for label_search_key (7965186050435796642) -->
+ <skip />
<string name="label_pause_key" msgid="2225922926459730642">"Pause"</string>
<string name="label_wait_key" msgid="5891247853595466039">"Warten"</string>
</resources>
diff --git a/java/res/values-de/strings-talkback-descriptions.xml b/java/res/values-de/strings-talkback-descriptions.xml
index d5c54e04a..f926b9a59 100644
--- a/java/res/values-de/strings-talkback-descriptions.xml
+++ b/java/res/values-de/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Orte"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Symbole"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Emoticons"</string>
+ <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+ <skip />
+ <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+ <skip />
</resources>
diff --git a/java/res/values-de/strings.xml b/java/res/values-de/strings.xml
index f2074b762..aaa4c50db 100644
--- a/java/res/values-de/strings.xml
+++ b/java/res/values-de/strings.xml
@@ -21,7 +21,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_input_options" msgid="3909945612939668554">"Eingabeoptionen"</string>
- <string name="english_ime_research_log" msgid="8492602295696577851">"Forschungsprotokollbefehle"</string>
<string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Kontaktnamen prüfen"</string>
<string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Rechtschreibprüfung kann Einträge aus meiner Kontaktliste verwenden"</string>
<string name="vibrate_on_keypress" msgid="5258079494276955460">"Bei Tastendruck vibrieren"</string>
@@ -84,8 +83,6 @@
<string name="select_language" msgid="3693815588777926848">"Eingabesprachen"</string>
<string name="hint_add_to_dictionary" msgid="573678656946085380">"Zum Speichern erneut berühren"</string>
<string name="has_dictionary" msgid="6071847973466625007">"Wörterbuch verfügbar"</string>
- <string name="prefs_enable_log" msgid="6620424505072963557">"Nutzer-Feedback aktivieren"</string>
- <string name="prefs_description_log" msgid="7525225584555429211">"Tragen Sie zur Verbesserung dieses Eingabemethodeneditors bei, indem Sie automatisch Nutzungsstatistiken und Absturzberichte senden."</string>
<string name="keyboard_layout" msgid="8451164783510487501">"Tastaturdesign"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"Englisch (UK)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"Englisch (USA)"</string>
@@ -118,7 +115,6 @@
<string name="enable" msgid="5031294444630523247">"Aktivieren"</string>
<string name="not_now" msgid="6172462888202790482">"Später"</string>
<string name="custom_input_style_already_exists" msgid="8008728952215449707">"Der gleiche Eingabestil ist bereits vorhanden: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
- <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Studie zur Benutzerfreundlichkeit"</string>
<string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Verzögerung für langes Drücken"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Vibrationsdauer bei Tastendruck"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Tonlautstärke bei Tastendruck"</string>
diff --git a/java/res/values-el/strings-action-keys.xml b/java/res/values-el/strings-action-keys.xml
index a4093e3dc..8b5e395f0 100644
--- a/java/res/values-el/strings-action-keys.xml
+++ b/java/res/values-el/strings-action-keys.xml
@@ -25,6 +25,8 @@
<string name="label_previous_key" msgid="1421141755779895275">"Προηγούμενο"</string>
<string name="label_done_key" msgid="7564866296502630852">"Τέλος"</string>
<string name="label_send_key" msgid="482252074224462163">"Αποστολή"</string>
+ <!-- no translation found for label_search_key (7965186050435796642) -->
+ <skip />
<string name="label_pause_key" msgid="2225922926459730642">"Παύση"</string>
<string name="label_wait_key" msgid="5891247853595466039">"Αναμονή"</string>
</resources>
diff --git a/java/res/values-el/strings-talkback-descriptions.xml b/java/res/values-el/strings-talkback-descriptions.xml
index aef593cd7..3b990ad3f 100644
--- a/java/res/values-el/strings-talkback-descriptions.xml
+++ b/java/res/values-el/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Μέρη"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Σύμβολα"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Emoticon"</string>
+ <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+ <skip />
+ <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+ <skip />
</resources>
diff --git a/java/res/values-el/strings.xml b/java/res/values-el/strings.xml
index 7f0e3f3d7..aa7d60c3f 100644
--- a/java/res/values-el/strings.xml
+++ b/java/res/values-el/strings.xml
@@ -21,7 +21,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_input_options" msgid="3909945612939668554">"Επιλογές εισόδου"</string>
- <string name="english_ime_research_log" msgid="8492602295696577851">"Έρευνα εντολών καταγραφής"</string>
<string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Αναζήτηση ονομάτων επαφών"</string>
<string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Ο ορθογρ. έλεγχος χρησιμοπ. καταχωρίσεις από τη λίστα επαφών σας"</string>
<string name="vibrate_on_keypress" msgid="5258079494276955460">"Δόνηση κατά το πάτημα πλήκτρων"</string>
@@ -84,8 +83,6 @@
<string name="select_language" msgid="3693815588777926848">"Γλώσσες εισόδου"</string>
<string name="hint_add_to_dictionary" msgid="573678656946085380">"Αγγίξτε ξανά για αποθήκευση"</string>
<string name="has_dictionary" msgid="6071847973466625007">"Λεξικό διαθέσιμο"</string>
- <string name="prefs_enable_log" msgid="6620424505072963557">"Ενεργοποίηση σχολίων χρηστών"</string>
- <string name="prefs_description_log" msgid="7525225584555429211">"Βοηθήστε μας να βελτιώσουμε αυτό το πρόγραμμα επεξεργασίας μεθόδου εισόδου, στέλνοντας αυτόματα στατιστικά στοιχεία και αναφορές σφαλμάτων."</string>
<string name="keyboard_layout" msgid="8451164783510487501">"Θέμα πληκτρολογίου"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"Αγγλικά (Η.Β.)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"Αγγλικά (Η.Π.Α)"</string>
@@ -118,7 +115,6 @@
<string name="enable" msgid="5031294444630523247">"Ενεργοποίηση"</string>
<string name="not_now" msgid="6172462888202790482">"Όχι τώρα"</string>
<string name="custom_input_style_already_exists" msgid="8008728952215449707">"Το ίδιο στυλ εισόδου υπάρχει ήδη: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
- <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Λειτουργία μελέτης χρηστικότητας"</string>
<string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Καθυστέρηση παρατεταμένου πατήματος πλήκτρου"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Διάρκεια δόνησης πατήμ. πλήκτ."</string>
<string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Ένταση ήχου πατήματος πλήκτρου"</string>
diff --git a/java/res/values-en-rGB/strings-action-keys.xml b/java/res/values-en-rGB/strings-action-keys.xml
index 366cf3cdf..b8b02e149 100644
--- a/java/res/values-en-rGB/strings-action-keys.xml
+++ b/java/res/values-en-rGB/strings-action-keys.xml
@@ -25,6 +25,8 @@
<string name="label_previous_key" msgid="1421141755779895275">"Prev"</string>
<string name="label_done_key" msgid="7564866296502630852">"Finished"</string>
<string name="label_send_key" msgid="482252074224462163">"Send"</string>
+ <!-- no translation found for label_search_key (7965186050435796642) -->
+ <skip />
<string name="label_pause_key" msgid="2225922926459730642">"Pause"</string>
<string name="label_wait_key" msgid="5891247853595466039">"Wait"</string>
</resources>
diff --git a/java/res/values-en-rGB/strings-talkback-descriptions.xml b/java/res/values-en-rGB/strings-talkback-descriptions.xml
index c6c8f6d79..225df1ad6 100644
--- a/java/res/values-en-rGB/strings-talkback-descriptions.xml
+++ b/java/res/values-en-rGB/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Places"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Symbols"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Emoticons"</string>
+ <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+ <skip />
+ <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+ <skip />
</resources>
diff --git a/java/res/values-en-rGB/strings.xml b/java/res/values-en-rGB/strings.xml
index 89e978925..dbc3712d0 100644
--- a/java/res/values-en-rGB/strings.xml
+++ b/java/res/values-en-rGB/strings.xml
@@ -21,7 +21,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_input_options" msgid="3909945612939668554">"Input options"</string>
- <string name="english_ime_research_log" msgid="8492602295696577851">"Research Log Commands"</string>
<string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Look up contact names"</string>
<string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Spell checker uses entries from your contact list"</string>
<string name="vibrate_on_keypress" msgid="5258079494276955460">"Vibrate on keypress"</string>
@@ -84,8 +83,6 @@
<string name="select_language" msgid="3693815588777926848">"Input languages"</string>
<string name="hint_add_to_dictionary" msgid="573678656946085380">"Touch again to save"</string>
<string name="has_dictionary" msgid="6071847973466625007">"Dictionary available"</string>
- <string name="prefs_enable_log" msgid="6620424505072963557">"Enable user feedback"</string>
- <string name="prefs_description_log" msgid="7525225584555429211">"Help improve this input method editor by automatically sending usage statistics and crash reports"</string>
<string name="keyboard_layout" msgid="8451164783510487501">"Keyboard theme"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"English (UK)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"English (US)"</string>
@@ -118,7 +115,6 @@
<string name="enable" msgid="5031294444630523247">"Enable"</string>
<string name="not_now" msgid="6172462888202790482">"Not now"</string>
<string name="custom_input_style_already_exists" msgid="8008728952215449707">"The same input style already exists: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
- <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Usability study mode"</string>
<string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Key long press delay"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Keypress vibration duration"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Keypress sound volume"</string>
diff --git a/java/res/values-en-rIN/strings-action-keys.xml b/java/res/values-en-rIN/strings-action-keys.xml
index 366cf3cdf..b8b02e149 100644
--- a/java/res/values-en-rIN/strings-action-keys.xml
+++ b/java/res/values-en-rIN/strings-action-keys.xml
@@ -25,6 +25,8 @@
<string name="label_previous_key" msgid="1421141755779895275">"Prev"</string>
<string name="label_done_key" msgid="7564866296502630852">"Finished"</string>
<string name="label_send_key" msgid="482252074224462163">"Send"</string>
+ <!-- no translation found for label_search_key (7965186050435796642) -->
+ <skip />
<string name="label_pause_key" msgid="2225922926459730642">"Pause"</string>
<string name="label_wait_key" msgid="5891247853595466039">"Wait"</string>
</resources>
diff --git a/java/res/values-en-rIN/strings-talkback-descriptions.xml b/java/res/values-en-rIN/strings-talkback-descriptions.xml
index c6c8f6d79..225df1ad6 100644
--- a/java/res/values-en-rIN/strings-talkback-descriptions.xml
+++ b/java/res/values-en-rIN/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Places"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Symbols"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Emoticons"</string>
+ <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+ <skip />
+ <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+ <skip />
</resources>
diff --git a/java/res/values-en-rIN/strings.xml b/java/res/values-en-rIN/strings.xml
index 89e978925..dbc3712d0 100644
--- a/java/res/values-en-rIN/strings.xml
+++ b/java/res/values-en-rIN/strings.xml
@@ -21,7 +21,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_input_options" msgid="3909945612939668554">"Input options"</string>
- <string name="english_ime_research_log" msgid="8492602295696577851">"Research Log Commands"</string>
<string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Look up contact names"</string>
<string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Spell checker uses entries from your contact list"</string>
<string name="vibrate_on_keypress" msgid="5258079494276955460">"Vibrate on keypress"</string>
@@ -84,8 +83,6 @@
<string name="select_language" msgid="3693815588777926848">"Input languages"</string>
<string name="hint_add_to_dictionary" msgid="573678656946085380">"Touch again to save"</string>
<string name="has_dictionary" msgid="6071847973466625007">"Dictionary available"</string>
- <string name="prefs_enable_log" msgid="6620424505072963557">"Enable user feedback"</string>
- <string name="prefs_description_log" msgid="7525225584555429211">"Help improve this input method editor by automatically sending usage statistics and crash reports"</string>
<string name="keyboard_layout" msgid="8451164783510487501">"Keyboard theme"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"English (UK)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"English (US)"</string>
@@ -118,7 +115,6 @@
<string name="enable" msgid="5031294444630523247">"Enable"</string>
<string name="not_now" msgid="6172462888202790482">"Not now"</string>
<string name="custom_input_style_already_exists" msgid="8008728952215449707">"The same input style already exists: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
- <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Usability study mode"</string>
<string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Key long press delay"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Keypress vibration duration"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Keypress sound volume"</string>
diff --git a/java/res/values-es-rUS/strings-action-keys.xml b/java/res/values-es-rUS/strings-action-keys.xml
index d375617f4..5921ff43d 100644
--- a/java/res/values-es-rUS/strings-action-keys.xml
+++ b/java/res/values-es-rUS/strings-action-keys.xml
@@ -25,6 +25,8 @@
<string name="label_previous_key" msgid="1421141755779895275">"Ant."</string>
<string name="label_done_key" msgid="7564866296502630852">"Listo"</string>
<string name="label_send_key" msgid="482252074224462163">"Env."</string>
+ <!-- no translation found for label_search_key (7965186050435796642) -->
+ <skip />
<string name="label_pause_key" msgid="2225922926459730642">"Pausa"</string>
<string name="label_wait_key" msgid="5891247853595466039">"Esp."</string>
</resources>
diff --git a/java/res/values-es-rUS/strings-talkback-descriptions.xml b/java/res/values-es-rUS/strings-talkback-descriptions.xml
index 7ccc35f86..bdf2babbd 100644
--- a/java/res/values-es-rUS/strings-talkback-descriptions.xml
+++ b/java/res/values-es-rUS/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Lugares"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Símbolos"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Emoticones"</string>
+ <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+ <skip />
+ <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+ <skip />
</resources>
diff --git a/java/res/values-es-rUS/strings.xml b/java/res/values-es-rUS/strings.xml
index d440c0ce6..db34dd227 100644
--- a/java/res/values-es-rUS/strings.xml
+++ b/java/res/values-es-rUS/strings.xml
@@ -21,7 +21,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_input_options" msgid="3909945612939668554">"Opciones de entrada"</string>
- <string name="english_ime_research_log" msgid="8492602295696577851">"Comandos registro invest."</string>
<string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Buscar nombres contactos"</string>
<string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"El corrector ortográfico usa entradas de tu lista de contactos."</string>
<string name="vibrate_on_keypress" msgid="5258079494276955460">"Vibrar al pulsar teclas"</string>
@@ -84,8 +83,6 @@
<string name="select_language" msgid="3693815588777926848">"Idiomas de entrada"</string>
<string name="hint_add_to_dictionary" msgid="573678656946085380">"Vuelve a tocar para guardar."</string>
<string name="has_dictionary" msgid="6071847973466625007">"Diccionario disponible"</string>
- <string name="prefs_enable_log" msgid="6620424505072963557">"Activar los comentarios del usuario"</string>
- <string name="prefs_description_log" msgid="7525225584555429211">"Envíanos automáticamente las estadísticas de uso y los informes sobre fallos para ayudarnos a mejorar este editor de método de entrada de texto."</string>
<string name="keyboard_layout" msgid="8451164783510487501">"Tema del teclado"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"Inglés (Reino Unido)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"Inglés (EE.UU.)"</string>
@@ -118,7 +115,6 @@
<string name="enable" msgid="5031294444630523247">"Activar"</string>
<string name="not_now" msgid="6172462888202790482">"Ahora no"</string>
<string name="custom_input_style_already_exists" msgid="8008728952215449707">"Ya existe el estilo de entrada <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>."</string>
- <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Modo de estudio de usabilidad"</string>
<string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Demora de presión prolongada"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Durac. vibrac. al presionar"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Vol. sonido al presionar tecla"</string>
diff --git a/java/res/values-es/strings-action-keys.xml b/java/res/values-es/strings-action-keys.xml
index 2701146c8..4b3039d29 100644
--- a/java/res/values-es/strings-action-keys.xml
+++ b/java/res/values-es/strings-action-keys.xml
@@ -25,6 +25,8 @@
<string name="label_previous_key" msgid="1421141755779895275">"Anterior"</string>
<string name="label_done_key" msgid="7564866296502630852">"Listo"</string>
<string name="label_send_key" msgid="482252074224462163">"Enviar"</string>
+ <!-- no translation found for label_search_key (7965186050435796642) -->
+ <skip />
<string name="label_pause_key" msgid="2225922926459730642">"Pausar"</string>
<string name="label_wait_key" msgid="5891247853595466039">"Espera"</string>
</resources>
diff --git a/java/res/values-es/strings-talkback-descriptions.xml b/java/res/values-es/strings-talkback-descriptions.xml
index 2e21b6c44..9cc6f5de4 100644
--- a/java/res/values-es/strings-talkback-descriptions.xml
+++ b/java/res/values-es/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Sitios"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Símbolos"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Emoticonos"</string>
+ <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+ <skip />
+ <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+ <skip />
</resources>
diff --git a/java/res/values-es/strings.xml b/java/res/values-es/strings.xml
index 3476ac5dd..87671f428 100644
--- a/java/res/values-es/strings.xml
+++ b/java/res/values-es/strings.xml
@@ -21,7 +21,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_input_options" msgid="3909945612939668554">"Opciones entrada texto"</string>
- <string name="english_ime_research_log" msgid="8492602295696577851">"Comandos registro investigación"</string>
<string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Nombres de contactos"</string>
<string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Añadir nombres de tu lista de contactos al corrector"</string>
<string name="vibrate_on_keypress" msgid="5258079494276955460">"Vibrar al pulsar tecla"</string>
@@ -84,8 +83,6 @@
<string name="select_language" msgid="3693815588777926848">"Idiomas de introducción"</string>
<string name="hint_add_to_dictionary" msgid="573678656946085380">"Toca otra vez para guardar"</string>
<string name="has_dictionary" msgid="6071847973466625007">"Hay un diccionario disponible"</string>
- <string name="prefs_enable_log" msgid="6620424505072963557">"Habilitar comentarios de usuarios"</string>
- <string name="prefs_description_log" msgid="7525225584555429211">"Ayuda a mejorar este editor de método de introducción de texto enviando estadísticas de uso e informes de error."</string>
<string name="keyboard_layout" msgid="8451164783510487501">"Tema de teclado"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"inglés (Reino Unido)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"inglés (EE.UU.)"</string>
@@ -118,7 +115,6 @@
<string name="enable" msgid="5031294444630523247">"Habilitar"</string>
<string name="not_now" msgid="6172462888202790482">"Ahora no"</string>
<string name="custom_input_style_already_exists" msgid="8008728952215449707">"Ya existe el estilo de entrada <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>."</string>
- <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Modo estudio de usabilidad"</string>
<string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Retraso de pulsación prolongada"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Duración vibración al pulsar"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Volumen sonido al pulsar tecla"</string>
diff --git a/java/res/values-et-rEE/strings-action-keys.xml b/java/res/values-et-rEE/strings-action-keys.xml
index 64ba6d6d7..fa054dff0 100644
--- a/java/res/values-et-rEE/strings-action-keys.xml
+++ b/java/res/values-et-rEE/strings-action-keys.xml
@@ -25,6 +25,8 @@
<string name="label_previous_key" msgid="1421141755779895275">"Eelm."</string>
<string name="label_done_key" msgid="7564866296502630852">"Valmis"</string>
<string name="label_send_key" msgid="482252074224462163">"Saada"</string>
+ <!-- no translation found for label_search_key (7965186050435796642) -->
+ <skip />
<string name="label_pause_key" msgid="2225922926459730642">"Peata"</string>
<string name="label_wait_key" msgid="5891247853595466039">"Oota"</string>
</resources>
diff --git a/java/res/values-et-rEE/strings-talkback-descriptions.xml b/java/res/values-et-rEE/strings-talkback-descriptions.xml
index 000107195..092298730 100644
--- a/java/res/values-et-rEE/strings-talkback-descriptions.xml
+++ b/java/res/values-et-rEE/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Kohad"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Sümbolid"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Emotikonid"</string>
+ <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+ <skip />
+ <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+ <skip />
</resources>
diff --git a/java/res/values-et-rEE/strings.xml b/java/res/values-et-rEE/strings.xml
index 6fbc4b40c..e9c3f84ee 100644
--- a/java/res/values-et-rEE/strings.xml
+++ b/java/res/values-et-rEE/strings.xml
@@ -21,7 +21,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_input_options" msgid="3909945612939668554">"Sisestusvalikud"</string>
- <string name="english_ime_research_log" msgid="8492602295696577851">"Uuringulogi käsud"</string>
<string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Kontakti nimede kontroll."</string>
<string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Õigekirjakontroll kasutab teie kontaktisikute loendi sissekandeid"</string>
<string name="vibrate_on_keypress" msgid="5258079494276955460">"Vibreeri klahvivajutusel"</string>
@@ -84,8 +83,6 @@
<string name="select_language" msgid="3693815588777926848">"Sisestuskeeled"</string>
<string name="hint_add_to_dictionary" msgid="573678656946085380">"Salvestamiseks puudutage uuesti"</string>
<string name="has_dictionary" msgid="6071847973466625007">"Sõnastik saadaval"</string>
- <string name="prefs_enable_log" msgid="6620424505072963557">"Luba kasutaja tagasiside"</string>
- <string name="prefs_description_log" msgid="7525225584555429211">"Aidake seda sisestusmeetodi redigeerijat parandada, saates automaatselt kasutusstatistikat ja krahhiaruandeid."</string>
<string name="keyboard_layout" msgid="8451164783510487501">"Klaviatuuri teema"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"Inglise (UK)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"Inglise (USA)"</string>
@@ -118,7 +115,6 @@
<string name="enable" msgid="5031294444630523247">"Luba"</string>
<string name="not_now" msgid="6172462888202790482">"Mitte kohe"</string>
<string name="custom_input_style_already_exists" msgid="8008728952215449707">"Sama sisendstiil on juba olemas: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
- <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Kasutatavuse uurimisrežiim"</string>
<string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Pika klahvivajutuse viide"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Klahvivajutuse vibreerimise kestus"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Klahvivajutuse helitugevus"</string>
diff --git a/java/res/values-fa/strings-action-keys.xml b/java/res/values-fa/strings-action-keys.xml
index 78faa8c0b..ae393bbf6 100644
--- a/java/res/values-fa/strings-action-keys.xml
+++ b/java/res/values-fa/strings-action-keys.xml
@@ -25,6 +25,8 @@
<string name="label_previous_key" msgid="1421141755779895275">"قبلی"</string>
<string name="label_done_key" msgid="7564866296502630852">"اتمام"</string>
<string name="label_send_key" msgid="482252074224462163">"ارسال"</string>
+ <!-- no translation found for label_search_key (7965186050435796642) -->
+ <skip />
<string name="label_pause_key" msgid="2225922926459730642">"مکث"</string>
<string name="label_wait_key" msgid="5891247853595466039">"انتظار"</string>
</resources>
diff --git a/java/res/values-fa/strings-talkback-descriptions.xml b/java/res/values-fa/strings-talkback-descriptions.xml
index c4d4b2525..bc3a5bf7c 100644
--- a/java/res/values-fa/strings-talkback-descriptions.xml
+++ b/java/res/values-fa/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"مکان‌ها"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"نمادها"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"شکلک‌ها"</string>
+ <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+ <skip />
+ <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+ <skip />
</resources>
diff --git a/java/res/values-fa/strings.xml b/java/res/values-fa/strings.xml
index 04c6a5aca..16a53b3f9 100644
--- a/java/res/values-fa/strings.xml
+++ b/java/res/values-fa/strings.xml
@@ -21,7 +21,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_input_options" msgid="3909945612939668554">"گزینه‌های ورودی"</string>
- <string name="english_ime_research_log" msgid="8492602295696577851">"فرمان‌های گزارش‌گیری پژوهش"</string>
<string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"جستجوی نام مخاطبین"</string>
<string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"غلط‌گیر املا از ورودی‌های لیست مخاطبین شما استفاده می‌کند"</string>
<string name="vibrate_on_keypress" msgid="5258079494276955460">"لرزش با فشار کلید"</string>
@@ -84,8 +83,6 @@
<string name="select_language" msgid="3693815588777926848">"زبان‌های ورودی"</string>
<string name="hint_add_to_dictionary" msgid="573678656946085380">"برای ذخیره دوباره لمس کنید"</string>
<string name="has_dictionary" msgid="6071847973466625007">"دیکشنری موجود است"</string>
- <string name="prefs_enable_log" msgid="6620424505072963557">"فعال کردن بازخورد کاربر"</string>
- <string name="prefs_description_log" msgid="7525225584555429211">"با ارسال خودکار آمار استفاده و گزارش‌های خرابی، به بهبود این ویرایشگر روش ورودی کمک کنید"</string>
<string name="keyboard_layout" msgid="8451164783510487501">"طرح زمینه صفحه‌کلید"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"انگلیسی (بریتانیا)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"انگلیسی (امریکا)"</string>
@@ -118,7 +115,6 @@
<string name="enable" msgid="5031294444630523247">"فعال کردن"</string>
<string name="not_now" msgid="6172462888202790482">"الآن نه"</string>
<string name="custom_input_style_already_exists" msgid="8008728952215449707">"سبک ورودی مشابهی در حال حاضر وجود دارد: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
- <string name="prefs_usability_study_mode" msgid="1261130555134595254">"حالت بررسی قابلیت استفاده"</string>
<string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"تأخیر فشار طولانی کلید"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"طول مدت لرزش در اثر فشردن کلید"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"میزان صدای فشردن کلید"</string>
diff --git a/java/res/values-fi/strings-action-keys.xml b/java/res/values-fi/strings-action-keys.xml
index da7f11197..5472fc31a 100644
--- a/java/res/values-fi/strings-action-keys.xml
+++ b/java/res/values-fi/strings-action-keys.xml
@@ -25,6 +25,8 @@
<string name="label_previous_key" msgid="1421141755779895275">"Edel."</string>
<string name="label_done_key" msgid="7564866296502630852">"Valm."</string>
<string name="label_send_key" msgid="482252074224462163">"Läh."</string>
+ <!-- no translation found for label_search_key (7965186050435796642) -->
+ <skip />
<string name="label_pause_key" msgid="2225922926459730642">"Tauko"</string>
<string name="label_wait_key" msgid="5891247853595466039">"Odota"</string>
</resources>
diff --git a/java/res/values-fi/strings-emoji-descriptions.xml b/java/res/values-fi/strings-emoji-descriptions.xml
new file mode 100644
index 000000000..74f8a091d
--- /dev/null
+++ b/java/res/values-fi/strings-emoji-descriptions.xml
@@ -0,0 +1,846 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/*
+**
+** Copyright 2014, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="spoken_emoji_00A9" msgid="2859822817116803638">"Copyright-merkki"</string>
+ <string name="spoken_emoji_00AE" msgid="7708335454134589027">"Rekisteröidyn tavaramerkin merkki"</string>
+ <string name="spoken_emoji_203C" msgid="153340916701508663">"Kaksi huutomerkkiä"</string>
+ <string name="spoken_emoji_2049" msgid="4877256448299555371">"Huutomerkki ja kysymysmerkki"</string>
+ <string name="spoken_emoji_2122" msgid="9188440722954720429">"Tavaramerkin merkki"</string>
+ <string name="spoken_emoji_2139" msgid="9114342638917304327">"Tietolähde"</string>
+ <string name="spoken_emoji_2194" msgid="8055202727034946680">"Nuoli vasemmalle ja oikealle"</string>
+ <string name="spoken_emoji_2195" msgid="8028122253301087407">"Nuoli ylös ja alas"</string>
+ <string name="spoken_emoji_2196" msgid="4019164898967854363">"Nuoli vasemmalle ylös"</string>
+ <string name="spoken_emoji_2197" msgid="4255723717709017801">"Nuoli oikealle ylös"</string>
+ <string name="spoken_emoji_2198" msgid="1452063451313622090">"Nuoli oikealle alas"</string>
+ <string name="spoken_emoji_2199" msgid="6942722693368807849">"Nuoli vasemmalle alas"</string>
+ <string name="spoken_emoji_21A9" msgid="5204750172335111188">"Koukkunuoli vasemmalle"</string>
+ <string name="spoken_emoji_21AA" msgid="3950259884359247006">"Koukkunuoli oikealle"</string>
+ <string name="spoken_emoji_231A" msgid="6751448803233874993">"Katso"</string>
+ <string name="spoken_emoji_231B" msgid="5956428809948426182">"Tiimalasi"</string>
+ <string name="spoken_emoji_23E9" msgid="4022497733535162237">"Musta oikealle osoittava kaksoiskolmio"</string>
+ <string name="spoken_emoji_23EA" msgid="2251396938087774944">"Musta vasemmalle osoittava kaksoiskolmio"</string>
+ <string name="spoken_emoji_23EB" msgid="3746885195641491865">"Musta ylös osoittava kaksoiskolmio"</string>
+ <string name="spoken_emoji_23EC" msgid="7852372752901163416">"Musta alas osoittava kaksoiskolmio"</string>
+ <string name="spoken_emoji_23F0" msgid="8474219588750627870">"Herätyskello"</string>
+ <string name="spoken_emoji_23F3" msgid="166900119581024371">"Tiimalasi ja hiekka"</string>
+ <string name="spoken_emoji_24C2" msgid="3948348737566038470">"Ympyröity iso M-kirjain"</string>
+ <string name="spoken_emoji_25AA" msgid="7865181015100227349">"Pieni musta neliö"</string>
+ <string name="spoken_emoji_25AB" msgid="6446532820937381457">"Pieni valkoinen neliö"</string>
+ <string name="spoken_emoji_25B6" msgid="2423897708496040947">"Musta oikealle osoittava kolmio"</string>
+ <string name="spoken_emoji_25C0" msgid="3595083440074484934">"Musta vasemmalle osoittava kolmio"</string>
+ <string name="spoken_emoji_25FB" msgid="4838691986881215419">"Suuri valkoinen neliö"</string>
+ <string name="spoken_emoji_25FC" msgid="7008859564991191050">"Suuri musta neliö"</string>
+ <string name="spoken_emoji_25FD" msgid="7673439755069217479">"Valkoinen neliö"</string>
+ <string name="spoken_emoji_25FE" msgid="6782214109919768923">"Musta neliö"</string>
+ <string name="spoken_emoji_2600" msgid="2272722634618990413">"Musta aurinko"</string>
+ <string name="spoken_emoji_2601" msgid="6205136889311537150">"Pilvi"</string>
+ <string name="spoken_emoji_260E" msgid="8670395193046424238">"Musta puhelin"</string>
+ <string name="spoken_emoji_2611" msgid="4530550203347054611">"Valittu kyselyruutu"</string>
+ <string name="spoken_emoji_2614" msgid="1612791247861229500">"Sateenvarjo ja sadepisarat"</string>
+ <string name="spoken_emoji_2615" msgid="3320562382424018588">"Kuuma juoma"</string>
+ <string name="spoken_emoji_261D" msgid="4690554173549768467">"Valkoinen käsi, ylös osoittava etusormi"</string>
+ <string name="spoken_emoji_263A" msgid="3170094381521989300">"Valkoinen hymyilevä naama"</string>
+ <string name="spoken_emoji_2648" msgid="4621241062667020673">"Oinas"</string>
+ <string name="spoken_emoji_2649" msgid="7694461245947059086">"Härkä"</string>
+ <string name="spoken_emoji_264A" msgid="1258074605878705030">"Kaksoset"</string>
+ <string name="spoken_emoji_264B" msgid="4409219914377810956">"Rapu"</string>
+ <string name="spoken_emoji_264C" msgid="6520255367817054163">"Leijona"</string>
+ <string name="spoken_emoji_264D" msgid="1504758945499854018">"Neitsyt"</string>
+ <string name="spoken_emoji_264E" msgid="2354847104530633519">"Vaaka"</string>
+ <string name="spoken_emoji_264F" msgid="5822933280406416112">"Skorpioni"</string>
+ <string name="spoken_emoji_2650" msgid="4832481156714796163">"Jousimies"</string>
+ <string name="spoken_emoji_2651" msgid="840953134601595090">"Kauris"</string>
+ <string name="spoken_emoji_2652" msgid="3586925968718775281">"Vesimies"</string>
+ <string name="spoken_emoji_2653" msgid="8420547731496254492">"Kalat"</string>
+ <string name="spoken_emoji_2660" msgid="4541170554542412536">"Musta patasymboli"</string>
+ <string name="spoken_emoji_2663" msgid="3669352721942285724">"Musta ristisymboli"</string>
+ <string name="spoken_emoji_2665" msgid="6347941599683765843">"Musta herttasymboli"</string>
+ <string name="spoken_emoji_2666" msgid="8296769213401115999">"Musta ruutusymboli"</string>
+ <string name="spoken_emoji_2668" msgid="7063148281053820386">"Kuuma lähde"</string>
+ <string name="spoken_emoji_267B" msgid="21716857176812762">"Musta kierrätysmerkki"</string>
+ <string name="spoken_emoji_267F" msgid="8833496533226475443">"Pyörätuolin symboli"</string>
+ <string name="spoken_emoji_2693" msgid="7443148847598433088">"Ankkuri"</string>
+ <string name="spoken_emoji_26A0" msgid="6272635532992727510">"Varoitusmerkki"</string>
+ <string name="spoken_emoji_26A1" msgid="5604749644693339145">"Korkean jännitteen symboli"</string>
+ <string name="spoken_emoji_26AA" msgid="8005748091690377153">"Valkoinen ympyrä"</string>
+ <string name="spoken_emoji_26AB" msgid="1655910278422753244">"Musta ympyrä"</string>
+ <string name="spoken_emoji_26BD" msgid="1545218197938889737">"Jalkapallo"</string>
+ <string name="spoken_emoji_26BE" msgid="8959760533076498209">"Pesäpallo"</string>
+ <string name="spoken_emoji_26C4" msgid="3045791757044255626">"Lumiukko ilman lunta"</string>
+ <string name="spoken_emoji_26C5" msgid="5580129409712578639">"Aurinko pilven takana"</string>
+ <string name="spoken_emoji_26CE" msgid="8963656417276062998">"Käärmeenkantaja"</string>
+ <string name="spoken_emoji_26D4" msgid="2231451988209604130">"Kielletty ajosuunta"</string>
+ <string name="spoken_emoji_26EA" msgid="7513319636103804907">"Kirkko"</string>
+ <string name="spoken_emoji_26F2" msgid="7134115206158891037">"Suihkulähde"</string>
+ <string name="spoken_emoji_26F3" msgid="4912302210162075465">"Lippu reiässä"</string>
+ <string name="spoken_emoji_26F5" msgid="4766328116769075217">"Purjevene"</string>
+ <string name="spoken_emoji_26FA" msgid="5888017494809199037">"Teltta"</string>
+ <string name="spoken_emoji_26FD" msgid="2417060622927453534">"Polttoainepumppu"</string>
+ <string name="spoken_emoji_2702" msgid="4005741160717451912">"Mustat sakset"</string>
+ <string name="spoken_emoji_2705" msgid="164605766946697759">"Valkoinen valintamerkki"</string>
+ <string name="spoken_emoji_2708" msgid="7153840886849268988">"Lentokone"</string>
+ <string name="spoken_emoji_2709" msgid="2217319160724311369">"Kirjekuori"</string>
+ <string name="spoken_emoji_270A" msgid="508347232762319473">"Nyrkki"</string>
+ <string name="spoken_emoji_270B" msgid="6640562128327753423">"Pystyssä oleva kämmen"</string>
+ <string name="spoken_emoji_270C" msgid="1344288035704944581">"Voitonmerkki"</string>
+ <string name="spoken_emoji_270F" msgid="6108251586067318718">"Lyijykynä"</string>
+ <string name="spoken_emoji_2712" msgid="6320544535087710482">"Musta kynänkärki"</string>
+ <string name="spoken_emoji_2714" msgid="1968242800064001654">"Paksu valintamerkki"</string>
+ <string name="spoken_emoji_2716" msgid="511941294762977228">"Paksu kertomerkki"</string>
+ <string name="spoken_emoji_2728" msgid="5650330815808691881">"Tuikkivat tähdet"</string>
+ <string name="spoken_emoji_2733" msgid="8915809595141157327">"Kahdeksansakarainen tähti"</string>
+ <string name="spoken_emoji_2734" msgid="4846583547980754332">"Kahdeksansakarainen musta tähti"</string>
+ <string name="spoken_emoji_2744" msgid="4350636647760161042">"Lumihiutale"</string>
+ <string name="spoken_emoji_2747" msgid="3718282973916474455">"Kipinä"</string>
+ <string name="spoken_emoji_274C" msgid="2752145886733295314">"Ristimerkki"</string>
+ <string name="spoken_emoji_274E" msgid="4262918689871098338">"Valkoinen ristimerkki mustalla taustalla"</string>
+ <string name="spoken_emoji_2753" msgid="6935897159942119808">"Musta koristeellinen kysymysmerkki"</string>
+ <string name="spoken_emoji_2754" msgid="7277504915105532954">"Valkoinen koristeellinen kysymysmerkki"</string>
+ <string name="spoken_emoji_2755" msgid="6853076969826960210">"Valkoinen koristeellinen huutomerkki"</string>
+ <string name="spoken_emoji_2757" msgid="3707907828776912174">"Paksu huutomerkki"</string>
+ <string name="spoken_emoji_2764" msgid="4214257843609432167">"Väritetty sydän"</string>
+ <string name="spoken_emoji_2795" msgid="6563954833786162168">"Paksu plusmerkki"</string>
+ <string name="spoken_emoji_2796" msgid="5990926508250772777">"Paksu miinusmerkki"</string>
+ <string name="spoken_emoji_2797" msgid="24694184172879174">"Paksu jakomerkki"</string>
+ <string name="spoken_emoji_27A1" msgid="3513434778263100580">"Musta nuoli oikealle"</string>
+ <string name="spoken_emoji_27B0" msgid="203395646864662198">"Silmukka"</string>
+ <string name="spoken_emoji_27BF" msgid="4940514642375640510">"Kaksoissilmukka"</string>
+ <string name="spoken_emoji_2934" msgid="9062130477982973457">"Oikealle ja ylös osoittava nuoli"</string>
+ <string name="spoken_emoji_2935" msgid="6198710960720232074">"Oikealle ja alas osoittava nuoli"</string>
+ <string name="spoken_emoji_2B05" msgid="4813405635410707690">"Musta nuoli vasemmalle"</string>
+ <string name="spoken_emoji_2B06" msgid="1223172079106250748">"Musta nuoli ylös"</string>
+ <string name="spoken_emoji_2B07" msgid="1599124424746596150">"Musta nuoli alas"</string>
+ <string name="spoken_emoji_2B1B" msgid="3461247311988501626">"Suuri musta neliö"</string>
+ <string name="spoken_emoji_2B1C" msgid="5793146430145248915">"Suuri valkoinen neliö"</string>
+ <string name="spoken_emoji_2B50" msgid="3850845519526950524">"Valkoinen tähti"</string>
+ <string name="spoken_emoji_2B55" msgid="9137882158811541824">"Paksu suuri ympyrä"</string>
+ <string name="spoken_emoji_3030" msgid="4609172241893565639">"Aaltoviiva"</string>
+ <string name="spoken_emoji_303D" msgid="2545833934975907505">"Vuorottelumerkki"</string>
+ <string name="spoken_emoji_3297" msgid="928912923628973800">"Ideogrammi onnittelu ympyrän sisällä"</string>
+ <string name="spoken_emoji_3299" msgid="3930347573693668426">"Ideogrammi salaisuus ympyrän sisällä"</string>
+ <string name="spoken_emoji_1F004" msgid="1705216181345894600">"Mahjong-laatta, punainen lohikäärme"</string>
+ <string name="spoken_emoji_1F0CF" msgid="7601493592085987866">"Pelikortti, musta jokeri"</string>
+ <string name="spoken_emoji_1F170" msgid="3817698686602826773">"Veriryhmä A"</string>
+ <string name="spoken_emoji_1F171" msgid="3684218589626650242">"Veriryhmä B"</string>
+ <string name="spoken_emoji_1F17E" msgid="2978809190364779029">"Veriryhmä O"</string>
+ <string name="spoken_emoji_1F17F" msgid="463634348668462040">"Pysäköintialue"</string>
+ <string name="spoken_emoji_1F18E" msgid="1650705325221496768">"Veriryhmä AB"</string>
+ <string name="spoken_emoji_1F191" msgid="5386969264431429221">"CL neliön sisällä"</string>
+ <string name="spoken_emoji_1F192" msgid="8324226436829162496">"Sana COOL neliön sisällä"</string>
+ <string name="spoken_emoji_1F193" msgid="4731758603321515364">"Sana FREE neliön sisällä"</string>
+ <string name="spoken_emoji_1F194" msgid="4903128609556175887">"ID neliön sisällä"</string>
+ <string name="spoken_emoji_1F195" msgid="1433142500411060924">"Sana NEW neliön sisällä"</string>
+ <string name="spoken_emoji_1F196" msgid="8825160701159634202">"NG neliön sisällä"</string>
+ <string name="spoken_emoji_1F197" msgid="7841079241554176535">"OK neliön sisällä"</string>
+ <string name="spoken_emoji_1F198" msgid="7020298909426960622">"SOS neliön sisällä"</string>
+ <string name="spoken_emoji_1F199" msgid="5971252667136235630">"Sana UP ja huutomerkki neliön sisällä"</string>
+ <string name="spoken_emoji_1F19A" msgid="4557270135899843959">"VS neliön sisällä"</string>
+ <string name="spoken_emoji_1F201" msgid="7000490044681139002">"Katakana täällä neliön sisällä"</string>
+ <string name="spoken_emoji_1F202" msgid="8560906958695043947">"Katakana palvelu neliön sisällä"</string>
+ <string name="spoken_emoji_1F21A" msgid="1496435317324514033">"Ideogrammi maksuton neliön sisällä"</string>
+ <string name="spoken_emoji_1F22F" msgid="609797148862445402">"Ideogrammi varattu paikka neliön sisällä"</string>
+ <string name="spoken_emoji_1F232" msgid="8125716331632035820">"Ideogrammi kielto neliön sisällä"</string>
+ <string name="spoken_emoji_1F233" msgid="8749401090457355028">"Ideogrammi vapaita paikkoja neliön sisällä"</string>
+ <string name="spoken_emoji_1F234" msgid="3546951604285970768">"Ideogrammi hyväksyntä neliön sisällä"</string>
+ <string name="spoken_emoji_1F235" msgid="5320186982841793711">"Ideogrammi täynnä neliön sisällä"</string>
+ <string name="spoken_emoji_1F236" msgid="879755752069393034">"Ideogrammi maksettu neliön sisällä"</string>
+ <string name="spoken_emoji_1F237" msgid="6741807001205851437">"Ideogrammi kuukausittain neliön sisällä"</string>
+ <string name="spoken_emoji_1F238" msgid="5504414186438196912">"Ideogrammi tilaus neliön sisällä"</string>
+ <string name="spoken_emoji_1F239" msgid="1634067311597618959">"Ideogrammi alennus neliön sisällä"</string>
+ <string name="spoken_emoji_1F23A" msgid="3107862957630169536">"Ideogrammi liiketoiminta neliön sisällä"</string>
+ <string name="spoken_emoji_1F250" msgid="6586943922806727907">"Ideogrammi etu neliön sisällä"</string>
+ <string name="spoken_emoji_1F251" msgid="9099032855993346948">"Ideogrammi hyväksy ympyrän sisällä"</string>
+ <string name="spoken_emoji_1F300" msgid="4720098285295840383">"Pyörremyrsky"</string>
+ <string name="spoken_emoji_1F301" msgid="3601962477653752974">"Sumu"</string>
+ <string name="spoken_emoji_1F302" msgid="3404357123421753593">"Suljettu sateenvarjo"</string>
+ <string name="spoken_emoji_1F303" msgid="3899301321538188206">"Yömaisema"</string>
+ <string name="spoken_emoji_1F304" msgid="2767148930689050040">"Auringonnousu vuorilla"</string>
+ <string name="spoken_emoji_1F305" msgid="9165812924292061196">"Auringonnousu"</string>
+ <string name="spoken_emoji_1F306" msgid="5889294736109193104">"Kaupunkimaisema hämärässä"</string>
+ <string name="spoken_emoji_1F307" msgid="2714290867291163713">"Auringonlasku rakennusten taakse"</string>
+ <string name="spoken_emoji_1F308" msgid="688704703985173377">"Sateenkaari"</string>
+ <string name="spoken_emoji_1F309" msgid="6217981957992313528">"Silta yöllä"</string>
+ <string name="spoken_emoji_1F30A" msgid="4329309263152110893">"Vaahtopää"</string>
+ <string name="spoken_emoji_1F30B" msgid="5729430693700923112">"Tulivuori"</string>
+ <string name="spoken_emoji_1F30C" msgid="2961230863217543082">"Linnunrata"</string>
+ <string name="spoken_emoji_1F30D" msgid="1113905673331547953">"Maapallo, Eurooppa – Afrikka"</string>
+ <string name="spoken_emoji_1F30E" msgid="5278512600749223671">"Maapallo, Amerikat"</string>
+ <string name="spoken_emoji_1F30F" msgid="5718144880978707493">"Maapallo Aasia – Australia"</string>
+ <string name="spoken_emoji_1F310" msgid="2959618582975247601">"Maapallo ja pituuspiirit"</string>
+ <string name="spoken_emoji_1F311" msgid="623906380914895542">"Uudenkuun symboli"</string>
+ <string name="spoken_emoji_1F312" msgid="4458575672576125401">"Kasvavan kuunsirpin symboli"</string>
+ <string name="spoken_emoji_1F313" msgid="7599181787989497294">"Kuun ensimmäisen neljänneksen symboli"</string>
+ <string name="spoken_emoji_1F314" msgid="4898293184964365413">"Kasvavan puolikuun symboli"</string>
+ <string name="spoken_emoji_1F315" msgid="3218117051779496309">"Täysikuun symboli"</string>
+ <string name="spoken_emoji_1F316" msgid="2061317145777689569">"Vähenevän kuun symboli"</string>
+ <string name="spoken_emoji_1F317" msgid="2721090687319539049">"Kuun viimeisen neljänneksen symboli"</string>
+ <string name="spoken_emoji_1F318" msgid="3814091755648887570">"Vähenevän kuunsirpin symboli"</string>
+ <string name="spoken_emoji_1F319" msgid="4074299824890459465">"Kuunsirppi"</string>
+ <string name="spoken_emoji_1F31A" msgid="3092285278116977103">"Uusikuu, jolla kasvot"</string>
+ <string name="spoken_emoji_1F31B" msgid="2658562138386927881">"Ensimmäisen neljänneksen kuu, jolla kasvot"</string>
+ <string name="spoken_emoji_1F31C" msgid="7914768515547867384">"Viimeisen neljänneksen kuu, jolla kasvot"</string>
+ <string name="spoken_emoji_1F31D" msgid="1925730459848297182">"Täysikuu, jolla kasvot"</string>
+ <string name="spoken_emoji_1F31E" msgid="8022112382524084418">"Aurinko, jolla kasvot"</string>
+ <string name="spoken_emoji_1F31F" msgid="1051661214137766369">"Loistava tähti"</string>
+ <string name="spoken_emoji_1F320" msgid="5450591979068216115">"Tähdenlento"</string>
+ <string name="spoken_emoji_1F330" msgid="3115760035618051575">"Kastanja"</string>
+ <string name="spoken_emoji_1F331" msgid="5658888205290008691">"Taimi"</string>
+ <string name="spoken_emoji_1F332" msgid="2935650450421165938">"Havupuu"</string>
+ <string name="spoken_emoji_1F333" msgid="5898847427062482675">"Lehtipuu"</string>
+ <string name="spoken_emoji_1F334" msgid="6183375224678417894">"Palmu"</string>
+ <string name="spoken_emoji_1F335" msgid="5352418412103584941">"Kaktus"</string>
+ <string name="spoken_emoji_1F337" msgid="3839107352363566289">"Tulppaani"</string>
+ <string name="spoken_emoji_1F338" msgid="6389970364260468490">"Kirsikankukka"</string>
+ <string name="spoken_emoji_1F339" msgid="9128891447985256151">"Ruusu"</string>
+ <string name="spoken_emoji_1F33A" msgid="2025828400095233078">"Kiinanruusu"</string>
+ <string name="spoken_emoji_1F33B" msgid="8163868254348448552">"Auringonkukka"</string>
+ <string name="spoken_emoji_1F33C" msgid="6850371206262335812">"Kukka"</string>
+ <string name="spoken_emoji_1F33D" msgid="9033484052864509610">"Maissintähkä"</string>
+ <string name="spoken_emoji_1F33E" msgid="2540173396638444120">"Riisintähkä"</string>
+ <string name="spoken_emoji_1F33F" msgid="4384823344364908558">"Yrtti"</string>
+ <string name="spoken_emoji_1F340" msgid="3494255459156499305">"Neliapila"</string>
+ <string name="spoken_emoji_1F341" msgid="4581959481754990158">"Vaahteranlehti"</string>
+ <string name="spoken_emoji_1F342" msgid="3119068426871821222">"Pudonnut lehti"</string>
+ <string name="spoken_emoji_1F343" msgid="2663317495805149004">"Tuulessa leijaileva lehti"</string>
+ <string name="spoken_emoji_1F344" msgid="2738517881678722159">"Sieni"</string>
+ <string name="spoken_emoji_1F345" msgid="6135288642349085554">"Tomaatti"</string>
+ <string name="spoken_emoji_1F346" msgid="2075395322785406367">"Munakoiso"</string>
+ <string name="spoken_emoji_1F347" msgid="7753453754963890571">"Viinirypäleet"</string>
+ <string name="spoken_emoji_1F348" msgid="1247076837284932788">"Meloni"</string>
+ <string name="spoken_emoji_1F349" msgid="5563054555180611086">"Vesimeloni"</string>
+ <string name="spoken_emoji_1F34A" msgid="4688661208570160524">"Mandariini"</string>
+ <string name="spoken_emoji_1F34B" msgid="4335318423164185706">"Sitruuna"</string>
+ <string name="spoken_emoji_1F34C" msgid="3712827239858159474">"Banaani"</string>
+ <string name="spoken_emoji_1F34D" msgid="7712521967162622936">"Ananas"</string>
+ <string name="spoken_emoji_1F34E" msgid="1859466882598614228">"Punainen omena"</string>
+ <string name="spoken_emoji_1F34F" msgid="8251711032295005633">"Vihreä omena"</string>
+ <string name="spoken_emoji_1F350" msgid="625802980159197701">"Päärynä"</string>
+ <string name="spoken_emoji_1F351" msgid="4269460120610911895">"Persikka"</string>
+ <string name="spoken_emoji_1F352" msgid="965600953360182635">"Kirsikat"</string>
+ <string name="spoken_emoji_1F353" msgid="7068623879906925592">"Mansikka"</string>
+ <string name="spoken_emoji_1F354" msgid="45162285238888494">"Hampurilainen"</string>
+ <string name="spoken_emoji_1F355" msgid="9157587635526433283">"Pitsapala"</string>
+ <string name="spoken_emoji_1F356" msgid="2667196119149852244">"Lihainen luu"</string>
+ <string name="spoken_emoji_1F357" msgid="8022817413851052256">"Kanankoipi"</string>
+ <string name="spoken_emoji_1F358" msgid="3042693264748036476">"Riisikeksi"</string>
+ <string name="spoken_emoji_1F359" msgid="3988148661730121958">"Riisipallo"</string>
+ <string name="spoken_emoji_1F35A" msgid="1763824172198327268">"Keitetty riisi"</string>
+ <string name="spoken_emoji_1F35B" msgid="62530406745717835">"Curry ja riisi"</string>
+ <string name="spoken_emoji_1F35C" msgid="7537756539198945509">"Höyryävä kulho"</string>
+ <string name="spoken_emoji_1F35D" msgid="8173523083861875196">"Spagetti"</string>
+ <string name="spoken_emoji_1F35E" msgid="2935428307894662571">"Leipä"</string>
+ <string name="spoken_emoji_1F35F" msgid="4840297386785728443">"Ranskalaiset perunat"</string>
+ <string name="spoken_emoji_1F360" msgid="4094659855684686801">"Jamssi"</string>
+ <string name="spoken_emoji_1F361" msgid="6475486395784096109">"Dango"</string>
+ <string name="spoken_emoji_1F362" msgid="5004692577661076275">"Oden"</string>
+ <string name="spoken_emoji_1F363" msgid="1606603765717743806">"Sushi"</string>
+ <string name="spoken_emoji_1F364" msgid="6550457766169570811">"Friteeratut katkaravut"</string>
+ <string name="spoken_emoji_1F365" msgid="4963815540953316307">"Surimiviipale, jossa pyörrekuvio"</string>
+ <string name="spoken_emoji_1F366" msgid="7862401745277049404">"Pehmytjäätelö"</string>
+ <string name="spoken_emoji_1F367" msgid="7447972978281980414">"Murskattu jää"</string>
+ <string name="spoken_emoji_1F368" msgid="7790003146142724913">"Jäätelö"</string>
+ <string name="spoken_emoji_1F369" msgid="7383712944084857350">"Donitsi"</string>
+ <string name="spoken_emoji_1F36A" msgid="2726271795913042295">"Pikkuleipä"</string>
+ <string name="spoken_emoji_1F36B" msgid="6342163604299875931">"Suklaapatukka"</string>
+ <string name="spoken_emoji_1F36C" msgid="2168934753998218790">"Karamelli"</string>
+ <string name="spoken_emoji_1F36D" msgid="3671507903799975792">"Tikkukaramelli"</string>
+ <string name="spoken_emoji_1F36E" msgid="4630541402785165902">"Vanukas"</string>
+ <string name="spoken_emoji_1F36F" msgid="5577915387425169439">"Hunajapurkki"</string>
+ <string name="spoken_emoji_1F370" msgid="7243244547866114951">"Kakkuviipale"</string>
+ <string name="spoken_emoji_1F371" msgid="6731527040552916358">"Bento-lounaslaatikko"</string>
+ <string name="spoken_emoji_1F372" msgid="1635035323832181733">"Ruokapata"</string>
+ <string name="spoken_emoji_1F373" msgid="7799289534289221045">"Ruoanlaitto"</string>
+ <string name="spoken_emoji_1F374" msgid="5973820884987069131">"Haarukka ja veitsi"</string>
+ <string name="spoken_emoji_1F375" msgid="1074832087699617700">"Teekuppi ilman korvaa"</string>
+ <string name="spoken_emoji_1F376" msgid="6499274685584852067">"Sake-pullo ja kuppi"</string>
+ <string name="spoken_emoji_1F377" msgid="1762398562314172075">"Viinilasi"</string>
+ <string name="spoken_emoji_1F378" msgid="5528234560590117516">"Cocktail-lasi"</string>
+ <string name="spoken_emoji_1F379" msgid="790581290787943325">"Trooppinen drinkki"</string>
+ <string name="spoken_emoji_1F37A" msgid="391966822450619516">"Oluttuoppi"</string>
+ <string name="spoken_emoji_1F37B" msgid="9015043286465670662">"Kippistävät olutmukit"</string>
+ <string name="spoken_emoji_1F37C" msgid="2532113819464508894">"Tuttipullo"</string>
+ <string name="spoken_emoji_1F380" msgid="3487363857092458827">"Rusetti"</string>
+ <string name="spoken_emoji_1F381" msgid="614180683680675444">"Lahjapaketti"</string>
+ <string name="spoken_emoji_1F382" msgid="4720497171946687501">"Syntymäpäiväkakku"</string>
+ <string name="spoken_emoji_1F383" msgid="3536505941578757623">"Kurpitsalyhty"</string>
+ <string name="spoken_emoji_1F384" msgid="1797870204479059004">"Joulukuusi"</string>
+ <string name="spoken_emoji_1F385" msgid="1754174063483626367">"Joulupukki"</string>
+ <string name="spoken_emoji_1F386" msgid="2130445450758114746">"Ilotulitus"</string>
+ <string name="spoken_emoji_1F387" msgid="3403182563117999933">"Tähtisadetikku"</string>
+ <string name="spoken_emoji_1F388" msgid="2903047203723251804">"Ilmapallo"</string>
+ <string name="spoken_emoji_1F389" msgid="2352830665883549388">"Konfettipommi"</string>
+ <string name="spoken_emoji_1F38A" msgid="6280428984773641322">"Konfettipallo"</string>
+ <string name="spoken_emoji_1F38B" msgid="4902225837479015489">"Tanabata-puu"</string>
+ <string name="spoken_emoji_1F38C" msgid="7623268024030989365">"Liput ristikkäin"</string>
+ <string name="spoken_emoji_1F38D" msgid="8237542796124408528">"Japanilainen mäntykoriste"</string>
+ <string name="spoken_emoji_1F38E" msgid="5373397476238212371">"Japanilaiset nuket"</string>
+ <string name="spoken_emoji_1F38F" msgid="8754091376829552844">"Kalanmuotoiset tuulipussit"</string>
+ <string name="spoken_emoji_1F390" msgid="8903307048095431374">"Tuulikello"</string>
+ <string name="spoken_emoji_1F391" msgid="2134952069191911841">"Kuujuhla"</string>
+ <string name="spoken_emoji_1F392" msgid="6380405493914304737">"Koululaukku"</string>
+ <string name="spoken_emoji_1F393" msgid="6947890064872470996">"Valmistujaislakki"</string>
+ <string name="spoken_emoji_1F3A0" msgid="3572095190082826057">"Karusellihevonen"</string>
+ <string name="spoken_emoji_1F3A1" msgid="4300565511681058798">"Maailmanpyörä"</string>
+ <string name="spoken_emoji_1F3A2" msgid="15486093912232140">"Vuoristorata"</string>
+ <string name="spoken_emoji_1F3A3" msgid="921739319504942924">"Onki ja kala"</string>
+ <string name="spoken_emoji_1F3A4" msgid="7497596355346856950">"Mikrofoni"</string>
+ <string name="spoken_emoji_1F3A5" msgid="4290497821228183002">"Elokuvakamera"</string>
+ <string name="spoken_emoji_1F3A6" msgid="26019057872319055">"Elokuvateatteri"</string>
+ <string name="spoken_emoji_1F3A7" msgid="837856608794094105">"Kuulokkeet"</string>
+ <string name="spoken_emoji_1F3A8" msgid="2332260356509244587">"Taiteilijan paletti"</string>
+ <string name="spoken_emoji_1F3A9" msgid="9045869366525115256">"Silinterihattu"</string>
+ <string name="spoken_emoji_1F3AA" msgid="5728760354237132">"Sirkusteltta"</string>
+ <string name="spoken_emoji_1F3AB" msgid="1657997517193216284">"Lippu"</string>
+ <string name="spoken_emoji_1F3AC" msgid="4317366554314492152">"Klaffi"</string>
+ <string name="spoken_emoji_1F3AD" msgid="607157286336130470">"Näyttämötaide"</string>
+ <string name="spoken_emoji_1F3AE" msgid="2902308174671548150">"Videopeli"</string>
+ <string name="spoken_emoji_1F3AF" msgid="5420539221790296407">"Napakymppi"</string>
+ <string name="spoken_emoji_1F3B0" msgid="7440244806527891956">"Peliautomaatti"</string>
+ <string name="spoken_emoji_1F3B1" msgid="545544382391379234">"Biljardi"</string>
+ <string name="spoken_emoji_1F3B2" msgid="8302262034774787493">"Arpakuutio"</string>
+ <string name="spoken_emoji_1F3B3" msgid="5180870610771027520">"Keilailu"</string>
+ <string name="spoken_emoji_1F3B4" msgid="4723852033266071564">"Hanafuda-pelikortit"</string>
+ <string name="spoken_emoji_1F3B5" msgid="1998470239850548554">"Nuotti"</string>
+ <string name="spoken_emoji_1F3B6" msgid="3827730457113941705">"Nuotteja"</string>
+ <string name="spoken_emoji_1F3B7" msgid="5503403099445042180">"Saksofoni"</string>
+ <string name="spoken_emoji_1F3B8" msgid="3985658156795011430">"Kitara"</string>
+ <string name="spoken_emoji_1F3B9" msgid="5596295757967881451">"Koskettimet"</string>
+ <string name="spoken_emoji_1F3BA" msgid="4284064120340683558">"Trumpetti"</string>
+ <string name="spoken_emoji_1F3BB" msgid="2856598510069988745">"Viulu"</string>
+ <string name="spoken_emoji_1F3BC" msgid="1608424748821446230">"Nuottiviivasto"</string>
+ <string name="spoken_emoji_1F3BD" msgid="5490786111375627777">"Juoksupaita"</string>
+ <string name="spoken_emoji_1F3BE" msgid="1851613105691627931">"Tennismaila ja pallo"</string>
+ <string name="spoken_emoji_1F3BF" msgid="6862405997423247921">"Suksi ja mono"</string>
+ <string name="spoken_emoji_1F3C0" msgid="7421420756115104085">"Koripallo ja kori"</string>
+ <string name="spoken_emoji_1F3C1" msgid="6926537251677319922">"Ruutulippu"</string>
+ <string name="spoken_emoji_1F3C2" msgid="5708596929237987082">"Lumilautailija"</string>
+ <string name="spoken_emoji_1F3C3" msgid="5850982999510115824">"Juoksija"</string>
+ <string name="spoken_emoji_1F3C4" msgid="8468355585994639838">"Lainelautailija"</string>
+ <string name="spoken_emoji_1F3C6" msgid="9094474706847545409">"Palkintopokaali"</string>
+ <string name="spoken_emoji_1F3C7" msgid="8172206200368370116">"Laukkakilpailut"</string>
+ <string name="spoken_emoji_1F3C8" msgid="5619171461277597709">"Amerikkalainen jalkapallo"</string>
+ <string name="spoken_emoji_1F3C9" msgid="6371294008765871043">"Rugby-pallo"</string>
+ <string name="spoken_emoji_1F3CA" msgid="130977831787806932">"Uimari"</string>
+ <string name="spoken_emoji_1F3E0" msgid="6277213201655811842">"Talo"</string>
+ <string name="spoken_emoji_1F3E1" msgid="233476176077538885">"Talo ja puutarha"</string>
+ <string name="spoken_emoji_1F3E2" msgid="919736380093964570">"Toimistorakennus"</string>
+ <string name="spoken_emoji_1F3E3" msgid="6177606081825094184">"Japanilainen postitoimisto"</string>
+ <string name="spoken_emoji_1F3E4" msgid="717377871070970293">"Eurooppalainen postitoimisto"</string>
+ <string name="spoken_emoji_1F3E5" msgid="1350532500431776780">"Sairaala"</string>
+ <string name="spoken_emoji_1F3E6" msgid="342132788513806214">"Pankki"</string>
+ <string name="spoken_emoji_1F3E7" msgid="6322352038284944265">"Pankkiautomaatti"</string>
+ <string name="spoken_emoji_1F3E8" msgid="5864918444350599907">"Hotelli"</string>
+ <string name="spoken_emoji_1F3E9" msgid="7830416185375326938">"Japanilainen love-hotelli"</string>
+ <string name="spoken_emoji_1F3EA" msgid="5081084413084360479">"Päivittäistavarakauppa"</string>
+ <string name="spoken_emoji_1F3EB" msgid="7010966528205150525">"Koulu"</string>
+ <string name="spoken_emoji_1F3EC" msgid="4845978861878295154">"Tavaratalo"</string>
+ <string name="spoken_emoji_1F3ED" msgid="3980316226665215370">"Tehdas"</string>
+ <string name="spoken_emoji_1F3EE" msgid="1253964276770550248">"Izakaya-ravintolan lyhty"</string>
+ <string name="spoken_emoji_1F3EF" msgid="1128975573507389883">"Japanilainen linna"</string>
+ <string name="spoken_emoji_1F3F0" msgid="1544632297502291578">"Eurooppalainen linna"</string>
+ <string name="spoken_emoji_1F400" msgid="2063034795679578294">"Rotta"</string>
+ <string name="spoken_emoji_1F401" msgid="6736421616217369594">"Hiiri"</string>
+ <string name="spoken_emoji_1F402" msgid="7276670995895485604">"Härkä"</string>
+ <string name="spoken_emoji_1F403" msgid="8045709541897118928">"Vesipuhveli"</string>
+ <string name="spoken_emoji_1F404" msgid="5240777285676662335">"Lehmä"</string>
+ <string name="spoken_emoji_1F406" msgid="5163461930159540018">"Leopardi"</string>
+ <string name="spoken_emoji_1F407" msgid="6905370221172708160">"Jänis"</string>
+ <string name="spoken_emoji_1F408" msgid="1362164550508207284">"Kissa"</string>
+ <string name="spoken_emoji_1F409" msgid="8476130983168866013">"Lohikäärme"</string>
+ <string name="spoken_emoji_1F40A" msgid="1149626786411545043">"Krokotiili"</string>
+ <string name="spoken_emoji_1F40B" msgid="5199104921208397643">"Valas"</string>
+ <string name="spoken_emoji_1F40C" msgid="2704006052881702675">"Etana"</string>
+ <string name="spoken_emoji_1F40D" msgid="8648186663643157522">"Käärme"</string>
+ <string name="spoken_emoji_1F40E" msgid="7219137467573327268">"Hevonen"</string>
+ <string name="spoken_emoji_1F40F" msgid="7834336676729040395">"Pässi"</string>
+ <string name="spoken_emoji_1F410" msgid="8686765722255775031">"Vuohi"</string>
+ <string name="spoken_emoji_1F411" msgid="3585715397876383525">"Lammas"</string>
+ <string name="spoken_emoji_1F412" msgid="4924794582980077838">"Apina"</string>
+ <string name="spoken_emoji_1F413" msgid="1460475310405677377">"Kukko"</string>
+ <string name="spoken_emoji_1F414" msgid="5857296282631892219">"Kana"</string>
+ <string name="spoken_emoji_1F415" msgid="5920041074892949527">"Koira"</string>
+ <string name="spoken_emoji_1F416" msgid="4362403392912540286">"Sika"</string>
+ <string name="spoken_emoji_1F417" msgid="6836978415840795128">"Villisika"</string>
+ <string name="spoken_emoji_1F418" msgid="7926161463897783691">"Norsu"</string>
+ <string name="spoken_emoji_1F419" msgid="1055233959755784186">"Mustekala"</string>
+ <string name="spoken_emoji_1F41A" msgid="5195666556511558060">"Simpukankuori"</string>
+ <string name="spoken_emoji_1F41B" msgid="7652480167465557832">"Hyönteinen"</string>
+ <string name="spoken_emoji_1F41C" msgid="1123461148697574239">"Muurahainen"</string>
+ <string name="spoken_emoji_1F41D" msgid="718579308764058851">"Mehiläinen"</string>
+ <string name="spoken_emoji_1F41E" msgid="6766305509608115467">"Leppäkerttu"</string>
+ <string name="spoken_emoji_1F41F" msgid="1207261298343160838">"Kala"</string>
+ <string name="spoken_emoji_1F420" msgid="1041145003133609221">"Trooppinen kala"</string>
+ <string name="spoken_emoji_1F421" msgid="1748378324417438751">"Pallokala"</string>
+ <string name="spoken_emoji_1F422" msgid="4106724877523329148">"Kilpikonna"</string>
+ <string name="spoken_emoji_1F423" msgid="4077407945958691907">"Kuoriutuva kananpoika"</string>
+ <string name="spoken_emoji_1F424" msgid="6911326019270172283">"Kananpoika"</string>
+ <string name="spoken_emoji_1F425" msgid="5466514196557885577">"Eteenpäin katsova kananpoika"</string>
+ <string name="spoken_emoji_1F426" msgid="2163979138772892755">"Lintu"</string>
+ <string name="spoken_emoji_1F427" msgid="3585670324511212961">"Pingviini"</string>
+ <string name="spoken_emoji_1F428" msgid="7955440808647898579">"Koala"</string>
+ <string name="spoken_emoji_1F429" msgid="5028269352809819035">"Villakoira"</string>
+ <string name="spoken_emoji_1F42A" msgid="4681926706404032484">"Yksikyttyräinen kameli"</string>
+ <string name="spoken_emoji_1F42B" msgid="2725166074981558322">"Kaksikyttyräinen kameli"</string>
+ <string name="spoken_emoji_1F42C" msgid="6764791873413727085">"Delfiini"</string>
+ <string name="spoken_emoji_1F42D" msgid="1033643138546864251">"Hiiren pää"</string>
+ <string name="spoken_emoji_1F42E" msgid="8099223337120508820">"Lehmän pää"</string>
+ <string name="spoken_emoji_1F42F" msgid="2104743989330781572">"Tiikerin pää"</string>
+ <string name="spoken_emoji_1F430" msgid="525492897063150160">"Jäniksen pää"</string>
+ <string name="spoken_emoji_1F431" msgid="6051358666235016851">"Kissan pää"</string>
+ <string name="spoken_emoji_1F432" msgid="7698001871193018305">"Lohikäärmeen pää"</string>
+ <string name="spoken_emoji_1F433" msgid="3762356053512899326">"Valas ja vesisuihku"</string>
+ <string name="spoken_emoji_1F434" msgid="3619943222159943226">"Hevosen pää"</string>
+ <string name="spoken_emoji_1F435" msgid="59199202683252958">"Apinan pää"</string>
+ <string name="spoken_emoji_1F436" msgid="340544719369009828">"Koiran pää"</string>
+ <string name="spoken_emoji_1F437" msgid="1219818379784982585">"Sian pää"</string>
+ <string name="spoken_emoji_1F438" msgid="9128124743321008210">"Sammakon pää"</string>
+ <string name="spoken_emoji_1F439" msgid="1424161319554642266">"Hamsterin pää"</string>
+ <string name="spoken_emoji_1F43A" msgid="6727645488430385584">"Suden pää"</string>
+ <string name="spoken_emoji_1F43B" msgid="5397170068392865167">"Karhun pää"</string>
+ <string name="spoken_emoji_1F43C" msgid="2715995734367032431">"Pandan pää"</string>
+ <string name="spoken_emoji_1F43D" msgid="6005480717951776597">"Sian kärsä"</string>
+ <string name="spoken_emoji_1F43E" msgid="8917626103219080547">"Tassunjäljet"</string>
+ <string name="spoken_emoji_1F440" msgid="7144338258163384433">"Silmät"</string>
+ <string name="spoken_emoji_1F442" msgid="1905515392292676124">"Korva"</string>
+ <string name="spoken_emoji_1F443" msgid="1491504447758933115">"Nenä"</string>
+ <string name="spoken_emoji_1F444" msgid="3654613047946080332">"Suu"</string>
+ <string name="spoken_emoji_1F445" msgid="7024905244040509204">"Kieli"</string>
+ <string name="spoken_emoji_1F446" msgid="2150365643636471745">"Valkoinen käsi, ylös osoittava etusormi"</string>
+ <string name="spoken_emoji_1F447" msgid="8794022344940891388">"Valkoinen käsi, alas osoittava etusormi"</string>
+ <string name="spoken_emoji_1F448" msgid="3261812959215550650">"Valkoinen käsi, vasemmalle osoittava etusormi"</string>
+ <string name="spoken_emoji_1F449" msgid="4764447975177805991">"Valkoinen käsi, oikealle osoittava etusormi"</string>
+ <string name="spoken_emoji_1F44A" msgid="7197417095486424841">"Käsi nyrkissä"</string>
+ <string name="spoken_emoji_1F44B" msgid="1975968945250833117">"Vilkuttava käsi"</string>
+ <string name="spoken_emoji_1F44C" msgid="3185919567897876562">"OK-merkki"</string>
+ <string name="spoken_emoji_1F44D" msgid="6182553970602667815">"Peukalo pystyssä"</string>
+ <string name="spoken_emoji_1F44E" msgid="8030851867365111809">"Peukalo alaspäin"</string>
+ <string name="spoken_emoji_1F44F" msgid="5148753662268213389">"Taputtavat kädet"</string>
+ <string name="spoken_emoji_1F450" msgid="1012021072085157054">"Avoimet kämmenet"</string>
+ <string name="spoken_emoji_1F451" msgid="8257466714629051320">"Kruunu"</string>
+ <string name="spoken_emoji_1F452" msgid="4567394011149905466">"Naisen hattu"</string>
+ <string name="spoken_emoji_1F453" msgid="5978410551173163010">"Silmälasit"</string>
+ <string name="spoken_emoji_1F454" msgid="348469036193323252">"Kravatti"</string>
+ <string name="spoken_emoji_1F455" msgid="5665118831861433578">"T-paita"</string>
+ <string name="spoken_emoji_1F456" msgid="1890991330923356408">"Farkut"</string>
+ <string name="spoken_emoji_1F457" msgid="3904310482655702620">"Leninki"</string>
+ <string name="spoken_emoji_1F458" msgid="5704243858031107692">"Kimono"</string>
+ <string name="spoken_emoji_1F459" msgid="3553148747050035251">"Bikinit"</string>
+ <string name="spoken_emoji_1F45A" msgid="1389654639484716101">"Naisen paita"</string>
+ <string name="spoken_emoji_1F45B" msgid="1113293170254222904">"Kukkaro"</string>
+ <string name="spoken_emoji_1F45C" msgid="3410257778598006936">"Käsilaukku"</string>
+ <string name="spoken_emoji_1F45D" msgid="812176504300064819">"Pussukka"</string>
+ <string name="spoken_emoji_1F45E" msgid="2901741399934723562">"Miesten kenkä"</string>
+ <string name="spoken_emoji_1F45F" msgid="6828566359287798863">"Urheilujalkine"</string>
+ <string name="spoken_emoji_1F460" msgid="305863879170420855">"Korkokenkä"</string>
+ <string name="spoken_emoji_1F461" msgid="5160493217831417630">"Naisen sandaali"</string>
+ <string name="spoken_emoji_1F462" msgid="1722897795554863734">"Naisen saappaat"</string>
+ <string name="spoken_emoji_1F463" msgid="5850772903593010699">"Jalanjäljet"</string>
+ <string name="spoken_emoji_1F464" msgid="1228335905487734913">"Rintakuvan ääriviivat"</string>
+ <string name="spoken_emoji_1F465" msgid="4461307702499679879">"Rintakuvien ääriviivat"</string>
+ <string name="spoken_emoji_1F466" msgid="1938873085514108889">"Poika"</string>
+ <string name="spoken_emoji_1F467" msgid="8237080594860144998">"Tyttö"</string>
+ <string name="spoken_emoji_1F468" msgid="6081300722526675382">"Mies"</string>
+ <string name="spoken_emoji_1F469" msgid="1090140923076108158">"Nainen"</string>
+ <string name="spoken_emoji_1F46A" msgid="5063570981942606595">"Perhe"</string>
+ <string name="spoken_emoji_1F46B" msgid="6795882374287327952">"Mies ja nainen käsi kädessä"</string>
+ <string name="spoken_emoji_1F46C" msgid="6844464165783964495">"Kaksi miestä käsi kädessä"</string>
+ <string name="spoken_emoji_1F46D" msgid="2316773068014053180">"Kaksi naista käsi kädessä"</string>
+ <string name="spoken_emoji_1F46E" msgid="5897625605860822401">"Poliisi"</string>
+ <string name="spoken_emoji_1F46F" msgid="7716871657717641490">"Nainen, jolla on pupun korvat"</string>
+ <string name="spoken_emoji_1F470" msgid="6409995400510338892">"Morsian hunnussa"</string>
+ <string name="spoken_emoji_1F471" msgid="3058247860441670806">"Vaaleahiuksinen henkilö"</string>
+ <string name="spoken_emoji_1F472" msgid="3928854667819339142">"Mies, jolla aasialainen päähine"</string>
+ <string name="spoken_emoji_1F473" msgid="5921952095808988381">"Mies, jolla turbaani"</string>
+ <string name="spoken_emoji_1F474" msgid="1082237499496725183">"Vanha mies"</string>
+ <string name="spoken_emoji_1F475" msgid="7280323988642212761">"Vanha nainen"</string>
+ <string name="spoken_emoji_1F476" msgid="4713322657821088296">"Vauva"</string>
+ <string name="spoken_emoji_1F477" msgid="2197036131029221370">"Rakennustyöläinen"</string>
+ <string name="spoken_emoji_1F478" msgid="7245521193493488875">"Prinsessa"</string>
+ <string name="spoken_emoji_1F479" msgid="6876475321015553972">"Japanilainen hirviö"</string>
+ <string name="spoken_emoji_1F47A" msgid="3900813633102703571">"Japanilainen menninkäinen"</string>
+ <string name="spoken_emoji_1F47B" msgid="2608250873194079390">"Kummitus"</string>
+ <string name="spoken_emoji_1F47C" msgid="3838699131276537421">"Enkelivauva"</string>
+ <string name="spoken_emoji_1F47D" msgid="2874077455888369538">"Ulkoavaruuden olento"</string>
+ <string name="spoken_emoji_1F47E" msgid="3642607168625579507">"Avaruusolio"</string>
+ <string name="spoken_emoji_1F47F" msgid="441605977269926252">"Pikkupiru"</string>
+ <string name="spoken_emoji_1F480" msgid="3696253485164878739">"Kallo"</string>
+ <string name="spoken_emoji_1F481" msgid="320408708521966893">"Asiakaspalvelija"</string>
+ <string name="spoken_emoji_1F482" msgid="3424354860245608949">"Vartija"</string>
+ <string name="spoken_emoji_1F483" msgid="3221113594843849083">"Tanssija"</string>
+ <string name="spoken_emoji_1F484" msgid="7348014979080444885">"Huulipuna"</string>
+ <string name="spoken_emoji_1F485" msgid="6133507975565116339">"Kynsilakka"</string>
+ <string name="spoken_emoji_1F486" msgid="9085459968247394155">"Kasvohieronta"</string>
+ <string name="spoken_emoji_1F487" msgid="1479113637259592150">"Hiusten leikkaus"</string>
+ <string name="spoken_emoji_1F488" msgid="6922559285234100252">"Parturin pylväs"</string>
+ <string name="spoken_emoji_1F489" msgid="8114863680950147305">"Ruisku"</string>
+ <string name="spoken_emoji_1F48A" msgid="8526843630145963032">"Pilleri"</string>
+ <string name="spoken_emoji_1F48B" msgid="2538528967897640292">"Huulet"</string>
+ <string name="spoken_emoji_1F48C" msgid="1681173271652890232">"Rakkauskirje"</string>
+ <string name="spoken_emoji_1F48D" msgid="8259886164999042373">"Sormus"</string>
+ <string name="spoken_emoji_1F48E" msgid="8777981696011111101">"Jalokivi"</string>
+ <string name="spoken_emoji_1F48F" msgid="741593675183677907">"Suudelma"</string>
+ <string name="spoken_emoji_1F490" msgid="4482549128959806736">"Kukkakimppu"</string>
+ <string name="spoken_emoji_1F491" msgid="2305245307882441500">"Pariskunta ja sydän"</string>
+ <string name="spoken_emoji_1F492" msgid="3884119934804475732">"Häät"</string>
+ <string name="spoken_emoji_1F493" msgid="1208828371565525121">"Sykkivä sydän"</string>
+ <string name="spoken_emoji_1F494" msgid="6198876398509338718">"Särkynyt sydän"</string>
+ <string name="spoken_emoji_1F495" msgid="9206202744967130919">"Kaksi sydäntä"</string>
+ <string name="spoken_emoji_1F496" msgid="5436953041732207775">"Säihkyvä sydän"</string>
+ <string name="spoken_emoji_1F497" msgid="7285142863951448473">"Kasvava sydän"</string>
+ <string name="spoken_emoji_1F498" msgid="7940131245037575715">"Sydän ja nuoli"</string>
+ <string name="spoken_emoji_1F499" msgid="4453235040265550009">"Sininen sydän"</string>
+ <string name="spoken_emoji_1F49A" msgid="6262178648366971405">"Vihreä sydän"</string>
+ <string name="spoken_emoji_1F49B" msgid="8085384999750714368">"Keltainen sydän"</string>
+ <string name="spoken_emoji_1F49C" msgid="453829540120898698">"Violetti sydän"</string>
+ <string name="spoken_emoji_1F49D" msgid="3460534750224161888">"Sydän ja rusetti"</string>
+ <string name="spoken_emoji_1F49E" msgid="4490636226072523867">"Pyörivät sydämet"</string>
+ <string name="spoken_emoji_1F49F" msgid="2059319756421226336">"Sydänkoriste"</string>
+ <string name="spoken_emoji_1F4A0" msgid="1954850380550212038">"Vinoneliö, jossa on sisällä piste"</string>
+ <string name="spoken_emoji_1F4A1" msgid="403137413540909021">"Hehkulamppu"</string>
+ <string name="spoken_emoji_1F4A2" msgid="2604192053295622063">"Vihan symboli"</string>
+ <string name="spoken_emoji_1F4A3" msgid="6378351742957821735">"Pommi"</string>
+ <string name="spoken_emoji_1F4A4" msgid="7217736258870346625">"Unen symboli"</string>
+ <string name="spoken_emoji_1F4A5" msgid="5401995723541239858">"Törmäyksen symboli"</string>
+ <string name="spoken_emoji_1F4A6" msgid="3837802182716483848">"Hikipisarat"</string>
+ <string name="spoken_emoji_1F4A7" msgid="5718438987757885141">"Pisara"</string>
+ <string name="spoken_emoji_1F4A8" msgid="4472108229720006377">"Liikkeen symboli"</string>
+ <string name="spoken_emoji_1F4A9" msgid="1240958472788430032">"Kakkakasa"</string>
+ <string name="spoken_emoji_1F4AA" msgid="8427525538635146416">"Hauis"</string>
+ <string name="spoken_emoji_1F4AB" msgid="5484114759939427459">"Huimauksen symboli"</string>
+ <string name="spoken_emoji_1F4AC" msgid="5571196638219612682">"Puhekupla"</string>
+ <string name="spoken_emoji_1F4AD" msgid="353174619257798652">"Ajatuskupla"</string>
+ <string name="spoken_emoji_1F4AE" msgid="1223142786927162641">"Valkoinen kukka"</string>
+ <string name="spoken_emoji_1F4AF" msgid="3526278354452138397">"Sadan pisteen symboli"</string>
+ <string name="spoken_emoji_1F4B0" msgid="4124102195175124156">"Rahasäkki"</string>
+ <string name="spoken_emoji_1F4B1" msgid="8339494003418572905">"Valuutanvaihto"</string>
+ <string name="spoken_emoji_1F4B2" msgid="3179159430187243132">"Paksu dollarin symboli"</string>
+ <string name="spoken_emoji_1F4B3" msgid="5375412518221759596">"Luottokortti"</string>
+ <string name="spoken_emoji_1F4B4" msgid="1068592463669453204">"Seteli, jossa jenin symboli"</string>
+ <string name="spoken_emoji_1F4B5" msgid="1426708699891832564">"Seteli, jossa dollarin symboli"</string>
+ <string name="spoken_emoji_1F4B6" msgid="8289249930736444837">"Seteli, jossa euron symboli"</string>
+ <string name="spoken_emoji_1F4B7" msgid="5245100496860739429">"Seteli, jossa punnan symboli"</string>
+ <string name="spoken_emoji_1F4B8" msgid="4401099580477164440">"Setelinippu, jolla siivet"</string>
+ <string name="spoken_emoji_1F4B9" msgid="647509393536679903">"Noususuuntainen kaavio, jossa jenin symboli"</string>
+ <string name="spoken_emoji_1F4BA" msgid="1269737854891046321">"Paikka"</string>
+ <string name="spoken_emoji_1F4BB" msgid="6252883563347816451">"Tietokone"</string>
+ <string name="spoken_emoji_1F4BC" msgid="6182597732218446206">"Salkku"</string>
+ <string name="spoken_emoji_1F4BD" msgid="5820961044768829176">"Minilevy"</string>
+ <string name="spoken_emoji_1F4BE" msgid="4754542485835379808">"Levyke"</string>
+ <string name="spoken_emoji_1F4BF" msgid="2237481756984721795">"Optinen levy"</string>
+ <string name="spoken_emoji_1F4C0" msgid="491582501089694461">"DVD-levy"</string>
+ <string name="spoken_emoji_1F4C1" msgid="6645461382494158111">"Tiedostokansio"</string>
+ <string name="spoken_emoji_1F4C2" msgid="8095638715523765338">"Avaa tiedostokansio"</string>
+ <string name="spoken_emoji_1F4C3" msgid="3727274466173970142">"Alhaalta käpristynyt sivu"</string>
+ <string name="spoken_emoji_1F4C4" msgid="4382570710795501612">"Sivu edestä"</string>
+ <string name="spoken_emoji_1F4C5" msgid="8693944622627762487">"Kalenteri"</string>
+ <string name="spoken_emoji_1F4C6" msgid="8469908708708424640">"Kalenteri, irtirevittävät sivut"</string>
+ <string name="spoken_emoji_1F4C7" msgid="2665313547987324495">"Kortihakemisto"</string>
+ <string name="spoken_emoji_1F4C8" msgid="8007686702282833600">"Noususuuntainen kaavio"</string>
+ <string name="spoken_emoji_1F4C9" msgid="2271951411192893684">"Laskusuuntainen kaavio"</string>
+ <string name="spoken_emoji_1F4CA" msgid="3525692829622381444">"Pylväskaavio"</string>
+ <string name="spoken_emoji_1F4CB" msgid="977639227554095521">"Leikepöytä"</string>
+ <string name="spoken_emoji_1F4CC" msgid="156107396088741574">"Nasta"</string>
+ <string name="spoken_emoji_1F4CD" msgid="4266572175361190231">"Pyöreäpäinen nasta"</string>
+ <string name="spoken_emoji_1F4CE" msgid="6294288509864968290">"Paperiliitin"</string>
+ <string name="spoken_emoji_1F4CF" msgid="149679400831136810">"Suora viivain"</string>
+ <string name="spoken_emoji_1F4D0" msgid="8130339336619202915">"Kolmioviivain"</string>
+ <string name="spoken_emoji_1F4D1" msgid="5852176364856284968">"Kirjanmerkit"</string>
+ <string name="spoken_emoji_1F4D2" msgid="2276810154105920052">"Kierreselkäinen vihko"</string>
+ <string name="spoken_emoji_1F4D3" msgid="5873386492793610808">"Muistikirja"</string>
+ <string name="spoken_emoji_1F4D4" msgid="4754469936418776360">"Muistikirja, jossa koristekansi"</string>
+ <string name="spoken_emoji_1F4D5" msgid="4642713351802778905">"Suljettu kirja"</string>
+ <string name="spoken_emoji_1F4D6" msgid="6987347918381807186">"Avoin kirja"</string>
+ <string name="spoken_emoji_1F4D7" msgid="7813394163241379223">"Vihreä kirja"</string>
+ <string name="spoken_emoji_1F4D8" msgid="7189799718984979521">"Sininen kirja"</string>
+ <string name="spoken_emoji_1F4D9" msgid="3874664073186440225">"Oranssi kirja"</string>
+ <string name="spoken_emoji_1F4DA" msgid="872212072924287762">"Kirjat"</string>
+ <string name="spoken_emoji_1F4DB" msgid="2015183603583392969">"Nimilappu"</string>
+ <string name="spoken_emoji_1F4DC" msgid="5075845110932456783">"Rulla"</string>
+ <string name="spoken_emoji_1F4DD" msgid="2494006707147586786">"Muistio"</string>
+ <string name="spoken_emoji_1F4DE" msgid="7883008605002117671">"Puhelimen kuuloke"</string>
+ <string name="spoken_emoji_1F4DF" msgid="3538610110623780465">"Hakulaite"</string>
+ <string name="spoken_emoji_1F4E0" msgid="2960778342609543077">"Faksi"</string>
+ <string name="spoken_emoji_1F4E1" msgid="6269733703719242108">"Satelliittiantenni"</string>
+ <string name="spoken_emoji_1F4E2" msgid="1987535386302883116">"Julkisen tilan kovaääninen"</string>
+ <string name="spoken_emoji_1F4E3" msgid="5588916572878599224">"Megafoni"</string>
+ <string name="spoken_emoji_1F4E4" msgid="2063561529097749707">"Lähtevien lokero"</string>
+ <string name="spoken_emoji_1F4E5" msgid="3232462702926143576">"Saapuvien lokero"</string>
+ <string name="spoken_emoji_1F4E6" msgid="3399454337197561635">"Paketti"</string>
+ <string name="spoken_emoji_1F4E7" msgid="5557136988503873238">"Sähköpostin symboli"</string>
+ <string name="spoken_emoji_1F4E8" msgid="30698793974124123">"Saapuva kirjekuori"</string>
+ <string name="spoken_emoji_1F4E9" msgid="5947550337678643166">"Kirjekuori alaspäin osoittavan nuolen alla"</string>
+ <string name="spoken_emoji_1F4EA" msgid="772614045207213751">"Suljettu postilaatikko lippu alhaalla"</string>
+ <string name="spoken_emoji_1F4EB" msgid="6491414165464146137">"Suljettu postilaatikko lippu ylhäällä"</string>
+ <string name="spoken_emoji_1F4EC" msgid="7369517138779988438">"Avattu postilaatikko lippu ylhäällä"</string>
+ <string name="spoken_emoji_1F4ED" msgid="5657520436285454241">"Avattu postilaatikko lippu alhaalla"</string>
+ <string name="spoken_emoji_1F4EE" msgid="8464138906243608614">"Postilaatikko"</string>
+ <string name="spoken_emoji_1F4EF" msgid="8801427577198798226">"Postitorvi"</string>
+ <string name="spoken_emoji_1F4F0" msgid="6330208624731662525">"Sanomalehti"</string>
+ <string name="spoken_emoji_1F4F1" msgid="3966503935581675695">"Matkapuhelin"</string>
+ <string name="spoken_emoji_1F4F2" msgid="1057540341746100087">"Matkapuhelin, jonka vasemmalla puolella on sitä osoittava nuoli"</string>
+ <string name="spoken_emoji_1F4F3" msgid="5003984447315754658">"Värinätila"</string>
+ <string name="spoken_emoji_1F4F4" msgid="5549847566968306253">"Matkapuhelin pois käytöstä"</string>
+ <string name="spoken_emoji_1F4F5" msgid="3660199448671699238">"Ei matkapuhelimia"</string>
+ <string name="spoken_emoji_1F4F6" msgid="2676974903233268860">"Antennisymboli ja palkit"</string>
+ <string name="spoken_emoji_1F4F7" msgid="2643891943105989039">"Kamera"</string>
+ <string name="spoken_emoji_1F4F9" msgid="4475626303058218048">"Videokamera"</string>
+ <string name="spoken_emoji_1F4FA" msgid="1079796186652960775">"Televisio"</string>
+ <string name="spoken_emoji_1F4FB" msgid="3848729587403760645">"Radio"</string>
+ <string name="spoken_emoji_1F4FC" msgid="8370432508874310054">"Videokasetti"</string>
+ <string name="spoken_emoji_1F500" msgid="2389947994502144547">"Kaksi ristikkäistä oikealle osoittavaa nuolta"</string>
+ <string name="spoken_emoji_1F501" msgid="2132188352433347009">"Ympyrä, jossa myötäpäivään oikealle ja vasemmalle osoittavat nuolet"</string>
+ <string name="spoken_emoji_1F502" msgid="2361976580513178391">"Ympyrä, jossa myötäpäivään oikealle ja vasemmalle osoittavat nuolet ja jonka päällä ympyröity numero yksi"</string>
+ <string name="spoken_emoji_1F503" msgid="8936283551917858793">"Ympyrä, jossa myötäpäivään ylös ja alas osoittavat nuolet"</string>
+ <string name="spoken_emoji_1F504" msgid="708290317843535943">"Ympyrä, jossa vastapäivään ylös ja alas osoittavat nuolet"</string>
+ <string name="spoken_emoji_1F505" msgid="6348909939004951860">"Alhaisen kirkkauden symboli"</string>
+ <string name="spoken_emoji_1F506" msgid="4449609297521280173">"Suuren kirkkauden symboli"</string>
+ <string name="spoken_emoji_1F507" msgid="7136386694923708448">"Yliviivattu kaiutin"</string>
+ <string name="spoken_emoji_1F508" msgid="5063567689831527865">"Kaiutin"</string>
+ <string name="spoken_emoji_1F509" msgid="3948050077992370791">"Kaiutin ja yksi ääniaalto"</string>
+ <string name="spoken_emoji_1F50A" msgid="5818194948677277197">"Kaiutin ja kolme ääniaaltoa"</string>
+ <string name="spoken_emoji_1F50B" msgid="8083470451266295876">"Akku"</string>
+ <string name="spoken_emoji_1F50C" msgid="7793219132036431680">"Pistoke"</string>
+ <string name="spoken_emoji_1F50D" msgid="8140244710637926780">"Vasemmalle osoittava suurennuslasi"</string>
+ <string name="spoken_emoji_1F50E" msgid="4751821352839693365">"Oikealle osoittava suurennuslasi"</string>
+ <string name="spoken_emoji_1F50F" msgid="915079280472199605">"Lukko ja mustekynä"</string>
+ <string name="spoken_emoji_1F510" msgid="7658381761691758318">"Suljettu lukko ja avain"</string>
+ <string name="spoken_emoji_1F511" msgid="262319867774655688">"Avain"</string>
+ <string name="spoken_emoji_1F512" msgid="5628688337255115175">"Lukko"</string>
+ <string name="spoken_emoji_1F513" msgid="8579201846619420981">"Avoin lukko"</string>
+ <string name="spoken_emoji_1F514" msgid="7027268683047322521">"Soittokello"</string>
+ <string name="spoken_emoji_1F515" msgid="8903179856036069242">"Yliviivattu soittokello"</string>
+ <string name="spoken_emoji_1F516" msgid="108097933937925381">"Kirjanmerkki"</string>
+ <string name="spoken_emoji_1F517" msgid="2450846665734313397">"Linkin symboli"</string>
+ <string name="spoken_emoji_1F518" msgid="7028220286841437832">"Valintanappi"</string>
+ <string name="spoken_emoji_1F519" msgid="8211189165075445687">"Sana BACK, jonka yläpuolella vasemmalle osoittava nuoli"</string>
+ <string name="spoken_emoji_1F51A" msgid="823966751787338892">"Sana END, jonka yläpuolella vasemmalle osoittava nuoli"</string>
+ <string name="spoken_emoji_1F51B" msgid="5920570742107943382">"Sana ON ja huutomerkki, yläpuolella vasemmalle ja oikealle osoittava nuoli"</string>
+ <string name="spoken_emoji_1F51C" msgid="110609810659826676">"Sana SOON, jonka yläpuolella oikealle osoittava nuoli"</string>
+ <string name="spoken_emoji_1F51D" msgid="4087697222026095447">"Sana TOP, jonka yläpuolella ylös osoittava nuoli"</string>
+ <string name="spoken_emoji_1F51E" msgid="8512873526157201775">"Ikäraja 18 vuotta"</string>
+ <string name="spoken_emoji_1F51F" msgid="8673370823728653973">"Näppäin 10"</string>
+ <string name="spoken_emoji_1F520" msgid="7335109890337048900">"Latinalaisten isojen kirjainten symboli"</string>
+ <string name="spoken_emoji_1F521" msgid="2693185864450925778">"Latinalaisten pienten kirjainten symboli"</string>
+ <string name="spoken_emoji_1F522" msgid="8419130286280673347">"Numeroiden symboli"</string>
+ <string name="spoken_emoji_1F523" msgid="3318053476401719421">"Symbolien symboli"</string>
+ <string name="spoken_emoji_1F524" msgid="1625073997522316331">"Latinalaisten kirjainten symboli"</string>
+ <string name="spoken_emoji_1F525" msgid="4083884189172963790">"Tuli"</string>
+ <string name="spoken_emoji_1F526" msgid="2035494936742643580">"Taskulamppu"</string>
+ <string name="spoken_emoji_1F527" msgid="134257142354034271">"Jakoavain"</string>
+ <string name="spoken_emoji_1F528" msgid="700627429570609375">"Vasara"</string>
+ <string name="spoken_emoji_1F529" msgid="7480548235904988573">"Mutteri ja pultti"</string>
+ <string name="spoken_emoji_1F52A" msgid="7613580031502317893">"Hochoveitsi"</string>
+ <string name="spoken_emoji_1F52B" msgid="4554906608328118613">"Pistooli"</string>
+ <string name="spoken_emoji_1F52C" msgid="1330294501371770790">"Mikroskooppi"</string>
+ <string name="spoken_emoji_1F52D" msgid="7549551775445177140">"Kaukoputki"</string>
+ <string name="spoken_emoji_1F52E" msgid="4457099417872625141">"Kristallipallo"</string>
+ <string name="spoken_emoji_1F52F" msgid="8899031001317442792">"Kuusisakarainen tähti, jossa keskellä piste"</string>
+ <string name="spoken_emoji_1F530" msgid="3572898444281774023">"Japanilainen aloittelijan merkki"</string>
+ <string name="spoken_emoji_1F531" msgid="5225633376450025396">"Trident-symboli"</string>
+ <string name="spoken_emoji_1F532" msgid="9169568490485180779">"Musta neliönmuotoinen painike"</string>
+ <string name="spoken_emoji_1F533" msgid="6554193837201918598">"Valkoinen neliönmuotoinen painike"</string>
+ <string name="spoken_emoji_1F534" msgid="8339298801331865340">"Suuri punainen ympyrä"</string>
+ <string name="spoken_emoji_1F535" msgid="1227403104835533512">"Suuri sininen ympyrä"</string>
+ <string name="spoken_emoji_1F536" msgid="5477372445510469331">"Suuri oranssi vinoneliö"</string>
+ <string name="spoken_emoji_1F537" msgid="3158915214347274626">"Suuri sininen vinoneliö"</string>
+ <string name="spoken_emoji_1F538" msgid="4300084249474451991">"Pieni oranssi vinoneliö"</string>
+ <string name="spoken_emoji_1F539" msgid="6535159756325742275">"Pieni sininen vinoneliö"</string>
+ <string name="spoken_emoji_1F53A" msgid="3728196273988781389">"Ylöspäin osoittava punainen kolmio"</string>
+ <string name="spoken_emoji_1F53B" msgid="7182097039614128707">"Alaspäin osoittava punainen kolmio"</string>
+ <string name="spoken_emoji_1F53C" msgid="4077022046319615029">"Ylöspäin osoittava pieni punainen kolmio"</string>
+ <string name="spoken_emoji_1F53D" msgid="3939112784894620713">"Alaspäin osoittava pieni punainen kolmio"</string>
+ <string name="spoken_emoji_1F550" msgid="7761392621689986218">"Kellotaulu, kello yksi"</string>
+ <string name="spoken_emoji_1F551" msgid="2699448504113431716">"Kellotaulu, kello kaksi"</string>
+ <string name="spoken_emoji_1F552" msgid="5872107867411853750">"Kellotaulu, kello kolme"</string>
+ <string name="spoken_emoji_1F553" msgid="8490966286158640743">"Kellotaulu, kello neljä"</string>
+ <string name="spoken_emoji_1F554" msgid="7662585417832909280">"Kellotaulu, kello viisi"</string>
+ <string name="spoken_emoji_1F555" msgid="5564698204520412009">"Kellotaulu, kello kuusi"</string>
+ <string name="spoken_emoji_1F556" msgid="7325712194836512205">"Kellotaulu, kello seitsemän"</string>
+ <string name="spoken_emoji_1F557" msgid="4398343183682848693">"Kellotaulu, kello kahdeksan"</string>
+ <string name="spoken_emoji_1F558" msgid="3110507820404018172">"Kellotaulu, kello yhdeksän"</string>
+ <string name="spoken_emoji_1F559" msgid="2972160366448337839">"Kellotaulu, kello kymmenen"</string>
+ <string name="spoken_emoji_1F55A" msgid="5568112876681714834">"Kellotaulu, kello yksitoista"</string>
+ <string name="spoken_emoji_1F55B" msgid="6731739890330659276">"Kellotaulu, kello kaksitoista"</string>
+ <string name="spoken_emoji_1F55C" msgid="7838853679879115890">"Kellotaulu, kello puoli kaksi"</string>
+ <string name="spoken_emoji_1F55D" msgid="3518832144255922544">"Kellotaulu, kello puoli kolme"</string>
+ <string name="spoken_emoji_1F55E" msgid="3092760695634993002">"Kellotaulu, kello puoli neljä"</string>
+ <string name="spoken_emoji_1F55F" msgid="2326720311892906763">"Kellotaulu, kello puoli viisi"</string>
+ <string name="spoken_emoji_1F560" msgid="5771339179963924448">"Kellotaulu, kello puoli kuusi"</string>
+ <string name="spoken_emoji_1F561" msgid="3139944777062475382">"Kellotaulu, kello puoli seitsemän"</string>
+ <string name="spoken_emoji_1F562" msgid="8273944611162457084">"Kellotaulu, kello puoli kahdeksan"</string>
+ <string name="spoken_emoji_1F563" msgid="8643976903718136299">"Kellotaulu, kello puoli yhdeksän"</string>
+ <string name="spoken_emoji_1F564" msgid="3511070239796141638">"Kellotaulu, kello puoli kymmenen"</string>
+ <string name="spoken_emoji_1F565" msgid="4567451985272963088">"Kellotaulu, kello puoli yksitoista"</string>
+ <string name="spoken_emoji_1F566" msgid="2790552288169929810">"Kellotaulu, kello puoli kaksitoista"</string>
+ <string name="spoken_emoji_1F567" msgid="9026037362100689337">"Kellotaulu, kello puoli yksi"</string>
+ <string name="spoken_emoji_1F5FB" msgid="9037503671676124015">"Fuji-vuori"</string>
+ <string name="spoken_emoji_1F5FC" msgid="1409415995817242150">"Tokio-torni"</string>
+ <string name="spoken_emoji_1F5FD" msgid="2562726956654429582">"Vapaudenpatsas"</string>
+ <string name="spoken_emoji_1F5FE" msgid="1184469756905210580">"Japanin kartta"</string>
+ <string name="spoken_emoji_1F5FF" msgid="6003594799354942297">"Moai-kivipatsas"</string>
+ <string name="spoken_emoji_1F600" msgid="7601109464776835283">"Virnistävä naama"</string>
+ <string name="spoken_emoji_1F601" msgid="746026523967444503">"Virnistävä naama silmät sirrillään"</string>
+ <string name="spoken_emoji_1F602" msgid="8354558091785198246">"Naama ja ilon kyyneleet"</string>
+ <string name="spoken_emoji_1F603" msgid="3861022912544159823">"Hymyilevä naama, suu auki"</string>
+ <string name="spoken_emoji_1F604" msgid="5119021072966343531">"Hymyilevä naama, suu auki ja silmät sirrillään"</string>
+ <string name="spoken_emoji_1F605" msgid="6140813923973561735">"Hymyilevä naama, suu auki ja kylmä hiki"</string>
+ <string name="spoken_emoji_1F606" msgid="3549936813966832799">"Hymyilevä naama, suu auki ja silmät kiinni"</string>
+ <string name="spoken_emoji_1F607" msgid="2826424078212384817">"Hymyilevä naama ja sädekehä"</string>
+ <string name="spoken_emoji_1F608" msgid="7343559595089811640">"Hymyilevä naama ja sarvet"</string>
+ <string name="spoken_emoji_1F609" msgid="5481030187207504405">"Silmää iskevä naama"</string>
+ <string name="spoken_emoji_1F60A" msgid="5023337769148679767">"Hymyilevä naama, silmät sirrillään"</string>
+ <string name="spoken_emoji_1F60B" msgid="3005248217216195694">"Naama ja huulia lipova kieli"</string>
+ <string name="spoken_emoji_1F60C" msgid="349384012958268496">"Helpottunut naama"</string>
+ <string name="spoken_emoji_1F60D" msgid="7921853137164938391">"Hymyilevä naama ja sydämenmuotoiset silmät"</string>
+ <string name="spoken_emoji_1F60E" msgid="441718886380605643">"Hymyilevä naama ja aurinkolasit"</string>
+ <string name="spoken_emoji_1F60F" msgid="2674453144890180538">"Virnistävä naama"</string>
+ <string name="spoken_emoji_1F610" msgid="3225675825334102369">"Naamalla perusilme"</string>
+ <string name="spoken_emoji_1F611" msgid="7199179827619679668">"Ilmeetön naama"</string>
+ <string name="spoken_emoji_1F612" msgid="985081329745137998">"Kyllästynyt naama"</string>
+ <string name="spoken_emoji_1F613" msgid="5548607684830303562">"Naama ja kylmä hiki"</string>
+ <string name="spoken_emoji_1F614" msgid="3196305665259916390">"Mietteliäs naama"</string>
+ <string name="spoken_emoji_1F615" msgid="3051674239303969101">"Ymmällä oleva naama"</string>
+ <string name="spoken_emoji_1F616" msgid="8124887056243813089">"Hämmentynyt naama"</string>
+ <string name="spoken_emoji_1F617" msgid="7052733625511122870">"Naama ja pusuhuulet"</string>
+ <string name="spoken_emoji_1F618" msgid="408207170572303753">"Lentosuukko ja silmänisku"</string>
+ <string name="spoken_emoji_1F619" msgid="8645430335143153645">"Naama ja pusuhuulet, silmät sirrillään"</string>
+ <string name="spoken_emoji_1F61A" msgid="2882157190974340247">"Naama ja pusuhuulet, silmät kiinni"</string>
+ <string name="spoken_emoji_1F61B" msgid="3765927202787211499">"Kieltä näyttävä naama"</string>
+ <string name="spoken_emoji_1F61C" msgid="198943912107589389">"Silmää iskevä ja kieltä näyttävä naama"</string>
+ <string name="spoken_emoji_1F61D" msgid="7643546385877816182">"Kieltä näyttävä naama, silmät kiinni"</string>
+ <string name="spoken_emoji_1F61E" msgid="1528732952202098364">"Pettynyt naama"</string>
+ <string name="spoken_emoji_1F61F" msgid="1853664164636082404">"Huolestunut naama"</string>
+ <string name="spoken_emoji_1F620" msgid="6051942001307375830">"Vihainen naama"</string>
+ <string name="spoken_emoji_1F621" msgid="2114711878097257704">"Mököttävä naama"</string>
+ <string name="spoken_emoji_1F622" msgid="29291014645931822">"Itkevä naama"</string>
+ <string name="spoken_emoji_1F623" msgid="7803959833595184773">"Sinnikäs naama"</string>
+ <string name="spoken_emoji_1F624" msgid="8637637647725752799">"Voitokas naama"</string>
+ <string name="spoken_emoji_1F625" msgid="6153625183493635030">"Pettynyt mutta huojentunut naama"</string>
+ <string name="spoken_emoji_1F626" msgid="6179485689935562950">"Surullinen naama, suu auki"</string>
+ <string name="spoken_emoji_1F627" msgid="8566204052903012809">"Tuskainen naama"</string>
+ <string name="spoken_emoji_1F628" msgid="8875777401624904224">"Pelokas naama"</string>
+ <string name="spoken_emoji_1F629" msgid="1411538490319190118">"Uupunut naama"</string>
+ <string name="spoken_emoji_1F62A" msgid="4726686726690289969">"Uninen naama"</string>
+ <string name="spoken_emoji_1F62B" msgid="3221980473921623613">"Väsynyt naama"</string>
+ <string name="spoken_emoji_1F62C" msgid="4616356691941225182">"Irvistävä naama"</string>
+ <string name="spoken_emoji_1F62D" msgid="4283677508698812232">"Rajusti itkevä naama"</string>
+ <string name="spoken_emoji_1F62E" msgid="726083405284353894">"Naama, suu auki"</string>
+ <string name="spoken_emoji_1F62F" msgid="7746620088234710962">"Pelokas naama"</string>
+ <string name="spoken_emoji_1F630" msgid="3298804852155581163">"Naama, suu auki ja kylmä hiki"</string>
+ <string name="spoken_emoji_1F631" msgid="1603391150954646779">"Pelosta kirkuva naama"</string>
+ <string name="spoken_emoji_1F632" msgid="4846193232203976013">"Hämmästynyt naama"</string>
+ <string name="spoken_emoji_1F633" msgid="4023593836629700443">"Punastunut naama"</string>
+ <string name="spoken_emoji_1F634" msgid="3155265083246248129">"Nukkuva naama"</string>
+ <string name="spoken_emoji_1F635" msgid="4616691133452764482">"Naama taju kankaalla"</string>
+ <string name="spoken_emoji_1F636" msgid="947000211822375683">"Naama ilman suuta"</string>
+ <string name="spoken_emoji_1F637" msgid="1269551267347165774">"Naama ja suumaski"</string>
+ <string name="spoken_emoji_1F638" msgid="3410766467496872301">"Virnistävä kissan naama, silmät sirrillään"</string>
+ <string name="spoken_emoji_1F639" msgid="1833417519781022031">"Kissan naama ja ilon kyyneleet"</string>
+ <string name="spoken_emoji_1F63A" msgid="8566294484007152613">"Hymyilevä kissan naama, suu auki"</string>
+ <string name="spoken_emoji_1F63B" msgid="74417995938927571">"Hymyilevä kissan naama, sydämen muotoiset silmät"</string>
+ <string name="spoken_emoji_1F63C" msgid="6472812005729468870">"Kissan naama, kuivakka hymy"</string>
+ <string name="spoken_emoji_1F63D" msgid="1638398369553349509">"Kissan naama, pusuhuulet ja silmät kiinni"</string>
+ <string name="spoken_emoji_1F63E" msgid="6788969063020278986">"Mököttävä kissan naama"</string>
+ <string name="spoken_emoji_1F63F" msgid="1207234562459550185">"Itkevä kissan naama"</string>
+ <string name="spoken_emoji_1F640" msgid="6023054549904329638">"Uupunut kissan naama"</string>
+ <string name="spoken_emoji_1F645" msgid="5202090629227587076">"Naama ja epäonnistumisen ele"</string>
+ <string name="spoken_emoji_1F646" msgid="6734425134415138134">"Naama, OK-ele"</string>
+ <string name="spoken_emoji_1F647" msgid="1090285518444205483">"Syvään kumartava henkilö"</string>
+ <string name="spoken_emoji_1F648" msgid="8978535230610522356">"Silmänsä peittänyt apina"</string>
+ <string name="spoken_emoji_1F649" msgid="8486145279809495102">"Korvansa peittänyt apina"</string>
+ <string name="spoken_emoji_1F64A" msgid="1237524974033228660">"Suunsa peittänyt apina"</string>
+ <string name="spoken_emoji_1F64B" msgid="4251150782016370475">"Iloinen henkilö yksi käsi pystyssä"</string>
+ <string name="spoken_emoji_1F64C" msgid="5446231430684558344">"Juhliva henkilö molemmat kädet pystyssä"</string>
+ <string name="spoken_emoji_1F64D" msgid="4646485595309482342">"Henkilö otsa kurtussa"</string>
+ <string name="spoken_emoji_1F64E" msgid="3376579939836656097">"Henkilö ja mököttävä ilme"</string>
+ <string name="spoken_emoji_1F64F" msgid="1044439574356230711">"Henkilö, jolla kämmenet yhdessä"</string>
+ <string name="spoken_emoji_1F680" msgid="513263736012689059">"Raketti"</string>
+ <string name="spoken_emoji_1F681" msgid="9201341783850525339">"Helikopteri"</string>
+ <string name="spoken_emoji_1F682" msgid="8046933583867498698">"Höyryveturi"</string>
+ <string name="spoken_emoji_1F683" msgid="8772750354339223092">"Junanvaunu"</string>
+ <string name="spoken_emoji_1F684" msgid="346396777356203608">"Pikajuna"</string>
+ <string name="spoken_emoji_1F685" msgid="1237059817190832730">"Luotijuna"</string>
+ <string name="spoken_emoji_1F686" msgid="3525197227223620343">"Juna"</string>
+ <string name="spoken_emoji_1F687" msgid="5110143437960392837">"Metro"</string>
+ <string name="spoken_emoji_1F688" msgid="4702085029871797965">"Kevyt raideliikenne"</string>
+ <string name="spoken_emoji_1F689" msgid="2375851019798817094">"Asema"</string>
+ <string name="spoken_emoji_1F68A" msgid="6368370859718717198">"Raitiovaunu"</string>
+ <string name="spoken_emoji_1F68B" msgid="2920160427117436633">"Raitiovaunun vaunu"</string>
+ <string name="spoken_emoji_1F68C" msgid="1061520934758810864">"Bussi"</string>
+ <string name="spoken_emoji_1F68D" msgid="2890059031360969304">"Bussi edestä"</string>
+ <string name="spoken_emoji_1F68E" msgid="6234042976027309654">"Johdinauto"</string>
+ <string name="spoken_emoji_1F68F" msgid="5871099334672012107">"Bussipysäkki"</string>
+ <string name="spoken_emoji_1F690" msgid="8080964620200195262">"Pikkubussi"</string>
+ <string name="spoken_emoji_1F691" msgid="999173032408730501">"Ambulanssi"</string>
+ <string name="spoken_emoji_1F692" msgid="1712863785341849487">"Paloauto"</string>
+ <string name="spoken_emoji_1F693" msgid="7987109037389768934">"Poliisiauto"</string>
+ <string name="spoken_emoji_1F694" msgid="6061658916653884608">"Poliisiauto edestä"</string>
+ <string name="spoken_emoji_1F695" msgid="6913445460364247283">"Taksi"</string>
+ <string name="spoken_emoji_1F696" msgid="6391604457418285404">"Taksi edestä"</string>
+ <string name="spoken_emoji_1F697" msgid="7978399334396733790">"Auto"</string>
+ <string name="spoken_emoji_1F698" msgid="7006050861129732018">"Auto edestä"</string>
+ <string name="spoken_emoji_1F699" msgid="630317052666590607">"Maastoauto"</string>
+ <string name="spoken_emoji_1F69A" msgid="4739797891735823577">"Kuorma-auto"</string>
+ <string name="spoken_emoji_1F69B" msgid="4715997280786620649">"Kuorma-auto"</string>
+ <string name="spoken_emoji_1F69C" msgid="5557395610750818161">"Traktori"</string>
+ <string name="spoken_emoji_1F69D" msgid="5467164189942951047">"Yksiraiteinen rautatie"</string>
+ <string name="spoken_emoji_1F69E" msgid="169238196389832234">"Vuoristojuna"</string>
+ <string name="spoken_emoji_1F69F" msgid="7508128757012845102">"Riippuva rautatie"</string>
+ <string name="spoken_emoji_1F6A0" msgid="8733056213790160147">"Köysirata"</string>
+ <string name="spoken_emoji_1F6A1" msgid="4666516337749347253">"Köysirata"</string>
+ <string name="spoken_emoji_1F6A2" msgid="4511220588943129583">"Laiva"</string>
+ <string name="spoken_emoji_1F6A3" msgid="8412962252222205387">"Soutuvene"</string>
+ <string name="spoken_emoji_1F6A4" msgid="8867571300266339211">"Pikavene"</string>
+ <string name="spoken_emoji_1F6A5" msgid="7650260812741963884">"Vaakasuuntaiset liikennevalot"</string>
+ <string name="spoken_emoji_1F6A6" msgid="485575967773793454">"Pystysuuntaiset liikennevalot"</string>
+ <string name="spoken_emoji_1F6A7" msgid="6411048933816976794">"Rakennustyömaan merkki"</string>
+ <string name="spoken_emoji_1F6A8" msgid="6345717218374788364">"Poliisiauton hälytysvalo"</string>
+ <string name="spoken_emoji_1F6A9" msgid="6586380356807600412">"Kolmiolippu"</string>
+ <string name="spoken_emoji_1F6AA" msgid="8954448167261738885">"Ovi"</string>
+ <string name="spoken_emoji_1F6AB" msgid="5313946262888343544">"Kulku kielletty -merkki"</string>
+ <string name="spoken_emoji_1F6AC" msgid="6946858177965948288">"Tupakointisymboli"</string>
+ <string name="spoken_emoji_1F6AD" msgid="6320088669185507241">"Tupakointi kielletty"</string>
+ <string name="spoken_emoji_1F6AE" msgid="1062469925352817189">"Roskat roskakoriin -symboli"</string>
+ <string name="spoken_emoji_1F6AF" msgid="2286668056123642208">"Älä roskaa -symboli"</string>
+ <string name="spoken_emoji_1F6B0" msgid="179424763882990952">"Juomaveden symboli"</string>
+ <string name="spoken_emoji_1F6B1" msgid="5585212805429161877">"Juomakelvottoman veden symboli"</string>
+ <string name="spoken_emoji_1F6B2" msgid="1771885082068421875">"Polkupyörä"</string>
+ <string name="spoken_emoji_1F6B3" msgid="8033779581263314408">"Pyöräily kielletty"</string>
+ <string name="spoken_emoji_1F6B4" msgid="1999538449018476947">"Pyöräilijä"</string>
+ <string name="spoken_emoji_1F6B5" msgid="340846352660993117">"Maastopyöräilijä"</string>
+ <string name="spoken_emoji_1F6B6" msgid="4351024386495098336">"Jalankulkija"</string>
+ <string name="spoken_emoji_1F6B7" msgid="4564800655866838802">"Jalankulku kieletty"</string>
+ <string name="spoken_emoji_1F6B8" msgid="3020531906940267349">"Lapsia-varoitusmerkki"</string>
+ <string name="spoken_emoji_1F6B9" msgid="1207095844125041251">"Miehen symboli"</string>
+ <string name="spoken_emoji_1F6BA" msgid="2346879310071017531">"Naisen symboli"</string>
+ <string name="spoken_emoji_1F6BB" msgid="2370172469642078526">"WC"</string>
+ <string name="spoken_emoji_1F6BC" msgid="5558827593563530851">"Vauvan symboli"</string>
+ <string name="spoken_emoji_1F6BD" msgid="9213590243049835957">"WC"</string>
+ <string name="spoken_emoji_1F6BE" msgid="394016533781742491">"WC"</string>
+ <string name="spoken_emoji_1F6BF" msgid="906336365928291207">"Suihku"</string>
+ <string name="spoken_emoji_1F6C0" msgid="4592099854378821599">"Kylpy"</string>
+ <string name="spoken_emoji_1F6C1" msgid="2845056048320031158">"Kylpyamme"</string>
+ <string name="spoken_emoji_1F6C2" msgid="8117262514698011877">"Passintarkastus"</string>
+ <string name="spoken_emoji_1F6C3" msgid="1176342001834630675">"Tulli"</string>
+ <string name="spoken_emoji_1F6C4" msgid="1477622834179978886">"Matkatavaroiden nouto"</string>
+ <string name="spoken_emoji_1F6C5" msgid="2495834050856617451">"Matkatavaroiden säilytys"</string>
+</resources>
diff --git a/java/res/values-fi/strings-talkback-descriptions.xml b/java/res/values-fi/strings-talkback-descriptions.xml
index b12b742cf..ffc7eef33 100644
--- a/java/res/values-fi/strings-talkback-descriptions.xml
+++ b/java/res/values-fi/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Paikat"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Symbolit"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Hymiöt"</string>
+ <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+ <skip />
+ <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+ <skip />
</resources>
diff --git a/java/res/values-fi/strings.xml b/java/res/values-fi/strings.xml
index 756684ae0..9ccc8c3c7 100644
--- a/java/res/values-fi/strings.xml
+++ b/java/res/values-fi/strings.xml
@@ -21,7 +21,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_input_options" msgid="3909945612939668554">"Syöttövalinnat"</string>
- <string name="english_ime_research_log" msgid="8492602295696577851">"Tutkimuslokin komennot"</string>
<string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Hae yht.tietojen nimiä"</string>
<string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Oikeinkirjoituksen tarkistus käyttää yhteystietojasi."</string>
<string name="vibrate_on_keypress" msgid="5258079494276955460">"Käytä värinää näppäimiä painettaessa"</string>
@@ -84,8 +83,6 @@
<string name="select_language" msgid="3693815588777926848">"Syöttökielet"</string>
<string name="hint_add_to_dictionary" msgid="573678656946085380">"Tallenna koskettamalla uudelleen"</string>
<string name="has_dictionary" msgid="6071847973466625007">"Sanakirja saatavilla"</string>
- <string name="prefs_enable_log" msgid="6620424505072963557">"Ota käyttäjäpalaute käyttöön"</string>
- <string name="prefs_description_log" msgid="7525225584555429211">"Auta parantamaan tätä syöttötavan muokkausohjelmaa lähettämällä automaattisesti käyttötietoja ja kaatumisraportteja."</string>
<string name="keyboard_layout" msgid="8451164783510487501">"Näppäimistöteema"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"englanti (Iso-Britannia)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"englanti (Yhdysvallat)"</string>
@@ -118,7 +115,6 @@
<string name="enable" msgid="5031294444630523247">"Ota käyttöön"</string>
<string name="not_now" msgid="6172462888202790482">"Ei nyt"</string>
<string name="custom_input_style_already_exists" msgid="8008728952215449707">"Syöttötyyli on jo olemassa: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
- <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Käytettävyystutkimustila"</string>
<string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Pitkän painalluksen viive"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Painalluksen värinän kesto"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Näppäinpainalluksen äänenvoim."</string>
diff --git a/java/res/values-fr-rCA/strings-action-keys.xml b/java/res/values-fr-rCA/strings-action-keys.xml
index bb5568e79..b35dd61bd 100644
--- a/java/res/values-fr-rCA/strings-action-keys.xml
+++ b/java/res/values-fr-rCA/strings-action-keys.xml
@@ -25,6 +25,8 @@
<string name="label_previous_key" msgid="1421141755779895275">"Préc."</string>
<string name="label_done_key" msgid="7564866296502630852">"Term."</string>
<string name="label_send_key" msgid="482252074224462163">"Env."</string>
+ <!-- no translation found for label_search_key (7965186050435796642) -->
+ <skip />
<string name="label_pause_key" msgid="2225922926459730642">"Pause"</string>
<string name="label_wait_key" msgid="5891247853595466039">"Att."</string>
</resources>
diff --git a/java/res/values-fr-rCA/strings-talkback-descriptions.xml b/java/res/values-fr-rCA/strings-talkback-descriptions.xml
index 7f9eaaab7..2ddffc86d 100644
--- a/java/res/values-fr-rCA/strings-talkback-descriptions.xml
+++ b/java/res/values-fr-rCA/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Lieux"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Symboles"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Émoticônes"</string>
+ <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+ <skip />
+ <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+ <skip />
</resources>
diff --git a/java/res/values-fr-rCA/strings.xml b/java/res/values-fr-rCA/strings.xml
index 5b1308166..fa4304776 100644
--- a/java/res/values-fr-rCA/strings.xml
+++ b/java/res/values-fr-rCA/strings.xml
@@ -21,7 +21,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_input_options" msgid="3909945612939668554">"Options de saisie"</string>
- <string name="english_ime_research_log" msgid="8492602295696577851">"Commandes journaux rech."</string>
<string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Rechercher noms contacts"</string>
<string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Correcteur orthographique utilise entrées de liste de contacts."</string>
<string name="vibrate_on_keypress" msgid="5258079494276955460">"Vibrer à chaque touche"</string>
@@ -84,8 +83,6 @@
<string name="select_language" msgid="3693815588777926848">"Langues de saisie"</string>
<string name="hint_add_to_dictionary" msgid="573678656946085380">"Appuyer de nouveau pour enregistrer"</string>
<string name="has_dictionary" msgid="6071847973466625007">"Dictionnaire disponible"</string>
- <string name="prefs_enable_log" msgid="6620424505072963557">"Autoriser les commentaires des utilisateurs"</string>
- <string name="prefs_description_log" msgid="7525225584555429211">"Contribuer à l\'amélioration de cet éditeur du mode de saisie grâce à l\'envoi automatique de statistiques d\'utilisation et de rapports d\'erreur"</string>
<string name="keyboard_layout" msgid="8451164783510487501">"Thème du clavier"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"Anglais (britannique)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"Anglais (États-Unis)"</string>
@@ -118,7 +115,6 @@
<string name="enable" msgid="5031294444630523247">"Activer"</string>
<string name="not_now" msgid="6172462888202790482">"Pas maintenant"</string>
<string name="custom_input_style_already_exists" msgid="8008728952215449707">"Le style de saisie suivant existe déjà : <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>."</string>
- <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Mode d\'étude de l\'utilisabilité"</string>
<string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Délai appui prolongé sur touche"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Durée vibration press. touche"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Volume pression de touche"</string>
diff --git a/java/res/values-fr/strings-action-keys.xml b/java/res/values-fr/strings-action-keys.xml
index 1c36552d4..e69351c07 100644
--- a/java/res/values-fr/strings-action-keys.xml
+++ b/java/res/values-fr/strings-action-keys.xml
@@ -25,6 +25,8 @@
<string name="label_previous_key" msgid="1421141755779895275">"Préc."</string>
<string name="label_done_key" msgid="7564866296502630852">"OK"</string>
<string name="label_send_key" msgid="482252074224462163">"Envoyer"</string>
+ <!-- no translation found for label_search_key (7965186050435796642) -->
+ <skip />
<string name="label_pause_key" msgid="2225922926459730642">"Pause"</string>
<string name="label_wait_key" msgid="5891247853595466039">"Attente"</string>
</resources>
diff --git a/java/res/values-fr/strings-talkback-descriptions.xml b/java/res/values-fr/strings-talkback-descriptions.xml
index 97f5c6cac..d0b5c3bd5 100644
--- a/java/res/values-fr/strings-talkback-descriptions.xml
+++ b/java/res/values-fr/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Lieux"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Symboles"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Émoticônes"</string>
+ <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+ <skip />
+ <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+ <skip />
</resources>
diff --git a/java/res/values-fr/strings.xml b/java/res/values-fr/strings.xml
index 1bb856783..0fa8e638c 100644
--- a/java/res/values-fr/strings.xml
+++ b/java/res/values-fr/strings.xml
@@ -21,7 +21,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_input_options" msgid="3909945612939668554">"Options de saisie"</string>
- <string name="english_ime_research_log" msgid="8492602295696577851">"Commandes journaux rech."</string>
<string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Rechercher noms contacts"</string>
<string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Correcteur orthographique utilise entrées de liste de contacts."</string>
<string name="vibrate_on_keypress" msgid="5258079494276955460">"Vibrer à chaque touche"</string>
@@ -84,8 +83,6 @@
<string name="select_language" msgid="3693815588777926848">"Langues de saisie"</string>
<string name="hint_add_to_dictionary" msgid="573678656946085380">"Appuyer de nouveau pour enregistrer"</string>
<string name="has_dictionary" msgid="6071847973466625007">"Dictionnaire disponible"</string>
- <string name="prefs_enable_log" msgid="6620424505072963557">"Autoriser les commentaires des utilisateurs"</string>
- <string name="prefs_description_log" msgid="7525225584555429211">"Contribuer à l\'amélioration de cet éditeur du mode de saisie grâce à l\'envoi automatique de statistiques d\'utilisation et de rapports d\'erreur"</string>
<string name="keyboard_layout" msgid="8451164783510487501">"Thème du clavier"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"Anglais (Royaume-Uni)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"Anglais (États-Unis)"</string>
@@ -118,7 +115,6 @@
<string name="enable" msgid="5031294444630523247">"Activer"</string>
<string name="not_now" msgid="6172462888202790482">"Pas maintenant"</string>
<string name="custom_input_style_already_exists" msgid="8008728952215449707">"Le style de saisie suivant existe déjà : <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>."</string>
- <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Mode d\'étude de l\'utilisabilité"</string>
<string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Délai appui prolongé sur touche"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Durée vibration press. touche"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Volume son pression de touche"</string>
diff --git a/java/res/values-hi/strings-action-keys.xml b/java/res/values-hi/strings-action-keys.xml
index 92cb194ea..a90434329 100644
--- a/java/res/values-hi/strings-action-keys.xml
+++ b/java/res/values-hi/strings-action-keys.xml
@@ -25,6 +25,8 @@
<string name="label_previous_key" msgid="1421141755779895275">"पिछला"</string>
<string name="label_done_key" msgid="7564866296502630852">"पूर्ण"</string>
<string name="label_send_key" msgid="482252074224462163">"भेजें"</string>
+ <!-- no translation found for label_search_key (7965186050435796642) -->
+ <skip />
<string name="label_pause_key" msgid="2225922926459730642">"रोकें"</string>
<string name="label_wait_key" msgid="5891247853595466039">"प्रतीक्षा करें"</string>
</resources>
diff --git a/java/res/values-hi/strings-talkback-descriptions.xml b/java/res/values-hi/strings-talkback-descriptions.xml
index 39e53ad96..582314e93 100644
--- a/java/res/values-hi/strings-talkback-descriptions.xml
+++ b/java/res/values-hi/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"स्थान"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"प्रतीक"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"इमोटिकॉन्स"</string>
+ <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+ <skip />
+ <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+ <skip />
</resources>
diff --git a/java/res/values-hi/strings.xml b/java/res/values-hi/strings.xml
index 3129d86cc..cb1ad60eb 100644
--- a/java/res/values-hi/strings.xml
+++ b/java/res/values-hi/strings.xml
@@ -21,7 +21,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_input_options" msgid="3909945612939668554">"इनपुट विकल्‍प"</string>
- <string name="english_ime_research_log" msgid="8492602295696577851">"लॉग आदेशों का शोध करें"</string>
<string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"संपर्क नामों को खोजें"</string>
<string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"वर्तनी परीक्षक आपकी संपर्क सूची की प्रविष्टियों का उपयोग करता है"</string>
<string name="vibrate_on_keypress" msgid="5258079494276955460">"कुंजी दबाने पर कंपन करता है"</string>
@@ -84,8 +83,6 @@
<string name="select_language" msgid="3693815588777926848">"इनपुट भाषाएं"</string>
<string name="hint_add_to_dictionary" msgid="573678656946085380">"सहेजने के लिए पुन: स्‍पर्श करें"</string>
<string name="has_dictionary" msgid="6071847973466625007">"शब्‍दकोश उपलब्‍ध है"</string>
- <string name="prefs_enable_log" msgid="6620424505072963557">"उपयोगकर्ता फ़ीडबैक सक्षम करें"</string>
- <string name="prefs_description_log" msgid="7525225584555429211">"उपयोग के आंकड़े और क्रैश रिपोर्ट अपने आप भेजकर इस इनपुट पद्धति संपादक को बेहतर बनाने में सहायता करें."</string>
<string name="keyboard_layout" msgid="8451164783510487501">"कीबोर्ड थीम"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"अंग्रेज़ी (यूके)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"अंग्रेज़ी (यूएस)"</string>
@@ -118,7 +115,6 @@
<string name="enable" msgid="5031294444630523247">"सक्षम करें"</string>
<string name="not_now" msgid="6172462888202790482">"अभी नहीं"</string>
<string name="custom_input_style_already_exists" msgid="8008728952215449707">"ऐसी ही इनपुट शैली पहले से मौजूद है: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
- <string name="prefs_usability_study_mode" msgid="1261130555134595254">"उपयोगिता अध्ययन मोड"</string>
<string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"कुंजी को देर तक दबाने का विलंब"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"कुंजी-स्पर्श कंपन अवधि"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"कुंजी-स्पर्श ध्वनि आवाज़"</string>
diff --git a/java/res/values-hr/strings-action-keys.xml b/java/res/values-hr/strings-action-keys.xml
index 564f70363..c13da1897 100644
--- a/java/res/values-hr/strings-action-keys.xml
+++ b/java/res/values-hr/strings-action-keys.xml
@@ -25,6 +25,8 @@
<string name="label_previous_key" msgid="1421141755779895275">"Pret."</string>
<string name="label_done_key" msgid="7564866296502630852">"Got."</string>
<string name="label_send_key" msgid="482252074224462163">"Poš."</string>
+ <!-- no translation found for label_search_key (7965186050435796642) -->
+ <skip />
<string name="label_pause_key" msgid="2225922926459730642">"Pauz."</string>
<string name="label_wait_key" msgid="5891247853595466039">"Čekaj"</string>
</resources>
diff --git a/java/res/values-hr/strings-talkback-descriptions.xml b/java/res/values-hr/strings-talkback-descriptions.xml
index c3a2da015..75d168447 100644
--- a/java/res/values-hr/strings-talkback-descriptions.xml
+++ b/java/res/values-hr/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Mjesta"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Simboli"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Emotikoni"</string>
+ <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+ <skip />
+ <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+ <skip />
</resources>
diff --git a/java/res/values-hr/strings.xml b/java/res/values-hr/strings.xml
index 0882faad4..14e408f47 100644
--- a/java/res/values-hr/strings.xml
+++ b/java/res/values-hr/strings.xml
@@ -21,7 +21,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_input_options" msgid="3909945612939668554">"Opcije ulaza"</string>
- <string name="english_ime_research_log" msgid="8492602295696577851">"Istraživanje naredbi dnevnika"</string>
<string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Potražite imena kontakata"</string>
<string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Provjera pravopisa upotrebljava unose iz vašeg popisa kontakata"</string>
<string name="vibrate_on_keypress" msgid="5258079494276955460">"Vibracija pri pritisku na tipku"</string>
@@ -84,8 +83,6 @@
<string name="select_language" msgid="3693815588777926848">"Jezici unosa"</string>
<string name="hint_add_to_dictionary" msgid="573678656946085380">"Dodirnite ponovo za spremanje"</string>
<string name="has_dictionary" msgid="6071847973466625007">"Rječnik je dostupan"</string>
- <string name="prefs_enable_log" msgid="6620424505072963557">"Omogući korisničke povratne informacije"</string>
- <string name="prefs_description_log" msgid="7525225584555429211">"Pomozite u poboljšanju ovog uređivača načina unosa automatskim slanjem statistike upotrebe i izvješća o padu programa"</string>
<string name="keyboard_layout" msgid="8451164783510487501">"Tema tipkovnice"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"Engleski (UK)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"Engleski (SAD)"</string>
@@ -118,7 +115,6 @@
<string name="enable" msgid="5031294444630523247">"Omogući"</string>
<string name="not_now" msgid="6172462888202790482">"Ne sada"</string>
<string name="custom_input_style_already_exists" msgid="8008728952215449707">"Već postoji isti stil unosa: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
- <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Način studije upotrebljivosti"</string>
<string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Odgoda dugog pritiska tipke"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Trajanje vibracije pritiska"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Glasnoća pritiska tipke"</string>
diff --git a/java/res/values-hu/strings-action-keys.xml b/java/res/values-hu/strings-action-keys.xml
index 257f30f34..94445f58b 100644
--- a/java/res/values-hu/strings-action-keys.xml
+++ b/java/res/values-hu/strings-action-keys.xml
@@ -25,6 +25,8 @@
<string name="label_previous_key" msgid="1421141755779895275">"Előző"</string>
<string name="label_done_key" msgid="7564866296502630852">"Kész"</string>
<string name="label_send_key" msgid="482252074224462163">"Küld"</string>
+ <!-- no translation found for label_search_key (7965186050435796642) -->
+ <skip />
<string name="label_pause_key" msgid="2225922926459730642">"Állj"</string>
<string name="label_wait_key" msgid="5891247853595466039">"Vár"</string>
</resources>
diff --git a/java/res/values-hu/strings-talkback-descriptions.xml b/java/res/values-hu/strings-talkback-descriptions.xml
index 2bf2a8aeb..a03895b25 100644
--- a/java/res/values-hu/strings-talkback-descriptions.xml
+++ b/java/res/values-hu/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Helyek"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Szimbólumok"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Hangulatjelek"</string>
+ <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+ <skip />
+ <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+ <skip />
</resources>
diff --git a/java/res/values-hu/strings.xml b/java/res/values-hu/strings.xml
index 8a953ab9d..4c751b724 100644
--- a/java/res/values-hu/strings.xml
+++ b/java/res/values-hu/strings.xml
@@ -21,7 +21,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_input_options" msgid="3909945612939668554">"Beviteli beállítások"</string>
- <string name="english_ime_research_log" msgid="8492602295696577851">"Naplózási parancsok"</string>
<string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Névjegyek keresése"</string>
<string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"A helyesírás-ellenőrző használja a névjegyek bejegyzéseit"</string>
<string name="vibrate_on_keypress" msgid="5258079494276955460">"Rezgés gombnyomásra"</string>
@@ -84,8 +83,6 @@
<string name="select_language" msgid="3693815588777926848">"Beviteli nyelvek"</string>
<string name="hint_add_to_dictionary" msgid="573678656946085380">"Érintse meg újból a mentéshez"</string>
<string name="has_dictionary" msgid="6071847973466625007">"Van elérhető szótár"</string>
- <string name="prefs_enable_log" msgid="6620424505072963557">"Felhasználói visszajelzés engedélyezése"</string>
- <string name="prefs_description_log" msgid="7525225584555429211">"Segíthet a beviteli módszer szerkesztőjének javításában, ha engedélyezi a használati statisztikák és a hibajelentések automatikus elküldését."</string>
<string name="keyboard_layout" msgid="8451164783510487501">"Billentyűzettéma"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"angol (brit)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"angol (amerikai)"</string>
@@ -118,7 +115,6 @@
<string name="enable" msgid="5031294444630523247">"Engedélyezés"</string>
<string name="not_now" msgid="6172462888202790482">"Most nem"</string>
<string name="custom_input_style_already_exists" msgid="8008728952215449707">"Ugyanez a bemenetstílus már létezik: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
- <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Használhatósági teszt"</string>
<string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Hosszú nyomás késleltetése"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Gombnyomás rezgési időtartama"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Gombnyomás hangereje"</string>
diff --git a/java/res/values-hy-rAM/strings-action-keys.xml b/java/res/values-hy-rAM/strings-action-keys.xml
index af9dd5d9d..574ae5a42 100644
--- a/java/res/values-hy-rAM/strings-action-keys.xml
+++ b/java/res/values-hy-rAM/strings-action-keys.xml
@@ -25,6 +25,8 @@
<string name="label_previous_key" msgid="1421141755779895275">"Նախորդը"</string>
<string name="label_done_key" msgid="7564866296502630852">"Պատրաստ է"</string>
<string name="label_send_key" msgid="482252074224462163">"Ուղարկել"</string>
+ <!-- no translation found for label_search_key (7965186050435796642) -->
+ <skip />
<string name="label_pause_key" msgid="2225922926459730642">"Դադարեցնել"</string>
<string name="label_wait_key" msgid="5891247853595466039">"Սպասել"</string>
</resources>
diff --git a/java/res/values-hy-rAM/strings-emoji-descriptions.xml b/java/res/values-hy-rAM/strings-emoji-descriptions.xml
new file mode 100644
index 000000000..21a439fa5
--- /dev/null
+++ b/java/res/values-hy-rAM/strings-emoji-descriptions.xml
@@ -0,0 +1,846 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/*
+**
+** Copyright 2014, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="spoken_emoji_00A9" msgid="2859822817116803638">"Հեղինակային իրավունքի նշան"</string>
+ <string name="spoken_emoji_00AE" msgid="7708335454134589027">"Գրանցված ապրանքանիշի նշան"</string>
+ <string name="spoken_emoji_203C" msgid="153340916701508663">"Կրկնակի բացականչական նշան"</string>
+ <string name="spoken_emoji_2049" msgid="4877256448299555371">"Բացականչական հարցական նշան"</string>
+ <string name="spoken_emoji_2122" msgid="9188440722954720429">"Ապրանքանշանի նշան"</string>
+ <string name="spoken_emoji_2139" msgid="9114342638917304327">"Տեղեկատվական աղբյուր"</string>
+ <string name="spoken_emoji_2194" msgid="8055202727034946680">"Ձախ-աջ սլաք"</string>
+ <string name="spoken_emoji_2195" msgid="8028122253301087407">"Վեր-վար սլաք"</string>
+ <string name="spoken_emoji_2196" msgid="4019164898967854363">"Սլաք դեպի հյուսիս-արևմուտք"</string>
+ <string name="spoken_emoji_2197" msgid="4255723717709017801">"Սլաք դեպի հյուսիս-արևելք"</string>
+ <string name="spoken_emoji_2198" msgid="1452063451313622090">"Սլաք դեպի հարավ-արևելք"</string>
+ <string name="spoken_emoji_2199" msgid="6942722693368807849">"Սլաք դեպի հարավ-արևմուտք"</string>
+ <string name="spoken_emoji_21A9" msgid="5204750172335111188">"Կեռ ձախ սլաք"</string>
+ <string name="spoken_emoji_21AA" msgid="3950259884359247006">"Կեռ աջ սլաք"</string>
+ <string name="spoken_emoji_231A" msgid="6751448803233874993">"Ժամացույց"</string>
+ <string name="spoken_emoji_231B" msgid="5956428809948426182">"Ավազի ժամացույց"</string>
+ <string name="spoken_emoji_23E9" msgid="4022497733535162237">"Դեպի աջ ուղղված սև կրկնակի եռանկյուն"</string>
+ <string name="spoken_emoji_23EA" msgid="2251396938087774944">"Դեպի ձախ ուղղված սև կրկնակի եռանկյուն"</string>
+ <string name="spoken_emoji_23EB" msgid="3746885195641491865">"Դեպի վեր ուղղված սև կրկնակի եռանկյուն"</string>
+ <string name="spoken_emoji_23EC" msgid="7852372752901163416">"Դեպի վար ուղղված սև կրկնակի եռանկյուն"</string>
+ <string name="spoken_emoji_23F0" msgid="8474219588750627870">"Զարթուցիչ"</string>
+ <string name="spoken_emoji_23F3" msgid="166900119581024371">"Հոսող ավազով ժամացույց"</string>
+ <string name="spoken_emoji_24C2" msgid="3948348737566038470">"Շրջանաձև լատիներեն մեծատառ m"</string>
+ <string name="spoken_emoji_25AA" msgid="7865181015100227349">"Փոքր սև քառակուսի"</string>
+ <string name="spoken_emoji_25AB" msgid="6446532820937381457">"Փոքր սպիտակ քառակուսի"</string>
+ <string name="spoken_emoji_25B6" msgid="2423897708496040947">"Դեպի աջ ուղղված սև եռանկյուն"</string>
+ <string name="spoken_emoji_25C0" msgid="3595083440074484934">"Դեպի ձախ ուղղված սև եռանկյուն"</string>
+ <string name="spoken_emoji_25FB" msgid="4838691986881215419">"Միջին սպիտակ քառակուսի"</string>
+ <string name="spoken_emoji_25FC" msgid="7008859564991191050">"Միջին սև քառակուսի"</string>
+ <string name="spoken_emoji_25FD" msgid="7673439755069217479">"Միջին փոքր սպիտակ քառակուսի"</string>
+ <string name="spoken_emoji_25FE" msgid="6782214109919768923">"Միջին փոքր սև քառակուսի"</string>
+ <string name="spoken_emoji_2600" msgid="2272722634618990413">"Սև արև` ճառագայթներով"</string>
+ <string name="spoken_emoji_2601" msgid="6205136889311537150">"Ամպ"</string>
+ <string name="spoken_emoji_260E" msgid="8670395193046424238">"Սև հեռախոս"</string>
+ <string name="spoken_emoji_2611" msgid="4530550203347054611">"Քվեատուփ` նշանով"</string>
+ <string name="spoken_emoji_2614" msgid="1612791247861229500">"Անձրևանոց` անձրևի կաթիլներով"</string>
+ <string name="spoken_emoji_2615" msgid="3320562382424018588">"Տաք ըմպելիք"</string>
+ <string name="spoken_emoji_261D" msgid="4690554173549768467">"Սպիտակ դեպի վեր ուղղված դասիչ"</string>
+ <string name="spoken_emoji_263A" msgid="3170094381521989300">"Սպիտակ ժպտացող դեմք"</string>
+ <string name="spoken_emoji_2648" msgid="4621241062667020673">"Խոյ"</string>
+ <string name="spoken_emoji_2649" msgid="7694461245947059086">"Ցուլ"</string>
+ <string name="spoken_emoji_264A" msgid="1258074605878705030">"Երկվորյակ"</string>
+ <string name="spoken_emoji_264B" msgid="4409219914377810956">"Խեցգետին"</string>
+ <string name="spoken_emoji_264C" msgid="6520255367817054163">"Առյուծ"</string>
+ <string name="spoken_emoji_264D" msgid="1504758945499854018">"Կույս"</string>
+ <string name="spoken_emoji_264E" msgid="2354847104530633519">"Կշեռք"</string>
+ <string name="spoken_emoji_264F" msgid="5822933280406416112">"Կարիճ"</string>
+ <string name="spoken_emoji_2650" msgid="4832481156714796163">"Աղեղնավոր"</string>
+ <string name="spoken_emoji_2651" msgid="840953134601595090">"Այծեղջյուր"</string>
+ <string name="spoken_emoji_2652" msgid="3586925968718775281">"Ջրհոս"</string>
+ <string name="spoken_emoji_2653" msgid="8420547731496254492">"Ձկներ"</string>
+ <string name="spoken_emoji_2660" msgid="4541170554542412536">"Սև ագռավ"</string>
+ <string name="spoken_emoji_2663" msgid="3669352721942285724">"Սև խաչ"</string>
+ <string name="spoken_emoji_2665" msgid="6347941599683765843">"Սև սիրտ"</string>
+ <string name="spoken_emoji_2666" msgid="8296769213401115999">"Սև աղյուս"</string>
+ <string name="spoken_emoji_2668" msgid="7063148281053820386">"Տաք աղբյուրներ"</string>
+ <string name="spoken_emoji_267B" msgid="21716857176812762">"Սև վերամշակման նշան"</string>
+ <string name="spoken_emoji_267F" msgid="8833496533226475443">"Սայլակի նշան"</string>
+ <string name="spoken_emoji_2693" msgid="7443148847598433088">"Խարիսխ"</string>
+ <string name="spoken_emoji_26A0" msgid="6272635532992727510">"Զգուշացման նշան"</string>
+ <string name="spoken_emoji_26A1" msgid="5604749644693339145">"Բարձր լարման նշան"</string>
+ <string name="spoken_emoji_26AA" msgid="8005748091690377153">"Միջին սպիտակ շրջան"</string>
+ <string name="spoken_emoji_26AB" msgid="1655910278422753244">"Միջին սև շրջան"</string>
+ <string name="spoken_emoji_26BD" msgid="1545218197938889737">"Ֆուտբոլի գնդակ"</string>
+ <string name="spoken_emoji_26BE" msgid="8959760533076498209">"Բեյսբոլ"</string>
+ <string name="spoken_emoji_26C4" msgid="3045791757044255626">"Առանց ձյան ձնեմարդ"</string>
+ <string name="spoken_emoji_26C5" msgid="5580129409712578639">"Արևն ամպի ետևում"</string>
+ <string name="spoken_emoji_26CE" msgid="8963656417276062998">"Օձակալ"</string>
+ <string name="spoken_emoji_26D4" msgid="2231451988209604130">"Մուտք չկա"</string>
+ <string name="spoken_emoji_26EA" msgid="7513319636103804907">"Եկեղեցի"</string>
+ <string name="spoken_emoji_26F2" msgid="7134115206158891037">"Շատրվան"</string>
+ <string name="spoken_emoji_26F3" msgid="4912302210162075465">"Դրոշը փոսում"</string>
+ <string name="spoken_emoji_26F5" msgid="4766328116769075217">"Առագաստանավ"</string>
+ <string name="spoken_emoji_26FA" msgid="5888017494809199037">"Վրան"</string>
+ <string name="spoken_emoji_26FD" msgid="2417060622927453534">"Վառելիքի պոմպ"</string>
+ <string name="spoken_emoji_2702" msgid="4005741160717451912">"Սև մկրատ"</string>
+ <string name="spoken_emoji_2705" msgid="164605766946697759">"Սպիտակ խոշոր ստուգանիշ"</string>
+ <string name="spoken_emoji_2708" msgid="7153840886849268988">"Ինքնաթիռ"</string>
+ <string name="spoken_emoji_2709" msgid="2217319160724311369">"Ծրար"</string>
+ <string name="spoken_emoji_270A" msgid="508347232762319473">"Բարձրացրած բռունցք"</string>
+ <string name="spoken_emoji_270B" msgid="6640562128327753423">"Բարձրացրած ձեռք"</string>
+ <string name="spoken_emoji_270C" msgid="1344288035704944581">"Հաղթանշան"</string>
+ <string name="spoken_emoji_270F" msgid="6108251586067318718">"Մատիտ"</string>
+ <string name="spoken_emoji_2712" msgid="6320544535087710482">"Սև գրչածայր"</string>
+ <string name="spoken_emoji_2714" msgid="1968242800064001654">"Խոշոր ստուգանիշ"</string>
+ <string name="spoken_emoji_2716" msgid="511941294762977228">"Խոշոր բազմապատկում x"</string>
+ <string name="spoken_emoji_2728" msgid="5650330815808691881">"Կայծեր"</string>
+ <string name="spoken_emoji_2733" msgid="8915809595141157327">"Ութանկյուն աստղանիշ"</string>
+ <string name="spoken_emoji_2734" msgid="4846583547980754332">"Ութ կետով սև աստղ"</string>
+ <string name="spoken_emoji_2744" msgid="4350636647760161042">"Ձյան փաթիլ"</string>
+ <string name="spoken_emoji_2747" msgid="3718282973916474455">"Կայծ"</string>
+ <string name="spoken_emoji_274C" msgid="2752145886733295314">"Խաչանշան"</string>
+ <string name="spoken_emoji_274E" msgid="4262918689871098338">"Բացասական քառակուսի խաչանշան"</string>
+ <string name="spoken_emoji_2753" msgid="6935897159942119808">"Սև հարցական նշաններով նախշազարդ"</string>
+ <string name="spoken_emoji_2754" msgid="7277504915105532954">"Սպիտակ հարցական նշաններով նախշազարդ"</string>
+ <string name="spoken_emoji_2755" msgid="6853076969826960210">"Սպիտակ բացականչական նշաններով նախշազարդ"</string>
+ <string name="spoken_emoji_2757" msgid="3707907828776912174">"Խոշոր բացականչական նշան"</string>
+ <string name="spoken_emoji_2764" msgid="4214257843609432167">"Սև սիրտ"</string>
+ <string name="spoken_emoji_2795" msgid="6563954833786162168">"Խոշոր գումարման նշան"</string>
+ <string name="spoken_emoji_2796" msgid="5990926508250772777">"Խոշոր հանման նշան"</string>
+ <string name="spoken_emoji_2797" msgid="24694184172879174">"Խոշոր բաժանման նշան"</string>
+ <string name="spoken_emoji_27A1" msgid="3513434778263100580">"Սև դեպի աջ սլաք"</string>
+ <string name="spoken_emoji_27B0" msgid="203395646864662198">"Խուճուճ հանգույց"</string>
+ <string name="spoken_emoji_27BF" msgid="4940514642375640510">"Կրկնակի խուճուճ հանգույց"</string>
+ <string name="spoken_emoji_2934" msgid="9062130477982973457">"Դեպի աջ ուղղված, ապա դեպի վեր ծռված սլաք"</string>
+ <string name="spoken_emoji_2935" msgid="6198710960720232074">"Դեպի աջ ուղղված, ապա դեպի վար ծռված սլաք"</string>
+ <string name="spoken_emoji_2B05" msgid="4813405635410707690">"Դեպի ձախ սև սլաք"</string>
+ <string name="spoken_emoji_2B06" msgid="1223172079106250748">"Դեպի վեր սև սլաք"</string>
+ <string name="spoken_emoji_2B07" msgid="1599124424746596150">"Դեպի վար սև սլաք"</string>
+ <string name="spoken_emoji_2B1B" msgid="3461247311988501626">"Մեծ սև քառակուսի"</string>
+ <string name="spoken_emoji_2B1C" msgid="5793146430145248915">"Մեծ սպիտակ քառակուսի"</string>
+ <string name="spoken_emoji_2B50" msgid="3850845519526950524">"Միջին սպիտակ քառակուսի"</string>
+ <string name="spoken_emoji_2B55" msgid="9137882158811541824">"Խոշոր շրջան"</string>
+ <string name="spoken_emoji_3030" msgid="4609172241893565639">"Ալիքաձև գծիկ"</string>
+ <string name="spoken_emoji_303D" msgid="2545833934975907505">"Երաժշտական փոփոխականի նշան"</string>
+ <string name="spoken_emoji_3297" msgid="928912923628973800">"Շնորհավորանքի շրջանաձև խորհրդանշան"</string>
+ <string name="spoken_emoji_3299" msgid="3930347573693668426">"Գաղտնիքի շրջանաձև խորհրդանշան"</string>
+ <string name="spoken_emoji_1F004" msgid="1705216181345894600">"Մահջոնգի սալիկ՝ կարմիր վիշապով"</string>
+ <string name="spoken_emoji_1F0CF" msgid="7601493592085987866">"Սև ջոկեր խաղաքարտ"</string>
+ <string name="spoken_emoji_1F170" msgid="3817698686602826773">"Արյան Ա խումբ"</string>
+ <string name="spoken_emoji_1F171" msgid="3684218589626650242">"Արյան Բ խումբ"</string>
+ <string name="spoken_emoji_1F17E" msgid="2978809190364779029">"Արյան Օ խումբ"</string>
+ <string name="spoken_emoji_1F17F" msgid="463634348668462040">"Ավտոկայանատեղի"</string>
+ <string name="spoken_emoji_1F18E" msgid="1650705325221496768">"Արյան ԱԲ խումբ"</string>
+ <string name="spoken_emoji_1F191" msgid="5386969264431429221">"Քառակուսի CL"</string>
+ <string name="spoken_emoji_1F192" msgid="8324226436829162496">"Քառակուսի COOL"</string>
+ <string name="spoken_emoji_1F193" msgid="4731758603321515364">"Քառակուսի FREE"</string>
+ <string name="spoken_emoji_1F194" msgid="4903128609556175887">"Քառակուսի ID"</string>
+ <string name="spoken_emoji_1F195" msgid="1433142500411060924">"Քառակուսի NEW"</string>
+ <string name="spoken_emoji_1F196" msgid="8825160701159634202">"Քառակուսի NG"</string>
+ <string name="spoken_emoji_1F197" msgid="7841079241554176535">"Քառակուսի OK"</string>
+ <string name="spoken_emoji_1F198" msgid="7020298909426960622">"Քառակուսի SOS"</string>
+ <string name="spoken_emoji_1F199" msgid="5971252667136235630">"Քառակուսի UP բացականչական նշանով"</string>
+ <string name="spoken_emoji_1F19A" msgid="4557270135899843959">"Քառակուսի vs"</string>
+ <string name="spoken_emoji_1F201" msgid="7000490044681139002">"Քառակուսի Կատականա այստեղ"</string>
+ <string name="spoken_emoji_1F202" msgid="8560906958695043947">"Քառակուսի Կատականա ծառայություն"</string>
+ <string name="spoken_emoji_1F21A" msgid="1496435317324514033">"Քառակուսի խորհրդանշան անվճար"</string>
+ <string name="spoken_emoji_1F22F" msgid="609797148862445402">"Քառակուսի խորհրդանշան պահված տեղ"</string>
+ <string name="spoken_emoji_1F232" msgid="8125716331632035820">"Քառակուսի խորհրդանշան արգելում"</string>
+ <string name="spoken_emoji_1F233" msgid="8749401090457355028">"Քառակուսի խորհրդանշան թափուր աշխատատեղ"</string>
+ <string name="spoken_emoji_1F234" msgid="3546951604285970768">"Քառակուսի խորհրդանշան ընդունված"</string>
+ <string name="spoken_emoji_1F235" msgid="5320186982841793711">"Քառակուսի խորհրդանշան լրիվ զբաղվածություն"</string>
+ <string name="spoken_emoji_1F236" msgid="879755752069393034">"Քառակուսի խորհրդանշան վճարված"</string>
+ <string name="spoken_emoji_1F237" msgid="6741807001205851437">"Քառակուսի խորհրդանշան ամսական"</string>
+ <string name="spoken_emoji_1F238" msgid="5504414186438196912">"Քառակուսի խորհրդանշան դիմում"</string>
+ <string name="spoken_emoji_1F239" msgid="1634067311597618959">"Քառակուսի խորհրդանշան զեղչ"</string>
+ <string name="spoken_emoji_1F23A" msgid="3107862957630169536">"Քառակուսի խորհրդանշան աշխատում է"</string>
+ <string name="spoken_emoji_1F250" msgid="6586943922806727907">"Շրջանաձև խորհրդանշան առավելություն"</string>
+ <string name="spoken_emoji_1F251" msgid="9099032855993346948">"Շրջանաձև խորհրդանշան ընդունում"</string>
+ <string name="spoken_emoji_1F300" msgid="4720098285295840383">"Ցիկլոն"</string>
+ <string name="spoken_emoji_1F301" msgid="3601962477653752974">"Մառախլապատ"</string>
+ <string name="spoken_emoji_1F302" msgid="3404357123421753593">"Փակ անձրևանոց"</string>
+ <string name="spoken_emoji_1F303" msgid="3899301321538188206">"Աստղազարդ գիշեր"</string>
+ <string name="spoken_emoji_1F304" msgid="2767148930689050040">"Արևածագը լեռներում"</string>
+ <string name="spoken_emoji_1F305" msgid="9165812924292061196">"Արևածագ"</string>
+ <string name="spoken_emoji_1F306" msgid="5889294736109193104">"Քաղաքը մթնշաղում"</string>
+ <string name="spoken_emoji_1F307" msgid="2714290867291163713">"Մայրամուտը շենքերի վրա"</string>
+ <string name="spoken_emoji_1F308" msgid="688704703985173377">"Ծիածան"</string>
+ <string name="spoken_emoji_1F309" msgid="6217981957992313528">"Կամուրջը գիշերը"</string>
+ <string name="spoken_emoji_1F30A" msgid="4329309263152110893">"Ծովի ալիք"</string>
+ <string name="spoken_emoji_1F30B" msgid="5729430693700923112">"Հրաբուխ"</string>
+ <string name="spoken_emoji_1F30C" msgid="2961230863217543082">"Ծիր կաթին"</string>
+ <string name="spoken_emoji_1F30D" msgid="1113905673331547953">"Երկրագունդը՝ Եվրոպա-Աֆրիկա"</string>
+ <string name="spoken_emoji_1F30E" msgid="5278512600749223671">"Երկրագունդը՝ Ամերիկաներ"</string>
+ <string name="spoken_emoji_1F30F" msgid="5718144880978707493">"Երկրագունդը՝ Ավստրալիա"</string>
+ <string name="spoken_emoji_1F310" msgid="2959618582975247601">"Երկրագունդը միջօրեականներով"</string>
+ <string name="spoken_emoji_1F311" msgid="623906380914895542">"Նորալուսնի նշան"</string>
+ <string name="spoken_emoji_1F312" msgid="4458575672576125401">"Աճող կիսալուսնի նշան"</string>
+ <string name="spoken_emoji_1F313" msgid="7599181787989497294">"Լուսնի առաջին քառորդի նշան"</string>
+ <string name="spoken_emoji_1F314" msgid="4898293184964365413">"Աճող ուռուցիկ լուսնի նշան"</string>
+ <string name="spoken_emoji_1F315" msgid="3218117051779496309">"Լիալուսնի նշան"</string>
+ <string name="spoken_emoji_1F316" msgid="2061317145777689569">"Փոքրացող ուռուցիկ լուսնի նշան"</string>
+ <string name="spoken_emoji_1F317" msgid="2721090687319539049">"Լուսնի վերջին քառորդի նշան"</string>
+ <string name="spoken_emoji_1F318" msgid="3814091755648887570">"Փոքրացող կիսալուսնի նշան"</string>
+ <string name="spoken_emoji_1F319" msgid="4074299824890459465">"Կիսալուսին"</string>
+ <string name="spoken_emoji_1F31A" msgid="3092285278116977103">"Դեմքով նորալուսին"</string>
+ <string name="spoken_emoji_1F31B" msgid="2658562138386927881">"Առաջին քառորդ լուսին՝ դեմքով"</string>
+ <string name="spoken_emoji_1F31C" msgid="7914768515547867384">"Վերջին քառորդ լուսին՝ դեմքով"</string>
+ <string name="spoken_emoji_1F31D" msgid="1925730459848297182">"Դեմքով լիալուսին"</string>
+ <string name="spoken_emoji_1F31E" msgid="8022112382524084418">"Դեմքով արև"</string>
+ <string name="spoken_emoji_1F31F" msgid="1051661214137766369">"Փայլուն աստղ"</string>
+ <string name="spoken_emoji_1F320" msgid="5450591979068216115">"Կրակող աստղ"</string>
+ <string name="spoken_emoji_1F330" msgid="3115760035618051575">"Շագանակ"</string>
+ <string name="spoken_emoji_1F331" msgid="5658888205290008691">"Սածիլ"</string>
+ <string name="spoken_emoji_1F332" msgid="2935650450421165938">"Մշտադալար ծառ"</string>
+ <string name="spoken_emoji_1F333" msgid="5898847427062482675">"Տերևաշատ ծառ"</string>
+ <string name="spoken_emoji_1F334" msgid="6183375224678417894">"Պալմա"</string>
+ <string name="spoken_emoji_1F335" msgid="5352418412103584941">"Կակտուս"</string>
+ <string name="spoken_emoji_1F337" msgid="3839107352363566289">"Կակաչ"</string>
+ <string name="spoken_emoji_1F338" msgid="6389970364260468490">"Բալենու ծաղիկ"</string>
+ <string name="spoken_emoji_1F339" msgid="9128891447985256151">"Վարդ"</string>
+ <string name="spoken_emoji_1F33A" msgid="2025828400095233078">"Հիբիսկուս"</string>
+ <string name="spoken_emoji_1F33B" msgid="8163868254348448552">"Արևածաղիկ"</string>
+ <string name="spoken_emoji_1F33C" msgid="6850371206262335812">"Ծաղիկ"</string>
+ <string name="spoken_emoji_1F33D" msgid="9033484052864509610">"Եգիպտացորեն"</string>
+ <string name="spoken_emoji_1F33E" msgid="2540173396638444120">"Բրինձ"</string>
+ <string name="spoken_emoji_1F33F" msgid="4384823344364908558">"Խոտաբույս"</string>
+ <string name="spoken_emoji_1F340" msgid="3494255459156499305">"Քառատերև երեքնուկ"</string>
+ <string name="spoken_emoji_1F341" msgid="4581959481754990158">"Թխկու տերև"</string>
+ <string name="spoken_emoji_1F342" msgid="3119068426871821222">"Թափված տերև"</string>
+ <string name="spoken_emoji_1F343" msgid="2663317495805149004">"Քամուց թռչող տերև"</string>
+ <string name="spoken_emoji_1F344" msgid="2738517881678722159">"Սունկ"</string>
+ <string name="spoken_emoji_1F345" msgid="6135288642349085554">"Լոլիկ"</string>
+ <string name="spoken_emoji_1F346" msgid="2075395322785406367">"Սմբուկ"</string>
+ <string name="spoken_emoji_1F347" msgid="7753453754963890571">"Խաղող"</string>
+ <string name="spoken_emoji_1F348" msgid="1247076837284932788">"Սեխ"</string>
+ <string name="spoken_emoji_1F349" msgid="5563054555180611086">"Ձմերուկ"</string>
+ <string name="spoken_emoji_1F34A" msgid="4688661208570160524">"Մանդարին"</string>
+ <string name="spoken_emoji_1F34B" msgid="4335318423164185706">"Կիտրոն"</string>
+ <string name="spoken_emoji_1F34C" msgid="3712827239858159474">"Բանան"</string>
+ <string name="spoken_emoji_1F34D" msgid="7712521967162622936">"Արքայախնձոր"</string>
+ <string name="spoken_emoji_1F34E" msgid="1859466882598614228">"Կարմիր խնձոր"</string>
+ <string name="spoken_emoji_1F34F" msgid="8251711032295005633">"Կանաչ խնձոր"</string>
+ <string name="spoken_emoji_1F350" msgid="625802980159197701">"Տանձ"</string>
+ <string name="spoken_emoji_1F351" msgid="4269460120610911895">"Դեղձ"</string>
+ <string name="spoken_emoji_1F352" msgid="965600953360182635">"Բալ"</string>
+ <string name="spoken_emoji_1F353" msgid="7068623879906925592">"Ելակ"</string>
+ <string name="spoken_emoji_1F354" msgid="45162285238888494">"Համբուրգեր"</string>
+ <string name="spoken_emoji_1F355" msgid="9157587635526433283">"Պիցցայի կտոր"</string>
+ <string name="spoken_emoji_1F356" msgid="2667196119149852244">"Ոսկորով միս"</string>
+ <string name="spoken_emoji_1F357" msgid="8022817413851052256">"Հավի բուդ"</string>
+ <string name="spoken_emoji_1F358" msgid="3042693264748036476">"Բրնձի կրեկեր"</string>
+ <string name="spoken_emoji_1F359" msgid="3988148661730121958">"Բրնձի կլորակ"</string>
+ <string name="spoken_emoji_1F35A" msgid="1763824172198327268">"Եփած բրինձ"</string>
+ <string name="spoken_emoji_1F35B" msgid="62530406745717835">"Քարի և բրինձ"</string>
+ <string name="spoken_emoji_1F35C" msgid="7537756539198945509">"Գոլորշիացող բաժակ"</string>
+ <string name="spoken_emoji_1F35D" msgid="8173523083861875196">"Սպագետտի"</string>
+ <string name="spoken_emoji_1F35E" msgid="2935428307894662571">"Հաց"</string>
+ <string name="spoken_emoji_1F35F" msgid="4840297386785728443">"Տապակած կարտոֆիլ"</string>
+ <string name="spoken_emoji_1F360" msgid="4094659855684686801">"Տապակած քաղցր կարտոֆիլ"</string>
+ <string name="spoken_emoji_1F361" msgid="6475486395784096109">"Դանգո"</string>
+ <string name="spoken_emoji_1F362" msgid="5004692577661076275">"Օդեն"</string>
+ <string name="spoken_emoji_1F363" msgid="1606603765717743806">"Սուշի"</string>
+ <string name="spoken_emoji_1F364" msgid="6550457766169570811">"Տապակած ծովախեցգետին"</string>
+ <string name="spoken_emoji_1F365" msgid="4963815540953316307">"Ձկան տորթ՝ օղակաձև ձևավորմամբ"</string>
+ <string name="spoken_emoji_1F366" msgid="7862401745277049404">"Լցնովի պաղպաղակ"</string>
+ <string name="spoken_emoji_1F367" msgid="7447972978281980414">"Սառցե դեսերտ"</string>
+ <string name="spoken_emoji_1F368" msgid="7790003146142724913">"Պաղպաղակ"</string>
+ <string name="spoken_emoji_1F369" msgid="7383712944084857350">"Դոնաթ"</string>
+ <string name="spoken_emoji_1F36A" msgid="2726271795913042295">"Թխվածքաբլիթ"</string>
+ <string name="spoken_emoji_1F36B" msgid="6342163604299875931">"Շոկոլադի սալիկ"</string>
+ <string name="spoken_emoji_1F36C" msgid="2168934753998218790">"Կոնֆետ"</string>
+ <string name="spoken_emoji_1F36D" msgid="3671507903799975792">"Սառնաշաքար կոնֆետ"</string>
+ <string name="spoken_emoji_1F36E" msgid="4630541402785165902">"Եփովի կրեմ"</string>
+ <string name="spoken_emoji_1F36F" msgid="5577915387425169439">"Մեղրանոթ"</string>
+ <string name="spoken_emoji_1F370" msgid="7243244547866114951">"Տորթի կտոր"</string>
+ <string name="spoken_emoji_1F371" msgid="6731527040552916358">"Բենտոյով տուփ"</string>
+ <string name="spoken_emoji_1F372" msgid="1635035323832181733">"Սնունդով լի ափսե"</string>
+ <string name="spoken_emoji_1F373" msgid="7799289534289221045">"Խոհարարություն"</string>
+ <string name="spoken_emoji_1F374" msgid="5973820884987069131">"Դանակ և պատառաքաղ"</string>
+ <string name="spoken_emoji_1F375" msgid="1074832087699617700">"Թեյի անպոչ բաժակ"</string>
+ <string name="spoken_emoji_1F376" msgid="6499274685584852067">"Սակեի շիշ և գավաթ"</string>
+ <string name="spoken_emoji_1F377" msgid="1762398562314172075">"Գինու գավաթ"</string>
+ <string name="spoken_emoji_1F378" msgid="5528234560590117516">"Կոկտեյլի բաժակ"</string>
+ <string name="spoken_emoji_1F379" msgid="790581290787943325">"Արևադարձային խմիչք"</string>
+ <string name="spoken_emoji_1F37A" msgid="391966822450619516">"Գարեջրի բաժակ"</string>
+ <string name="spoken_emoji_1F37B" msgid="9015043286465670662">"Զրնգացող գարեջրի բաժակներ"</string>
+ <string name="spoken_emoji_1F37C" msgid="2532113819464508894">"Մանկական շիշ"</string>
+ <string name="spoken_emoji_1F380" msgid="3487363857092458827">"Ժապավեն"</string>
+ <string name="spoken_emoji_1F381" msgid="614180683680675444">"Փաթեթավորված նվեր"</string>
+ <string name="spoken_emoji_1F382" msgid="4720497171946687501">"Ծննդյան տորթ"</string>
+ <string name="spoken_emoji_1F383" msgid="3536505941578757623">"Դդմի լապտեր"</string>
+ <string name="spoken_emoji_1F384" msgid="1797870204479059004">"Տոնածառ"</string>
+ <string name="spoken_emoji_1F385" msgid="1754174063483626367">"Ձմեռ պապ"</string>
+ <string name="spoken_emoji_1F386" msgid="2130445450758114746">"Հրավառություն"</string>
+ <string name="spoken_emoji_1F387" msgid="3403182563117999933">"Բենգալյան կրակ"</string>
+ <string name="spoken_emoji_1F388" msgid="2903047203723251804">"Փուչիկ"</string>
+ <string name="spoken_emoji_1F389" msgid="2352830665883549388">"Ճայթուկ"</string>
+ <string name="spoken_emoji_1F38A" msgid="6280428984773641322">"Կոնֆետտի գնդակ"</string>
+ <string name="spoken_emoji_1F38B" msgid="4902225837479015489">"Տանաբատա ծառ"</string>
+ <string name="spoken_emoji_1F38C" msgid="7623268024030989365">"Հատվող դրոշներ"</string>
+ <string name="spoken_emoji_1F38D" msgid="8237542796124408528">"Սոճու ձևավորում"</string>
+ <string name="spoken_emoji_1F38E" msgid="5373397476238212371">"Ճապոնական տիկնիկներ"</string>
+ <string name="spoken_emoji_1F38F" msgid="8754091376829552844">"Կարպ նավադրոշ"</string>
+ <string name="spoken_emoji_1F390" msgid="8903307048095431374">"Քամու երգ"</string>
+ <string name="spoken_emoji_1F391" msgid="2134952069191911841">"Լուսնի դիտման արարողություն"</string>
+ <string name="spoken_emoji_1F392" msgid="6380405493914304737">"Դպրոցական պայուսակ"</string>
+ <string name="spoken_emoji_1F393" msgid="6947890064872470996">"Ավարտական ​​գլխարկ"</string>
+ <string name="spoken_emoji_1F3A0" msgid="3572095190082826057">"Ձի կարուսել"</string>
+ <string name="spoken_emoji_1F3A1" msgid="4300565511681058798">"Սատանայի անիվ"</string>
+ <string name="spoken_emoji_1F3A2" msgid="15486093912232140">"Ուրախ սարեր"</string>
+ <string name="spoken_emoji_1F3A3" msgid="921739319504942924">"Ձկնորսական կարթ և ձուկ"</string>
+ <string name="spoken_emoji_1F3A4" msgid="7497596355346856950">"Բարձրախոս"</string>
+ <string name="spoken_emoji_1F3A5" msgid="4290497821228183002">"Տեսախցիկ"</string>
+ <string name="spoken_emoji_1F3A6" msgid="26019057872319055">"Կինոթատրոն"</string>
+ <string name="spoken_emoji_1F3A7" msgid="837856608794094105">"Ականջակալ"</string>
+ <string name="spoken_emoji_1F3A8" msgid="2332260356509244587">"Ներկապնակ"</string>
+ <string name="spoken_emoji_1F3A9" msgid="9045869366525115256">"Ցիլինդր"</string>
+ <string name="spoken_emoji_1F3AA" msgid="5728760354237132">"Կրկեսային վրան"</string>
+ <string name="spoken_emoji_1F3AB" msgid="1657997517193216284">"Տոմս"</string>
+ <string name="spoken_emoji_1F3AC" msgid="4317366554314492152">"Ծափափեղկ"</string>
+ <string name="spoken_emoji_1F3AD" msgid="607157286336130470">"Կատարողական արվեստ"</string>
+ <string name="spoken_emoji_1F3AE" msgid="2902308174671548150">"Տեսախաղ"</string>
+ <string name="spoken_emoji_1F3AF" msgid="5420539221790296407">"Ուղղակի հարված"</string>
+ <string name="spoken_emoji_1F3B0" msgid="7440244806527891956">"Խաղասարք"</string>
+ <string name="spoken_emoji_1F3B1" msgid="545544382391379234">"Բիլիարդ"</string>
+ <string name="spoken_emoji_1F3B2" msgid="8302262034774787493">"Խաղազառ"</string>
+ <string name="spoken_emoji_1F3B3" msgid="5180870610771027520">"Բոուլինգ"</string>
+ <string name="spoken_emoji_1F3B4" msgid="4723852033266071564">"Ծաղկով խաղաքարտեր"</string>
+ <string name="spoken_emoji_1F3B5" msgid="1998470239850548554">"Երաժշտական ձայնանիշ"</string>
+ <string name="spoken_emoji_1F3B6" msgid="3827730457113941705">"Մի քանի երաժշտական ձայնանիշ"</string>
+ <string name="spoken_emoji_1F3B7" msgid="5503403099445042180">"Սաքսոֆոն"</string>
+ <string name="spoken_emoji_1F3B8" msgid="3985658156795011430">"Կիթառ"</string>
+ <string name="spoken_emoji_1F3B9" msgid="5596295757967881451">"Երաժշտական ստեղնաշար"</string>
+ <string name="spoken_emoji_1F3BA" msgid="4284064120340683558">"Շեփոր"</string>
+ <string name="spoken_emoji_1F3BB" msgid="2856598510069988745">"Ջութակ"</string>
+ <string name="spoken_emoji_1F3BC" msgid="1608424748821446230">"Նոտագրում"</string>
+ <string name="spoken_emoji_1F3BD" msgid="5490786111375627777">"Վազքի վերնաշապիկ"</string>
+ <string name="spoken_emoji_1F3BE" msgid="1851613105691627931">"Թենիսի թիակ և գնդակ"</string>
+ <string name="spoken_emoji_1F3BF" msgid="6862405997423247921">"Դահուկ և դահուկի կոշիկ"</string>
+ <string name="spoken_emoji_1F3C0" msgid="7421420756115104085">"Բասկետբոլի գնդակ և զամբյուղ"</string>
+ <string name="spoken_emoji_1F3C1" msgid="6926537251677319922">"Վերջնակետի դրոշ"</string>
+ <string name="spoken_emoji_1F3C2" msgid="5708596929237987082">"Ձնատախտակորդ"</string>
+ <string name="spoken_emoji_1F3C3" msgid="5850982999510115824">"Վազորդ"</string>
+ <string name="spoken_emoji_1F3C4" msgid="8468355585994639838">"Ալեսահորդ"</string>
+ <string name="spoken_emoji_1F3C6" msgid="9094474706847545409">"Մրցանակ"</string>
+ <string name="spoken_emoji_1F3C7" msgid="8172206200368370116">"Ձիարշավ"</string>
+ <string name="spoken_emoji_1F3C8" msgid="5619171461277597709">"Ամերիկյան ֆուտբոլ"</string>
+ <string name="spoken_emoji_1F3C9" msgid="6371294008765871043">"Ռեգբի"</string>
+ <string name="spoken_emoji_1F3CA" msgid="130977831787806932">"Լողորդ"</string>
+ <string name="spoken_emoji_1F3E0" msgid="6277213201655811842">"Բնակելի շենք"</string>
+ <string name="spoken_emoji_1F3E1" msgid="233476176077538885">"Այգով տուն"</string>
+ <string name="spoken_emoji_1F3E2" msgid="919736380093964570">"Գրասենյակային շենք"</string>
+ <string name="spoken_emoji_1F3E3" msgid="6177606081825094184">"Ճապոնական փոստատուն"</string>
+ <string name="spoken_emoji_1F3E4" msgid="717377871070970293">"Եվրոպական փոստատուն"</string>
+ <string name="spoken_emoji_1F3E5" msgid="1350532500431776780">"Հիվանդանոց"</string>
+ <string name="spoken_emoji_1F3E6" msgid="342132788513806214">"Բանկ"</string>
+ <string name="spoken_emoji_1F3E7" msgid="6322352038284944265">"Բանկոմատ"</string>
+ <string name="spoken_emoji_1F3E8" msgid="5864918444350599907">"Հյուրանոց"</string>
+ <string name="spoken_emoji_1F3E9" msgid="7830416185375326938">"Սիրո հյուրանոց"</string>
+ <string name="spoken_emoji_1F3EA" msgid="5081084413084360479">"Պարենային խանութ"</string>
+ <string name="spoken_emoji_1F3EB" msgid="7010966528205150525">"Դպրոց"</string>
+ <string name="spoken_emoji_1F3EC" msgid="4845978861878295154">"Հանրախանութ"</string>
+ <string name="spoken_emoji_1F3ED" msgid="3980316226665215370">"Գործարան"</string>
+ <string name="spoken_emoji_1F3EE" msgid="1253964276770550248">"Ճապոնական լապտեր"</string>
+ <string name="spoken_emoji_1F3EF" msgid="1128975573507389883">"Ճապոնական ամրոց"</string>
+ <string name="spoken_emoji_1F3F0" msgid="1544632297502291578">"Եվրոպական ամրոց"</string>
+ <string name="spoken_emoji_1F400" msgid="2063034795679578294">"Առնետ"</string>
+ <string name="spoken_emoji_1F401" msgid="6736421616217369594">"Մուկ"</string>
+ <string name="spoken_emoji_1F402" msgid="7276670995895485604">"Եզ"</string>
+ <string name="spoken_emoji_1F403" msgid="8045709541897118928">"Գոմեշ"</string>
+ <string name="spoken_emoji_1F404" msgid="5240777285676662335">"Կով"</string>
+ <string name="spoken_emoji_1F406" msgid="5163461930159540018">"Ընձառյուծ"</string>
+ <string name="spoken_emoji_1F407" msgid="6905370221172708160">"Ճագար"</string>
+ <string name="spoken_emoji_1F408" msgid="1362164550508207284">"Կատու"</string>
+ <string name="spoken_emoji_1F409" msgid="8476130983168866013">"Վիշապ"</string>
+ <string name="spoken_emoji_1F40A" msgid="1149626786411545043">"Կոկորդիլոս"</string>
+ <string name="spoken_emoji_1F40B" msgid="5199104921208397643">"Կետ"</string>
+ <string name="spoken_emoji_1F40C" msgid="2704006052881702675">"Խխունջ"</string>
+ <string name="spoken_emoji_1F40D" msgid="8648186663643157522">"Օձ"</string>
+ <string name="spoken_emoji_1F40E" msgid="7219137467573327268">"Ձի"</string>
+ <string name="spoken_emoji_1F40F" msgid="7834336676729040395">"Խոյ"</string>
+ <string name="spoken_emoji_1F410" msgid="8686765722255775031">"Այծ"</string>
+ <string name="spoken_emoji_1F411" msgid="3585715397876383525">"Ոչխար"</string>
+ <string name="spoken_emoji_1F412" msgid="4924794582980077838">"Կապիկ"</string>
+ <string name="spoken_emoji_1F413" msgid="1460475310405677377">"Աքաղաղ"</string>
+ <string name="spoken_emoji_1F414" msgid="5857296282631892219">"Հավ"</string>
+ <string name="spoken_emoji_1F415" msgid="5920041074892949527">"Շուն"</string>
+ <string name="spoken_emoji_1F416" msgid="4362403392912540286">"Խոզ"</string>
+ <string name="spoken_emoji_1F417" msgid="6836978415840795128">"Վարազ"</string>
+ <string name="spoken_emoji_1F418" msgid="7926161463897783691">"Փիղ"</string>
+ <string name="spoken_emoji_1F419" msgid="1055233959755784186">"Ութոտնուկ"</string>
+ <string name="spoken_emoji_1F41A" msgid="5195666556511558060">"Պարուրաձև խեցի"</string>
+ <string name="spoken_emoji_1F41B" msgid="7652480167465557832">"Բզեզ"</string>
+ <string name="spoken_emoji_1F41C" msgid="1123461148697574239">"Մրջյուն"</string>
+ <string name="spoken_emoji_1F41D" msgid="718579308764058851">"Մեղու"</string>
+ <string name="spoken_emoji_1F41E" msgid="6766305509608115467">"Զատիկ"</string>
+ <string name="spoken_emoji_1F41F" msgid="1207261298343160838">"Ձուկ"</string>
+ <string name="spoken_emoji_1F420" msgid="1041145003133609221">"Արևադարձային ձուկ"</string>
+ <string name="spoken_emoji_1F421" msgid="1748378324417438751">"Գնդաձուկ"</string>
+ <string name="spoken_emoji_1F422" msgid="4106724877523329148">"Կրիա"</string>
+ <string name="spoken_emoji_1F423" msgid="4077407945958691907">"Թուխսի ճուտ"</string>
+ <string name="spoken_emoji_1F424" msgid="6911326019270172283">"Ճուտիկ"</string>
+ <string name="spoken_emoji_1F425" msgid="5466514196557885577">"Դիմահայաց ճուտիկ"</string>
+ <string name="spoken_emoji_1F426" msgid="2163979138772892755">"Թռչուն"</string>
+ <string name="spoken_emoji_1F427" msgid="3585670324511212961">"Պինգվին"</string>
+ <string name="spoken_emoji_1F428" msgid="7955440808647898579">"Կոալա"</string>
+ <string name="spoken_emoji_1F429" msgid="5028269352809819035">"Պուդել"</string>
+ <string name="spoken_emoji_1F42A" msgid="4681926706404032484">"Դրոմադեր ուղտ"</string>
+ <string name="spoken_emoji_1F42B" msgid="2725166074981558322">"Երկսապատանի ուղտ"</string>
+ <string name="spoken_emoji_1F42C" msgid="6764791873413727085">"Դելֆին"</string>
+ <string name="spoken_emoji_1F42D" msgid="1033643138546864251">"Մկան մռութ"</string>
+ <string name="spoken_emoji_1F42E" msgid="8099223337120508820">"Կովի մռութ"</string>
+ <string name="spoken_emoji_1F42F" msgid="2104743989330781572">"Վագրի մռութ"</string>
+ <string name="spoken_emoji_1F430" msgid="525492897063150160">"Ճագարի մռութ"</string>
+ <string name="spoken_emoji_1F431" msgid="6051358666235016851">"Կատվի մռութ"</string>
+ <string name="spoken_emoji_1F432" msgid="7698001871193018305">"Վիշապի մռութ"</string>
+ <string name="spoken_emoji_1F433" msgid="3762356053512899326">"Թռչող կետ"</string>
+ <string name="spoken_emoji_1F434" msgid="3619943222159943226">"Ձիու մռութ"</string>
+ <string name="spoken_emoji_1F435" msgid="59199202683252958">"Կապիկի մռութ"</string>
+ <string name="spoken_emoji_1F436" msgid="340544719369009828">"Շան մռութ"</string>
+ <string name="spoken_emoji_1F437" msgid="1219818379784982585">"Խոզի մռութ"</string>
+ <string name="spoken_emoji_1F438" msgid="9128124743321008210">"Գորտի մռութ"</string>
+ <string name="spoken_emoji_1F439" msgid="1424161319554642266">"Գերմանամկան դեմք"</string>
+ <string name="spoken_emoji_1F43A" msgid="6727645488430385584">"Գայլի մռութ"</string>
+ <string name="spoken_emoji_1F43B" msgid="5397170068392865167">"Արջի մռութ"</string>
+ <string name="spoken_emoji_1F43C" msgid="2715995734367032431">"Պանդայի մռութ"</string>
+ <string name="spoken_emoji_1F43D" msgid="6005480717951776597">"Խոզի քիթ"</string>
+ <string name="spoken_emoji_1F43E" msgid="8917626103219080547">"Թաթի հետքեր"</string>
+ <string name="spoken_emoji_1F440" msgid="7144338258163384433">"Աչքեր"</string>
+ <string name="spoken_emoji_1F442" msgid="1905515392292676124">"Ականջ"</string>
+ <string name="spoken_emoji_1F443" msgid="1491504447758933115">"Քիթ"</string>
+ <string name="spoken_emoji_1F444" msgid="3654613047946080332">"Բերան"</string>
+ <string name="spoken_emoji_1F445" msgid="7024905244040509204">"Լեզու"</string>
+ <string name="spoken_emoji_1F446" msgid="2150365643636471745">"Վեր ուղղված սպիտակ ցուցամատ"</string>
+ <string name="spoken_emoji_1F447" msgid="8794022344940891388">"Վար ուղղված սպիտակ ցուցամատ"</string>
+ <string name="spoken_emoji_1F448" msgid="3261812959215550650">"Ձախ ուղղված սպիտակ ցուցամատ"</string>
+ <string name="spoken_emoji_1F449" msgid="4764447975177805991">"Աջ ուղղված սպիտակ ցուցամատ"</string>
+ <string name="spoken_emoji_1F44A" msgid="7197417095486424841">"Բռունցքի նշան"</string>
+ <string name="spoken_emoji_1F44B" msgid="1975968945250833117">"Թափահարող ձեռքի նշան"</string>
+ <string name="spoken_emoji_1F44C" msgid="3185919567897876562">"Ok-ի նշան"</string>
+ <string name="spoken_emoji_1F44D" msgid="6182553970602667815">"Բութ մատները վեր նշան"</string>
+ <string name="spoken_emoji_1F44E" msgid="8030851867365111809">"Բութ մատները վար նշան"</string>
+ <string name="spoken_emoji_1F44F" msgid="5148753662268213389">"Ծափահարող ձեռքերի նշան"</string>
+ <string name="spoken_emoji_1F450" msgid="1012021072085157054">"Բաց ափերով ձեռքերի նշան"</string>
+ <string name="spoken_emoji_1F451" msgid="8257466714629051320">"Թագ"</string>
+ <string name="spoken_emoji_1F452" msgid="4567394011149905466">"Կնոջ գլխարկ"</string>
+ <string name="spoken_emoji_1F453" msgid="5978410551173163010">"Ակնոց"</string>
+ <string name="spoken_emoji_1F454" msgid="348469036193323252">"Փողկապ"</string>
+ <string name="spoken_emoji_1F455" msgid="5665118831861433578">"Շապիկ"</string>
+ <string name="spoken_emoji_1F456" msgid="1890991330923356408">"Ջինս"</string>
+ <string name="spoken_emoji_1F457" msgid="3904310482655702620">"Զգեստ"</string>
+ <string name="spoken_emoji_1F458" msgid="5704243858031107692">"Կիմոնո"</string>
+ <string name="spoken_emoji_1F459" msgid="3553148747050035251">"Բիկինի"</string>
+ <string name="spoken_emoji_1F45A" msgid="1389654639484716101">"Կնոջ հագուստ"</string>
+ <string name="spoken_emoji_1F45B" msgid="1113293170254222904">"Դրամապանակ"</string>
+ <string name="spoken_emoji_1F45C" msgid="3410257778598006936">"Պայուսակ"</string>
+ <string name="spoken_emoji_1F45D" msgid="812176504300064819">"Քսակ"</string>
+ <string name="spoken_emoji_1F45E" msgid="2901741399934723562">"Տղամարդու կոշիկ"</string>
+ <string name="spoken_emoji_1F45F" msgid="6828566359287798863">"Մարզակոշիկ"</string>
+ <string name="spoken_emoji_1F460" msgid="305863879170420855">"Բարձրակրունկ կոշիկ"</string>
+ <string name="spoken_emoji_1F461" msgid="5160493217831417630">"Կնոջ սանդալներ"</string>
+ <string name="spoken_emoji_1F462" msgid="1722897795554863734">"Կնոջ երկարաճիտ կոշիկներ"</string>
+ <string name="spoken_emoji_1F463" msgid="5850772903593010699">"Ոտնահետքեր"</string>
+ <string name="spoken_emoji_1F464" msgid="1228335905487734913">"Կիսանդրու ուրվագիծ"</string>
+ <string name="spoken_emoji_1F465" msgid="4461307702499679879">"Կիսանդրիների ուրվագիծ"</string>
+ <string name="spoken_emoji_1F466" msgid="1938873085514108889">"Տղա"</string>
+ <string name="spoken_emoji_1F467" msgid="8237080594860144998">"Աղջիկ"</string>
+ <string name="spoken_emoji_1F468" msgid="6081300722526675382">"Տղամարդ"</string>
+ <string name="spoken_emoji_1F469" msgid="1090140923076108158">"Կին"</string>
+ <string name="spoken_emoji_1F46A" msgid="5063570981942606595">"Ընտանիք"</string>
+ <string name="spoken_emoji_1F46B" msgid="6795882374287327952">"Միացված ձեռքերով տղամարդ և կին"</string>
+ <string name="spoken_emoji_1F46C" msgid="6844464165783964495">"Միացված ձեռքերով երկու տղամարդ"</string>
+ <string name="spoken_emoji_1F46D" msgid="2316773068014053180">"Միացված ձեռքերով երկու կին"</string>
+ <string name="spoken_emoji_1F46E" msgid="5897625605860822401">"Ոստիկան"</string>
+ <string name="spoken_emoji_1F46F" msgid="7716871657717641490">"Նապաստակի ականջներով կին"</string>
+ <string name="spoken_emoji_1F470" msgid="6409995400510338892">"Քողով հարսնացու"</string>
+ <string name="spoken_emoji_1F471" msgid="3058247860441670806">"Շիկահեր մարդ"</string>
+ <string name="spoken_emoji_1F472" msgid="3928854667819339142">"Չինական գլխարկով տղամարդ"</string>
+ <string name="spoken_emoji_1F473" msgid="5921952095808988381">"Գլխաշորով տղամարդ"</string>
+ <string name="spoken_emoji_1F474" msgid="1082237499496725183">"Ծեր տղամարդ"</string>
+ <string name="spoken_emoji_1F475" msgid="7280323988642212761">"Ծեր կին"</string>
+ <string name="spoken_emoji_1F476" msgid="4713322657821088296">"Մանուկ"</string>
+ <string name="spoken_emoji_1F477" msgid="2197036131029221370">"Շինարար"</string>
+ <string name="spoken_emoji_1F478" msgid="7245521193493488875">"Արքայադուստր"</string>
+ <string name="spoken_emoji_1F479" msgid="6876475321015553972">"Ճապոնական օգր"</string>
+ <string name="spoken_emoji_1F47A" msgid="3900813633102703571">"Ճապոնական գոբլին"</string>
+ <string name="spoken_emoji_1F47B" msgid="2608250873194079390">"Ուրվական"</string>
+ <string name="spoken_emoji_1F47C" msgid="3838699131276537421">"Մանուկ հրեշտակ"</string>
+ <string name="spoken_emoji_1F47D" msgid="2874077455888369538">"Այլմոլորակային"</string>
+ <string name="spoken_emoji_1F47E" msgid="3642607168625579507">"Այլմոլորակային հրեշ"</string>
+ <string name="spoken_emoji_1F47F" msgid="441605977269926252">"Սատանայի ճուտ"</string>
+ <string name="spoken_emoji_1F480" msgid="3696253485164878739">"Գանգ"</string>
+ <string name="spoken_emoji_1F481" msgid="320408708521966893">"Տեղեկատու անձ"</string>
+ <string name="spoken_emoji_1F482" msgid="3424354860245608949">"Պահնորդ"</string>
+ <string name="spoken_emoji_1F483" msgid="3221113594843849083">"Պարող"</string>
+ <string name="spoken_emoji_1F484" msgid="7348014979080444885">"Շրթներկ"</string>
+ <string name="spoken_emoji_1F485" msgid="6133507975565116339">"Եղունգաներկ"</string>
+ <string name="spoken_emoji_1F486" msgid="9085459968247394155">"Դեմքի մերսում"</string>
+ <string name="spoken_emoji_1F487" msgid="1479113637259592150">"Սանրվածք"</string>
+ <string name="spoken_emoji_1F488" msgid="6922559285234100252">"Վարսավիրի նշան"</string>
+ <string name="spoken_emoji_1F489" msgid="8114863680950147305">"Ներարկիչ"</string>
+ <string name="spoken_emoji_1F48A" msgid="8526843630145963032">"Հաբ"</string>
+ <string name="spoken_emoji_1F48B" msgid="2538528967897640292">"Համբույրի նշան"</string>
+ <string name="spoken_emoji_1F48C" msgid="1681173271652890232">"Սիրային նամակ"</string>
+ <string name="spoken_emoji_1F48D" msgid="8259886164999042373">"Մատանի"</string>
+ <string name="spoken_emoji_1F48E" msgid="8777981696011111101">"Թանկարժեք քար"</string>
+ <string name="spoken_emoji_1F48F" msgid="741593675183677907">"Համբույր"</string>
+ <string name="spoken_emoji_1F490" msgid="4482549128959806736">"Ծաղկեփունջ"</string>
+ <string name="spoken_emoji_1F491" msgid="2305245307882441500">"Զույգը սրտի մեջ"</string>
+ <string name="spoken_emoji_1F492" msgid="3884119934804475732">"Հարսանիք"</string>
+ <string name="spoken_emoji_1F493" msgid="1208828371565525121">"Բաբախող սիրտ"</string>
+ <string name="spoken_emoji_1F494" msgid="6198876398509338718">"Կոտրված սիրտ"</string>
+ <string name="spoken_emoji_1F495" msgid="9206202744967130919">"Երկու սրտեր"</string>
+ <string name="spoken_emoji_1F496" msgid="5436953041732207775">"Պսպղացող սիրտ"</string>
+ <string name="spoken_emoji_1F497" msgid="7285142863951448473">"Աճող սիրտ"</string>
+ <string name="spoken_emoji_1F498" msgid="7940131245037575715">"Խոցված սիրտ"</string>
+ <string name="spoken_emoji_1F499" msgid="4453235040265550009">"Կապույտ սիրտ"</string>
+ <string name="spoken_emoji_1F49A" msgid="6262178648366971405">"Կանաչ սիրտ"</string>
+ <string name="spoken_emoji_1F49B" msgid="8085384999750714368">"Դեղին սիրտ"</string>
+ <string name="spoken_emoji_1F49C" msgid="453829540120898698">"Մանուշակագույն սիրտ"</string>
+ <string name="spoken_emoji_1F49D" msgid="3460534750224161888">"Ժապավենով սիրտ"</string>
+ <string name="spoken_emoji_1F49E" msgid="4490636226072523867">"Միացող սրտեր"</string>
+ <string name="spoken_emoji_1F49F" msgid="2059319756421226336">"Սրտիկներով ձևավորում"</string>
+ <string name="spoken_emoji_1F4A0" msgid="1954850380550212038">"Շեղանկյուն` կետիկով"</string>
+ <string name="spoken_emoji_1F4A1" msgid="403137413540909021">"Էլեկտրական լամպ"</string>
+ <string name="spoken_emoji_1F4A2" msgid="2604192053295622063">"Ջղայնության նշան"</string>
+ <string name="spoken_emoji_1F4A3" msgid="6378351742957821735">"Ռումբ"</string>
+ <string name="spoken_emoji_1F4A4" msgid="7217736258870346625">"Քնի նշան"</string>
+ <string name="spoken_emoji_1F4A5" msgid="5401995723541239858">"Բախման նշան"</string>
+ <string name="spoken_emoji_1F4A6" msgid="3837802182716483848">"Հոսող քրտինքի նշան"</string>
+ <string name="spoken_emoji_1F4A7" msgid="5718438987757885141">"Կաթիլ"</string>
+ <string name="spoken_emoji_1F4A8" msgid="4472108229720006377">"Գծիկի նշան"</string>
+ <string name="spoken_emoji_1F4A9" msgid="1240958472788430032">"Կեղտի կույտ"</string>
+ <string name="spoken_emoji_1F4AA" msgid="8427525538635146416">"Լարված երկգլուխ մկան"</string>
+ <string name="spoken_emoji_1F4AB" msgid="5484114759939427459">"Գլխապտույտի նշան"</string>
+ <string name="spoken_emoji_1F4AC" msgid="5571196638219612682">"Խոսքի փուչիկ"</string>
+ <string name="spoken_emoji_1F4AD" msgid="353174619257798652">"Մտքի փուչիկ"</string>
+ <string name="spoken_emoji_1F4AE" msgid="1223142786927162641">"Սպիտակ ծաղիկ"</string>
+ <string name="spoken_emoji_1F4AF" msgid="3526278354452138397">"Հարյուր միավորի նշան"</string>
+ <string name="spoken_emoji_1F4B0" msgid="4124102195175124156">"Փողի քսակ"</string>
+ <string name="spoken_emoji_1F4B1" msgid="8339494003418572905">"Արտարժույթի փոխանակում"</string>
+ <string name="spoken_emoji_1F4B2" msgid="3179159430187243132">"Խոշոր դոլարի նշան"</string>
+ <string name="spoken_emoji_1F4B3" msgid="5375412518221759596">"Վարկային քարտ"</string>
+ <string name="spoken_emoji_1F4B4" msgid="1068592463669453204">"Իենի նշանով թղթադրամ"</string>
+ <string name="spoken_emoji_1F4B5" msgid="1426708699891832564">"Դոլարի նշանով թղթադրամ"</string>
+ <string name="spoken_emoji_1F4B6" msgid="8289249930736444837">"Եվրոյի նշանով թղթադրամ"</string>
+ <string name="spoken_emoji_1F4B7" msgid="5245100496860739429">"Ֆունտի նշանով թղթադրամ"</string>
+ <string name="spoken_emoji_1F4B8" msgid="4401099580477164440">"Թևավոր թղթադրամ"</string>
+ <string name="spoken_emoji_1F4B9" msgid="647509393536679903">"Աճման միտումով և իենի նշանով գրաֆիկ"</string>
+ <string name="spoken_emoji_1F4BA" msgid="1269737854891046321">"Նստատեղ"</string>
+ <string name="spoken_emoji_1F4BB" msgid="6252883563347816451">"Անհատական համակարգիչ"</string>
+ <string name="spoken_emoji_1F4BC" msgid="6182597732218446206">"Թղթապանակ"</string>
+ <string name="spoken_emoji_1F4BD" msgid="5820961044768829176">"Փոքր սկավառակ"</string>
+ <string name="spoken_emoji_1F4BE" msgid="4754542485835379808">"Ճկուն սկավառակ"</string>
+ <string name="spoken_emoji_1F4BF" msgid="2237481756984721795">"Օպտիկական սկավառակ"</string>
+ <string name="spoken_emoji_1F4C0" msgid="491582501089694461">"DVD"</string>
+ <string name="spoken_emoji_1F4C1" msgid="6645461382494158111">"Ֆայլերի թղթապանակ"</string>
+ <string name="spoken_emoji_1F4C2" msgid="8095638715523765338">"Ֆայլերի բաց թղթապանակ"</string>
+ <string name="spoken_emoji_1F4C3" msgid="3727274466173970142">"Ոլորված ծայրով էջ"</string>
+ <string name="spoken_emoji_1F4C4" msgid="4382570710795501612">"Թեքված էջ"</string>
+ <string name="spoken_emoji_1F4C5" msgid="8693944622627762487">"Օրացույց"</string>
+ <string name="spoken_emoji_1F4C6" msgid="8469908708708424640">"Պոկվող էջերով օրացույց"</string>
+ <string name="spoken_emoji_1F4C7" msgid="2665313547987324495">"Քարտային դասիչ"</string>
+ <string name="spoken_emoji_1F4C8" msgid="8007686702282833600">"Աճման միտումով գրաֆիկ"</string>
+ <string name="spoken_emoji_1F4C9" msgid="2271951411192893684">"Նվազման միտումով գրաֆիկ"</string>
+ <string name="spoken_emoji_1F4CA" msgid="3525692829622381444">"Ձողային գրաֆիկ"</string>
+ <string name="spoken_emoji_1F4CB" msgid="977639227554095521">"Սեղմատախտակ"</string>
+ <string name="spoken_emoji_1F4CC" msgid="156107396088741574">"Սևեռակ"</string>
+ <string name="spoken_emoji_1F4CD" msgid="4266572175361190231">"Կլոր սևեռակ"</string>
+ <string name="spoken_emoji_1F4CE" msgid="6294288509864968290">"Ամրակ"</string>
+ <string name="spoken_emoji_1F4CF" msgid="149679400831136810">"Ուղիղ քանոն"</string>
+ <string name="spoken_emoji_1F4D0" msgid="8130339336619202915">"Եռանկյուն քանոն"</string>
+ <string name="spoken_emoji_1F4D1" msgid="5852176364856284968">"Էջանիշ"</string>
+ <string name="spoken_emoji_1F4D2" msgid="2276810154105920052">"Մատյան"</string>
+ <string name="spoken_emoji_1F4D3" msgid="5873386492793610808">"Նոթատետր"</string>
+ <string name="spoken_emoji_1F4D4" msgid="4754469936418776360">"Ձևավոր կազմով նոթատետր"</string>
+ <string name="spoken_emoji_1F4D5" msgid="4642713351802778905">"Փակ գիրք"</string>
+ <string name="spoken_emoji_1F4D6" msgid="6987347918381807186">"Բաց գիրք"</string>
+ <string name="spoken_emoji_1F4D7" msgid="7813394163241379223">"Կանաչ գիրք"</string>
+ <string name="spoken_emoji_1F4D8" msgid="7189799718984979521">"Կապույտ գիրք"</string>
+ <string name="spoken_emoji_1F4D9" msgid="3874664073186440225">"Նարնջագույն գիրք"</string>
+ <string name="spoken_emoji_1F4DA" msgid="872212072924287762">"Գրքեր"</string>
+ <string name="spoken_emoji_1F4DB" msgid="2015183603583392969">"Անվանաքարտ"</string>
+ <string name="spoken_emoji_1F4DC" msgid="5075845110932456783">"Գալար"</string>
+ <string name="spoken_emoji_1F4DD" msgid="2494006707147586786">"Հիշեցում"</string>
+ <string name="spoken_emoji_1F4DE" msgid="7883008605002117671">"Լսափող"</string>
+ <string name="spoken_emoji_1F4DF" msgid="3538610110623780465">"Փեյջեր"</string>
+ <string name="spoken_emoji_1F4E0" msgid="2960778342609543077">"Հեռապատճենի սարք"</string>
+ <string name="spoken_emoji_1F4E1" msgid="6269733703719242108">"Արբանյակային ալեհավաք"</string>
+ <string name="spoken_emoji_1F4E2" msgid="1987535386302883116">"Հրապարակային բարձրախոս"</string>
+ <string name="spoken_emoji_1F4E3" msgid="5588916572878599224">"Ուրախ բարձրախոս"</string>
+ <string name="spoken_emoji_1F4E4" msgid="2063561529097749707">"Ելքային արկղ"</string>
+ <string name="spoken_emoji_1F4E5" msgid="3232462702926143576">"Մուտքային արկղ"</string>
+ <string name="spoken_emoji_1F4E6" msgid="3399454337197561635">"Փաթեթ"</string>
+ <string name="spoken_emoji_1F4E7" msgid="5557136988503873238">"Էլփոստի նշան"</string>
+ <string name="spoken_emoji_1F4E8" msgid="30698793974124123">"Մուտքային ծրար"</string>
+ <string name="spoken_emoji_1F4E9" msgid="5947550337678643166">"Վերևից դեպի վար սլաքով ծրար"</string>
+ <string name="spoken_emoji_1F4EA" msgid="772614045207213751">"Իջեցված դրոշով փակ փոստարկղ"</string>
+ <string name="spoken_emoji_1F4EB" msgid="6491414165464146137">"Բարձրացված դրոշով փակ փոստարկղ"</string>
+ <string name="spoken_emoji_1F4EC" msgid="7369517138779988438">"Բարձրացված դրոշով փակ փոստարկղ"</string>
+ <string name="spoken_emoji_1F4ED" msgid="5657520436285454241">"Իջեցված դրոշով բաց փոստարկղ"</string>
+ <string name="spoken_emoji_1F4EE" msgid="8464138906243608614">"Փոստարկղ"</string>
+ <string name="spoken_emoji_1F4EF" msgid="8801427577198798226">"Փոստային եղջյուր"</string>
+ <string name="spoken_emoji_1F4F0" msgid="6330208624731662525">"Թերթ"</string>
+ <string name="spoken_emoji_1F4F1" msgid="3966503935581675695">"Բջջային հեռախոս"</string>
+ <string name="spoken_emoji_1F4F2" msgid="1057540341746100087">"Բջջային հեռախոս՝ ձախ կողմում դեպի վեր սլաքով"</string>
+ <string name="spoken_emoji_1F4F3" msgid="5003984447315754658">"Թրթռոցի ռեժիմ"</string>
+ <string name="spoken_emoji_1F4F4" msgid="5549847566968306253">"Բջջային հեռախոսը` անջատած"</string>
+ <string name="spoken_emoji_1F4F5" msgid="3660199448671699238">"Բջջային հեռախոսներ չկան"</string>
+ <string name="spoken_emoji_1F4F6" msgid="2676974903233268860">"Ձողերով ալեհավաք"</string>
+ <string name="spoken_emoji_1F4F7" msgid="2643891943105989039">"Ֆոտոխցիկ"</string>
+ <string name="spoken_emoji_1F4F9" msgid="4475626303058218048">"Տեսախցիկ"</string>
+ <string name="spoken_emoji_1F4FA" msgid="1079796186652960775">"Հեռուստատեսություն"</string>
+ <string name="spoken_emoji_1F4FB" msgid="3848729587403760645">"Ռադիո"</string>
+ <string name="spoken_emoji_1F4FC" msgid="8370432508874310054">"Տեսաժապավեն"</string>
+ <string name="spoken_emoji_1F500" msgid="2389947994502144547">"Պտտված դեպի աջ սլաքներ"</string>
+ <string name="spoken_emoji_1F501" msgid="2132188352433347009">"Ժամացույցի սլաքի ուղղությամբ դեպի աջ և ձախ բաց շրջանաձև սլաքներ"</string>
+ <string name="spoken_emoji_1F502" msgid="2361976580513178391">"Ժամացույցի սլաքի ուղղությամբ դեպի աջ և ձախ բաց շրջանաձև սլաքներ՝ շրջանաձև մեկ վերադրումով"</string>
+ <string name="spoken_emoji_1F503" msgid="8936283551917858793">"Ժամացույցի սլաքի ուղղությամբ դեպի վար և վեր բաց շրջանաձև սլաքներ"</string>
+ <string name="spoken_emoji_1F504" msgid="708290317843535943">"Ժամացույցի սլաքի հակառակ ուղղությամբ դեպի վար և վեր բաց շրջանաձև սլաքներ"</string>
+ <string name="spoken_emoji_1F505" msgid="6348909939004951860">"Ցածր պայծառության նշան"</string>
+ <string name="spoken_emoji_1F506" msgid="4449609297521280173">"Բարձր պայծառության նշան"</string>
+ <string name="spoken_emoji_1F507" msgid="7136386694923708448">"Չեղարկման գծով բարձրախոս"</string>
+ <string name="spoken_emoji_1F508" msgid="5063567689831527865">"Բարձրախոս"</string>
+ <string name="spoken_emoji_1F509" msgid="3948050077992370791">"Մեկ ձայնային ալիքով բարձրախոս"</string>
+ <string name="spoken_emoji_1F50A" msgid="5818194948677277197">"Երեք ձայնային ալիքով բարձրախոս"</string>
+ <string name="spoken_emoji_1F50B" msgid="8083470451266295876">"Մարտկոց"</string>
+ <string name="spoken_emoji_1F50C" msgid="7793219132036431680">"Էլեկտրական խրոցակ"</string>
+ <string name="spoken_emoji_1F50D" msgid="8140244710637926780">"Ձախ թեքված խոշորացույց"</string>
+ <string name="spoken_emoji_1F50E" msgid="4751821352839693365">"Աջ թեքված խոշորացույց"</string>
+ <string name="spoken_emoji_1F50F" msgid="915079280472199605">"Կողպեք և թանաքի գրիչ"</string>
+ <string name="spoken_emoji_1F510" msgid="7658381761691758318">"Փակված կողպեք՝ բանալիով"</string>
+ <string name="spoken_emoji_1F511" msgid="262319867774655688">"Բանալի"</string>
+ <string name="spoken_emoji_1F512" msgid="5628688337255115175">"Կողպեք"</string>
+ <string name="spoken_emoji_1F513" msgid="8579201846619420981">"Բաց կողպեք"</string>
+ <string name="spoken_emoji_1F514" msgid="7027268683047322521">"Զանգ"</string>
+ <string name="spoken_emoji_1F515" msgid="8903179856036069242">"Չեղարկման գծով զանգ"</string>
+ <string name="spoken_emoji_1F516" msgid="108097933937925381">"Էջանիշ"</string>
+ <string name="spoken_emoji_1F517" msgid="2450846665734313397">"Հղման նշան"</string>
+ <string name="spoken_emoji_1F518" msgid="7028220286841437832">"Կետակոճակ"</string>
+ <string name="spoken_emoji_1F519" msgid="8211189165075445687">"Հետ՝ վերևում դեպի ձախ սլաքով"</string>
+ <string name="spoken_emoji_1F51A" msgid="823966751787338892">"Վերջ՝ վերևում դեպի ձախ սլաքով"</string>
+ <string name="spoken_emoji_1F51B" msgid="5920570742107943382">"Միացված է՝ բացականչական նշանով և վերևում դեպի աջ ու ձախ սլաքով"</string>
+ <string name="spoken_emoji_1F51C" msgid="110609810659826676">"Շուտով՝ վերևում դեպի աջ սլաքով"</string>
+ <string name="spoken_emoji_1F51D" msgid="4087697222026095447">"Վերև՝ վերևում դեպի վեր սլաքով"</string>
+ <string name="spoken_emoji_1F51E" msgid="8512873526157201775">"Տասնութից ցածրի արգելման նշան"</string>
+ <string name="spoken_emoji_1F51F" msgid="8673370823728653973">"Ստեղնատասնյակ"</string>
+ <string name="spoken_emoji_1F520" msgid="7335109890337048900">"Լատիներեն մեծատառերով մուտքագրման նշան"</string>
+ <string name="spoken_emoji_1F521" msgid="2693185864450925778">"Լատիներեն փոքրատառերով մուտքագրման նշան"</string>
+ <string name="spoken_emoji_1F522" msgid="8419130286280673347">"Թվային մուտքագրման նշան"</string>
+ <string name="spoken_emoji_1F523" msgid="3318053476401719421">"Նշանների ներածման նշան"</string>
+ <string name="spoken_emoji_1F524" msgid="1625073997522316331">"Լատինատառ մուտքագրման նշան"</string>
+ <string name="spoken_emoji_1F525" msgid="4083884189172963790">"Կրակ"</string>
+ <string name="spoken_emoji_1F526" msgid="2035494936742643580">"Էլեկտրական լապտեր"</string>
+ <string name="spoken_emoji_1F527" msgid="134257142354034271">"Ոլորակ"</string>
+ <string name="spoken_emoji_1F528" msgid="700627429570609375">"Մուրճ"</string>
+ <string name="spoken_emoji_1F529" msgid="7480548235904988573">"Մանեկ ու պտուտակ"</string>
+ <string name="spoken_emoji_1F52A" msgid="7613580031502317893">"Ճապոնական դանակ"</string>
+ <string name="spoken_emoji_1F52B" msgid="4554906608328118613">"Ատրճանակ"</string>
+ <string name="spoken_emoji_1F52C" msgid="1330294501371770790">"Մանրադիտակ"</string>
+ <string name="spoken_emoji_1F52D" msgid="7549551775445177140">"Հեռադիտակ"</string>
+ <string name="spoken_emoji_1F52E" msgid="4457099417872625141">"Ապակե գնդակ"</string>
+ <string name="spoken_emoji_1F52F" msgid="8899031001317442792">"Միջակետով վեցանկյուն աստղ"</string>
+ <string name="spoken_emoji_1F530" msgid="3572898444281774023">"Ճապոնական սկսնակի նշան"</string>
+ <string name="spoken_emoji_1F531" msgid="5225633376450025396">"Եռաժանու նշան"</string>
+ <string name="spoken_emoji_1F532" msgid="9169568490485180779">"Սև քառակուսի կոճակ"</string>
+ <string name="spoken_emoji_1F533" msgid="6554193837201918598">"Սպիտակ քառակուսի կոճակ"</string>
+ <string name="spoken_emoji_1F534" msgid="8339298801331865340">"Մեծ կարմիր շրջան"</string>
+ <string name="spoken_emoji_1F535" msgid="1227403104835533512">"Մեծ կապույտ շրջան"</string>
+ <string name="spoken_emoji_1F536" msgid="5477372445510469331">"Մեծ նարնջագույն շեղանկյուն"</string>
+ <string name="spoken_emoji_1F537" msgid="3158915214347274626">"Մեծ կապույտ շեղանկյուն"</string>
+ <string name="spoken_emoji_1F538" msgid="4300084249474451991">"Փոքր նարնջագույն շեղանկյուն"</string>
+ <string name="spoken_emoji_1F539" msgid="6535159756325742275">"Փոքր կապույտ շեղանկյուն"</string>
+ <string name="spoken_emoji_1F53A" msgid="3728196273988781389">"Վեր ուղղված կարմիր եռանկյուն"</string>
+ <string name="spoken_emoji_1F53B" msgid="7182097039614128707">"Վար ուղղված կարմիր եռանկյուն"</string>
+ <string name="spoken_emoji_1F53C" msgid="4077022046319615029">"Վեր ուղղված փոքր կարմիր եռանկյուն"</string>
+ <string name="spoken_emoji_1F53D" msgid="3939112784894620713">"Վար ուղղված փոքր կարմիր եռանկյուն"</string>
+ <string name="spoken_emoji_1F550" msgid="7761392621689986218">"Թվատախտակ՝ ժամը մեկով"</string>
+ <string name="spoken_emoji_1F551" msgid="2699448504113431716">"Թվատախտակ՝ ժամը երկուսով"</string>
+ <string name="spoken_emoji_1F552" msgid="5872107867411853750">"Թվատախտակ՝ ժամը երեքով"</string>
+ <string name="spoken_emoji_1F553" msgid="8490966286158640743">"Թվատախտակ՝ ժամը չորսով"</string>
+ <string name="spoken_emoji_1F554" msgid="7662585417832909280">"Թվատախտակ՝ ժամը հինգով"</string>
+ <string name="spoken_emoji_1F555" msgid="5564698204520412009">"Թվատախտակ՝ ժամը վեցով"</string>
+ <string name="spoken_emoji_1F556" msgid="7325712194836512205">"Թվատախտակ՝ ժամը յոթով"</string>
+ <string name="spoken_emoji_1F557" msgid="4398343183682848693">"Թվատախտակ՝ ժամը ութով"</string>
+ <string name="spoken_emoji_1F558" msgid="3110507820404018172">"Թվատախտակ՝ ժամը ինով"</string>
+ <string name="spoken_emoji_1F559" msgid="2972160366448337839">"Թվատախտակ՝ ժամը տասով"</string>
+ <string name="spoken_emoji_1F55A" msgid="5568112876681714834">"Թվատախտակ՝ ժամը տասնմեկով"</string>
+ <string name="spoken_emoji_1F55B" msgid="6731739890330659276">"Թվատախտակ՝ ժամը տասներկուսով"</string>
+ <string name="spoken_emoji_1F55C" msgid="7838853679879115890">"Թվատախտակ՝ ժամը մեկն անց երեսուն"</string>
+ <string name="spoken_emoji_1F55D" msgid="3518832144255922544">"Թվատախտակ՝ ժամը երկուսն անց երեսուն"</string>
+ <string name="spoken_emoji_1F55E" msgid="3092760695634993002">"Թվատախտակ՝ ժամը երեքն անց երեսուն"</string>
+ <string name="spoken_emoji_1F55F" msgid="2326720311892906763">"Թվատախտակ՝ ժամը չորսն անց երեսուն"</string>
+ <string name="spoken_emoji_1F560" msgid="5771339179963924448">"Թվատախտակ՝ ժամը հինգն անց երեսուն"</string>
+ <string name="spoken_emoji_1F561" msgid="3139944777062475382">"Թվատախտակ՝ ժամը վեցն անց երեսուն"</string>
+ <string name="spoken_emoji_1F562" msgid="8273944611162457084">"Թվատախտակ՝ ժամը յոթն անց երեսուն"</string>
+ <string name="spoken_emoji_1F563" msgid="8643976903718136299">"Թվատախտակ՝ ժամը ութն անց երեսուն"</string>
+ <string name="spoken_emoji_1F564" msgid="3511070239796141638">"Թվատախտակ՝ ժամը ինն անց երեսուն"</string>
+ <string name="spoken_emoji_1F565" msgid="4567451985272963088">"Թվատախտակ՝ ժամը տասն անց երեսուն"</string>
+ <string name="spoken_emoji_1F566" msgid="2790552288169929810">"Թվատախտակ՝ ժամը տասնմեկն անց երեսուն"</string>
+ <string name="spoken_emoji_1F567" msgid="9026037362100689337">"Թվատախտակ՝ ժամը տասներկուսն անց երեսուն"</string>
+ <string name="spoken_emoji_1F5FB" msgid="9037503671676124015">"Ֆուձի լեռ"</string>
+ <string name="spoken_emoji_1F5FC" msgid="1409415995817242150">"Տոկիոյի աշտարակ"</string>
+ <string name="spoken_emoji_1F5FD" msgid="2562726956654429582">"Ազատության արձան"</string>
+ <string name="spoken_emoji_1F5FE" msgid="1184469756905210580">"Ճապոնիայի ուրվագիծ"</string>
+ <string name="spoken_emoji_1F5FF" msgid="6003594799354942297">"Մայաների քարե արձան"</string>
+ <string name="spoken_emoji_1F600" msgid="7601109464776835283">"Քմծիծաղով դեմք"</string>
+ <string name="spoken_emoji_1F601" msgid="746026523967444503">"Քմծիծաղով դեմք՝ ժպտացող աչքերով"</string>
+ <string name="spoken_emoji_1F602" msgid="8354558091785198246">"Ուրախության արցունքներով դեմք"</string>
+ <string name="spoken_emoji_1F603" msgid="3861022912544159823">"Ժպտացող դեմք՝ բաց բերանով"</string>
+ <string name="spoken_emoji_1F604" msgid="5119021072966343531">"Ժպտացող դեմք՝ բաց բերանով և ժպտացող աչքերով"</string>
+ <string name="spoken_emoji_1F605" msgid="6140813923973561735">"Ժպտացող դեմք՝ բաց բերանով և սառը քրտինքով"</string>
+ <string name="spoken_emoji_1F606" msgid="3549936813966832799">"Ժպտացող դեմք՝ բաց բերանով և պինդ փակված աչքերով"</string>
+ <string name="spoken_emoji_1F607" msgid="2826424078212384817">"Ժպտացող դեմք` լուսապսակով"</string>
+ <string name="spoken_emoji_1F608" msgid="7343559595089811640">"Ժպյտացող դեմք` պոզերով"</string>
+ <string name="spoken_emoji_1F609" msgid="5481030187207504405">"Աչքով անող դեմք"</string>
+ <string name="spoken_emoji_1F60A" msgid="5023337769148679767">"Ժպտացող դեմք` ժպտացող աչքերով"</string>
+ <string name="spoken_emoji_1F60B" msgid="3005248217216195694">"Համեղ ուտեստներ վայելող դեմք"</string>
+ <string name="spoken_emoji_1F60C" msgid="349384012958268496">"Հանգստացած դեմք"</string>
+ <string name="spoken_emoji_1F60D" msgid="7921853137164938391">"Ժպտացող դեմք` սրտաձև աչքերով"</string>
+ <string name="spoken_emoji_1F60E" msgid="441718886380605643">"Ժպտացող դեմք` արևային ակնոցով"</string>
+ <string name="spoken_emoji_1F60F" msgid="2674453144890180538">"Հեգնական ժպիտով դեմք"</string>
+ <string name="spoken_emoji_1F610" msgid="3225675825334102369">"Չեզոք դեմք"</string>
+ <string name="spoken_emoji_1F611" msgid="7199179827619679668">"Արտահայտությունից զուրկ դեմք"</string>
+ <string name="spoken_emoji_1F612" msgid="985081329745137998">"Չհետաքրքրված դեմք"</string>
+ <string name="spoken_emoji_1F613" msgid="5548607684830303562">"Սառը քրտինքով դեմք"</string>
+ <string name="spoken_emoji_1F614" msgid="3196305665259916390">"Մտախոհ դեմք"</string>
+ <string name="spoken_emoji_1F615" msgid="3051674239303969101">"Շփոթված դեմք"</string>
+ <string name="spoken_emoji_1F616" msgid="8124887056243813089">"Մոլորված դեմք"</string>
+ <string name="spoken_emoji_1F617" msgid="7052733625511122870">"Համբուրող դեմք"</string>
+ <string name="spoken_emoji_1F618" msgid="408207170572303753">"Օդային համբույր ուղարկող դեմք"</string>
+ <string name="spoken_emoji_1F619" msgid="8645430335143153645">"Համբուրող դեմք` ժպտացող աչքերով"</string>
+ <string name="spoken_emoji_1F61A" msgid="2882157190974340247">"Համբուրող դեմք` փակ աչքերով"</string>
+ <string name="spoken_emoji_1F61B" msgid="3765927202787211499">"Լեզուն հանած դեմք"</string>
+ <string name="spoken_emoji_1F61C" msgid="198943912107589389">"Լեզուն հանած և աչքով անող դեմք"</string>
+ <string name="spoken_emoji_1F61D" msgid="7643546385877816182">"Լեզուն հանած և աչքերը փակած դեմք"</string>
+ <string name="spoken_emoji_1F61E" msgid="1528732952202098364">"Հիասթափված դեմք"</string>
+ <string name="spoken_emoji_1F61F" msgid="1853664164636082404">"Մտահոգ դեմք"</string>
+ <string name="spoken_emoji_1F620" msgid="6051942001307375830">"Ջղային դեմք"</string>
+ <string name="spoken_emoji_1F621" msgid="2114711878097257704">"Շրթունքներն ուռած դեմք"</string>
+ <string name="spoken_emoji_1F622" msgid="29291014645931822">"Լացող դեմք"</string>
+ <string name="spoken_emoji_1F623" msgid="7803959833595184773">"Կամակոր դեմք"</string>
+ <string name="spoken_emoji_1F624" msgid="8637637647725752799">"Հաղթական արտահայտությամբ դեմք"</string>
+ <string name="spoken_emoji_1F625" msgid="6153625183493635030">"Հիասթափված, բայց հանգստացած դեմք"</string>
+ <string name="spoken_emoji_1F626" msgid="6179485689935562950">"Բաց բերանով խոժոռ դեմք"</string>
+ <string name="spoken_emoji_1F627" msgid="8566204052903012809">"Տանջված դեմք"</string>
+ <string name="spoken_emoji_1F628" msgid="8875777401624904224">"Վախեցած դեմք"</string>
+ <string name="spoken_emoji_1F629" msgid="1411538490319190118">"Հոգնած դեմք"</string>
+ <string name="spoken_emoji_1F62A" msgid="4726686726690289969">"Քնաթաթախ դեմք"</string>
+ <string name="spoken_emoji_1F62B" msgid="3221980473921623613">"Հոգնած դեմք"</string>
+ <string name="spoken_emoji_1F62C" msgid="4616356691941225182">"Ծամածռված դեմք"</string>
+ <string name="spoken_emoji_1F62D" msgid="4283677508698812232">"Բարձրաձայն լացող դեմք"</string>
+ <string name="spoken_emoji_1F62E" msgid="726083405284353894">"Բաց բերանով դեմք"</string>
+ <string name="spoken_emoji_1F62F" msgid="7746620088234710962">"Լռող դեմք"</string>
+ <string name="spoken_emoji_1F630" msgid="3298804852155581163">"Բաց բերանով և սառը քրտինքով դեմք"</string>
+ <string name="spoken_emoji_1F631" msgid="1603391150954646779">"Վախից ճչացող դեմք"</string>
+ <string name="spoken_emoji_1F632" msgid="4846193232203976013">"Ապշած դեմք"</string>
+ <string name="spoken_emoji_1F633" msgid="4023593836629700443">"Շիկնած դեմք"</string>
+ <string name="spoken_emoji_1F634" msgid="3155265083246248129">"Քնած դեմք"</string>
+ <string name="spoken_emoji_1F635" msgid="4616691133452764482">"Գլխապտույտով դեմք"</string>
+ <string name="spoken_emoji_1F636" msgid="947000211822375683">"Առանց բերանի դեմք"</string>
+ <string name="spoken_emoji_1F637" msgid="1269551267347165774">"Բժշկական դիմակով դեմք"</string>
+ <string name="spoken_emoji_1F638" msgid="3410766467496872301">"Քմծիծաղող կատվի դեմք՝ ժպտացող աչքերով"</string>
+ <string name="spoken_emoji_1F639" msgid="1833417519781022031">"Կատվի դեմք՝ երջանկության արցունքներով"</string>
+ <string name="spoken_emoji_1F63A" msgid="8566294484007152613">"Ժպտացող կատվի դեմք՝ բաց բերանով"</string>
+ <string name="spoken_emoji_1F63B" msgid="74417995938927571">"Ժպտացող կատվի դեմք՝ սրտաձև աչքերով"</string>
+ <string name="spoken_emoji_1F63C" msgid="6472812005729468870">"Կատվի դեմք՝ ծուռ ժպիտով"</string>
+ <string name="spoken_emoji_1F63D" msgid="1638398369553349509">"Համբուրող կատվի դեմք՝ փակ աչքերով"</string>
+ <string name="spoken_emoji_1F63E" msgid="6788969063020278986">"Շրթունքներն ուռած կատվի դեմք"</string>
+ <string name="spoken_emoji_1F63F" msgid="1207234562459550185">"Լացող կատվի դեմք"</string>
+ <string name="spoken_emoji_1F640" msgid="6023054549904329638">"Հոգնած կատվի դեմք"</string>
+ <string name="spoken_emoji_1F645" msgid="5202090629227587076">"«Ոչ լավ» արտահայտությամբ դեմք"</string>
+ <string name="spoken_emoji_1F646" msgid="6734425134415138134">"«Լավ» արտահայտությամբ դեմք"</string>
+ <string name="spoken_emoji_1F647" msgid="1090285518444205483">"Կռացած դեմք"</string>
+ <string name="spoken_emoji_1F648" msgid="8978535230610522356">"Աչքերը ձեռքերով փակած կապիկ"</string>
+ <string name="spoken_emoji_1F649" msgid="8486145279809495102">"Ականջները ձեռքերով փակած կապիկ"</string>
+ <string name="spoken_emoji_1F64A" msgid="1237524974033228660">"Բերանը ձեռքերով փակած կապիկ"</string>
+ <string name="spoken_emoji_1F64B" msgid="4251150782016370475">"Երջանիկ մարդ` բարձրացրած ձեռքով"</string>
+ <string name="spoken_emoji_1F64C" msgid="5446231430684558344">"Երկու ձեռքը ողջույնի համար բարձրացրած մարդ"</string>
+ <string name="spoken_emoji_1F64D" msgid="4646485595309482342">"Դժգոհ մարդ"</string>
+ <string name="spoken_emoji_1F64E" msgid="3376579939836656097">"Շրթունքներն ուռեցրած դեմքով մարդ"</string>
+ <string name="spoken_emoji_1F64F" msgid="1044439574356230711">"Ծալված ձեռքերով մարդ"</string>
+ <string name="spoken_emoji_1F680" msgid="513263736012689059">"Հրթիռ"</string>
+ <string name="spoken_emoji_1F681" msgid="9201341783850525339">"Ուղղաթիռ"</string>
+ <string name="spoken_emoji_1F682" msgid="8046933583867498698">"Շոգեքարշ"</string>
+ <string name="spoken_emoji_1F683" msgid="8772750354339223092">"Վագոն"</string>
+ <string name="spoken_emoji_1F684" msgid="346396777356203608">"Ճեպընթաց գնացք"</string>
+ <string name="spoken_emoji_1F685" msgid="1237059817190832730">"Ճեպընթաց գնացք` փամփուշտաձև քթով"</string>
+ <string name="spoken_emoji_1F686" msgid="3525197227223620343">"Գնացք"</string>
+ <string name="spoken_emoji_1F687" msgid="5110143437960392837">"Մետրո"</string>
+ <string name="spoken_emoji_1F688" msgid="4702085029871797965">"Մոնոռելս"</string>
+ <string name="spoken_emoji_1F689" msgid="2375851019798817094">"Կայան"</string>
+ <string name="spoken_emoji_1F68A" msgid="6368370859718717198">"Տրամվայ"</string>
+ <string name="spoken_emoji_1F68B" msgid="2920160427117436633">"Տրամվայ"</string>
+ <string name="spoken_emoji_1F68C" msgid="1061520934758810864">"Ավտոբուս"</string>
+ <string name="spoken_emoji_1F68D" msgid="2890059031360969304">"Հանդիպակաց ավտոբուս"</string>
+ <string name="spoken_emoji_1F68E" msgid="6234042976027309654">"Տրոլեյբուս"</string>
+ <string name="spoken_emoji_1F68F" msgid="5871099334672012107">"Ավտոբուսի կանգառ"</string>
+ <string name="spoken_emoji_1F690" msgid="8080964620200195262">"Միկրոավտոբուս"</string>
+ <string name="spoken_emoji_1F691" msgid="999173032408730501">"Շտապ օգնություն"</string>
+ <string name="spoken_emoji_1F692" msgid="1712863785341849487">"Հրշեջ մեքենա"</string>
+ <string name="spoken_emoji_1F693" msgid="7987109037389768934">"Ոստիկանական մեքենա"</string>
+ <string name="spoken_emoji_1F694" msgid="6061658916653884608">"Հանդիպակաց եկող ոստիկանական մեքենա"</string>
+ <string name="spoken_emoji_1F695" msgid="6913445460364247283">"Տաքսի"</string>
+ <string name="spoken_emoji_1F696" msgid="6391604457418285404">"Հանդիպակաց եկող տաքսի"</string>
+ <string name="spoken_emoji_1F697" msgid="7978399334396733790">"Ավտոմեքենա"</string>
+ <string name="spoken_emoji_1F698" msgid="7006050861129732018">"Հանդիպակաց եկող ավտոմեքենա"</string>
+ <string name="spoken_emoji_1F699" msgid="630317052666590607">"Ավտոտնակ"</string>
+ <string name="spoken_emoji_1F69A" msgid="4739797891735823577">"Առաքման մեքենա"</string>
+ <string name="spoken_emoji_1F69B" msgid="4715997280786620649">"Ինքնագնաց"</string>
+ <string name="spoken_emoji_1F69C" msgid="5557395610750818161">"Տրակտոր"</string>
+ <string name="spoken_emoji_1F69D" msgid="5467164189942951047">"Մոնոռելս"</string>
+ <string name="spoken_emoji_1F69E" msgid="169238196389832234">"Լեռնային երկաթուղի"</string>
+ <string name="spoken_emoji_1F69F" msgid="7508128757012845102">"Երկաթուղային կախոց"</string>
+ <string name="spoken_emoji_1F6A0" msgid="8733056213790160147">"Լեռնային ճոպանուղի"</string>
+ <string name="spoken_emoji_1F6A1" msgid="4666516337749347253">"Ճոպանուղի"</string>
+ <string name="spoken_emoji_1F6A2" msgid="4511220588943129583">"Նավ"</string>
+ <string name="spoken_emoji_1F6A3" msgid="8412962252222205387">"Լաստանավ"</string>
+ <string name="spoken_emoji_1F6A4" msgid="8867571300266339211">"Մոտորանավ"</string>
+ <string name="spoken_emoji_1F6A5" msgid="7650260812741963884">"Հորիզոնական լուսացույց"</string>
+ <string name="spoken_emoji_1F6A6" msgid="485575967773793454">"Ուղղահայաց լուսացույց"</string>
+ <string name="spoken_emoji_1F6A7" msgid="6411048933816976794">"Շինարարության նշան"</string>
+ <string name="spoken_emoji_1F6A8" msgid="6345717218374788364">"Ոստիկականան մեքենայի ազդանշանային լույսեր"</string>
+ <string name="spoken_emoji_1F6A9" msgid="6586380356807600412">"Եռանկյուն դրոշ"</string>
+ <string name="spoken_emoji_1F6AA" msgid="8954448167261738885">"Դուռ"</string>
+ <string name="spoken_emoji_1F6AB" msgid="5313946262888343544">"Չմտնելու նշան"</string>
+ <string name="spoken_emoji_1F6AC" msgid="6946858177965948288">"Ծխելու նշան"</string>
+ <string name="spoken_emoji_1F6AD" msgid="6320088669185507241">"Չծխելու նշան"</string>
+ <string name="spoken_emoji_1F6AE" msgid="1062469925352817189">"Աղբը իր տեղում թափելու նշան"</string>
+ <string name="spoken_emoji_1F6AF" msgid="2286668056123642208">"Աղբ չթափելու նշան"</string>
+ <string name="spoken_emoji_1F6B0" msgid="179424763882990952">"Խմելու ջրի նշան"</string>
+ <string name="spoken_emoji_1F6B1" msgid="5585212805429161877">"Ոչ խմելու ջրի նշան"</string>
+ <string name="spoken_emoji_1F6B2" msgid="1771885082068421875">"Հեծանիվ"</string>
+ <string name="spoken_emoji_1F6B3" msgid="8033779581263314408">"Հեծանիվների արգելք"</string>
+ <string name="spoken_emoji_1F6B4" msgid="1999538449018476947">"Հեծանվորդ"</string>
+ <string name="spoken_emoji_1F6B5" msgid="340846352660993117">"Լեռնային հեծանվորդ"</string>
+ <string name="spoken_emoji_1F6B6" msgid="4351024386495098336">"Հետիոտն"</string>
+ <string name="spoken_emoji_1F6B7" msgid="4564800655866838802">"Հետիոտների արգելք"</string>
+ <string name="spoken_emoji_1F6B8" msgid="3020531906940267349">"Հատող երեխաներ"</string>
+ <string name="spoken_emoji_1F6B9" msgid="1207095844125041251">"Տղամարդկանց նշան"</string>
+ <string name="spoken_emoji_1F6BA" msgid="2346879310071017531">"Կանանց նշան"</string>
+ <string name="spoken_emoji_1F6BB" msgid="2370172469642078526">"Զուգարան"</string>
+ <string name="spoken_emoji_1F6BC" msgid="5558827593563530851">"Մանուկի նշան"</string>
+ <string name="spoken_emoji_1F6BD" msgid="9213590243049835957">"Զուգարան"</string>
+ <string name="spoken_emoji_1F6BE" msgid="394016533781742491">"Արտաքնոց"</string>
+ <string name="spoken_emoji_1F6BF" msgid="906336365928291207">"Ցնցուղ"</string>
+ <string name="spoken_emoji_1F6C0" msgid="4592099854378821599">"Բաղնիք"</string>
+ <string name="spoken_emoji_1F6C1" msgid="2845056048320031158">"Լոգարան"</string>
+ <string name="spoken_emoji_1F6C2" msgid="8117262514698011877">"Անձնագրերի ստուգում"</string>
+ <string name="spoken_emoji_1F6C3" msgid="1176342001834630675">"Մաքսատուն"</string>
+ <string name="spoken_emoji_1F6C4" msgid="1477622834179978886">"Ուղեբեռի ստացում"</string>
+ <string name="spoken_emoji_1F6C5" msgid="2495834050856617451">"Ձախ ուղեբեռ"</string>
+</resources>
diff --git a/java/res/values-hy-rAM/strings-talkback-descriptions.xml b/java/res/values-hy-rAM/strings-talkback-descriptions.xml
index 149e91a53..7df498ee7 100644
--- a/java/res/values-hy-rAM/strings-talkback-descriptions.xml
+++ b/java/res/values-hy-rAM/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Վայրեր"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Նշաններ"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Զմայլիկներ"</string>
+ <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+ <skip />
+ <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+ <skip />
</resources>
diff --git a/java/res/values-hy-rAM/strings.xml b/java/res/values-hy-rAM/strings.xml
index 03d56a626..a43e67916 100644
--- a/java/res/values-hy-rAM/strings.xml
+++ b/java/res/values-hy-rAM/strings.xml
@@ -21,7 +21,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_input_options" msgid="3909945612939668554">"Ներածման ընտրանքներ"</string>
- <string name="english_ime_research_log" msgid="8492602295696577851">"Հետազոտական գրառումների հրամաններ"</string>
<string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Փնտրել կոնտակտային անուններ"</string>
<string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Տառասխալների ուղղիչն օգտագործում է ձեր կոնտակտների ցանկի տվյալները"</string>
<string name="vibrate_on_keypress" msgid="5258079494276955460">"Թրթռալ սեղմման ժամանակ"</string>
@@ -84,8 +83,6 @@
<string name="select_language" msgid="3693815588777926848">"Մուտքագրման լեզուներ"</string>
<string name="hint_add_to_dictionary" msgid="573678656946085380">"Պահպանելու համար կրկին հպեք"</string>
<string name="has_dictionary" msgid="6071847973466625007">"Բառարանն առկա է"</string>
- <string name="prefs_enable_log" msgid="6620424505072963557">"Միացնել օգտվողի արձագանքը"</string>
- <string name="prefs_description_log" msgid="7525225584555429211">"Օգնել բարելավել այս մուտքագրման եղանակի խմբագրիչը՝ ինքնուրույն ուղարկելով Google-ին օգտագործման վիճակագրությունն ու վթարների հաշվետվությունները:"</string>
<string name="keyboard_layout" msgid="8451164783510487501">"Ստեղնաշարի թեման"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"Անգլերեն (ՄԹ)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"Անգլերեն (ԱՄՆ)"</string>
@@ -118,7 +115,6 @@
<string name="enable" msgid="5031294444630523247">"Միացնել"</string>
<string name="not_now" msgid="6172462888202790482">"Ոչ հիմա"</string>
<string name="custom_input_style_already_exists" msgid="8008728952215449707">"Մուտքագրման այսպիսի ոճ արդեն գոյություն ունի՝ <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
- <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Հարմարավետության ուսումնասիրության ռեժիմ"</string>
<string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Ստեղնի երկար սեղմման ուշացում"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Սեղմման թրթռոցի տևողություն"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Սեղմման ձայնի բարձրությունը"</string>
diff --git a/java/res/values-in/strings-action-keys.xml b/java/res/values-in/strings-action-keys.xml
index 26f32254d..052798d02 100644
--- a/java/res/values-in/strings-action-keys.xml
+++ b/java/res/values-in/strings-action-keys.xml
@@ -25,6 +25,8 @@
<string name="label_previous_key" msgid="1421141755779895275">"Balik"</string>
<string name="label_done_key" msgid="7564866296502630852">"Beres"</string>
<string name="label_send_key" msgid="482252074224462163">"Kirim"</string>
+ <!-- no translation found for label_search_key (7965186050435796642) -->
+ <skip />
<string name="label_pause_key" msgid="2225922926459730642">"Jeda"</string>
<string name="label_wait_key" msgid="5891247853595466039">"Tunggu"</string>
</resources>
diff --git a/java/res/values-in/strings-talkback-descriptions.xml b/java/res/values-in/strings-talkback-descriptions.xml
index 8f51fb709..1f206ee85 100644
--- a/java/res/values-in/strings-talkback-descriptions.xml
+++ b/java/res/values-in/strings-talkback-descriptions.xml
@@ -27,14 +27,10 @@
<string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> melakukan koreksi otomatis"</string>
<string name="spoken_description_unknown" msgid="2382510329910793539">"Kode tombol %d"</string>
<string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string>
- <!-- no translation found for spoken_description_symbols_shift (3483198879916435717) -->
- <skip />
- <!-- no translation found for spoken_description_shift_shifted (3122704922642232605) -->
- <skip />
- <!-- no translation found for spoken_description_symbols_shift_shifted (5179175466878186081) -->
- <skip />
- <!-- no translation found for spoken_description_caps_lock (1224851412185975036) -->
- <skip />
+ <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Simbol lainnya"</string>
+ <string name="spoken_description_shift_shifted" msgid="3122704922642232605">"Shift"</string>
+ <string name="spoken_description_symbols_shift_shifted" msgid="5179175466878186081">"Simbol"</string>
+ <string name="spoken_description_caps_lock" msgid="1224851412185975036">"Shift"</string>
<string name="spoken_description_delete" msgid="3878902286264983302">"Hapus"</string>
<string name="spoken_description_to_symbol" msgid="8244903740201126590">"Simbol"</string>
<string name="spoken_description_to_alpha" msgid="4081215210530031950">"Huruf"</string>
@@ -53,8 +49,7 @@
<string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"Shift diaktifkan"</string>
<string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"Caps lock diaktifkan"</string>
<string name="spoken_description_mode_symbol" msgid="111186851131446691">"Mode simbol"</string>
- <!-- no translation found for spoken_description_mode_symbol_shift (4305607977537665389) -->
- <skip />
+ <string name="spoken_description_mode_symbol_shift" msgid="4305607977537665389">"Mode simbol lainnya"</string>
<string name="spoken_description_mode_alpha" msgid="4676004119618778911">"Mode huruf"</string>
<string name="spoken_description_mode_phone" msgid="2061220553756692903">"Mode telepon"</string>
<string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"Mode simbol telepon"</string>
@@ -76,4 +71,12 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Tempat"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Simbol"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Emotikon"</string>
+ <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+ <skip />
+ <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+ <skip />
</resources>
diff --git a/java/res/values-in/strings.xml b/java/res/values-in/strings.xml
index e3c551629..a625da03e 100644
--- a/java/res/values-in/strings.xml
+++ b/java/res/values-in/strings.xml
@@ -21,7 +21,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_input_options" msgid="3909945612939668554">"Opsi masukan"</string>
- <string name="english_ime_research_log" msgid="8492602295696577851">"Riset Perintah Log"</string>
<string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Cari nama kontak"</string>
<string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Pemeriksa ejaan menggunakan entri dari daftar kontak Anda"</string>
<string name="vibrate_on_keypress" msgid="5258079494276955460">"Getar jika tombol ditekan"</string>
@@ -84,8 +83,6 @@
<string name="select_language" msgid="3693815588777926848">"Bahasa masukan"</string>
<string name="hint_add_to_dictionary" msgid="573678656946085380">"Sentuh lagi untuk menyimpan"</string>
<string name="has_dictionary" msgid="6071847973466625007">"Kamus yang tersedia"</string>
- <string name="prefs_enable_log" msgid="6620424505072963557">"Aktifkan masukan pengguna"</string>
- <string name="prefs_description_log" msgid="7525225584555429211">"Bantu tingkatkan editor metode masukan dengan mengirim statistik penggunaan dan laporan kerusakan secara otomatis"</string>
<string name="keyboard_layout" msgid="8451164783510487501">"Tema keyboard"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"Inggris (Inggris)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"Inggris (AS)"</string>
@@ -118,7 +115,6 @@
<string name="enable" msgid="5031294444630523247">"Aktifkan"</string>
<string name="not_now" msgid="6172462888202790482">"Nanti saja"</string>
<string name="custom_input_style_already_exists" msgid="8008728952215449707">"Sudah ada gaya masukan yang sama: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
- <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Mode studi daya guna"</string>
<string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Penundaan tekan lama tombol"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Durasi getar saat tekan tombol"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Volume suara saat tekan tombol"</string>
diff --git a/java/res/values-is/strings.xml b/java/res/values-is/strings.xml
index 1588534c9..ab2f2625a 100644
--- a/java/res/values-is/strings.xml
+++ b/java/res/values-is/strings.xml
@@ -22,7 +22,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<!-- no translation found for english_ime_input_options (3909945612939668554) -->
<skip />
- <!-- no translation found for english_ime_research_log (8492602295696577851) -->
<skip />
<!-- no translation found for use_contacts_for_spellchecking_option_title (5374120998125353898) -->
<skip />
@@ -140,9 +139,7 @@
<skip />
<!-- no translation found for has_dictionary (6071847973466625007) -->
<skip />
- <!-- no translation found for prefs_enable_log (6620424505072963557) -->
<skip />
- <!-- no translation found for prefs_description_log (7525225584555429211) -->
<skip />
<!-- no translation found for keyboard_layout (8451164783510487501) -->
<skip />
@@ -198,7 +195,6 @@
<skip />
<!-- no translation found for custom_input_style_already_exists (8008728952215449707) -->
<skip />
- <!-- no translation found for prefs_usability_study_mode (1261130555134595254) -->
<skip />
<!-- no translation found for prefs_key_longpress_timeout_settings (6102240298932897873) -->
<skip />
diff --git a/java/res/values-it/strings-action-keys.xml b/java/res/values-it/strings-action-keys.xml
index 02e7b9c94..0a0cf9b7b 100644
--- a/java/res/values-it/strings-action-keys.xml
+++ b/java/res/values-it/strings-action-keys.xml
@@ -25,6 +25,8 @@
<string name="label_previous_key" msgid="1421141755779895275">"Prec."</string>
<string name="label_done_key" msgid="7564866296502630852">"Fine"</string>
<string name="label_send_key" msgid="482252074224462163">"Invia"</string>
+ <!-- no translation found for label_search_key (7965186050435796642) -->
+ <skip />
<string name="label_pause_key" msgid="2225922926459730642">"Pausa"</string>
<string name="label_wait_key" msgid="5891247853595466039">"Attendi"</string>
</resources>
diff --git a/java/res/values-it/strings-talkback-descriptions.xml b/java/res/values-it/strings-talkback-descriptions.xml
index f1d0dae81..3b4cca377 100644
--- a/java/res/values-it/strings-talkback-descriptions.xml
+++ b/java/res/values-it/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Luoghi"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Simboli"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Emoticon"</string>
+ <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+ <skip />
+ <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+ <skip />
</resources>
diff --git a/java/res/values-it/strings.xml b/java/res/values-it/strings.xml
index 6685095be..fc9834e12 100644
--- a/java/res/values-it/strings.xml
+++ b/java/res/values-it/strings.xml
@@ -21,7 +21,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_input_options" msgid="3909945612939668554">"Opzioni inserimento"</string>
- <string name="english_ime_research_log" msgid="8492602295696577851">"Ricerca comandi di log"</string>
<string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Cerca in nomi contatti"</string>
<string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"La funzione di controllo ortografico usa voci dell\'elenco contatti"</string>
<string name="vibrate_on_keypress" msgid="5258079494276955460">"Vibrazione tasti"</string>
@@ -84,8 +83,6 @@
<string name="select_language" msgid="3693815588777926848">"Lingue comandi"</string>
<string name="hint_add_to_dictionary" msgid="573678656946085380">"Tocca di nuovo per salvare"</string>
<string name="has_dictionary" msgid="6071847973466625007">"Dizionario disponibile"</string>
- <string name="prefs_enable_log" msgid="6620424505072963557">"Attiva commenti degli utenti"</string>
- <string name="prefs_description_log" msgid="7525225584555429211">"Contribuisci a migliorare l\'editor del metodo di immissione inviando automaticamente statistiche sull\'utilizzo e rapporti sugli arresti anomali"</string>
<string name="keyboard_layout" msgid="8451164783510487501">"Tema della tastiera"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"Inglese (UK)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"Inglese (USA)"</string>
@@ -118,7 +115,6 @@
<string name="enable" msgid="5031294444630523247">"Attiva"</string>
<string name="not_now" msgid="6172462888202790482">"Non ora"</string>
<string name="custom_input_style_already_exists" msgid="8008728952215449707">"Esiste già uno stile di inuput uguale: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
- <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Modalità Studio sull\'usabilità"</string>
<string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Ritardo pressione lunga tasti"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Durata vibraz. pressione tasto"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Volume audio a pressione tasto"</string>
diff --git a/java/res/values-iw/strings-action-keys.xml b/java/res/values-iw/strings-action-keys.xml
index f0f466b8e..398c081d6 100644
--- a/java/res/values-iw/strings-action-keys.xml
+++ b/java/res/values-iw/strings-action-keys.xml
@@ -25,6 +25,8 @@
<string name="label_previous_key" msgid="1421141755779895275">"הקודם"</string>
<string name="label_done_key" msgid="7564866296502630852">"בוצע"</string>
<string name="label_send_key" msgid="482252074224462163">"שלח"</string>
+ <!-- no translation found for label_search_key (7965186050435796642) -->
+ <skip />
<string name="label_pause_key" msgid="2225922926459730642">"השהה"</string>
<string name="label_wait_key" msgid="5891247853595466039">"המתן"</string>
</resources>
diff --git a/java/res/values-iw/strings-talkback-descriptions.xml b/java/res/values-iw/strings-talkback-descriptions.xml
index eee16eb0a..d6c2878cd 100644
--- a/java/res/values-iw/strings-talkback-descriptions.xml
+++ b/java/res/values-iw/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"מקומות"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"סמלים"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"רגשונים"</string>
+ <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+ <skip />
+ <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+ <skip />
</resources>
diff --git a/java/res/values-iw/strings.xml b/java/res/values-iw/strings.xml
index dab2d8ed8..7ab16370e 100644
--- a/java/res/values-iw/strings.xml
+++ b/java/res/values-iw/strings.xml
@@ -21,7 +21,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_input_options" msgid="3909945612939668554">"אפשרויות קלט"</string>
- <string name="english_ime_research_log" msgid="8492602295696577851">"פקודות יומן מחקר"</string>
<string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"חפש שמות של אנשי קשר"</string>
<string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"בודק האיות משתמש בערכים מרשימת אנשי הקשר שלך"</string>
<string name="vibrate_on_keypress" msgid="5258079494276955460">"רטט בלחיצה על מקשים"</string>
@@ -84,8 +83,6 @@
<string name="select_language" msgid="3693815588777926848">"שפות קלט"</string>
<string name="hint_add_to_dictionary" msgid="573678656946085380">"גע שוב כדי לשמור"</string>
<string name="has_dictionary" msgid="6071847973466625007">"מילון זמין"</string>
- <string name="prefs_enable_log" msgid="6620424505072963557">"הפעל משוב ממשתמשים"</string>
- <string name="prefs_description_log" msgid="7525225584555429211">"עזור לשפר את עורך שיטת הקלט על ידי שליחה אוטומטית של סטטיסטיקת שימוש ודוחות קריסה."</string>
<string name="keyboard_layout" msgid="8451164783510487501">"עיצוב מקלדת"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"אנגלית (בריטניה)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"אנגלית (ארה\"ב)"</string>
@@ -118,7 +115,6 @@
<string name="enable" msgid="5031294444630523247">"הפעל"</string>
<string name="not_now" msgid="6172462888202790482">"לא עכשיו"</string>
<string name="custom_input_style_already_exists" msgid="8008728952215449707">"סגנון קלט זהה כבר קיים: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
- <string name="prefs_usability_study_mode" msgid="1261130555134595254">"מצב לחקירת שימושיות"</string>
<string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"השהיית לחיצה ארוכה על מקש"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"משך רטט של לחיצת מקש"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"עוצמת קול של לחיצת מקש"</string>
diff --git a/java/res/values-ja/strings-action-keys.xml b/java/res/values-ja/strings-action-keys.xml
index 68aa6479e..ba8d06c78 100644
--- a/java/res/values-ja/strings-action-keys.xml
+++ b/java/res/values-ja/strings-action-keys.xml
@@ -25,6 +25,8 @@
<string name="label_previous_key" msgid="1421141755779895275">"前へ"</string>
<string name="label_done_key" msgid="7564866296502630852">"完了"</string>
<string name="label_send_key" msgid="482252074224462163">"送信"</string>
+ <!-- no translation found for label_search_key (7965186050435796642) -->
+ <skip />
<string name="label_pause_key" msgid="2225922926459730642">"停止"</string>
<string name="label_wait_key" msgid="5891247853595466039">"待機"</string>
</resources>
diff --git a/java/res/values-ja/strings-talkback-descriptions.xml b/java/res/values-ja/strings-talkback-descriptions.xml
index 24796037c..b218b49ba 100644
--- a/java/res/values-ja/strings-talkback-descriptions.xml
+++ b/java/res/values-ja/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"場所"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"記号"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"絵文字"</string>
+ <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+ <skip />
+ <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+ <skip />
</resources>
diff --git a/java/res/values-ja/strings.xml b/java/res/values-ja/strings.xml
index 7d749a6a2..3845bd759 100644
--- a/java/res/values-ja/strings.xml
+++ b/java/res/values-ja/strings.xml
@@ -21,7 +21,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_input_options" msgid="3909945612939668554">"入力オプション"</string>
- <string name="english_ime_research_log" msgid="8492602295696577851">"ログコマンドの検索"</string>
<string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"連絡先名の検索"</string>
<string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"スペルチェッカーでは連絡先リストのエントリを使用します"</string>
<string name="vibrate_on_keypress" msgid="5258079494276955460">"キー操作バイブ"</string>
@@ -84,8 +83,6 @@
<string name="select_language" msgid="3693815588777926848">"入力言語"</string>
<string name="hint_add_to_dictionary" msgid="573678656946085380">"保存するにはもう一度タップ"</string>
<string name="has_dictionary" msgid="6071847973466625007">"辞書を利用できます"</string>
- <string name="prefs_enable_log" msgid="6620424505072963557">"ユーザーフィードバックを有効にする"</string>
- <string name="prefs_description_log" msgid="7525225584555429211">"IMEの機能向上のため、使用統計状況やクラッシュレポートをGoogleに自動送信します。"</string>
<string name="keyboard_layout" msgid="8451164783510487501">"キーボードのテーマ"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"英語 (英国)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"英語 (米国)"</string>
@@ -118,7 +115,6 @@
<string name="enable" msgid="5031294444630523247">"有効にする"</string>
<string name="not_now" msgid="6172462888202790482">"後で行う"</string>
<string name="custom_input_style_already_exists" msgid="8008728952215449707">"同じ入力スタイルが既に存在します: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
- <string name="prefs_usability_study_mode" msgid="1261130555134595254">"使いやすさの研究モード"</string>
<string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"キーの長押し時間"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"キー操作バイブの振動時間"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"キー操作音の音量"</string>
diff --git a/java/res/values-ka-rGE/strings-action-keys.xml b/java/res/values-ka-rGE/strings-action-keys.xml
index e2dd05f7b..3ad6c3395 100644
--- a/java/res/values-ka-rGE/strings-action-keys.xml
+++ b/java/res/values-ka-rGE/strings-action-keys.xml
@@ -25,6 +25,8 @@
<string name="label_previous_key" msgid="1421141755779895275">"წინა"</string>
<string name="label_done_key" msgid="7564866296502630852">"დასრ."</string>
<string name="label_send_key" msgid="482252074224462163">"გაგზ."</string>
+ <!-- no translation found for label_search_key (7965186050435796642) -->
+ <skip />
<string name="label_pause_key" msgid="2225922926459730642">"პაუზა"</string>
<string name="label_wait_key" msgid="5891247853595466039">"მოცდა"</string>
</resources>
diff --git a/java/res/values-ka-rGE/strings-emoji-descriptions.xml b/java/res/values-ka-rGE/strings-emoji-descriptions.xml
new file mode 100644
index 000000000..81c6661ef
--- /dev/null
+++ b/java/res/values-ka-rGE/strings-emoji-descriptions.xml
@@ -0,0 +1,846 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/*
+**
+** Copyright 2014, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="spoken_emoji_00A9" msgid="2859822817116803638">"საავტორო უფლების ნიშანი"</string>
+ <string name="spoken_emoji_00AE" msgid="7708335454134589027">"რეგისტრირებული სავაჭრო ნიშნის სიმბოლო"</string>
+ <string name="spoken_emoji_203C" msgid="153340916701508663">"ორმაგი ძახილის ნიშანი"</string>
+ <string name="spoken_emoji_2049" msgid="4877256448299555371">"ძახილის და კითხვის ნიშანი"</string>
+ <string name="spoken_emoji_2122" msgid="9188440722954720429">"სავაჭრო ნიშნის ნიშანი"</string>
+ <string name="spoken_emoji_2139" msgid="9114342638917304327">"ინფორმაციის წყარო"</string>
+ <string name="spoken_emoji_2194" msgid="8055202727034946680">"მარცხენა და მარჯვენა ისარი"</string>
+ <string name="spoken_emoji_2195" msgid="8028122253301087407">"ზედა და ქვედა ისარი"</string>
+ <string name="spoken_emoji_2196" msgid="4019164898967854363">"ჩრდილო დასავლეთის ისარი"</string>
+ <string name="spoken_emoji_2197" msgid="4255723717709017801">"ჩრდილო აღმოსავლეთის ისარი"</string>
+ <string name="spoken_emoji_2198" msgid="1452063451313622090">"სამხრეთ აღმოსავლეთის ისარი"</string>
+ <string name="spoken_emoji_2199" msgid="6942722693368807849">"სამხრეთ დასავლეთის ისარი"</string>
+ <string name="spoken_emoji_21A9" msgid="5204750172335111188">"მარცხნივ მიმართული ისარი კაუჭით"</string>
+ <string name="spoken_emoji_21AA" msgid="3950259884359247006">"მარჯვნივ მიმართული ისარი კაუჭით"</string>
+ <string name="spoken_emoji_231A" msgid="6751448803233874993">"საათი"</string>
+ <string name="spoken_emoji_231B" msgid="5956428809948426182">"ქვიშის საათი"</string>
+ <string name="spoken_emoji_23E9" msgid="4022497733535162237">"მარჯვნივ მიმართული შავი ორმაგი სამკუთხედი"</string>
+ <string name="spoken_emoji_23EA" msgid="2251396938087774944">"მარცხნივ მიმართული შავი ორმაგი სამკუთხედი"</string>
+ <string name="spoken_emoji_23EB" msgid="3746885195641491865">"ზევით მიმართული შავი ორმაგი სამკუთხედი"</string>
+ <string name="spoken_emoji_23EC" msgid="7852372752901163416">"ქვევით მიმართული შავი ორმაგი სამკუთხედი"</string>
+ <string name="spoken_emoji_23F0" msgid="8474219588750627870">"მაღვიძარა"</string>
+ <string name="spoken_emoji_23F3" msgid="166900119581024371">"ქვიშის საათი ჩამოყრილი ქვიშით"</string>
+ <string name="spoken_emoji_24C2" msgid="3948348737566038470">"წრეში ჩასმული ლათინური ასო m"</string>
+ <string name="spoken_emoji_25AA" msgid="7865181015100227349">"შავი პატარა კვადრატი"</string>
+ <string name="spoken_emoji_25AB" msgid="6446532820937381457">"თეთრი პატარა კვადრატი"</string>
+ <string name="spoken_emoji_25B6" msgid="2423897708496040947">"შავი მარჯვნივ მიმართული სამკუთხედი"</string>
+ <string name="spoken_emoji_25C0" msgid="3595083440074484934">"შავი მარცხნივ მიმართული სამკუთხედი"</string>
+ <string name="spoken_emoji_25FB" msgid="4838691986881215419">"თეთრი საშუალო კვადრატი"</string>
+ <string name="spoken_emoji_25FC" msgid="7008859564991191050">"შავი საშუალო კვადრატი"</string>
+ <string name="spoken_emoji_25FD" msgid="7673439755069217479">"თეთრი საშუალო პატარა კვადრატი"</string>
+ <string name="spoken_emoji_25FE" msgid="6782214109919768923">"შავი საშუალო პატარა კვადრატი"</string>
+ <string name="spoken_emoji_2600" msgid="2272722634618990413">"შავი მზე სხივებით"</string>
+ <string name="spoken_emoji_2601" msgid="6205136889311537150">"ღრუბელი"</string>
+ <string name="spoken_emoji_260E" msgid="8670395193046424238">"შავი ტელეფონი"</string>
+ <string name="spoken_emoji_2611" msgid="4530550203347054611">"მონიშნული საარჩევნო ბიულეტენი"</string>
+ <string name="spoken_emoji_2614" msgid="1612791247861229500">"ქოლგა წვიმის წვეთებით"</string>
+ <string name="spoken_emoji_2615" msgid="3320562382424018588">"ცხელი სასმელი"</string>
+ <string name="spoken_emoji_261D" msgid="4690554173549768467">"თეთრი ზევით მიმართული საჩვენებელი"</string>
+ <string name="spoken_emoji_263A" msgid="3170094381521989300">"თეთრი მომღიმარი სახე"</string>
+ <string name="spoken_emoji_2648" msgid="4621241062667020673">"ვერძი"</string>
+ <string name="spoken_emoji_2649" msgid="7694461245947059086">"კურო"</string>
+ <string name="spoken_emoji_264A" msgid="1258074605878705030">"ტყუპები"</string>
+ <string name="spoken_emoji_264B" msgid="4409219914377810956">"კირჩხიბი"</string>
+ <string name="spoken_emoji_264C" msgid="6520255367817054163">"ლომი"</string>
+ <string name="spoken_emoji_264D" msgid="1504758945499854018">"ქალწული"</string>
+ <string name="spoken_emoji_264E" msgid="2354847104530633519">"სასწორი"</string>
+ <string name="spoken_emoji_264F" msgid="5822933280406416112">"მორიელი"</string>
+ <string name="spoken_emoji_2650" msgid="4832481156714796163">"მშვილდოსანი"</string>
+ <string name="spoken_emoji_2651" msgid="840953134601595090">"თხის რქა"</string>
+ <string name="spoken_emoji_2652" msgid="3586925968718775281">"მერწყული"</string>
+ <string name="spoken_emoji_2653" msgid="8420547731496254492">"თევზები"</string>
+ <string name="spoken_emoji_2660" msgid="4541170554542412536">"ბანქოს შავი ყვავი"</string>
+ <string name="spoken_emoji_2663" msgid="3669352721942285724">"ბანქოს შავი ჯვარი"</string>
+ <string name="spoken_emoji_2665" msgid="6347941599683765843">"ბანქოს შავი გული"</string>
+ <string name="spoken_emoji_2666" msgid="8296769213401115999">"ბანქოს შავი აგური"</string>
+ <string name="spoken_emoji_2668" msgid="7063148281053820386">"ცხელი წყარო"</string>
+ <string name="spoken_emoji_267B" msgid="21716857176812762">"უნივერსალური გადამუშავების შავი სიმბოლო"</string>
+ <string name="spoken_emoji_267F" msgid="8833496533226475443">"სატარებელი სავარძლის სიმბოლო"</string>
+ <string name="spoken_emoji_2693" msgid="7443148847598433088">"ღუზა"</string>
+ <string name="spoken_emoji_26A0" msgid="6272635532992727510">"გაფრთხილების ნიშანი"</string>
+ <string name="spoken_emoji_26A1" msgid="5604749644693339145">"მაღალი ძაბვის ნიშანი"</string>
+ <string name="spoken_emoji_26AA" msgid="8005748091690377153">"საშუალო თეთრი წრე"</string>
+ <string name="spoken_emoji_26AB" msgid="1655910278422753244">"საშუალო შავი წრე"</string>
+ <string name="spoken_emoji_26BD" msgid="1545218197938889737">"ფეხბურთის ბურთი"</string>
+ <string name="spoken_emoji_26BE" msgid="8959760533076498209">"ბეისბოლის ბურთი"</string>
+ <string name="spoken_emoji_26C4" msgid="3045791757044255626">"თოვლის კაცი თოვლის გარეშე"</string>
+ <string name="spoken_emoji_26C5" msgid="5580129409712578639">"ღრუბელს მიფარებული მზე"</string>
+ <string name="spoken_emoji_26CE" msgid="8963656417276062998">"გველისმჭერის თანავარსკვლავედი"</string>
+ <string name="spoken_emoji_26D4" msgid="2231451988209604130">"შესვლა აკრძალულია"</string>
+ <string name="spoken_emoji_26EA" msgid="7513319636103804907">"ეკლესია"</string>
+ <string name="spoken_emoji_26F2" msgid="7134115206158891037">"შადრევანი"</string>
+ <string name="spoken_emoji_26F3" msgid="4912302210162075465">"ალამი ორმოში"</string>
+ <string name="spoken_emoji_26F5" msgid="4766328116769075217">"იალქნიანი გემი"</string>
+ <string name="spoken_emoji_26FA" msgid="5888017494809199037">"კარავი"</string>
+ <string name="spoken_emoji_26FD" msgid="2417060622927453534">"საწვავის სატუმბი"</string>
+ <string name="spoken_emoji_2702" msgid="4005741160717451912">"შავი მაკრატელი"</string>
+ <string name="spoken_emoji_2705" msgid="164605766946697759">"თეთრი მკვეთრი მონიშვნის ნიშანი"</string>
+ <string name="spoken_emoji_2708" msgid="7153840886849268988">"თვითმფრინავი"</string>
+ <string name="spoken_emoji_2709" msgid="2217319160724311369">"კონვერტი"</string>
+ <string name="spoken_emoji_270A" msgid="508347232762319473">"აღმართული მუშტი"</string>
+ <string name="spoken_emoji_270B" msgid="6640562128327753423">"აღმართული ხელი"</string>
+ <string name="spoken_emoji_270C" msgid="1344288035704944581">"გამარჯვების აღმნიშვნელი ხელი"</string>
+ <string name="spoken_emoji_270F" msgid="6108251586067318718">"ფანქარი"</string>
+ <string name="spoken_emoji_2712" msgid="6320544535087710482">"შავი კალმის წვერი"</string>
+ <string name="spoken_emoji_2714" msgid="1968242800064001654">"მკვეთრი მონიშვნის ნიშანი"</string>
+ <string name="spoken_emoji_2716" msgid="511941294762977228">"მკვეთრი გამრავლების x"</string>
+ <string name="spoken_emoji_2728" msgid="5650330815808691881">"ნაპერწკლები"</string>
+ <string name="spoken_emoji_2733" msgid="8915809595141157327">"რვაწვერა ვარსკვლავი"</string>
+ <string name="spoken_emoji_2734" msgid="4846583547980754332">"რვაქიმიანი შავი ვარსკვლავი"</string>
+ <string name="spoken_emoji_2744" msgid="4350636647760161042">"ფიფქი"</string>
+ <string name="spoken_emoji_2747" msgid="3718282973916474455">"ნაპერწკალი"</string>
+ <string name="spoken_emoji_274C" msgid="2752145886733295314">"გადახაზვის ნიშანი"</string>
+ <string name="spoken_emoji_274E" msgid="4262918689871098338">"კვადრატში ჩასმული გადახაზული ნიშანი ნეგატივში"</string>
+ <string name="spoken_emoji_2753" msgid="6935897159942119808">"შავი კითხვის ნიშნის ორნამენტი"</string>
+ <string name="spoken_emoji_2754" msgid="7277504915105532954">"თეთრი კითხვის ნიშნის ორნამენტი"</string>
+ <string name="spoken_emoji_2755" msgid="6853076969826960210">"თეთრი ძახილის ნიშნის ორნამენტი"</string>
+ <string name="spoken_emoji_2757" msgid="3707907828776912174">"მკვეთრი ძახილის ნიშნის სიმბოლო"</string>
+ <string name="spoken_emoji_2764" msgid="4214257843609432167">"დიდი შავი გული"</string>
+ <string name="spoken_emoji_2795" msgid="6563954833786162168">"მკვეთრი პლუსის ნიშანი"</string>
+ <string name="spoken_emoji_2796" msgid="5990926508250772777">"მკვეთრი მინუსის ნიშანი"</string>
+ <string name="spoken_emoji_2797" msgid="24694184172879174">"მკვეთრი გაყოფის ნიშანი"</string>
+ <string name="spoken_emoji_27A1" msgid="3513434778263100580">"შავი მარჯვნივ მიმართული ისარი"</string>
+ <string name="spoken_emoji_27B0" msgid="203395646864662198">"მარყუჟი"</string>
+ <string name="spoken_emoji_27BF" msgid="4940514642375640510">"ორმაგი მარყუჟი"</string>
+ <string name="spoken_emoji_2934" msgid="9062130477982973457">"მარჯვნივ მიმართული და ზევით მოხვეული ისარი"</string>
+ <string name="spoken_emoji_2935" msgid="6198710960720232074">"მარჯვნივ მიმართული და ქვევით მოხვეული ისარი"</string>
+ <string name="spoken_emoji_2B05" msgid="4813405635410707690">"მარცხნივ მიმართული შავი ისარი"</string>
+ <string name="spoken_emoji_2B06" msgid="1223172079106250748">"ზევით მიმართული შავი ისარი"</string>
+ <string name="spoken_emoji_2B07" msgid="1599124424746596150">"მარცხნივ ქვევით მიმართული შავი ისარი"</string>
+ <string name="spoken_emoji_2B1B" msgid="3461247311988501626">"დიდი შავი კვადრატი"</string>
+ <string name="spoken_emoji_2B1C" msgid="5793146430145248915">"დიდი თეთრი კვადრატი"</string>
+ <string name="spoken_emoji_2B50" msgid="3850845519526950524">"თეთრი საშუალო ვარსკვლავი"</string>
+ <string name="spoken_emoji_2B55" msgid="9137882158811541824">"მკვეთრი დიდი წრე"</string>
+ <string name="spoken_emoji_3030" msgid="4609172241893565639">"ტალღოვანი ტირე"</string>
+ <string name="spoken_emoji_303D" msgid="2545833934975907505">"იორიტენი"</string>
+ <string name="spoken_emoji_3297" msgid="928912923628973800">"მილოცვის იდეოგრაფი წრეში"</string>
+ <string name="spoken_emoji_3299" msgid="3930347573693668426">"საიდუმლოების იდეოგრაფი წრეში"</string>
+ <string name="spoken_emoji_1F004" msgid="1705216181345894600">"Mahjong მოზაიკის წითელი დრაკონი"</string>
+ <string name="spoken_emoji_1F0CF" msgid="7601493592085987866">"ბანქოს შავი ჯოკერი"</string>
+ <string name="spoken_emoji_1F170" msgid="3817698686602826773">"სისხლის ტიპი A"</string>
+ <string name="spoken_emoji_1F171" msgid="3684218589626650242">"სისხლის ტიპი B"</string>
+ <string name="spoken_emoji_1F17E" msgid="2978809190364779029">"სისხლის ტიპი O"</string>
+ <string name="spoken_emoji_1F17F" msgid="463634348668462040">"პარკინგის ადგილი"</string>
+ <string name="spoken_emoji_1F18E" msgid="1650705325221496768">"სისხლის ტიპი AB"</string>
+ <string name="spoken_emoji_1F191" msgid="5386969264431429221">"CL კვადრატში"</string>
+ <string name="spoken_emoji_1F192" msgid="8324226436829162496">"cool კვადრატში"</string>
+ <string name="spoken_emoji_1F193" msgid="4731758603321515364">"free კვადრატში"</string>
+ <string name="spoken_emoji_1F194" msgid="4903128609556175887">"ID კვადრატში"</string>
+ <string name="spoken_emoji_1F195" msgid="1433142500411060924">"new კვადრატში"</string>
+ <string name="spoken_emoji_1F196" msgid="8825160701159634202">"N G კვადრატში"</string>
+ <string name="spoken_emoji_1F197" msgid="7841079241554176535">"OK კვადრატში"</string>
+ <string name="spoken_emoji_1F198" msgid="7020298909426960622">"SOS კვადრატში"</string>
+ <string name="spoken_emoji_1F199" msgid="5971252667136235630">"up ძახილის ნიშნით კვადრატში"</string>
+ <string name="spoken_emoji_1F19A" msgid="4557270135899843959">"vs კვადრატში"</string>
+ <string name="spoken_emoji_1F201" msgid="7000490044681139002">"katakana koko კვადრატში"</string>
+ <string name="spoken_emoji_1F202" msgid="8560906958695043947">"katakana sa კვადრატში"</string>
+ <string name="spoken_emoji_1F21A" msgid="1496435317324514033">"CJK უნიფიცირებული იდეოგრაფი კვადრატში"</string>
+ <string name="spoken_emoji_1F22F" msgid="609797148862445402">"დაჯავშნილი ადგილის იდეოგრაფი კვადრატში"</string>
+ <string name="spoken_emoji_1F232" msgid="8125716331632035820">"პროჰიბიციის იდეოგრაფი კვადრატში"</string>
+ <string name="spoken_emoji_1F233" msgid="8749401090457355028">"ვაკანსიის იდეოგრაფი კვადრატში"</string>
+ <string name="spoken_emoji_1F234" msgid="3546951604285970768">"მიღების იდეოგრაფი კვადრატში"</string>
+ <string name="spoken_emoji_1F235" msgid="5320186982841793711">"დაკავებულობის იდეოგრაფი კვადრატში"</string>
+ <string name="spoken_emoji_1F236" msgid="879755752069393034">"იდეოგრაფი გადახდილია კვადრატში"</string>
+ <string name="spoken_emoji_1F237" msgid="6741807001205851437">"იდეოგრაფი ყოველთვიურად კვადრატში"</string>
+ <string name="spoken_emoji_1F238" msgid="5504414186438196912">"იდეოგრაფი აპლიკაცია კვადრატში"</string>
+ <string name="spoken_emoji_1F239" msgid="1634067311597618959">"ფასდაკლების იდეოგრაფი კვადრატში"</string>
+ <string name="spoken_emoji_1F23A" msgid="3107862957630169536">"იდეოგრაფი მუშაობს კვადრატში"</string>
+ <string name="spoken_emoji_1F250" msgid="6586943922806727907">"უპირატესობის იდეოგრაფი წრეში"</string>
+ <string name="spoken_emoji_1F251" msgid="9099032855993346948">"მიღების იდეოგრაფი წრეში"</string>
+ <string name="spoken_emoji_1F300" msgid="4720098285295840383">"ციკლონი"</string>
+ <string name="spoken_emoji_1F301" msgid="3601962477653752974">"ნისლიანი"</string>
+ <string name="spoken_emoji_1F302" msgid="3404357123421753593">"დახურული ქოლგა"</string>
+ <string name="spoken_emoji_1F303" msgid="3899301321538188206">"ვარსკვლავიანი ღამე"</string>
+ <string name="spoken_emoji_1F304" msgid="2767148930689050040">"მზის ამოსვლა მთებზე"</string>
+ <string name="spoken_emoji_1F305" msgid="9165812924292061196">"მზის ამოსვლა"</string>
+ <string name="spoken_emoji_1F306" msgid="5889294736109193104">"ქალაქის პეიზაჟი შებინდებისას"</string>
+ <string name="spoken_emoji_1F307" msgid="2714290867291163713">"მზის ჩასვლა შენობების ფონზე"</string>
+ <string name="spoken_emoji_1F308" msgid="688704703985173377">"ცისარტყელა"</string>
+ <string name="spoken_emoji_1F309" msgid="6217981957992313528">"ხიდი ღამით"</string>
+ <string name="spoken_emoji_1F30A" msgid="4329309263152110893">"წყლის ტალღა"</string>
+ <string name="spoken_emoji_1F30B" msgid="5729430693700923112">"ვულკანი"</string>
+ <string name="spoken_emoji_1F30C" msgid="2961230863217543082">"ირმის ნახტომი"</string>
+ <string name="spoken_emoji_1F30D" msgid="1113905673331547953">"გლობუსი ევროპა-აფრიკა"</string>
+ <string name="spoken_emoji_1F30E" msgid="5278512600749223671">"გლობუსი ამერიკა"</string>
+ <string name="spoken_emoji_1F30F" msgid="5718144880978707493">"გლობუსი აზია-ავსტრალია"</string>
+ <string name="spoken_emoji_1F310" msgid="2959618582975247601">"გლობუსი მერიდიანებით"</string>
+ <string name="spoken_emoji_1F311" msgid="623906380914895542">"ახალი მთვარის სიმბოლო"</string>
+ <string name="spoken_emoji_1F312" msgid="4458575672576125401">"შევსებადი ნახევარმთვარის სიმბოლო"</string>
+ <string name="spoken_emoji_1F313" msgid="7599181787989497294">"პირველი მეოთხედის მთვარის სიმბოლო"</string>
+ <string name="spoken_emoji_1F314" msgid="4898293184964365413">"მილევადი ნახევარმთვარის სიმბოლო"</string>
+ <string name="spoken_emoji_1F315" msgid="3218117051779496309">"სავსე მთვარის სიმბოლო"</string>
+ <string name="spoken_emoji_1F316" msgid="2061317145777689569">"შევსებადი კუზიანი მთვარის სიმბოლო"</string>
+ <string name="spoken_emoji_1F317" msgid="2721090687319539049">"ბოლო მეოთხედის მთვარის სიმბოლო"</string>
+ <string name="spoken_emoji_1F318" msgid="3814091755648887570">"შევსებადი ნახევარმთვარის სიმბოლო"</string>
+ <string name="spoken_emoji_1F319" msgid="4074299824890459465">"ნახევარმთვარე"</string>
+ <string name="spoken_emoji_1F31A" msgid="3092285278116977103">"ახალი მთვარი სახით"</string>
+ <string name="spoken_emoji_1F31B" msgid="2658562138386927881">"პირველი მეოთხედის მთვარე სახით"</string>
+ <string name="spoken_emoji_1F31C" msgid="7914768515547867384">"ბოლო მეოთხედის მთვარე სახით"</string>
+ <string name="spoken_emoji_1F31D" msgid="1925730459848297182">"სავსე მთვარე სახით"</string>
+ <string name="spoken_emoji_1F31E" msgid="8022112382524084418">"მზე სახით"</string>
+ <string name="spoken_emoji_1F31F" msgid="1051661214137766369">"მოკიაფე ვარსკვლავი"</string>
+ <string name="spoken_emoji_1F320" msgid="5450591979068216115">"ჩამოვარდნილი ვარსკვლავი"</string>
+ <string name="spoken_emoji_1F330" msgid="3115760035618051575">"წაბლი"</string>
+ <string name="spoken_emoji_1F331" msgid="5658888205290008691">"ნერგი"</string>
+ <string name="spoken_emoji_1F332" msgid="2935650450421165938">"მარადმწვანე ხე"</string>
+ <string name="spoken_emoji_1F333" msgid="5898847427062482675">"ფოთლოვანი ხე"</string>
+ <string name="spoken_emoji_1F334" msgid="6183375224678417894">"პალმის ხე"</string>
+ <string name="spoken_emoji_1F335" msgid="5352418412103584941">"კაქტუსი"</string>
+ <string name="spoken_emoji_1F337" msgid="3839107352363566289">"ტიტა"</string>
+ <string name="spoken_emoji_1F338" msgid="6389970364260468490">"აყვავებული ალუბალი"</string>
+ <string name="spoken_emoji_1F339" msgid="9128891447985256151">"ვარდი"</string>
+ <string name="spoken_emoji_1F33A" msgid="2025828400095233078">"ჰიბისკუსი"</string>
+ <string name="spoken_emoji_1F33B" msgid="8163868254348448552">"მზესუმზირა"</string>
+ <string name="spoken_emoji_1F33C" msgid="6850371206262335812">"ყვავილობა"</string>
+ <string name="spoken_emoji_1F33D" msgid="9033484052864509610">"სიმინდის ტარო"</string>
+ <string name="spoken_emoji_1F33E" msgid="2540173396638444120">"ბრინჯის თავთავი"</string>
+ <string name="spoken_emoji_1F33F" msgid="4384823344364908558">"ბალახი"</string>
+ <string name="spoken_emoji_1F340" msgid="3494255459156499305">"ოთხფოთლიანი სამყურა"</string>
+ <string name="spoken_emoji_1F341" msgid="4581959481754990158">"ნეკერჩხლის ფოთოლი"</string>
+ <string name="spoken_emoji_1F342" msgid="3119068426871821222">"ჩამოვარდნილი ფოთოლი"</string>
+ <string name="spoken_emoji_1F343" msgid="2663317495805149004">"ქარში მოფრიალე ფოთოლი"</string>
+ <string name="spoken_emoji_1F344" msgid="2738517881678722159">"სოკო"</string>
+ <string name="spoken_emoji_1F345" msgid="6135288642349085554">"პომიდორი"</string>
+ <string name="spoken_emoji_1F346" msgid="2075395322785406367">"ბადრიჯანი"</string>
+ <string name="spoken_emoji_1F347" msgid="7753453754963890571">"ყურძენი"</string>
+ <string name="spoken_emoji_1F348" msgid="1247076837284932788">"ნესვი"</string>
+ <string name="spoken_emoji_1F349" msgid="5563054555180611086">"საზამთრო"</string>
+ <string name="spoken_emoji_1F34A" msgid="4688661208570160524">"მანდარინი"</string>
+ <string name="spoken_emoji_1F34B" msgid="4335318423164185706">"ლიმონი"</string>
+ <string name="spoken_emoji_1F34C" msgid="3712827239858159474">"ბანანი"</string>
+ <string name="spoken_emoji_1F34D" msgid="7712521967162622936">"ანანასი"</string>
+ <string name="spoken_emoji_1F34E" msgid="1859466882598614228">"წითელი ვაშლი"</string>
+ <string name="spoken_emoji_1F34F" msgid="8251711032295005633">"მწვანე ვაშლი"</string>
+ <string name="spoken_emoji_1F350" msgid="625802980159197701">"მსხალი"</string>
+ <string name="spoken_emoji_1F351" msgid="4269460120610911895">"ატამი"</string>
+ <string name="spoken_emoji_1F352" msgid="965600953360182635">"ალუბალი"</string>
+ <string name="spoken_emoji_1F353" msgid="7068623879906925592">"მარწყვი"</string>
+ <string name="spoken_emoji_1F354" msgid="45162285238888494">"ჰამბურგერი"</string>
+ <string name="spoken_emoji_1F355" msgid="9157587635526433283">"პიცას ნაჭერი"</string>
+ <string name="spoken_emoji_1F356" msgid="2667196119149852244">"ხორცი ძვალზე"</string>
+ <string name="spoken_emoji_1F357" msgid="8022817413851052256">"ქათმის ბარკალი"</string>
+ <string name="spoken_emoji_1F358" msgid="3042693264748036476">"ბრინჯის კრეკერი"</string>
+ <string name="spoken_emoji_1F359" msgid="3988148661730121958">"ბრინჯის გუნდა"</string>
+ <string name="spoken_emoji_1F35A" msgid="1763824172198327268">"მოხარშული ბრინჯი"</string>
+ <string name="spoken_emoji_1F35B" msgid="62530406745717835">"კარი და ბრინჯი"</string>
+ <string name="spoken_emoji_1F35C" msgid="7537756539198945509">"ორთქლიანი თასი"</string>
+ <string name="spoken_emoji_1F35D" msgid="8173523083861875196">"სპაგეტი"</string>
+ <string name="spoken_emoji_1F35E" msgid="2935428307894662571">"პური"</string>
+ <string name="spoken_emoji_1F35F" msgid="4840297386785728443">"კარტოფილი ფრი"</string>
+ <string name="spoken_emoji_1F360" msgid="4094659855684686801">"შემწვარი ტკბილი კარტოფილი"</string>
+ <string name="spoken_emoji_1F361" msgid="6475486395784096109">"დანგო"</string>
+ <string name="spoken_emoji_1F362" msgid="5004692577661076275">"ოდენი"</string>
+ <string name="spoken_emoji_1F363" msgid="1606603765717743806">"სუში"</string>
+ <string name="spoken_emoji_1F364" msgid="6550457766169570811">"შემწვარი კრევეტი"</string>
+ <string name="spoken_emoji_1F365" msgid="4963815540953316307">"ტორტი ლოკოკინის დიზაინით"</string>
+ <string name="spoken_emoji_1F366" msgid="7862401745277049404">"ჩამოსასხმელი ნაყინი"</string>
+ <string name="spoken_emoji_1F367" msgid="7447972978281980414">"გაცრილი ყინული"</string>
+ <string name="spoken_emoji_1F368" msgid="7790003146142724913">"ნაყინი"</string>
+ <string name="spoken_emoji_1F369" msgid="7383712944084857350">"დონატი"</string>
+ <string name="spoken_emoji_1F36A" msgid="2726271795913042295">"შინაური ნამცხვარი"</string>
+ <string name="spoken_emoji_1F36B" msgid="6342163604299875931">"შოკოლადის ფილა"</string>
+ <string name="spoken_emoji_1F36C" msgid="2168934753998218790">"კანფეტი"</string>
+ <string name="spoken_emoji_1F36D" msgid="3671507903799975792">"შაქარყინული"</string>
+ <string name="spoken_emoji_1F36E" msgid="4630541402785165902">"ნადუღის კრემი"</string>
+ <string name="spoken_emoji_1F36F" msgid="5577915387425169439">"თაფლის ქოთანი"</string>
+ <string name="spoken_emoji_1F370" msgid="7243244547866114951">"ფხვიერი ნამცხვარი"</string>
+ <string name="spoken_emoji_1F371" msgid="6731527040552916358">"ბენტოს ყუთი"</string>
+ <string name="spoken_emoji_1F372" msgid="1635035323832181733">"საკვების თასი"</string>
+ <string name="spoken_emoji_1F373" msgid="7799289534289221045">"სამზარეულო"</string>
+ <string name="spoken_emoji_1F374" msgid="5973820884987069131">"დანა-ჩანგალი"</string>
+ <string name="spoken_emoji_1F375" msgid="1074832087699617700">"ჩაის"</string>
+ <string name="spoken_emoji_1F376" msgid="6499274685584852067">"საკეს ბოთლი და ჭიქა"</string>
+ <string name="spoken_emoji_1F377" msgid="1762398562314172075">"ღვინის ჭიქა"</string>
+ <string name="spoken_emoji_1F378" msgid="5528234560590117516">"კოქტეილის ჭიქა"</string>
+ <string name="spoken_emoji_1F379" msgid="790581290787943325">"ტროპიკული სასმელი"</string>
+ <string name="spoken_emoji_1F37A" msgid="391966822450619516">"ლუდის კათხა"</string>
+ <string name="spoken_emoji_1F37B" msgid="9015043286465670662">"ლუდის კათხების მიჭახუნება"</string>
+ <string name="spoken_emoji_1F37C" msgid="2532113819464508894">"ჩვილის ბოთლი"</string>
+ <string name="spoken_emoji_1F380" msgid="3487363857092458827">"ლენტი"</string>
+ <string name="spoken_emoji_1F381" msgid="614180683680675444">"შეფუთული საჩუქარი"</string>
+ <string name="spoken_emoji_1F382" msgid="4720497171946687501">"დაბადების დღის ტორტი"</string>
+ <string name="spoken_emoji_1F383" msgid="3536505941578757623">"ჯეკის ფარანი"</string>
+ <string name="spoken_emoji_1F384" msgid="1797870204479059004">"ნაძვის ხე"</string>
+ <string name="spoken_emoji_1F385" msgid="1754174063483626367">"თოვლის ბაბუა"</string>
+ <string name="spoken_emoji_1F386" msgid="2130445450758114746">"ფეიერვერკი"</string>
+ <string name="spoken_emoji_1F387" msgid="3403182563117999933">"ფეიერვერკის შუშხუნი"</string>
+ <string name="spoken_emoji_1F388" msgid="2903047203723251804">"ბუშტი"</string>
+ <string name="spoken_emoji_1F389" msgid="2352830665883549388">"სადღესასწაულო სატკაცუნო"</string>
+ <string name="spoken_emoji_1F38A" msgid="6280428984773641322">"კონფეტის ბურთი"</string>
+ <string name="spoken_emoji_1F38B" msgid="4902225837479015489">"ტანაბატას ტოტი"</string>
+ <string name="spoken_emoji_1F38C" msgid="7623268024030989365">"გადაჯვარედინებული დროშები"</string>
+ <string name="spoken_emoji_1F38D" msgid="8237542796124408528">"ფიჭვის დეკორაცია"</string>
+ <string name="spoken_emoji_1F38E" msgid="5373397476238212371">"იაპონური სათამაშოები"</string>
+ <string name="spoken_emoji_1F38F" msgid="8754091376829552844">"კარპას ალამი"</string>
+ <string name="spoken_emoji_1F390" msgid="8903307048095431374">"ქარის ზარი"</string>
+ <string name="spoken_emoji_1F391" msgid="2134952069191911841">"მთვარის ჭვრეტის ცერემონიალი"</string>
+ <string name="spoken_emoji_1F392" msgid="6380405493914304737">"სკოლის ჩანთა"</string>
+ <string name="spoken_emoji_1F393" msgid="6947890064872470996">"ოქსფორდის ქუდი"</string>
+ <string name="spoken_emoji_1F3A0" msgid="3572095190082826057">"კარუსელის ცხენი"</string>
+ <string name="spoken_emoji_1F3A1" msgid="4300565511681058798">"ეშმაკის ბორბალი"</string>
+ <string name="spoken_emoji_1F3A2" msgid="15486093912232140">"როლერკოსტერი"</string>
+ <string name="spoken_emoji_1F3A3" msgid="921739319504942924">"თევზი და ანკესი"</string>
+ <string name="spoken_emoji_1F3A4" msgid="7497596355346856950">"მიკროფონი"</string>
+ <string name="spoken_emoji_1F3A5" msgid="4290497821228183002">"კინოკამერა"</string>
+ <string name="spoken_emoji_1F3A6" msgid="26019057872319055">"კინოთეატრი"</string>
+ <string name="spoken_emoji_1F3A7" msgid="837856608794094105">"ყურსასმენი"</string>
+ <string name="spoken_emoji_1F3A8" msgid="2332260356509244587">"მხატვრის პალიტრა"</string>
+ <string name="spoken_emoji_1F3A9" msgid="9045869366525115256">"ცილინდრი"</string>
+ <string name="spoken_emoji_1F3AA" msgid="5728760354237132">"ცირკის კარავი"</string>
+ <string name="spoken_emoji_1F3AB" msgid="1657997517193216284">"ბილეთი"</string>
+ <string name="spoken_emoji_1F3AC" msgid="4317366554314492152">"კინოს ტკაცუნა"</string>
+ <string name="spoken_emoji_1F3AD" msgid="607157286336130470">"საშემსრულებლო ხელოვნება"</string>
+ <string name="spoken_emoji_1F3AE" msgid="2902308174671548150">"ვიდეოთამაში"</string>
+ <string name="spoken_emoji_1F3AF" msgid="5420539221790296407">"მიზანში გარტყმა"</string>
+ <string name="spoken_emoji_1F3B0" msgid="7440244806527891956">"სლოტ-ავტომატი"</string>
+ <string name="spoken_emoji_1F3B1" msgid="545544382391379234">"ბილიარდი"</string>
+ <string name="spoken_emoji_1F3B2" msgid="8302262034774787493">"კამათელი"</string>
+ <string name="spoken_emoji_1F3B3" msgid="5180870610771027520">"ბოულინგი"</string>
+ <string name="spoken_emoji_1F3B4" msgid="4723852033266071564">"ჰანაფუდა"</string>
+ <string name="spoken_emoji_1F3B5" msgid="1998470239850548554">"მუსიკალური ნოტი"</string>
+ <string name="spoken_emoji_1F3B6" msgid="3827730457113941705">"მუსიკალური ნოტები"</string>
+ <string name="spoken_emoji_1F3B7" msgid="5503403099445042180">"საქსოფონი"</string>
+ <string name="spoken_emoji_1F3B8" msgid="3985658156795011430">"გიტარა"</string>
+ <string name="spoken_emoji_1F3B9" msgid="5596295757967881451">"კლავიშებიანი მუსიკალური ინსტრუმენტი"</string>
+ <string name="spoken_emoji_1F3BA" msgid="4284064120340683558">"საყვირი"</string>
+ <string name="spoken_emoji_1F3BB" msgid="2856598510069988745">"ვიოლინო"</string>
+ <string name="spoken_emoji_1F3BC" msgid="1608424748821446230">"მუსიკალური ნოტები"</string>
+ <string name="spoken_emoji_1F3BD" msgid="5490786111375627777">"სარბენი მაისური ლენტით"</string>
+ <string name="spoken_emoji_1F3BE" msgid="1851613105691627931">"ტენისის ჩოგანი და ბურთი"</string>
+ <string name="spoken_emoji_1F3BF" msgid="6862405997423247921">"თხილამური და ჩექმა"</string>
+ <string name="spoken_emoji_1F3C0" msgid="7421420756115104085">"ბურთი და კალათა"</string>
+ <string name="spoken_emoji_1F3C1" msgid="6926537251677319922">"კუბოკრული დროშა"</string>
+ <string name="spoken_emoji_1F3C2" msgid="5708596929237987082">"სნოუბორდერი"</string>
+ <string name="spoken_emoji_1F3C3" msgid="5850982999510115824">"მორბენალი"</string>
+ <string name="spoken_emoji_1F3C4" msgid="8468355585994639838">"სერფერი"</string>
+ <string name="spoken_emoji_1F3C6" msgid="9094474706847545409">"თასი"</string>
+ <string name="spoken_emoji_1F3C7" msgid="8172206200368370116">"ცხენების დოღი"</string>
+ <string name="spoken_emoji_1F3C8" msgid="5619171461277597709">"ამერიკული ფეხბურთის ბურთი"</string>
+ <string name="spoken_emoji_1F3C9" msgid="6371294008765871043">"რაგბის ბურთი"</string>
+ <string name="spoken_emoji_1F3CA" msgid="130977831787806932">"მოცურავე"</string>
+ <string name="spoken_emoji_1F3E0" msgid="6277213201655811842">"სახლის შენება"</string>
+ <string name="spoken_emoji_1F3E1" msgid="233476176077538885">"სახლი ბაღით"</string>
+ <string name="spoken_emoji_1F3E2" msgid="919736380093964570">"საოფისე შენობა"</string>
+ <string name="spoken_emoji_1F3E3" msgid="6177606081825094184">"იაპონური ფოსტა"</string>
+ <string name="spoken_emoji_1F3E4" msgid="717377871070970293">"ევროპული ფოსტა"</string>
+ <string name="spoken_emoji_1F3E5" msgid="1350532500431776780">"საავადმყოფო"</string>
+ <string name="spoken_emoji_1F3E6" msgid="342132788513806214">"ბანკი"</string>
+ <string name="spoken_emoji_1F3E7" msgid="6322352038284944265">"ბანკომატი"</string>
+ <string name="spoken_emoji_1F3E8" msgid="5864918444350599907">"სასტუმრო"</string>
+ <string name="spoken_emoji_1F3E9" msgid="7830416185375326938">"სიყვარულის სასტუმრო"</string>
+ <string name="spoken_emoji_1F3EA" msgid="5081084413084360479">"სადღეღამისო მაღაზია"</string>
+ <string name="spoken_emoji_1F3EB" msgid="7010966528205150525">"სკოლა"</string>
+ <string name="spoken_emoji_1F3EC" msgid="4845978861878295154">"უნივერსალური მაღაზია"</string>
+ <string name="spoken_emoji_1F3ED" msgid="3980316226665215370">"ქარხანა"</string>
+ <string name="spoken_emoji_1F3EE" msgid="1253964276770550248">"იზაკაიას ფარანი"</string>
+ <string name="spoken_emoji_1F3EF" msgid="1128975573507389883">"იაპონური ციხე-სიმაგრე"</string>
+ <string name="spoken_emoji_1F3F0" msgid="1544632297502291578">"ევროპული ციხე-სიმაგრე"</string>
+ <string name="spoken_emoji_1F400" msgid="2063034795679578294">"ვირთხა"</string>
+ <string name="spoken_emoji_1F401" msgid="6736421616217369594">"თაგვი"</string>
+ <string name="spoken_emoji_1F402" msgid="7276670995895485604">"ხარი"</string>
+ <string name="spoken_emoji_1F403" msgid="8045709541897118928">"აზიური კამეჩი"</string>
+ <string name="spoken_emoji_1F404" msgid="5240777285676662335">"ძროხა"</string>
+ <string name="spoken_emoji_1F406" msgid="5163461930159540018">"ლეოპარდი"</string>
+ <string name="spoken_emoji_1F407" msgid="6905370221172708160">"კურდღელი"</string>
+ <string name="spoken_emoji_1F408" msgid="1362164550508207284">"კატა"</string>
+ <string name="spoken_emoji_1F409" msgid="8476130983168866013">"დრაკონი"</string>
+ <string name="spoken_emoji_1F40A" msgid="1149626786411545043">"ნიანგი"</string>
+ <string name="spoken_emoji_1F40B" msgid="5199104921208397643">"ვეშაპი"</string>
+ <string name="spoken_emoji_1F40C" msgid="2704006052881702675">"ლოკოკინა"</string>
+ <string name="spoken_emoji_1F40D" msgid="8648186663643157522">"გველი"</string>
+ <string name="spoken_emoji_1F40E" msgid="7219137467573327268">"ცხენი"</string>
+ <string name="spoken_emoji_1F40F" msgid="7834336676729040395">"ვერძი"</string>
+ <string name="spoken_emoji_1F410" msgid="8686765722255775031">"თხა"</string>
+ <string name="spoken_emoji_1F411" msgid="3585715397876383525">"ცხვარი"</string>
+ <string name="spoken_emoji_1F412" msgid="4924794582980077838">"მაიმუნი"</string>
+ <string name="spoken_emoji_1F413" msgid="1460475310405677377">"მამალი"</string>
+ <string name="spoken_emoji_1F414" msgid="5857296282631892219">"ქათამი"</string>
+ <string name="spoken_emoji_1F415" msgid="5920041074892949527">"ძაღლი"</string>
+ <string name="spoken_emoji_1F416" msgid="4362403392912540286">"ღორი"</string>
+ <string name="spoken_emoji_1F417" msgid="6836978415840795128">"დათვი"</string>
+ <string name="spoken_emoji_1F418" msgid="7926161463897783691">"სპილო"</string>
+ <string name="spoken_emoji_1F419" msgid="1055233959755784186">"რვაფეხა"</string>
+ <string name="spoken_emoji_1F41A" msgid="5195666556511558060">"სპირალური ნიჟარა"</string>
+ <string name="spoken_emoji_1F41B" msgid="7652480167465557832">"ხოჭო"</string>
+ <string name="spoken_emoji_1F41C" msgid="1123461148697574239">"ჭიანჭველა"</string>
+ <string name="spoken_emoji_1F41D" msgid="718579308764058851">"ფუტკარი"</string>
+ <string name="spoken_emoji_1F41E" msgid="6766305509608115467">"ჭიამაია"</string>
+ <string name="spoken_emoji_1F41F" msgid="1207261298343160838">"თევზი"</string>
+ <string name="spoken_emoji_1F420" msgid="1041145003133609221">"ტროპიკული თევზი"</string>
+ <string name="spoken_emoji_1F421" msgid="1748378324417438751">"ზღარბთევზა"</string>
+ <string name="spoken_emoji_1F422" msgid="4106724877523329148">"კუ"</string>
+ <string name="spoken_emoji_1F423" msgid="4077407945958691907">"წიწილა და ნაჭუჭი"</string>
+ <string name="spoken_emoji_1F424" msgid="6911326019270172283">"წიწილა"</string>
+ <string name="spoken_emoji_1F425" msgid="5466514196557885577">"წიწილას სახე"</string>
+ <string name="spoken_emoji_1F426" msgid="2163979138772892755">"ჩიტი"</string>
+ <string name="spoken_emoji_1F427" msgid="3585670324511212961">"პინგვინი"</string>
+ <string name="spoken_emoji_1F428" msgid="7955440808647898579">"კოალა"</string>
+ <string name="spoken_emoji_1F429" msgid="5028269352809819035">"პუდელი"</string>
+ <string name="spoken_emoji_1F42A" msgid="4681926706404032484">"ცალკუზა აქლემი"</string>
+ <string name="spoken_emoji_1F42B" msgid="2725166074981558322">"ორკუზა აქლემი"</string>
+ <string name="spoken_emoji_1F42C" msgid="6764791873413727085">"დელფინი"</string>
+ <string name="spoken_emoji_1F42D" msgid="1033643138546864251">"თაგვის სახე"</string>
+ <string name="spoken_emoji_1F42E" msgid="8099223337120508820">"ძროხის სახე"</string>
+ <string name="spoken_emoji_1F42F" msgid="2104743989330781572">"ვეფხვის სახე"</string>
+ <string name="spoken_emoji_1F430" msgid="525492897063150160">"კურდღლის სახე"</string>
+ <string name="spoken_emoji_1F431" msgid="6051358666235016851">"კატის სახე"</string>
+ <string name="spoken_emoji_1F432" msgid="7698001871193018305">"დრაკონის სახე"</string>
+ <string name="spoken_emoji_1F433" msgid="3762356053512899326">"მჩქეფარე ვეშაპი"</string>
+ <string name="spoken_emoji_1F434" msgid="3619943222159943226">"ცხენის სახე"</string>
+ <string name="spoken_emoji_1F435" msgid="59199202683252958">"მაიმუნის სახე"</string>
+ <string name="spoken_emoji_1F436" msgid="340544719369009828">"ძაღლის სახე"</string>
+ <string name="spoken_emoji_1F437" msgid="1219818379784982585">"ღორის სახე"</string>
+ <string name="spoken_emoji_1F438" msgid="9128124743321008210">"ბაყაყის სახე"</string>
+ <string name="spoken_emoji_1F439" msgid="1424161319554642266">"ზაზუნას სახე"</string>
+ <string name="spoken_emoji_1F43A" msgid="6727645488430385584">"მგლის სახე"</string>
+ <string name="spoken_emoji_1F43B" msgid="5397170068392865167">"დათვის სახე"</string>
+ <string name="spoken_emoji_1F43C" msgid="2715995734367032431">"პანდას სახე"</string>
+ <string name="spoken_emoji_1F43D" msgid="6005480717951776597">"ღორის ცხვირი"</string>
+ <string name="spoken_emoji_1F43E" msgid="8917626103219080547">"თათების კვალი"</string>
+ <string name="spoken_emoji_1F440" msgid="7144338258163384433">"თვალები"</string>
+ <string name="spoken_emoji_1F442" msgid="1905515392292676124">"ყური"</string>
+ <string name="spoken_emoji_1F443" msgid="1491504447758933115">"ცხვირი"</string>
+ <string name="spoken_emoji_1F444" msgid="3654613047946080332">"პირი"</string>
+ <string name="spoken_emoji_1F445" msgid="7024905244040509204">"ენა"</string>
+ <string name="spoken_emoji_1F446" msgid="2150365643636471745">"თეთრი ზევით მიმართული შეტრიალებული საჩვენებელი"</string>
+ <string name="spoken_emoji_1F447" msgid="8794022344940891388">"თეთრი ქვევით მიმართული შეტრიალებული საჩვენებელი"</string>
+ <string name="spoken_emoji_1F448" msgid="3261812959215550650">"თეთრი მარცხნივ მიმართული შეტრიალებული საჩვენებელი"</string>
+ <string name="spoken_emoji_1F449" msgid="4764447975177805991">"თეთრი მარჯვნივ მიმართული შეტრიალებული საჩვენებელი"</string>
+ <string name="spoken_emoji_1F44A" msgid="7197417095486424841">"მომუშტული ხელი"</string>
+ <string name="spoken_emoji_1F44B" msgid="1975968945250833117">"ხელის დაქნევა"</string>
+ <string name="spoken_emoji_1F44C" msgid="3185919567897876562">"ხელის ნიშანი OK"</string>
+ <string name="spoken_emoji_1F44D" msgid="6182553970602667815">"მაღლა აწეული ცერი"</string>
+ <string name="spoken_emoji_1F44E" msgid="8030851867365111809">"დაბლა დაწეული ცერი"</string>
+ <string name="spoken_emoji_1F44F" msgid="5148753662268213389">"ტაშის დაკვრა"</string>
+ <string name="spoken_emoji_1F450" msgid="1012021072085157054">"ღია ხელები"</string>
+ <string name="spoken_emoji_1F451" msgid="8257466714629051320">"გვირგვინი"</string>
+ <string name="spoken_emoji_1F452" msgid="4567394011149905466">"ქალის ქუდი"</string>
+ <string name="spoken_emoji_1F453" msgid="5978410551173163010">"სათვალეები"</string>
+ <string name="spoken_emoji_1F454" msgid="348469036193323252">"ჰალსტუხი"</string>
+ <string name="spoken_emoji_1F455" msgid="5665118831861433578">"მაისური"</string>
+ <string name="spoken_emoji_1F456" msgid="1890991330923356408">"ჯინსი"</string>
+ <string name="spoken_emoji_1F457" msgid="3904310482655702620">"კაბა"</string>
+ <string name="spoken_emoji_1F458" msgid="5704243858031107692">"კიმონო"</string>
+ <string name="spoken_emoji_1F459" msgid="3553148747050035251">"ბიკინი"</string>
+ <string name="spoken_emoji_1F45A" msgid="1389654639484716101">"ქალის ტანსაცმელი"</string>
+ <string name="spoken_emoji_1F45B" msgid="1113293170254222904">"საფულე"</string>
+ <string name="spoken_emoji_1F45C" msgid="3410257778598006936">"ხელჩანთა"</string>
+ <string name="spoken_emoji_1F45D" msgid="812176504300064819">"ქისა"</string>
+ <string name="spoken_emoji_1F45E" msgid="2901741399934723562">"კაცის ფეხსაცმელი"</string>
+ <string name="spoken_emoji_1F45F" msgid="6828566359287798863">"სპორტული ფეხსაცმელი"</string>
+ <string name="spoken_emoji_1F460" msgid="305863879170420855">"მაღალქუსლიანი ფეხსაცმელი"</string>
+ <string name="spoken_emoji_1F461" msgid="5160493217831417630">"ქალის სანდალი"</string>
+ <string name="spoken_emoji_1F462" msgid="1722897795554863734">"ქალის ჩექმა"</string>
+ <string name="spoken_emoji_1F463" msgid="5850772903593010699">"ფეხის კვალი"</string>
+ <string name="spoken_emoji_1F464" msgid="1228335905487734913">"ბიუსტი სილუეტში"</string>
+ <string name="spoken_emoji_1F465" msgid="4461307702499679879">"ბიუსეტები სილუეტში"</string>
+ <string name="spoken_emoji_1F466" msgid="1938873085514108889">"ბიჭი"</string>
+ <string name="spoken_emoji_1F467" msgid="8237080594860144998">"გოგო"</string>
+ <string name="spoken_emoji_1F468" msgid="6081300722526675382">"კაცი"</string>
+ <string name="spoken_emoji_1F469" msgid="1090140923076108158">"ქალი"</string>
+ <string name="spoken_emoji_1F46A" msgid="5063570981942606595">"ოჯახი"</string>
+ <string name="spoken_emoji_1F46B" msgid="6795882374287327952">"ხელჩაკიდებული ქალი და კაცი"</string>
+ <string name="spoken_emoji_1F46C" msgid="6844464165783964495">"ხელჩაკიდებული ორი კაცი"</string>
+ <string name="spoken_emoji_1F46D" msgid="2316773068014053180">"ხელჩაკიდებული ორი ქალი"</string>
+ <string name="spoken_emoji_1F46E" msgid="5897625605860822401">"პოლიციელი"</string>
+ <string name="spoken_emoji_1F46F" msgid="7716871657717641490">"ქალი კურდღის ყურებით"</string>
+ <string name="spoken_emoji_1F470" msgid="6409995400510338892">"პატარძალი პირბადით"</string>
+ <string name="spoken_emoji_1F471" msgid="3058247860441670806">"ქერათმიანი ადამიანი"</string>
+ <string name="spoken_emoji_1F472" msgid="3928854667819339142">"კაცი გუა-პი-მაოს ქუდით"</string>
+ <string name="spoken_emoji_1F473" msgid="5921952095808988381">"კაცი ჩალმით"</string>
+ <string name="spoken_emoji_1F474" msgid="1082237499496725183">"ხანდაზმული ადამიანი"</string>
+ <string name="spoken_emoji_1F475" msgid="7280323988642212761">"ხანდაზმული ქალი"</string>
+ <string name="spoken_emoji_1F476" msgid="4713322657821088296">"ჩვილი"</string>
+ <string name="spoken_emoji_1F477" msgid="2197036131029221370">"მშენებელი"</string>
+ <string name="spoken_emoji_1F478" msgid="7245521193493488875">"პრინცესა"</string>
+ <string name="spoken_emoji_1F479" msgid="6876475321015553972">"იაპონელი კაციჭამია"</string>
+ <string name="spoken_emoji_1F47A" msgid="3900813633102703571">"იაპონელი გობლინი"</string>
+ <string name="spoken_emoji_1F47B" msgid="2608250873194079390">"მოჩვენება"</string>
+ <string name="spoken_emoji_1F47C" msgid="3838699131276537421">"ჩვილი ანგელოზი"</string>
+ <string name="spoken_emoji_1F47D" msgid="2874077455888369538">"უცხოპლანეტელი"</string>
+ <string name="spoken_emoji_1F47E" msgid="3642607168625579507">"უცხოპლანეტელი მონსტრი"</string>
+ <string name="spoken_emoji_1F47F" msgid="441605977269926252">"ჭინკა"</string>
+ <string name="spoken_emoji_1F480" msgid="3696253485164878739">"თავის ქალა"</string>
+ <string name="spoken_emoji_1F481" msgid="320408708521966893">"ინფორმაციის პუნქტის თანამშრომელი"</string>
+ <string name="spoken_emoji_1F482" msgid="3424354860245608949">"მცველი"</string>
+ <string name="spoken_emoji_1F483" msgid="3221113594843849083">"მოცეკვავე"</string>
+ <string name="spoken_emoji_1F484" msgid="7348014979080444885">"პომადა"</string>
+ <string name="spoken_emoji_1F485" msgid="6133507975565116339">"მანიკური"</string>
+ <string name="spoken_emoji_1F486" msgid="9085459968247394155">"სახის მასაჟი"</string>
+ <string name="spoken_emoji_1F487" msgid="1479113637259592150">"ვარცხნილობა"</string>
+ <string name="spoken_emoji_1F488" msgid="6922559285234100252">"დალაქის ბოძი"</string>
+ <string name="spoken_emoji_1F489" msgid="8114863680950147305">"შპრიცი"</string>
+ <string name="spoken_emoji_1F48A" msgid="8526843630145963032">"აბი"</string>
+ <string name="spoken_emoji_1F48B" msgid="2538528967897640292">"კოცნის ნიშანი"</string>
+ <string name="spoken_emoji_1F48C" msgid="1681173271652890232">"სასიყვარულო წერილი"</string>
+ <string name="spoken_emoji_1F48D" msgid="8259886164999042373">"დარეკვა"</string>
+ <string name="spoken_emoji_1F48E" msgid="8777981696011111101">"ძვირფასი ქვა"</string>
+ <string name="spoken_emoji_1F48F" msgid="741593675183677907">"კოცნა"</string>
+ <string name="spoken_emoji_1F490" msgid="4482549128959806736">"ბუკეტი"</string>
+ <string name="spoken_emoji_1F491" msgid="2305245307882441500">"წყვილი გულით"</string>
+ <string name="spoken_emoji_1F492" msgid="3884119934804475732">"ქორწილი"</string>
+ <string name="spoken_emoji_1F493" msgid="1208828371565525121">"მფეთქავი გული"</string>
+ <string name="spoken_emoji_1F494" msgid="6198876398509338718">"გატეხილი გული"</string>
+ <string name="spoken_emoji_1F495" msgid="9206202744967130919">"ორი გული"</string>
+ <string name="spoken_emoji_1F496" msgid="5436953041732207775">"მღელვარე გული"</string>
+ <string name="spoken_emoji_1F497" msgid="7285142863951448473">"დიდი გული"</string>
+ <string name="spoken_emoji_1F498" msgid="7940131245037575715">"გული ისრით"</string>
+ <string name="spoken_emoji_1F499" msgid="4453235040265550009">"ლურჯი გული"</string>
+ <string name="spoken_emoji_1F49A" msgid="6262178648366971405">"მწვანე გული"</string>
+ <string name="spoken_emoji_1F49B" msgid="8085384999750714368">"ყვითელი გული"</string>
+ <string name="spoken_emoji_1F49C" msgid="453829540120898698">"მეწამული გული"</string>
+ <string name="spoken_emoji_1F49D" msgid="3460534750224161888">"გული ლენტით"</string>
+ <string name="spoken_emoji_1F49E" msgid="4490636226072523867">"მბრუნავი გულები"</string>
+ <string name="spoken_emoji_1F49F" msgid="2059319756421226336">"გულის დეკორაცია"</string>
+ <string name="spoken_emoji_1F4A0" msgid="1954850380550212038">"ალმასის ფორმა შიგნით წერტილით"</string>
+ <string name="spoken_emoji_1F4A1" msgid="403137413540909021">"ნათურა"</string>
+ <string name="spoken_emoji_1F4A2" msgid="2604192053295622063">"სიბრაზის სიმბოლო"</string>
+ <string name="spoken_emoji_1F4A3" msgid="6378351742957821735">"ბომბი"</string>
+ <string name="spoken_emoji_1F4A4" msgid="7217736258870346625">"ძილის სიმბოლო"</string>
+ <string name="spoken_emoji_1F4A5" msgid="5401995723541239858">"დაჯახების სიმბოლო"</string>
+ <string name="spoken_emoji_1F4A6" msgid="3837802182716483848">"დაღვრილი ოფლის სიმბოლო"</string>
+ <string name="spoken_emoji_1F4A7" msgid="5718438987757885141">"წვეთი"</string>
+ <string name="spoken_emoji_1F4A8" msgid="4472108229720006377">"შხაპის სიმბოლო"</string>
+ <string name="spoken_emoji_1F4A9" msgid="1240958472788430032">"განავალი"</string>
+ <string name="spoken_emoji_1F4AA" msgid="8427525538635146416">"დაჭიმული კუნთი"</string>
+ <string name="spoken_emoji_1F4AB" msgid="5484114759939427459">"თავბრუსხვევის სიმბოლო"</string>
+ <string name="spoken_emoji_1F4AC" msgid="5571196638219612682">"დიალოგის ბუშტი"</string>
+ <string name="spoken_emoji_1F4AD" msgid="353174619257798652">"ფიქრის ბუშტი"</string>
+ <string name="spoken_emoji_1F4AE" msgid="1223142786927162641">"თეთრი ყვავილი"</string>
+ <string name="spoken_emoji_1F4AF" msgid="3526278354452138397">"ასქულიანი სიმბოლო"</string>
+ <string name="spoken_emoji_1F4B0" msgid="4124102195175124156">"ფულის ჩანთა"</string>
+ <string name="spoken_emoji_1F4B1" msgid="8339494003418572905">"ვალუტის გაცვლა"</string>
+ <string name="spoken_emoji_1F4B2" msgid="3179159430187243132">"დოლარის მუქი ნიშანი"</string>
+ <string name="spoken_emoji_1F4B3" msgid="5375412518221759596">"საკრედიტო ბარათი"</string>
+ <string name="spoken_emoji_1F4B4" msgid="1068592463669453204">"ბანკნოტი იენის ნიშნით"</string>
+ <string name="spoken_emoji_1F4B5" msgid="1426708699891832564">"ბანკნოტი დოლარის ნიშნით"</string>
+ <string name="spoken_emoji_1F4B6" msgid="8289249930736444837">"ბანკნოტი ევროს ნიშნით"</string>
+ <string name="spoken_emoji_1F4B7" msgid="5245100496860739429">"ბანკნოტი ფუნტის ნიშნით"</string>
+ <string name="spoken_emoji_1F4B8" msgid="4401099580477164440">"ფრთიანი ფული"</string>
+ <string name="spoken_emoji_1F4B9" msgid="647509393536679903">"მატებადი დიაგრამა იენის ნიშნით"</string>
+ <string name="spoken_emoji_1F4BA" msgid="1269737854891046321">"ადგილი"</string>
+ <string name="spoken_emoji_1F4BB" msgid="6252883563347816451">"პერსონალური კომპიუტერი"</string>
+ <string name="spoken_emoji_1F4BC" msgid="6182597732218446206">"ქეისი"</string>
+ <string name="spoken_emoji_1F4BD" msgid="5820961044768829176">"Minidisc"</string>
+ <string name="spoken_emoji_1F4BE" msgid="4754542485835379808">"Floppy დიკსი"</string>
+ <string name="spoken_emoji_1F4BF" msgid="2237481756984721795">"ოპტიკური დისკი"</string>
+ <string name="spoken_emoji_1F4C0" msgid="491582501089694461">"DVD"</string>
+ <string name="spoken_emoji_1F4C1" msgid="6645461382494158111">"ფაილის საქაღალდე"</string>
+ <string name="spoken_emoji_1F4C2" msgid="8095638715523765338">"ღია საქაღალდე"</string>
+ <string name="spoken_emoji_1F4C3" msgid="3727274466173970142">"მოღუნული ქაღალდი"</string>
+ <string name="spoken_emoji_1F4C4" msgid="4382570710795501612">"გვერდი პირაღმა"</string>
+ <string name="spoken_emoji_1F4C5" msgid="8693944622627762487">"კალენდარი"</string>
+ <string name="spoken_emoji_1F4C6" msgid="8469908708708424640">"მოსახევი კალენდარი"</string>
+ <string name="spoken_emoji_1F4C7" msgid="2665313547987324495">"ბარათების ინდექსი"</string>
+ <string name="spoken_emoji_1F4C8" msgid="8007686702282833600">"მატებადი დიაგრამა"</string>
+ <string name="spoken_emoji_1F4C9" msgid="2271951411192893684">"კლებადი დიაგრამა"</string>
+ <string name="spoken_emoji_1F4CA" msgid="3525692829622381444">"სვეტებიანი დიაგრამა"</string>
+ <string name="spoken_emoji_1F4CB" msgid="977639227554095521">"ფურცლის სამაგრი დაფა"</string>
+ <string name="spoken_emoji_1F4CC" msgid="156107396088741574">"საკანცელარიო ჭიკარტი"</string>
+ <string name="spoken_emoji_1F4CD" msgid="4266572175361190231">"მომრგვალებული ჭიკარტი"</string>
+ <string name="spoken_emoji_1F4CE" msgid="6294288509864968290">"ფურცლის საკინძი"</string>
+ <string name="spoken_emoji_1F4CF" msgid="149679400831136810">"სწორი სახაზავი"</string>
+ <string name="spoken_emoji_1F4D0" msgid="8130339336619202915">"სამკუთხა სახაზავი"</string>
+ <string name="spoken_emoji_1F4D1" msgid="5852176364856284968">"სანიშნის ყურები"</string>
+ <string name="spoken_emoji_1F4D2" msgid="2276810154105920052">"დავთარი"</string>
+ <string name="spoken_emoji_1F4D3" msgid="5873386492793610808">"რვეული"</string>
+ <string name="spoken_emoji_1F4D4" msgid="4754469936418776360">"რვეული დეკორატიული ყდით"</string>
+ <string name="spoken_emoji_1F4D5" msgid="4642713351802778905">"დახურული წიგნი"</string>
+ <string name="spoken_emoji_1F4D6" msgid="6987347918381807186">"ღია წიგნი"</string>
+ <string name="spoken_emoji_1F4D7" msgid="7813394163241379223">"მწვანე წიგნი"</string>
+ <string name="spoken_emoji_1F4D8" msgid="7189799718984979521">"ლურჯი წიგნი"</string>
+ <string name="spoken_emoji_1F4D9" msgid="3874664073186440225">"ნარინჯისფერი წიგნი"</string>
+ <string name="spoken_emoji_1F4DA" msgid="872212072924287762">"წიგნები"</string>
+ <string name="spoken_emoji_1F4DB" msgid="2015183603583392969">"ბეჯი"</string>
+ <string name="spoken_emoji_1F4DC" msgid="5075845110932456783">"გრაგნილი"</string>
+ <string name="spoken_emoji_1F4DD" msgid="2494006707147586786">"ჩანაწერი"</string>
+ <string name="spoken_emoji_1F4DE" msgid="7883008605002117671">"ყურმილი"</string>
+ <string name="spoken_emoji_1F4DF" msgid="3538610110623780465">"პეიჯერი"</string>
+ <string name="spoken_emoji_1F4E0" msgid="2960778342609543077">"ფაქსის აპარატი"</string>
+ <string name="spoken_emoji_1F4E1" msgid="6269733703719242108">"სატელიტური ანტენა"</string>
+ <string name="spoken_emoji_1F4E2" msgid="1987535386302883116">"რუპორი"</string>
+ <string name="spoken_emoji_1F4E3" msgid="5588916572878599224">"გამამხნევებელი მეგაფონი"</string>
+ <string name="spoken_emoji_1F4E4" msgid="2063561529097749707">"გამავალ წერილთა სათავსო"</string>
+ <string name="spoken_emoji_1F4E5" msgid="3232462702926143576">"შემოსულების სათავსო"</string>
+ <string name="spoken_emoji_1F4E6" msgid="3399454337197561635">"ამანათი"</string>
+ <string name="spoken_emoji_1F4E7" msgid="5557136988503873238">"ელფოსტის სიმბოლო"</string>
+ <string name="spoken_emoji_1F4E8" msgid="30698793974124123">"შემომავალი კონვერტი"</string>
+ <string name="spoken_emoji_1F4E9" msgid="5947550337678643166">"კონვერტი ქვედა ისრით ზევით"</string>
+ <string name="spoken_emoji_1F4EA" msgid="772614045207213751">"დახურული საფოსტო ყუთი დაშვებული ალმით"</string>
+ <string name="spoken_emoji_1F4EB" msgid="6491414165464146137">"დახურული საფოსტო ყუთი აღმართული ალმით"</string>
+ <string name="spoken_emoji_1F4EC" msgid="7369517138779988438">"ღია საფოსტო ყუთი აღმართული ალმით"</string>
+ <string name="spoken_emoji_1F4ED" msgid="5657520436285454241">"ღია საფოსტო ყუთი დაშვებული ალმით"</string>
+ <string name="spoken_emoji_1F4EE" msgid="8464138906243608614">"საფოსტო ყუთი"</string>
+ <string name="spoken_emoji_1F4EF" msgid="8801427577198798226">"საფოსტო საყვირი"</string>
+ <string name="spoken_emoji_1F4F0" msgid="6330208624731662525">"გაზეთი"</string>
+ <string name="spoken_emoji_1F4F1" msgid="3966503935581675695">"მობილური ტელეფონი"</string>
+ <string name="spoken_emoji_1F4F2" msgid="1057540341746100087">"მობილური ტელეფონი მარჯვნივ მიმართული ისრით მარცხნივ"</string>
+ <string name="spoken_emoji_1F4F3" msgid="5003984447315754658">"ვიბრაციის რეჟიმი"</string>
+ <string name="spoken_emoji_1F4F4" msgid="5549847566968306253">"მობილური ტელეფონის გამორთვა"</string>
+ <string name="spoken_emoji_1F4F5" msgid="3660199448671699238">"მობილური ტელეფონები აკრძალულია"</string>
+ <string name="spoken_emoji_1F4F6" msgid="2676974903233268860">"ანტენა სვეტებით"</string>
+ <string name="spoken_emoji_1F4F7" msgid="2643891943105989039">"ფოტოაპარატი"</string>
+ <string name="spoken_emoji_1F4F9" msgid="4475626303058218048">"ვიდეოკამერა"</string>
+ <string name="spoken_emoji_1F4FA" msgid="1079796186652960775">"ტელევიზია"</string>
+ <string name="spoken_emoji_1F4FB" msgid="3848729587403760645">"რადიო"</string>
+ <string name="spoken_emoji_1F4FC" msgid="8370432508874310054">"ვიდეოკასეტა"</string>
+ <string name="spoken_emoji_1F500" msgid="2389947994502144547">"გადაჯვარედინებული მარჯვნივ მიმართული ისრები"</string>
+ <string name="spoken_emoji_1F501" msgid="2132188352433347009">"საათის მიმართულებით მარჯვენა და მარცხენა ღია წრიული ისრები"</string>
+ <string name="spoken_emoji_1F502" msgid="2361976580513178391">"საათის მიმართულებით მარჯვენა და მარცხენა ღია წრიული ისრები, ერთიანით წრეში"</string>
+ <string name="spoken_emoji_1F503" msgid="8936283551917858793">"საათის მიმართულებით ქვედა და ზედა ღია წრიული ისრები"</string>
+ <string name="spoken_emoji_1F504" msgid="708290317843535943">"საათის საწინააღმდეგო მიმართულებით ქვედა და ზედა ღია წრიული ისრები"</string>
+ <string name="spoken_emoji_1F505" msgid="6348909939004951860">"დაბალი სიკაშკაშის სიმბოლო"</string>
+ <string name="spoken_emoji_1F506" msgid="4449609297521280173">"მაღალი სიკაშკაშის სიმბოლო"</string>
+ <string name="spoken_emoji_1F507" msgid="7136386694923708448">"ხაზგადასმული სპიკერი"</string>
+ <string name="spoken_emoji_1F508" msgid="5063567689831527865">"სპიკერი"</string>
+ <string name="spoken_emoji_1F509" msgid="3948050077992370791">"სპიკერი ხმის ერთი ტალღით"</string>
+ <string name="spoken_emoji_1F50A" msgid="5818194948677277197">"სპიკერი ხმის სამი ტალღით"</string>
+ <string name="spoken_emoji_1F50B" msgid="8083470451266295876">"ბატარეა"</string>
+ <string name="spoken_emoji_1F50C" msgid="7793219132036431680">"ელექტრონული შესაერთებელი"</string>
+ <string name="spoken_emoji_1F50D" msgid="8140244710637926780">"მარცხნივ მიმართული გამადიდებელი ლუპა"</string>
+ <string name="spoken_emoji_1F50E" msgid="4751821352839693365">"მარჯვნივ მიმართული გამადიდებელი ლუპა"</string>
+ <string name="spoken_emoji_1F50F" msgid="915079280472199605">"საკეტი მელნის კალმით"</string>
+ <string name="spoken_emoji_1F510" msgid="7658381761691758318">"დახურული საკეტი გასაღებით"</string>
+ <string name="spoken_emoji_1F511" msgid="262319867774655688">"გასაღები"</string>
+ <string name="spoken_emoji_1F512" msgid="5628688337255115175">"საკეტი"</string>
+ <string name="spoken_emoji_1F513" msgid="8579201846619420981">"ღია საკეტი"</string>
+ <string name="spoken_emoji_1F514" msgid="7027268683047322521">"ზარი"</string>
+ <string name="spoken_emoji_1F515" msgid="8903179856036069242">"ხაზგადასმული ზარი"</string>
+ <string name="spoken_emoji_1F516" msgid="108097933937925381">"სანიშნე"</string>
+ <string name="spoken_emoji_1F517" msgid="2450846665734313397">"ბმულის სიმბოლო"</string>
+ <string name="spoken_emoji_1F518" msgid="7028220286841437832">"არჩევანის ღილაკი"</string>
+ <string name="spoken_emoji_1F519" msgid="8211189165075445687">"Back მარცხენა ისრით ზევით"</string>
+ <string name="spoken_emoji_1F51A" msgid="823966751787338892">"End მარცხენა ისრით ზევით"</string>
+ <string name="spoken_emoji_1F51B" msgid="5920570742107943382">"On ძახილის ნიშნით, მარცხენა მარჯვენა ისრით ზევით"</string>
+ <string name="spoken_emoji_1F51C" msgid="110609810659826676">"Soon მარჯვენა ისრით ზევით"</string>
+ <string name="spoken_emoji_1F51D" msgid="4087697222026095447">"Top ზედა ისრით ზევით"</string>
+ <string name="spoken_emoji_1F51E" msgid="8512873526157201775">"18 წლამდე აკრძალვის სიმბოლო"</string>
+ <string name="spoken_emoji_1F51F" msgid="8673370823728653973">"კლავიში ათი"</string>
+ <string name="spoken_emoji_1F520" msgid="7335109890337048900">"ლათინური დიდი ასოების შეყვანის სიმბოლო"</string>
+ <string name="spoken_emoji_1F521" msgid="2693185864450925778">"ლათინური პატარა ასოების შეყვანის სიმბოლო"</string>
+ <string name="spoken_emoji_1F522" msgid="8419130286280673347">"რიცხვების შეყვანის სიმბოლო"</string>
+ <string name="spoken_emoji_1F523" msgid="3318053476401719421">"სიმბოლოთა შეყვანის სიმბოლო"</string>
+ <string name="spoken_emoji_1F524" msgid="1625073997522316331">"ლათინური ასოების შეყვანის სიმბოლო"</string>
+ <string name="spoken_emoji_1F525" msgid="4083884189172963790">"ხანძარი"</string>
+ <string name="spoken_emoji_1F526" msgid="2035494936742643580">"ელექტრო ლამპარი"</string>
+ <string name="spoken_emoji_1F527" msgid="134257142354034271">"ქანჩი"</string>
+ <string name="spoken_emoji_1F528" msgid="700627429570609375">"ჩაქუჩი"</string>
+ <string name="spoken_emoji_1F529" msgid="7480548235904988573">"თხილი და სამტვრევი"</string>
+ <string name="spoken_emoji_1F52A" msgid="7613580031502317893">"ჰოჩოს დანა"</string>
+ <string name="spoken_emoji_1F52B" msgid="4554906608328118613">"პისტოლეტი"</string>
+ <string name="spoken_emoji_1F52C" msgid="1330294501371770790">"მიკროსკოპი"</string>
+ <string name="spoken_emoji_1F52D" msgid="7549551775445177140">"ტელესკოპი"</string>
+ <string name="spoken_emoji_1F52E" msgid="4457099417872625141">"კრისტალის ბურთი"</string>
+ <string name="spoken_emoji_1F52F" msgid="8899031001317442792">"ექვსქიმა ვარსკვლავი შუა წერტილით"</string>
+ <string name="spoken_emoji_1F530" msgid="3572898444281774023">"დამწყების იაპონური სიმბოლო"</string>
+ <string name="spoken_emoji_1F531" msgid="5225633376450025396">"სამკაპის ემბლემა"</string>
+ <string name="spoken_emoji_1F532" msgid="9169568490485180779">"შავი კვადრატული ღილაკი"</string>
+ <string name="spoken_emoji_1F533" msgid="6554193837201918598">"თეთრი კვადრატული ღილაკი"</string>
+ <string name="spoken_emoji_1F534" msgid="8339298801331865340">"დიდი წითელი წრე"</string>
+ <string name="spoken_emoji_1F535" msgid="1227403104835533512">"დიდი ლურჯი წრე"</string>
+ <string name="spoken_emoji_1F536" msgid="5477372445510469331">"დიდი ნარინჯისფერი ალმასი"</string>
+ <string name="spoken_emoji_1F537" msgid="3158915214347274626">"დიდი ლურჯი ალმასი"</string>
+ <string name="spoken_emoji_1F538" msgid="4300084249474451991">"პატარა ნარინჯისფერი ალმასი"</string>
+ <string name="spoken_emoji_1F539" msgid="6535159756325742275">"პატარა ლურჯი ალმასი"</string>
+ <string name="spoken_emoji_1F53A" msgid="3728196273988781389">"ზევით მიმართული წითელი სამკუთხედი"</string>
+ <string name="spoken_emoji_1F53B" msgid="7182097039614128707">"ქვევით მიმართული წითელი სამკუთხედი"</string>
+ <string name="spoken_emoji_1F53C" msgid="4077022046319615029">"ზევით მიმართული პატარა წითელი სამკუთხედი"</string>
+ <string name="spoken_emoji_1F53D" msgid="3939112784894620713">"ქვევით მიმართული პატარა წითელი სამკუთხედი"</string>
+ <string name="spoken_emoji_1F550" msgid="7761392621689986218">"საათი, რომელიც აჩვენებს პირველ საათს"</string>
+ <string name="spoken_emoji_1F551" msgid="2699448504113431716">"საათი, რომელიც აჩვენებს ორ საათს"</string>
+ <string name="spoken_emoji_1F552" msgid="5872107867411853750">"საათი, რომელიც აჩვენებს სამ საათს"</string>
+ <string name="spoken_emoji_1F553" msgid="8490966286158640743">"საათი, რომელიც აჩვენებს ოთხ საათს"</string>
+ <string name="spoken_emoji_1F554" msgid="7662585417832909280">"საათი, რომელიც აჩვენებს ხუთ საათს"</string>
+ <string name="spoken_emoji_1F555" msgid="5564698204520412009">"საათი, რომელიც აჩვენებს ექვს საათს"</string>
+ <string name="spoken_emoji_1F556" msgid="7325712194836512205">"საათი, რომელიც აჩვენებს შვიდ საათს"</string>
+ <string name="spoken_emoji_1F557" msgid="4398343183682848693">"საათი, რომელიც აჩვენებს რვა საათს"</string>
+ <string name="spoken_emoji_1F558" msgid="3110507820404018172">"საათი, რომელიც აჩვენებს ცხრა საათს"</string>
+ <string name="spoken_emoji_1F559" msgid="2972160366448337839">"საათი, რომელიც აჩვენებს ათ საათს"</string>
+ <string name="spoken_emoji_1F55A" msgid="5568112876681714834">"საათი, რომელიც აჩვენებს თერთმეტ საათს"</string>
+ <string name="spoken_emoji_1F55B" msgid="6731739890330659276">"საათი, რომელიც აჩვენებს თორმეტ საათს"</string>
+ <string name="spoken_emoji_1F55C" msgid="7838853679879115890">"საათი, რომელიც აჩვენებს ორის ნახევარს"</string>
+ <string name="spoken_emoji_1F55D" msgid="3518832144255922544">"საათი, რომელიც აჩვენებს სამის ნახევარს"</string>
+ <string name="spoken_emoji_1F55E" msgid="3092760695634993002">"საათი, რომელიც აჩვენებს ოთხის ნახევარს"</string>
+ <string name="spoken_emoji_1F55F" msgid="2326720311892906763">"საათი, რომელიც აჩვენებს ხუთის ნახევარს"</string>
+ <string name="spoken_emoji_1F560" msgid="5771339179963924448">"საათი, რომელიც აჩვენებს ექვსის ნახევარს"</string>
+ <string name="spoken_emoji_1F561" msgid="3139944777062475382">"საათი, რომელიც აჩვენებს შვიდის ნახევარს"</string>
+ <string name="spoken_emoji_1F562" msgid="8273944611162457084">"საათი, რომელიც აჩვენებს რვის ნახევარს"</string>
+ <string name="spoken_emoji_1F563" msgid="8643976903718136299">"საათი, რომელიც აჩვენებს ცხრის ნახევარს"</string>
+ <string name="spoken_emoji_1F564" msgid="3511070239796141638">"საათი, რომელიც აჩვენებს ათის ნახევარს"</string>
+ <string name="spoken_emoji_1F565" msgid="4567451985272963088">"საათი, რომელიც აჩვენებს თერთმეტის ნახევარს"</string>
+ <string name="spoken_emoji_1F566" msgid="2790552288169929810">"საათი, რომელიც აჩვენებს თორმეტის ნახევარს"</string>
+ <string name="spoken_emoji_1F567" msgid="9026037362100689337">"საათი, რომელიც აჩვენებს პირველის ნახევარს"</string>
+ <string name="spoken_emoji_1F5FB" msgid="9037503671676124015">"ფუძიამა"</string>
+ <string name="spoken_emoji_1F5FC" msgid="1409415995817242150">"ტოკიოს ანძა"</string>
+ <string name="spoken_emoji_1F5FD" msgid="2562726956654429582">"თავისუფლების ქანდაკება"</string>
+ <string name="spoken_emoji_1F5FE" msgid="1184469756905210580">"იაპონიის სილუეტი"</string>
+ <string name="spoken_emoji_1F5FF" msgid="6003594799354942297">"მოიანის ქვის ქანდაკება"</string>
+ <string name="spoken_emoji_1F600" msgid="7601109464776835283">"სასტიკი სახე"</string>
+ <string name="spoken_emoji_1F601" msgid="746026523967444503">"სასტიკი სახე მომღიმარი თვალებით"</string>
+ <string name="spoken_emoji_1F602" msgid="8354558091785198246">"სახე სიხარულის ცრემლებით"</string>
+ <string name="spoken_emoji_1F603" msgid="3861022912544159823">"მომღიმარი პირდაღებული სახე"</string>
+ <string name="spoken_emoji_1F604" msgid="5119021072966343531">"მომღიმარი სახე, ღია პირით და მოცინარი თვალებით"</string>
+ <string name="spoken_emoji_1F605" msgid="6140813923973561735">"მომღიმარი სახე, ღია პირით და ცივი ოფლით"</string>
+ <string name="spoken_emoji_1F606" msgid="3549936813966832799">"მომღიმარი სახე, ღია პირით და კარგად დახუჭული თვალებით"</string>
+ <string name="spoken_emoji_1F607" msgid="2826424078212384817">"მომღიმარი სახე მნათი წრით"</string>
+ <string name="spoken_emoji_1F608" msgid="7343559595089811640">"მომღიმარი სახე რქებით"</string>
+ <string name="spoken_emoji_1F609" msgid="5481030187207504405">"თვალის ჩაკვრა"</string>
+ <string name="spoken_emoji_1F60A" msgid="5023337769148679767">"მომღიმარი სახე მომღიმარი თვალებით"</string>
+ <string name="spoken_emoji_1F60B" msgid="3005248217216195694">"გემრიელი საჭმლის დამაგემოვნებელი სახე"</string>
+ <string name="spoken_emoji_1F60C" msgid="349384012958268496">"შებამოგვრილი სახე"</string>
+ <string name="spoken_emoji_1F60D" msgid="7921853137164938391">"მომღიმარი სახე გულის ფორმის თვალებით"</string>
+ <string name="spoken_emoji_1F60E" msgid="441718886380605643">"მომღიმარი სახე მზის სათვალეებით"</string>
+ <string name="spoken_emoji_1F60F" msgid="2674453144890180538">"თავმომწონე სახე"</string>
+ <string name="spoken_emoji_1F610" msgid="3225675825334102369">"ნეიტრალური სახე"</string>
+ <string name="spoken_emoji_1F611" msgid="7199179827619679668">"უემოციო სახე"</string>
+ <string name="spoken_emoji_1F612" msgid="985081329745137998">"უკმაყოფილო სახე"</string>
+ <string name="spoken_emoji_1F613" msgid="5548607684830303562">"სახე ცივი ოფლით"</string>
+ <string name="spoken_emoji_1F614" msgid="3196305665259916390">"ჩაფიქრებული სახე"</string>
+ <string name="spoken_emoji_1F615" msgid="3051674239303969101">"დაბნეული სახე"</string>
+ <string name="spoken_emoji_1F616" msgid="8124887056243813089">"შეცბუნებული სახე"</string>
+ <string name="spoken_emoji_1F617" msgid="7052733625511122870">"კოცნის სახე"</string>
+ <string name="spoken_emoji_1F618" msgid="408207170572303753">"კოცნის გაგზავნის სახე"</string>
+ <string name="spoken_emoji_1F619" msgid="8645430335143153645">"კოცნის სახე მომღიმარი თვალებით"</string>
+ <string name="spoken_emoji_1F61A" msgid="2882157190974340247">"კოცნის სახე დახუჭული თვალებით"</string>
+ <string name="spoken_emoji_1F61B" msgid="3765927202787211499">"ენაგამოყოფილი სახე"</string>
+ <string name="spoken_emoji_1F61C" msgid="198943912107589389">"ენაგამოყოფილი სახე თვალის ჩაკვრით"</string>
+ <string name="spoken_emoji_1F61D" msgid="7643546385877816182">"ენაგამოყოფილი სახე მჭიდროდ დახუჭული თვალებით"</string>
+ <string name="spoken_emoji_1F61E" msgid="1528732952202098364">"იმედგაცრუებული სახე"</string>
+ <string name="spoken_emoji_1F61F" msgid="1853664164636082404">"შეწუხებული სახე"</string>
+ <string name="spoken_emoji_1F620" msgid="6051942001307375830">"ბრაზიანი სახე"</string>
+ <string name="spoken_emoji_1F621" msgid="2114711878097257704">"გაბუტული სახე"</string>
+ <string name="spoken_emoji_1F622" msgid="29291014645931822">"მტირალი სახე"</string>
+ <string name="spoken_emoji_1F623" msgid="7803959833595184773">"შეუპოვარი სახე"</string>
+ <string name="spoken_emoji_1F624" msgid="8637637647725752799">"ტრიუმფალური სახე"</string>
+ <string name="spoken_emoji_1F625" msgid="6153625183493635030">"იმედგაცრუებული მაგრამ შვებამოგვრილი სახე"</string>
+ <string name="spoken_emoji_1F626" msgid="6179485689935562950">"წარბშეჭმუხნული პირდაღებული სახე"</string>
+ <string name="spoken_emoji_1F627" msgid="8566204052903012809">"გატანჯული სახე"</string>
+ <string name="spoken_emoji_1F628" msgid="8875777401624904224">"შიშნარევი სახე"</string>
+ <string name="spoken_emoji_1F629" msgid="1411538490319190118">"დაქანცული სახე"</string>
+ <string name="spoken_emoji_1F62A" msgid="4726686726690289969">"მომძინარე სახე"</string>
+ <string name="spoken_emoji_1F62B" msgid="3221980473921623613">"დაღლილი სახე"</string>
+ <string name="spoken_emoji_1F62C" msgid="4616356691941225182">"დამანჭული სახე"</string>
+ <string name="spoken_emoji_1F62D" msgid="4283677508698812232">"ხმამაღლა მტირალი სახე"</string>
+ <string name="spoken_emoji_1F62E" msgid="726083405284353894">"პირდაღებული სახე"</string>
+ <string name="spoken_emoji_1F62F" msgid="7746620088234710962">"გაჩუმებული სახე"</string>
+ <string name="spoken_emoji_1F630" msgid="3298804852155581163">"სახე ღია პირით და ცივი ოფლით"</string>
+ <string name="spoken_emoji_1F631" msgid="1603391150954646779">"შიშისგან მყვირალი სახე"</string>
+ <string name="spoken_emoji_1F632" msgid="4846193232203976013">"გაოცებული სახე"</string>
+ <string name="spoken_emoji_1F633" msgid="4023593836629700443">"წამოწითლებული სახე"</string>
+ <string name="spoken_emoji_1F634" msgid="3155265083246248129">"მძინარი სახე"</string>
+ <string name="spoken_emoji_1F635" msgid="4616691133452764482">"თავბრუდახვეული სახე"</string>
+ <string name="spoken_emoji_1F636" msgid="947000211822375683">"უპირო სახე"</string>
+ <string name="spoken_emoji_1F637" msgid="1269551267347165774">"სახე სამედიცინო ნიღბით"</string>
+ <string name="spoken_emoji_1F638" msgid="3410766467496872301">"სასტიკი კატის სახე მომღიმარი თვალებით"</string>
+ <string name="spoken_emoji_1F639" msgid="1833417519781022031">"კატის სახე სიხარულის ცრემლებით"</string>
+ <string name="spoken_emoji_1F63A" msgid="8566294484007152613">"მომღიმარი კატის პირდაღებული სახე"</string>
+ <string name="spoken_emoji_1F63B" msgid="74417995938927571">"მომღიმარი კატის სახე გულის ფორმის თვალებით"</string>
+ <string name="spoken_emoji_1F63C" msgid="6472812005729468870">"კატის სახე ირონიული ღიმილით"</string>
+ <string name="spoken_emoji_1F63D" msgid="1638398369553349509">"კოცნის სახე დახუჭული თვალებით"</string>
+ <string name="spoken_emoji_1F63E" msgid="6788969063020278986">"გაბუტული კატის სახე"</string>
+ <string name="spoken_emoji_1F63F" msgid="1207234562459550185">"მტირალი კატის სახე"</string>
+ <string name="spoken_emoji_1F640" msgid="6023054549904329638">"დაქანცული კატის სახე"</string>
+ <string name="spoken_emoji_1F645" msgid="5202090629227587076">"სახე უვარგისობის ჟესტით"</string>
+ <string name="spoken_emoji_1F646" msgid="6734425134415138134">"სახე ok ჟესტით"</string>
+ <string name="spoken_emoji_1F647" msgid="1090285518444205483">"ადამიანი თავის დაკვრით"</string>
+ <string name="spoken_emoji_1F648" msgid="8978535230610522356">"არც-თუ-ისე ეშმაკი მაიმუნი"</string>
+ <string name="spoken_emoji_1F649" msgid="8486145279809495102">"არ-მესმის მაიმუნი"</string>
+ <string name="spoken_emoji_1F64A" msgid="1237524974033228660">"არ ვლაპარაკობ მაიმუნი"</string>
+ <string name="spoken_emoji_1F64B" msgid="4251150782016370475">"ბედნიერი, ხელაწეული ადამიანი"</string>
+ <string name="spoken_emoji_1F64C" msgid="5446231430684558344">"სიხარულით ხელაპყრობილი ადამიანი"</string>
+ <string name="spoken_emoji_1F64D" msgid="4646485595309482342">"წარბშეკრული ადამიანი"</string>
+ <string name="spoken_emoji_1F64E" msgid="3376579939836656097">"ადამიანი გაბუტული სახით"</string>
+ <string name="spoken_emoji_1F64F" msgid="1044439574356230711">"ადამიანი დაწყობილი ხელებით"</string>
+ <string name="spoken_emoji_1F680" msgid="513263736012689059">"რაკეტა"</string>
+ <string name="spoken_emoji_1F681" msgid="9201341783850525339">"ვერტმფრენი"</string>
+ <string name="spoken_emoji_1F682" msgid="8046933583867498698">"ორთქლის ლოკომოტივი"</string>
+ <string name="spoken_emoji_1F683" msgid="8772750354339223092">"რკინიგზის ვაგონი"</string>
+ <string name="spoken_emoji_1F684" msgid="346396777356203608">"ჩქაროსნული მატარებელი"</string>
+ <string name="spoken_emoji_1F685" msgid="1237059817190832730">"ჩქაროსნული მატარებელი ტყვიის წვერით"</string>
+ <string name="spoken_emoji_1F686" msgid="3525197227223620343">"მატარებელი"</string>
+ <string name="spoken_emoji_1F687" msgid="5110143437960392837">"მეტრო"</string>
+ <string name="spoken_emoji_1F688" msgid="4702085029871797965">"მსუბუქი რკინიგზა"</string>
+ <string name="spoken_emoji_1F689" msgid="2375851019798817094">"სადგური"</string>
+ <string name="spoken_emoji_1F68A" msgid="6368370859718717198">"ტრამვაი"</string>
+ <string name="spoken_emoji_1F68B" msgid="2920160427117436633">"ტრამვაის ვაგონი"</string>
+ <string name="spoken_emoji_1F68C" msgid="1061520934758810864">"ავტობუსი"</string>
+ <string name="spoken_emoji_1F68D" msgid="2890059031360969304">"მომავალი ავტობუსი"</string>
+ <string name="spoken_emoji_1F68E" msgid="6234042976027309654">"ტროლეიბუსი"</string>
+ <string name="spoken_emoji_1F68F" msgid="5871099334672012107">"ავტობუსის გაჩერება"</string>
+ <string name="spoken_emoji_1F690" msgid="8080964620200195262">"მიკროავტობუსი"</string>
+ <string name="spoken_emoji_1F691" msgid="999173032408730501">"სასწრაფო"</string>
+ <string name="spoken_emoji_1F692" msgid="1712863785341849487">"სახანძრო"</string>
+ <string name="spoken_emoji_1F693" msgid="7987109037389768934">"პოლიციის მანქანა"</string>
+ <string name="spoken_emoji_1F694" msgid="6061658916653884608">"მომავალი პოლიციის მანქანა"</string>
+ <string name="spoken_emoji_1F695" msgid="6913445460364247283">"ტაქსი"</string>
+ <string name="spoken_emoji_1F696" msgid="6391604457418285404">"მომავალი ტაქსი"</string>
+ <string name="spoken_emoji_1F697" msgid="7978399334396733790">"ავტომობილი"</string>
+ <string name="spoken_emoji_1F698" msgid="7006050861129732018">"მომავალი ავტომობილი"</string>
+ <string name="spoken_emoji_1F699" msgid="630317052666590607">"რეკრეაციული ავტომანქანა"</string>
+ <string name="spoken_emoji_1F69A" msgid="4739797891735823577">"სატვირთო მანქანა"</string>
+ <string name="spoken_emoji_1F69B" msgid="4715997280786620649">"გადაბმული სატვირთო"</string>
+ <string name="spoken_emoji_1F69C" msgid="5557395610750818161">"ტრაქტორი"</string>
+ <string name="spoken_emoji_1F69D" msgid="5467164189942951047">"მონორელსი"</string>
+ <string name="spoken_emoji_1F69E" msgid="169238196389832234">"მთის რკინიგზა"</string>
+ <string name="spoken_emoji_1F69F" msgid="7508128757012845102">"შეჩერებული რკინიგზა"</string>
+ <string name="spoken_emoji_1F6A0" msgid="8733056213790160147">"მთის საბაგირო"</string>
+ <string name="spoken_emoji_1F6A1" msgid="4666516337749347253">"საბაგირო"</string>
+ <string name="spoken_emoji_1F6A2" msgid="4511220588943129583">"გემი"</string>
+ <string name="spoken_emoji_1F6A3" msgid="8412962252222205387">"სანიჩბოსნო ნავი"</string>
+ <string name="spoken_emoji_1F6A4" msgid="8867571300266339211">"სწრაფმავალი მოტორიანი გემი"</string>
+ <string name="spoken_emoji_1F6A5" msgid="7650260812741963884">"ჰორიზონტალური შუქნიშანი"</string>
+ <string name="spoken_emoji_1F6A6" msgid="485575967773793454">"ვერტიკალური შუქნიშანი"</string>
+ <string name="spoken_emoji_1F6A7" msgid="6411048933816976794">"მშენებლობის ნიშანი"</string>
+ <string name="spoken_emoji_1F6A8" msgid="6345717218374788364">"პოლიციის მანქანა შუქის სიგნალით"</string>
+ <string name="spoken_emoji_1F6A9" msgid="6586380356807600412">"სამკუთხა ალამი პოსტზე"</string>
+ <string name="spoken_emoji_1F6AA" msgid="8954448167261738885">"კარი"</string>
+ <string name="spoken_emoji_1F6AB" msgid="5313946262888343544">"შესვლის აკრძალვის ნიშანი"</string>
+ <string name="spoken_emoji_1F6AC" msgid="6946858177965948288">"მოწევის ნიშანი"</string>
+ <string name="spoken_emoji_1F6AD" msgid="6320088669185507241">"მოწევის აკრძალვის ნიშანი"</string>
+ <string name="spoken_emoji_1F6AE" msgid="1062469925352817189">"ნაგვის გამოყოფილ ადგილზე ჩაყრის სიმბოლო"</string>
+ <string name="spoken_emoji_1F6AF" msgid="2286668056123642208">"სიმბოლო ნაგავი არ დაყაროთ"</string>
+ <string name="spoken_emoji_1F6B0" msgid="179424763882990952">"დასალევად ვარგისი წყლის სიმბოლო"</string>
+ <string name="spoken_emoji_1F6B1" msgid="5585212805429161877">"დასალევად უვარგისი წყლის სიმბოლო"</string>
+ <string name="spoken_emoji_1F6B2" msgid="1771885082068421875">"ველოსიპედი"</string>
+ <string name="spoken_emoji_1F6B3" msgid="8033779581263314408">"ველოსიპედები არ არის"</string>
+ <string name="spoken_emoji_1F6B4" msgid="1999538449018476947">"ველოსიპედისტი"</string>
+ <string name="spoken_emoji_1F6B5" msgid="340846352660993117">"სამთო ველოსიპედისტი"</string>
+ <string name="spoken_emoji_1F6B6" msgid="4351024386495098336">"ფეხით მოსიარულე"</string>
+ <string name="spoken_emoji_1F6B7" msgid="4564800655866838802">"ფეხით სიარული აკრძალულია"</string>
+ <string name="spoken_emoji_1F6B8" msgid="3020531906940267349">"ბავშვების გადასასვლელი"</string>
+ <string name="spoken_emoji_1F6B9" msgid="1207095844125041251">"კაცების ნიშანი"</string>
+ <string name="spoken_emoji_1F6BA" msgid="2346879310071017531">"ქალების ნიშანი"</string>
+ <string name="spoken_emoji_1F6BB" msgid="2370172469642078526">"საპირფარეშო"</string>
+ <string name="spoken_emoji_1F6BC" msgid="5558827593563530851">"ჩვილების ნიშანი"</string>
+ <string name="spoken_emoji_1F6BD" msgid="9213590243049835957">"ტუალეტი"</string>
+ <string name="spoken_emoji_1F6BE" msgid="394016533781742491">"უნიტაზი"</string>
+ <string name="spoken_emoji_1F6BF" msgid="906336365928291207">"შხაპი"</string>
+ <string name="spoken_emoji_1F6C0" msgid="4592099854378821599">"სააბაზანო"</string>
+ <string name="spoken_emoji_1F6C1" msgid="2845056048320031158">"აბაზანა"</string>
+ <string name="spoken_emoji_1F6C2" msgid="8117262514698011877">"პასპორტის კონტროლი"</string>
+ <string name="spoken_emoji_1F6C3" msgid="1176342001834630675">"საბაჟო"</string>
+ <string name="spoken_emoji_1F6C4" msgid="1477622834179978886">"ბარგის აღება"</string>
+ <string name="spoken_emoji_1F6C5" msgid="2495834050856617451">"ბარგის ჩაბარება"</string>
+</resources>
diff --git a/java/res/values-ka-rGE/strings-talkback-descriptions.xml b/java/res/values-ka-rGE/strings-talkback-descriptions.xml
index dc6af527e..147031664 100644
--- a/java/res/values-ka-rGE/strings-talkback-descriptions.xml
+++ b/java/res/values-ka-rGE/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"ადგილები"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"სიმბოლოები"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"სიცილაკები"</string>
+ <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+ <skip />
+ <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+ <skip />
</resources>
diff --git a/java/res/values-ka-rGE/strings.xml b/java/res/values-ka-rGE/strings.xml
index 547bf29ca..4677b1844 100644
--- a/java/res/values-ka-rGE/strings.xml
+++ b/java/res/values-ka-rGE/strings.xml
@@ -21,7 +21,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_input_options" msgid="3909945612939668554">"შეყვანის მეთოდები"</string>
- <string name="english_ime_research_log" msgid="8492602295696577851">"კვლევის აღრიცხვის ბრძანებები"</string>
<string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"კონტაქტებში ძებნა"</string>
<string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"კონტაქტების სიის გამოყენება მართლწერის შემოწმებისას"</string>
<string name="vibrate_on_keypress" msgid="5258079494276955460">"ვიბრაცია კლავიშზე დაჭერისას"</string>
@@ -84,8 +83,6 @@
<string name="select_language" msgid="3693815588777926848">"შეყვანის ენები"</string>
<string name="hint_add_to_dictionary" msgid="573678656946085380">"შეეხეთ ისევ შესანახად"</string>
<string name="has_dictionary" msgid="6071847973466625007">"ხელმისაწვდომია ლექსიკონი"</string>
- <string name="prefs_enable_log" msgid="6620424505072963557">"მომხმარებლის უკუკავშირის ჩართვა"</string>
- <string name="prefs_description_log" msgid="7525225584555429211">"შეიტანეთ წვლილი შეყვანის ამ მეთოდის გაუმჯობესებაში — გააგზავნეთ მოხმარების სტატისტიკა და ავარიული გათიშვების ანგარიშები"</string>
<string name="keyboard_layout" msgid="8451164783510487501">"კლავიატურის თემა"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"ინგლისური (გართ. სამ.)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"ინგლისური (აშშ)"</string>
@@ -118,7 +115,6 @@
<string name="enable" msgid="5031294444630523247">"ჩართვა"</string>
<string name="not_now" msgid="6172462888202790482">"ახლა არა"</string>
<string name="custom_input_style_already_exists" msgid="8008728952215449707">"შეყვანის იგივე სტილი უკვე არსებობს: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
- <string name="prefs_usability_study_mode" msgid="1261130555134595254">"გამოყენებადობის კვლევის რეჟიმი"</string>
<string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"კლავიშზე გრძელი დაჭერის დაყოვნება"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"კლავიშზე დაჭერის ვიბრაციის ხანგრძლივობა"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"კლავიშზე დაჭერის ხმა"</string>
diff --git a/java/res/values-kk/strings.xml b/java/res/values-kk/strings.xml
index 83ac0daf7..29780513c 100644
--- a/java/res/values-kk/strings.xml
+++ b/java/res/values-kk/strings.xml
@@ -21,7 +21,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_input_options" msgid="3909945612939668554">"Енгізу опциялары"</string>
- <string name="english_ime_research_log" msgid="8492602295696577851">"Журнал пәрмендерін зерттеу"</string>
<string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Контакт аттарын іздеу"</string>
<string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Емлені тексеру құралы контактілер тізімінің жазбаларын пайдаланады"</string>
<string name="vibrate_on_keypress" msgid="5258079494276955460">"Пернені басқан кездегі діріл"</string>
@@ -82,8 +81,6 @@
<string name="select_language" msgid="3693815588777926848">"Енгізу тілдері"</string>
<string name="hint_add_to_dictionary" msgid="573678656946085380">"Сақтау үшін қайта түртіңіз"</string>
<string name="has_dictionary" msgid="6071847973466625007">"Сөздік қолжетімді"</string>
- <string name="prefs_enable_log" msgid="6620424505072963557">"Пайдаланушының кері байланысын қосу"</string>
- <string name="prefs_description_log" msgid="7525225584555429211">"Қолданыс статистикасын және бұзылыс есептерін автоматты түрде жіберу арқылы осы енгізу әдісінің редакторын арттыруға көмектесу"</string>
<string name="keyboard_layout" msgid="8451164783510487501">"Пернетақта тақырыбы"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"ағылшын (ҰБ)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"ағылшын (АҚШ)"</string>
@@ -113,7 +110,6 @@
<string name="enable" msgid="5031294444630523247">"Қосу"</string>
<string name="not_now" msgid="6172462888202790482">"Қазір емес"</string>
<string name="custom_input_style_already_exists" msgid="8008728952215449707">"Бірдей енгізу стилі бұрыннан бар: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
- <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Қолайлылықты зерттеу режимі"</string>
<string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Пернені ұзақ басу кідірісі"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Пернені басқан кездегі діріл ұзақтығы"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Пернені басқан кездегі дыбыс деңгейі"</string>
diff --git a/java/res/values-km-rKH/strings-action-keys.xml b/java/res/values-km-rKH/strings-action-keys.xml
index ff747d9f5..d6b11b7ce 100644
--- a/java/res/values-km-rKH/strings-action-keys.xml
+++ b/java/res/values-km-rKH/strings-action-keys.xml
@@ -25,6 +25,8 @@
<string name="label_previous_key" msgid="1421141755779895275">"មុន"</string>
<string name="label_done_key" msgid="7564866296502630852">"រួចរាល់"</string>
<string name="label_send_key" msgid="482252074224462163">"ផ្ញើ"</string>
+ <!-- no translation found for label_search_key (7965186050435796642) -->
+ <skip />
<string name="label_pause_key" msgid="2225922926459730642">"ផ្អាក"</string>
<string name="label_wait_key" msgid="5891247853595466039">"រង់ចាំ"</string>
</resources>
diff --git a/java/res/values-km-rKH/strings-emoji-descriptions.xml b/java/res/values-km-rKH/strings-emoji-descriptions.xml
new file mode 100644
index 000000000..c81e5e1ca
--- /dev/null
+++ b/java/res/values-km-rKH/strings-emoji-descriptions.xml
@@ -0,0 +1,846 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/*
+**
+** Copyright 2014, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="spoken_emoji_00A9" msgid="2859822817116803638">"សញ្ញា​រក្សា​សិទ្ធ"</string>
+ <string name="spoken_emoji_00AE" msgid="7708335454134589027">"សញ្ញា​​​ចុះ​បញ្ជី"</string>
+ <string name="spoken_emoji_203C" msgid="153340916701508663">"សញ្ញា​ឧទាន​​ពីរ"</string>
+ <string name="spoken_emoji_2049" msgid="4877256448299555371">"សញ្ញា​​ឧទាន​សញ្ញា​សួរ"</string>
+ <string name="spoken_emoji_2122" msgid="9188440722954720429">"សញ្ញា​​​និក្ខិត្តសញ្ញា"</string>
+ <string name="spoken_emoji_2139" msgid="9114342638917304327">"ប្រភព​ព័ត៌មាន"</string>
+ <string name="spoken_emoji_2194" msgid="8055202727034946680">"ព្រួញ​ឆ្វេងស្ដាំ"</string>
+ <string name="spoken_emoji_2195" msgid="8028122253301087407">"ព្រួញ​ឡើង​លើ​ចុះក្រោម"</string>
+ <string name="spoken_emoji_2196" msgid="4019164898967854363">"ព្រួញ​ទិសពាយព្យ"</string>
+ <string name="spoken_emoji_2197" msgid="4255723717709017801">"ព្រួញ​​ទិស​ឥសាន្ត​ឦសាន្ត"</string>
+ <string name="spoken_emoji_2198" msgid="1452063451313622090">"ព្រួញ​​ទិស​អាគ្នេយ៍"</string>
+ <string name="spoken_emoji_2199" msgid="6942722693368807849">"ព្រួញ​​ទិស​និរតី"</string>
+ <string name="spoken_emoji_21A9" msgid="5204750172335111188">"ព្រួញ​ទៅ​ឆ្វេង​មាន​ទំពក់"</string>
+ <string name="spoken_emoji_21AA" msgid="3950259884359247006">"ព្រួញ​ទៅ​​ស្ដាំ​មាន​ទំពក់"</string>
+ <string name="spoken_emoji_231A" msgid="6751448803233874993">"នាឡិកា​ដៃ"</string>
+ <string name="spoken_emoji_231B" msgid="5956428809948426182">"នាឡិកា​ពិសោធន៍"</string>
+ <string name="spoken_emoji_23E9" msgid="4022497733535162237">"ត្រីកោណ​ខ្មៅ​ពីរ​ចង្អុល​ទៅ​ស្ដាំ"</string>
+ <string name="spoken_emoji_23EA" msgid="2251396938087774944">"ត្រីកោណ​ខ្មៅ​ពីរ​ចង្អុល​ទៅ​ឆ្វេង"</string>
+ <string name="spoken_emoji_23EB" msgid="3746885195641491865">"ត្រីកោណ​ខ្មៅ​ពីរ​ចង្អុល​​ឡើង​លើ"</string>
+ <string name="spoken_emoji_23EC" msgid="7852372752901163416">"ត្រីកោណ​ខ្មៅ​ពីរ​ចង្អុល​​ចុះក្រោម"</string>
+ <string name="spoken_emoji_23F0" msgid="8474219588750627870">"នាឡិកា​រោទ៍"</string>
+ <string name="spoken_emoji_23F3" msgid="166900119581024371">"កែវ​ពិសោធន៍​មាន​ខ្សាច់ហូរ"</string>
+ <string name="spoken_emoji_24C2" msgid="3948348737566038470">"អក្សរ​អឹម​ធំ​ក្នុង​រង្វង់"</string>
+ <string name="spoken_emoji_25AA" msgid="7865181015100227349">"ការ៉េ​តូច​​ពណ៌ខ្មៅ"</string>
+ <string name="spoken_emoji_25AB" msgid="6446532820937381457">"ការ៉េ​តូច​ពណ៌​ស"</string>
+ <string name="spoken_emoji_25B6" msgid="2423897708496040947">"ត្រីកោណ​ចង្អុល​ស្ដាំ​ពណ៌​ខ្មៅ"</string>
+ <string name="spoken_emoji_25C0" msgid="3595083440074484934">"ត្រីកោណ​ចង្អុល​​ឆ្វេង​ពណ៌​ខ្មៅ"</string>
+ <string name="spoken_emoji_25FB" msgid="4838691986881215419">"ការ៉េ​មធ្យម​ពណ៌ស"</string>
+ <string name="spoken_emoji_25FC" msgid="7008859564991191050">"ការ៉េ​មធ្យម​ពណ៌​​ខ្មៅ"</string>
+ <string name="spoken_emoji_25FD" msgid="7673439755069217479">"ការ៉េ​តូច​មធ្យម​ពណ៌​ស"</string>
+ <string name="spoken_emoji_25FE" msgid="6782214109919768923">"ការ៉េ​តូច​មធ្យម​ពណ៌​ខ្មៅ"</string>
+ <string name="spoken_emoji_2600" msgid="2272722634618990413">"ព្រះអាទិត្យ​ពណ៌​ខ្មៅ​​បញ្ចេញ​ពន្លឺ"</string>
+ <string name="spoken_emoji_2601" msgid="6205136889311537150">"ពពក"</string>
+ <string name="spoken_emoji_260E" msgid="8670395193046424238">"ទូរស័ព្ទ​ពណ៌​ខ្មៅ"</string>
+ <string name="spoken_emoji_2611" msgid="4530550203347054611">"ប្រអប់​មាន​សញ្ញា​ធីក"</string>
+ <string name="spoken_emoji_2614" msgid="1612791247861229500">"ឆត្រ​មាន​តំណក់​ទឹក​ភ្លៀង"</string>
+ <string name="spoken_emoji_2615" msgid="3320562382424018588">"ភេសជ្ជៈ​ក្ដៅ"</string>
+ <string name="spoken_emoji_261D" msgid="4690554173549768467">"ចង្អុល​ដៃ​ចង្អុល​ឡើង​ពណ៌ស"</string>
+ <string name="spoken_emoji_263A" msgid="3170094381521989300">"មុខ​ញញឹម​ពណ៌​ស"</string>
+ <string name="spoken_emoji_2648" msgid="4621241062667020673">"មេសៈរាសី"</string>
+ <string name="spoken_emoji_2649" msgid="7694461245947059086">"តៅរ៉ូស"</string>
+ <string name="spoken_emoji_264A" msgid="1258074605878705030">"ហ្គិមីនី"</string>
+ <string name="spoken_emoji_264B" msgid="4409219914377810956">"សញ្ញា​ទី៤​នៃ​រាសីចក្រ"</string>
+ <string name="spoken_emoji_264C" msgid="6520255367817054163">"លីអូ"</string>
+ <string name="spoken_emoji_264D" msgid="1504758945499854018">"សញ្ញា​រាសី"</string>
+ <string name="spoken_emoji_264E" msgid="2354847104530633519">"លីប្រា"</string>
+ <string name="spoken_emoji_264F" msgid="5822933280406416112">"រាសីវច្ចៈ"</string>
+ <string name="spoken_emoji_2650" msgid="4832481156714796163">"រាសី​ធ្នូ"</string>
+ <string name="spoken_emoji_2651" msgid="840953134601595090">"រាសី​សេះ"</string>
+ <string name="spoken_emoji_2652" msgid="3586925968718775281">"Aquarius"</string>
+ <string name="spoken_emoji_2653" msgid="8420547731496254492">"រាសី​អាប់អួ"</string>
+ <string name="spoken_emoji_2660" msgid="4541170554542412536">"ឈុត​ប៊ិច​ពណ៌​ខ្មៅ"</string>
+ <string name="spoken_emoji_2663" msgid="3669352721942285724">"ឈុត​​ជួង​ពណ៌​ខ្មៅ"</string>
+ <string name="spoken_emoji_2665" msgid="6347941599683765843">"ឈុត​​កឺ​ពណ៌ខ្មៅ"</string>
+ <string name="spoken_emoji_2666" msgid="8296769213401115999">"ឈុត​​ការ៉ូ​ពណ៌​ខ្មៅ"</string>
+ <string name="spoken_emoji_2668" msgid="7063148281053820386">"Hot springs"</string>
+ <string name="spoken_emoji_267B" msgid="21716857176812762">"និមិត្ត​សញ្ញា​ធុងសំរាម​សកល​ពណ៌​ខ្មៅ"</string>
+ <string name="spoken_emoji_267F" msgid="8833496533226475443">"និមិត្ត​សញ្ញា​រទេះ​រុញ"</string>
+ <string name="spoken_emoji_2693" msgid="7443148847598433088">"យុថ្កា"</string>
+ <string name="spoken_emoji_26A0" msgid="6272635532992727510">"សញ្ញា​ព្រមាន"</string>
+ <string name="spoken_emoji_26A1" msgid="5604749644693339145">"សញ្ញា​តង់ស្យុង​​ខ្ពស់"</string>
+ <string name="spoken_emoji_26AA" msgid="8005748091690377153">"រង្វង់​ពណ៌ស​មធ្យម"</string>
+ <string name="spoken_emoji_26AB" msgid="1655910278422753244">"រង្វង់​ពណ៌​ខ្មៅ​មធ្យម"</string>
+ <string name="spoken_emoji_26BD" msgid="1545218197938889737">"បាល់​ទាត់"</string>
+ <string name="spoken_emoji_26BE" msgid="8959760533076498209">"បាល់បោះ"</string>
+ <string name="spoken_emoji_26C4" msgid="3045791757044255626">"អ្នកលេង​ព្រិល​ដោយ​គ្មាន​ព្រិល"</string>
+ <string name="spoken_emoji_26C5" msgid="5580129409712578639">"ព្រះអាទិត្យ​នៅ​​ក្រោយ​ពពក"</string>
+ <string name="spoken_emoji_26CE" msgid="8963656417276062998">"សញ្ញា (⛎)"</string>
+ <string name="spoken_emoji_26D4" msgid="2231451988209604130">"ហាមចូល"</string>
+ <string name="spoken_emoji_26EA" msgid="7513319636103804907">"វិហារ​សាសនា"</string>
+ <string name="spoken_emoji_26F2" msgid="7134115206158891037">"បាញ់​ទឹក"</string>
+ <string name="spoken_emoji_26F3" msgid="4912302210162075465">"ទង់ជាតិ​​​ក្នុង​រន្ធ"</string>
+ <string name="spoken_emoji_26F5" msgid="4766328116769075217">"ទូក​ក្ដោង"</string>
+ <string name="spoken_emoji_26FA" msgid="5888017494809199037">"តង់"</string>
+ <string name="spoken_emoji_26FD" msgid="2417060622927453534">"បូម​ប្រេង"</string>
+ <string name="spoken_emoji_2702" msgid="4005741160717451912">"កន្ត្រៃ​ពណ៌​ខ្មៅ"</string>
+ <string name="spoken_emoji_2705" msgid="164605766946697759">"សញ្ញា​ធីក​ពណ៌​ស​ធំ"</string>
+ <string name="spoken_emoji_2708" msgid="7153840886849268988">"យន្តហោះ"</string>
+ <string name="spoken_emoji_2709" msgid="2217319160724311369">"ស្រោម​សំបុត្រ"</string>
+ <string name="spoken_emoji_270A" msgid="508347232762319473">"លើក​កណ្ដាប់ដៃ"</string>
+ <string name="spoken_emoji_270B" msgid="6640562128327753423">"លើកដៃ"</string>
+ <string name="spoken_emoji_270C" msgid="1344288035704944581">"លើក​ដៃ​​ជ័យជម្នះ"</string>
+ <string name="spoken_emoji_270F" msgid="6108251586067318718">"ខ្មៅដៃ"</string>
+ <string name="spoken_emoji_2712" msgid="6320544535087710482">"ចុង​ខ្មៅ​ដៃ"</string>
+ <string name="spoken_emoji_2714" msgid="1968242800064001654">"សញ្ញា​ធីក​ដិត"</string>
+ <string name="spoken_emoji_2716" msgid="511941294762977228">"សញ្ញា​គុណ​ដិត"</string>
+ <string name="spoken_emoji_2728" msgid="5650330815808691881">"បញ្ចេញ​ពន្លឺ"</string>
+ <string name="spoken_emoji_2733" msgid="8915809595141157327">"ផ្កាយ​ប្រាំ​បី​ជ្រុង"</string>
+ <string name="spoken_emoji_2734" msgid="4846583547980754332">"ផ្កាយ​ប្រាំ​បី​ជ្រុង​ដិត"</string>
+ <string name="spoken_emoji_2744" msgid="4350636647760161042">"សញ្ញា (❄)"</string>
+ <string name="spoken_emoji_2747" msgid="3718282973916474455">"បញ្ចេញ​ពន្លឺ"</string>
+ <string name="spoken_emoji_274C" msgid="2752145886733295314">"សញ្ញា​​ខ្វែង"</string>
+ <string name="spoken_emoji_274E" msgid="4262918689871098338">"សញ្ញា​ខ្វែង​ក្នុង​ប្រអប់"</string>
+ <string name="spoken_emoji_2753" msgid="6935897159942119808">"សញ្ញា​សួរ​ពណ៌​ខ្មៅ"</string>
+ <string name="spoken_emoji_2754" msgid="7277504915105532954">"សញ្ញា​សួរ​ពណ៌ស"</string>
+ <string name="spoken_emoji_2755" msgid="6853076969826960210">"សញ្ញា​ឧទាន​ពណ៌​ស"</string>
+ <string name="spoken_emoji_2757" msgid="3707907828776912174">"សញ្ញា​ឧទាន​ពណ៌ខ្មៅ​ដិត"</string>
+ <string name="spoken_emoji_2764" msgid="4214257843609432167">"បេះដូង​​​ពណ៌​ខ្មៅ"</string>
+ <string name="spoken_emoji_2795" msgid="6563954833786162168">"សញ្ញា​បូក​ដិត"</string>
+ <string name="spoken_emoji_2796" msgid="5990926508250772777">"សញ្ញា​ដក​​ដិត"</string>
+ <string name="spoken_emoji_2797" msgid="24694184172879174">"សញ្ញា​​​ចែក​ដិត"</string>
+ <string name="spoken_emoji_27A1" msgid="3513434778263100580">"ព្រួញ​ទៅ​ស្ដាំ​ពណ៌​ខ្មៅ"</string>
+ <string name="spoken_emoji_27B0" msgid="203395646864662198">"រង្វង់​​អង្កាញ់"</string>
+ <string name="spoken_emoji_27BF" msgid="4940514642375640510">"រង្វង់​អង្កាញ់​ពីរ"</string>
+ <string name="spoken_emoji_2934" msgid="9062130477982973457">"ព្រួញ​ចង្អុល​ទៅ​ស្ដាំ​បន្ទាប់មក​បត់​ឡើង​លើ"</string>
+ <string name="spoken_emoji_2935" msgid="6198710960720232074">"ព្រួញ​ចង្អុល​ទៅ​ស្ដាំ​បន្ទាប់មក​បត់​ចុះ​ក្រោម"</string>
+ <string name="spoken_emoji_2B05" msgid="4813405635410707690">"ព្រួញ​ពណ៌ខ្មៅ​ទៅ​ឆ្វេង"</string>
+ <string name="spoken_emoji_2B06" msgid="1223172079106250748">"ព្រួញ​​ពណ៌​ខ្មៅ​ឡើង​លើ"</string>
+ <string name="spoken_emoji_2B07" msgid="1599124424746596150">"ព្រួញ​ពណ៌​ខ្មៅ​​ចុះក្រោម"</string>
+ <string name="spoken_emoji_2B1B" msgid="3461247311988501626">"ប្រអប់​ការ៉េ​ធំ​ពណ៌​ខ្មៅ"</string>
+ <string name="spoken_emoji_2B1C" msgid="5793146430145248915">"ប្រអប់​ការ៉េ​ធំ​ពណ៌​ស"</string>
+ <string name="spoken_emoji_2B50" msgid="3850845519526950524">"​ផ្កាយ​​មធ្យម​ពណ៌ស"</string>
+ <string name="spoken_emoji_2B55" msgid="9137882158811541824">"រង្វង់​ធំ​​ដិត"</string>
+ <string name="spoken_emoji_3030" msgid="4609172241893565639">"សញ្ញា​​រលក​ដិត"</string>
+ <string name="spoken_emoji_303D" msgid="2545833934975907505">"សញ្ញា (〽)"</string>
+ <string name="spoken_emoji_3297" msgid="928912923628973800">"សញ្ញា (㊗)"</string>
+ <string name="spoken_emoji_3299" msgid="3930347573693668426">"សញ្ញា (㊙)"</string>
+ <string name="spoken_emoji_1F004" msgid="1705216181345894600">"សញ្ញា (🀄)"</string>
+ <string name="spoken_emoji_1F0CF" msgid="7601493592085987866">"សញ្ញា (🃏)"</string>
+ <string name="spoken_emoji_1F170" msgid="3817698686602826773">"ឈាម​ប្រភេទ A"</string>
+ <string name="spoken_emoji_1F171" msgid="3684218589626650242">"ឈាម​ប្រភេទ B"</string>
+ <string name="spoken_emoji_1F17E" msgid="2978809190364779029">"ឈាម​ប្រភេទ O"</string>
+ <string name="spoken_emoji_1F17F" msgid="463634348668462040">"ចំណត"</string>
+ <string name="spoken_emoji_1F18E" msgid="1650705325221496768">"ឈាម​ប្រភេទ AB"</string>
+ <string name="spoken_emoji_1F191" msgid="5386969264431429221">"ប្រអប់ CL"</string>
+ <string name="spoken_emoji_1F192" msgid="8324226436829162496">"ប្រអប់ cool"</string>
+ <string name="spoken_emoji_1F193" msgid="4731758603321515364">"ប្រអប់ free"</string>
+ <string name="spoken_emoji_1F194" msgid="4903128609556175887">"ប្រអប់ ID"</string>
+ <string name="spoken_emoji_1F195" msgid="1433142500411060924">"ប្រអប់ new"</string>
+ <string name="spoken_emoji_1F196" msgid="8825160701159634202">"ប្រអប់ N G"</string>
+ <string name="spoken_emoji_1F197" msgid="7841079241554176535">"ប្រអប់ OK"</string>
+ <string name="spoken_emoji_1F198" msgid="7020298909426960622">"ប្រអប់ SOS"</string>
+ <string name="spoken_emoji_1F199" msgid="5971252667136235630">"ប្រអប់ up!"</string>
+ <string name="spoken_emoji_1F19A" msgid="4557270135899843959">"ប្រអប់ vs"</string>
+ <string name="spoken_emoji_1F201" msgid="7000490044681139002">"សញ្ញា (🈁)"</string>
+ <string name="spoken_emoji_1F202" msgid="8560906958695043947">"សញ្ញា (🈂)"</string>
+ <string name="spoken_emoji_1F21A" msgid="1496435317324514033">"សញ្ញា (🈚)"</string>
+ <string name="spoken_emoji_1F22F" msgid="609797148862445402">"សញ្ញា (🈯)"</string>
+ <string name="spoken_emoji_1F232" msgid="8125716331632035820">"សញ្ញា (🈲)"</string>
+ <string name="spoken_emoji_1F233" msgid="8749401090457355028">"សញ្ញា (🈳)"</string>
+ <string name="spoken_emoji_1F234" msgid="3546951604285970768">"សញ្ញា (🈴)"</string>
+ <string name="spoken_emoji_1F235" msgid="5320186982841793711">"សញ្ញា (🈵)"</string>
+ <string name="spoken_emoji_1F236" msgid="879755752069393034">"សញ្ញា (🈶)"</string>
+ <string name="spoken_emoji_1F237" msgid="6741807001205851437">"សញ្ញា (🈷)"</string>
+ <string name="spoken_emoji_1F238" msgid="5504414186438196912">"សញ្ញា (🈸)"</string>
+ <string name="spoken_emoji_1F239" msgid="1634067311597618959">"សញ្ញា (🈹)"</string>
+ <string name="spoken_emoji_1F23A" msgid="3107862957630169536">"សញ្ញា (🈺)"</string>
+ <string name="spoken_emoji_1F250" msgid="6586943922806727907">"សញ្ញា (🉐)"</string>
+ <string name="spoken_emoji_1F251" msgid="9099032855993346948">"សញ្ញា (🉑)"</string>
+ <string name="spoken_emoji_1F300" msgid="4720098285295840383">"ស៊ីក្លូន"</string>
+ <string name="spoken_emoji_1F301" msgid="3601962477653752974">"អ័ភ្រ"</string>
+ <string name="spoken_emoji_1F302" msgid="3404357123421753593">"ឆត្រ​បិទ"</string>
+ <string name="spoken_emoji_1F303" msgid="3899301321538188206">"រាត្រី​​មាន​​ផ្កាយ"</string>
+ <string name="spoken_emoji_1F304" msgid="2767148930689050040">"ព្រះ​អាទិត្យ​​​លើ​ភ្នំ"</string>
+ <string name="spoken_emoji_1F305" msgid="9165812924292061196">"ព្រះ​អាទិត្យរះ"</string>
+ <string name="spoken_emoji_1F306" msgid="5889294736109193104">"ទីក្រុង​ពេល​ព្រលប់"</string>
+ <string name="spoken_emoji_1F307" msgid="2714290867291163713">"ព្រះអាទិត្យ​លិច​ចន្លោះ​អាគារ"</string>
+ <string name="spoken_emoji_1F308" msgid="688704703985173377">"ឥន្ទធនូ"</string>
+ <string name="spoken_emoji_1F309" msgid="6217981957992313528">"ស្ពាន​ពេល​រាត្រី"</string>
+ <string name="spoken_emoji_1F30A" msgid="4329309263152110893">"ទឹក​រលក"</string>
+ <string name="spoken_emoji_1F30B" msgid="5729430693700923112">"ភ្នំភ្លើង"</string>
+ <string name="spoken_emoji_1F30C" msgid="2961230863217543082">"មេឃ​ស្រទំ"</string>
+ <string name="spoken_emoji_1F30D" msgid="1113905673331547953">"ភូគោល​​អឺរ៉ុប-អាហ្រិក"</string>
+ <string name="spoken_emoji_1F30E" msgid="5278512600749223671">"ភូគោល​អាមេរិក"</string>
+ <string name="spoken_emoji_1F30F" msgid="5718144880978707493">"ភូគោល​អាស៊ី-អូស្ត្រាលី"</string>
+ <string name="spoken_emoji_1F310" msgid="2959618582975247601">"ភូគោល​មាន​ខ្សែ​វណ្ឌ"</string>
+ <string name="spoken_emoji_1F311" msgid="623906380914895542">"​​ព្រះចន្ទ"</string>
+ <string name="spoken_emoji_1F312" msgid="4458575672576125401">"ព្រះ​ចន្ទ​មួយ​ចំណិត​ស្ដាំ"</string>
+ <string name="spoken_emoji_1F313" msgid="7599181787989497294">"ព្រះ​ចន្ទ​ពាក់​កណ្ដាល"</string>
+ <string name="spoken_emoji_1F314" msgid="4898293184964365413">"ព្រះ​ចន្ទ​មួយ​ចំណិត​ឆ្វេង"</string>
+ <string name="spoken_emoji_1F315" msgid="3218117051779496309">"ព្រះចន្ទ​ពេញ​វង់"</string>
+ <string name="spoken_emoji_1F316" msgid="2061317145777689569">"ព្រះ​ចន្ទ​ភ្លឺ​មួយ​ចំហៀង"</string>
+ <string name="spoken_emoji_1F317" msgid="2721090687319539049">"ព្រះ​ចន្ទ​ភ្លឺ​ពាក់​កណ្ដាល"</string>
+ <string name="spoken_emoji_1F318" msgid="3814091755648887570">"ព្រះ​ចន្ទ​ភ្លឺ​មួយ​ចំណិត​ឆ្វេង"</string>
+ <string name="spoken_emoji_1F319" msgid="4074299824890459465">"ព្រះ​ចន្ទ​មួយ​ចំណិត"</string>
+ <string name="spoken_emoji_1F31A" msgid="3092285278116977103">"ព្រះ​ចន្ទ​មាន​មុខ​មនុស្ស"</string>
+ <string name="spoken_emoji_1F31B" msgid="2658562138386927881">"ព្រះ​ចន្ទ​មាន​មុខ​មនុស្ស​ពាក់កណ្ដាល​ស្ដាំ"</string>
+ <string name="spoken_emoji_1F31C" msgid="7914768515547867384">"ព្រះ​ចន្ទ​មាន​មុខ​មនុស្ស​ពាក់កណ្ដាលឆ្វេង"</string>
+ <string name="spoken_emoji_1F31D" msgid="1925730459848297182">"ព្រះចន្ទ​មាន​មុខ​មនុស្ស​ពេញ​វង់"</string>
+ <string name="spoken_emoji_1F31E" msgid="8022112382524084418">"ព្រះ​អាទិត្យ​មានមុខ​មនុស្ស"</string>
+ <string name="spoken_emoji_1F31F" msgid="1051661214137766369">"ផ្កាយ"</string>
+ <string name="spoken_emoji_1F320" msgid="5450591979068216115">"បាញ់​ផ្កាយ"</string>
+ <string name="spoken_emoji_1F330" msgid="3115760035618051575">"ឆេសណាត់"</string>
+ <string name="spoken_emoji_1F331" msgid="5658888205290008691">"កូន​ឈើ"</string>
+ <string name="spoken_emoji_1F332" msgid="2935650450421165938">"ដើម​ឈើ​បៃតង"</string>
+ <string name="spoken_emoji_1F333" msgid="5898847427062482675">"ដើម​ឈើ​មិន​ខៀវ​ជា​និច្ច"</string>
+ <string name="spoken_emoji_1F334" msgid="6183375224678417894">"ដើម​ត្នោត"</string>
+ <string name="spoken_emoji_1F335" msgid="5352418412103584941">"ដំបង​យក្ស"</string>
+ <string name="spoken_emoji_1F337" msgid="3839107352363566289">"ផ្កា"</string>
+ <string name="spoken_emoji_1F338" msgid="6389970364260468490">"ផ្កាឈឺរី"</string>
+ <string name="spoken_emoji_1F339" msgid="9128891447985256151">"ផ្កា​កុលាប"</string>
+ <string name="spoken_emoji_1F33A" msgid="2025828400095233078">"ផ្កា​រំយោល"</string>
+ <string name="spoken_emoji_1F33B" msgid="8163868254348448552">"ផ្កា​ឈូករ័ត្ន"</string>
+ <string name="spoken_emoji_1F33C" msgid="6850371206262335812">"ផ្កា"</string>
+ <string name="spoken_emoji_1F33D" msgid="9033484052864509610">"ស្នៀត​​​​ពោត"</string>
+ <string name="spoken_emoji_1F33E" msgid="2540173396638444120">"គួរ​ស្រូវ"</string>
+ <string name="spoken_emoji_1F33F" msgid="4384823344364908558">"រុក្ខជាតិ"</string>
+ <string name="spoken_emoji_1F340" msgid="3494255459156499305">"ដើម​ដង្ហិត"</string>
+ <string name="spoken_emoji_1F341" msgid="4581959481754990158">"ស្លឹក​ឈើ"</string>
+ <string name="spoken_emoji_1F342" msgid="3119068426871821222">"ស្លឹក​ឈើ​ជ្រុះ"</string>
+ <string name="spoken_emoji_1F343" msgid="2663317495805149004">"ស្លឹកឈើបក់តាមខ្យល់"</string>
+ <string name="spoken_emoji_1F344" msgid="2738517881678722159">"ផ្សិត"</string>
+ <string name="spoken_emoji_1F345" msgid="6135288642349085554">"ប៉េងប៉ោះ"</string>
+ <string name="spoken_emoji_1F346" msgid="2075395322785406367">"ត្រប់"</string>
+ <string name="spoken_emoji_1F347" msgid="7753453754963890571">"ទំពាំង​បាយ​ជូរ"</string>
+ <string name="spoken_emoji_1F348" msgid="1247076837284932788">"ត្រសក់​ស្រូវ"</string>
+ <string name="spoken_emoji_1F349" msgid="5563054555180611086">"ឪឡឹក"</string>
+ <string name="spoken_emoji_1F34A" msgid="4688661208570160524">"ក្រូច​ឃ្វិច"</string>
+ <string name="spoken_emoji_1F34B" msgid="4335318423164185706">"ក្រូចឆ្មារ"</string>
+ <string name="spoken_emoji_1F34C" msgid="3712827239858159474">"​ចេក"</string>
+ <string name="spoken_emoji_1F34D" msgid="7712521967162622936">"ម្នាស់"</string>
+ <string name="spoken_emoji_1F34E" msgid="1859466882598614228">"​ប៉ោម​​​ក្រហម"</string>
+ <string name="spoken_emoji_1F34F" msgid="8251711032295005633">"​ប៉ោម​​​បៃតង"</string>
+ <string name="spoken_emoji_1F350" msgid="625802980159197701">"ផ្លែព័រ"</string>
+ <string name="spoken_emoji_1F351" msgid="4269460120610911895">"ផ្លែប៉ែស"</string>
+ <string name="spoken_emoji_1F352" msgid="965600953360182635">"ផ្លែ​ឈឺរី"</string>
+ <string name="spoken_emoji_1F353" msgid="7068623879906925592">"ផ្លែស្ត្របេរី"</string>
+ <string name="spoken_emoji_1F354" msgid="45162285238888494">"ហាំប៊ឺហ្គឺ"</string>
+ <string name="spoken_emoji_1F355" msgid="9157587635526433283">"ភីហ្សា​​មួយ​ស្លាយ"</string>
+ <string name="spoken_emoji_1F356" msgid="2667196119149852244">"សាច់ចង្កាក់"</string>
+ <string name="spoken_emoji_1F357" msgid="8022817413851052256">"ភ្លៅ​មាន់"</string>
+ <string name="spoken_emoji_1F358" msgid="3042693264748036476">"ប៊ីស្គី​បាយ"</string>
+ <string name="spoken_emoji_1F359" msgid="3988148661730121958">"ដុំ​បាយ"</string>
+ <string name="spoken_emoji_1F35A" msgid="1763824172198327268">"បាយ​មួយ​ចាន"</string>
+ <string name="spoken_emoji_1F35B" msgid="62530406745717835">"ការី​ និង​បាយ"</string>
+ <string name="spoken_emoji_1F35C" msgid="7537756539198945509">"ចាន​ចំហុយ"</string>
+ <string name="spoken_emoji_1F35D" msgid="8173523083861875196">"ស្ប៉ាហ្គាទី"</string>
+ <string name="spoken_emoji_1F35E" msgid="2935428307894662571">"នំប៉័ង"</string>
+ <string name="spoken_emoji_1F35F" msgid="4840297386785728443">"ដំឡូង​បំពង"</string>
+ <string name="spoken_emoji_1F360" msgid="4094659855684686801">"ដំឡូង​ដុត"</string>
+ <string name="spoken_emoji_1F361" msgid="6475486395784096109">"ប្រហិត​ដោត​ចង្កាក់"</string>
+ <string name="spoken_emoji_1F362" msgid="5004692577661076275">"ម្ហូប​សមុទ្រ​ដោត​ចង្កាក់"</string>
+ <string name="spoken_emoji_1F363" msgid="1606603765717743806">"ស៊ូស៊ី"</string>
+ <string name="spoken_emoji_1F364" msgid="6550457766169570811">"កំពឹស​ចៀន"</string>
+ <string name="spoken_emoji_1F365" msgid="4963815540953316307">"នំ​ត្រី​រាង​មូល"</string>
+ <string name="spoken_emoji_1F366" msgid="7862401745277049404">"ការ៉េម​​បំពង់"</string>
+ <string name="spoken_emoji_1F367" msgid="7447972978281980414">"ការ៉េម​កែវ"</string>
+ <string name="spoken_emoji_1F368" msgid="7790003146142724913">"ការ៉េម"</string>
+ <string name="spoken_emoji_1F369" msgid="7383712944084857350">"ដូណាត់"</string>
+ <string name="spoken_emoji_1F36A" msgid="2726271795913042295">"ខូគី"</string>
+ <string name="spoken_emoji_1F36B" msgid="6342163604299875931">"​​សូកូឡា"</string>
+ <string name="spoken_emoji_1F36C" msgid="2168934753998218790">"ស្ករគ្រាប់"</string>
+ <string name="spoken_emoji_1F36D" msgid="3671507903799975792">"ស្ករ​គ្រាប់​មាន​ដង​​កាន់"</string>
+ <string name="spoken_emoji_1F36E" msgid="4630541402785165902">"សង់ខ្យា"</string>
+ <string name="spoken_emoji_1F36F" msgid="5577915387425169439">"ថូ"</string>
+ <string name="spoken_emoji_1F370" msgid="7243244547866114951">"នំ​ខេក"</string>
+ <string name="spoken_emoji_1F371" msgid="6731527040552916358">"ប្រអប់​បេនតូ"</string>
+ <string name="spoken_emoji_1F372" msgid="1635035323832181733">"ឆ្នាំង​អាហារ"</string>
+ <string name="spoken_emoji_1F373" msgid="7799289534289221045">"ចម្អិន​អាហារ"</string>
+ <string name="spoken_emoji_1F374" msgid="5973820884987069131">"សម ​និង​កាំបិត"</string>
+ <string name="spoken_emoji_1F375" msgid="1074832087699617700">"ពែង​តែ​អត់​ដៃកាន់"</string>
+ <string name="spoken_emoji_1F376" msgid="6499274685584852067">"ដប និង​ពែង"</string>
+ <string name="spoken_emoji_1F377" msgid="1762398562314172075">"កែវ​ស្រា"</string>
+ <string name="spoken_emoji_1F378" msgid="5528234560590117516">"កែវ​ស្រា​ក្រឡុក"</string>
+ <string name="spoken_emoji_1F379" msgid="790581290787943325">"ភេសជ្ជៈ​​​ត្រូពិក"</string>
+ <string name="spoken_emoji_1F37A" msgid="391966822450619516">"កែវ​​ស្រាបៀ"</string>
+ <string name="spoken_emoji_1F37B" msgid="9015043286465670662">"ជល់​កែវ​ស្រាបៀ"</string>
+ <string name="spoken_emoji_1F37C" msgid="2532113819464508894">"ដប​ទឹកដោះ​គោ"</string>
+ <string name="spoken_emoji_1F380" msgid="3487363857092458827">"ខ្សែ​បូ"</string>
+ <string name="spoken_emoji_1F381" msgid="614180683680675444">"ខ្ចប់​កា​ដូរ"</string>
+ <string name="spoken_emoji_1F382" msgid="4720497171946687501">"នំ​ខួប​កំណើត"</string>
+ <string name="spoken_emoji_1F383" msgid="3536505941578757623">"គោម"</string>
+ <string name="spoken_emoji_1F384" msgid="1797870204479059004">"ដើម​ឈើ​បុណ្យ​ណូអែល"</string>
+ <string name="spoken_emoji_1F385" msgid="1754174063483626367">"តា​ណូអែល"</string>
+ <string name="spoken_emoji_1F386" msgid="2130445450758114746">"កាំជ្រួច"</string>
+ <string name="spoken_emoji_1F387" msgid="3403182563117999933">"ពន្លឺ​កាំជ្រួច"</string>
+ <string name="spoken_emoji_1F388" msgid="2903047203723251804">"ប៉េងប៉ោង"</string>
+ <string name="spoken_emoji_1F389" msgid="2352830665883549388">"ឧបករណ៍​​​ផ្ទុះ​ពេល​ជប់លៀង"</string>
+ <string name="spoken_emoji_1F38A" msgid="6280428984773641322">"ក្រដាស​ពណ៌​តូចៗ"</string>
+ <string name="spoken_emoji_1F38B" msgid="4902225837479015489">"ដើម​​តាណាប៉ាតា"</string>
+ <string name="spoken_emoji_1F38C" msgid="7623268024030989365">"ទង់​ជាតិ​ខ្វែង"</string>
+ <string name="spoken_emoji_1F38D" msgid="8237542796124408528">"ការ​តុបតែង​ដោយ​​ផ្លែ​ស្រល់"</string>
+ <string name="spoken_emoji_1F38E" msgid="5373397476238212371">"តុក្កតា​ជប៉ុន"</string>
+ <string name="spoken_emoji_1F38F" msgid="8754091376829552844">"ខ្សែ​បូ​ត្រី​គល់រាំង"</string>
+ <string name="spoken_emoji_1F390" msgid="8903307048095431374">"កណ្ដឹង​ខ្យល់"</string>
+ <string name="spoken_emoji_1F391" msgid="2134952069191911841">"ពិធី​មើល​ព្រះ​ចន្ទ"</string>
+ <string name="spoken_emoji_1F392" msgid="6380405493914304737">"កាបូប​ទៅសាលារៀន"</string>
+ <string name="spoken_emoji_1F393" msgid="6947890064872470996">"មួក​ទទួល​សញ្ញាប័ត្រ"</string>
+ <string name="spoken_emoji_1F3A0" msgid="3572095190082826057">"សេះ​ក្មេង​ជិះ​លេង"</string>
+ <string name="spoken_emoji_1F3A1" msgid="4300565511681058798">"កន្ត្រក​វិល"</string>
+ <string name="spoken_emoji_1F3A2" msgid="15486093912232140">"រថយន្ត​សម្រាប់​ពាក់​ជិះ​រំអិល"</string>
+ <string name="spoken_emoji_1F3A3" msgid="921739319504942924">"ដង​សន្ទូច និង​ត្រី"</string>
+ <string name="spoken_emoji_1F3A4" msgid="7497596355346856950">"មីក្រូហ្វូន"</string>
+ <string name="spoken_emoji_1F3A5" msgid="4290497821228183002">"ម៉ាស៊ីន​ថត​ភាព​យន្ត"</string>
+ <string name="spoken_emoji_1F3A6" msgid="26019057872319055">"ភាពយន្ត"</string>
+ <string name="spoken_emoji_1F3A7" msgid="837856608794094105">"កាស"</string>
+ <string name="spoken_emoji_1F3A8" msgid="2332260356509244587">"ក្ដារ​លាយ​ពណ៌​វិចិត្រករ"</string>
+ <string name="spoken_emoji_1F3A9" msgid="9045869366525115256">"មួក​​​សម្ដែង​សិល្បៈ"</string>
+ <string name="spoken_emoji_1F3AA" msgid="5728760354237132">"តង់​សៀក"</string>
+ <string name="spoken_emoji_1F3AB" msgid="1657997517193216284">"សំបុត្រ"</string>
+ <string name="spoken_emoji_1F3AC" msgid="4317366554314492152">"បន្ទះកណ្ដឹង"</string>
+ <string name="spoken_emoji_1F3AD" msgid="607157286336130470">"សម្ដែង​សិល្បៈ"</string>
+ <string name="spoken_emoji_1F3AE" msgid="2902308174671548150">"ហ្គេម​​វីដេអូ"</string>
+ <string name="spoken_emoji_1F3AF" msgid="5420539221790296407">"វាយ​​​ចំគោលដៅ"</string>
+ <string name="spoken_emoji_1F3B0" msgid="7440244806527891956">"ម៉ាស៊ីន​​​ដាក់​កាក់"</string>
+ <string name="spoken_emoji_1F3B1" msgid="545544382391379234">"ល្បែង​បុក​ប៊ីយ៉ា"</string>
+ <string name="spoken_emoji_1F3B2" msgid="8302262034774787493">"ហ្គេម​ឡុកឡាក់"</string>
+ <string name="spoken_emoji_1F3B3" msgid="5180870610771027520">"ប៊ូលីង"</string>
+ <string name="spoken_emoji_1F3B4" msgid="4723852033266071564">"សន្លឹក​បៀរ​​មាន​ផ្កា"</string>
+ <string name="spoken_emoji_1F3B5" msgid="1998470239850548554">"ណោត​តន្ត្រី"</string>
+ <string name="spoken_emoji_1F3B6" msgid="3827730457113941705">"ណោត​តន្ត្រីច្រើន"</string>
+ <string name="spoken_emoji_1F3B7" msgid="5503403099445042180">"ត្រែ"</string>
+ <string name="spoken_emoji_1F3B8" msgid="3985658156795011430">"ហ្គីតា"</string>
+ <string name="spoken_emoji_1F3B9" msgid="5596295757967881451">"ខ្ទង់​សម្រាប់​ចុច​តន្ត្រី"</string>
+ <string name="spoken_emoji_1F3BA" msgid="4284064120340683558">"ត្រុំប៉ែត"</string>
+ <string name="spoken_emoji_1F3BB" msgid="2856598510069988745">"វីយូឡុង"</string>
+ <string name="spoken_emoji_1F3BC" msgid="1608424748821446230">"និមិត្តសញ្ញា​តន្ត្រី"</string>
+ <string name="spoken_emoji_1F3BD" msgid="5490786111375627777">"អាវ​កីឡា​​មាន​ខ្សែ​ឆៀង"</string>
+ <string name="spoken_emoji_1F3BE" msgid="1851613105691627931">"រ៉ាកែត និង​បាល់"</string>
+ <string name="spoken_emoji_1F3BF" msgid="6862405997423247921">"ជិះ​ស្គី ​និង​ក្ដារ​​ស្គី"</string>
+ <string name="spoken_emoji_1F3C0" msgid="7421420756115104085">"បាល់​បោះ​ និង​វណ្ណ​មូល"</string>
+ <string name="spoken_emoji_1F3C1" msgid="6926537251677319922">"ទង់ជាតិ​ប្រណាំង​ម៉ូតូ"</string>
+ <string name="spoken_emoji_1F3C2" msgid="5708596929237987082">"អ្នក​ជិះ​​ក្ដារ​រំអិល​លើ​ព្រិល"</string>
+ <string name="spoken_emoji_1F3C3" msgid="5850982999510115824">"អ្នក​រត់"</string>
+ <string name="spoken_emoji_1F3C4" msgid="8468355585994639838">"អ្នក​ជិះ​ទូក​រអិល​លើ​ទឹក"</string>
+ <string name="spoken_emoji_1F3C6" msgid="9094474706847545409">"ពាន​រង្វាន់"</string>
+ <string name="spoken_emoji_1F3C7" msgid="8172206200368370116">"​ប្រណាំង​សេះ"</string>
+ <string name="spoken_emoji_1F3C8" msgid="5619171461277597709">"​បាល់​ទាត់​អាមេរិក"</string>
+ <string name="spoken_emoji_1F3C9" msgid="6371294008765871043">"បាល់​អោប"</string>
+ <string name="spoken_emoji_1F3CA" msgid="130977831787806932">"អ្នក​ហែលទឹក"</string>
+ <string name="spoken_emoji_1F3E0" msgid="6277213201655811842">"ការ​សាងសង់​​ផ្ទះ"</string>
+ <string name="spoken_emoji_1F3E1" msgid="233476176077538885">"ផ្ទះ​មាន​សួន​ច្បារ"</string>
+ <string name="spoken_emoji_1F3E2" msgid="919736380093964570">"អគារ​ការិយាល័យ"</string>
+ <string name="spoken_emoji_1F3E3" msgid="6177606081825094184">"ការិយាល័យ​ប្រៃសណីយ៍​ជប៉ុន"</string>
+ <string name="spoken_emoji_1F3E4" msgid="717377871070970293">"ការិយាល័យ​ប្រៃសណីយ៍​អឺរ៉ុប"</string>
+ <string name="spoken_emoji_1F3E5" msgid="1350532500431776780">"មន្ទីរពេទ្យ"</string>
+ <string name="spoken_emoji_1F3E6" msgid="342132788513806214">"ធនាគារ"</string>
+ <string name="spoken_emoji_1F3E7" msgid="6322352038284944265">"ម៉ាស៊ីន​​អេធីអឹម"</string>
+ <string name="spoken_emoji_1F3E8" msgid="5864918444350599907">"សណ្ឋាគារ"</string>
+ <string name="spoken_emoji_1F3E9" msgid="7830416185375326938">"សណ្ឋាគារ​ក្ដី​ស្រឡាញ់"</string>
+ <string name="spoken_emoji_1F3EA" msgid="5081084413084360479">"ហាង​​ទំនិញ ២៤​ម៉ោង"</string>
+ <string name="spoken_emoji_1F3EB" msgid="7010966528205150525">"សាលារៀន"</string>
+ <string name="spoken_emoji_1F3EC" msgid="4845978861878295154">"ហាង​​ទំនិញធំៗ"</string>
+ <string name="spoken_emoji_1F3ED" msgid="3980316226665215370">"រោងចក្រ"</string>
+ <string name="spoken_emoji_1F3EE" msgid="1253964276770550248">"ចង្កៀង​គោម Izakaya"</string>
+ <string name="spoken_emoji_1F3EF" msgid="1128975573507389883">"វិមាន​​ជប៉ុន"</string>
+ <string name="spoken_emoji_1F3F0" msgid="1544632297502291578">"វិមាន​អឺរ៉ុប"</string>
+ <string name="spoken_emoji_1F400" msgid="2063034795679578294">"កណ្ដុរ​ប្រែង"</string>
+ <string name="spoken_emoji_1F401" msgid="6736421616217369594">"កណ្ដុរ​ប្រមះ"</string>
+ <string name="spoken_emoji_1F402" msgid="7276670995895485604">"គោ"</string>
+ <string name="spoken_emoji_1F403" msgid="8045709541897118928">"ក្របី​ទឹក"</string>
+ <string name="spoken_emoji_1F404" msgid="5240777285676662335">"គោ"</string>
+ <string name="spoken_emoji_1F406" msgid="5163461930159540018">"ខ្លា​រខិន"</string>
+ <string name="spoken_emoji_1F407" msgid="6905370221172708160">"ទន្សាយ"</string>
+ <string name="spoken_emoji_1F408" msgid="1362164550508207284">"ឆ្មា"</string>
+ <string name="spoken_emoji_1F409" msgid="8476130983168866013">"នាគ"</string>
+ <string name="spoken_emoji_1F40A" msgid="1149626786411545043">"ក្រពើ"</string>
+ <string name="spoken_emoji_1F40B" msgid="5199104921208397643">"​ត្រី​បាឡែន"</string>
+ <string name="spoken_emoji_1F40C" msgid="2704006052881702675">"ខ្យង់ក្ដក់"</string>
+ <string name="spoken_emoji_1F40D" msgid="8648186663643157522">"ពស់"</string>
+ <string name="spoken_emoji_1F40E" msgid="7219137467573327268">"សេះ"</string>
+ <string name="spoken_emoji_1F40F" msgid="7834336676729040395">"ចៀម​ឈ្មោល"</string>
+ <string name="spoken_emoji_1F410" msgid="8686765722255775031">"ពពែ"</string>
+ <string name="spoken_emoji_1F411" msgid="3585715397876383525">"ចៀម"</string>
+ <string name="spoken_emoji_1F412" msgid="4924794582980077838">"ស្វា"</string>
+ <string name="spoken_emoji_1F413" msgid="1460475310405677377">"មាន់​ឈ្មោល"</string>
+ <string name="spoken_emoji_1F414" msgid="5857296282631892219">"​មាន់"</string>
+ <string name="spoken_emoji_1F415" msgid="5920041074892949527">"ឆ្កែ"</string>
+ <string name="spoken_emoji_1F416" msgid="4362403392912540286">"ជ្រូក"</string>
+ <string name="spoken_emoji_1F417" msgid="6836978415840795128">"ជ្រូក​ព្រៃ"</string>
+ <string name="spoken_emoji_1F418" msgid="7926161463897783691">"ដំរី"</string>
+ <string name="spoken_emoji_1F419" msgid="1055233959755784186">"មឹក"</string>
+ <string name="spoken_emoji_1F41A" msgid="5195666556511558060">"ខ្យង​គ្រែង"</string>
+ <string name="spoken_emoji_1F41B" msgid="7652480167465557832">"សង្កើច"</string>
+ <string name="spoken_emoji_1F41C" msgid="1123461148697574239">"ស្រមោច"</string>
+ <string name="spoken_emoji_1F41D" msgid="718579308764058851">"ឃ្មុំ"</string>
+ <string name="spoken_emoji_1F41E" msgid="6766305509608115467">"អណ្ដើក​មាស"</string>
+ <string name="spoken_emoji_1F41F" msgid="1207261298343160838">"ត្រី"</string>
+ <string name="spoken_emoji_1F420" msgid="1041145003133609221">"ត្រី​តំបន់​ត្រូពិក"</string>
+ <string name="spoken_emoji_1F421" msgid="1748378324417438751">"ត្រី​ក្រពត"</string>
+ <string name="spoken_emoji_1F422" msgid="4106724877523329148">"អណ្ដើក"</string>
+ <string name="spoken_emoji_1F423" msgid="4077407945958691907">"កូនមាន់ញាស់"</string>
+ <string name="spoken_emoji_1F424" msgid="6911326019270172283">"កូន​មាន់"</string>
+ <string name="spoken_emoji_1F425" msgid="5466514196557885577">"មុខ​កូន​មាន់"</string>
+ <string name="spoken_emoji_1F426" msgid="2163979138772892755">"បក្សី"</string>
+ <string name="spoken_emoji_1F427" msgid="3585670324511212961">"ភេនឃ្វីន"</string>
+ <string name="spoken_emoji_1F428" msgid="7955440808647898579">"ខ្លាឃ្មុំ"</string>
+ <string name="spoken_emoji_1F429" msgid="5028269352809819035">"ឆ្កែ"</string>
+ <string name="spoken_emoji_1F42A" msgid="4681926706404032484">"អូដ្ឋ​​បូក​មួយ"</string>
+ <string name="spoken_emoji_1F42B" msgid="2725166074981558322">"អូដ្ឋ​បូក​ពីរ"</string>
+ <string name="spoken_emoji_1F42C" msgid="6764791873413727085">"ត្រី​ផ្សោត"</string>
+ <string name="spoken_emoji_1F42D" msgid="1033643138546864251">"មុខ​កណ្ដុរ"</string>
+ <string name="spoken_emoji_1F42E" msgid="8099223337120508820">"មុខ​​គោ"</string>
+ <string name="spoken_emoji_1F42F" msgid="2104743989330781572">"មុខ​ខ្លា"</string>
+ <string name="spoken_emoji_1F430" msgid="525492897063150160">"មុខ​ទន្សាយ"</string>
+ <string name="spoken_emoji_1F431" msgid="6051358666235016851">"មុខ​ឆ្មា"</string>
+ <string name="spoken_emoji_1F432" msgid="7698001871193018305">"មុខ​នាគ"</string>
+ <string name="spoken_emoji_1F433" msgid="3762356053512899326">"ព្រុយ​ត្រី​បាឡែន"</string>
+ <string name="spoken_emoji_1F434" msgid="3619943222159943226">"មុខ​សេះ"</string>
+ <string name="spoken_emoji_1F435" msgid="59199202683252958">"មុខ​ស្វា"</string>
+ <string name="spoken_emoji_1F436" msgid="340544719369009828">"មុខ​ឆ្កែ"</string>
+ <string name="spoken_emoji_1F437" msgid="1219818379784982585">"មុខ​ជ្រូក"</string>
+ <string name="spoken_emoji_1F438" msgid="9128124743321008210">"មុខ​កង្កែប"</string>
+ <string name="spoken_emoji_1F439" msgid="1424161319554642266">"មុខ​កណ្ដុរ"</string>
+ <string name="spoken_emoji_1F43A" msgid="6727645488430385584">"មុខ​ចចក"</string>
+ <string name="spoken_emoji_1F43B" msgid="5397170068392865167">"​​មុខ​ខ្លាឃ្មុំ"</string>
+ <string name="spoken_emoji_1F43C" msgid="2715995734367032431">"មុខ​ខ្លាឃ្មុំ​ផេ​ន​ដា"</string>
+ <string name="spoken_emoji_1F43D" msgid="6005480717951776597">"ច្រមុះ​ជ្រូក"</string>
+ <string name="spoken_emoji_1F43E" msgid="8917626103219080547">"ក្រញាំ​​ជើង"</string>
+ <string name="spoken_emoji_1F440" msgid="7144338258163384433">"ភ្នែក"</string>
+ <string name="spoken_emoji_1F442" msgid="1905515392292676124">"ត្រចៀក"</string>
+ <string name="spoken_emoji_1F443" msgid="1491504447758933115">"ច្រមុះ"</string>
+ <string name="spoken_emoji_1F444" msgid="3654613047946080332">"មាត់"</string>
+ <string name="spoken_emoji_1F445" msgid="7024905244040509204">"អណ្ដាត"</string>
+ <string name="spoken_emoji_1F446" msgid="2150365643636471745">"ចង្អុល​ដៃ​ឡើង​លើ"</string>
+ <string name="spoken_emoji_1F447" msgid="8794022344940891388">"ចង្អុល​ដៃ​​ចុះ​ក្រោម"</string>
+ <string name="spoken_emoji_1F448" msgid="3261812959215550650">"ចង្អុល​ដៃ​ទៅ​ឆ្វេង"</string>
+ <string name="spoken_emoji_1F449" msgid="4764447975177805991">"ចង្អុល​ដៃ​ទៅ​ស្ដាំ"</string>
+ <string name="spoken_emoji_1F44A" msgid="7197417095486424841">"កណ្ដាប់ដៃ"</string>
+ <string name="spoken_emoji_1F44B" msgid="1975968945250833117">"គ្រវី​បាត​ដៃ"</string>
+ <string name="spoken_emoji_1F44C" msgid="3185919567897876562">"សញ្ញា​អូខេ"</string>
+ <string name="spoken_emoji_1F44D" msgid="6182553970602667815">"​មេដៃ​ឡើង​លើ"</string>
+ <string name="spoken_emoji_1F44E" msgid="8030851867365111809">"​មេដៃ​ចុះ​ក្រោម"</string>
+ <string name="spoken_emoji_1F44F" msgid="5148753662268213389">"ទះ​ដៃ"</string>
+ <string name="spoken_emoji_1F450" msgid="1012021072085157054">"លា​ដៃ"</string>
+ <string name="spoken_emoji_1F451" msgid="8257466714629051320">"មកុដ"</string>
+ <string name="spoken_emoji_1F452" msgid="4567394011149905466">"មួក​​ស្ត្រី"</string>
+ <string name="spoken_emoji_1F453" msgid="5978410551173163010">"វ៉ែនតា"</string>
+ <string name="spoken_emoji_1F454" msgid="348469036193323252">"ក្រ​វ៉ាត់​ករ"</string>
+ <string name="spoken_emoji_1F455" msgid="5665118831861433578">"អាវ​យឺត"</string>
+ <string name="spoken_emoji_1F456" msgid="1890991330923356408">"ខោ​ខោវប៊យ"</string>
+ <string name="spoken_emoji_1F457" msgid="3904310482655702620">"សំលៀក​បំពាក់"</string>
+ <string name="spoken_emoji_1F458" msgid="5704243858031107692">"គី​ម៉ូណូ"</string>
+ <string name="spoken_emoji_1F459" msgid="3553148747050035251">"ឈុត​ហែល​ទឹក"</string>
+ <string name="spoken_emoji_1F45A" msgid="1389654639484716101">"សំលៀកបំពាក់​នារី"</string>
+ <string name="spoken_emoji_1F45B" msgid="1113293170254222904">"កាបូប"</string>
+ <string name="spoken_emoji_1F45C" msgid="3410257778598006936">"កាបូប​ដៃ"</string>
+ <string name="spoken_emoji_1F45D" msgid="812176504300064819">"ថង់"</string>
+ <string name="spoken_emoji_1F45E" msgid="2901741399934723562">"ស្បែកជើង​បុរស"</string>
+ <string name="spoken_emoji_1F45F" msgid="6828566359287798863">"ស្បែក​ជើង​កីឡា"</string>
+ <string name="spoken_emoji_1F460" msgid="305863879170420855">"ស្បែកជើង​កែង"</string>
+ <string name="spoken_emoji_1F461" msgid="5160493217831417630">"ស្បែក​ជើង​ស៊ក​ស្រ្តី"</string>
+ <string name="spoken_emoji_1F462" msgid="1722897795554863734">"​ស្បែក​ជើង​ក​វែង​ស្ត្រី"</string>
+ <string name="spoken_emoji_1F463" msgid="5850772903593010699">"ដាន​ជើង"</string>
+ <string name="spoken_emoji_1F464" msgid="1228335905487734913">"គណនី​ភ្ញៀវ"</string>
+ <string name="spoken_emoji_1F465" msgid="4461307702499679879">"គណនី"</string>
+ <string name="spoken_emoji_1F466" msgid="1938873085514108889">"ក្មេង​​ប្រុស"</string>
+ <string name="spoken_emoji_1F467" msgid="8237080594860144998">"ក្មេង​ស្រី"</string>
+ <string name="spoken_emoji_1F468" msgid="6081300722526675382">"បុរស"</string>
+ <string name="spoken_emoji_1F469" msgid="1090140923076108158">"ស្ត្រី"</string>
+ <string name="spoken_emoji_1F46A" msgid="5063570981942606595">"គ្រួសារ"</string>
+ <string name="spoken_emoji_1F46B" msgid="6795882374287327952">"បុរស​​ និង​ស្ត្រី​កាន់ដៃ​គ្នា"</string>
+ <string name="spoken_emoji_1F46C" msgid="6844464165783964495">"បុរស​ពីរ​នាក់​កាន់​ដៃ​គ្នា"</string>
+ <string name="spoken_emoji_1F46D" msgid="2316773068014053180">"ស្ត្រី​​​ពីរ​កាន់​ដៃ​គ្នា"</string>
+ <string name="spoken_emoji_1F46E" msgid="5897625605860822401">"មន្ត្រី​ប៉ូលិស"</string>
+ <string name="spoken_emoji_1F46F" msgid="7716871657717641490">"ស្ត្រី​​ចង​សក់​ទីទុយ"</string>
+ <string name="spoken_emoji_1F470" msgid="6409995400510338892">"កូនក្រមុំ​​ពាក់​​ស្បៃ​មុខ"</string>
+ <string name="spoken_emoji_1F471" msgid="3058247860441670806">"មនុស្ស​​មាន​សក់​​ពណ៌​ទង់ដែង"</string>
+ <string name="spoken_emoji_1F472" msgid="3928854667819339142">"បុរស​​ពុកមាត់​ឆ្មា"</string>
+ <string name="spoken_emoji_1F473" msgid="5921952095808988381">"បុរស​ពាក់​ឈ្នួត"</string>
+ <string name="spoken_emoji_1F474" msgid="1082237499496725183">"បុរស​​ចំណាស់"</string>
+ <string name="spoken_emoji_1F475" msgid="7280323988642212761">"ស្ត្រី​ចំណាស់"</string>
+ <string name="spoken_emoji_1F476" msgid="4713322657821088296">"ទារក"</string>
+ <string name="spoken_emoji_1F477" msgid="2197036131029221370">"កម្មករ​សំណង់"</string>
+ <string name="spoken_emoji_1F478" msgid="7245521193493488875">"ព្រះអង្គម្ចាស់​ក្សត្រី"</string>
+ <string name="spoken_emoji_1F479" msgid="6876475321015553972">"សត្វ​ចម្លែក​ជប៉ុន"</string>
+ <string name="spoken_emoji_1F47A" msgid="3900813633102703571">"ម្រេញគង្វាល​ជប៉ុន"</string>
+ <string name="spoken_emoji_1F47B" msgid="2608250873194079390">"ខ្មោច"</string>
+ <string name="spoken_emoji_1F47C" msgid="3838699131276537421">"អប្សរា​​ទារក"</string>
+ <string name="spoken_emoji_1F47D" msgid="2874077455888369538">"មនុស្ស​ក្រៅ​ភព"</string>
+ <string name="spoken_emoji_1F47E" msgid="3642607168625579507">"សត្វ​ចម្លែក​ក្រៅ​​ភព"</string>
+ <string name="spoken_emoji_1F47F" msgid="441605977269926252">"ប្រែត"</string>
+ <string name="spoken_emoji_1F480" msgid="3696253485164878739">"លលាដ៍​ក្បាល"</string>
+ <string name="spoken_emoji_1F481" msgid="320408708521966893">"អ្នក​ផ្ដល់​ព័ត៌មាន"</string>
+ <string name="spoken_emoji_1F482" msgid="3424354860245608949">"អ្នក​យាម"</string>
+ <string name="spoken_emoji_1F483" msgid="3221113594843849083">"អ្នក​រាំ"</string>
+ <string name="spoken_emoji_1F484" msgid="7348014979080444885">"ក្រេម​លាប​បបូរ​មាត់"</string>
+ <string name="spoken_emoji_1F485" msgid="6133507975565116339">"ថ្នាំ​លាប​​​ក្រចក"</string>
+ <string name="spoken_emoji_1F486" msgid="9085459968247394155">"ម៉ាស្សា​មុខ"</string>
+ <string name="spoken_emoji_1F487" msgid="1479113637259592150">"កាត់សក់"</string>
+ <string name="spoken_emoji_1F488" msgid="6922559285234100252">"ស្លាក​សញ្ញា​កាត់សក់"</string>
+ <string name="spoken_emoji_1F489" msgid="8114863680950147305">"ស៊ីរ៉ាំង"</string>
+ <string name="spoken_emoji_1F48A" msgid="8526843630145963032">"ថ្នាំ​គ្រាប់"</string>
+ <string name="spoken_emoji_1F48B" msgid="2538528967897640292">"ស្នាម​ថើប"</string>
+ <string name="spoken_emoji_1F48C" msgid="1681173271652890232">"លិខិត​ស្នេហា"</string>
+ <string name="spoken_emoji_1F48D" msgid="8259886164999042373">"រោទ៍"</string>
+ <string name="spoken_emoji_1F48E" msgid="8777981696011111101">"ត្បូង​ថ្ម"</string>
+ <string name="spoken_emoji_1F48F" msgid="741593675183677907">"ថើប"</string>
+ <string name="spoken_emoji_1F490" msgid="4482549128959806736">"បាច់​​ផ្កា"</string>
+ <string name="spoken_emoji_1F491" msgid="2305245307882441500">"ប្ដី​ប្រពន្ធ​​ និង​រូប​បេះដូង"</string>
+ <string name="spoken_emoji_1F492" msgid="3884119934804475732">"អាពាហ៍ពិពាហ៍"</string>
+ <string name="spoken_emoji_1F493" msgid="1208828371565525121">"​សំឡេង​បេះដូង​លោត"</string>
+ <string name="spoken_emoji_1F494" msgid="6198876398509338718">"ខូច​ចិត្ត"</string>
+ <string name="spoken_emoji_1F495" msgid="9206202744967130919">"បេះដូង​​ពីរ"</string>
+ <string name="spoken_emoji_1F496" msgid="5436953041732207775">"បេះដូង​​មាន​ពន្លឺ"</string>
+ <string name="spoken_emoji_1F497" msgid="7285142863951448473">"បេះដូង​​លូតលាស់"</string>
+ <string name="spoken_emoji_1F498" msgid="7940131245037575715">"បេះដូង​​ជាប់​ព្រួញ"</string>
+ <string name="spoken_emoji_1F499" msgid="4453235040265550009">"បេះដូង​​ពណ៌​ខៀវ"</string>
+ <string name="spoken_emoji_1F49A" msgid="6262178648366971405">"បេះដូង​​ពណ៌​បៃតង"</string>
+ <string name="spoken_emoji_1F49B" msgid="8085384999750714368">"បេះដូង​​ពណ៌​លឿង"</string>
+ <string name="spoken_emoji_1F49C" msgid="453829540120898698">"បេះដូង​​ពណ៌ស្វាយ"</string>
+ <string name="spoken_emoji_1F49D" msgid="3460534750224161888">"បេះដូង​ជាប់​ខ្សែ​បូ"</string>
+ <string name="spoken_emoji_1F49E" msgid="4490636226072523867">"បេះដូង​វិល"</string>
+ <string name="spoken_emoji_1F49F" msgid="2059319756421226336">"ការ​តុបតែង​បេះដូង"</string>
+ <string name="spoken_emoji_1F4A0" msgid="1954850380550212038">"​រាង​ពេជ្រ​​មាន​​ចំណុច​​ខាង​ក្នុង"</string>
+ <string name="spoken_emoji_1F4A1" msgid="403137413540909021">"អំពូល​​អគ្គិសនី"</string>
+ <string name="spoken_emoji_1F4A2" msgid="2604192053295622063">"និមិត្ត​សញ្ញា​កំហឹង"</string>
+ <string name="spoken_emoji_1F4A3" msgid="6378351742957821735">"គ្រាប់បែក"</string>
+ <string name="spoken_emoji_1F4A4" msgid="7217736258870346625">"និមិត្ត​សញ្ញា​​ដេក"</string>
+ <string name="spoken_emoji_1F4A5" msgid="5401995723541239858">"និមិត្ត​សញ្ញា​​ប៉ះ​ទង្គិច​គ្នា"</string>
+ <string name="spoken_emoji_1F4A6" msgid="3837802182716483848">"និមិត្ត​សញ្ញា​​ស្រក់​ញើស"</string>
+ <string name="spoken_emoji_1F4A7" msgid="5718438987757885141">"ដំណក់​ទឹក"</string>
+ <string name="spoken_emoji_1F4A8" msgid="4472108229720006377">"និមិត្ត​សញ្ញា​​ដកឃ្លា"</string>
+ <string name="spoken_emoji_1F4A9" msgid="1240958472788430032">"គំនរ​ធូលី"</string>
+ <string name="spoken_emoji_1F4AA" msgid="8427525538635146416">"ដំឡើង​សាច់ដុំ​ដើមដៃ"</string>
+ <string name="spoken_emoji_1F4AB" msgid="5484114759939427459">"និមិត្ត​សញ្ញា​​វិលមុខ"</string>
+ <string name="spoken_emoji_1F4AC" msgid="5571196638219612682">"ប្រអប់​បញ្ចេញ​យោបល់"</string>
+ <string name="spoken_emoji_1F4AD" msgid="353174619257798652">"ប្រអប់​គំនិត"</string>
+ <string name="spoken_emoji_1F4AE" msgid="1223142786927162641">"ផ្កា​​ពណ៌ស"</string>
+ <string name="spoken_emoji_1F4AF" msgid="3526278354452138397">"និមិត្ត​សញ្ញា​​មួយ​រយ​ពិន្ទុ"</string>
+ <string name="spoken_emoji_1F4B0" msgid="4124102195175124156">"កាបូប​​លុយ"</string>
+ <string name="spoken_emoji_1F4B1" msgid="8339494003418572905">"ប្ដូរ​​រូបិយប័ណ្ណ"</string>
+ <string name="spoken_emoji_1F4B2" msgid="3179159430187243132">"សញ្ញា​ដុល្លារ"</string>
+ <string name="spoken_emoji_1F4B3" msgid="5375412518221759596">"កាត​​ឥណទាន"</string>
+ <string name="spoken_emoji_1F4B4" msgid="1068592463669453204">"ក្រដាស​ប្រាក់​​ធនាគារ​មាន​សញ្ញា​​យ៉េន"</string>
+ <string name="spoken_emoji_1F4B5" msgid="1426708699891832564">"លុយដុល្លារ"</string>
+ <string name="spoken_emoji_1F4B6" msgid="8289249930736444837">"ក្រដាស​ប្រាក់​​ធនាគារ​មាន​សញ្ញា​អឺរ៉ូ"</string>
+ <string name="spoken_emoji_1F4B7" msgid="5245100496860739429">"ក្រដាស​ប្រាក់​​ធនាគារ​មាន​សញ្ញា​​​ផោន"</string>
+ <string name="spoken_emoji_1F4B8" msgid="4401099580477164440">"លុយ​មាន​ស្លាប"</string>
+ <string name="spoken_emoji_1F4B9" msgid="647509393536679903">"ក្រាហ្វិក​និន្នាការ​ឡើង​​មាន​​សញ្ញា​យ៉េន"</string>
+ <string name="spoken_emoji_1F4BA" msgid="1269737854891046321">"កៅអី"</string>
+ <string name="spoken_emoji_1F4BB" msgid="6252883563347816451">"កុំព្យូទ័រ​ផ្ទាល់ខ្លួន"</string>
+ <string name="spoken_emoji_1F4BC" msgid="6182597732218446206">"វ៉ា​លី"</string>
+ <string name="spoken_emoji_1F4BD" msgid="5820961044768829176">"ឌីស​​តូច"</string>
+ <string name="spoken_emoji_1F4BE" msgid="4754542485835379808">"ថា​ស​​ទន់"</string>
+ <string name="spoken_emoji_1F4BF" msgid="2237481756984721795">"ថាស"</string>
+ <string name="spoken_emoji_1F4C0" msgid="491582501089694461">"ឌីវីឌី"</string>
+ <string name="spoken_emoji_1F4C1" msgid="6645461382494158111">"ថត​​ឯកសារ"</string>
+ <string name="spoken_emoji_1F4C2" msgid="8095638715523765338">"ថត​ឯកសារ​បើក"</string>
+ <string name="spoken_emoji_1F4C3" msgid="3727274466173970142">"ទំព័រ​​កោង"</string>
+ <string name="spoken_emoji_1F4C4" msgid="4382570710795501612">"ទំព័រ​បញ្ឈរ"</string>
+ <string name="spoken_emoji_1F4C5" msgid="8693944622627762487">"ប្រតិទិន"</string>
+ <string name="spoken_emoji_1F4C6" msgid="8469908708708424640">"ហែក​ប្រតិទិន"</string>
+ <string name="spoken_emoji_1F4C7" msgid="2665313547987324495">"​កាត​រៀប​តាម​អក្សរ"</string>
+ <string name="spoken_emoji_1F4C8" msgid="8007686702282833600">"ក្រាហ្វិក​មាន​និន្នាការ​ឡើង"</string>
+ <string name="spoken_emoji_1F4C9" msgid="2271951411192893684">"ក្រាហ្វិក​មាន​និន្នាការ​ចុះ"</string>
+ <string name="spoken_emoji_1F4CA" msgid="3525692829622381444">"គំនូស​តាង​របារ"</string>
+ <string name="spoken_emoji_1F4CB" msgid="977639227554095521">"ក្ដារ​តម្បៀត​ខ្ទាស់"</string>
+ <string name="spoken_emoji_1F4CC" msgid="156107396088741574">"ម្ជុល"</string>
+ <string name="spoken_emoji_1F4CD" msgid="4266572175361190231">"ម្ជុល​ក្បាល​មូល"</string>
+ <string name="spoken_emoji_1F4CE" msgid="6294288509864968290">"ដង្កៀប​​ក្រដាស"</string>
+ <string name="spoken_emoji_1F4CF" msgid="149679400831136810">"បន្ទាត់​ត្រង់"</string>
+ <string name="spoken_emoji_1F4D0" msgid="8130339336619202915">"បន្ទាត់​រៀង​ត្រីកោណ"</string>
+ <string name="spoken_emoji_1F4D1" msgid="5852176364856284968">"ផ្ទាំង​​​ចំណាំ"</string>
+ <string name="spoken_emoji_1F4D2" msgid="2276810154105920052">"បញ្ជី​កត់ត្រា"</string>
+ <string name="spoken_emoji_1F4D3" msgid="5873386492793610808">"សៀវភៅ"</string>
+ <string name="spoken_emoji_1F4D4" msgid="4754469936418776360">"សៀវភៅ​មាន​ក្រប​ពណ៌"</string>
+ <string name="spoken_emoji_1F4D5" msgid="4642713351802778905">"សៀវភៅ​​បិទ"</string>
+ <string name="spoken_emoji_1F4D6" msgid="6987347918381807186">"សៀវភៅ​បើក"</string>
+ <string name="spoken_emoji_1F4D7" msgid="7813394163241379223">"សៀវភៅ​​ពណ៌​បៃតង"</string>
+ <string name="spoken_emoji_1F4D8" msgid="7189799718984979521">"សៀវភៅ​​ពណ៌​ខៀវ"</string>
+ <string name="spoken_emoji_1F4D9" msgid="3874664073186440225">"សៀវភៅ​​ពណ៌​ទឹកក្រូច"</string>
+ <string name="spoken_emoji_1F4DA" msgid="872212072924287762">"សៀវភៅ"</string>
+ <string name="spoken_emoji_1F4DB" msgid="2015183603583392969">"ស្លាកឈ្មោះ"</string>
+ <string name="spoken_emoji_1F4DC" msgid="5075845110932456783">"ក្រដាស​រមូរ"</string>
+ <string name="spoken_emoji_1F4DD" msgid="2494006707147586786">"កំណត់ចំណាំ"</string>
+ <string name="spoken_emoji_1F4DE" msgid="7883008605002117671">"អ្នក​ទទួល​ទូរស័ព្ទ"</string>
+ <string name="spoken_emoji_1F4DF" msgid="3538610110623780465">"ភេយ័រ"</string>
+ <string name="spoken_emoji_1F4E0" msgid="2960778342609543077">"ម៉ាស៊ីន​​ទូរសារ"</string>
+ <string name="spoken_emoji_1F4E1" msgid="6269733703719242108">"អង់តែន​​ផ្កាយ​រណប"</string>
+ <string name="spoken_emoji_1F4E2" msgid="1987535386302883116">"អូប៉ាល័រ​ប្រកាស​សាធារណៈ"</string>
+ <string name="spoken_emoji_1F4E3" msgid="5588916572878599224">"ឧបករណ៍​បំពង​សំឡេង"</string>
+ <string name="spoken_emoji_1F4E4" msgid="2063561529097749707">"ថា​ស​​​ចេញ"</string>
+ <string name="spoken_emoji_1F4E5" msgid="3232462702926143576">"ថា​ស​ចូល"</string>
+ <string name="spoken_emoji_1F4E6" msgid="3399454337197561635">"កញ្ចប់"</string>
+ <string name="spoken_emoji_1F4E7" msgid="5557136988503873238">"និមិត្ត​សញ្ញា​អ៊ីមែល"</string>
+ <string name="spoken_emoji_1F4E8" msgid="30698793974124123">"ស្រោម​​សំបុត្រ​ចូល"</string>
+ <string name="spoken_emoji_1F4E9" msgid="5947550337678643166">"ស្រោម​សំបុត្រ​​មាន​សញ្ញា​ព្រួញ​ពី​លើ"</string>
+ <string name="spoken_emoji_1F4EA" msgid="772614045207213751">"ប្រអប់​សំបុត្រ​បិទ​មាន​ទង់​ចុះក្រោម"</string>
+ <string name="spoken_emoji_1F4EB" msgid="6491414165464146137">"ប្រអប់​សំបុត្រ​បិទ​មាន​ទង់​ឡើង​លើ"</string>
+ <string name="spoken_emoji_1F4EC" msgid="7369517138779988438">"ប្រអប់​សំបុត្រ​បើក​មាន​ទង់​ឡើង​លើ"</string>
+ <string name="spoken_emoji_1F4ED" msgid="5657520436285454241">"ប្រអប់​សំបុត្រ​បើក​មាន​ទង់ចុះក្រោម"</string>
+ <string name="spoken_emoji_1F4EE" msgid="8464138906243608614">"ប្រអប់​ប្រៃសណីយ៍"</string>
+ <string name="spoken_emoji_1F4EF" msgid="8801427577198798226">"ស្នែង​​ប្រៃសណីយ៍"</string>
+ <string name="spoken_emoji_1F4F0" msgid="6330208624731662525">"កាសែត"</string>
+ <string name="spoken_emoji_1F4F1" msgid="3966503935581675695">"ទូរស័ព្ទ​ចល័ត"</string>
+ <string name="spoken_emoji_1F4F2" msgid="1057540341746100087">"ទូរស័ព្ទ​ចល័ត​មាន​សញ្ញា​ព្រួញ​ចូល​ពី​​ឆ្វេង"</string>
+ <string name="spoken_emoji_1F4F3" msgid="5003984447315754658">"របៀប​​​ញ័រ"</string>
+ <string name="spoken_emoji_1F4F4" msgid="5549847566968306253">"បិទ​ទូរស័ព្ទ​​ចល័ត"</string>
+ <string name="spoken_emoji_1F4F5" msgid="3660199448671699238">"មិន​មាន​ទូរស័ព្ទ​​ចល័ត"</string>
+ <string name="spoken_emoji_1F4F6" msgid="2676974903233268860">"អង់តែន​មាន​របារ"</string>
+ <string name="spoken_emoji_1F4F7" msgid="2643891943105989039">"ម៉ាស៊ីន​ថត"</string>
+ <string name="spoken_emoji_1F4F9" msgid="4475626303058218048">"ម៉ាស៊ីន​ថត​វីដេអូ"</string>
+ <string name="spoken_emoji_1F4FA" msgid="1079796186652960775">"ទូរទស្សន៍"</string>
+ <string name="spoken_emoji_1F4FB" msgid="3848729587403760645">"វិទ្យុ"</string>
+ <string name="spoken_emoji_1F4FC" msgid="8370432508874310054">"ការ​សែត​វីដេអូ"</string>
+ <string name="spoken_emoji_1F500" msgid="2389947994502144547">"ព្រួញ​រមួល​ទៅ​ស្ដាំ"</string>
+ <string name="spoken_emoji_1F501" msgid="2132188352433347009">"ព្រួញ​រាង​ជា​រង្វង់​បើក​​​ស្រប​ទិស​ទ្រនិច​នាឡិកា​ទៅ​ឆ្វេង-ស្ដាំ"</string>
+ <string name="spoken_emoji_1F502" msgid="2361976580513178391">"ព្រួញ​រាង​ជា​រង្វង់​បើក​​ស្រប​ទិស​ទ្រនិច​នាឡិកា​ទៅ​ឆ្វេង-ស្ដាំ​មាន​លេខ​ ១​ក្នុង​រង្វង់​នៅ​ពី​លើ"</string>
+ <string name="spoken_emoji_1F503" msgid="8936283551917858793">"ព្រួញ​រាង​ជា​រង្វង់​បើក​​ស្រប​ទិស​ទ្រនិច​នាឡិកា​ចុះក្រោម-ឡើងលើ"</string>
+ <string name="spoken_emoji_1F504" msgid="708290317843535943">"ព្រួញ​រាង​ជា​រង្វង់​បើក​​ច្រាស​​ទិស​ទ្រនិច​នាឡិកា​ចុះក្រោម-ឡើងលើ"</string>
+ <string name="spoken_emoji_1F505" msgid="6348909939004951860">"និមិត្ត​សញ្ញា​ពន្លឺ​​ទាប"</string>
+ <string name="spoken_emoji_1F506" msgid="4449609297521280173">"និមិត្ត​សញ្ញា​​ពន្លឺ​ខ្ពស់"</string>
+ <string name="spoken_emoji_1F507" msgid="7136386694923708448">"អូប៉ាល័រ​មាន​បន្ទាត់​កាត់"</string>
+ <string name="spoken_emoji_1F508" msgid="5063567689831527865">"អូប៉ាល័រ"</string>
+ <string name="spoken_emoji_1F509" msgid="3948050077992370791">"អូប៉ាល័រ​មាន​រលក​សំឡេង​មួយ"</string>
+ <string name="spoken_emoji_1F50A" msgid="5818194948677277197">"អូប៉ាល័រ​មាន​រលក​សំឡេង​បី"</string>
+ <string name="spoken_emoji_1F50B" msgid="8083470451266295876">"ថ្ម"</string>
+ <string name="spoken_emoji_1F50C" msgid="7793219132036431680">"ដុយ​អគ្គិសនី"</string>
+ <string name="spoken_emoji_1F50D" msgid="8140244710637926780">"កែវ​ពង្រីក​ចង្អុល​ខាង​ឆ្វេង"</string>
+ <string name="spoken_emoji_1F50E" msgid="4751821352839693365">"កែវ​ពង្រីក​ចង្អុល​ខាង​ស្ដាំ"</string>
+ <string name="spoken_emoji_1F50F" msgid="915079280472199605">"ចាក់សោ​​​ដោយ​ប្រើ​​ប៊ិច"</string>
+ <string name="spoken_emoji_1F510" msgid="7658381761691758318">"បិទ​​សោ​ដោយ​ប្រើ​​​​កូនសោ"</string>
+ <string name="spoken_emoji_1F511" msgid="262319867774655688">"សោ"</string>
+ <string name="spoken_emoji_1F512" msgid="5628688337255115175">"ចាក់សោ"</string>
+ <string name="spoken_emoji_1F513" msgid="8579201846619420981">"បើក​សោ"</string>
+ <string name="spoken_emoji_1F514" msgid="7027268683047322521">"កណ្ដឹង"</string>
+ <string name="spoken_emoji_1F515" msgid="8903179856036069242">"កណ្ដឹង​មាន​បន្ទាត់​កាត់"</string>
+ <string name="spoken_emoji_1F516" msgid="108097933937925381">"​ចំណាំ"</string>
+ <string name="spoken_emoji_1F517" msgid="2450846665734313397">"និមិត្ត​សញ្ញា​​តំណ"</string>
+ <string name="spoken_emoji_1F518" msgid="7028220286841437832">"ប៊ូតុង​​មូល"</string>
+ <string name="spoken_emoji_1F519" msgid="8211189165075445687">"ថយក្រោយ​មាន​ព្រួញ​ទៅ​ឆ្វេង​ខាង​លើ"</string>
+ <string name="spoken_emoji_1F51A" msgid="823966751787338892">"បញ្ចប់​មាន​ព្រួញ​ទៅ​ឆ្វេង​ខាង​លើ"</string>
+ <string name="spoken_emoji_1F51B" msgid="5920570742107943382">"បើក​មាន​សញ្ញា​ឧទាន​​ជា​មួយ​នឹង​ព្រួញ​ទៅ​ឆ្វេង​​ខាង​លើ"</string>
+ <string name="spoken_emoji_1F51C" msgid="110609810659826676">"ឆាប់ៗ​មាន​ព្រួញ​ទៅ​ស្ដាំ​ខាង​លើ"</string>
+ <string name="spoken_emoji_1F51D" msgid="4087697222026095447">"កំពូល​មាន​ព្រួញ​ឡើងលើ​នៅ​ខាង​លើ"</string>
+ <string name="spoken_emoji_1F51E" msgid="8512873526157201775">"​និមិត្ត​សញ្ញា​គ្មាន​នរណា​ម្នាក់​​អាយុ​​ក្រោម​ដប់ប្រាំ​បី"</string>
+ <string name="spoken_emoji_1F51F" msgid="8673370823728653973">"គ្រាប់​ចុច​ ១០"</string>
+ <string name="spoken_emoji_1F520" msgid="7335109890337048900">"និមិត្ត​សញ្ញា​បញ្ចូល​សម្រាប់​អក្សរ​ឡាតាំង​ធំ"</string>
+ <string name="spoken_emoji_1F521" msgid="2693185864450925778">"និមិត្ត​សញ្ញា​បញ្ចូល​សម្រាប់​អក្សរ​ឡាតាំង​តូច"</string>
+ <string name="spoken_emoji_1F522" msgid="8419130286280673347">"និមិត្ត​សញ្ញា​បញ្ចូល​សម្រាប់​​លេខ"</string>
+ <string name="spoken_emoji_1F523" msgid="3318053476401719421">"ការ​បញ្ចូល​និមិត្តសញ្ញា"</string>
+ <string name="spoken_emoji_1F524" msgid="1625073997522316331">"និមិត្ត​សញ្ញា​បញ្ចូល​សម្រាប់​អក្សរ​ឡាតាំង"</string>
+ <string name="spoken_emoji_1F525" msgid="4083884189172963790">"ភ្លើង"</string>
+ <string name="spoken_emoji_1F526" msgid="2035494936742643580">"ពិល​​អគ្គិសនី"</string>
+ <string name="spoken_emoji_1F527" msgid="134257142354034271">"ម៉ាឡេត"</string>
+ <string name="spoken_emoji_1F528" msgid="700627429570609375">"ញញួរ"</string>
+ <string name="spoken_emoji_1F529" msgid="7480548235904988573">"ឡោ​ស៊ី"</string>
+ <string name="spoken_emoji_1F52A" msgid="7613580031502317893">"កាំបិត"</string>
+ <string name="spoken_emoji_1F52B" msgid="4554906608328118613">"កាំភ្លើង​ខ្លី"</string>
+ <string name="spoken_emoji_1F52C" msgid="1330294501371770790">"មីក្រូទស្សន៍"</string>
+ <string name="spoken_emoji_1F52D" msgid="7549551775445177140">"កែវ​យឹត"</string>
+ <string name="spoken_emoji_1F52E" msgid="4457099417872625141">"​បាល់​គ្រីស្តាល់"</string>
+ <string name="spoken_emoji_1F52F" msgid="8899031001317442792">"ផ្កាយ​ ៦ជ្រុងមាន​ចំណុចកណ្ដាល"</string>
+ <string name="spoken_emoji_1F530" msgid="3572898444281774023">"និមិត្តសញ្ញា​ជប៉ុន​សម្រាប់​អ្នក​ចាប់ផ្ដើម"</string>
+ <string name="spoken_emoji_1F531" msgid="5225633376450025396">"លំពែង​មុខ​បី"</string>
+ <string name="spoken_emoji_1F532" msgid="9169568490485180779">"ប៊ូតុង​ការេ​ពណ៌​ខ្មៅ"</string>
+ <string name="spoken_emoji_1F533" msgid="6554193837201918598">"ប៊ូតុង​ការ៉េ​ពណ៌​ស"</string>
+ <string name="spoken_emoji_1F534" msgid="8339298801331865340">"រង្វង់​ពណ៌​ក្រហម​​​ធំ"</string>
+ <string name="spoken_emoji_1F535" msgid="1227403104835533512">"រង្វង់​ពណ៌​ខៀវ​ធំ"</string>
+ <string name="spoken_emoji_1F536" msgid="5477372445510469331">"ពេជ្រ​ពណ៌​ទឹកក្រូច​ធំ"</string>
+ <string name="spoken_emoji_1F537" msgid="3158915214347274626">"ពេជ្រ​ពណ៌​ខៀវ​​ធំ"</string>
+ <string name="spoken_emoji_1F538" msgid="4300084249474451991">"ពេជ្រ​ពណ៌​ទឹកក្រូច​​តូច"</string>
+ <string name="spoken_emoji_1F539" msgid="6535159756325742275">"ពេជ្រ​ពណ៌​ខៀវ​​តូច"</string>
+ <string name="spoken_emoji_1F53A" msgid="3728196273988781389">"ត្រីកោណ​ពណ៌​ក្រហម​កំពូល​ឡើងលើ"</string>
+ <string name="spoken_emoji_1F53B" msgid="7182097039614128707">"ត្រីកោណ​ពណ៌​ក្រហម​កំពូល​​ចុះ​ក្រោម"</string>
+ <string name="spoken_emoji_1F53C" msgid="4077022046319615029">"ត្រីកោណ​ពណ៌​ក្រហម​តូច​កំពូល​ឡើងលើ"</string>
+ <string name="spoken_emoji_1F53D" msgid="3939112784894620713">"ត្រីកោណ​ពណ៌​ក្រហម​​តូច​កំពូល​​ចុះ​ក្រោម"</string>
+ <string name="spoken_emoji_1F550" msgid="7761392621689986218">"មុខ​នាឡិកា​ម៉ោង​មួយ"</string>
+ <string name="spoken_emoji_1F551" msgid="2699448504113431716">"មុខ​នាឡិកា​ម៉ោង​ពីរ"</string>
+ <string name="spoken_emoji_1F552" msgid="5872107867411853750">"មុខ​នាឡិកា​ម៉ោង​បី"</string>
+ <string name="spoken_emoji_1F553" msgid="8490966286158640743">"មុខ​នាឡិកា​ម៉ោង​បួន"</string>
+ <string name="spoken_emoji_1F554" msgid="7662585417832909280">"មុខ​នាឡិកា​ម៉ោង​​ប្រាំ"</string>
+ <string name="spoken_emoji_1F555" msgid="5564698204520412009">"មុខ​នាឡិកា​ម៉ោង​ប្រាំមួយ"</string>
+ <string name="spoken_emoji_1F556" msgid="7325712194836512205">"មុខ​នាឡិកា​ម៉ោង​ប្រាំពីរ"</string>
+ <string name="spoken_emoji_1F557" msgid="4398343183682848693">"មុខ​នាឡិកា​ម៉ោង​ប្រាំបី"</string>
+ <string name="spoken_emoji_1F558" msgid="3110507820404018172">"មុខ​នាឡិកា​ម៉ោង​ប្រាំ​បួន"</string>
+ <string name="spoken_emoji_1F559" msgid="2972160366448337839">"មុខ​នាឡិកា​ម៉ោង​ដប់"</string>
+ <string name="spoken_emoji_1F55A" msgid="5568112876681714834">"មុខ​នាឡិកា​ម៉ោង​ដប់​មួយ"</string>
+ <string name="spoken_emoji_1F55B" msgid="6731739890330659276">"មុខ​នាឡិកា​ម៉ោង​ដប់​ពីរ"</string>
+ <string name="spoken_emoji_1F55C" msgid="7838853679879115890">"មុខ​នាឡិកា​ម៉ោង​មួយ​កន្លះ"</string>
+ <string name="spoken_emoji_1F55D" msgid="3518832144255922544">"មុខ​នាឡិកា​ម៉ោង​ពីរ​កន្លះ"</string>
+ <string name="spoken_emoji_1F55E" msgid="3092760695634993002">"មុខ​នាឡិកា​ម៉ោង​​បី​​កន្លះ"</string>
+ <string name="spoken_emoji_1F55F" msgid="2326720311892906763">"មុខ​នាឡិកា​ម៉ោង​​បួន​​កន្លះ"</string>
+ <string name="spoken_emoji_1F560" msgid="5771339179963924448">"មុខ​នាឡិកា​ម៉ោង​ប្រាំ​កន្លះ"</string>
+ <string name="spoken_emoji_1F561" msgid="3139944777062475382">"មុខ​នាឡិកា​ម៉ោង​​ប្រាំ​មួយ​កន្លះ"</string>
+ <string name="spoken_emoji_1F562" msgid="8273944611162457084">"មុខ​នាឡិកា​ម៉ោង​ប្រាំ​ពីរ​កន្លះ"</string>
+ <string name="spoken_emoji_1F563" msgid="8643976903718136299">"មុខ​នាឡិកា​ម៉ោង​​ប្រាំ​បី​កន្លះ"</string>
+ <string name="spoken_emoji_1F564" msgid="3511070239796141638">"មុខ​នាឡិកា​ម៉ោង​​ប្រាំ​បួន​​​កន្លះ"</string>
+ <string name="spoken_emoji_1F565" msgid="4567451985272963088">"មុខ​នាឡិកា​ម៉ោង​ដប់​កន្លះ"</string>
+ <string name="spoken_emoji_1F566" msgid="2790552288169929810">"មុខ​នាឡិកា​ម៉ោង​ដប់​​មួយ​កន្លះ"</string>
+ <string name="spoken_emoji_1F567" msgid="9026037362100689337">"មុខ​នាឡិកា​ម៉ោង​ដប់​ពីរ​​កន្លះ"</string>
+ <string name="spoken_emoji_1F5FB" msgid="9037503671676124015">"ភ្នំ​ហ្វូជី"</string>
+ <string name="spoken_emoji_1F5FC" msgid="1409415995817242150">"អគារ​ទី​ក្រុង​តូក្យូ"</string>
+ <string name="spoken_emoji_1F5FD" msgid="2562726956654429582">"រូបសំណាក​​សេរីភាព"</string>
+ <string name="spoken_emoji_1F5FE" msgid="1184469756905210580">"គំនូរ​ស្រមោល​​ជប៉ុន"</string>
+ <string name="spoken_emoji_1F5FF" msgid="6003594799354942297">"ម៉ូយ៉ៃ"</string>
+ <string name="spoken_emoji_1F600" msgid="7601109464776835283">"មុខ​ញញឹម​ខាំ​ធ្មេញ"</string>
+ <string name="spoken_emoji_1F601" msgid="746026523967444503">"មុខ​ញញឹម​ខាំ​ធ្មេញ​ជា​មួយ​ភ្នែក​បើក"</string>
+ <string name="spoken_emoji_1F602" msgid="8354558091785198246">"មុខ​ទ​ទឹក​មាន​ភ្នែក​រីករាយ"</string>
+ <string name="spoken_emoji_1F603" msgid="3861022912544159823">"មុខ​ញញឹម​បើក​មាត់"</string>
+ <string name="spoken_emoji_1F604" msgid="5119021072966343531">"មុខ​ញញឹម​បើក​មាត់ និង​បើក​ភ្នែក"</string>
+ <string name="spoken_emoji_1F605" msgid="6140813923973561735">"ញញឹម​មុខ​​បើក​មាត់ និង​ខ្វល់ខ្វាយ"</string>
+ <string name="spoken_emoji_1F606" msgid="3549936813966832799">"ញញឹម​មុខ​​បើក​មាត់ និង​​បិទ​ភ្នែក​បន្តិច"</string>
+ <string name="spoken_emoji_1F607" msgid="2826424078212384817">"មុខ​ញញឹម​មាន​រង្វង់​ខាង​លើ"</string>
+ <string name="spoken_emoji_1F608" msgid="7343559595089811640">"មុខ​ញញឹម​​មាន​ស្នែង"</string>
+ <string name="spoken_emoji_1F609" msgid="5481030187207504405">"មុខ​មិច​ភ្នែក"</string>
+ <string name="spoken_emoji_1F60A" msgid="5023337769148679767">"មុខ​ញញឹម​បើក​ភ្នែក"</string>
+ <string name="spoken_emoji_1F60B" msgid="3005248217216195694">"មុខ​បង្ហាញ​រសជាតិ​អាហារ​ឆ្ងាញ់"</string>
+ <string name="spoken_emoji_1F60C" msgid="349384012958268496">"មុខ​​ធូរ​​ស្រាល"</string>
+ <string name="spoken_emoji_1F60D" msgid="7921853137164938391">"មុខ​ញញឹម​ជា​មួយ​ភ្នែក​រូប​បេះ​ដូង"</string>
+ <string name="spoken_emoji_1F60E" msgid="441718886380605643">"មុខ​ញញឹម​ពាក់​វ៉ែនតា​ខ្មៅ"</string>
+ <string name="spoken_emoji_1F60F" msgid="2674453144890180538">"មុខ​ញញឹម​ចំអក"</string>
+ <string name="spoken_emoji_1F610" msgid="3225675825334102369">"មុខ​​អព្យាក្រឹត"</string>
+ <string name="spoken_emoji_1F611" msgid="7199179827619679668">"មុខ​គ្មាន​អារម្មណ៍"</string>
+ <string name="spoken_emoji_1F612" msgid="985081329745137998">"មុខ​អត់​សប្បាយ​ចិត្ត"</string>
+ <string name="spoken_emoji_1F613" msgid="5548607684830303562">"មុខ​​​មាន​​ញើស"</string>
+ <string name="spoken_emoji_1F614" msgid="3196305665259916390">"មុខគិត"</string>
+ <string name="spoken_emoji_1F615" msgid="3051674239303969101">"មុខ​​យល់​ច្រឡំ"</string>
+ <string name="spoken_emoji_1F616" msgid="8124887056243813089">"មុខ​​អាក្រក់"</string>
+ <string name="spoken_emoji_1F617" msgid="7052733625511122870">"មុខ​ថើប"</string>
+ <string name="spoken_emoji_1F618" msgid="408207170572303753">"មុខ​បង្ហាញ​ការ​ថើប"</string>
+ <string name="spoken_emoji_1F619" msgid="8645430335143153645">"មុខ​ថើប​បើក​ភ្នែក"</string>
+ <string name="spoken_emoji_1F61A" msgid="2882157190974340247">"មុខ​ថើប​បិទ​ភ្នែក"</string>
+ <string name="spoken_emoji_1F61B" msgid="3765927202787211499">"មុខ​លៀន​​អណ្ដាត"</string>
+ <string name="spoken_emoji_1F61C" msgid="198943912107589389">"មុខ​លៀន​​អណ្ដាត ហើយ​មិច​ភ្នែក"</string>
+ <string name="spoken_emoji_1F61D" msgid="7643546385877816182">"មុខ​លៀន​អណ្ដាត ហើយ​​បិទ​ភ្នែក​បន្តិច"</string>
+ <string name="spoken_emoji_1F61E" msgid="1528732952202098364">"មុខ​ខកចិត្ត"</string>
+ <string name="spoken_emoji_1F61F" msgid="1853664164636082404">"មុខ​​ព្រួយ​បារម្ភ"</string>
+ <string name="spoken_emoji_1F620" msgid="6051942001307375830">"មុខ​​ខឹង"</string>
+ <string name="spoken_emoji_1F621" msgid="2114711878097257704">"មុខ​ក្និកក្នក់"</string>
+ <string name="spoken_emoji_1F622" msgid="29291014645931822">"មុខ​យំ"</string>
+ <string name="spoken_emoji_1F623" msgid="7803959833595184773">"មុខ​លំបាក"</string>
+ <string name="spoken_emoji_1F624" msgid="8637637647725752799">"មុខ​ជ័យ​ជំនះ"</string>
+ <string name="spoken_emoji_1F625" msgid="6153625183493635030">"មុខ​ខកចិត្ត​ប៉ុន្តែ​ធូរស្រាល"</string>
+ <string name="spoken_emoji_1F626" msgid="6179485689935562950">"មុខ​ក្រញូវ​បើកមាត់"</string>
+ <string name="spoken_emoji_1F627" msgid="8566204052903012809">"មុខ​ខូច​ចិត្ត"</string>
+ <string name="spoken_emoji_1F628" msgid="8875777401624904224">"មុខ​ភ័យ​ខ្លាច"</string>
+ <string name="spoken_emoji_1F629" msgid="1411538490319190118">"មុខ​​នឿយហត់"</string>
+ <string name="spoken_emoji_1F62A" msgid="4726686726690289969">"មុខ​​ងងុយ​គេង"</string>
+ <string name="spoken_emoji_1F62B" msgid="3221980473921623613">"មុខ​អស់កម្លាំង"</string>
+ <string name="spoken_emoji_1F62C" msgid="4616356691941225182">"មុខ​ក្រញេវក្រញូវ"</string>
+ <string name="spoken_emoji_1F62D" msgid="4283677508698812232">"មុខ​យំ​លឺៗ"</string>
+ <string name="spoken_emoji_1F62E" msgid="726083405284353894">"មុខ​បើក​មាត់"</string>
+ <string name="spoken_emoji_1F62F" msgid="7746620088234710962">"មុខ​ស្ងៀមស្ងាត់"</string>
+ <string name="spoken_emoji_1F630" msgid="3298804852155581163">"មុខ​បើក​មាត់​ ហើយ​មាន​ញើស"</string>
+ <string name="spoken_emoji_1F631" msgid="1603391150954646779">"មុខ​ស្រែក​ដោយ​ភ័យ​ខ្លាច"</string>
+ <string name="spoken_emoji_1F632" msgid="4846193232203976013">"មុខ​រ​ភ្ញាក់​ផ្អើល"</string>
+ <string name="spoken_emoji_1F633" msgid="4023593836629700443">"មុខ​ក្រហម"</string>
+ <string name="spoken_emoji_1F634" msgid="3155265083246248129">"មុខ​កំពុង​ដេក"</string>
+ <string name="spoken_emoji_1F635" msgid="4616691133452764482">"មុខ​​កំពុង​វិលមុខ"</string>
+ <string name="spoken_emoji_1F636" msgid="947000211822375683">"មុខ​អត់មាន​មាត់"</string>
+ <string name="spoken_emoji_1F637" msgid="1269551267347165774">"មុខ​ពាក់​ម៉ាស់"</string>
+ <string name="spoken_emoji_1F638" msgid="3410766467496872301">"មុខ​ឆ្មា​ញញឹម​ខាំធ្មេញ​ ហើយ​បើក​ភ្នែក"</string>
+ <string name="spoken_emoji_1F639" msgid="1833417519781022031">"មុខ​ឆ្មា​ស្រក​ទឹកភ្នែក"</string>
+ <string name="spoken_emoji_1F63A" msgid="8566294484007152613">"មុខ​ឆ្មា​ញញឹម​ ហើយ​បើក​មាត់"</string>
+ <string name="spoken_emoji_1F63B" msgid="74417995938927571">"មុខ​ឆ្មា​ញញឹម​ជា​មួ​យ​ភ្នែក​រាង​បេះដូង"</string>
+ <string name="spoken_emoji_1F63C" msgid="6472812005729468870">"មុខ​ឆ្មា​ជា​មួយ​ការ​ញញឹម​ញាក់​មុខ"</string>
+ <string name="spoken_emoji_1F63D" msgid="1638398369553349509">"មុខ​ឆ្មា​ថើប​ហើយ​បិទ​ភ្នែក"</string>
+ <string name="spoken_emoji_1F63E" msgid="6788969063020278986">"មុខ​ឆ្មា​ក្និកក្នក់"</string>
+ <string name="spoken_emoji_1F63F" msgid="1207234562459550185">"មុខ​ឆ្មា​យំ"</string>
+ <string name="spoken_emoji_1F640" msgid="6023054549904329638">"មុខ​ឆ្មា​នឿយ​ហត់"</string>
+ <string name="spoken_emoji_1F645" msgid="5202090629227587076">"មុខ​គ្មាន​កាយវិការ​ល្អ"</string>
+ <string name="spoken_emoji_1F646" msgid="6734425134415138134">"មុខ​មាន​កាយវិការ​យល់ព្រម"</string>
+ <string name="spoken_emoji_1F647" msgid="1090285518444205483">"មនុស្ស​អោន​ខ្លួន​ខ្លាំង"</string>
+ <string name="spoken_emoji_1F648" msgid="8978535230610522356">"ស្វា​បិទ​ភ្នែក"</string>
+ <string name="spoken_emoji_1F649" msgid="8486145279809495102">"ស្វា​បិទ​ត្រចៀក"</string>
+ <string name="spoken_emoji_1F64A" msgid="1237524974033228660">"ស្វា​បិទ​មាត់"</string>
+ <string name="spoken_emoji_1F64B" msgid="4251150782016370475">"មនុស្ស​សប្បាយ​​លើក​ដៃ​មួយ"</string>
+ <string name="spoken_emoji_1F64C" msgid="5446231430684558344">"លើក​ដៃ​ទាំង​ពីរ​អបអរ"</string>
+ <string name="spoken_emoji_1F64D" msgid="4646485595309482342">"មនុស្ស​ចង​ចិញ្ចើម"</string>
+ <string name="spoken_emoji_1F64E" msgid="3376579939836656097">"មនុស្ស​មាន​មុខ​ក្និកក្នក់"</string>
+ <string name="spoken_emoji_1F64F" msgid="1044439574356230711">"មនុស្ស​អោប​ដៃ"</string>
+ <string name="spoken_emoji_1F680" msgid="513263736012689059">"គ្រាប់​​រ៉ុកកែត"</string>
+ <string name="spoken_emoji_1F681" msgid="9201341783850525339">"ឧទ្ធម្ភាគចក្រ"</string>
+ <string name="spoken_emoji_1F682" msgid="8046933583867498698">"ក្បាល​រថភ្លើង"</string>
+ <string name="spoken_emoji_1F683" msgid="8772750354339223092">"ទូរ​​រថភ្លើង"</string>
+ <string name="spoken_emoji_1F684" msgid="346396777356203608">"រថភ្លើង​ល្បឿន​លឿន"</string>
+ <string name="spoken_emoji_1F685" msgid="1237059817190832730">"រថភ្លើង​ល្បឿន​លឿន​​មាន​ច្រមុះ"</string>
+ <string name="spoken_emoji_1F686" msgid="3525197227223620343">"រថភ្លើង"</string>
+ <string name="spoken_emoji_1F687" msgid="5110143437960392837">"មេត្រូ"</string>
+ <string name="spoken_emoji_1F688" msgid="4702085029871797965">"រថភ្លើង​ប្រើ​​​ពន្លឺ"</string>
+ <string name="spoken_emoji_1F689" msgid="2375851019798817094">"ស្ថានីយ"</string>
+ <string name="spoken_emoji_1F68A" msgid="6368370859718717198">"រថយន្ត​រត់​លើ​ផ្លូវ​ដែក"</string>
+ <string name="spoken_emoji_1F68B" msgid="2920160427117436633">"រថយន្ត​រត់​លើ​ផ្លូវ​ដែក"</string>
+ <string name="spoken_emoji_1F68C" msgid="1061520934758810864">"រថយន្តក្រុង"</string>
+ <string name="spoken_emoji_1F68D" msgid="2890059031360969304">"រថយន្ត​ក្រុង​ខាង​មុខ"</string>
+ <string name="spoken_emoji_1F68E" msgid="6234042976027309654">"រថយន្ត​ប្រើ​ចរន្ត​អគ្គិសនី"</string>
+ <string name="spoken_emoji_1F68F" msgid="5871099334672012107">"ចំណត​រថយន្ត​ក្រុង"</string>
+ <string name="spoken_emoji_1F690" msgid="8080964620200195262">"រថយន្ត​ទេសចរណ៍​​​តូច"</string>
+ <string name="spoken_emoji_1F691" msgid="999173032408730501">"រថយន្ត​សង្គ្រោះ​បន្ទាន់"</string>
+ <string name="spoken_emoji_1F692" msgid="1712863785341849487">"ម៉ាស៊ីន​ភ្លើង"</string>
+ <string name="spoken_emoji_1F693" msgid="7987109037389768934">"រថយន្ត​ប៉ូលិស"</string>
+ <string name="spoken_emoji_1F694" msgid="6061658916653884608">"រថយន្ត​ប៉ូលិស​ខាង​មុខ"</string>
+ <string name="spoken_emoji_1F695" msgid="6913445460364247283">"តាក់ស៊ី"</string>
+ <string name="spoken_emoji_1F696" msgid="6391604457418285404">"តាក់ស៊ី​ខាង​មុខ"</string>
+ <string name="spoken_emoji_1F697" msgid="7978399334396733790">"រថយន្ត"</string>
+ <string name="spoken_emoji_1F698" msgid="7006050861129732018">"រថយន្ត​ខាង​មុខ"</string>
+ <string name="spoken_emoji_1F699" msgid="630317052666590607">"រថយន្ត​​​សម្រាប់​កម្សាន្ត"</string>
+ <string name="spoken_emoji_1F69A" msgid="4739797891735823577">"រថយន្ត​​ចែក​ចាយ"</string>
+ <string name="spoken_emoji_1F69B" msgid="4715997280786620649">"ឡាន​កាមីយ៉ុង"</string>
+ <string name="spoken_emoji_1F69C" msgid="5557395610750818161">"ត្រាក់ទ័រ"</string>
+ <string name="spoken_emoji_1F69D" msgid="5467164189942951047">"ប្រព័ន្ធ​ផ្លូវ​រថភ្លើង"</string>
+ <string name="spoken_emoji_1F69E" msgid="169238196389832234">"ផ្លូវ​​រថភ្លើង​កាត់​​ភ្នំ"</string>
+ <string name="spoken_emoji_1F69F" msgid="7508128757012845102">"ផ្លូវ​រថភ្លើង​ផ្អាក​ដំណើរការ"</string>
+ <string name="spoken_emoji_1F6A0" msgid="8733056213790160147">"ខ្សែ​កាប​ឆ្លង​ភ្នំុ"</string>
+ <string name="spoken_emoji_1F6A1" msgid="4666516337749347253">"ផ្លូវ​រថភ្លើង​លើ​អាកាស"</string>
+ <string name="spoken_emoji_1F6A2" msgid="4511220588943129583">"កប៉ាល់"</string>
+ <string name="spoken_emoji_1F6A3" msgid="8412962252222205387">"ទូកចែវ"</string>
+ <string name="spoken_emoji_1F6A4" msgid="8867571300266339211">"ទូក​ល្បឿន​លឿន"</string>
+ <string name="spoken_emoji_1F6A5" msgid="7650260812741963884">"ភ្លើង​ចរាចរណ៍"</string>
+ <string name="spoken_emoji_1F6A6" msgid="485575967773793454">"ភ្លើង​ចរាចរណ៍​បញ្ឈរ"</string>
+ <string name="spoken_emoji_1F6A7" msgid="6411048933816976794">"សញ្ញា​​សំណង់"</string>
+ <string name="spoken_emoji_1F6A8" msgid="6345717218374788364">"រថយន្ត​​ប៉ូលិស​បើក​សារ៉ែន​វិល"</string>
+ <string name="spoken_emoji_1F6A9" msgid="6586380356807600412">"បង្គោល​ទង់ជាតិ​រាង​ត្រីកោណ"</string>
+ <string name="spoken_emoji_1F6AA" msgid="8954448167261738885">"ទ្វារ"</string>
+ <string name="spoken_emoji_1F6AB" msgid="5313946262888343544">"សញ្ញា​ហាម​ចូល"</string>
+ <string name="spoken_emoji_1F6AC" msgid="6946858177965948288">"​សញ្ញា​ជក់​បារី"</string>
+ <string name="spoken_emoji_1F6AD" msgid="6320088669185507241">"ហាម​ជក់​បារី"</string>
+ <string name="spoken_emoji_1F6AE" msgid="1062469925352817189">"និមិត្តសញ្ញា​ដាក់​សំរាម​ក្នុង​ធុង"</string>
+ <string name="spoken_emoji_1F6AF" msgid="2286668056123642208">"និមិត្តសញ្ញា​ហាម​ចោល​សំរាម"</string>
+ <string name="spoken_emoji_1F6B0" msgid="179424763882990952">"និមិត្ត​សញ្ញា​ទឹក​ចល័ត"</string>
+ <string name="spoken_emoji_1F6B1" msgid="5585212805429161877">"និមិត្ត​សញ្ញា​​ទឹក​មិន​ចល័ត"</string>
+ <string name="spoken_emoji_1F6B2" msgid="1771885082068421875">"កង់"</string>
+ <string name="spoken_emoji_1F6B3" msgid="8033779581263314408">"ហាម​ជិះ​កង់"</string>
+ <string name="spoken_emoji_1F6B4" msgid="1999538449018476947">"អ្នក​ជិះកង់"</string>
+ <string name="spoken_emoji_1F6B5" msgid="340846352660993117">"អ្នក​ជិះ​កង់​ឡើង​ភ្នំ"</string>
+ <string name="spoken_emoji_1F6B6" msgid="4351024386495098336">"ថ្មើរជើង"</string>
+ <string name="spoken_emoji_1F6B7" msgid="4564800655866838802">"មិន​សម្រាប់​ថ្មើរ​ជើង"</string>
+ <string name="spoken_emoji_1F6B8" msgid="3020531906940267349">"កុមារ​​ឆ្លងកាត់"</string>
+ <string name="spoken_emoji_1F6B9" msgid="1207095844125041251">"និមិត្ត​សញ្ញា​បុរស"</string>
+ <string name="spoken_emoji_1F6BA" msgid="2346879310071017531">"និមិត្ត​សញ្ញា​ស្ត្រី"</string>
+ <string name="spoken_emoji_1F6BB" msgid="2370172469642078526">"បន្ទប់ទឹក"</string>
+ <string name="spoken_emoji_1F6BC" msgid="5558827593563530851">"និមិត្ត​សញ្ញា​ទារក"</string>
+ <string name="spoken_emoji_1F6BD" msgid="9213590243049835957">"បង្គន់"</string>
+ <string name="spoken_emoji_1F6BE" msgid="394016533781742491">"បន្ទប់​ទឹក"</string>
+ <string name="spoken_emoji_1F6BF" msgid="906336365928291207">"ផ្កាឈូក​ងូត​ទឹក"</string>
+ <string name="spoken_emoji_1F6C0" msgid="4592099854378821599">"​ងូតទឹក"</string>
+ <string name="spoken_emoji_1F6C1" msgid="2845056048320031158">"អាង​​ងូត​ទឹក"</string>
+ <string name="spoken_emoji_1F6C2" msgid="8117262514698011877">"ការ​ត្រួត​ពិនិត្យ​លិខិត​ឆ្លង​ដែន"</string>
+ <string name="spoken_emoji_1F6C3" msgid="1176342001834630675">"គយ"</string>
+ <string name="spoken_emoji_1F6C4" msgid="1477622834179978886">"ប្រកាស​​ឥវ៉ាន់"</string>
+ <string name="spoken_emoji_1F6C5" msgid="2495834050856617451">"ឥវ៉ាន់​នៅ​សល់"</string>
+</resources>
diff --git a/java/res/values-km-rKH/strings-talkback-descriptions.xml b/java/res/values-km-rKH/strings-talkback-descriptions.xml
index 7a2c71042..bb8c38376 100644
--- a/java/res/values-km-rKH/strings-talkback-descriptions.xml
+++ b/java/res/values-km-rKH/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"ទីកន្លែង"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"និមិត្តសញ្ញា"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"សញ្ញា​អារម្មណ៍"</string>
+ <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+ <skip />
+ <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+ <skip />
</resources>
diff --git a/java/res/values-km-rKH/strings.xml b/java/res/values-km-rKH/strings.xml
index 4d7de93c8..337d08676 100644
--- a/java/res/values-km-rKH/strings.xml
+++ b/java/res/values-km-rKH/strings.xml
@@ -21,7 +21,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_input_options" msgid="3909945612939668554">"ជម្រើស​​បញ្ចូល"</string>
- <string name="english_ime_research_log" msgid="8492602295696577851">"ពាក្យ​បញ្ជា​កំណត់​ហេតុ​​ការ​ស្រាវជ្រាវ"</string>
<string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"រក​មើល​ឈ្មោះ​ទំនាក់ទំនង"</string>
<string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"កម្មវិធី​ពិនិត្យ​អក្ខរាវិរុទ្ធ​ប្រើ​ធាតុ​ពី​​ក្នុង​បញ្ជី​ទំនាក់ទំនង​របស់​អ្នក"</string>
<string name="vibrate_on_keypress" msgid="5258079494276955460">"ញ័រ​នៅ​ពេល​ចុច​គ្រាប់ចុច"</string>
@@ -29,7 +28,7 @@
<string name="popup_on_keypress" msgid="123894815723512944">"លេច​ឡើង​នៅ​​ពេល​ចុច​គ្រាប់​ចុច"</string>
<string name="general_category" msgid="1859088467017573195">"ទូទៅ"</string>
<string name="correction_category" msgid="2236750915056607613">"ការ​កែ​អត្ថបទ"</string>
- <string name="gesture_typing_category" msgid="497263612130532630">"បញ្ចូល​ដោយ​ប្រើ​កាយវិការ​"</string>
+ <string name="gesture_typing_category" msgid="497263612130532630">"បញ្ចូល​ដោយ​ប្រើ​កាយវិការ"</string>
<string name="misc_category" msgid="6894192814868233453">"ជម្រើស​ផ្សេងទៀត"</string>
<string name="advanced_settings" msgid="362895144495591463">"ការ​កំណត់​កម្រិត​ខ្ពស់"</string>
<string name="advanced_settings_summary" msgid="4487980456152830271">"ជម្រើស​សម្រាប់​អ្នក​ជំនាញ"</string>
@@ -39,7 +38,7 @@
<string name="show_language_switch_key_summary" msgid="7343403647474265713">"បង្ហាញ​នៅ​ពេល​ដែល​បើក​ភាសា​បញ្ចូល​ច្រើន"</string>
<string name="sliding_key_input_preview" msgid="6604262359510068370">"បង្ហាញ​ទ្រនិច​បង្ហាញ​ស្លាយ"</string>
<string name="sliding_key_input_preview_summary" msgid="6340524345729093886">"បង្ហាញ​​សញ្ញា​មើល​​ឃើញ​ខណៈ​ពេល​ដែល​រុញ​ពី​ឆ្វេង ឬ​​គ្រាប់​ចុច​​និមិត្ត​សញ្ញា"</string>
- <string name="key_preview_popup_dismiss_delay" msgid="6213164897443068248">"​សោ​លេចឡើង​បោះបង់​ការ​​ពន្យារពេល​"</string>
+ <string name="key_preview_popup_dismiss_delay" msgid="6213164897443068248">"​សោ​លេចឡើង​បោះបង់​ការ​​ពន្យារពេល"</string>
<string name="key_preview_popup_dismiss_no_delay" msgid="2096123151571458064">"គ្មាន​ការ​ពន្យារពេល"</string>
<string name="key_preview_popup_dismiss_default_delay" msgid="2166964333903906734">"លំនាំដើម"</string>
<string name="abbreviation_unit_milliseconds" msgid="8700286094028323363">"<xliff:g id="MILLISECONDS">%s</xliff:g> មិល្លី​វិនាទី"</string>
@@ -49,7 +48,7 @@
<string name="use_personalized_dicts" msgid="5167396352105467626">"ការ​ស្នើ​ផ្ទាល់​ខ្លួន"</string>
<string name="use_double_space_period" msgid="8781529969425082860">"រយៈ​ពេល​ចុច​ដកឃ្លា​ពីរដង"</string>
<string name="use_double_space_period_summary" msgid="6532892187247952799">"ប៉ះ​ដកឃ្លា​ពីរ​​ដង​បញ្ចូល​​​រយៈ​ពេល​ដែល​អនុវត្ត​តាម​ដកឃ្លា"</string>
- <string name="auto_cap" msgid="1719746674854628252">"ការ​សរសេរ​ជា​អក្សរ​ធំ​​ស្វ័យប្រវត្តិ​"</string>
+ <string name="auto_cap" msgid="1719746674854628252">"ការ​សរសេរ​ជា​អក្សរ​ធំ​​ស្វ័យប្រវត្តិ"</string>
<string name="auto_cap_summary" msgid="7934452761022946874">"សរសេរ​ពាក្យ​ដំបូង​​​ជា​អក្សរ​ធំ​​នៃ​ប្រយោគ​នីមួយ​ៗ"</string>
<string name="edit_personal_dictionary" msgid="3996910038952940420">"វចនានុក្រម​ផ្ទាល់ខ្លួន"</string>
<string name="configure_dictionaries_title" msgid="4238652338556902049">"ផ្នែក​បន្ថែម​វចនានុក្រម"</string>
@@ -60,7 +59,7 @@
<string name="prefs_suggestion_visibility_show_only_portrait_name" msgid="3859783767435239118">"បង្ហាញ​នៅ​ក្នុង​របៀប​បញ្ឈរ"</string>
<string name="prefs_suggestion_visibility_hide_name" msgid="6309143926422234673">"លាក់​ជានិច្ច"</string>
<string name="prefs_block_potentially_offensive_title" msgid="5078480071057408934">"ទប់ស្កាត់​​ពាក្យ​​បំពាន"</string>
- <string name="prefs_block_potentially_offensive_summary" msgid="2371835479734991364">"កុំ​ស្នើ​ឲ្យ​ពាក្យ​បំពាន​មាន​សក្ដានុពល​"</string>
+ <string name="prefs_block_potentially_offensive_summary" msgid="2371835479734991364">"កុំ​ស្នើ​ឲ្យ​ពាក្យ​បំពាន​មាន​សក្ដានុពល"</string>
<string name="auto_correction" msgid="7630720885194996950">"ការ​កែ​​​ស្វ័យប្រវត្តិ"</string>
<string name="auto_correction_summary" msgid="5625751551134658006">"ចន្លោះ​មិន​ឃើញ ​និង​សញ្ញា​​វណ្ណយុត្ត​កែ​ពាក្យ​ដែល​បាន​វាយ​ខុស​ស្វ័យប្រវត្តិ"</string>
<string name="auto_correction_threshold_mode_off" msgid="8470882665417944026">"បិទ"</string>
@@ -84,8 +83,6 @@
<string name="select_language" msgid="3693815588777926848">"​​បញ្ចូល​ភាសា"</string>
<string name="hint_add_to_dictionary" msgid="573678656946085380">"ប៉ះ​ម្ដង​ទៀត​ ដើម្បី​រក្សា​ទុក"</string>
<string name="has_dictionary" msgid="6071847973466625007">"មាន​វចនានុក្រម"</string>
- <string name="prefs_enable_log" msgid="6620424505072963557">"បើក​មតិត្រឡប់"</string>
- <string name="prefs_description_log" msgid="7525225584555429211">"ជំនួយ​​​ធ្វើ​ឲ្យ​​ប្រសើរ​ឡើង​​នៃ​កម្មវិធី​កែ​​វិធី​សាស្ត្រ​​បញ្ចូល​ដោយ​ស្វ័យ​ប្រវត្តិ​ ដោយ​ផ្ញើ​ស្ថិតិ​​ប្រើ​ប្រាស់​ ​និង​របាយការណ៍​គាំង"</string>
<string name="keyboard_layout" msgid="8451164783510487501">"រូបរាង​ក្ដារចុច"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"អង់គ្លេស (​អង់គ្លេស)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"អង់គ្លេស (សហរដ្ឋ​អាមេរិក)"</string>
@@ -118,12 +115,11 @@
<string name="enable" msgid="5031294444630523247">"បើក"</string>
<string name="not_now" msgid="6172462888202790482">"មិនមែន​ឥឡូវ"</string>
<string name="custom_input_style_already_exists" msgid="8008728952215449707">"មាន​រចនាប័ទ្ម​បញ្ចូល​ដូច​គ្នា​ដូច​ហើយ៖ <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
- <string name="prefs_usability_study_mode" msgid="1261130555134595254">"របៀប​ការ​សិក្សា​ដែល​អាច​ប្រើ​បាន"</string>
<string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"ពន្យារពេល​​​ចុច​គ្រាប់​ចុច​ឲ្យ​​យូរ"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"ថិរវេលា​​ញ័រ​​ពេល​ចុច​គ្រាប់ចុច"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"កម្រិត​សំឡេង​ពេល​ចុច​គ្រាប់​ចុច"</string>
<string name="prefs_read_external_dictionary" msgid="2588931418575013067">"អាន​ឯកសារ​វចនានុក្រម​ខាង​ក្រៅ"</string>
- <string name="read_external_dictionary_no_files_message" msgid="4947420942224623792">"គ្មាន​ឯកសារ​វចនានុក្រម​នៅ​ក្នុង​ថត​ទាញ​យក​​"</string>
+ <string name="read_external_dictionary_no_files_message" msgid="4947420942224623792">"គ្មាន​ឯកសារ​វចនានុក្រម​នៅ​ក្នុង​ថត​ទាញ​យក"</string>
<string name="read_external_dictionary_multiple_files_title" msgid="7637749044265808628">"ជ្រើស​ឯកសារ​វចនានុក្រម​ ដើម្បី​ដំឡើង"</string>
<string name="read_external_dictionary_confirm_install_message" msgid="4782116251651288054">"ពិត​ជា​ដំឡើង​ឯកសារ​នេះ​សម្រាប់ <xliff:g id="LANGUAGE_NAME">%s</xliff:g>?"</string>
<string name="error" msgid="8940763624668513648">"មាន​កំហុស"</string>
@@ -154,7 +150,7 @@
<string name="dictionary_provider_name" msgid="3027315045397363079">"កម្មវិធី​ផ្ដល់​វចនានុក្រម"</string>
<string name="dictionary_service_name" msgid="6237472350693511448">"សេវាកម្ម​​វចនានុក្រម"</string>
<string name="download_description" msgid="6014835283119198591">"ព័ត៌មាន​បច្ចុប្បន្នភាព​វចនានុក្រម"</string>
- <string name="dictionary_settings_title" msgid="8091417676045693313">"ផ្នែក​បន្ថែម​វចនានុក្រម​​"</string>
+ <string name="dictionary_settings_title" msgid="8091417676045693313">"ផ្នែក​បន្ថែម​វចនានុក្រម"</string>
<string name="dictionary_install_over_metered_network_prompt" msgid="3587517870006332980">"វចនានុក្រម​​​​​អាច​ប្រើ​បាន"</string>
<string name="dictionary_settings_summary" msgid="5305694987799824349">"ការ​កំណត់​សម្រាប់​វចនានុក្រម"</string>
<string name="user_dictionaries" msgid="3582332055892252845">"វចនានុក្រម​​​អ្នក​ប្រើ"</string>
@@ -170,10 +166,10 @@
<string name="message_updating" msgid="4457761393932375219">"ពិនិត្យមើល​បច្ចុប្បន្នភាព"</string>
<string name="message_loading" msgid="5638680861387748936">"កំពុង​ផ្ទុក..."</string>
<string name="main_dict_description" msgid="3072821352793492143">"វចនានុក្រម​ចម្បង"</string>
- <string name="cancel" msgid="6830980399865683324">"បោះ​បង់​"</string>
+ <string name="cancel" msgid="6830980399865683324">"បោះ​បង់"</string>
<string name="go_to_settings" msgid="3876892339342569259">"ការ​កំណត់"</string>
<string name="install_dict" msgid="180852772562189365">"ដំឡើង"</string>
- <string name="cancel_download_dict" msgid="7843340278507019303">"បោះ​បង់​"</string>
+ <string name="cancel_download_dict" msgid="7843340278507019303">"បោះ​បង់"</string>
<string name="delete_dict" msgid="756853268088330054">"លុប"</string>
<string name="should_download_over_metered_prompt" msgid="1583881200688185508">"ភាសា​ដែល​បាន​ជ្រើស​នៅ​លើ​ឧបករណ៍​ចល័ត​មាន​វចនានុក្រម​អាច​ប្រើ​បាន។&lt;br/&gt; យើង​ផ្ដល់​អនុសាសន៍​ឲ្យ &lt;b&gt;ទាញ​យក&lt;/b&gt; វចនានុក្រម​ភាសា <xliff:g id="LANGUAGE_NAME">%1$s</xliff:g> ដើម្បី​បង្កើន​បទពិសោធន៍​វាយ​បញ្ចូល​របស់​អ្នក។&lt;br/&gt; &lt;br/&gt; ការ​ទាញ​យក​អាច​ចំណាយ​ពេល​ប្រហែល​ពីរ​នាទី​នៅ​តាម 3G។ ការ​គិត​ថ្លៃ​អាច​អនុវត្ត​ប្រសិន​បើ​អ្នក​មិន​ប្រើ &lt;b&gt;ផែនការ​ទិន្នន័យ​គ្មាន​ដែន​កំណត់&lt;/b&gt;.&lt;br/&gt; បើ​អ្នក​មិន​ប្រាកដ​​ថា​ផែនការ​ណា​មួយ​ដែល​អ្នក​មាន យើង​ផ្ដល់​អនុសាសន៍​ឲ្យ​​ភ្ជាប់​វ៉ាយហ្វាយ ដើម្បី​ចាប់ផ្ដើម​ទាញ​យក​ដោយ​ស្វ័យ​ប្រវត្តិ។&lt;br/&gt; &lt;br/&gt; ជំនួយ៖ អ្នក​អាច​ទាញ​យក និង​លុប​វចនានុក្រម​ដោយ​ចូល​ទៅ​ &lt;b&gt;ភាសា &amp; ការ​បញ្ចូល&lt;/b&gt; នៅ​ក្នុង​ម៉ឺនុយ &lt;b&gt;ការ​កំណត់&lt;/b&gt; សម្រាប់​ឧបករណ៍​ចល័ត។"</string>
<string name="download_over_metered" msgid="1643065851159409546">"ទាញ​យក​ឥឡូវ​នេះ (<xliff:g id="SIZE_IN_MEGABYTES">%1$.1f</xliff:g> មេកាបៃ)"</string>
@@ -191,7 +187,7 @@
<string name="user_dict_settings_add_word_option_name" msgid="6665558053408962865">"ពាក្យ៖"</string>
<string name="user_dict_settings_add_shortcut_option_name" msgid="3094731590655523777">"ផ្លូវកាត់​៖"</string>
<string name="user_dict_settings_add_locale_option_name" msgid="4738643440987277705">"ភាសា៖"</string>
- <string name="user_dict_settings_add_word_hint" msgid="4902434148985906707">"វាយ​បញ្ចូល​ពាក្យ​"</string>
+ <string name="user_dict_settings_add_word_hint" msgid="4902434148985906707">"វាយ​បញ្ចូល​ពាក្យ"</string>
<string name="user_dict_settings_add_shortcut_hint" msgid="2265453012555060178">"ផ្លូវកាត់​ជា​ជម្រើស"</string>
<string name="user_dict_settings_edit_dialog_title" msgid="3765774633869590352">"កែ​ពាក្យ"</string>
<string name="user_dict_settings_context_menu_edit_title" msgid="6812255903472456302">"កែ"</string>
diff --git a/java/res/values-ko/strings-action-keys.xml b/java/res/values-ko/strings-action-keys.xml
index 04febeeea..34cd8a21d 100644
--- a/java/res/values-ko/strings-action-keys.xml
+++ b/java/res/values-ko/strings-action-keys.xml
@@ -25,6 +25,8 @@
<string name="label_previous_key" msgid="1421141755779895275">"이전"</string>
<string name="label_done_key" msgid="7564866296502630852">"완료"</string>
<string name="label_send_key" msgid="482252074224462163">"전송"</string>
+ <!-- no translation found for label_search_key (7965186050435796642) -->
+ <skip />
<string name="label_pause_key" msgid="2225922926459730642">"중지"</string>
<string name="label_wait_key" msgid="5891247853595466039">"대기"</string>
</resources>
diff --git a/java/res/values-ko/strings-talkback-descriptions.xml b/java/res/values-ko/strings-talkback-descriptions.xml
index c02976d89..459571627 100644
--- a/java/res/values-ko/strings-talkback-descriptions.xml
+++ b/java/res/values-ko/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"장소"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"기호"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"이모티콘"</string>
+ <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+ <skip />
+ <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+ <skip />
</resources>
diff --git a/java/res/values-ko/strings.xml b/java/res/values-ko/strings.xml
index 4037abd02..98427b32a 100644
--- a/java/res/values-ko/strings.xml
+++ b/java/res/values-ko/strings.xml
@@ -21,7 +21,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_input_options" msgid="3909945612939668554">"입력 옵션"</string>
- <string name="english_ime_research_log" msgid="8492602295696577851">"로그 명령 탐색"</string>
<string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"연락처 이름 조회"</string>
<string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"맞춤법 검사기가 주소록의 항목을 사용합니다."</string>
<string name="vibrate_on_keypress" msgid="5258079494276955460">"키를 누를 때 진동 발생"</string>
@@ -84,8 +83,6 @@
<string name="select_language" msgid="3693815588777926848">"입력 언어"</string>
<string name="hint_add_to_dictionary" msgid="573678656946085380">"저장하려면 다시 터치"</string>
<string name="has_dictionary" msgid="6071847973466625007">"사전 사용 가능"</string>
- <string name="prefs_enable_log" msgid="6620424505072963557">"사용자 의견 사용"</string>
- <string name="prefs_description_log" msgid="7525225584555429211">"사용 통계 및 오류 보고서를 자동으로 전송하여 입력 방법 편집기의 개선에 도움을 줍니다."</string>
<string name="keyboard_layout" msgid="8451164783510487501">"키보드 테마"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"영어(영국)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"영어(미국)"</string>
@@ -118,7 +115,6 @@
<string name="enable" msgid="5031294444630523247">"사용"</string>
<string name="not_now" msgid="6172462888202790482">"나중에"</string>
<string name="custom_input_style_already_exists" msgid="8008728952215449707">"같은 입력 스타일이 다음과 같이 이미 존재합니다. <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
- <string name="prefs_usability_study_mode" msgid="1261130555134595254">"가용성 연구 모드"</string>
<string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"키 길게 누르기 지연"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"키를 누를 때 진동 시간"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"키를 누를 때 소리 볼륨"</string>
diff --git a/java/res/values-ky/strings.xml b/java/res/values-ky/strings.xml
index 3758c2df1..8165a3c7d 100644
--- a/java/res/values-ky/strings.xml
+++ b/java/res/values-ky/strings.xml
@@ -126,9 +126,7 @@
<skip />
<!-- no translation found for has_dictionary (6071847973466625007) -->
<skip />
- <!-- no translation found for prefs_enable_log (6620424505072963557) -->
<skip />
- <!-- no translation found for prefs_description_log (5827825607258246003) -->
<skip />
<!-- no translation found for keyboard_layout (8451164783510487501) -->
<skip />
@@ -138,7 +136,6 @@
<skip />
<!-- no translation found for subtype_no_language_qwerty (2956121451616633133) -->
<skip />
- <!-- no translation found for prefs_usability_study_mode (1261130555134595254) -->
<skip />
<!-- no translation found for prefs_keypress_vibration_duration_settings (1829950405285211668) -->
<skip />
diff --git a/java/res/values-lo-rLA/strings-action-keys.xml b/java/res/values-lo-rLA/strings-action-keys.xml
index 08dc983e0..239930583 100644
--- a/java/res/values-lo-rLA/strings-action-keys.xml
+++ b/java/res/values-lo-rLA/strings-action-keys.xml
@@ -25,6 +25,8 @@
<string name="label_previous_key" msgid="1421141755779895275">"ກ່ອນໜ້າ"</string>
<string name="label_done_key" msgid="7564866296502630852">"Done"</string>
<string name="label_send_key" msgid="482252074224462163">"ສົ່ງ"</string>
+ <!-- no translation found for label_search_key (7965186050435796642) -->
+ <skip />
<string name="label_pause_key" msgid="2225922926459730642">"ຢຸດຊົ່ວຄາວ"</string>
<string name="label_wait_key" msgid="5891247853595466039">"ລໍຖ້າ"</string>
</resources>
diff --git a/java/res/values-lo-rLA/strings-emoji-descriptions.xml b/java/res/values-lo-rLA/strings-emoji-descriptions.xml
index 83935a594..ae66e1474 100644
--- a/java/res/values-lo-rLA/strings-emoji-descriptions.xml
+++ b/java/res/values-lo-rLA/strings-emoji-descriptions.xml
@@ -20,1627 +20,827 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for spoken_emoji_00A9 (2859822817116803638) -->
- <skip />
- <!-- no translation found for spoken_emoji_00AE (7708335454134589027) -->
- <skip />
- <!-- no translation found for spoken_emoji_203C (153340916701508663) -->
- <skip />
- <!-- no translation found for spoken_emoji_2049 (4877256448299555371) -->
- <skip />
- <!-- no translation found for spoken_emoji_2122 (9188440722954720429) -->
- <skip />
- <!-- no translation found for spoken_emoji_2139 (9114342638917304327) -->
- <skip />
- <!-- no translation found for spoken_emoji_2194 (8055202727034946680) -->
- <skip />
- <!-- no translation found for spoken_emoji_2195 (8028122253301087407) -->
- <skip />
- <!-- no translation found for spoken_emoji_2196 (4019164898967854363) -->
- <skip />
- <!-- no translation found for spoken_emoji_2197 (4255723717709017801) -->
- <skip />
- <!-- no translation found for spoken_emoji_2198 (1452063451313622090) -->
- <skip />
- <!-- no translation found for spoken_emoji_2199 (6942722693368807849) -->
- <skip />
- <!-- no translation found for spoken_emoji_21A9 (5204750172335111188) -->
- <skip />
- <!-- no translation found for spoken_emoji_21AA (3950259884359247006) -->
- <skip />
- <!-- no translation found for spoken_emoji_231A (6751448803233874993) -->
- <skip />
- <!-- no translation found for spoken_emoji_231B (5956428809948426182) -->
- <skip />
- <!-- no translation found for spoken_emoji_23E9 (4022497733535162237) -->
- <skip />
- <!-- no translation found for spoken_emoji_23EA (2251396938087774944) -->
- <skip />
- <!-- no translation found for spoken_emoji_23EB (3746885195641491865) -->
- <skip />
- <!-- no translation found for spoken_emoji_23EC (7852372752901163416) -->
- <skip />
- <!-- no translation found for spoken_emoji_23F0 (8474219588750627870) -->
- <skip />
- <!-- no translation found for spoken_emoji_23F3 (166900119581024371) -->
- <skip />
- <!-- no translation found for spoken_emoji_24C2 (3948348737566038470) -->
- <skip />
- <!-- no translation found for spoken_emoji_25AA (7865181015100227349) -->
- <skip />
- <!-- no translation found for spoken_emoji_25AB (6446532820937381457) -->
- <skip />
- <!-- no translation found for spoken_emoji_25B6 (2423897708496040947) -->
- <skip />
- <!-- no translation found for spoken_emoji_25C0 (3595083440074484934) -->
- <skip />
- <!-- no translation found for spoken_emoji_25FB (4838691986881215419) -->
- <skip />
- <!-- no translation found for spoken_emoji_25FC (7008859564991191050) -->
- <skip />
- <!-- no translation found for spoken_emoji_25FD (7673439755069217479) -->
- <skip />
- <!-- no translation found for spoken_emoji_25FE (6782214109919768923) -->
- <skip />
- <!-- no translation found for spoken_emoji_2600 (2272722634618990413) -->
- <skip />
- <!-- no translation found for spoken_emoji_2601 (6205136889311537150) -->
- <skip />
- <!-- no translation found for spoken_emoji_260E (8670395193046424238) -->
- <skip />
- <!-- no translation found for spoken_emoji_2611 (4530550203347054611) -->
- <skip />
- <!-- no translation found for spoken_emoji_2614 (1612791247861229500) -->
- <skip />
- <!-- no translation found for spoken_emoji_2615 (3320562382424018588) -->
- <skip />
- <!-- no translation found for spoken_emoji_261D (4690554173549768467) -->
- <skip />
- <!-- no translation found for spoken_emoji_263A (3170094381521989300) -->
- <skip />
- <!-- no translation found for spoken_emoji_2648 (4621241062667020673) -->
- <skip />
- <!-- no translation found for spoken_emoji_2649 (7694461245947059086) -->
- <skip />
- <!-- no translation found for spoken_emoji_264A (1258074605878705030) -->
- <skip />
- <!-- no translation found for spoken_emoji_264B (4409219914377810956) -->
- <skip />
- <!-- no translation found for spoken_emoji_264C (6520255367817054163) -->
- <skip />
- <!-- no translation found for spoken_emoji_264D (1504758945499854018) -->
- <skip />
- <!-- no translation found for spoken_emoji_264E (2354847104530633519) -->
- <skip />
- <!-- no translation found for spoken_emoji_264F (5822933280406416112) -->
- <skip />
- <!-- no translation found for spoken_emoji_2650 (4832481156714796163) -->
- <skip />
- <!-- no translation found for spoken_emoji_2651 (840953134601595090) -->
- <skip />
- <!-- no translation found for spoken_emoji_2652 (3586925968718775281) -->
- <skip />
- <!-- no translation found for spoken_emoji_2653 (8420547731496254492) -->
- <skip />
- <!-- no translation found for spoken_emoji_2660 (4541170554542412536) -->
- <skip />
- <!-- no translation found for spoken_emoji_2663 (3669352721942285724) -->
- <skip />
- <!-- no translation found for spoken_emoji_2665 (6347941599683765843) -->
- <skip />
- <!-- no translation found for spoken_emoji_2666 (8296769213401115999) -->
- <skip />
- <!-- no translation found for spoken_emoji_2668 (7063148281053820386) -->
- <skip />
- <!-- no translation found for spoken_emoji_267B (21716857176812762) -->
- <skip />
- <!-- no translation found for spoken_emoji_267F (8833496533226475443) -->
- <skip />
- <!-- no translation found for spoken_emoji_2693 (7443148847598433088) -->
- <skip />
- <!-- no translation found for spoken_emoji_26A0 (6272635532992727510) -->
- <skip />
- <!-- no translation found for spoken_emoji_26A1 (5604749644693339145) -->
- <skip />
- <!-- no translation found for spoken_emoji_26AA (8005748091690377153) -->
- <skip />
- <!-- no translation found for spoken_emoji_26AB (1655910278422753244) -->
- <skip />
- <!-- no translation found for spoken_emoji_26BD (1545218197938889737) -->
- <skip />
- <!-- no translation found for spoken_emoji_26BE (8959760533076498209) -->
- <skip />
- <!-- no translation found for spoken_emoji_26C4 (3045791757044255626) -->
- <skip />
- <!-- no translation found for spoken_emoji_26C5 (5580129409712578639) -->
- <skip />
- <!-- no translation found for spoken_emoji_26CE (8963656417276062998) -->
- <skip />
- <!-- no translation found for spoken_emoji_26D4 (2231451988209604130) -->
- <skip />
- <!-- no translation found for spoken_emoji_26EA (7513319636103804907) -->
- <skip />
- <!-- no translation found for spoken_emoji_26F2 (7134115206158891037) -->
- <skip />
- <!-- no translation found for spoken_emoji_26F3 (4912302210162075465) -->
- <skip />
- <!-- no translation found for spoken_emoji_26F5 (4766328116769075217) -->
- <skip />
- <!-- no translation found for spoken_emoji_26FA (5888017494809199037) -->
- <skip />
- <!-- no translation found for spoken_emoji_26FD (2417060622927453534) -->
- <skip />
- <!-- no translation found for spoken_emoji_2702 (4005741160717451912) -->
- <skip />
- <!-- no translation found for spoken_emoji_2705 (164605766946697759) -->
- <skip />
- <!-- no translation found for spoken_emoji_2708 (7153840886849268988) -->
- <skip />
- <!-- no translation found for spoken_emoji_2709 (2217319160724311369) -->
- <skip />
- <!-- no translation found for spoken_emoji_270A (508347232762319473) -->
- <skip />
- <!-- no translation found for spoken_emoji_270B (6640562128327753423) -->
- <skip />
- <!-- no translation found for spoken_emoji_270C (1344288035704944581) -->
- <skip />
- <!-- no translation found for spoken_emoji_270F (6108251586067318718) -->
- <skip />
- <!-- no translation found for spoken_emoji_2712 (6320544535087710482) -->
- <skip />
- <!-- no translation found for spoken_emoji_2714 (1968242800064001654) -->
- <skip />
- <!-- no translation found for spoken_emoji_2716 (511941294762977228) -->
- <skip />
- <!-- no translation found for spoken_emoji_2728 (5650330815808691881) -->
- <skip />
- <!-- no translation found for spoken_emoji_2733 (8915809595141157327) -->
- <skip />
- <!-- no translation found for spoken_emoji_2734 (4846583547980754332) -->
- <skip />
- <!-- no translation found for spoken_emoji_2744 (4350636647760161042) -->
- <skip />
- <!-- no translation found for spoken_emoji_2747 (3718282973916474455) -->
- <skip />
- <!-- no translation found for spoken_emoji_274C (2752145886733295314) -->
- <skip />
- <!-- no translation found for spoken_emoji_274E (4262918689871098338) -->
- <skip />
- <!-- no translation found for spoken_emoji_2753 (6935897159942119808) -->
- <skip />
- <!-- no translation found for spoken_emoji_2754 (7277504915105532954) -->
- <skip />
- <!-- no translation found for spoken_emoji_2755 (6853076969826960210) -->
- <skip />
- <!-- no translation found for spoken_emoji_2757 (3707907828776912174) -->
- <skip />
+ <string name="spoken_emoji_00A9" msgid="2859822817116803638">"ເຄື່ອງ​ໝາຍ​ລິຂະສິດ"</string>
+ <string name="spoken_emoji_00AE" msgid="7708335454134589027">"ເຄື່ອງໝາຍ​ຈົດທະບຽນ"</string>
+ <string name="spoken_emoji_203C" msgid="153340916701508663">"Double exclamation mark"</string>
+ <string name="spoken_emoji_2049" msgid="4877256448299555371">"Exclamation question mark"</string>
+ <string name="spoken_emoji_2122" msgid="9188440722954720429">"Trade mark sign"</string>
+ <string name="spoken_emoji_2139" msgid="9114342638917304327">"Information source"</string>
+ <string name="spoken_emoji_2194" msgid="8055202727034946680">"Left right arrow"</string>
+ <string name="spoken_emoji_2195" msgid="8028122253301087407">"Up down arrow"</string>
+ <string name="spoken_emoji_2196" msgid="4019164898967854363">"North west arrow"</string>
+ <string name="spoken_emoji_2197" msgid="4255723717709017801">"North east arrow"</string>
+ <string name="spoken_emoji_2198" msgid="1452063451313622090">"South east arrow"</string>
+ <string name="spoken_emoji_2199" msgid="6942722693368807849">"South west arrow"</string>
+ <string name="spoken_emoji_21A9" msgid="5204750172335111188">"Leftwards arrow with hook"</string>
+ <string name="spoken_emoji_21AA" msgid="3950259884359247006">"Rightwards arrow with hook"</string>
+ <string name="spoken_emoji_231A" msgid="6751448803233874993">"ເບິ່ງ"</string>
+ <string name="spoken_emoji_231B" msgid="5956428809948426182">"Hourglass"</string>
+ <string name="spoken_emoji_23E9" msgid="4022497733535162237">"Black right-pointing double triangle"</string>
+ <string name="spoken_emoji_23EA" msgid="2251396938087774944">"Black left-pointing double triangle"</string>
+ <string name="spoken_emoji_23EB" msgid="3746885195641491865">"Black up-pointing double triangle"</string>
+ <string name="spoken_emoji_23EC" msgid="7852372752901163416">"Black down-pointing double triangle"</string>
+ <string name="spoken_emoji_23F0" msgid="8474219588750627870">"ໂມງປຸກ"</string>
+ <string name="spoken_emoji_23F3" msgid="166900119581024371">"Hourglass with flowing sand"</string>
+ <string name="spoken_emoji_24C2" msgid="3948348737566038470">"Circled latin capital letter m"</string>
+ <string name="spoken_emoji_25AA" msgid="7865181015100227349">"Black small square"</string>
+ <string name="spoken_emoji_25AB" msgid="6446532820937381457">"White small square"</string>
+ <string name="spoken_emoji_25B6" msgid="2423897708496040947">"Black right-pointing triangle"</string>
+ <string name="spoken_emoji_25C0" msgid="3595083440074484934">"Black left-pointing triangle"</string>
+ <string name="spoken_emoji_25FB" msgid="4838691986881215419">"White medium square"</string>
+ <string name="spoken_emoji_25FC" msgid="7008859564991191050">"Black medium square"</string>
+ <string name="spoken_emoji_25FD" msgid="7673439755069217479">"White medium small square"</string>
+ <string name="spoken_emoji_25FE" msgid="6782214109919768923">"Black medium small square"</string>
+ <string name="spoken_emoji_2600" msgid="2272722634618990413">"Black sun with rays"</string>
+ <string name="spoken_emoji_2601" msgid="6205136889311537150">"Cloud"</string>
+ <string name="spoken_emoji_260E" msgid="8670395193046424238">"Black telephone"</string>
+ <string name="spoken_emoji_2611" msgid="4530550203347054611">"Ballot box with check"</string>
+ <string name="spoken_emoji_2614" msgid="1612791247861229500">"Umbrella with rain drops"</string>
+ <string name="spoken_emoji_2615" msgid="3320562382424018588">"Hot beverage"</string>
+ <string name="spoken_emoji_261D" msgid="4690554173549768467">"White up pointing index"</string>
+ <string name="spoken_emoji_263A" msgid="3170094381521989300">"White smiling face"</string>
+ <string name="spoken_emoji_2648" msgid="4621241062667020673">"Aries"</string>
+ <string name="spoken_emoji_2649" msgid="7694461245947059086">"Taurus"</string>
+ <string name="spoken_emoji_264A" msgid="1258074605878705030">"Gemini"</string>
+ <string name="spoken_emoji_264B" msgid="4409219914377810956">"ມະເຮັງ"</string>
+ <string name="spoken_emoji_264C" msgid="6520255367817054163">"Leo"</string>
+ <string name="spoken_emoji_264D" msgid="1504758945499854018">"Virgo"</string>
+ <string name="spoken_emoji_264E" msgid="2354847104530633519">"Libra"</string>
+ <string name="spoken_emoji_264F" msgid="5822933280406416112">"Scorpius"</string>
+ <string name="spoken_emoji_2650" msgid="4832481156714796163">"Sagittarius"</string>
+ <string name="spoken_emoji_2651" msgid="840953134601595090">"Capricorn"</string>
+ <string name="spoken_emoji_2652" msgid="3586925968718775281">"Aquarius"</string>
+ <string name="spoken_emoji_2653" msgid="8420547731496254492">"Pisces"</string>
+ <string name="spoken_emoji_2660" msgid="4541170554542412536">"Black spade suit"</string>
+ <string name="spoken_emoji_2663" msgid="3669352721942285724">"Black club suit"</string>
+ <string name="spoken_emoji_2665" msgid="6347941599683765843">"Black heart suit"</string>
+ <string name="spoken_emoji_2666" msgid="8296769213401115999">"Black diamond suit"</string>
+ <string name="spoken_emoji_2668" msgid="7063148281053820386">"Hot springs"</string>
+ <string name="spoken_emoji_267B" msgid="21716857176812762">"Black universal recycling symbol"</string>
+ <string name="spoken_emoji_267F" msgid="8833496533226475443">"Wheelchair symbol"</string>
+ <string name="spoken_emoji_2693" msgid="7443148847598433088">"Anchor"</string>
+ <string name="spoken_emoji_26A0" msgid="6272635532992727510">"Warning sign"</string>
+ <string name="spoken_emoji_26A1" msgid="5604749644693339145">"High voltage sign"</string>
+ <string name="spoken_emoji_26AA" msgid="8005748091690377153">"Medium white circle"</string>
+ <string name="spoken_emoji_26AB" msgid="1655910278422753244">"Medium black circle"</string>
+ <string name="spoken_emoji_26BD" msgid="1545218197938889737">"Soccer ball"</string>
+ <string name="spoken_emoji_26BE" msgid="8959760533076498209">"ເບສບອລ"</string>
+ <string name="spoken_emoji_26C4" msgid="3045791757044255626">"Snowman without snow"</string>
+ <string name="spoken_emoji_26C5" msgid="5580129409712578639">"Sun behind cloud"</string>
+ <string name="spoken_emoji_26CE" msgid="8963656417276062998">"Ophiuchus"</string>
+ <string name="spoken_emoji_26D4" msgid="2231451988209604130">"No entry"</string>
+ <string name="spoken_emoji_26EA" msgid="7513319636103804907">"Church"</string>
+ <string name="spoken_emoji_26F2" msgid="7134115206158891037">"Fountain"</string>
+ <string name="spoken_emoji_26F3" msgid="4912302210162075465">"Flag in hole"</string>
+ <string name="spoken_emoji_26F5" msgid="4766328116769075217">"Sailboat"</string>
+ <string name="spoken_emoji_26FA" msgid="5888017494809199037">"Tent"</string>
+ <string name="spoken_emoji_26FD" msgid="2417060622927453534">"Fuel pump"</string>
+ <string name="spoken_emoji_2702" msgid="4005741160717451912">"Black scissors"</string>
+ <string name="spoken_emoji_2705" msgid="164605766946697759">"White heavy check mark"</string>
+ <string name="spoken_emoji_2708" msgid="7153840886849268988">"Airplane"</string>
+ <string name="spoken_emoji_2709" msgid="2217319160724311369">"Envelope"</string>
+ <string name="spoken_emoji_270A" msgid="508347232762319473">"Raised fist"</string>
+ <string name="spoken_emoji_270B" msgid="6640562128327753423">"Raised hand"</string>
+ <string name="spoken_emoji_270C" msgid="1344288035704944581">"Victory hand"</string>
+ <string name="spoken_emoji_270F" msgid="6108251586067318718">"Pencil"</string>
+ <string name="spoken_emoji_2712" msgid="6320544535087710482">"Black nib"</string>
+ <string name="spoken_emoji_2714" msgid="1968242800064001654">"Heavy check mark"</string>
+ <string name="spoken_emoji_2716" msgid="511941294762977228">"Heavy multiplication x"</string>
+ <string name="spoken_emoji_2728" msgid="5650330815808691881">"Sparkles"</string>
+ <string name="spoken_emoji_2733" msgid="8915809595141157327">"Eight spoked asterisk"</string>
+ <string name="spoken_emoji_2734" msgid="4846583547980754332">"Eight pointed black star"</string>
+ <string name="spoken_emoji_2744" msgid="4350636647760161042">"Snowflake"</string>
+ <string name="spoken_emoji_2747" msgid="3718282973916474455">"Sparkle"</string>
+ <string name="spoken_emoji_274C" msgid="2752145886733295314">"Cross mark"</string>
+ <string name="spoken_emoji_274E" msgid="4262918689871098338">"Negative squared cross mark"</string>
+ <string name="spoken_emoji_2753" msgid="6935897159942119808">"Black question mark ornament"</string>
+ <string name="spoken_emoji_2754" msgid="7277504915105532954">"White question mark ornament"</string>
+ <string name="spoken_emoji_2755" msgid="6853076969826960210">"White exclamation mark ornament"</string>
+ <string name="spoken_emoji_2757" msgid="3707907828776912174">"Heavy exclamation mark symbol"</string>
<string name="spoken_emoji_2764" msgid="4214257843609432167">"ຫົວໃຈ​ສີ​ດຳ​ໜັກ"</string>
- <!-- no translation found for spoken_emoji_2795 (6563954833786162168) -->
- <skip />
- <!-- no translation found for spoken_emoji_2796 (5990926508250772777) -->
- <skip />
- <!-- no translation found for spoken_emoji_2797 (24694184172879174) -->
- <skip />
- <!-- no translation found for spoken_emoji_27A1 (3513434778263100580) -->
- <skip />
- <!-- no translation found for spoken_emoji_27B0 (203395646864662198) -->
- <skip />
- <!-- no translation found for spoken_emoji_27BF (4940514642375640510) -->
- <skip />
- <!-- no translation found for spoken_emoji_2934 (9062130477982973457) -->
- <skip />
- <!-- no translation found for spoken_emoji_2935 (6198710960720232074) -->
- <skip />
- <!-- no translation found for spoken_emoji_2B05 (4813405635410707690) -->
- <skip />
- <!-- no translation found for spoken_emoji_2B06 (1223172079106250748) -->
- <skip />
- <!-- no translation found for spoken_emoji_2B07 (1599124424746596150) -->
- <skip />
- <!-- no translation found for spoken_emoji_2B1B (3461247311988501626) -->
- <skip />
- <!-- no translation found for spoken_emoji_2B1C (5793146430145248915) -->
- <skip />
- <!-- no translation found for spoken_emoji_2B50 (3850845519526950524) -->
- <skip />
- <!-- no translation found for spoken_emoji_2B55 (9137882158811541824) -->
- <skip />
- <!-- no translation found for spoken_emoji_3030 (4609172241893565639) -->
- <skip />
- <!-- no translation found for spoken_emoji_303D (2545833934975907505) -->
- <skip />
- <!-- no translation found for spoken_emoji_3297 (928912923628973800) -->
- <skip />
- <!-- no translation found for spoken_emoji_3299 (3930347573693668426) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F004 (1705216181345894600) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F0CF (7601493592085987866) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F170 (3817698686602826773) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F171 (3684218589626650242) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F17E (2978809190364779029) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F17F (463634348668462040) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F18E (1650705325221496768) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F191 (5386969264431429221) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F192 (8324226436829162496) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F193 (4731758603321515364) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F194 (4903128609556175887) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F195 (1433142500411060924) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F196 (8825160701159634202) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F197 (7841079241554176535) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F198 (7020298909426960622) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F199 (5971252667136235630) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F19A (4557270135899843959) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F201 (7000490044681139002) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F202 (8560906958695043947) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F21A (1496435317324514033) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F22F (609797148862445402) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F232 (8125716331632035820) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F233 (8749401090457355028) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F234 (3546951604285970768) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F235 (5320186982841793711) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F236 (879755752069393034) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F237 (6741807001205851437) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F238 (5504414186438196912) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F239 (1634067311597618959) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F23A (3107862957630169536) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F250 (6586943922806727907) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F251 (9099032855993346948) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F300 (4720098285295840383) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F301 (3601962477653752974) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F302 (3404357123421753593) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F303 (3899301321538188206) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F304 (2767148930689050040) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F305 (9165812924292061196) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F306 (5889294736109193104) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F307 (2714290867291163713) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F308 (688704703985173377) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F309 (6217981957992313528) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F30A (4329309263152110893) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F30B (5729430693700923112) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F30C (2961230863217543082) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F30D (1113905673331547953) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F30E (5278512600749223671) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F30F (5718144880978707493) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F310 (2959618582975247601) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F311 (623906380914895542) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F312 (4458575672576125401) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F313 (7599181787989497294) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F314 (4898293184964365413) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F315 (3218117051779496309) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F316 (2061317145777689569) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F317 (2721090687319539049) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F318 (3814091755648887570) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F319 (4074299824890459465) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F31A (3092285278116977103) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F31B (2658562138386927881) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F31C (7914768515547867384) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F31D (1925730459848297182) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F31E (8022112382524084418) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F31F (1051661214137766369) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F320 (5450591979068216115) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F330 (3115760035618051575) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F331 (5658888205290008691) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F332 (2935650450421165938) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F333 (5898847427062482675) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F334 (6183375224678417894) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F335 (5352418412103584941) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F337 (3839107352363566289) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F338 (6389970364260468490) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F339 (9128891447985256151) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F33A (2025828400095233078) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F33B (8163868254348448552) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F33C (6850371206262335812) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F33D (9033484052864509610) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F33E (2540173396638444120) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F33F (4384823344364908558) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F340 (3494255459156499305) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F341 (4581959481754990158) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F342 (3119068426871821222) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F343 (2663317495805149004) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F344 (2738517881678722159) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F345 (6135288642349085554) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F346 (2075395322785406367) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F347 (7753453754963890571) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F348 (1247076837284932788) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F349 (5563054555180611086) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F34A (4688661208570160524) -->
- <skip />
+ <string name="spoken_emoji_2795" msgid="6563954833786162168">"Heavy plus sign"</string>
+ <string name="spoken_emoji_2796" msgid="5990926508250772777">"Heavy minus sign"</string>
+ <string name="spoken_emoji_2797" msgid="24694184172879174">"Heavy division sign"</string>
+ <string name="spoken_emoji_27A1" msgid="3513434778263100580">"Black rightwards arrow"</string>
+ <string name="spoken_emoji_27B0" msgid="203395646864662198">"Curly loop"</string>
+ <string name="spoken_emoji_27BF" msgid="4940514642375640510">"Double curly loop"</string>
+ <string name="spoken_emoji_2934" msgid="9062130477982973457">"Arrow pointing rightwards then curving upwards"</string>
+ <string name="spoken_emoji_2935" msgid="6198710960720232074">"Arrow pointing rightwards then curving downwards"</string>
+ <string name="spoken_emoji_2B05" msgid="4813405635410707690">"Leftwards black arrow"</string>
+ <string name="spoken_emoji_2B06" msgid="1223172079106250748">"Upwards black arrow"</string>
+ <string name="spoken_emoji_2B07" msgid="1599124424746596150">"Downwards black arrow"</string>
+ <string name="spoken_emoji_2B1B" msgid="3461247311988501626">"Black large square"</string>
+ <string name="spoken_emoji_2B1C" msgid="5793146430145248915">"White large square"</string>
+ <string name="spoken_emoji_2B50" msgid="3850845519526950524">"White medium star"</string>
+ <string name="spoken_emoji_2B55" msgid="9137882158811541824">"Heavy large circle"</string>
+ <string name="spoken_emoji_3030" msgid="4609172241893565639">"Wavy dash"</string>
+ <string name="spoken_emoji_303D" msgid="2545833934975907505">"Part alternation mark"</string>
+ <string name="spoken_emoji_3297" msgid="928912923628973800">"Circled ideograph congratulation"</string>
+ <string name="spoken_emoji_3299" msgid="3930347573693668426">"Circled ideograph secret"</string>
+ <string name="spoken_emoji_1F004" msgid="1705216181345894600">"ໄພ້​ນົກກະຈອກ​ເທດ​ມັງ​ກອນ​ແດງ"</string>
+ <string name="spoken_emoji_1F0CF" msgid="7601493592085987866">"ກຳລັງ​ຫຼິ້ນ​ໄພ້​ໂຈກເກີ​ສີ​ດຳ"</string>
+ <string name="spoken_emoji_1F170" msgid="3817698686602826773">"ເລືອດ​ກຣຸບ A"</string>
+ <string name="spoken_emoji_1F171" msgid="3684218589626650242">"ເລືອດ​ກຣຸບ B"</string>
+ <string name="spoken_emoji_1F17E" msgid="2978809190364779029">"ເລືອດ​ກຣຸບ O"</string>
+ <string name="spoken_emoji_1F17F" msgid="463634348668462040">"ບ່ອນ​ຈອດ​ລົດ"</string>
+ <string name="spoken_emoji_1F18E" msgid="1650705325221496768">"ເລືອດ​ກຣຸບ AB"</string>
+ <string name="spoken_emoji_1F191" msgid="5386969264431429221">"CL ສີ່​ຫຼ່ຽມ"</string>
+ <string name="spoken_emoji_1F192" msgid="8324226436829162496">"Cool ສີ່ຫຼ່ຽມ"</string>
+ <string name="spoken_emoji_1F193" msgid="4731758603321515364">"Free ສີ່ຫຼ່ຽມ"</string>
+ <string name="spoken_emoji_1F194" msgid="4903128609556175887">"ID ສີ່ຫຼ່ຽມ"</string>
+ <string name="spoken_emoji_1F195" msgid="1433142500411060924">"New ສີ່ຫຼ່ຽມ"</string>
+ <string name="spoken_emoji_1F196" msgid="8825160701159634202">"N G ສີ່ຫຼ່ຽມ"</string>
+ <string name="spoken_emoji_1F197" msgid="7841079241554176535">"OK ສີ່ຫຼ່ຽມ"</string>
+ <string name="spoken_emoji_1F198" msgid="7020298909426960622">"SOS ສີ່ຫຼ່ຽມ"</string>
+ <string name="spoken_emoji_1F199" msgid="5971252667136235630">"UP! ສີ່ຫຼ່ຽມ"</string>
+ <string name="spoken_emoji_1F19A" msgid="4557270135899843959">"VS ສີ່ຫຼ່ຽມ"</string>
+ <string name="spoken_emoji_1F201" msgid="7000490044681139002">"ບໍລິການ ແບບ​ກະຕະກະນະ​ສີ່​ຫຼ່ຽມ"</string>
+ <string name="spoken_emoji_1F202" msgid="8560906958695043947">"ບໍລິການ ແບບ​ກະຕະກະນະ​ສີ່​ຫຼ່ຽມ"</string>
+ <string name="spoken_emoji_1F21A" msgid="1496435317324514033">"Squared ideograph charge-free"</string>
+ <string name="spoken_emoji_1F22F" msgid="609797148862445402">"Squared ideograph reserved-seat"</string>
+ <string name="spoken_emoji_1F232" msgid="8125716331632035820">"Squared ideograph prohibitation"</string>
+ <string name="spoken_emoji_1F233" msgid="8749401090457355028">"Squared ideograph vacancy"</string>
+ <string name="spoken_emoji_1F234" msgid="3546951604285970768">"Squared ideograph acceptance"</string>
+ <string name="spoken_emoji_1F235" msgid="5320186982841793711">"Squared ideograph full occupancy"</string>
+ <string name="spoken_emoji_1F236" msgid="879755752069393034">"Squared ideograph paid"</string>
+ <string name="spoken_emoji_1F237" msgid="6741807001205851437">"Squared ideograph monthly"</string>
+ <string name="spoken_emoji_1F238" msgid="5504414186438196912">"Squared ideograph application"</string>
+ <string name="spoken_emoji_1F239" msgid="1634067311597618959">"Squared ideograph discount"</string>
+ <string name="spoken_emoji_1F23A" msgid="3107862957630169536">"Squared ideograph in business"</string>
+ <string name="spoken_emoji_1F250" msgid="6586943922806727907">"Circled ideograph advantage"</string>
+ <string name="spoken_emoji_1F251" msgid="9099032855993346948">"Circled ideograph accept"</string>
+ <string name="spoken_emoji_1F300" msgid="4720098285295840383">"ພະ​ຍ​ຸ​ໝຸນ​ໄຊ​ໂຄລນ"</string>
+ <string name="spoken_emoji_1F301" msgid="3601962477653752974">"ໝອກ​ຄວັນ"</string>
+ <string name="spoken_emoji_1F302" msgid="3404357123421753593">"​ຄັນ​ຮົ່ມ​ປິດ"</string>
+ <string name="spoken_emoji_1F303" msgid="3899301321538188206">"​ຄ່ຳ​ຄືນ​ກັບ​ແສງ​ດາວ"</string>
+ <string name="spoken_emoji_1F304" msgid="2767148930689050040">"​ຕາ​ເວັນ​ຂຶ້ນ​ຢູ່​ພູ"</string>
+ <string name="spoken_emoji_1F305" msgid="9165812924292061196">"​ຕາ​ເວັນ​ຂຶ້ນ"</string>
+ <string name="spoken_emoji_1F306" msgid="5889294736109193104">"​ເມືອງ​ໃນ​ຍາມ​​​ໃກ້​ຄ່ຳ"</string>
+ <string name="spoken_emoji_1F307" msgid="2714290867291163713">"​ຕາ​ເວັນ"</string>
+ <string name="spoken_emoji_1F308" msgid="688704703985173377">"ຮຸ້ງ"</string>
+ <string name="spoken_emoji_1F309" msgid="6217981957992313528">"ຂົວ​ໃນ​ຍາມ​ຄ່ຳ​ຄືນ"</string>
+ <string name="spoken_emoji_1F30A" msgid="4329309263152110893">"​ຄື້ນ​ນ້ຳ"</string>
+ <string name="spoken_emoji_1F30B" msgid="5729430693700923112">"ພູ​ເຂົາ​ໄຟ"</string>
+ <string name="spoken_emoji_1F30C" msgid="2961230863217543082">"ທາງ​ຊ້າງ​ເຜືອກ"</string>
+ <string name="spoken_emoji_1F30D" msgid="1113905673331547953">"ໜ່ວຍ​ໂລກ​ຢູ​ໂຣບ​ອາ​ຟຣິ​ກາ"</string>
+ <string name="spoken_emoji_1F30E" msgid="5278512600749223671">"​ໜ່ວຍ​ໂລກ​ອາ​ເມ​ລິ​ກາ"</string>
+ <string name="spoken_emoji_1F30F" msgid="5718144880978707493">"​ໜ່ວຍ​ໂລກ​ເອ​ເຊຍອອສ​ເຕຣ​ເລຍ"</string>
+ <string name="spoken_emoji_1F310" msgid="2959618582975247601">"ໜ່ວຍ​ໂລກ​ມີ​ເສັ້ນ​ຕັດ"</string>
+ <string name="spoken_emoji_1F311" msgid="623906380914895542">"ສັນ​ຍາ​ລັກ​​ເດືອນ​ມືດ"</string>
+ <string name="spoken_emoji_1F312" msgid="4458575672576125401">"ສັນ​ຍາ​ລັກ​ເດືອນບໍ່​ເຕັມ​ດວງ"</string>
+ <string name="spoken_emoji_1F313" msgid="7599181787989497294">"ສັນ​ຍາ​ລັກ​ເດືອນ​ເຄິ່ງດວງ​ທຳ​ອິດ"</string>
+ <string name="spoken_emoji_1F314" msgid="4898293184964365413">"ສັນ​ຍາ​ລັກ​ເດືອນ​ຂຶ້ນ"</string>
+ <string name="spoken_emoji_1F315" msgid="3218117051779496309">"​ສັນ​ຍາ​ລັກ​ເດືອນ​ເຕັມ​ດວງ"</string>
+ <string name="spoken_emoji_1F316" msgid="2061317145777689569">"ສັນ​ຍາ​ລັກ​ເດືອນ​ໃກ້​ເຕັມ​ດວງ"</string>
+ <string name="spoken_emoji_1F317" msgid="2721090687319539049">"ສັນ​ຍາ​ລັກ​ເດືອນ​ເຄິ່ງ​ດວງ​​ທ້າຍ"</string>
+ <string name="spoken_emoji_1F318" msgid="3814091755648887570">"ສັນ​ຍາ​ລັກ​ເດືອນ​ສ້ຽວ"</string>
+ <string name="spoken_emoji_1F319" msgid="4074299824890459465">"​ເດືອນ​ສ້ຽວ"</string>
+ <string name="spoken_emoji_1F31A" msgid="3092285278116977103">"ເດືອນ​ມືດ​ມີ​ໜ້າ"</string>
+ <string name="spoken_emoji_1F31B" msgid="2658562138386927881">"ເດືອນ​ເຄິ່ງດວງ​ທຳ​ອິດ​ມີ​ໜ້າ"</string>
+ <string name="spoken_emoji_1F31C" msgid="7914768515547867384">"ສັນ​ຍາ​ລັກ​ເດືອນ​ເຄິ່ງ​ດວງ​​ທ້າຍ​ມີ​ໜ້າ"</string>
+ <string name="spoken_emoji_1F31D" msgid="1925730459848297182">"​ເດືອນ​ເຕັມ​ດວງ​ມີ​ໜ້າ"</string>
+ <string name="spoken_emoji_1F31E" msgid="8022112382524084418">"​ຕາ​ເວັນ​ມີ​ໜ້າ"</string>
+ <string name="spoken_emoji_1F31F" msgid="1051661214137766369">"ດາວ​ເຮືອງ​ແສງ"</string>
+ <string name="spoken_emoji_1F320" msgid="5450591979068216115">"​ດາວ​ຕົກ"</string>
+ <string name="spoken_emoji_1F330" msgid="3115760035618051575">"​ລູກ​ເກົາ​ລັດ"</string>
+ <string name="spoken_emoji_1F331" msgid="5658888205290008691">"​ກ້າ​ໄມ້"</string>
+ <string name="spoken_emoji_1F332" msgid="2935650450421165938">"ຕົ້ນ​ໄມ້​ບໍ່​ຜັດ​ໃບ"</string>
+ <string name="spoken_emoji_1F333" msgid="5898847427062482675">"​ຕົ້ນ​ໄມ້​ຜັດໃບ"</string>
+ <string name="spoken_emoji_1F334" msgid="6183375224678417894">"​ຕົ້ນ​ປາມ"</string>
+ <string name="spoken_emoji_1F335" msgid="5352418412103584941">"​ກະ​ບອງ​ເພັດ"</string>
+ <string name="spoken_emoji_1F337" msgid="3839107352363566289">"​ທິວ​ລິບ"</string>
+ <string name="spoken_emoji_1F338" msgid="6389970364260468490">"ດອກ​ເຊີ​ຣີ"</string>
+ <string name="spoken_emoji_1F339" msgid="9128891447985256151">"​ດອກ​ກຸ​ຫລາບ"</string>
+ <string name="spoken_emoji_1F33A" msgid="2025828400095233078">"​ສະ​ກຸນ​ຊະ​ບາ"</string>
+ <string name="spoken_emoji_1F33B" msgid="8163868254348448552">"ດອກ​ຕາ​ເວັນ"</string>
+ <string name="spoken_emoji_1F33C" msgid="6850371206262335812">"ດອກ​ໄມ້​ບານ"</string>
+ <string name="spoken_emoji_1F33D" msgid="9033484052864509610">"ຕົ້ນ​ສາ​ລີ"</string>
+ <string name="spoken_emoji_1F33E" msgid="2540173396638444120">"​ຕົ້ນ​ເຂົ້າ"</string>
+ <string name="spoken_emoji_1F33F" msgid="4384823344364908558">"​ສະ​ໝຸນ​ໄພ"</string>
+ <string name="spoken_emoji_1F340" msgid="3494255459156499305">"ໂຄລ​ເວີ​ສີ່​ໃບ"</string>
+ <string name="spoken_emoji_1F341" msgid="4581959481754990158">"​ໃບ​ເມ​ເປີ້ນ"</string>
+ <string name="spoken_emoji_1F342" msgid="3119068426871821222">"ໃບ​ໄມ້ຫຼົ່ນ"</string>
+ <string name="spoken_emoji_1F343" msgid="2663317495805149004">"ໃບ​ໄມ້​ປິວ​ຕາມ​ລົມ"</string>
+ <string name="spoken_emoji_1F344" msgid="2738517881678722159">"​ເຫັດ"</string>
+ <string name="spoken_emoji_1F345" msgid="6135288642349085554">"​ໝາກ​ເຫຼັ່ນ"</string>
+ <string name="spoken_emoji_1F346" msgid="2075395322785406367">"​ໝາກ​ເຂືອ"</string>
+ <string name="spoken_emoji_1F347" msgid="7753453754963890571">"​ອະງຸ່ນ"</string>
+ <string name="spoken_emoji_1F348" msgid="1247076837284932788">"ໝາກ​ໂມ"</string>
+ <string name="spoken_emoji_1F349" msgid="5563054555180611086">"ໝາກ​ໂມ"</string>
+ <string name="spoken_emoji_1F34A" msgid="4688661208570160524">"ສົ້ມ​ຂຽວ​ຫວານ"</string>
<string name="spoken_emoji_1F34B" msgid="4335318423164185706">"ໝາກ​ນາວ"</string>
- <!-- no translation found for spoken_emoji_1F34C (3712827239858159474) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F34D (7712521967162622936) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F34E (1859466882598614228) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F34F (8251711032295005633) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F350 (625802980159197701) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F351 (4269460120610911895) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F352 (965600953360182635) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F353 (7068623879906925592) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F354 (45162285238888494) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F355 (9157587635526433283) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F356 (2667196119149852244) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F357 (8022817413851052256) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F358 (3042693264748036476) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F359 (3988148661730121958) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F35A (1763824172198327268) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F35B (62530406745717835) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F35C (7537756539198945509) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F35D (8173523083861875196) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F35E (2935428307894662571) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F35F (4840297386785728443) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F360 (4094659855684686801) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F361 (6475486395784096109) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F362 (5004692577661076275) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F363 (1606603765717743806) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F364 (6550457766169570811) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F365 (4963815540953316307) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F366 (7862401745277049404) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F367 (7447972978281980414) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F368 (7790003146142724913) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F369 (7383712944084857350) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F36A (2726271795913042295) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F36B (6342163604299875931) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F36C (2168934753998218790) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F36D (3671507903799975792) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F36E (4630541402785165902) -->
- <skip />
+ <string name="spoken_emoji_1F34C" msgid="3712827239858159474">"​​ໝາກກ້ວຍ"</string>
+ <string name="spoken_emoji_1F34D" msgid="7712521967162622936">"​ໝາກ​ນັດ"</string>
+ <string name="spoken_emoji_1F34E" msgid="1859466882598614228">"​ໝາກ​ໂປ່ມ​ແດງ"</string>
+ <string name="spoken_emoji_1F34F" msgid="8251711032295005633">"​ໝາກ​ໂປ່ມ​ຂຽວ"</string>
+ <string name="spoken_emoji_1F350" msgid="625802980159197701">"ລູກ​ສາ​ລີ່"</string>
+ <string name="spoken_emoji_1F351" msgid="4269460120610911895">"​ລູກ​ພີດ"</string>
+ <string name="spoken_emoji_1F352" msgid="965600953360182635">"​ເຊີ​ຣີ"</string>
+ <string name="spoken_emoji_1F353" msgid="7068623879906925592">"​ສະ​ຕຣໍ​ເບີ​ຣີ"</string>
+ <string name="spoken_emoji_1F354" msgid="45162285238888494">"​ແຮມ​ເບີ​ເກີ"</string>
+ <string name="spoken_emoji_1F355" msgid="9157587635526433283">"​ພິດ​ຊ່າ​ປ່ຽງ​ນຶ່ງ"</string>
+ <string name="spoken_emoji_1F356" msgid="2667196119149852244">"ຊີ້ນ​ຕິດ​ກະ​ດູກ"</string>
+ <string name="spoken_emoji_1F357" msgid="8022817413851052256">"​ຂາ​ສັດ​ປີກ"</string>
+ <string name="spoken_emoji_1F358" msgid="3042693264748036476">"ເຂົ້າ​ໜົມ​ເຂົ້າ"</string>
+ <string name="spoken_emoji_1F359" msgid="3988148661730121958">"ເຂົ້າ​ປັ້ນ"</string>
+ <string name="spoken_emoji_1F35A" msgid="1763824172198327268">"​ເຂົ້າ​ສຸກ"</string>
+ <string name="spoken_emoji_1F35B" msgid="62530406745717835">"ເຂົ້າ​ແກງ​ກະ​ຫລີ່"</string>
+ <string name="spoken_emoji_1F35C" msgid="7537756539198945509">"​ຖ້ວຍ​ຮ້ອນ"</string>
+ <string name="spoken_emoji_1F35D" msgid="8173523083861875196">"​ສະ​ປາ​ເກັດ​ຕີ"</string>
+ <string name="spoken_emoji_1F35E" msgid="2935428307894662571">"​ເຂົ້າ​ຈ​ີ່"</string>
+ <string name="spoken_emoji_1F35F" msgid="4840297386785728443">"​ມັນຝຣັ່ງ​ທອດ"</string>
+ <string name="spoken_emoji_1F360" msgid="4094659855684686801">"​ມັນ​ຝຣັ່ງ​ຫວານ​ອົບ"</string>
+ <string name="spoken_emoji_1F361" msgid="6475486395784096109">"ດັງ​ໂງະ"</string>
+ <string name="spoken_emoji_1F362" msgid="5004692577661076275">"ໂອ​ເດັ້ງ"</string>
+ <string name="spoken_emoji_1F363" msgid="1606603765717743806">"​ຊູ​ຊິ"</string>
+ <string name="spoken_emoji_1F364" msgid="6550457766169570811">"​ກຸ້ງ​ທອດ"</string>
+ <string name="spoken_emoji_1F365" msgid="4963815540953316307">"ເຄັກ​ປາ​ແບບ​ໝຸນໆ"</string>
+ <string name="spoken_emoji_1F366" msgid="7862401745277049404">"ກະ​ແລ່ມ​ນຸ້ມ"</string>
+ <string name="spoken_emoji_1F367" msgid="7447972978281980414">"ນ້ຳ​ແຂງ​ໃສ"</string>
+ <string name="spoken_emoji_1F368" msgid="7790003146142724913">"ກະ​ແລ່ມ"</string>
+ <string name="spoken_emoji_1F369" msgid="7383712944084857350">"​ໂດ​ນັດ"</string>
+ <string name="spoken_emoji_1F36A" msgid="2726271795913042295">"​ຄຸ​ກ​ກີ້"</string>
+ <string name="spoken_emoji_1F36B" msgid="6342163604299875931">"​ຊັອກ​ໂກ​ແລັດບາ"</string>
+ <string name="spoken_emoji_1F36C" msgid="2168934753998218790">"ແຄນດີ້"</string>
+ <string name="spoken_emoji_1F36D" msgid="3671507903799975792">"​ໂລ​ລິ​ປັອບ"</string>
+ <string name="spoken_emoji_1F36E" msgid="4630541402785165902">"​ຄັ​ສ​ຕາດ"</string>
<string name="spoken_emoji_1F36F" msgid="5577915387425169439">"ໝໍ້​ນ້ຳ​ເຜິ້ງ"</string>
- <!-- no translation found for spoken_emoji_1F370 (7243244547866114951) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F371 (6731527040552916358) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F372 (1635035323832181733) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F373 (7799289534289221045) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F374 (5973820884987069131) -->
- <skip />
+ <string name="spoken_emoji_1F370" msgid="7243244547866114951">"ຊັອດ​ເຄັກ"</string>
+ <string name="spoken_emoji_1F371" msgid="6731527040552916358">"ເບັນ​ໂຕ"</string>
+ <string name="spoken_emoji_1F372" msgid="1635035323832181733">"ໝໍ້​ອາ​ຫານ"</string>
+ <string name="spoken_emoji_1F373" msgid="7799289534289221045">"​ຄົວ​ກິນ"</string>
+ <string name="spoken_emoji_1F374" msgid="5973820884987069131">"​ມີດ​ແລະ​ສ້ອມ"</string>
<string name="spoken_emoji_1F375" msgid="1074832087699617700">"ຖ້ວຍ​ຊາ​ແບບ​ບໍ່​ມີ​ດ້າມ​ຈັບ"</string>
- <!-- no translation found for spoken_emoji_1F376 (6499274685584852067) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F377 (1762398562314172075) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F378 (5528234560590117516) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F379 (790581290787943325) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F37A (391966822450619516) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F37B (9015043286465670662) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F37C (2532113819464508894) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F380 (3487363857092458827) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F381 (614180683680675444) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F382 (4720497171946687501) -->
- <skip />
+ <string name="spoken_emoji_1F376" msgid="6499274685584852067">"ຈອກ​ແລະ​​ເຫຼົ້າສາ​ເກ"</string>
+ <string name="spoken_emoji_1F377" msgid="1762398562314172075">"​ຈອກວາຍ"</string>
+ <string name="spoken_emoji_1F378" msgid="5528234560590117516">"​ຈອກ​ຄັອກ​ເທວ"</string>
+ <string name="spoken_emoji_1F379" msgid="790581290787943325">"ເຄື່ອງ​ດື່ມ​ເຂດ​ຮ້ອນ"</string>
+ <string name="spoken_emoji_1F37A" msgid="391966822450619516">"ແກ້ວ​ເບຍ"</string>
+ <string name="spoken_emoji_1F37B" msgid="9015043286465670662">"ຕຳ​ແກ້ວ​ເບຍ"</string>
+ <string name="spoken_emoji_1F37C" msgid="2532113819464508894">"​​​ຕຸກ​ນົມ​ແອ​ນ້ອຍ"</string>
+ <string name="spoken_emoji_1F380" msgid="3487363857092458827">"​ຣິບບອນ"</string>
+ <string name="spoken_emoji_1F381" msgid="614180683680675444">"​ຂອງ​ຂວັນ​ຫໍ່​ໄວ້"</string>
+ <string name="spoken_emoji_1F382" msgid="4720497171946687501">"​ເຄັກ​ວັນ​ເກີດ"</string>
<string name="spoken_emoji_1F383" msgid="3536505941578757623">"ແຈັກ-ໂອ-ແລນເທິນ"</string>
- <!-- no translation found for spoken_emoji_1F384 (1797870204479059004) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F385 (1754174063483626367) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F386 (2130445450758114746) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F387 (3403182563117999933) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F388 (2903047203723251804) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F389 (2352830665883549388) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F38A (6280428984773641322) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F38B (4902225837479015489) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F38C (7623268024030989365) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F38D (8237542796124408528) -->
- <skip />
+ <string name="spoken_emoji_1F384" msgid="1797870204479059004">"​ຕົ້ນ​ຄ​ຣິສ​ມາ​ສ"</string>
+ <string name="spoken_emoji_1F385" msgid="1754174063483626367">"ຊານ​ຕາ​ຄລອສ"</string>
+ <string name="spoken_emoji_1F386" msgid="2130445450758114746">"ບັ້ງໄຟດອກ"</string>
+ <string name="spoken_emoji_1F387" msgid="3403182563117999933">"ດອກ​ໄມ້​ໄຟ"</string>
+ <string name="spoken_emoji_1F388" msgid="2903047203723251804">"​ບານ​ລູນ"</string>
+ <string name="spoken_emoji_1F389" msgid="2352830665883549388">"ປາ​​ຕີ້​ປັອບ​ເປີ"</string>
+ <string name="spoken_emoji_1F38A" msgid="6280428984773641322">"ບານ​ຄອນ​ເຟັດ​ຕີ"</string>
+ <string name="spoken_emoji_1F38B" msgid="4902225837479015489">"ຕົ້ນ​ທາ​ນາ​ບາ​ຕະ"</string>
+ <string name="spoken_emoji_1F38C" msgid="7623268024030989365">"ທຸງ​ໄຂວ່​ກັນ"</string>
+ <string name="spoken_emoji_1F38D" msgid="8237542796124408528">"ການ​ຕົກ​ແຕ່ງ​ຕົ້ນ​ພາຍ"</string>
<string name="spoken_emoji_1F38E" msgid="5373397476238212371">"ຕຸກກະຕາ​ຍີ່ປຸ່ນ"</string>
- <!-- no translation found for spoken_emoji_1F38F (8754091376829552844) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F390 (8903307048095431374) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F391 (2134952069191911841) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F392 (6380405493914304737) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F393 (6947890064872470996) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3A0 (3572095190082826057) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3A1 (4300565511681058798) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3A2 (15486093912232140) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3A3 (921739319504942924) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3A4 (7497596355346856950) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3A5 (4290497821228183002) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3A6 (26019057872319055) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3A7 (837856608794094105) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3A8 (2332260356509244587) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3A9 (9045869366525115256) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3AA (5728760354237132) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3AB (1657997517193216284) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3AC (4317366554314492152) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3AD (607157286336130470) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3AE (2902308174671548150) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3AF (5420539221790296407) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3B0 (7440244806527891956) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3B1 (545544382391379234) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3B2 (8302262034774787493) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3B3 (5180870610771027520) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3B4 (4723852033266071564) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3B5 (1998470239850548554) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3B6 (3827730457113941705) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3B7 (5503403099445042180) -->
- <skip />
+ <string name="spoken_emoji_1F38F" msgid="8754091376829552844">"ທຸງ​ປາ​ຄາຣ໌ບ"</string>
+ <string name="spoken_emoji_1F390" msgid="8903307048095431374">"ກະ​ດິ່ງ​ລົມ"</string>
+ <string name="spoken_emoji_1F391" msgid="2134952069191911841">"ພິ​ທີ​ຊົມ​ເດືອນ"</string>
+ <string name="spoken_emoji_1F392" msgid="6380405493914304737">"ກະ​ເປົາ​ໂຮງ​ຮຽນ"</string>
+ <string name="spoken_emoji_1F393" msgid="6947890064872470996">"​ໝວກສຳ​ເລັດ​ການ​ສຶກ​ສາ"</string>
+ <string name="spoken_emoji_1F3A0" msgid="3572095190082826057">"​ມ້າ​ໝຸນ"</string>
+ <string name="spoken_emoji_1F3A1" msgid="4300565511681058798">"ຊິງ​ຊ້າ​ສະ​ຫວັນ"</string>
+ <string name="spoken_emoji_1F3A2" msgid="15486093912232140">"​ລົດ​ໄຟ​ເຫາະ"</string>
+ <string name="spoken_emoji_1F3A3" msgid="921739319504942924">"​ເບັດ​ຕຶກ​ປາ​ກັບ​ປາ"</string>
+ <string name="spoken_emoji_1F3A4" msgid="7497596355346856950">"ໄມໂຄຣໂຟນ"</string>
+ <string name="spoken_emoji_1F3A5" msgid="4290497821228183002">"​ກ້ອງ​ຖ່າຍ​ໜັງ"</string>
+ <string name="spoken_emoji_1F3A6" msgid="26019057872319055">"​ໂຮງ​ຮູບ​ເງົາ"</string>
+ <string name="spoken_emoji_1F3A7" msgid="837856608794094105">"​ຫູ​ຟັງ"</string>
+ <string name="spoken_emoji_1F3A8" msgid="2332260356509244587">"ຈານ​ສີ"</string>
+ <string name="spoken_emoji_1F3A9" msgid="9045869366525115256">"ໝວກ​ຊົງ​ສູງ"</string>
+ <string name="spoken_emoji_1F3AA" msgid="5728760354237132">"ເຕັ້ນ​ລະ​ຄອນ​ສັດ"</string>
+ <string name="spoken_emoji_1F3AB" msgid="1657997517193216284">"​ປີ້"</string>
+ <string name="spoken_emoji_1F3AC" msgid="4317366554314492152">"ແຄລັບ​ເປີ​ບອດ"</string>
+ <string name="spoken_emoji_1F3AD" msgid="607157286336130470">"​ສິນ​ລະ​ປະ​ການ​ສະ​ແດງ"</string>
+ <string name="spoken_emoji_1F3AE" msgid="2902308174671548150">"ວິ​ດີ​ໂອ​ເກມ"</string>
+ <string name="spoken_emoji_1F3AF" msgid="5420539221790296407">"ຍິງ​ເຂົ້າ​ເປົ້າ"</string>
+ <string name="spoken_emoji_1F3B0" msgid="7440244806527891956">"​ສະ​ລັອດ​ແມັດ​ຊີນ"</string>
+ <string name="spoken_emoji_1F3B1" msgid="545544382391379234">"ສະນຸກເກີ"</string>
+ <string name="spoken_emoji_1F3B2" msgid="8302262034774787493">"ລູກ​ເຕົ໋າ"</string>
+ <string name="spoken_emoji_1F3B3" msgid="5180870610771027520">"ໂບລິງ"</string>
+ <string name="spoken_emoji_1F3B4" msgid="4723852033266071564">"ໄພ່​ດອກ​ໄມ້"</string>
+ <string name="spoken_emoji_1F3B5" msgid="1998470239850548554">"​ໂນດ​ດົນ​ຕີ"</string>
+ <string name="spoken_emoji_1F3B6" msgid="3827730457113941705">"​ໂນດ​ດົນ​ຕີຫຼາຍ​ອັນ"</string>
+ <string name="spoken_emoji_1F3B7" msgid="5503403099445042180">"​ແຊັກ​ໂຊ​ໂຟນ"</string>
<string name="spoken_emoji_1F3B8" msgid="3985658156795011430">"ກີຕ້າ"</string>
- <!-- no translation found for spoken_emoji_1F3B9 (5596295757967881451) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3BA (4284064120340683558) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3BB (2856598510069988745) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3BC (1608424748821446230) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3BD (5490786111375627777) -->
- <skip />
+ <string name="spoken_emoji_1F3B9" msgid="5596295757967881451">"ແປ້ນ​ພິມ​ດົນ​ຕີ"</string>
+ <string name="spoken_emoji_1F3BA" msgid="4284064120340683558">"ແຕ"</string>
+ <string name="spoken_emoji_1F3BB" msgid="2856598510069988745">"​ໄວ​ໂອ​ລິນ"</string>
+ <string name="spoken_emoji_1F3BC" msgid="1608424748821446230">"ສະ​ກໍ​ດົນ​ຕີ"</string>
+ <string name="spoken_emoji_1F3BD" msgid="5490786111375627777">"ເສື້ອ​ແລ່ນ​ກັບ​ສາຍ​ພາຍ"</string>
<string name="spoken_emoji_1F3BE" msgid="1851613105691627931">"ໄມ້​ແລະ​ລູກ​ເທນນິສ"</string>
- <!-- no translation found for spoken_emoji_1F3BF (6862405997423247921) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3C0 (7421420756115104085) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3C1 (6926537251677319922) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3C2 (5708596929237987082) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3C3 (5850982999510115824) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3C4 (8468355585994639838) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3C6 (9094474706847545409) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3C7 (8172206200368370116) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3C8 (5619171461277597709) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3C9 (6371294008765871043) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3CA (130977831787806932) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3E0 (6277213201655811842) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3E1 (233476176077538885) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3E2 (919736380093964570) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3E3 (6177606081825094184) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3E4 (717377871070970293) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3E5 (1350532500431776780) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3E6 (342132788513806214) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3E7 (6322352038284944265) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3E8 (5864918444350599907) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3E9 (7830416185375326938) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3EA (5081084413084360479) -->
- <skip />
+ <string name="spoken_emoji_1F3BF" msgid="6862405997423247921">"ສະ​ກີ​ແລະ​ເກີບ​ສະ​ກີ"</string>
+ <string name="spoken_emoji_1F3C0" msgid="7421420756115104085">"​ບານ​ບ້​ວງແລະ​ບ່ວງ"</string>
+ <string name="spoken_emoji_1F3C1" msgid="6926537251677319922">"ທຸງ​ເສັ້ນ​ໄຊ"</string>
+ <string name="spoken_emoji_1F3C2" msgid="5708596929237987082">"ສະ​ໂນບອດ​ເດີ"</string>
+ <string name="spoken_emoji_1F3C3" msgid="5850982999510115824">"​ນັກ​ແລ່ນ"</string>
+ <string name="spoken_emoji_1F3C4" msgid="8468355585994639838">"​ນັກ​ເຊີບ"</string>
+ <string name="spoken_emoji_1F3C6" msgid="9094474706847545409">"​ຮາງວັນ"</string>
+ <string name="spoken_emoji_1F3C7" msgid="8172206200368370116">"​ການ​ແຂ່ງ​ມ້າ"</string>
+ <string name="spoken_emoji_1F3C8" msgid="5619171461277597709">"​ອາ​ເມ​ລິ​ກັນ​ຟຸດບອນ"</string>
+ <string name="spoken_emoji_1F3C9" msgid="6371294008765871043">"​ຣັກ​ບີ"</string>
+ <string name="spoken_emoji_1F3CA" msgid="130977831787806932">"​ນັກ​ລອຍ​ນ້ຳ"</string>
+ <string name="spoken_emoji_1F3E0" msgid="6277213201655811842">"​​ປຸກ​ເຮືອນ"</string>
+ <string name="spoken_emoji_1F3E1" msgid="233476176077538885">"​ເຮືອນ​ພ້ອມ​ສວນ"</string>
+ <string name="spoken_emoji_1F3E2" msgid="919736380093964570">"​ອາ​ຄານ​ສຳ​ນັກ​ງານ"</string>
+ <string name="spoken_emoji_1F3E3" msgid="6177606081825094184">"​ຫ້ອງ​ການ​ໄປ​ສະ​ນີ​ຍີ່​ປຸ່ນ"</string>
+ <string name="spoken_emoji_1F3E4" msgid="717377871070970293">"​ຫ້ອງ​ການ​ໄປ​ສະ​ນີ​ຢູ​ໂຣບ"</string>
+ <string name="spoken_emoji_1F3E5" msgid="1350532500431776780">"​ໂຮງ​ໝໍ"</string>
+ <string name="spoken_emoji_1F3E6" msgid="342132788513806214">"​ທະ​ນາ​ຄານ"</string>
+ <string name="spoken_emoji_1F3E7" msgid="6322352038284944265">"ເອ​ທີ​ເອັມ"</string>
+ <string name="spoken_emoji_1F3E8" msgid="5864918444350599907">"​ໂຮງ​ແຮມ"</string>
+ <string name="spoken_emoji_1F3E9" msgid="7830416185375326938">"ມ່ານ​ຮູດ"</string>
+ <string name="spoken_emoji_1F3EA" msgid="5081084413084360479">"​ຮ້ານ​ສະ​ດວກ​ຊື້"</string>
<string name="spoken_emoji_1F3EB" msgid="7010966528205150525">"ໂຮງຮຽນ"</string>
- <!-- no translation found for spoken_emoji_1F3EC (4845978861878295154) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3ED (3980316226665215370) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3EE (1253964276770550248) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3EF (1128975573507389883) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3F0 (1544632297502291578) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F400 (2063034795679578294) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F401 (6736421616217369594) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F402 (7276670995895485604) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F403 (8045709541897118928) -->
- <skip />
+ <string name="spoken_emoji_1F3EC" msgid="4845978861878295154">"​ຫ້າງ​ສັບ​ພະ​ສິນ​ຄ້າ"</string>
+ <string name="spoken_emoji_1F3ED" msgid="3980316226665215370">"​ໂຮງ​ງານ"</string>
+ <string name="spoken_emoji_1F3EE" msgid="1253964276770550248">"​ໂຄມ​ໄຟ​ອິ​ຊາ​ກາ​ຢະ"</string>
+ <string name="spoken_emoji_1F3EF" msgid="1128975573507389883">"​ຜາ​ສາດ​ຍີ່​ປຸ່ນ"</string>
+ <string name="spoken_emoji_1F3F0" msgid="1544632297502291578">"​ຜາ​ສາດ​ຢູ​ໂຣບ"</string>
+ <string name="spoken_emoji_1F400" msgid="2063034795679578294">"​ໜູ"</string>
+ <string name="spoken_emoji_1F401" msgid="6736421616217369594">"ໜູ"</string>
+ <string name="spoken_emoji_1F402" msgid="7276670995895485604">"Ox"</string>
+ <string name="spoken_emoji_1F403" msgid="8045709541897118928">"ຄວາຍ"</string>
<string name="spoken_emoji_1F404" msgid="5240777285676662335">"ງົວ"</string>
- <!-- no translation found for spoken_emoji_1F406 (5163461930159540018) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F407 (6905370221172708160) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F408 (1362164550508207284) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F409 (8476130983168866013) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F40A (1149626786411545043) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F40B (5199104921208397643) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F40C (2704006052881702675) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F40D (8648186663643157522) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F40E (7219137467573327268) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F40F (7834336676729040395) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F410 (8686765722255775031) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F411 (3585715397876383525) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F412 (4924794582980077838) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F413 (1460475310405677377) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F414 (5857296282631892219) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F415 (5920041074892949527) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F416 (4362403392912540286) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F417 (6836978415840795128) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F418 (7926161463897783691) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F419 (1055233959755784186) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F41A (5195666556511558060) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F41B (7652480167465557832) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F41C (1123461148697574239) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F41D (718579308764058851) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F41E (6766305509608115467) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F41F (1207261298343160838) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F420 (1041145003133609221) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F421 (1748378324417438751) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F422 (4106724877523329148) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F423 (4077407945958691907) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F424 (6911326019270172283) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F425 (5466514196557885577) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F426 (2163979138772892755) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F427 (3585670324511212961) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F428 (7955440808647898579) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F429 (5028269352809819035) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F42A (4681926706404032484) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F42B (2725166074981558322) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F42C (6764791873413727085) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F42D (1033643138546864251) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F42E (8099223337120508820) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F42F (2104743989330781572) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F430 (525492897063150160) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F431 (6051358666235016851) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F432 (7698001871193018305) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F433 (3762356053512899326) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F434 (3619943222159943226) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F435 (59199202683252958) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F436 (340544719369009828) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F437 (1219818379784982585) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F438 (9128124743321008210) -->
- <skip />
+ <string name="spoken_emoji_1F406" msgid="5163461930159540018">"​ເສືອ​ດາວ"</string>
+ <string name="spoken_emoji_1F407" msgid="6905370221172708160">"​ກະ​ຕ່າຍ"</string>
+ <string name="spoken_emoji_1F408" msgid="1362164550508207284">"ແມວ"</string>
+ <string name="spoken_emoji_1F409" msgid="8476130983168866013">"​ມັງ​ກອນ"</string>
+ <string name="spoken_emoji_1F40A" msgid="1149626786411545043">"​ແຂ້"</string>
+ <string name="spoken_emoji_1F40B" msgid="5199104921208397643">"​ວານ"</string>
+ <string name="spoken_emoji_1F40C" msgid="2704006052881702675">"​ຫອຍ"</string>
+ <string name="spoken_emoji_1F40D" msgid="8648186663643157522">"​ງູ"</string>
+ <string name="spoken_emoji_1F40E" msgid="7219137467573327268">"​ມ້າ"</string>
+ <string name="spoken_emoji_1F40F" msgid="7834336676729040395">"ແກະ"</string>
+ <string name="spoken_emoji_1F410" msgid="8686765722255775031">"​ແບ້"</string>
+ <string name="spoken_emoji_1F411" msgid="3585715397876383525">"​ແກະ"</string>
+ <string name="spoken_emoji_1F412" msgid="4924794582980077838">"ລິງ"</string>
+ <string name="spoken_emoji_1F413" msgid="1460475310405677377">"​ໄກ່​ໂຕ​ຜູ້"</string>
+ <string name="spoken_emoji_1F414" msgid="5857296282631892219">"​ໄກ່"</string>
+ <string name="spoken_emoji_1F415" msgid="5920041074892949527">"​ໝາ"</string>
+ <string name="spoken_emoji_1F416" msgid="4362403392912540286">"​ໝູ"</string>
+ <string name="spoken_emoji_1F417" msgid="6836978415840795128">"​ໝູ​ປ່າ"</string>
+ <string name="spoken_emoji_1F418" msgid="7926161463897783691">"​ຊ້າງ"</string>
+ <string name="spoken_emoji_1F419" msgid="1055233959755784186">"​ປາ​ເໝິກ"</string>
+ <string name="spoken_emoji_1F41A" msgid="5195666556511558060">"ເປືອກ​ຫອຍ​ກຽວ"</string>
+ <string name="spoken_emoji_1F41B" msgid="7652480167465557832">"​ແມງ​ໄມ້"</string>
+ <string name="spoken_emoji_1F41C" msgid="1123461148697574239">"​ມົດ"</string>
+ <string name="spoken_emoji_1F41D" msgid="718579308764058851">"​ເຜິ້ງ"</string>
+ <string name="spoken_emoji_1F41E" msgid="6766305509608115467">"ແມງ​ເຕົ່າ​ທອງ"</string>
+ <string name="spoken_emoji_1F41F" msgid="1207261298343160838">"​ປາ"</string>
+ <string name="spoken_emoji_1F420" msgid="1041145003133609221">"​ປາ​ເຂດ​ຮ້ອນ"</string>
+ <string name="spoken_emoji_1F421" msgid="1748378324417438751">"​ປາ​ປັກ​ເປົ້າ"</string>
+ <string name="spoken_emoji_1F422" msgid="4106724877523329148">"​ເຕົ່າ"</string>
+ <string name="spoken_emoji_1F423" msgid="4077407945958691907">"​ໄຂ່​ຟັກ"</string>
+ <string name="spoken_emoji_1F424" msgid="6911326019270172283">"​ໄກ່​ນ້ອຍ"</string>
+ <string name="spoken_emoji_1F425" msgid="5466514196557885577">"​ໜ້າ​ໄກ່​ນ້ອຍ"</string>
+ <string name="spoken_emoji_1F426" msgid="2163979138772892755">"​ນົກ"</string>
+ <string name="spoken_emoji_1F427" msgid="3585670324511212961">"ເພນກວິນ"</string>
+ <string name="spoken_emoji_1F428" msgid="7955440808647898579">"​ໂຄ​ອາ​ລາ"</string>
+ <string name="spoken_emoji_1F429" msgid="5028269352809819035">"​ພຸນ​ເດິນ"</string>
+ <string name="spoken_emoji_1F42A" msgid="4681926706404032484">"ອູດ​ອາ​ຣາ​ບຽນ"</string>
+ <string name="spoken_emoji_1F42B" msgid="2725166074981558322">"ອູດ​ແບັກ​ທຣຽນ"</string>
+ <string name="spoken_emoji_1F42C" msgid="6764791873413727085">"​ໂລ​ມາ"</string>
+ <string name="spoken_emoji_1F42D" msgid="1033643138546864251">"​ໜ້າ​ໜູ"</string>
+ <string name="spoken_emoji_1F42E" msgid="8099223337120508820">"​ໜ້າ​ງົວ"</string>
+ <string name="spoken_emoji_1F42F" msgid="2104743989330781572">"​ໜ້າ​ເສືອ"</string>
+ <string name="spoken_emoji_1F430" msgid="525492897063150160">"​ໜ້າ​ກະ​ຕ່າຍ"</string>
+ <string name="spoken_emoji_1F431" msgid="6051358666235016851">"​ໜ້າ​ແມວ"</string>
+ <string name="spoken_emoji_1F432" msgid="7698001871193018305">"​ໜ້າ​ມັງ​ກອນ"</string>
+ <string name="spoken_emoji_1F433" msgid="3762356053512899326">"​ວານ​ພົ່ນ​ນ້ຳ"</string>
+ <string name="spoken_emoji_1F434" msgid="3619943222159943226">"​ໜ້າ​ມ້າ"</string>
+ <string name="spoken_emoji_1F435" msgid="59199202683252958">"​ໜ້າ​ລິງ"</string>
+ <string name="spoken_emoji_1F436" msgid="340544719369009828">"​ໜ້າ​ໝາ"</string>
+ <string name="spoken_emoji_1F437" msgid="1219818379784982585">"​ໜ້າ​ໝູ"</string>
+ <string name="spoken_emoji_1F438" msgid="9128124743321008210">"​ໜ້າ​ກົບ"</string>
<string name="spoken_emoji_1F439" msgid="1424161319554642266">"ໜ້າ​ໜູ​ແຮມສະເຕີ"</string>
- <!-- no translation found for spoken_emoji_1F43A (6727645488430385584) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F43B (5397170068392865167) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F43C (2715995734367032431) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F43D (6005480717951776597) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F43E (8917626103219080547) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F440 (7144338258163384433) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F442 (1905515392292676124) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F443 (1491504447758933115) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F444 (3654613047946080332) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F445 (7024905244040509204) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F446 (2150365643636471745) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F447 (8794022344940891388) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F448 (3261812959215550650) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F449 (4764447975177805991) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F44A (7197417095486424841) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F44B (1975968945250833117) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F44C (3185919567897876562) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F44D (6182553970602667815) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F44E (8030851867365111809) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F44F (5148753662268213389) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F450 (1012021072085157054) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F451 (8257466714629051320) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F452 (4567394011149905466) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F453 (5978410551173163010) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F454 (348469036193323252) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F455 (5665118831861433578) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F456 (1890991330923356408) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F457 (3904310482655702620) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F458 (5704243858031107692) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F459 (3553148747050035251) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F45A (1389654639484716101) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F45B (1113293170254222904) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F45C (3410257778598006936) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F45D (812176504300064819) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F45E (2901741399934723562) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F45F (6828566359287798863) -->
- <skip />
+ <string name="spoken_emoji_1F43A" msgid="6727645488430385584">"​ໜ້າ​ໝາ​ປ່າ"</string>
+ <string name="spoken_emoji_1F43B" msgid="5397170068392865167">"​ໜ້າ​ໝີ"</string>
+ <string name="spoken_emoji_1F43C" msgid="2715995734367032431">"​ໜ້າ​ແພນ​ດ້າ"</string>
+ <string name="spoken_emoji_1F43D" msgid="6005480717951776597">"​ດັງ​ໝູ"</string>
+ <string name="spoken_emoji_1F43E" msgid="8917626103219080547">"ຮອຍ​ຕີນ"</string>
+ <string name="spoken_emoji_1F440" msgid="7144338258163384433">"​ຕາ"</string>
+ <string name="spoken_emoji_1F442" msgid="1905515392292676124">"​ຫູ"</string>
+ <string name="spoken_emoji_1F443" msgid="1491504447758933115">"​ດັງ"</string>
+ <string name="spoken_emoji_1F444" msgid="3654613047946080332">"​ປາກ"</string>
+ <string name="spoken_emoji_1F445" msgid="7024905244040509204">"​ລິ້ນ"</string>
+ <string name="spoken_emoji_1F446" msgid="2150365643636471745">"ຫຼັງ​ມື​ຊີ້​ຂຶ້ນ​ເທິງ"</string>
+ <string name="spoken_emoji_1F447" msgid="8794022344940891388">"ຫຼັງ​ມື​ຊີ້​ລົງ​ລຸ່ມ"</string>
+ <string name="spoken_emoji_1F448" msgid="3261812959215550650">"ຫຼັງ​ມື​ຊີ້​ໄປ​ຊ້າຍ"</string>
+ <string name="spoken_emoji_1F449" msgid="4764447975177805991">"ຫຼັງ​ມື​ຊີ້​ໄປ​ຂວາ"</string>
+ <string name="spoken_emoji_1F44A" msgid="7197417095486424841">"ກຳ​ປັ້ນ"</string>
+ <string name="spoken_emoji_1F44B" msgid="1975968945250833117">"ມື​ໂບກ​ໄປ​ມາ"</string>
+ <string name="spoken_emoji_1F44C" msgid="3185919567897876562">"​ມື​ເຮັດ​ທ່າ​ໂອ​ເຄ"</string>
+ <string name="spoken_emoji_1F44D" msgid="6182553970602667815">"ຍົກ​ໂປ້​ໃຫ້"</string>
+ <string name="spoken_emoji_1F44E" msgid="8030851867365111809">"​ຊິ້ວ​ນີ້​ໂປ້​ລົງ"</string>
+ <string name="spoken_emoji_1F44F" msgid="5148753662268213389">"​ຕົບ​ມື"</string>
+ <string name="spoken_emoji_1F450" msgid="1012021072085157054">"ແບ​ມື​ອອກ"</string>
+ <string name="spoken_emoji_1F451" msgid="8257466714629051320">"​ມຸງ​ກຸດ"</string>
+ <string name="spoken_emoji_1F452" msgid="4567394011149905466">"​ໝວກ​ຜູ່​ຍິງ"</string>
+ <string name="spoken_emoji_1F453" msgid="5978410551173163010">"​ແວ່ນ​ຕາ"</string>
+ <string name="spoken_emoji_1F454" msgid="348469036193323252">"​ເນັກ​ໄທ"</string>
+ <string name="spoken_emoji_1F455" msgid="5665118831861433578">"​ເສືອ​ຢືນ"</string>
+ <string name="spoken_emoji_1F456" msgid="1890991330923356408">"​​ໂສ້ງຢີນ"</string>
+ <string name="spoken_emoji_1F457" msgid="3904310482655702620">"​ຊ​ຸດ​ເດຣສ"</string>
+ <string name="spoken_emoji_1F458" msgid="5704243858031107692">"​ກິ​ໂມ​ໂນ"</string>
+ <string name="spoken_emoji_1F459" msgid="3553148747050035251">"​ບິ​ກີ​ນີ"</string>
+ <string name="spoken_emoji_1F45A" msgid="1389654639484716101">"​ເສື້ອ​ຜ້າ​ຜູ່​ຍິງ"</string>
+ <string name="spoken_emoji_1F45B" msgid="1113293170254222904">"ກະ​ເປົາ"</string>
+ <string name="spoken_emoji_1F45C" msgid="3410257778598006936">"ກະ​ເປົາ"</string>
+ <string name="spoken_emoji_1F45D" msgid="812176504300064819">"​ກະ​ເປົາ"</string>
+ <string name="spoken_emoji_1F45E" msgid="2901741399934723562">"​ເກີບ​ຜູ່​ຊາຍ"</string>
+ <string name="spoken_emoji_1F45F" msgid="6828566359287798863">"​ເກີບກ​ິ​ລ​າ"</string>
<string name="spoken_emoji_1F460" msgid="305863879170420855">"ເກີບ​ສົ້ນ​ສູງ"</string>
- <!-- no translation found for spoken_emoji_1F461 (5160493217831417630) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F462 (1722897795554863734) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F463 (5850772903593010699) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F464 (1228335905487734913) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F465 (4461307702499679879) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F466 (1938873085514108889) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F467 (8237080594860144998) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F468 (6081300722526675382) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F469 (1090140923076108158) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F46A (5063570981942606595) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F46B (6795882374287327952) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F46C (6844464165783964495) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F46D (2316773068014053180) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F46E (5897625605860822401) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F46F (7716871657717641490) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F470 (6409995400510338892) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F471 (3058247860441670806) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F472 (3928854667819339142) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F473 (5921952095808988381) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F474 (1082237499496725183) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F475 (7280323988642212761) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F476 (4713322657821088296) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F477 (2197036131029221370) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F478 (7245521193493488875) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F479 (6876475321015553972) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F47A (3900813633102703571) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F47B (2608250873194079390) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F47C (3838699131276537421) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F47D (2874077455888369538) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F47E (3642607168625579507) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F47F (441605977269926252) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F480 (3696253485164878739) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F481 (320408708521966893) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F482 (3424354860245608949) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F483 (3221113594843849083) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F484 (7348014979080444885) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F485 (6133507975565116339) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F486 (9085459968247394155) -->
- <skip />
+ <string name="spoken_emoji_1F461" msgid="5160493217831417630">"​ເກີບ​ຜູ່​ຍິງ"</string>
+ <string name="spoken_emoji_1F462" msgid="1722897795554863734">"​ເກີດ​ບູດ​ຜູ່​ຍິງ"</string>
+ <string name="spoken_emoji_1F463" msgid="5850772903593010699">"​ຮອຍ​ຕີນ"</string>
+ <string name="spoken_emoji_1F464" msgid="1228335905487734913">"ຄົນ​ເປັນ​ເງົາ"</string>
+ <string name="spoken_emoji_1F465" msgid="4461307702499679879">"ຄົນ​ເປັນ​ເງົາ"</string>
+ <string name="spoken_emoji_1F466" msgid="1938873085514108889">"​ຜູ່​ຊ​າຍ"</string>
+ <string name="spoken_emoji_1F467" msgid="8237080594860144998">"​ຜ​ູ່​ຍິງ"</string>
+ <string name="spoken_emoji_1F468" msgid="6081300722526675382">"​ຜູ່​ຊາຍ"</string>
+ <string name="spoken_emoji_1F469" msgid="1090140923076108158">"​ຜູ່​ຍິງ"</string>
+ <string name="spoken_emoji_1F46A" msgid="5063570981942606595">"ຄອບຄົວ"</string>
+ <string name="spoken_emoji_1F46B" msgid="6795882374287327952">"​ຊາຍ​ຍິງ​ຈູງ​ມື​ກັນ"</string>
+ <string name="spoken_emoji_1F46C" msgid="6844464165783964495">"​ຊ​າຍ​ສອງ​ຄົນ​ຈູງ​ມື​ກັນ"</string>
+ <string name="spoken_emoji_1F46D" msgid="2316773068014053180">"​ຍິງ​ສອງ​ຄົນ​ຈູງ​ມື​ກັນ"</string>
+ <string name="spoken_emoji_1F46E" msgid="5897625605860822401">"​ເຈົ້າ​ໜ້າ​ທີ່​ຕຳຫຼວດ"</string>
+ <string name="spoken_emoji_1F46F" msgid="7716871657717641490">"ຜູ່​ຍິງ​ໃສ່​ຫູ​ກະ​ຕ່າຍ"</string>
+ <string name="spoken_emoji_1F470" msgid="6409995400510338892">"​ເຈົ້າ​ສາວ​ມີ​ຜ້າ​ຄຸມ​ໜ້າ"</string>
+ <string name="spoken_emoji_1F471" msgid="3058247860441670806">"ຄົນ​ຜົມ​​ສີບລອນ"</string>
+ <string name="spoken_emoji_1F472" msgid="3928854667819339142">"ຄົນ​ໃສ່​ໝວກ​​ກົວ​ປ​ີ​ເໝົາ"</string>
+ <string name="spoken_emoji_1F473" msgid="5921952095808988381">"ຄົນ​ໃສ່​ຜ້າ​ໂພກ​ຫົວ"</string>
+ <string name="spoken_emoji_1F474" msgid="1082237499496725183">"ຄົນ​ອາ​ຍຸຫຼາຍກວ່າ"</string>
+ <string name="spoken_emoji_1F475" msgid="7280323988642212761">"​ຜູ່​ຍິງ​ອາ​ຍຸຫຼາຍກວ່າ"</string>
+ <string name="spoken_emoji_1F476" msgid="4713322657821088296">"​ແອ​ນ້ອຍ"</string>
+ <string name="spoken_emoji_1F477" msgid="2197036131029221370">"​ຄົນ​ເຮັດ​ວຽກ​ກໍ່​ສ້າງ"</string>
+ <string name="spoken_emoji_1F478" msgid="7245521193493488875">"ເຈົ້າ​ຍິງ"</string>
+ <string name="spoken_emoji_1F479" msgid="6876475321015553972">"ຍັກ​ຍີ່​ປຸ່ນ"</string>
+ <string name="spoken_emoji_1F47A" msgid="3900813633102703571">"ກລອບ​ບິນ​ຍີ່​ປຸ່ນ"</string>
+ <string name="spoken_emoji_1F47B" msgid="2608250873194079390">"​ຜີ"</string>
+ <string name="spoken_emoji_1F47C" msgid="3838699131276537421">"ທູດ​​ແອ​ນ້ອຍສະ​ຫວັນ"</string>
+ <string name="spoken_emoji_1F47D" msgid="2874077455888369538">"ມະ​ນຸດ​ຕ່າງ​ດາວ"</string>
+ <string name="spoken_emoji_1F47E" msgid="3642607168625579507">"​ສັດ​ປະ​ຫລາດ​ຕ່າງ​ດາວ"</string>
+ <string name="spoken_emoji_1F47F" msgid="441605977269926252">"ອິມປ໌"</string>
+ <string name="spoken_emoji_1F480" msgid="3696253485164878739">"​ຫົວ​ກະ​ໂຫຼກ"</string>
+ <string name="spoken_emoji_1F481" msgid="320408708521966893">"​ພະ​ນັກ​ງານ​ບໍ​ລິ​ການ​ຂໍ້​ມູນ"</string>
+ <string name="spoken_emoji_1F482" msgid="3424354860245608949">"​ຍາມ"</string>
+ <string name="spoken_emoji_1F483" msgid="3221113594843849083">"​ນັກ​ເຕັ້ນ"</string>
+ <string name="spoken_emoji_1F484" msgid="7348014979080444885">"​ລິ​ບ​ສະ​ຕິກ"</string>
+ <string name="spoken_emoji_1F485" msgid="6133507975565116339">"​ຢາ​ທາ​ເລັບ"</string>
+ <string name="spoken_emoji_1F486" msgid="9085459968247394155">"​ນວດ​ໜ້າ"</string>
<string name="spoken_emoji_1F487" msgid="1479113637259592150">"ຕັດ​ຜົມ"</string>
- <!-- no translation found for spoken_emoji_1F488 (6922559285234100252) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F489 (8114863680950147305) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F48A (8526843630145963032) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F48B (2538528967897640292) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F48C (1681173271652890232) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F48D (8259886164999042373) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F48E (8777981696011111101) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F48F (741593675183677907) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F490 (4482549128959806736) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F491 (2305245307882441500) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F492 (3884119934804475732) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F493 (1208828371565525121) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F494 (6198876398509338718) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F495 (9206202744967130919) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F496 (5436953041732207775) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F497 (7285142863951448473) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F498 (7940131245037575715) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F499 (4453235040265550009) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F49A (6262178648366971405) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F49B (8085384999750714368) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F49C (453829540120898698) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F49D (3460534750224161888) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F49E (4490636226072523867) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F49F (2059319756421226336) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4A0 (1954850380550212038) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4A1 (403137413540909021) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4A2 (2604192053295622063) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4A3 (6378351742957821735) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4A4 (7217736258870346625) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4A5 (5401995723541239858) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4A6 (3837802182716483848) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4A7 (5718438987757885141) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4A8 (4472108229720006377) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4A9 (1240958472788430032) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4AA (8427525538635146416) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4AB (5484114759939427459) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4AC (5571196638219612682) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4AD (353174619257798652) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4AE (1223142786927162641) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4AF (3526278354452138397) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4B0 (4124102195175124156) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4B1 (8339494003418572905) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4B2 (3179159430187243132) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4B3 (5375412518221759596) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4B4 (1068592463669453204) -->
- <skip />
+ <string name="spoken_emoji_1F488" msgid="6922559285234100252">"ເສົາ​ຮ້ານ​ຕັດ​ຜົມ"</string>
+ <string name="spoken_emoji_1F489" msgid="8114863680950147305">"​ເຂັມ​ສີດ​ຢາ"</string>
+ <string name="spoken_emoji_1F48A" msgid="8526843630145963032">"​ຢາ​ເມັດ"</string>
+ <string name="spoken_emoji_1F48B" msgid="2538528967897640292">"​ຮອຍ​ຈູບ"</string>
+ <string name="spoken_emoji_1F48C" msgid="1681173271652890232">"​ຈົດ​ໝາຍ​ຮັກ"</string>
+ <string name="spoken_emoji_1F48D" msgid="8259886164999042373">"​ແຫວນ"</string>
+ <string name="spoken_emoji_1F48E" msgid="8777981696011111101">"​ຫິນ​ອັນ​ຍະ​ມະ​ນີ"</string>
+ <string name="spoken_emoji_1F48F" msgid="741593675183677907">"ຈູບ"</string>
+ <string name="spoken_emoji_1F490" msgid="4482549128959806736">"​ຊໍ່​ດອກ​ໄມ້"</string>
+ <string name="spoken_emoji_1F491" msgid="2305245307882441500">"​ຄ​ູ່​ຮັກ​ກັບ​ຫົວ​ໃຈ"</string>
+ <string name="spoken_emoji_1F492" msgid="3884119934804475732">"ການ​ແຕ່ງດອງ"</string>
+ <string name="spoken_emoji_1F493" msgid="1208828371565525121">"​ຫົວ​ໃຈ​ເຕັ້ນ"</string>
+ <string name="spoken_emoji_1F494" msgid="6198876398509338718">"​ອົກ​ຫັກ"</string>
+ <string name="spoken_emoji_1F495" msgid="9206202744967130919">"​ສອງ​ໃຈ"</string>
+ <string name="spoken_emoji_1F496" msgid="5436953041732207775">"​ຫົວ​ໃຈ​ເປັນ​ປະ​ກາຍ"</string>
+ <string name="spoken_emoji_1F497" msgid="7285142863951448473">"​ຫົວ​ໃຈ​ຂະ​ຫຍາຍ"</string>
+ <string name="spoken_emoji_1F498" msgid="7940131245037575715">"​ລູກ​ສອນ​ປັກ​ຫົວ​ໃຈ"</string>
+ <string name="spoken_emoji_1F499" msgid="4453235040265550009">"​ໃຈ​ສີ​ຟ້າ"</string>
+ <string name="spoken_emoji_1F49A" msgid="6262178648366971405">"​ໃຈ​ສີ​ຂຽວ"</string>
+ <string name="spoken_emoji_1F49B" msgid="8085384999750714368">"​ໃຈ​ສີ​ເຫຼືອງ"</string>
+ <string name="spoken_emoji_1F49C" msgid="453829540120898698">"​ໃຈ​ສີ​ມ່ວງ"</string>
+ <string name="spoken_emoji_1F49D" msgid="3460534750224161888">"​ຫົວ​ໃຈ​ກັບ​ຣິບບອນ"</string>
+ <string name="spoken_emoji_1F49E" msgid="4490636226072523867">"​ຫົວ​ໃຈ​ວົງ​ມົນ"</string>
+ <string name="spoken_emoji_1F49F" msgid="2059319756421226336">"​ຕົກ​ແຕ່ງ​ຫົວ​ໃຈ"</string>
+ <string name="spoken_emoji_1F4A0" msgid="1954850380550212038">"​ຮູບ​ເພັດ​ມີ​ຈຸດ​ທາງ​ກາງ"</string>
+ <string name="spoken_emoji_1F4A1" msgid="403137413540909021">"ຫຼອດ​ໄຟ"</string>
+ <string name="spoken_emoji_1F4A2" msgid="2604192053295622063">"​ສັນ​ຍາ​ລັກ​ໃຈ​ຮ້າຍ"</string>
+ <string name="spoken_emoji_1F4A3" msgid="6378351742957821735">"​ລະ​ເບີດ"</string>
+ <string name="spoken_emoji_1F4A4" msgid="7217736258870346625">"​ສັນ​ຍາ​ລັກ​ນອນຫຼັບ"</string>
+ <string name="spoken_emoji_1F4A5" msgid="5401995723541239858">"​ສັນ​ຍາ​ລັກ​ປະ​ທະ​ກັນ"</string>
+ <string name="spoken_emoji_1F4A6" msgid="3837802182716483848">"​ສັນ​ຍາ​ລັກເຫື່ອ​ກະ​ຈາຍ"</string>
+ <string name="spoken_emoji_1F4A7" msgid="5718438987757885141">"​ຢົດ​ນ້ຳ"</string>
+ <string name="spoken_emoji_1F4A8" msgid="4472108229720006377">"​ສັນ​ຍາ​ລັກ​ແລ່ນ"</string>
+ <string name="spoken_emoji_1F4A9" msgid="1240958472788430032">"ກອງ​ອຸດ​ຈາ​ລະ"</string>
+ <string name="spoken_emoji_1F4AA" msgid="8427525538635146416">"ເບັ່ງ​ກ້າມ"</string>
+ <string name="spoken_emoji_1F4AB" msgid="5484114759939427459">"​ດາວ​ໝຸນ"</string>
+ <string name="spoken_emoji_1F4AC" msgid="5571196638219612682">"ບອນ​ລູນ​ຄຳ​ເວົ້າ"</string>
+ <string name="spoken_emoji_1F4AD" msgid="353174619257798652">"​ບອນ​ລູນ​ຄວາມ​ຄິດ"</string>
+ <string name="spoken_emoji_1F4AE" msgid="1223142786927162641">"ດອກ​ໄມ້​ຂາວ"</string>
+ <string name="spoken_emoji_1F4AF" msgid="3526278354452138397">"​ສັນ​ຍາ​ລັກ​ຮ້ອຍ"</string>
+ <string name="spoken_emoji_1F4B0" msgid="4124102195175124156">"​ຖົງ​ເງິນ"</string>
+ <string name="spoken_emoji_1F4B1" msgid="8339494003418572905">"​ອັດ​ຕາ​ແລກ​ປ່ຽນ"</string>
+ <string name="spoken_emoji_1F4B2" msgid="3179159430187243132">"​ສັນ​ຍາ​ລັກ​ໂດ​ລ່າ​ແບບ​ໜາ"</string>
+ <string name="spoken_emoji_1F4B3" msgid="5375412518221759596">"ບັດເຄຣດິດ"</string>
+ <string name="spoken_emoji_1F4B4" msgid="1068592463669453204">"​ທະ​ນະ​ບັດ​ເງິນ​ເຢນ"</string>
<string name="spoken_emoji_1F4B5" msgid="1426708699891832564">"ທັນນະບັດ​ຮູບ​ເງິນ​ໂດລ່າ"</string>
- <!-- no translation found for spoken_emoji_1F4B6 (8289249930736444837) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4B7 (5245100496860739429) -->
- <skip />
+ <string name="spoken_emoji_1F4B6" msgid="8289249930736444837">"​​ທະ​ນະ​ບັດ​ເງິນ​ຢູ​ໂຣ"</string>
+ <string name="spoken_emoji_1F4B7" msgid="5245100496860739429">"​ທະ​ນະ​ບັດ​ເງິນ​ພາວດ໌"</string>
<string name="spoken_emoji_1F4B8" msgid="4401099580477164440">"ເງິນ​ຕິດ​ປີກ"</string>
- <!-- no translation found for spoken_emoji_1F4B9 (647509393536679903) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4BA (1269737854891046321) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4BB (6252883563347816451) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4BC (6182597732218446206) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4BD (5820961044768829176) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4BE (4754542485835379808) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4BF (2237481756984721795) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4C0 (491582501089694461) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4C1 (6645461382494158111) -->
- <skip />
+ <string name="spoken_emoji_1F4B9" msgid="647509393536679903">"​ແຜນ​ວາດ​ຊີ້​ຂຶ້ນ​ມີ​ຮູບ​ເງິນ​ເຢນ"</string>
+ <string name="spoken_emoji_1F4BA" msgid="1269737854891046321">"​ບ່ອນ​ນັ່ງ"</string>
+ <string name="spoken_emoji_1F4BB" msgid="6252883563347816451">"​ຄອມ​ພິວ​ເຕີ​ສ່ວນ​ບຸກ​ຄົນ"</string>
+ <string name="spoken_emoji_1F4BC" msgid="6182597732218446206">"​ກະ​ເປົາ​ເດີນ​ທາງ"</string>
+ <string name="spoken_emoji_1F4BD" msgid="5820961044768829176">"​ມິ​ນິ​ດິສ"</string>
+ <string name="spoken_emoji_1F4BE" msgid="4754542485835379808">"ຟລັອບ​ປີ້​ດິສ"</string>
+ <string name="spoken_emoji_1F4BF" msgid="2237481756984721795">"​ອັອບ​ຕິ​ຄອນ ດິ​ສ"</string>
+ <string name="spoken_emoji_1F4C0" msgid="491582501089694461">"​ດີ​ວີ​ດີ"</string>
+ <string name="spoken_emoji_1F4C1" msgid="6645461382494158111">"​ໄຟລ໌​ໂຟນ​ເດີ"</string>
<string name="spoken_emoji_1F4C2" msgid="8095638715523765338">"ເປີດ​ໂຟນເດີ​ໄຟລ໌"</string>
- <!-- no translation found for spoken_emoji_1F4C3 (3727274466173970142) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4C4 (4382570710795501612) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4C5 (8693944622627762487) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4C6 (8469908708708424640) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4C7 (2665313547987324495) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4C8 (8007686702282833600) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4C9 (2271951411192893684) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4CA (3525692829622381444) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4CB (977639227554095521) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4CC (156107396088741574) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4CD (4266572175361190231) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4CE (6294288509864968290) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4CF (149679400831136810) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4D0 (8130339336619202915) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4D1 (5852176364856284968) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4D2 (2276810154105920052) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4D3 (5873386492793610808) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4D4 (4754469936418776360) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4D5 (4642713351802778905) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4D6 (6987347918381807186) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4D7 (7813394163241379223) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4D8 (7189799718984979521) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4D9 (3874664073186440225) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4DA (872212072924287762) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4DB (2015183603583392969) -->
- <skip />
+ <string name="spoken_emoji_1F4C3" msgid="3727274466173970142">"​ເຈ້ຍ​ມ້ວນ​ທາງ​ລຸ່ມ"</string>
+ <string name="spoken_emoji_1F4C4" msgid="4382570710795501612">"​ເຈ້ຍ​ຫງາຍ​ໜ້າ​ຂຶ້ນ"</string>
+ <string name="spoken_emoji_1F4C5" msgid="8693944622627762487">"ປະຕິທິນ"</string>
+ <string name="spoken_emoji_1F4C6" msgid="8469908708708424640">"​ປະ​ຕ​ິ​ທິນ​ຖືກ​ຈີກ"</string>
+ <string name="spoken_emoji_1F4C7" msgid="2665313547987324495">"​ດັດ​ຊະ​ນີ​ບັດ"</string>
+ <string name="spoken_emoji_1F4C8" msgid="8007686702282833600">"ແຜນ​ວາດ​ຊີ້​ຂຶ້ນ"</string>
+ <string name="spoken_emoji_1F4C9" msgid="2271951411192893684">"​ແຜນ​ວາດ​ຊີ້​ລົງ"</string>
+ <string name="spoken_emoji_1F4CA" msgid="3525692829622381444">"​ແຜນ​ວາດ​​ແບບບາ"</string>
+ <string name="spoken_emoji_1F4CB" msgid="977639227554095521">"​ຄລິບບອດ"</string>
+ <string name="spoken_emoji_1F4CC" msgid="156107396088741574">"​ເຂັມ​ມຸດ"</string>
+ <string name="spoken_emoji_1F4CD" msgid="4266572175361190231">"​ເຂັມ​ມຸດ​ຫົວ​ມົນ"</string>
+ <string name="spoken_emoji_1F4CE" msgid="6294288509864968290">"ອັນ​ໜີບ​ເຈ້ຍ"</string>
+ <string name="spoken_emoji_1F4CF" msgid="149679400831136810">"​​ໄມ້ບັນ​ທັດ"</string>
+ <string name="spoken_emoji_1F4D0" msgid="8130339336619202915">"​ໄມ້​ບັດ​ທັດ​ສາມຫຼ່ຽມ"</string>
+ <string name="spoken_emoji_1F4D1" msgid="5852176364856284968">"​ແຖບ​ບຸກ​ມາກ"</string>
+ <string name="spoken_emoji_1F4D2" msgid="2276810154105920052">"ປຶ້ມ​ບັນ​ຊີ"</string>
+ <string name="spoken_emoji_1F4D3" msgid="5873386492793610808">"ສະມຸດບັນທຶກ"</string>
+ <string name="spoken_emoji_1F4D4" msgid="4754469936418776360">"ສະ​ມຸດ​ບັນ​ທຶກ​ແບບ​ມີ​ປົກ​ຕົບ​ແຕ່ງ"</string>
+ <string name="spoken_emoji_1F4D5" msgid="4642713351802778905">"​ປຶ້ມ​ທີ່​ປິດ​ໄວ້"</string>
+ <string name="spoken_emoji_1F4D6" msgid="6987347918381807186">"​ປຶ້ມ​ທີ່​ເປີດ​ໄວ້"</string>
+ <string name="spoken_emoji_1F4D7" msgid="7813394163241379223">"​ປຶ້ມ​ຂຽວ"</string>
+ <string name="spoken_emoji_1F4D8" msgid="7189799718984979521">"​ປຶ້ມ​ຟ້າ"</string>
+ <string name="spoken_emoji_1F4D9" msgid="3874664073186440225">"​ປຶ້ມ​ສົ້ມ"</string>
+ <string name="spoken_emoji_1F4DA" msgid="872212072924287762">"ປຶ້ມ"</string>
+ <string name="spoken_emoji_1F4DB" msgid="2015183603583392969">"​ປ້າຍ​ຊື່"</string>
<string name="spoken_emoji_1F4DC" msgid="5075845110932456783">"ເລື່ອນ"</string>
- <!-- no translation found for spoken_emoji_1F4DD (2494006707147586786) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4DE (7883008605002117671) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4DF (3538610110623780465) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4E0 (2960778342609543077) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4E1 (6269733703719242108) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4E2 (1987535386302883116) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4E3 (5588916572878599224) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4E4 (2063561529097749707) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4E5 (3232462702926143576) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4E6 (3399454337197561635) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4E7 (5557136988503873238) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4E8 (30698793974124123) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4E9 (5947550337678643166) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4EA (772614045207213751) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4EB (6491414165464146137) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4EC (7369517138779988438) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4ED (5657520436285454241) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4EE (8464138906243608614) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4EF (8801427577198798226) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4F0 (6330208624731662525) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4F1 (3966503935581675695) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4F2 (1057540341746100087) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4F3 (5003984447315754658) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4F4 (5549847566968306253) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4F5 (3660199448671699238) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4F6 (2676974903233268860) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4F7 (2643891943105989039) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4F9 (4475626303058218048) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4FA (1079796186652960775) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4FB (3848729587403760645) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4FC (8370432508874310054) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F500 (2389947994502144547) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F501 (2132188352433347009) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F502 (2361976580513178391) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F503 (8936283551917858793) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F504 (708290317843535943) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F505 (6348909939004951860) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F506 (4449609297521280173) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F507 (7136386694923708448) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F508 (5063567689831527865) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F509 (3948050077992370791) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F50A (5818194948677277197) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F50B (8083470451266295876) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F50C (7793219132036431680) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F50D (8140244710637926780) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F50E (4751821352839693365) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F50F (915079280472199605) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F510 (7658381761691758318) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F511 (262319867774655688) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F512 (5628688337255115175) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F513 (8579201846619420981) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F514 (7027268683047322521) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F515 (8903179856036069242) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F516 (108097933937925381) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F517 (2450846665734313397) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F518 (7028220286841437832) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F519 (8211189165075445687) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F51A (823966751787338892) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F51B (5920570742107943382) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F51C (110609810659826676) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F51D (4087697222026095447) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F51E (8512873526157201775) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F51F (8673370823728653973) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F520 (7335109890337048900) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F521 (2693185864450925778) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F522 (8419130286280673347) -->
- <skip />
+ <string name="spoken_emoji_1F4DD" msgid="2494006707147586786">"​ບັນ​ທຶກ"</string>
+ <string name="spoken_emoji_1F4DE" msgid="7883008605002117671">"​ຫູ​ໂທ​ລະ​ສັບ"</string>
+ <string name="spoken_emoji_1F4DF" msgid="3538610110623780465">"ເພກເຈີ"</string>
+ <string name="spoken_emoji_1F4E0" msgid="2960778342609543077">"​ເຄື່ອງ​ແຟັກ"</string>
+ <string name="spoken_emoji_1F4E1" msgid="6269733703719242108">"ຈານ​ດາວ​ທຽມ"</string>
+ <string name="spoken_emoji_1F4E2" msgid="1987535386302883116">"​ໂທ​ລະ​ໂຄ່ງ"</string>
+ <string name="spoken_emoji_1F4E3" msgid="5588916572878599224">"ໂທ​ລະ​ໂຂ່ງ"</string>
+ <string name="spoken_emoji_1F4E4" msgid="2063561529097749707">"ຖາດ​ຂາ​ອອກ"</string>
+ <string name="spoken_emoji_1F4E5" msgid="3232462702926143576">"​ຖາດ​ຂາ​ເຂົ້າ"</string>
+ <string name="spoken_emoji_1F4E6" msgid="3399454337197561635">"ພັດສະດຸ"</string>
+ <string name="spoken_emoji_1F4E7" msgid="5557136988503873238">"​ສັນ​ຍາ​ລັກ​ອີ​ເມວ"</string>
+ <string name="spoken_emoji_1F4E8" msgid="30698793974124123">"ຈົດ​ໝາຍ​ເຂົ້າ"</string>
+ <string name="spoken_emoji_1F4E9" msgid="5947550337678643166">"​ຈົດ​ໝາຍ​ມີ​ລູກ​ສອນ​ຢູ່​ທາງ​ເທິງ"</string>
+ <string name="spoken_emoji_1F4EA" msgid="772614045207213751">"ກ່ອງ​ຈົດ​ໝາຍ​ປິດ​ໄວ້ມີ​ທຸງ​ທາງ​ລຸ່ມ"</string>
+ <string name="spoken_emoji_1F4EB" msgid="6491414165464146137">"​ກ່ອງ​ຈົດ​ໝາຍ​ປິດ​ໄວ້​ມີ​ທຸງ​ສະ​ບັດ"</string>
+ <string name="spoken_emoji_1F4EC" msgid="7369517138779988438">"​ກ່ອງ​ຈົດ​ໝາຍ​​ເປິດ​ໄວ້​ມີ​ທຸງ​ສະ​ບັດ"</string>
+ <string name="spoken_emoji_1F4ED" msgid="5657520436285454241">"ກ່ອງ​ຈົດ​ໝາຍ​ເປິດ​ໄວ້ມີ​ທຸງ​ທາງ​ລຸ່ມ"</string>
+ <string name="spoken_emoji_1F4EE" msgid="8464138906243608614">"ຕູ້​ໄປ​ສະ​ນີ"</string>
+ <string name="spoken_emoji_1F4EF" msgid="8801427577198798226">"ແຕ​ໄປ​ສະ​ນີ"</string>
+ <string name="spoken_emoji_1F4F0" msgid="6330208624731662525">"​ໜັງ​ສື​ພິມ"</string>
+ <string name="spoken_emoji_1F4F1" msgid="3966503935581675695">"​ໂທ​ລະ​ສັບ​​ມື​ຖື"</string>
+ <string name="spoken_emoji_1F4F2" msgid="1057540341746100087">"ໂທ​ລະ​ສັບ​ມື​ຖື​ມີ​ລູກ​ສອນ​ຊີ້​ໄປ​ທາງ​ຂວາ​ຢູ່​ທາງ​ຊ້າຍ"</string>
+ <string name="spoken_emoji_1F4F3" msgid="5003984447315754658">"​ໂໝດ​ສັ່ນ"</string>
+ <string name="spoken_emoji_1F4F4" msgid="5549847566968306253">"​ໂທ​ລະ​ສັບ​ມື​ຖື​ປິດ"</string>
+ <string name="spoken_emoji_1F4F5" msgid="3660199448671699238">"ບໍ່​ມີ​ໂທ​ລະ​ສັບ​ມື​ຖື"</string>
+ <string name="spoken_emoji_1F4F6" msgid="2676974903233268860">"ຂີດ​ສັນ​ຍານ​ໂທ​ລະ​ສັບ"</string>
+ <string name="spoken_emoji_1F4F7" msgid="2643891943105989039">"ກ້ອງຖ່າຍຮູບ"</string>
+ <string name="spoken_emoji_1F4F9" msgid="4475626303058218048">"ກ້ອງວິ​ດີ​ໂອ"</string>
+ <string name="spoken_emoji_1F4FA" msgid="1079796186652960775">"​ໂທ​ລະ​ພາບ"</string>
+ <string name="spoken_emoji_1F4FB" msgid="3848729587403760645">"ວິທະຍຸ"</string>
+ <string name="spoken_emoji_1F4FC" msgid="8370432508874310054">"​ກະ​ແຊັດ​ວິ​ດີ​ໂອ"</string>
+ <string name="spoken_emoji_1F500" msgid="2389947994502144547">"ລູກ​ສອນ​ໄຂວ່​ກັນ"</string>
+ <string name="spoken_emoji_1F501" msgid="2132188352433347009">"ລູກ​ສອນ​ໝຸນ​ວົນ​​ຕາມ​ເຂັມ​ໂມງ"</string>
+ <string name="spoken_emoji_1F502" msgid="2361976580513178391">"ລູກ​ສອນ​ໝຸນ​ຕາມ​ເຂັມ​ໂມງ​ມີ​ເລກ​ສູນ​ໃນ​ວົງ​ມົນ​ຢູ່​ຊ້າຍ​ລຸ່ມ"</string>
+ <string name="spoken_emoji_1F503" msgid="8936283551917858793">"ລູກ​ສອນ​ໝຸນ​ຕາມ​ເຂັມ​ໂມງ​ລວງ​ຕັ້ງ"</string>
+ <string name="spoken_emoji_1F504" msgid="708290317843535943">"​ລູກ​ສອນ​ໝຸນ​ທວນ​ເຂັມ​ໂມງ​ໃນ​ຂອບ​ສີ່ຫຼ່ຽມ"</string>
+ <string name="spoken_emoji_1F505" msgid="6348909939004951860">"ສັນ​ຍາ​ລັກ​ຄວາມ​ແຈ້ງ​ຕ່ຳ"</string>
+ <string name="spoken_emoji_1F506" msgid="4449609297521280173">"ສັນ​ຍາ​ລັກ​ຄວາມ​ແຈ້ງ​​ສູງ"</string>
+ <string name="spoken_emoji_1F507" msgid="7136386694923708448">"ລຳ​ໂພງ​ມີ​ຂີດ​ຂ້າ"</string>
+ <string name="spoken_emoji_1F508" msgid="5063567689831527865">"ລຳໂພງ"</string>
+ <string name="spoken_emoji_1F509" msgid="3948050077992370791">"ລຳ​ໂພງ​ມີ​ຄື້ນ​ສຽງ​ອັນ​ນຶ່ງ"</string>
+ <string name="spoken_emoji_1F50A" msgid="5818194948677277197">"ລຳ​ໂພງ​ມີ​ຄື້ນ​ສຽງ​​ສາມ​ອັນ"</string>
+ <string name="spoken_emoji_1F50B" msgid="8083470451266295876">"ແບັດເຕີຣີ"</string>
+ <string name="spoken_emoji_1F50C" msgid="7793219132036431680">"​​ປລັກ​ໄຟ​ຟ້າ"</string>
+ <string name="spoken_emoji_1F50D" msgid="8140244710637926780">"ແວ່ນ​ຂະ​ຫຍາຍ​ສ່ອງ​ໄປ​ທາງ​ຊ້າຍ"</string>
+ <string name="spoken_emoji_1F50E" msgid="4751821352839693365">"ແວ່ນ​ຂະ​ຫຍາຍ​ສ່ອງ​ໄປ​ທາງ​ຂວາ"</string>
+ <string name="spoken_emoji_1F50F" msgid="915079280472199605">"​ລັອກ​ມີ​ປາກ​ກາ"</string>
+ <string name="spoken_emoji_1F510" msgid="7658381761691758318">"ລັອກ​ທີ່​ປິດ​ໄວ້​ພ້ອມ​ກະ​ແຈ"</string>
+ <string name="spoken_emoji_1F511" msgid="262319867774655688">"​ກະ​ແຈ"</string>
+ <string name="spoken_emoji_1F512" msgid="5628688337255115175">"ລັອກ"</string>
+ <string name="spoken_emoji_1F513" msgid="8579201846619420981">"​​ລັອກ​ທີ່​ເປີດ​ໄວ້"</string>
+ <string name="spoken_emoji_1F514" msgid="7027268683047322521">"​ກະ​ດິ່ງ"</string>
+ <string name="spoken_emoji_1F515" msgid="8903179856036069242">"​ກະ​ດິ່ງ​ມີ​ຂີດ​ຂ້າ"</string>
+ <string name="spoken_emoji_1F516" msgid="108097933937925381">"ບຸກມາກ"</string>
+ <string name="spoken_emoji_1F517" msgid="2450846665734313397">"​ສັນ​ຍາ​ລັກ​ລິ້ງ"</string>
+ <string name="spoken_emoji_1F518" msgid="7028220286841437832">"​ປຸ່ມ​ເຄື່ອງ​ໝາຍ​ເລືອກ"</string>
+ <string name="spoken_emoji_1F519" msgid="8211189165075445687">"ລູກ​ສອນ​ຊີ້​ໄປ​ທາງ​ຊ້າຍ​ມີ​ຄຳ​ວ່າ​ Back"</string>
+ <string name="spoken_emoji_1F51A" msgid="823966751787338892">"​ລູກ​ສອນ​ຊີ້​ໄປ​ທາງ​ຊ້າຍ​ມີ​ຄຳ​ວ່າ​ End"</string>
+ <string name="spoken_emoji_1F51B" msgid="5920570742107943382">"ຄຳ​ວ່າ On ມີ​ເຄື່ອງ​ໝາຍ​ທ​້ວງ​ກັບ​ລູກ​ສອນ​ຊີ້​ໄປ​ທາງ​ຊ້າຍ​ແລະ​ຂວາ​ຢູ່​ເທິງ"</string>
+ <string name="spoken_emoji_1F51C" msgid="110609810659826676">"​ຄຳ​ວ່າ Soon ມີ​ລູກ​ສອນ​ຊີ້​ໄປ​ທາງ​ຂວາ​ຢູ່​ເທິງ"</string>
+ <string name="spoken_emoji_1F51D" msgid="4087697222026095447">"​ຄຳ​ວ່າ Top ມີ​ລູກ​ສອນ​ຊີ້​ໄປ​ທາງ​ເທິງ​ຢູ່​ເທິງ"</string>
+ <string name="spoken_emoji_1F51E" msgid="8512873526157201775">"ສັນ​ຍາ​ລັກ​ຫ້າມ​ຕ່ຳ​ກວ່າ​ສິບ​ແປດ"</string>
+ <string name="spoken_emoji_1F51F" msgid="8673370823728653973">"ເລກ​ສິບ​ໃນ​ຂອບ​ສີ່ຫຼ່ຽມ"</string>
+ <string name="spoken_emoji_1F520" msgid="7335109890337048900">"ABCD ໃນ​ຂອບ​ສີ່ຫຼ່ຽມ"</string>
+ <string name="spoken_emoji_1F521" msgid="2693185864450925778">"abcd ໃນ​ຂອບ​ສີ່ຫຼ່ຽມ"</string>
+ <string name="spoken_emoji_1F522" msgid="8419130286280673347">"ໂຕ​ເລກໃນ​ຂອບ​ສີ່ຫຼ່ຽມ"</string>
<string name="spoken_emoji_1F523" msgid="3318053476401719421">"ໃສ່​ສັນຍາລັກ​ເພື່ອ​ສັນຍາລັກ"</string>
- <!-- no translation found for spoken_emoji_1F524 (1625073997522316331) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F525 (4083884189172963790) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F526 (2035494936742643580) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F527 (134257142354034271) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F528 (700627429570609375) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F529 (7480548235904988573) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F52A (7613580031502317893) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F52B (4554906608328118613) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F52C (1330294501371770790) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F52D (7549551775445177140) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F52E (4457099417872625141) -->
- <skip />
+ <string name="spoken_emoji_1F524" msgid="1625073997522316331">"ໂຕ​ອັກ​ສອນ​ລາ​ຕິນໃນ​ຂອບ​ສີ່ຫຼ່ຽມ"</string>
+ <string name="spoken_emoji_1F525" msgid="4083884189172963790">"ໄຟ"</string>
+ <string name="spoken_emoji_1F526" msgid="2035494936742643580">"​ໄຟ​ສາຍ"</string>
+ <string name="spoken_emoji_1F527" msgid="134257142354034271">"​ປະ​ແຈ"</string>
+ <string name="spoken_emoji_1F528" msgid="700627429570609375">"​ຄ້ອນ"</string>
+ <string name="spoken_emoji_1F529" msgid="7480548235904988573">"ນັອດ"</string>
+ <string name="spoken_emoji_1F52A" msgid="7613580031502317893">"ມີດ"</string>
+ <string name="spoken_emoji_1F52B" msgid="4554906608328118613">"​ປືນ​ສັ້ນ"</string>
+ <string name="spoken_emoji_1F52C" msgid="1330294501371770790">"​ກ້ອງ​ຈຸ​ລະ​ທັດ"</string>
+ <string name="spoken_emoji_1F52D" msgid="7549551775445177140">"​ກ້ອງ​ສ​່ອງ"</string>
+ <string name="spoken_emoji_1F52E" msgid="4457099417872625141">"ບານ​ຄ​ຣິສ​ຕັນ"</string>
<string name="spoken_emoji_1F52F" msgid="8899031001317442792">"ດາວ​ຫົກ​ຫຼ່ຽມ​ມີ​ຈ້ຳ​ທາງ​ກາງ"</string>
- <!-- no translation found for spoken_emoji_1F530 (3572898444281774023) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F531 (5225633376450025396) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F532 (9169568490485180779) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F533 (6554193837201918598) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F534 (8339298801331865340) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F535 (1227403104835533512) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F536 (5477372445510469331) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F537 (3158915214347274626) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F538 (4300084249474451991) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F539 (6535159756325742275) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F53A (3728196273988781389) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F53B (7182097039614128707) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F53C (4077022046319615029) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F53D (3939112784894620713) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F550 (7761392621689986218) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F551 (2699448504113431716) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F552 (5872107867411853750) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F553 (8490966286158640743) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F554 (7662585417832909280) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F555 (5564698204520412009) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F556 (7325712194836512205) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F557 (4398343183682848693) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F558 (3110507820404018172) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F559 (2972160366448337839) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F55A (5568112876681714834) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F55B (6731739890330659276) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F55C (7838853679879115890) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F55D (3518832144255922544) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F55E (3092760695634993002) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F55F (2326720311892906763) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F560 (5771339179963924448) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F561 (3139944777062475382) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F562 (8273944611162457084) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F563 (8643976903718136299) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F564 (3511070239796141638) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F565 (4567451985272963088) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F566 (2790552288169929810) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F567 (9026037362100689337) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F5FB (9037503671676124015) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F5FC (1409415995817242150) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F5FD (2562726956654429582) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F5FE (1184469756905210580) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F5FF (6003594799354942297) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F600 (7601109464776835283) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F601 (746026523967444503) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F602 (8354558091785198246) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F603 (3861022912544159823) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F604 (5119021072966343531) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F605 (6140813923973561735) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F606 (3549936813966832799) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F607 (2826424078212384817) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F608 (7343559595089811640) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F609 (5481030187207504405) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F60A (5023337769148679767) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F60B (3005248217216195694) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F60C (349384012958268496) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F60D (7921853137164938391) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F60E (441718886380605643) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F60F (2674453144890180538) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F610 (3225675825334102369) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F611 (7199179827619679668) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F612 (985081329745137998) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F613 (5548607684830303562) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F614 (3196305665259916390) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F615 (3051674239303969101) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F616 (8124887056243813089) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F617 (7052733625511122870) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F618 (408207170572303753) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F619 (8645430335143153645) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F61A (2882157190974340247) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F61B (3765927202787211499) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F61C (198943912107589389) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F61D (7643546385877816182) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F61E (1528732952202098364) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F61F (1853664164636082404) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F620 (6051942001307375830) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F621 (2114711878097257704) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F622 (29291014645931822) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F623 (7803959833595184773) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F624 (8637637647725752799) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F625 (6153625183493635030) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F626 (6179485689935562950) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F627 (8566204052903012809) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F628 (8875777401624904224) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F629 (1411538490319190118) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F62A (4726686726690289969) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F62B (3221980473921623613) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F62C (4616356691941225182) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F62D (4283677508698812232) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F62E (726083405284353894) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F62F (7746620088234710962) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F630 (3298804852155581163) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F631 (1603391150954646779) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F632 (4846193232203976013) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F633 (4023593836629700443) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F634 (3155265083246248129) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F635 (4616691133452764482) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F636 (947000211822375683) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F637 (1269551267347165774) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F638 (3410766467496872301) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F639 (1833417519781022031) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F63A (8566294484007152613) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F63B (74417995938927571) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F63C (6472812005729468870) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F63D (1638398369553349509) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F63E (6788969063020278986) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F63F (1207234562459550185) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F640 (6023054549904329638) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F645 (5202090629227587076) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F646 (6734425134415138134) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F647 (1090285518444205483) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F648 (8978535230610522356) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F649 (8486145279809495102) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F64A (1237524974033228660) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F64B (4251150782016370475) -->
- <skip />
+ <string name="spoken_emoji_1F530" msgid="3572898444281774023">"ສັນ​ຍາ​ລັກ​ພາ​ສາ​ຍີ່​ປຸ່ນ​ສຳ​ລັບ​ຜູ່​ເລີ່ມ​ຕົ້ນ"</string>
+ <string name="spoken_emoji_1F531" msgid="5225633376450025396">"ສັນ​ຍາ​ລັກ​ສາມ​ງ່າມ"</string>
+ <string name="spoken_emoji_1F532" msgid="9169568490485180779">"ປຸ່ມ​ສີ່ຫຼ່ຽມ​ສີ​ດຳ"</string>
+ <string name="spoken_emoji_1F533" msgid="6554193837201918598">"ປຸ່ມ​ສີ່ຫຼ່ຽມ​ສີ​​ຂາວ"</string>
+ <string name="spoken_emoji_1F534" msgid="8339298801331865340">"​ວົງ​ມົນ​​ໃຫຍ່ສີ​ແດງ"</string>
+ <string name="spoken_emoji_1F535" msgid="1227403104835533512">"​ວົງ​ມົນ​​ໃຫຍ່ສີ​​ຟ້າ"</string>
+ <string name="spoken_emoji_1F536" msgid="5477372445510469331">"ເພັດ​ເມັດ​ໃຫຍ່​ສີ​ສົ້ມ"</string>
+ <string name="spoken_emoji_1F537" msgid="3158915214347274626">"ເພັດ​ເມັດ​ໃຫຍ່​ສີ​​ຟ້າ"</string>
+ <string name="spoken_emoji_1F538" msgid="4300084249474451991">"ເພັດ​ເມັດ​ນ້ອຍ​ສີ​ສົ້ມ"</string>
+ <string name="spoken_emoji_1F539" msgid="6535159756325742275">"ເພັດ​ເມັດ​ນ້ອຍ​ສີ​​ຟ້າ"</string>
+ <string name="spoken_emoji_1F53A" msgid="3728196273988781389">"ສາມຫຼ່ຽມ​ສີ​ແດງ​ຊີ​ຂຶ້ນ"</string>
+ <string name="spoken_emoji_1F53B" msgid="7182097039614128707">"ສາມຫຼ່ຽມ​ສີ​ແດງ​ຊີ​​ລົງ"</string>
+ <string name="spoken_emoji_1F53C" msgid="4077022046319615029">"ສາມຫຼ່ຽມ​ນ້ອຍສີ​ແດງ​ຊີ​ຂຶ້ນ"</string>
+ <string name="spoken_emoji_1F53D" msgid="3939112784894620713">"ສາມຫຼ່ຽມ​ນ້ອຍສີ​ແດງ​ຊີ​ລົງ"</string>
+ <string name="spoken_emoji_1F550" msgid="7761392621689986218">"ໂມງ​ພ້ອມ​ເຂັມ​ຊີ້​ໄປ​ເວ​ລາ​ນຶ່ງ​ໂມງ"</string>
+ <string name="spoken_emoji_1F551" msgid="2699448504113431716">"ໂມງ​ພ້ອມ​ເຂັມ​ຊີ້​ໄປ​ເວ​ລາ​​ສອງໂມງ"</string>
+ <string name="spoken_emoji_1F552" msgid="5872107867411853750">"ໂມງ​ພ້ອມ​ເຂັມ​ຊີ້​ໄປ​ເວ​ລາ​​ສາມໂມງ"</string>
+ <string name="spoken_emoji_1F553" msgid="8490966286158640743">"ໂມງ​ພ້ອມ​ເຂັມ​ຊີ້​ໄປ​ເວ​ລາ​​ສີ່ໂມງ"</string>
+ <string name="spoken_emoji_1F554" msgid="7662585417832909280">"ໂມງ​ພ້ອມ​ເຂັມ​ຊີ້​ໄປ​ເວ​ລາ​​ຫ້າໂມງ"</string>
+ <string name="spoken_emoji_1F555" msgid="5564698204520412009">"ໂມງ​ພ້ອມ​ເຂັມ​ຊີ້​ໄປ​ເວ​ລາ​​ຫົກໂມງ"</string>
+ <string name="spoken_emoji_1F556" msgid="7325712194836512205">"ໂມງ​ພ້ອມ​ເຂັມ​ຊີ້​ໄປ​ເວ​ລາ​​ເຈັດໂມງ"</string>
+ <string name="spoken_emoji_1F557" msgid="4398343183682848693">"ໂມງ​ພ້ອມ​ເຂັມ​ຊີ້​ໄປ​ເວ​ລາ​​ແປດໂມງ"</string>
+ <string name="spoken_emoji_1F558" msgid="3110507820404018172">"ໂມງ​ພ້ອມ​ເຂັມ​ຊີ້​ໄປ​ເວ​ລາ​​ເກົ້າໂມງ"</string>
+ <string name="spoken_emoji_1F559" msgid="2972160366448337839">"ໂມງ​ພ້ອມ​ເຂັມ​ຊີ້​ໄປ​ເວ​ລາ​​ສິບໂມງ"</string>
+ <string name="spoken_emoji_1F55A" msgid="5568112876681714834">"ໂມງ​ພ້ອມ​ເຂັມ​ຊີ້​ໄປ​ເວ​ລາ​​ສິບ​ເອັດໂມງ"</string>
+ <string name="spoken_emoji_1F55B" msgid="6731739890330659276">"ໂມງ​ພ້ອມ​ເຂັມ​ຊີ້​ໄປ​ເວ​ລາ​​ສິບ​ສອງໂມງ"</string>
+ <string name="spoken_emoji_1F55C" msgid="7838853679879115890">"ໂມງ​ພ້ອມ​ເຂັມ​ຊີ້​ໄປ​ເວ​ລາ​ນຶ່ງ​ໂມງ​​ເຄິ່ງ"</string>
+ <string name="spoken_emoji_1F55D" msgid="3518832144255922544">"ໂມງ​ພ້ອມ​ເຂັມ​ຊີ້​ໄປ​ເວ​ລາ​​ສອງ​ໂມງ​ເຄິ່ງ"</string>
+ <string name="spoken_emoji_1F55E" msgid="3092760695634993002">"ໂມງ​ພ້ອມ​ເຂັມ​ຊີ້​ໄປ​ເວ​ລາ​​ສາມ​ໂມງ​ເຄິ່ງ"</string>
+ <string name="spoken_emoji_1F55F" msgid="2326720311892906763">"ໂມງ​ພ້ອມ​ເຂັມ​ຊີ້​ໄປ​ເວ​ລາ​​ສີ່​ໂມງ​ເຄິ່ງ"</string>
+ <string name="spoken_emoji_1F560" msgid="5771339179963924448">"ໂມງ​ພ້ອມ​ເຂັມ​ຊີ້​ໄປ​ເວ​ລາ​​ຫ້າ​ໂມງ​ເຄິ່ງ"</string>
+ <string name="spoken_emoji_1F561" msgid="3139944777062475382">"ໂມງ​ພ້ອມ​ເຂັມ​ຊີ້​ໄປ​ເວ​ລາ​​ຫົກ​ໂມງ​ເຄິ່ງ"</string>
+ <string name="spoken_emoji_1F562" msgid="8273944611162457084">"ໂມງ​ພ້ອມ​ເຂັມ​ຊີ້​ໄປ​ເວ​ລາ​​ເຈັດ​ໂມງ​ເຄິ່ງ"</string>
+ <string name="spoken_emoji_1F563" msgid="8643976903718136299">"ໂມງ​ພ້ອມ​ເຂັມ​ຊີ້​ໄປ​ເວ​ລາ​​ແປດ​ໂມງ​ເຄິ່ງ"</string>
+ <string name="spoken_emoji_1F564" msgid="3511070239796141638">"ໂມງ​ພ້ອມ​ເຂັມ​ຊີ້​ໄປ​ເວ​ລາ​​​ເກົ້​າໂມງ​ເຄິ່ງ"</string>
+ <string name="spoken_emoji_1F565" msgid="4567451985272963088">"ໂມງ​ພ້ອມ​ເຂັມ​ຊີ້​ໄປ​ເວ​ລາ​ສິບ​ໂມງ​ເຄິ່ງ"</string>
+ <string name="spoken_emoji_1F566" msgid="2790552288169929810">"ໂມງ​ພ້ອມ​ເຂັມ​ຊີ້​ໄປ​ເວ​ລາ​​ສິບ​ເອັດ​ໂມງ​ເຄິ່ງ"</string>
+ <string name="spoken_emoji_1F567" msgid="9026037362100689337">"ໂມງ​ພ້ອມ​ເຂັມ​ຊີ້​ໄປ​ເວ​ລາ​​ສິບ​ສອງ​ໂມງ​ເຄິ່ງ"</string>
+ <string name="spoken_emoji_1F5FB" msgid="9037503671676124015">"​ພູ​ເຂົາ​ໄຟ​ຟູ​ຈິ"</string>
+ <string name="spoken_emoji_1F5FC" msgid="1409415995817242150">"​ຫໍ​ຄອຍ​ໂຕ​ກຽວ"</string>
+ <string name="spoken_emoji_1F5FD" msgid="2562726956654429582">"​ເທ​ພີ​ເສ​ລີ​ພາບ"</string>
+ <string name="spoken_emoji_1F5FE" msgid="1184469756905210580">"ເງົາ​ປະ​ເທດ​ຍີ່​ປຸ່ນ"</string>
+ <string name="spoken_emoji_1F5FF" msgid="6003594799354942297">"ໂມ​ອາຍ"</string>
+ <string name="spoken_emoji_1F600" msgid="7601109464776835283">"ໜ້າ​ຍິ້ມ​ເຫັນ​ແຂ້ວ"</string>
+ <string name="spoken_emoji_1F601" msgid="746026523967444503">"ໜ້າ​ຕາຍິ້ມ​ເຫັນ​ແຂ້ວ"</string>
+ <string name="spoken_emoji_1F602" msgid="8354558091785198246">"ໜ້າ​ພ້ອມດ້ວຍ​ນ້ຳ​ຕາ​ແຫ່ງ​ຄວາມ​ສຸກ"</string>
+ <string name="spoken_emoji_1F603" msgid="3861022912544159823">"​ໜ້າ​ຍິ້ມ​ພ້ອມ​ກັບ​ອ້າ​ປາກ"</string>
+ <string name="spoken_emoji_1F604" msgid="5119021072966343531">"​ໜ້າ​ຕາຍິ້ມ​ພ້ອມ​ກັບ​ອ້າ​ປາກ"</string>
+ <string name="spoken_emoji_1F605" msgid="6140813923973561735">"​ໜ້າ​ຕາຍິ້ມ​ພ້ອມ​ກັບ​ເຫື່ອ​ຕົກ"</string>
+ <string name="spoken_emoji_1F606" msgid="3549936813966832799">"​ໜ້າ​ຕາຍິ້ມ​ພ້ອມ​ກັບ​​ຫຼັບ​ຕາ"</string>
+ <string name="spoken_emoji_1F607" msgid="2826424078212384817">"ໜ້າ​ຍິ້ມ​ພ້ອມ​ມີ​ວົງ​ແຫວນ​ເທິງ​ຫົວ"</string>
+ <string name="spoken_emoji_1F608" msgid="7343559595089811640">"ໜ້າ​ຍິ້ມ​ມີ​ເຂົາ"</string>
+ <string name="spoken_emoji_1F609" msgid="5481030187207504405">"ໜ້າ​ຍິ້ມ​ກະ​ພິບ​ຕາ​ຂ້າງ​ນຶ່ງ"</string>
+ <string name="spoken_emoji_1F60A" msgid="5023337769148679767">"ໜ້າ​ຕາ​ຍິ້ມ​ແຍ້ມ"</string>
+ <string name="spoken_emoji_1F60B" msgid="3005248217216195694">"​ໜ້າ​ຍິ້ມ​ລິ້ນ​ເລຍ​ສົບ"</string>
+ <string name="spoken_emoji_1F60C" msgid="349384012958268496">"​ໜ້າ​ຜ່ອນ​ຄາຍ"</string>
+ <string name="spoken_emoji_1F60D" msgid="7921853137164938391">"ໜ້າ​ຍິ້ມ​ພ້ອມ​ຕາ​ເປັນ​ຫົວ​ໃຈ"</string>
+ <string name="spoken_emoji_1F60E" msgid="441718886380605643">"​ໜ້າ​ຍິ້ມ​ໃສ່​ແວ່ນ​ຕາ"</string>
+ <string name="spoken_emoji_1F60F" msgid="2674453144890180538">"ໜ້າຍິ້ມ​​ມີ​ເລດ​ສະ​ໄນ"</string>
+ <string name="spoken_emoji_1F610" msgid="3225675825334102369">"​ໜ້າ​​ຊື່ໆ"</string>
+ <string name="spoken_emoji_1F611" msgid="7199179827619679668">"ໜ້າບໍ່​ມີ​ຄວາມ​ຮູ້​ສຶກ"</string>
+ <string name="spoken_emoji_1F612" msgid="985081329745137998">"ໜ້າບໍ່​​ຕະ​ຫລົກ"</string>
+ <string name="spoken_emoji_1F613" msgid="5548607684830303562">"ໜ້າ​ມີ​ເຫື່ອ​ໄຫຼ"</string>
+ <string name="spoken_emoji_1F614" msgid="3196305665259916390">"ໜ້າ​ໝົ່ນ​ໝອງ"</string>
+ <string name="spoken_emoji_1F615" msgid="3051674239303969101">"​ໜ້າ​ສັບ​ສົນ"</string>
+ <string name="spoken_emoji_1F616" msgid="8124887056243813089">"​ໜ້າ​ຜູ່​ຮ້າຍ"</string>
+ <string name="spoken_emoji_1F617" msgid="7052733625511122870">"​ໜ້າ​ຈູບ"</string>
+ <string name="spoken_emoji_1F618" msgid="408207170572303753">"ໜ້າ​ເປົ່າ​ຈູບ"</string>
+ <string name="spoken_emoji_1F619" msgid="8645430335143153645">"​ໜ້າ​ຈູບ​ພ້ອມ​ກັບ​ຍິ້ມ"</string>
+ <string name="spoken_emoji_1F61A" msgid="2882157190974340247">"ໜ້າ​ຍິ້ມ​ພ້ອມ​ກັບຫຼັບ​ຕາ"</string>
+ <string name="spoken_emoji_1F61B" msgid="3765927202787211499">"ໜ້າ​​ແລບ​ລິ້ນ"</string>
+ <string name="spoken_emoji_1F61C" msgid="198943912107589389">"ໜ້າ​ແລບ​ລິ້ນຫຼັບ​ຕາ​ຂ້າງ​ນຶ່ງ"</string>
+ <string name="spoken_emoji_1F61D" msgid="7643546385877816182">"ໜ້າ​ແລບ​ລິ້ນ​ຫຼັບ​ຕາ​ສອງ​ຂ້າງ"</string>
+ <string name="spoken_emoji_1F61E" msgid="1528732952202098364">"​ໜ້າ​ຜິດ​ຫວັງ"</string>
+ <string name="spoken_emoji_1F61F" msgid="1853664164636082404">"​ໜ້າ​ເປັນ​ກັງ​ວົນ"</string>
+ <string name="spoken_emoji_1F620" msgid="6051942001307375830">"​​ໜ້າ​ໃຈ​ຮ້າຍ"</string>
+ <string name="spoken_emoji_1F621" msgid="2114711878097257704">"ໜ້າ​ມຸ້ຍ"</string>
+ <string name="spoken_emoji_1F622" msgid="29291014645931822">"​ໜ້າ​ຮ້ອງ​ໄຫ້"</string>
+ <string name="spoken_emoji_1F623" msgid="7803959833595184773">"ໜ້າ​ຂະ​ໝວດ"</string>
+ <string name="spoken_emoji_1F624" msgid="8637637647725752799">"ໜ້າ​ໃຈ​ຮ້າຍ​ລົມ​ອອກ​ດັງ"</string>
+ <string name="spoken_emoji_1F625" msgid="6153625183493635030">"ໜ້າ​ຜິດ​ຫວັງ​ແຕ່​​ໂລ່ງ​ໃຈ"</string>
+ <string name="spoken_emoji_1F626" msgid="6179485689935562950">"ໜ້າ​ມຸ້ຍ​ອ້າ​ປາກ"</string>
+ <string name="spoken_emoji_1F627" msgid="8566204052903012809">"ໜ້າ​ເຈັບ​ປວດ"</string>
+ <string name="spoken_emoji_1F628" msgid="8875777401624904224">"​ໜ້າ​ຢ້ານ"</string>
+ <string name="spoken_emoji_1F629" msgid="1411538490319190118">"ໜ້າ​​ເມື່ອຍ​ສຸດ​ຂີດ"</string>
+ <string name="spoken_emoji_1F62A" msgid="4726686726690289969">"​​ໜ້າ​ເຫງົາ​ນອນ"</string>
+ <string name="spoken_emoji_1F62B" msgid="3221980473921623613">"​ໜ້າ​ເມື່ອຍ"</string>
+ <string name="spoken_emoji_1F62C" msgid="4616356691941225182">"ໜ້າ​ຍິ້ມ​ແຫ້ງໆ"</string>
+ <string name="spoken_emoji_1F62D" msgid="4283677508698812232">"​ໜ້າ​ຮ້ອງ​ໄຫ້​ສຽງ​ດັງ"</string>
+ <string name="spoken_emoji_1F62E" msgid="726083405284353894">"​ໜ້າ​ອ້າ​ປາກ"</string>
+ <string name="spoken_emoji_1F62F" msgid="7746620088234710962">"ໜ້າ​ຕະ​ລຶງ​ງຽບ"</string>
+ <string name="spoken_emoji_1F630" msgid="3298804852155581163">"ໜ້າ​ອ້າ​ປາກ​ມີ​ເຫື່ອ​ຕົກ"</string>
+ <string name="spoken_emoji_1F631" msgid="1603391150954646779">"ໜ້າ​ຮ້ອງ​​ດ້ວຍ​ຄວາມ​ຢ້ານ"</string>
+ <string name="spoken_emoji_1F632" msgid="4846193232203976013">"ໜ້າ​ປະຫຼາດ​ໃຈ"</string>
+ <string name="spoken_emoji_1F633" msgid="4023593836629700443">"ໜ້າ​ແດງ"</string>
+ <string name="spoken_emoji_1F634" msgid="3155265083246248129">"​ໜ້າ​ເຫງົາ​ນອນ"</string>
+ <string name="spoken_emoji_1F635" msgid="4616691133452764482">"ໜ້າ​ວິງວຽນ"</string>
+ <string name="spoken_emoji_1F636" msgid="947000211822375683">"​ໜ້າບໍ່​ມີ​ປາກ"</string>
+ <string name="spoken_emoji_1F637" msgid="1269551267347165774">"​ໜ້າ​ໃສ່​ຜ້າ​ປິດ​ປາກ"</string>
+ <string name="spoken_emoji_1F638" msgid="3410766467496872301">"​ໜ້າແມວ​ຍິ້ມ"</string>
+ <string name="spoken_emoji_1F639" msgid="1833417519781022031">"​ໜ້າ​ແມວ​ຍິ້ມ​ພ້ອມ​ນ້ຳ​ຕາ​ແຫ່ງ​ຄວາມ​ສຸກ"</string>
+ <string name="spoken_emoji_1F63A" msgid="8566294484007152613">"​ໜ້າ​ແມວ​ຍິ້ມ​ພ້ອມ​ກັບ​ອ້າ​ປາກ"</string>
+ <string name="spoken_emoji_1F63B" msgid="74417995938927571">"Smiling cat face with heart-shaped eyes"</string>
+ <string name="spoken_emoji_1F63C" msgid="6472812005729468870">"Cat face with wry smile"</string>
+ <string name="spoken_emoji_1F63D" msgid="1638398369553349509">"Kissing cat face with closed eyes"</string>
+ <string name="spoken_emoji_1F63E" msgid="6788969063020278986">"Pouting cat face"</string>
+ <string name="spoken_emoji_1F63F" msgid="1207234562459550185">"Crying cat face"</string>
+ <string name="spoken_emoji_1F640" msgid="6023054549904329638">"Weary cat face"</string>
+ <string name="spoken_emoji_1F645" msgid="5202090629227587076">"Face with no good gesture"</string>
+ <string name="spoken_emoji_1F646" msgid="6734425134415138134">"Face with ok gesture"</string>
+ <string name="spoken_emoji_1F647" msgid="1090285518444205483">"Person bowing deeply"</string>
+ <string name="spoken_emoji_1F648" msgid="8978535230610522356">"See-no-evil monkey"</string>
+ <string name="spoken_emoji_1F649" msgid="8486145279809495102">"Hear-no-evil monkey"</string>
+ <string name="spoken_emoji_1F64A" msgid="1237524974033228660">"Speak-no-evil monkey"</string>
+ <string name="spoken_emoji_1F64B" msgid="4251150782016370475">"Happy person raising one hand"</string>
<string name="spoken_emoji_1F64C" msgid="5446231430684558344">"ຄົນ​ຍົກ​ມື​ຂຶ້ນ​ສະ​ຫຼອງ"</string>
- <!-- no translation found for spoken_emoji_1F64D (4646485595309482342) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F64E (3376579939836656097) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F64F (1044439574356230711) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F680 (513263736012689059) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F681 (9201341783850525339) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F682 (8046933583867498698) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F683 (8772750354339223092) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F684 (346396777356203608) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F685 (1237059817190832730) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F686 (3525197227223620343) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F687 (5110143437960392837) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F688 (4702085029871797965) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F689 (2375851019798817094) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F68A (6368370859718717198) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F68B (2920160427117436633) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F68C (1061520934758810864) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F68D (2890059031360969304) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F68E (6234042976027309654) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F68F (5871099334672012107) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F690 (8080964620200195262) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F691 (999173032408730501) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F692 (1712863785341849487) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F693 (7987109037389768934) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F694 (6061658916653884608) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F695 (6913445460364247283) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F696 (6391604457418285404) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F697 (7978399334396733790) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F698 (7006050861129732018) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F699 (630317052666590607) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F69A (4739797891735823577) -->
- <skip />
+ <string name="spoken_emoji_1F64D" msgid="4646485595309482342">"Person frowning"</string>
+ <string name="spoken_emoji_1F64E" msgid="3376579939836656097">"Person with pouting face"</string>
+ <string name="spoken_emoji_1F64F" msgid="1044439574356230711">"Person with folded hands"</string>
+ <string name="spoken_emoji_1F680" msgid="513263736012689059">"Rocket"</string>
+ <string name="spoken_emoji_1F681" msgid="9201341783850525339">"Helicopter"</string>
+ <string name="spoken_emoji_1F682" msgid="8046933583867498698">"Steam locomotive"</string>
+ <string name="spoken_emoji_1F683" msgid="8772750354339223092">"Railway car"</string>
+ <string name="spoken_emoji_1F684" msgid="346396777356203608">"High-speed train"</string>
+ <string name="spoken_emoji_1F685" msgid="1237059817190832730">"High-speed train with bullet nose"</string>
+ <string name="spoken_emoji_1F686" msgid="3525197227223620343">"Train"</string>
+ <string name="spoken_emoji_1F687" msgid="5110143437960392837">"Metro"</string>
+ <string name="spoken_emoji_1F688" msgid="4702085029871797965">"Light rail"</string>
+ <string name="spoken_emoji_1F689" msgid="2375851019798817094">"Station"</string>
+ <string name="spoken_emoji_1F68A" msgid="6368370859718717198">"Tram"</string>
+ <string name="spoken_emoji_1F68B" msgid="2920160427117436633">"Tram car"</string>
+ <string name="spoken_emoji_1F68C" msgid="1061520934758810864">"Bus"</string>
+ <string name="spoken_emoji_1F68D" msgid="2890059031360969304">"Oncoming bus"</string>
+ <string name="spoken_emoji_1F68E" msgid="6234042976027309654">"Trolleybus"</string>
+ <string name="spoken_emoji_1F68F" msgid="5871099334672012107">"Bus stop"</string>
+ <string name="spoken_emoji_1F690" msgid="8080964620200195262">"Minibus"</string>
+ <string name="spoken_emoji_1F691" msgid="999173032408730501">"Ambulance"</string>
+ <string name="spoken_emoji_1F692" msgid="1712863785341849487">"Fire engine"</string>
+ <string name="spoken_emoji_1F693" msgid="7987109037389768934">"Police car"</string>
+ <string name="spoken_emoji_1F694" msgid="6061658916653884608">"Oncoming police car"</string>
+ <string name="spoken_emoji_1F695" msgid="6913445460364247283">"Taxi"</string>
+ <string name="spoken_emoji_1F696" msgid="6391604457418285404">"Oncoming taxi"</string>
+ <string name="spoken_emoji_1F697" msgid="7978399334396733790">"Automobile"</string>
+ <string name="spoken_emoji_1F698" msgid="7006050861129732018">"Oncoming automobile"</string>
+ <string name="spoken_emoji_1F699" msgid="630317052666590607">"Recreational vehicle"</string>
+ <string name="spoken_emoji_1F69A" msgid="4739797891735823577">"Delivery truck"</string>
<string name="spoken_emoji_1F69B" msgid="4715997280786620649">"ລົດ​ບັນ​ທຸກ​ພ່ວງ"</string>
- <!-- no translation found for spoken_emoji_1F69C (5557395610750818161) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F69D (5467164189942951047) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F69E (169238196389832234) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F69F (7508128757012845102) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6A0 (8733056213790160147) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6A1 (4666516337749347253) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6A2 (4511220588943129583) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6A3 (8412962252222205387) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6A4 (8867571300266339211) -->
- <skip />
+ <string name="spoken_emoji_1F69C" msgid="5557395610750818161">"Tractor"</string>
+ <string name="spoken_emoji_1F69D" msgid="5467164189942951047">"Monorail"</string>
+ <string name="spoken_emoji_1F69E" msgid="169238196389832234">"Mountain railway"</string>
+ <string name="spoken_emoji_1F69F" msgid="7508128757012845102">"Suspension railway"</string>
+ <string name="spoken_emoji_1F6A0" msgid="8733056213790160147">"Mountain cableway"</string>
+ <string name="spoken_emoji_1F6A1" msgid="4666516337749347253">"Aerial tramway"</string>
+ <string name="spoken_emoji_1F6A2" msgid="4511220588943129583">"Ship"</string>
+ <string name="spoken_emoji_1F6A3" msgid="8412962252222205387">"Rowboat"</string>
+ <string name="spoken_emoji_1F6A4" msgid="8867571300266339211">"Speedboat"</string>
<string name="spoken_emoji_1F6A5" msgid="7650260812741963884">"ໄຟ​ສັນຍານ​ຈະລາຈອນ​ລວງ​ນອນ"</string>
- <!-- no translation found for spoken_emoji_1F6A6 (485575967773793454) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6A7 (6411048933816976794) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6A8 (6345717218374788364) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6A9 (6586380356807600412) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6AA (8954448167261738885) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6AB (5313946262888343544) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6AC (6946858177965948288) -->
- <skip />
+ <string name="spoken_emoji_1F6A6" msgid="485575967773793454">"Vertical traffic light"</string>
+ <string name="spoken_emoji_1F6A7" msgid="6411048933816976794">"Construction sign"</string>
+ <string name="spoken_emoji_1F6A8" msgid="6345717218374788364">"Police cars revolving light"</string>
+ <string name="spoken_emoji_1F6A9" msgid="6586380356807600412">"Triangular flag on post"</string>
+ <string name="spoken_emoji_1F6AA" msgid="8954448167261738885">"Door"</string>
+ <string name="spoken_emoji_1F6AB" msgid="5313946262888343544">"No entry sign"</string>
+ <string name="spoken_emoji_1F6AC" msgid="6946858177965948288">"Smoking symbol"</string>
<string name="spoken_emoji_1F6AD" msgid="6320088669185507241">"ສັນຍາລັກ​ຫ້າມ​ສູບຢາ"</string>
- <!-- no translation found for spoken_emoji_1F6AE (1062469925352817189) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6AF (2286668056123642208) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6B0 (179424763882990952) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6B1 (5585212805429161877) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6B2 (1771885082068421875) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6B3 (8033779581263314408) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6B4 (1999538449018476947) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6B5 (340846352660993117) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6B6 (4351024386495098336) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6B7 (4564800655866838802) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6B8 (3020531906940267349) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6B9 (1207095844125041251) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6BA (2346879310071017531) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6BB (2370172469642078526) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6BC (5558827593563530851) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6BD (9213590243049835957) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6BE (394016533781742491) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6BF (906336365928291207) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6C0 (4592099854378821599) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6C1 (2845056048320031158) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6C2 (8117262514698011877) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6C3 (1176342001834630675) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6C4 (1477622834179978886) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6C5 (2495834050856617451) -->
- <skip />
+ <string name="spoken_emoji_1F6AE" msgid="1062469925352817189">"Put litter in its place symbol"</string>
+ <string name="spoken_emoji_1F6AF" msgid="2286668056123642208">"Do not litter symbol"</string>
+ <string name="spoken_emoji_1F6B0" msgid="179424763882990952">"Potable water symbol"</string>
+ <string name="spoken_emoji_1F6B1" msgid="5585212805429161877">"Non-potable water symbol"</string>
+ <string name="spoken_emoji_1F6B2" msgid="1771885082068421875">"Bicycle"</string>
+ <string name="spoken_emoji_1F6B3" msgid="8033779581263314408">"No bicycles"</string>
+ <string name="spoken_emoji_1F6B4" msgid="1999538449018476947">"Bicyclist"</string>
+ <string name="spoken_emoji_1F6B5" msgid="340846352660993117">"Mountain bicyclist"</string>
+ <string name="spoken_emoji_1F6B6" msgid="4351024386495098336">"Pedestrian"</string>
+ <string name="spoken_emoji_1F6B7" msgid="4564800655866838802">"No pedestrians"</string>
+ <string name="spoken_emoji_1F6B8" msgid="3020531906940267349">"Children crossing"</string>
+ <string name="spoken_emoji_1F6B9" msgid="1207095844125041251">"Mens symbol"</string>
+ <string name="spoken_emoji_1F6BA" msgid="2346879310071017531">"Womens symbol"</string>
+ <string name="spoken_emoji_1F6BB" msgid="2370172469642078526">"Restroom"</string>
+ <string name="spoken_emoji_1F6BC" msgid="5558827593563530851">"Baby symbol"</string>
+ <string name="spoken_emoji_1F6BD" msgid="9213590243049835957">"Toilet"</string>
+ <string name="spoken_emoji_1F6BE" msgid="394016533781742491">"Water closet"</string>
+ <string name="spoken_emoji_1F6BF" msgid="906336365928291207">"Shower"</string>
+ <string name="spoken_emoji_1F6C0" msgid="4592099854378821599">"Bath"</string>
+ <string name="spoken_emoji_1F6C1" msgid="2845056048320031158">"Bathtub"</string>
+ <string name="spoken_emoji_1F6C2" msgid="8117262514698011877">"Passport control"</string>
+ <string name="spoken_emoji_1F6C3" msgid="1176342001834630675">"Customs"</string>
+ <string name="spoken_emoji_1F6C4" msgid="1477622834179978886">"Baggage claim"</string>
+ <string name="spoken_emoji_1F6C5" msgid="2495834050856617451">"Left luggage"</string>
</resources>
diff --git a/java/res/values-lo-rLA/strings-talkback-descriptions.xml b/java/res/values-lo-rLA/strings-talkback-descriptions.xml
index 4b9294c6e..9d07735b2 100644
--- a/java/res/values-lo-rLA/strings-talkback-descriptions.xml
+++ b/java/res/values-lo-rLA/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"ສະຖານທີ່"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"ສັນຍາລັກ"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"​ອີ​ໂມ​ຕິ​ຄອນ"</string>
+ <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+ <skip />
+ <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+ <skip />
</resources>
diff --git a/java/res/values-lo-rLA/strings.xml b/java/res/values-lo-rLA/strings.xml
index 76fe5e042..9d012b6a4 100644
--- a/java/res/values-lo-rLA/strings.xml
+++ b/java/res/values-lo-rLA/strings.xml
@@ -21,7 +21,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_input_options" msgid="3909945612939668554">"ຕົວເລືອກການປ້ອນຂໍ້ມູນ"</string>
- <string name="english_ime_research_log" msgid="8492602295696577851">"Research Log Commands"</string>
<string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"ເບິ່ງທີ່ຊື່ຂອງລາຍຊື່ຜູ່ຕິດຕໍ່"</string>
<string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"ໂຕຊ່ວຍສະກົດໃຊ້ຂໍ້ມູນຈາກລາຍການຂອງລາຍຊື່ຜູ່ຕິດຕໍ່ຂອງທ່ານ"</string>
<string name="vibrate_on_keypress" msgid="5258079494276955460">"ສັ່ນເຕືອນເມື່ອພິມ"</string>
@@ -84,8 +83,6 @@
<string name="select_language" msgid="3693815588777926848">"ພາສາການປ້ອນຂໍ້ມູນ"</string>
<string name="hint_add_to_dictionary" msgid="573678656946085380">"ກົດອີກຄັ້ງເພື່ອບັນທຶກ"</string>
<string name="has_dictionary" msgid="6071847973466625007">"ມີວັດຈະນານຸກົມ"</string>
- <string name="prefs_enable_log" msgid="6620424505072963557">"ເປີດນຳໃຊ້ຄຳຕິຊົມຈາກຜູ່ໃຊ້"</string>
- <string name="prefs_description_log" msgid="7525225584555429211">"ຊ່ວຍເພີ່ມປະສິດທິພາບໂຕແກ້ໄຂການປ້ອນຂໍ້ມູນ ໂດຍການສົ່ງສະຖິຕິການນຳໃຊ້ ແລະການລາຍການຂໍ້ຜິດພາດໂດຍອັດຕະໂນມັດ"</string>
<string name="keyboard_layout" msgid="8451164783510487501">"ສີສັນແປ້ນພິມ"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"ອັງກິດ (ສະຫະລາດຊະອານາຈັກ)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"ອັງກິດ (ສະຫະລັດຯ)"</string>
@@ -118,7 +115,6 @@
<string name="enable" msgid="5031294444630523247">"ເປີດນຳໃຊ້"</string>
<string name="not_now" msgid="6172462888202790482">"ບໍ່ແມ່ນຕອນນີ້"</string>
<string name="custom_input_style_already_exists" msgid="8008728952215449707">"ຮູບແບບການປ້ອນຂໍ້ມູນທີ່ຄືກັນມີຢູ່ແລ້ວ: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
- <string name="prefs_usability_study_mode" msgid="1261130555134595254">"ໂໝດການສຶກສາ Usability"</string>
<string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"ໄລຍະເວລາຂອງການກົດປຸ່ມ"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"ໄລຍະເວລາຂອງການສັ່ນໃນການກົດປຸ່ມ"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"ລະດັບສຽງຂອງການກົດປຸ່ມ"</string>
diff --git a/java/res/values-lt/strings-action-keys.xml b/java/res/values-lt/strings-action-keys.xml
index 39b3894be..20d5ca04d 100644
--- a/java/res/values-lt/strings-action-keys.xml
+++ b/java/res/values-lt/strings-action-keys.xml
@@ -25,6 +25,8 @@
<string name="label_previous_key" msgid="1421141755779895275">"Anks."</string>
<string name="label_done_key" msgid="7564866296502630852">"Atl."</string>
<string name="label_send_key" msgid="482252074224462163">"Siųs."</string>
+ <!-- no translation found for label_search_key (7965186050435796642) -->
+ <skip />
<string name="label_pause_key" msgid="2225922926459730642">"Pris."</string>
<string name="label_wait_key" msgid="5891247853595466039">"Lauk."</string>
</resources>
diff --git a/java/res/values-lt/strings-talkback-descriptions.xml b/java/res/values-lt/strings-talkback-descriptions.xml
index 63b52a1d4..a5cb62c21 100644
--- a/java/res/values-lt/strings-talkback-descriptions.xml
+++ b/java/res/values-lt/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Vietos"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Simboliai"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Jaustukai"</string>
+ <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+ <skip />
+ <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+ <skip />
</resources>
diff --git a/java/res/values-lt/strings.xml b/java/res/values-lt/strings.xml
index c049a165e..73003c25f 100644
--- a/java/res/values-lt/strings.xml
+++ b/java/res/values-lt/strings.xml
@@ -21,7 +21,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_input_options" msgid="3909945612939668554">"Įvesties parinktys"</string>
- <string name="english_ime_research_log" msgid="8492602295696577851">"Tyrinėti žurnalo komandas"</string>
<string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Kontaktų vardų paieška"</string>
<string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Rašybos tikrinimo progr. naudoja įrašus, esančius kontaktų sąraše"</string>
<string name="vibrate_on_keypress" msgid="5258079494276955460">"Vibruoti, kai paspaudžiami klavišai"</string>
@@ -84,8 +83,6 @@
<string name="select_language" msgid="3693815588777926848">"Įvesties kalbos"</string>
<string name="hint_add_to_dictionary" msgid="573678656946085380">"Jei norite išsaugoti, palieskite dar kartą"</string>
<string name="has_dictionary" msgid="6071847973466625007">"Žodynas galimas"</string>
- <string name="prefs_enable_log" msgid="6620424505072963557">"Įgalinti naudotojų atsiliepimus"</string>
- <string name="prefs_description_log" msgid="7525225584555429211">"Padėkite patobulinti šią įvesties metodo redagavimo priemonę automatiškai siųsdami naudojimo statistiką ir strigčių ataskaitas"</string>
<string name="keyboard_layout" msgid="8451164783510487501">"Klaviatūros tema"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"Anglų k. (JK)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"Anglų k. (JAV)"</string>
@@ -118,7 +115,6 @@
<string name="enable" msgid="5031294444630523247">"Įgalinti"</string>
<string name="not_now" msgid="6172462888202790482">"Ne dabar"</string>
<string name="custom_input_style_already_exists" msgid="8008728952215449707">"Toks pat įvesties stilius jau yra: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
- <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Tinkamumo tyrimo režimas"</string>
<string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Klavišo ilgo paspaudimo delsa"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Vibrav. paspaudus mygt. trukmė"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Garso paspaudus mygt. garsumas"</string>
diff --git a/java/res/values-lv/strings-action-keys.xml b/java/res/values-lv/strings-action-keys.xml
index c2fbda26b..a3ada38a6 100644
--- a/java/res/values-lv/strings-action-keys.xml
+++ b/java/res/values-lv/strings-action-keys.xml
@@ -25,6 +25,8 @@
<string name="label_previous_key" msgid="1421141755779895275">"Iepr."</string>
<string name="label_done_key" msgid="7564866296502630852">"Gatavs"</string>
<string name="label_send_key" msgid="482252074224462163">"Sūtīt"</string>
+ <!-- no translation found for label_search_key (7965186050435796642) -->
+ <skip />
<string name="label_pause_key" msgid="2225922926459730642">"Pauze"</string>
<string name="label_wait_key" msgid="5891247853595466039">"Gaidīt"</string>
</resources>
diff --git a/java/res/values-lv/strings-talkback-descriptions.xml b/java/res/values-lv/strings-talkback-descriptions.xml
index 81a65c496..544fe9a4d 100644
--- a/java/res/values-lv/strings-talkback-descriptions.xml
+++ b/java/res/values-lv/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Vietas"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Simboli"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Emocijzīmes"</string>
+ <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+ <skip />
+ <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+ <skip />
</resources>
diff --git a/java/res/values-lv/strings.xml b/java/res/values-lv/strings.xml
index 901c3486f..d689182fb 100644
--- a/java/res/values-lv/strings.xml
+++ b/java/res/values-lv/strings.xml
@@ -21,7 +21,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_input_options" msgid="3909945612939668554">"Ievades opcijas"</string>
- <string name="english_ime_research_log" msgid="8492602295696577851">"Izpētes žurnāla komandas"</string>
<string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Meklēt kontaktp. vārdus"</string>
<string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Pareizrakst. pārbaudītājs lieto ierakstus no kontaktp. saraksta."</string>
<string name="vibrate_on_keypress" msgid="5258079494276955460">"Vibrēt, nospiežot taustiņu"</string>
@@ -84,8 +83,6 @@
<string name="select_language" msgid="3693815588777926848">"Ievades valodas"</string>
<string name="hint_add_to_dictionary" msgid="573678656946085380">"Pieskarieties vēlreiz, lai saglabātu."</string>
<string name="has_dictionary" msgid="6071847973466625007">"Ir pieejama vārdnīca."</string>
- <string name="prefs_enable_log" msgid="6620424505072963557">"Iespējot lietotāju atsauksmes"</string>
- <string name="prefs_description_log" msgid="7525225584555429211">"Palīdziet uzlabot šo ievades metodes redaktoru, automātiski nosūtot lietojuma statistiku un avāriju pārskatus."</string>
<string name="keyboard_layout" msgid="8451164783510487501">"Tastatūras motīvs"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"Angļu valoda (Lielbritānija)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"Angļu valoda (ASV)"</string>
@@ -118,7 +115,6 @@
<string name="enable" msgid="5031294444630523247">"Iespējot"</string>
<string name="not_now" msgid="6172462888202790482">"Vēlāk"</string>
<string name="custom_input_style_already_exists" msgid="8008728952215449707">"Šāds ievades stils jau pastāv: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
- <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Lietojamības izpētes režīms"</string>
<string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Taustiņa ilgās nosp. noildze"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Taust. nosp. vibrācijas ilgums"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Taustiņu nosp. skaņas skaļums"</string>
diff --git a/java/res/values-mk/strings.xml b/java/res/values-mk/strings.xml
index 1588534c9..ab2f2625a 100644
--- a/java/res/values-mk/strings.xml
+++ b/java/res/values-mk/strings.xml
@@ -22,7 +22,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<!-- no translation found for english_ime_input_options (3909945612939668554) -->
<skip />
- <!-- no translation found for english_ime_research_log (8492602295696577851) -->
<skip />
<!-- no translation found for use_contacts_for_spellchecking_option_title (5374120998125353898) -->
<skip />
@@ -140,9 +139,7 @@
<skip />
<!-- no translation found for has_dictionary (6071847973466625007) -->
<skip />
- <!-- no translation found for prefs_enable_log (6620424505072963557) -->
<skip />
- <!-- no translation found for prefs_description_log (7525225584555429211) -->
<skip />
<!-- no translation found for keyboard_layout (8451164783510487501) -->
<skip />
@@ -198,7 +195,6 @@
<skip />
<!-- no translation found for custom_input_style_already_exists (8008728952215449707) -->
<skip />
- <!-- no translation found for prefs_usability_study_mode (1261130555134595254) -->
<skip />
<!-- no translation found for prefs_key_longpress_timeout_settings (6102240298932897873) -->
<skip />
diff --git a/java/res/values-mn-rMN/strings-action-keys.xml b/java/res/values-mn-rMN/strings-action-keys.xml
index 77b8f2c05..a855386d0 100644
--- a/java/res/values-mn-rMN/strings-action-keys.xml
+++ b/java/res/values-mn-rMN/strings-action-keys.xml
@@ -25,6 +25,8 @@
<string name="label_previous_key" msgid="1421141755779895275">"Өмнөх"</string>
<string name="label_done_key" msgid="7564866296502630852">"Дууссан"</string>
<string name="label_send_key" msgid="482252074224462163">"Илгээх"</string>
+ <!-- no translation found for label_search_key (7965186050435796642) -->
+ <skip />
<string name="label_pause_key" msgid="2225922926459730642">"Түр зогсоох"</string>
<string name="label_wait_key" msgid="5891247853595466039">"Хүлээх"</string>
</resources>
diff --git a/java/res/values-mn-rMN/strings-talkback-descriptions.xml b/java/res/values-mn-rMN/strings-talkback-descriptions.xml
index fb0d382a8..982495044 100644
--- a/java/res/values-mn-rMN/strings-talkback-descriptions.xml
+++ b/java/res/values-mn-rMN/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Газар"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Симбол"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Эмотикон"</string>
+ <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+ <skip />
+ <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+ <skip />
</resources>
diff --git a/java/res/values-mn-rMN/strings.xml b/java/res/values-mn-rMN/strings.xml
index 4c64b3354..f6233b5f6 100644
--- a/java/res/values-mn-rMN/strings.xml
+++ b/java/res/values-mn-rMN/strings.xml
@@ -21,7 +21,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_input_options" msgid="3909945612939668554">"Оруулах сонголтууд"</string>
- <string name="english_ime_research_log" msgid="8492602295696577851">"Судалгааны протоколын командууд"</string>
<string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Харилцагчийн нэр хайх"</string>
<string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Алдаа шалгагч нь таны харилцагчдын жагсаалтаас ашиглана"</string>
<string name="vibrate_on_keypress" msgid="5258079494276955460">"Товч дарахад чичрэх"</string>
@@ -84,8 +83,6 @@
<string name="select_language" msgid="3693815588777926848">"Оруулах хэл"</string>
<string name="hint_add_to_dictionary" msgid="573678656946085380">"Хадгалахын тулд дахин хүрнэ үү"</string>
<string name="has_dictionary" msgid="6071847973466625007">"Толь бичиг байна"</string>
- <string name="prefs_enable_log" msgid="6620424505072963557">"Хэрэглэгчийн санал хүсэлтийг идэвхжүүлэх"</string>
- <string name="prefs_description_log" msgid="7525225584555429211">"Ашиглалтын статистик болон гацалтын репортуудыг автоматаар илгээснээр энэ оруулах арга засагчийг сайжруулахад туслаарай"</string>
<string name="keyboard_layout" msgid="8451164783510487501">"Гарын загвар"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"Англи (ИБ)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"Англи (АНУ)"</string>
@@ -118,7 +115,6 @@
<string name="enable" msgid="5031294444630523247">"Идэвхжүүлэх"</string>
<string name="not_now" msgid="6172462888202790482">"Одоо биш"</string>
<string name="custom_input_style_already_exists" msgid="8008728952215449707">"Ижилхэн оруулах загвар байна: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
- <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Ашиглалтын судалгааны горим"</string>
<string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Товч удаан дарах хугацааны тохиргоо"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Товч дарах чичиргээний хугацаа"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Товчны дууны хэмжээ"</string>
diff --git a/java/res/values-ms-rMY/strings-action-keys.xml b/java/res/values-ms-rMY/strings-action-keys.xml
index f1a75d2ef..1910c0dc3 100644
--- a/java/res/values-ms-rMY/strings-action-keys.xml
+++ b/java/res/values-ms-rMY/strings-action-keys.xml
@@ -25,6 +25,8 @@
<string name="label_previous_key" msgid="1421141755779895275">"Sblm"</string>
<string name="label_done_key" msgid="7564866296502630852">"Siap"</string>
<string name="label_send_key" msgid="482252074224462163">"Hntr"</string>
+ <!-- no translation found for label_search_key (7965186050435796642) -->
+ <skip />
<string name="label_pause_key" msgid="2225922926459730642">"Jeda"</string>
<string name="label_wait_key" msgid="5891247853595466039">"Tggu"</string>
</resources>
diff --git a/java/res/values-ms-rMY/strings-emoji-descriptions.xml b/java/res/values-ms-rMY/strings-emoji-descriptions.xml
new file mode 100644
index 000000000..c945c81fb
--- /dev/null
+++ b/java/res/values-ms-rMY/strings-emoji-descriptions.xml
@@ -0,0 +1,846 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/*
+**
+** Copyright 2014, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="spoken_emoji_00A9" msgid="2859822817116803638">"Tanda hak cipta"</string>
+ <string name="spoken_emoji_00AE" msgid="7708335454134589027">"Tanda berdaftar"</string>
+ <string name="spoken_emoji_203C" msgid="153340916701508663">"Tanda seruan berkembar"</string>
+ <string name="spoken_emoji_2049" msgid="4877256448299555371">"Tanda tanya seruan"</string>
+ <string name="spoken_emoji_2122" msgid="9188440722954720429">"Tanda cap dagangan"</string>
+ <string name="spoken_emoji_2139" msgid="9114342638917304327">"Sumber maklumat"</string>
+ <string name="spoken_emoji_2194" msgid="8055202727034946680">"Anak panah kiri kanan"</string>
+ <string name="spoken_emoji_2195" msgid="8028122253301087407">"Anak panah atas bawah"</string>
+ <string name="spoken_emoji_2196" msgid="4019164898967854363">"Anak panah barat laut"</string>
+ <string name="spoken_emoji_2197" msgid="4255723717709017801">"Anak panah timur laut"</string>
+ <string name="spoken_emoji_2198" msgid="1452063451313622090">"Anak panah tenggara"</string>
+ <string name="spoken_emoji_2199" msgid="6942722693368807849">"Anak panah barat daya"</string>
+ <string name="spoken_emoji_21A9" msgid="5204750172335111188">"Anak panah hala kiri dengan cangkuk"</string>
+ <string name="spoken_emoji_21AA" msgid="3950259884359247006">"Anak panah hala kanan dengan cangkuk"</string>
+ <string name="spoken_emoji_231A" msgid="6751448803233874993">"Jam"</string>
+ <string name="spoken_emoji_231B" msgid="5956428809948426182">"Jam pasir"</string>
+ <string name="spoken_emoji_23E9" msgid="4022497733535162237">"Segi tiga kembar arah kanan hitam"</string>
+ <string name="spoken_emoji_23EA" msgid="2251396938087774944">"Segi tiga kembar arah kiri hitam"</string>
+ <string name="spoken_emoji_23EB" msgid="3746885195641491865">"Segi tiga kembar arah atas hitam"</string>
+ <string name="spoken_emoji_23EC" msgid="7852372752901163416">"Segi tiga kembar arah bawah hitam"</string>
+ <string name="spoken_emoji_23F0" msgid="8474219588750627870">"Jam penggera"</string>
+ <string name="spoken_emoji_23F3" msgid="166900119581024371">"Jam pasir dengan pasir mengalir"</string>
+ <string name="spoken_emoji_24C2" msgid="3948348737566038470">"Huruf m besar latin dalam bulatan"</string>
+ <string name="spoken_emoji_25AA" msgid="7865181015100227349">"Empat segi kecil hitam"</string>
+ <string name="spoken_emoji_25AB" msgid="6446532820937381457">"Empat segi kecil putih"</string>
+ <string name="spoken_emoji_25B6" msgid="2423897708496040947">"Segi tiga arah kanan hitam"</string>
+ <string name="spoken_emoji_25C0" msgid="3595083440074484934">"Segi tiga arah kiri hitam"</string>
+ <string name="spoken_emoji_25FB" msgid="4838691986881215419">"Empat segi sederhana putih"</string>
+ <string name="spoken_emoji_25FC" msgid="7008859564991191050">"Empat segi sederhana hitam"</string>
+ <string name="spoken_emoji_25FD" msgid="7673439755069217479">"Empat segi sederhana kecil putih"</string>
+ <string name="spoken_emoji_25FE" msgid="6782214109919768923">"Empat segi sederhana kecil hitam"</string>
+ <string name="spoken_emoji_2600" msgid="2272722634618990413">"Matahari dengan sinar hitam"</string>
+ <string name="spoken_emoji_2601" msgid="6205136889311537150">"Awan"</string>
+ <string name="spoken_emoji_260E" msgid="8670395193046424238">"Telefon hitam"</string>
+ <string name="spoken_emoji_2611" msgid="4530550203347054611">"Peti undi dengan tanda semak"</string>
+ <string name="spoken_emoji_2614" msgid="1612791247861229500">"Payung dengan titisan hujan"</string>
+ <string name="spoken_emoji_2615" msgid="3320562382424018588">"Minuman panas"</string>
+ <string name="spoken_emoji_261D" msgid="4690554173549768467">"Indeks putih menunjuk ke atas"</string>
+ <string name="spoken_emoji_263A" msgid="3170094381521989300">"Muka tersenyum putih"</string>
+ <string name="spoken_emoji_2648" msgid="4621241062667020673">"Aries"</string>
+ <string name="spoken_emoji_2649" msgid="7694461245947059086">"Taurus"</string>
+ <string name="spoken_emoji_264A" msgid="1258074605878705030">"Gemini"</string>
+ <string name="spoken_emoji_264B" msgid="4409219914377810956">"Cancer"</string>
+ <string name="spoken_emoji_264C" msgid="6520255367817054163">"Leo"</string>
+ <string name="spoken_emoji_264D" msgid="1504758945499854018">"Virgo"</string>
+ <string name="spoken_emoji_264E" msgid="2354847104530633519">"Libra"</string>
+ <string name="spoken_emoji_264F" msgid="5822933280406416112">"Scorpius"</string>
+ <string name="spoken_emoji_2650" msgid="4832481156714796163">"Sagittarius"</string>
+ <string name="spoken_emoji_2651" msgid="840953134601595090">"Capricorn"</string>
+ <string name="spoken_emoji_2652" msgid="3586925968718775281">"Aquarius"</string>
+ <string name="spoken_emoji_2653" msgid="8420547731496254492">"Pisces"</string>
+ <string name="spoken_emoji_2660" msgid="4541170554542412536">"Daun sped hitam"</string>
+ <string name="spoken_emoji_2663" msgid="3669352721942285724">"Daun kelawar hitam"</string>
+ <string name="spoken_emoji_2665" msgid="6347941599683765843">"Daun hati hitam"</string>
+ <string name="spoken_emoji_2666" msgid="8296769213401115999">"Daun berlian hitam"</string>
+ <string name="spoken_emoji_2668" msgid="7063148281053820386">"Air panas"</string>
+ <string name="spoken_emoji_267B" msgid="21716857176812762">"Simbol kitar semula universal hitam"</string>
+ <string name="spoken_emoji_267F" msgid="8833496533226475443">"Simbol kerusi roda"</string>
+ <string name="spoken_emoji_2693" msgid="7443148847598433088">"Sauh"</string>
+ <string name="spoken_emoji_26A0" msgid="6272635532992727510">"Tanda amaran"</string>
+ <string name="spoken_emoji_26A1" msgid="5604749644693339145">"Tanda voltan tinggi"</string>
+ <string name="spoken_emoji_26AA" msgid="8005748091690377153">"Bulatan putih sederhana"</string>
+ <string name="spoken_emoji_26AB" msgid="1655910278422753244">"Bulatan hitam sederhana"</string>
+ <string name="spoken_emoji_26BD" msgid="1545218197938889737">"Bola sepak"</string>
+ <string name="spoken_emoji_26BE" msgid="8959760533076498209">"Besbol"</string>
+ <string name="spoken_emoji_26C4" msgid="3045791757044255626">"Orang salji tanpa salji"</string>
+ <string name="spoken_emoji_26C5" msgid="5580129409712578639">"Matahari di sebalik awan"</string>
+ <string name="spoken_emoji_26CE" msgid="8963656417276062998">"Ophiuchus"</string>
+ <string name="spoken_emoji_26D4" msgid="2231451988209604130">"Dilarang masuk"</string>
+ <string name="spoken_emoji_26EA" msgid="7513319636103804907">"Gereja"</string>
+ <string name="spoken_emoji_26F2" msgid="7134115206158891037">"Air pancut"</string>
+ <string name="spoken_emoji_26F3" msgid="4912302210162075465">"Bendera dalam lubang"</string>
+ <string name="spoken_emoji_26F5" msgid="4766328116769075217">"Kapal layar"</string>
+ <string name="spoken_emoji_26FA" msgid="5888017494809199037">"Khemah"</string>
+ <string name="spoken_emoji_26FD" msgid="2417060622927453534">"Pam minyak"</string>
+ <string name="spoken_emoji_2702" msgid="4005741160717451912">"Gunting hitam"</string>
+ <string name="spoken_emoji_2705" msgid="164605766946697759">"Tanda semak tebal putih"</string>
+ <string name="spoken_emoji_2708" msgid="7153840886849268988">"Kapal terbang"</string>
+ <string name="spoken_emoji_2709" msgid="2217319160724311369">"Sampul surat"</string>
+ <string name="spoken_emoji_270A" msgid="508347232762319473">"Penumbuk"</string>
+ <string name="spoken_emoji_270B" msgid="6640562128327753423">"Tangan diangkat"</string>
+ <string name="spoken_emoji_270C" msgid="1344288035704944581">"Tanda menang"</string>
+ <string name="spoken_emoji_270F" msgid="6108251586067318718">"Pensel"</string>
+ <string name="spoken_emoji_2712" msgid="6320544535087710482">"Mata pen hitam"</string>
+ <string name="spoken_emoji_2714" msgid="1968242800064001654">"Tanda semak tebal"</string>
+ <string name="spoken_emoji_2716" msgid="511941294762977228">"X darab tebal"</string>
+ <string name="spoken_emoji_2728" msgid="5650330815808691881">"Kilauan"</string>
+ <string name="spoken_emoji_2733" msgid="8915809595141157327">"Asterisk berbucu lapan"</string>
+ <string name="spoken_emoji_2734" msgid="4846583547980754332">"Bintang hitam berbucu lapan"</string>
+ <string name="spoken_emoji_2744" msgid="4350636647760161042">"Emping salji"</string>
+ <string name="spoken_emoji_2747" msgid="3718282973916474455">"Kilauan"</string>
+ <string name="spoken_emoji_274C" msgid="2752145886733295314">"Tanda silang"</string>
+ <string name="spoken_emoji_274E" msgid="4262918689871098338">"Tanda silang empat segi negatif"</string>
+ <string name="spoken_emoji_2753" msgid="6935897159942119808">"Perhiasan tanda tanya hitam"</string>
+ <string name="spoken_emoji_2754" msgid="7277504915105532954">"Perhiasan tanda tanya putih"</string>
+ <string name="spoken_emoji_2755" msgid="6853076969826960210">"Perhiasan tanda seruan putih"</string>
+ <string name="spoken_emoji_2757" msgid="3707907828776912174">"Simbol tanda seruan tebal"</string>
+ <string name="spoken_emoji_2764" msgid="4214257843609432167">"Hati hitam tebal"</string>
+ <string name="spoken_emoji_2795" msgid="6563954833786162168">"Tanda tambah tebal"</string>
+ <string name="spoken_emoji_2796" msgid="5990926508250772777">"Tanda tolak tebal"</string>
+ <string name="spoken_emoji_2797" msgid="24694184172879174">"Tanda bahagi tebal"</string>
+ <string name="spoken_emoji_27A1" msgid="3513434778263100580">"Anak panah hala kanan hitam"</string>
+ <string name="spoken_emoji_27B0" msgid="203395646864662198">"Gelung bergulung"</string>
+ <string name="spoken_emoji_27BF" msgid="4940514642375640510">"Gelung bergulung kembar"</string>
+ <string name="spoken_emoji_2934" msgid="9062130477982973457">"Anak panah menghala ke kanan kemudian melengkung ke atas"</string>
+ <string name="spoken_emoji_2935" msgid="6198710960720232074">"Anak panah menghala ke kanan kemudian melengkung ke bawah"</string>
+ <string name="spoken_emoji_2B05" msgid="4813405635410707690">"Anak panah hitam hala kiri"</string>
+ <string name="spoken_emoji_2B06" msgid="1223172079106250748">"Anak panah hitam hala atas"</string>
+ <string name="spoken_emoji_2B07" msgid="1599124424746596150">"Anak panah hitam hala bawah"</string>
+ <string name="spoken_emoji_2B1B" msgid="3461247311988501626">"Empat segi besar hitam"</string>
+ <string name="spoken_emoji_2B1C" msgid="5793146430145248915">"Empat segi besar putih"</string>
+ <string name="spoken_emoji_2B50" msgid="3850845519526950524">"Bintang sederhana putih"</string>
+ <string name="spoken_emoji_2B55" msgid="9137882158811541824">"Bulatan besar tebal"</string>
+ <string name="spoken_emoji_3030" msgid="4609172241893565639">"Sengkang beralun"</string>
+ <string name="spoken_emoji_303D" msgid="2545833934975907505">"Tanda perselangan silih"</string>
+ <string name="spoken_emoji_3297" msgid="928912923628973800">"Ideograf tahniah bulat"</string>
+ <string name="spoken_emoji_3299" msgid="3930347573693668426">"Ideograf rahsia bulat"</string>
+ <string name="spoken_emoji_1F004" msgid="1705216181345894600">"Naga merah jubin mahjong"</string>
+ <string name="spoken_emoji_1F0CF" msgid="7601493592085987866">"Joker hitam daun terup"</string>
+ <string name="spoken_emoji_1F170" msgid="3817698686602826773">"Jenis darah A"</string>
+ <string name="spoken_emoji_1F171" msgid="3684218589626650242">"Jenis darah B"</string>
+ <string name="spoken_emoji_1F17E" msgid="2978809190364779029">"Jenis darah O"</string>
+ <string name="spoken_emoji_1F17F" msgid="463634348668462040">"Tempat letak kereta"</string>
+ <string name="spoken_emoji_1F18E" msgid="1650705325221496768">"Jenis darah AB"</string>
+ <string name="spoken_emoji_1F191" msgid="5386969264431429221">"CL empat segi"</string>
+ <string name="spoken_emoji_1F192" msgid="8324226436829162496">"Tenang empat segi"</string>
+ <string name="spoken_emoji_1F193" msgid="4731758603321515364">"Percuma empat segi"</string>
+ <string name="spoken_emoji_1F194" msgid="4903128609556175887">"ID empat segi"</string>
+ <string name="spoken_emoji_1F195" msgid="1433142500411060924">"Baharu empat segi"</string>
+ <string name="spoken_emoji_1F196" msgid="8825160701159634202">"NG empat segi"</string>
+ <string name="spoken_emoji_1F197" msgid="7841079241554176535">"OK empat segi"</string>
+ <string name="spoken_emoji_1F198" msgid="7020298909426960622">"SOS empat segi"</string>
+ <string name="spoken_emoji_1F199" msgid="5971252667136235630">"Naik dengan tanda seruan empat segi"</string>
+ <string name="spoken_emoji_1F19A" msgid="4557270135899843959">"Lawan empat segi"</string>
+ <string name="spoken_emoji_1F201" msgid="7000490044681139002">"Katakana di sini empat segi"</string>
+ <string name="spoken_emoji_1F202" msgid="8560906958695043947">"Perkhidmatan katakana empat segi"</string>
+ <string name="spoken_emoji_1F21A" msgid="1496435317324514033">"Ideograf percuma empat segi"</string>
+ <string name="spoken_emoji_1F22F" msgid="609797148862445402">"Ideograf tempat duduk yang ditempah empat segi"</string>
+ <string name="spoken_emoji_1F232" msgid="8125716331632035820">"Ideograf larangan empat segi"</string>
+ <string name="spoken_emoji_1F233" msgid="8749401090457355028">"Ideograf jawatan kosong empat segi"</string>
+ <string name="spoken_emoji_1F234" msgid="3546951604285970768">"Ideograf penerimaan empat segi"</string>
+ <string name="spoken_emoji_1F235" msgid="5320186982841793711">"Ideograf penuh empat segi"</string>
+ <string name="spoken_emoji_1F236" msgid="879755752069393034">"Ideograf dibayar empat segi"</string>
+ <string name="spoken_emoji_1F237" msgid="6741807001205851437">"Ideograf bulanan empat segi"</string>
+ <string name="spoken_emoji_1F238" msgid="5504414186438196912">"Ideograf permohonan empat segi"</string>
+ <string name="spoken_emoji_1F239" msgid="1634067311597618959">"Ideograf diskaun empat segi"</string>
+ <string name="spoken_emoji_1F23A" msgid="3107862957630169536">"Ideograf perniagaan dibuka empat segi"</string>
+ <string name="spoken_emoji_1F250" msgid="6586943922806727907">"Ideograf kelebihan bulat"</string>
+ <string name="spoken_emoji_1F251" msgid="9099032855993346948">"Ideograf terima bulat"</string>
+ <string name="spoken_emoji_1F300" msgid="4720098285295840383">"Puting beliung"</string>
+ <string name="spoken_emoji_1F301" msgid="3601962477653752974">"Berkabut"</string>
+ <string name="spoken_emoji_1F302" msgid="3404357123421753593">"Payung tertutup"</string>
+ <string name="spoken_emoji_1F303" msgid="3899301321538188206">"Malam dengan bintang"</string>
+ <string name="spoken_emoji_1F304" msgid="2767148930689050040">"Matahari terbit di atas gunung"</string>
+ <string name="spoken_emoji_1F305" msgid="9165812924292061196">"Sunrise"</string>
+ <string name="spoken_emoji_1F306" msgid="5889294736109193104">"Skap bandar raya waktu senja"</string>
+ <string name="spoken_emoji_1F307" msgid="2714290867291163713">"Matahari terbenam di atas bangunan"</string>
+ <string name="spoken_emoji_1F308" msgid="688704703985173377">"Pelangi"</string>
+ <string name="spoken_emoji_1F309" msgid="6217981957992313528">"Jambatan pada waktu malam"</string>
+ <string name="spoken_emoji_1F30A" msgid="4329309263152110893">"Gelombang air"</string>
+ <string name="spoken_emoji_1F30B" msgid="5729430693700923112">"Gunung Berapi"</string>
+ <string name="spoken_emoji_1F30C" msgid="2961230863217543082">"Bima sakti"</string>
+ <string name="spoken_emoji_1F30D" msgid="1113905673331547953">"Glob bumi eropah-afrika"</string>
+ <string name="spoken_emoji_1F30E" msgid="5278512600749223671">"Glob bumi amerika"</string>
+ <string name="spoken_emoji_1F30F" msgid="5718144880978707493">"Glob bumi asia-australia"</string>
+ <string name="spoken_emoji_1F310" msgid="2959618582975247601">"Glob dengan meridian"</string>
+ <string name="spoken_emoji_1F311" msgid="623906380914895542">"Simbol bulan baharu"</string>
+ <string name="spoken_emoji_1F312" msgid="4458575672576125401">"Simbol bulan sabit mengambang"</string>
+ <string name="spoken_emoji_1F313" msgid="7599181787989497294">"Simbol bulan suku pertama"</string>
+ <string name="spoken_emoji_1F314" msgid="4898293184964365413">"Simbol bulan hampir purnama mengambang"</string>
+ <string name="spoken_emoji_1F315" msgid="3218117051779496309">"Simbol bulan purnama"</string>
+ <string name="spoken_emoji_1F316" msgid="2061317145777689569">"Simbol bulan hampir purnama surut"</string>
+ <string name="spoken_emoji_1F317" msgid="2721090687319539049">"Simbol bulan suku akhir"</string>
+ <string name="spoken_emoji_1F318" msgid="3814091755648887570">"Simbol bulan sabit surut"</string>
+ <string name="spoken_emoji_1F319" msgid="4074299824890459465">"Bulan sabit"</string>
+ <string name="spoken_emoji_1F31A" msgid="3092285278116977103">"Bulan baharu dengan muka"</string>
+ <string name="spoken_emoji_1F31B" msgid="2658562138386927881">"Bulan suku pertama dengan muka"</string>
+ <string name="spoken_emoji_1F31C" msgid="7914768515547867384">"Bulan suku akhir dengan muka"</string>
+ <string name="spoken_emoji_1F31D" msgid="1925730459848297182">"Bulan purnama dengan muka"</string>
+ <string name="spoken_emoji_1F31E" msgid="8022112382524084418">"Matahari dengan muka"</string>
+ <string name="spoken_emoji_1F31F" msgid="1051661214137766369">"Bintang bersinar"</string>
+ <string name="spoken_emoji_1F320" msgid="5450591979068216115">"Tahi bintang"</string>
+ <string name="spoken_emoji_1F330" msgid="3115760035618051575">"Buah berangan"</string>
+ <string name="spoken_emoji_1F331" msgid="5658888205290008691">"Anak benih"</string>
+ <string name="spoken_emoji_1F332" msgid="2935650450421165938">"Pokok malar hijau"</string>
+ <string name="spoken_emoji_1F333" msgid="5898847427062482675">"Pokok daun luruh"</string>
+ <string name="spoken_emoji_1F334" msgid="6183375224678417894">"Pokok palma"</string>
+ <string name="spoken_emoji_1F335" msgid="5352418412103584941">"Kaktus"</string>
+ <string name="spoken_emoji_1F337" msgid="3839107352363566289">"Tulip"</string>
+ <string name="spoken_emoji_1F338" msgid="6389970364260468490">"Bunga sakura"</string>
+ <string name="spoken_emoji_1F339" msgid="9128891447985256151">"Ros"</string>
+ <string name="spoken_emoji_1F33A" msgid="2025828400095233078">"Bunga raya"</string>
+ <string name="spoken_emoji_1F33B" msgid="8163868254348448552">"Bunga matahari"</string>
+ <string name="spoken_emoji_1F33C" msgid="6850371206262335812">"Bunga"</string>
+ <string name="spoken_emoji_1F33D" msgid="9033484052864509610">"Tongkol jagung"</string>
+ <string name="spoken_emoji_1F33E" msgid="2540173396638444120">"Pokok padi"</string>
+ <string name="spoken_emoji_1F33F" msgid="4384823344364908558">"Herba"</string>
+ <string name="spoken_emoji_1F340" msgid="3494255459156499305">"Empat daun semanggi"</string>
+ <string name="spoken_emoji_1F341" msgid="4581959481754990158">"Daun mapel"</string>
+ <string name="spoken_emoji_1F342" msgid="3119068426871821222">"Daun gugur"</string>
+ <string name="spoken_emoji_1F343" msgid="2663317495805149004">"Daun ditiup angin"</string>
+ <string name="spoken_emoji_1F344" msgid="2738517881678722159">"Cendawan"</string>
+ <string name="spoken_emoji_1F345" msgid="6135288642349085554">"Tomato"</string>
+ <string name="spoken_emoji_1F346" msgid="2075395322785406367">"Terung"</string>
+ <string name="spoken_emoji_1F347" msgid="7753453754963890571">"Anggur"</string>
+ <string name="spoken_emoji_1F348" msgid="1247076837284932788">"Tembikai"</string>
+ <string name="spoken_emoji_1F349" msgid="5563054555180611086">"Tembikai"</string>
+ <string name="spoken_emoji_1F34A" msgid="4688661208570160524">"Oren Tangerin"</string>
+ <string name="spoken_emoji_1F34B" msgid="4335318423164185706">"Lemon"</string>
+ <string name="spoken_emoji_1F34C" msgid="3712827239858159474">"Kuning Pisang"</string>
+ <string name="spoken_emoji_1F34D" msgid="7712521967162622936">"Nanas"</string>
+ <string name="spoken_emoji_1F34E" msgid="1859466882598614228">"Epal merah"</string>
+ <string name="spoken_emoji_1F34F" msgid="8251711032295005633">"Epal hijau"</string>
+ <string name="spoken_emoji_1F350" msgid="625802980159197701">"Pear"</string>
+ <string name="spoken_emoji_1F351" msgid="4269460120610911895">"Pic"</string>
+ <string name="spoken_emoji_1F352" msgid="965600953360182635">"Ceri"</string>
+ <string name="spoken_emoji_1F353" msgid="7068623879906925592">"Strawberi"</string>
+ <string name="spoken_emoji_1F354" msgid="45162285238888494">"Hamburger"</string>
+ <string name="spoken_emoji_1F355" msgid="9157587635526433283">"Sepotong piza"</string>
+ <string name="spoken_emoji_1F356" msgid="2667196119149852244">"Daging pada tulang"</string>
+ <string name="spoken_emoji_1F357" msgid="8022817413851052256">"Kaki ayam"</string>
+ <string name="spoken_emoji_1F358" msgid="3042693264748036476">"Keropok beras"</string>
+ <string name="spoken_emoji_1F359" msgid="3988148661730121958">"Bebola beras"</string>
+ <string name="spoken_emoji_1F35A" msgid="1763824172198327268">"Nasi"</string>
+ <string name="spoken_emoji_1F35B" msgid="62530406745717835">"Kari dan nasi"</string>
+ <string name="spoken_emoji_1F35C" msgid="7537756539198945509">"Mangkuk mengukus"</string>
+ <string name="spoken_emoji_1F35D" msgid="8173523083861875196">"Spageti"</string>
+ <string name="spoken_emoji_1F35E" msgid="2935428307894662571">"Roti"</string>
+ <string name="spoken_emoji_1F35F" msgid="4840297386785728443">"Kentang goreng"</string>
+ <string name="spoken_emoji_1F360" msgid="4094659855684686801">"Ubi keledek panggang"</string>
+ <string name="spoken_emoji_1F361" msgid="6475486395784096109">"Dango"</string>
+ <string name="spoken_emoji_1F362" msgid="5004692577661076275">"Oden"</string>
+ <string name="spoken_emoji_1F363" msgid="1606603765717743806">"Sushi"</string>
+ <string name="spoken_emoji_1F364" msgid="6550457766169570811">"Udang goreng"</string>
+ <string name="spoken_emoji_1F365" msgid="4963815540953316307">"Kek ikan dengan corak pusaran"</string>
+ <string name="spoken_emoji_1F366" msgid="7862401745277049404">"Aiskrim lembut"</string>
+ <string name="spoken_emoji_1F367" msgid="7447972978281980414">"Ais kisar"</string>
+ <string name="spoken_emoji_1F368" msgid="7790003146142724913">"Aiskrim"</string>
+ <string name="spoken_emoji_1F369" msgid="7383712944084857350">"Donat"</string>
+ <string name="spoken_emoji_1F36A" msgid="2726271795913042295">"Biskut"</string>
+ <string name="spoken_emoji_1F36B" msgid="6342163604299875931">"Bar coklat"</string>
+ <string name="spoken_emoji_1F36C" msgid="2168934753998218790">"Kandi"</string>
+ <string name="spoken_emoji_1F36D" msgid="3671507903799975792">"Lolipop"</string>
+ <string name="spoken_emoji_1F36E" msgid="4630541402785165902">"Kastad"</string>
+ <string name="spoken_emoji_1F36F" msgid="5577915387425169439">"Bekas madu"</string>
+ <string name="spoken_emoji_1F370" msgid="7243244547866114951">"Kek rapuh"</string>
+ <string name="spoken_emoji_1F371" msgid="6731527040552916358">"Kotak Bento"</string>
+ <string name="spoken_emoji_1F372" msgid="1635035323832181733">"Seperiuk makanan"</string>
+ <string name="spoken_emoji_1F373" msgid="7799289534289221045">"Masakan"</string>
+ <string name="spoken_emoji_1F374" msgid="5973820884987069131">"Garpu dan pisau"</string>
+ <string name="spoken_emoji_1F375" msgid="1074832087699617700">"Cawan tanpa pemegang"</string>
+ <string name="spoken_emoji_1F376" msgid="6499274685584852067">"Botol Sake dan cawan"</string>
+ <string name="spoken_emoji_1F377" msgid="1762398562314172075">"Gelas wain"</string>
+ <string name="spoken_emoji_1F378" msgid="5528234560590117516">"Gelas koktel"</string>
+ <string name="spoken_emoji_1F379" msgid="790581290787943325">"Minuman tropika"</string>
+ <string name="spoken_emoji_1F37A" msgid="391966822450619516">"Kole bir"</string>
+ <string name="spoken_emoji_1F37B" msgid="9015043286465670662">"Kole bir dihantukkan"</string>
+ <string name="spoken_emoji_1F37C" msgid="2532113819464508894">"Botol bayi"</string>
+ <string name="spoken_emoji_1F380" msgid="3487363857092458827">"Reben"</string>
+ <string name="spoken_emoji_1F381" msgid="614180683680675444">"Hadiah berbalut"</string>
+ <string name="spoken_emoji_1F382" msgid="4720497171946687501">"Kek hari lahir"</string>
+ <string name="spoken_emoji_1F383" msgid="3536505941578757623">"Jack-o-lantern"</string>
+ <string name="spoken_emoji_1F384" msgid="1797870204479059004">"Pokok Krismas"</string>
+ <string name="spoken_emoji_1F385" msgid="1754174063483626367">"Santa Klaus"</string>
+ <string name="spoken_emoji_1F386" msgid="2130445450758114746">"Bunga api"</string>
+ <string name="spoken_emoji_1F387" msgid="3403182563117999933">"Bunga api berlian"</string>
+ <string name="spoken_emoji_1F388" msgid="2903047203723251804">"Belon"</string>
+ <string name="spoken_emoji_1F389" msgid="2352830665883549388">"Peletus konfeti"</string>
+ <string name="spoken_emoji_1F38A" msgid="6280428984773641322">"Bola Konfeti"</string>
+ <string name="spoken_emoji_1F38B" msgid="4902225837479015489">"Pokok Tanabata"</string>
+ <string name="spoken_emoji_1F38C" msgid="7623268024030989365">"Bendera berpalang"</string>
+ <string name="spoken_emoji_1F38D" msgid="8237542796124408528">"Hiasan pain"</string>
+ <string name="spoken_emoji_1F38E" msgid="5373397476238212371">"Anak patung Jepun"</string>
+ <string name="spoken_emoji_1F38F" msgid="8754091376829552844">"Ular-ular kap"</string>
+ <string name="spoken_emoji_1F390" msgid="8903307048095431374">"Loceng angin"</string>
+ <string name="spoken_emoji_1F391" msgid="2134952069191911841">"Majlis melihat bulan"</string>
+ <string name="spoken_emoji_1F392" msgid="6380405493914304737">"Beg galas sekolah"</string>
+ <string name="spoken_emoji_1F393" msgid="6947890064872470996">"Topi graduasi"</string>
+ <string name="spoken_emoji_1F3A0" msgid="3572095190082826057">"Kuda karusel"</string>
+ <string name="spoken_emoji_1F3A1" msgid="4300565511681058798">"Roda Ferris"</string>
+ <string name="spoken_emoji_1F3A2" msgid="15486093912232140">"Roller-coaster"</string>
+ <string name="spoken_emoji_1F3A3" msgid="921739319504942924">"Joran dan ikan"</string>
+ <string name="spoken_emoji_1F3A4" msgid="7497596355346856950">"Mikrofon"</string>
+ <string name="spoken_emoji_1F3A5" msgid="4290497821228183002">"Kamera filem"</string>
+ <string name="spoken_emoji_1F3A6" msgid="26019057872319055">"Pawagam"</string>
+ <string name="spoken_emoji_1F3A7" msgid="837856608794094105">"Fon kepala"</string>
+ <string name="spoken_emoji_1F3A8" msgid="2332260356509244587">"Palet Artis"</string>
+ <string name="spoken_emoji_1F3A9" msgid="9045869366525115256">"Topi"</string>
+ <string name="spoken_emoji_1F3AA" msgid="5728760354237132">"Khemas sarkas"</string>
+ <string name="spoken_emoji_1F3AB" msgid="1657997517193216284">"Tiket"</string>
+ <string name="spoken_emoji_1F3AC" msgid="4317366554314492152">"Papan ketap"</string>
+ <string name="spoken_emoji_1F3AD" msgid="607157286336130470">"Seni persembahan"</string>
+ <string name="spoken_emoji_1F3AE" msgid="2902308174671548150">"Permainan video"</string>
+ <string name="spoken_emoji_1F3AF" msgid="5420539221790296407">"Tepat pada sasaran"</string>
+ <string name="spoken_emoji_1F3B0" msgid="7440244806527891956">"Mesin slot"</string>
+ <string name="spoken_emoji_1F3B1" msgid="545544382391379234">"Biliard"</string>
+ <string name="spoken_emoji_1F3B2" msgid="8302262034774787493">"Dadu"</string>
+ <string name="spoken_emoji_1F3B3" msgid="5180870610771027520">"Boling"</string>
+ <string name="spoken_emoji_1F3B4" msgid="4723852033266071564">"Daun terup bunga"</string>
+ <string name="spoken_emoji_1F3B5" msgid="1998470239850548554">"Nota muzik"</string>
+ <string name="spoken_emoji_1F3B6" msgid="3827730457113941705">"Pelbagai nota muzik"</string>
+ <string name="spoken_emoji_1F3B7" msgid="5503403099445042180">"Saksofon"</string>
+ <string name="spoken_emoji_1F3B8" msgid="3985658156795011430">"Gitar"</string>
+ <string name="spoken_emoji_1F3B9" msgid="5596295757967881451">"Papan nada muzik"</string>
+ <string name="spoken_emoji_1F3BA" msgid="4284064120340683558">"Trompet"</string>
+ <string name="spoken_emoji_1F3BB" msgid="2856598510069988745">"Biola"</string>
+ <string name="spoken_emoji_1F3BC" msgid="1608424748821446230">"Skor muzik"</string>
+ <string name="spoken_emoji_1F3BD" msgid="5490786111375627777">"Baju berlari dengan selempang"</string>
+ <string name="spoken_emoji_1F3BE" msgid="1851613105691627931">"Raket dan bola tenis"</string>
+ <string name="spoken_emoji_1F3BF" msgid="6862405997423247921">"Ski dan but ski"</string>
+ <string name="spoken_emoji_1F3C0" msgid="7421420756115104085">"Bola keranjang dan gelung"</string>
+ <string name="spoken_emoji_1F3C1" msgid="6926537251677319922">"Bendera kotak-kotak"</string>
+ <string name="spoken_emoji_1F3C2" msgid="5708596929237987082">"Peluncur salji"</string>
+ <string name="spoken_emoji_1F3C3" msgid="5850982999510115824">"Pelari"</string>
+ <string name="spoken_emoji_1F3C4" msgid="8468355585994639838">"Peluncur"</string>
+ <string name="spoken_emoji_1F3C6" msgid="9094474706847545409">"Trofi"</string>
+ <string name="spoken_emoji_1F3C7" msgid="8172206200368370116">"Lumba kuda"</string>
+ <string name="spoken_emoji_1F3C8" msgid="5619171461277597709">"Bola sepak Amerika"</string>
+ <string name="spoken_emoji_1F3C9" msgid="6371294008765871043">"Bola sepak ragbi"</string>
+ <string name="spoken_emoji_1F3CA" msgid="130977831787806932">"Perenang"</string>
+ <string name="spoken_emoji_1F3E0" msgid="6277213201655811842">"Bangunan rumah"</string>
+ <string name="spoken_emoji_1F3E1" msgid="233476176077538885">"Rumah dengan taman"</string>
+ <string name="spoken_emoji_1F3E2" msgid="919736380093964570">"Bangunan pejabat"</string>
+ <string name="spoken_emoji_1F3E3" msgid="6177606081825094184">"Pejabat pos Jepun"</string>
+ <string name="spoken_emoji_1F3E4" msgid="717377871070970293">"Pejabat pos Eropah"</string>
+ <string name="spoken_emoji_1F3E5" msgid="1350532500431776780">"Hospital"</string>
+ <string name="spoken_emoji_1F3E6" msgid="342132788513806214">"Bank"</string>
+ <string name="spoken_emoji_1F3E7" msgid="6322352038284944265">"Mesin teler automatik"</string>
+ <string name="spoken_emoji_1F3E8" msgid="5864918444350599907">"Hotel"</string>
+ <string name="spoken_emoji_1F3E9" msgid="7830416185375326938">"Hotel cinta"</string>
+ <string name="spoken_emoji_1F3EA" msgid="5081084413084360479">"Kedai serbaneka"</string>
+ <string name="spoken_emoji_1F3EB" msgid="7010966528205150525">"Sekolah"</string>
+ <string name="spoken_emoji_1F3EC" msgid="4845978861878295154">"Gedung beli-belah"</string>
+ <string name="spoken_emoji_1F3ED" msgid="3980316226665215370">"Kilang"</string>
+ <string name="spoken_emoji_1F3EE" msgid="1253964276770550248">"Tanglung izakaya"</string>
+ <string name="spoken_emoji_1F3EF" msgid="1128975573507389883">"Istana Jepun"</string>
+ <string name="spoken_emoji_1F3F0" msgid="1544632297502291578">"Istana Eropah"</string>
+ <string name="spoken_emoji_1F400" msgid="2063034795679578294">"Tikus"</string>
+ <string name="spoken_emoji_1F401" msgid="6736421616217369594">"Tikus"</string>
+ <string name="spoken_emoji_1F402" msgid="7276670995895485604">"Lembu jantan"</string>
+ <string name="spoken_emoji_1F403" msgid="8045709541897118928">"Kerbau"</string>
+ <string name="spoken_emoji_1F404" msgid="5240777285676662335">"Lembu"</string>
+ <string name="spoken_emoji_1F406" msgid="5163461930159540018">"Harimau Bintang"</string>
+ <string name="spoken_emoji_1F407" msgid="6905370221172708160">"Arnab"</string>
+ <string name="spoken_emoji_1F408" msgid="1362164550508207284">"Kucing"</string>
+ <string name="spoken_emoji_1F409" msgid="8476130983168866013">"Naga"</string>
+ <string name="spoken_emoji_1F40A" msgid="1149626786411545043">"Buaya"</string>
+ <string name="spoken_emoji_1F40B" msgid="5199104921208397643">"Ikan paus"</string>
+ <string name="spoken_emoji_1F40C" msgid="2704006052881702675">"Siput"</string>
+ <string name="spoken_emoji_1F40D" msgid="8648186663643157522">"Ular"</string>
+ <string name="spoken_emoji_1F40E" msgid="7219137467573327268">"Kuda"</string>
+ <string name="spoken_emoji_1F40F" msgid="7834336676729040395">"Biri-biri jantan"</string>
+ <string name="spoken_emoji_1F410" msgid="8686765722255775031">"Kambing"</string>
+ <string name="spoken_emoji_1F411" msgid="3585715397876383525">"Biri-biri"</string>
+ <string name="spoken_emoji_1F412" msgid="4924794582980077838">"Monyet"</string>
+ <string name="spoken_emoji_1F413" msgid="1460475310405677377">"Ayam jantan"</string>
+ <string name="spoken_emoji_1F414" msgid="5857296282631892219">"Ayam"</string>
+ <string name="spoken_emoji_1F415" msgid="5920041074892949527">"Anjing"</string>
+ <string name="spoken_emoji_1F416" msgid="4362403392912540286">"Babi"</string>
+ <string name="spoken_emoji_1F417" msgid="6836978415840795128">"Babi hutan"</string>
+ <string name="spoken_emoji_1F418" msgid="7926161463897783691">"Gajah"</string>
+ <string name="spoken_emoji_1F419" msgid="1055233959755784186">"Kurita"</string>
+ <string name="spoken_emoji_1F41A" msgid="5195666556511558060">"Cengkerang berpusar"</string>
+ <string name="spoken_emoji_1F41B" msgid="7652480167465557832">"Pepijat"</string>
+ <string name="spoken_emoji_1F41C" msgid="1123461148697574239">"Semut"</string>
+ <string name="spoken_emoji_1F41D" msgid="718579308764058851">"Lebah madu"</string>
+ <string name="spoken_emoji_1F41E" msgid="6766305509608115467">"Kumbang kura-kura"</string>
+ <string name="spoken_emoji_1F41F" msgid="1207261298343160838">"Ikan"</string>
+ <string name="spoken_emoji_1F420" msgid="1041145003133609221">"Ikan tropika"</string>
+ <string name="spoken_emoji_1F421" msgid="1748378324417438751">"Ikan buntal"</string>
+ <string name="spoken_emoji_1F422" msgid="4106724877523329148">"Penyu"</string>
+ <string name="spoken_emoji_1F423" msgid="4077407945958691907">"Anak ayam menetas"</string>
+ <string name="spoken_emoji_1F424" msgid="6911326019270172283">"Anak ayam"</string>
+ <string name="spoken_emoji_1F425" msgid="5466514196557885577">"Anak ayam menghadap depan"</string>
+ <string name="spoken_emoji_1F426" msgid="2163979138772892755">"Burung"</string>
+ <string name="spoken_emoji_1F427" msgid="3585670324511212961">"Penguin"</string>
+ <string name="spoken_emoji_1F428" msgid="7955440808647898579">"Koala"</string>
+ <string name="spoken_emoji_1F429" msgid="5028269352809819035">"Poodle"</string>
+ <string name="spoken_emoji_1F42A" msgid="4681926706404032484">"Unta dromedaris"</string>
+ <string name="spoken_emoji_1F42B" msgid="2725166074981558322">"Unta Bactrian"</string>
+ <string name="spoken_emoji_1F42C" msgid="6764791873413727085">"Dolfin"</string>
+ <string name="spoken_emoji_1F42D" msgid="1033643138546864251">"Muka tikus"</string>
+ <string name="spoken_emoji_1F42E" msgid="8099223337120508820">"Muka lembu"</string>
+ <string name="spoken_emoji_1F42F" msgid="2104743989330781572">"Muka harimau"</string>
+ <string name="spoken_emoji_1F430" msgid="525492897063150160">"Muka arnab"</string>
+ <string name="spoken_emoji_1F431" msgid="6051358666235016851">"Muka kucing"</string>
+ <string name="spoken_emoji_1F432" msgid="7698001871193018305">"Muka naga"</string>
+ <string name="spoken_emoji_1F433" msgid="3762356053512899326">"Ikan paut memancutkan air"</string>
+ <string name="spoken_emoji_1F434" msgid="3619943222159943226">"Muka kuda"</string>
+ <string name="spoken_emoji_1F435" msgid="59199202683252958">"Muka monyet"</string>
+ <string name="spoken_emoji_1F436" msgid="340544719369009828">"Muka anjing"</string>
+ <string name="spoken_emoji_1F437" msgid="1219818379784982585">"Muka babi"</string>
+ <string name="spoken_emoji_1F438" msgid="9128124743321008210">"Muka katak"</string>
+ <string name="spoken_emoji_1F439" msgid="1424161319554642266">"Muka hamster"</string>
+ <string name="spoken_emoji_1F43A" msgid="6727645488430385584">"Muka serigala"</string>
+ <string name="spoken_emoji_1F43B" msgid="5397170068392865167">"Muka beruang"</string>
+ <string name="spoken_emoji_1F43C" msgid="2715995734367032431">"Muka panda"</string>
+ <string name="spoken_emoji_1F43D" msgid="6005480717951776597">"Hidung babi"</string>
+ <string name="spoken_emoji_1F43E" msgid="8917626103219080547">"Kesan tapak"</string>
+ <string name="spoken_emoji_1F440" msgid="7144338258163384433">"Mata"</string>
+ <string name="spoken_emoji_1F442" msgid="1905515392292676124">"Telinga"</string>
+ <string name="spoken_emoji_1F443" msgid="1491504447758933115">"Hidung"</string>
+ <string name="spoken_emoji_1F444" msgid="3654613047946080332">"Mulut"</string>
+ <string name="spoken_emoji_1F445" msgid="7024905244040509204">"Lidah"</string>
+ <string name="spoken_emoji_1F446" msgid="2150365643636471745">"Tangan putih menunjuk ke atas"</string>
+ <string name="spoken_emoji_1F447" msgid="8794022344940891388">"Tangan putih menunjuk ke bawah"</string>
+ <string name="spoken_emoji_1F448" msgid="3261812959215550650">"Tangan putih menunjuk ke kiri"</string>
+ <string name="spoken_emoji_1F449" msgid="4764447975177805991">"Tangan putih menunjuk ke kanan"</string>
+ <string name="spoken_emoji_1F44A" msgid="7197417095486424841">"Isyarat enumbuk"</string>
+ <string name="spoken_emoji_1F44B" msgid="1975968945250833117">"Isyarat tangan melambai"</string>
+ <string name="spoken_emoji_1F44C" msgid="3185919567897876562">"Isyarat ok"</string>
+ <string name="spoken_emoji_1F44D" msgid="6182553970602667815">"Isyarat bagus"</string>
+ <string name="spoken_emoji_1F44E" msgid="8030851867365111809">"Isyarat tidak bagus"</string>
+ <string name="spoken_emoji_1F44F" msgid="5148753662268213389">"Isyarat bertepuk tangan"</string>
+ <string name="spoken_emoji_1F450" msgid="1012021072085157054">"Isyarat tangan terbuka"</string>
+ <string name="spoken_emoji_1F451" msgid="8257466714629051320">"Mahkota"</string>
+ <string name="spoken_emoji_1F452" msgid="4567394011149905466">"Topi wanita"</string>
+ <string name="spoken_emoji_1F453" msgid="5978410551173163010">"Cermin mata"</string>
+ <string name="spoken_emoji_1F454" msgid="348469036193323252">"Tali leher"</string>
+ <string name="spoken_emoji_1F455" msgid="5665118831861433578">"Kemeja T"</string>
+ <string name="spoken_emoji_1F456" msgid="1890991330923356408">"Jean"</string>
+ <string name="spoken_emoji_1F457" msgid="3904310482655702620">"Gaun"</string>
+ <string name="spoken_emoji_1F458" msgid="5704243858031107692">"Kimono"</string>
+ <string name="spoken_emoji_1F459" msgid="3553148747050035251">"Bikini"</string>
+ <string name="spoken_emoji_1F45A" msgid="1389654639484716101">"Pakaian wanita"</string>
+ <string name="spoken_emoji_1F45B" msgid="1113293170254222904">"Beg duit"</string>
+ <string name="spoken_emoji_1F45C" msgid="3410257778598006936">"Beg tangan"</string>
+ <string name="spoken_emoji_1F45D" msgid="812176504300064819">"Dompet"</string>
+ <string name="spoken_emoji_1F45E" msgid="2901741399934723562">"Kasut lelaki"</string>
+ <string name="spoken_emoji_1F45F" msgid="6828566359287798863">"Kasut sukan"</string>
+ <string name="spoken_emoji_1F460" msgid="305863879170420855">"Kasut tumit tinggi"</string>
+ <string name="spoken_emoji_1F461" msgid="5160493217831417630">"Sandal wanita"</string>
+ <string name="spoken_emoji_1F462" msgid="1722897795554863734">"But wanita"</string>
+ <string name="spoken_emoji_1F463" msgid="5850772903593010699">"Tapak kaki"</string>
+ <string name="spoken_emoji_1F464" msgid="1228335905487734913">"Bayang patung"</string>
+ <string name="spoken_emoji_1F465" msgid="4461307702499679879">"Bayang patung"</string>
+ <string name="spoken_emoji_1F466" msgid="1938873085514108889">"Budak lelaki"</string>
+ <string name="spoken_emoji_1F467" msgid="8237080594860144998">"Budak perempuan"</string>
+ <string name="spoken_emoji_1F468" msgid="6081300722526675382">"Lelaki"</string>
+ <string name="spoken_emoji_1F469" msgid="1090140923076108158">"Wanita"</string>
+ <string name="spoken_emoji_1F46A" msgid="5063570981942606595">"Keluarga"</string>
+ <string name="spoken_emoji_1F46B" msgid="6795882374287327952">"Lelaki dan wanita berpegangan tangan"</string>
+ <string name="spoken_emoji_1F46C" msgid="6844464165783964495">"Dua lelaki berpegangan tangan"</string>
+ <string name="spoken_emoji_1F46D" msgid="2316773068014053180">"Dua wanita berpegangan tangan"</string>
+ <string name="spoken_emoji_1F46E" msgid="5897625605860822401">"Pegawai polis"</string>
+ <string name="spoken_emoji_1F46F" msgid="7716871657717641490">"Wanita dengan telinga arnab"</string>
+ <string name="spoken_emoji_1F470" msgid="6409995400510338892">"Pengantin dengan vel"</string>
+ <string name="spoken_emoji_1F471" msgid="3058247860441670806">"Orang berambut perang"</string>
+ <string name="spoken_emoji_1F472" msgid="3928854667819339142">"Lelaki dengan gua pi mao"</string>
+ <string name="spoken_emoji_1F473" msgid="5921952095808988381">"Lelaki berserban"</string>
+ <string name="spoken_emoji_1F474" msgid="1082237499496725183">"Lelaki lebih tua"</string>
+ <string name="spoken_emoji_1F475" msgid="7280323988642212761">"Wanita lebih tua"</string>
+ <string name="spoken_emoji_1F476" msgid="4713322657821088296">"Bayi"</string>
+ <string name="spoken_emoji_1F477" msgid="2197036131029221370">"Buruh binaan"</string>
+ <string name="spoken_emoji_1F478" msgid="7245521193493488875">"Puteri"</string>
+ <string name="spoken_emoji_1F479" msgid="6876475321015553972">"Gergasi Jepun"</string>
+ <string name="spoken_emoji_1F47A" msgid="3900813633102703571">"Jembalang Jepun"</string>
+ <string name="spoken_emoji_1F47B" msgid="2608250873194079390">"Bebayang"</string>
+ <string name="spoken_emoji_1F47C" msgid="3838699131276537421">"Malaikat kecil"</string>
+ <string name="spoken_emoji_1F47D" msgid="2874077455888369538">"Makhluk asing"</string>
+ <string name="spoken_emoji_1F47E" msgid="3642607168625579507">"Raksasa asing"</string>
+ <string name="spoken_emoji_1F47F" msgid="441605977269926252">"Imp"</string>
+ <string name="spoken_emoji_1F480" msgid="3696253485164878739">"Tengkorak"</string>
+ <string name="spoken_emoji_1F481" msgid="320408708521966893">"Orang meja maklumat"</string>
+ <string name="spoken_emoji_1F482" msgid="3424354860245608949">"Pengawal"</string>
+ <string name="spoken_emoji_1F483" msgid="3221113594843849083">"Penari"</string>
+ <string name="spoken_emoji_1F484" msgid="7348014979080444885">"Gincu"</string>
+ <string name="spoken_emoji_1F485" msgid="6133507975565116339">"Pengilat kuku"</string>
+ <string name="spoken_emoji_1F486" msgid="9085459968247394155">"Urutan muka"</string>
+ <string name="spoken_emoji_1F487" msgid="1479113637259592150">"Gunting rambut"</string>
+ <string name="spoken_emoji_1F488" msgid="6922559285234100252">"Jalur Tukang Gunting Rambut"</string>
+ <string name="spoken_emoji_1F489" msgid="8114863680950147305">"Picagari"</string>
+ <string name="spoken_emoji_1F48A" msgid="8526843630145963032">"Pil"</string>
+ <string name="spoken_emoji_1F48B" msgid="2538528967897640292">"Tanda ciuman"</string>
+ <string name="spoken_emoji_1F48C" msgid="1681173271652890232">"Surat cinta"</string>
+ <string name="spoken_emoji_1F48D" msgid="8259886164999042373">"Cincin"</string>
+ <string name="spoken_emoji_1F48E" msgid="8777981696011111101">"Batu permata"</string>
+ <string name="spoken_emoji_1F48F" msgid="741593675183677907">"Ciuman"</string>
+ <string name="spoken_emoji_1F490" msgid="4482549128959806736">"Jambak bunga"</string>
+ <string name="spoken_emoji_1F491" msgid="2305245307882441500">"Pasangan dengan hati"</string>
+ <string name="spoken_emoji_1F492" msgid="3884119934804475732">"Perkahwinan"</string>
+ <string name="spoken_emoji_1F493" msgid="1208828371565525121">"Jantung berdegup"</string>
+ <string name="spoken_emoji_1F494" msgid="6198876398509338718">"Patah hati"</string>
+ <string name="spoken_emoji_1F495" msgid="9206202744967130919">"Dua hati"</string>
+ <string name="spoken_emoji_1F496" msgid="5436953041732207775">"Hati berkilauan"</string>
+ <string name="spoken_emoji_1F497" msgid="7285142863951448473">"Hati berkembang"</string>
+ <string name="spoken_emoji_1F498" msgid="7940131245037575715">"Hati dengan anak panah"</string>
+ <string name="spoken_emoji_1F499" msgid="4453235040265550009">"Hati biru"</string>
+ <string name="spoken_emoji_1F49A" msgid="6262178648366971405">"Hati hijau"</string>
+ <string name="spoken_emoji_1F49B" msgid="8085384999750714368">"Hati kuning"</string>
+ <string name="spoken_emoji_1F49C" msgid="453829540120898698">"Hati ungu"</string>
+ <string name="spoken_emoji_1F49D" msgid="3460534750224161888">"Hati dengan riben"</string>
+ <string name="spoken_emoji_1F49E" msgid="4490636226072523867">"Hati berputar"</string>
+ <string name="spoken_emoji_1F49F" msgid="2059319756421226336">"Hiasan hati"</string>
+ <string name="spoken_emoji_1F4A0" msgid="1954850380550212038">"Bentuk berlian dengan titik di dalam"</string>
+ <string name="spoken_emoji_1F4A1" msgid="403137413540909021">"Mentol elektrik"</string>
+ <string name="spoken_emoji_1F4A2" msgid="2604192053295622063">"Simbol kemarahan"</string>
+ <string name="spoken_emoji_1F4A3" msgid="6378351742957821735">"Bom"</string>
+ <string name="spoken_emoji_1F4A4" msgid="7217736258870346625">"Simbol tidur"</string>
+ <string name="spoken_emoji_1F4A5" msgid="5401995723541239858">"Simbol pelanggaran"</string>
+ <string name="spoken_emoji_1F4A6" msgid="3837802182716483848">"Simbol peluh memercik"</string>
+ <string name="spoken_emoji_1F4A7" msgid="5718438987757885141">"Titik kecil"</string>
+ <string name="spoken_emoji_1F4A8" msgid="4472108229720006377">"Simbol sengkang"</string>
+ <string name="spoken_emoji_1F4A9" msgid="1240958472788430032">"Timbunan najis"</string>
+ <string name="spoken_emoji_1F4AA" msgid="8427525538635146416">"Biseps dilenturtegang"</string>
+ <string name="spoken_emoji_1F4AB" msgid="5484114759939427459">"Simbol pening"</string>
+ <string name="spoken_emoji_1F4AC" msgid="5571196638219612682">"Belon pertuturan"</string>
+ <string name="spoken_emoji_1F4AD" msgid="353174619257798652">"Belon pemikiran"</string>
+ <string name="spoken_emoji_1F4AE" msgid="1223142786927162641">"Bunga putih"</string>
+ <string name="spoken_emoji_1F4AF" msgid="3526278354452138397">"Simbol seratus mata"</string>
+ <string name="spoken_emoji_1F4B0" msgid="4124102195175124156">"Beg wang"</string>
+ <string name="spoken_emoji_1F4B1" msgid="8339494003418572905">"Pertukaran mata wang"</string>
+ <string name="spoken_emoji_1F4B2" msgid="3179159430187243132">"Isyarat dolar tebal"</string>
+ <string name="spoken_emoji_1F4B3" msgid="5375412518221759596">"Kad kredit"</string>
+ <string name="spoken_emoji_1F4B4" msgid="1068592463669453204">"Wang kertas dengan tanda yen"</string>
+ <string name="spoken_emoji_1F4B5" msgid="1426708699891832564">"Wang kertas dengan tanda dolar"</string>
+ <string name="spoken_emoji_1F4B6" msgid="8289249930736444837">"Wang kertas dengan tanda euro"</string>
+ <string name="spoken_emoji_1F4B7" msgid="5245100496860739429">"Wang kertas dengan tanda pound"</string>
+ <string name="spoken_emoji_1F4B8" msgid="4401099580477164440">"Wang dengan sayap"</string>
+ <string name="spoken_emoji_1F4B9" msgid="647509393536679903">"Carta dengan aliran ke atas dan tanda yen"</string>
+ <string name="spoken_emoji_1F4BA" msgid="1269737854891046321">"Tempat duduk"</string>
+ <string name="spoken_emoji_1F4BB" msgid="6252883563347816451">"Komputer peribadi"</string>
+ <string name="spoken_emoji_1F4BC" msgid="6182597732218446206">"Beg bimbit"</string>
+ <string name="spoken_emoji_1F4BD" msgid="5820961044768829176">"Minicakera"</string>
+ <string name="spoken_emoji_1F4BE" msgid="4754542485835379808">"Cakera liut"</string>
+ <string name="spoken_emoji_1F4BF" msgid="2237481756984721795">"Cakera optik"</string>
+ <string name="spoken_emoji_1F4C0" msgid="491582501089694461">"Dvd"</string>
+ <string name="spoken_emoji_1F4C1" msgid="6645461382494158111">"Folder fail"</string>
+ <string name="spoken_emoji_1F4C2" msgid="8095638715523765338">"Buka folder fail"</string>
+ <string name="spoken_emoji_1F4C3" msgid="3727274466173970142">"Halaman bergulung"</string>
+ <string name="spoken_emoji_1F4C4" msgid="4382570710795501612">"Halaman menghadap ke atas"</string>
+ <string name="spoken_emoji_1F4C5" msgid="8693944622627762487">"Kalendar"</string>
+ <string name="spoken_emoji_1F4C6" msgid="8469908708708424640">"Kalendar koyak"</string>
+ <string name="spoken_emoji_1F4C7" msgid="2665313547987324495">"Kad indeks"</string>
+ <string name="spoken_emoji_1F4C8" msgid="8007686702282833600">"Carta dengan aliran ke atas"</string>
+ <string name="spoken_emoji_1F4C9" msgid="2271951411192893684">"Carta dengan aliran ke bawah"</string>
+ <string name="spoken_emoji_1F4CA" msgid="3525692829622381444">"Carta bar"</string>
+ <string name="spoken_emoji_1F4CB" msgid="977639227554095521">"Papan Keratan"</string>
+ <string name="spoken_emoji_1F4CC" msgid="156107396088741574">"Pin tekan"</string>
+ <string name="spoken_emoji_1F4CD" msgid="4266572175361190231">"Pin tekan bulat"</string>
+ <string name="spoken_emoji_1F4CE" msgid="6294288509864968290">"Klip kertas"</string>
+ <string name="spoken_emoji_1F4CF" msgid="149679400831136810">"Pembaris lurus"</string>
+ <string name="spoken_emoji_1F4D0" msgid="8130339336619202915">"Pembaris segi tiga"</string>
+ <string name="spoken_emoji_1F4D1" msgid="5852176364856284968">"Tab penanda halaman"</string>
+ <string name="spoken_emoji_1F4D2" msgid="2276810154105920052">"Lejar"</string>
+ <string name="spoken_emoji_1F4D3" msgid="5873386492793610808">"Buku Nota"</string>
+ <string name="spoken_emoji_1F4D4" msgid="4754469936418776360">"Buku nota dengan kulit bercorak"</string>
+ <string name="spoken_emoji_1F4D5" msgid="4642713351802778905">"Buku tertutup"</string>
+ <string name="spoken_emoji_1F4D6" msgid="6987347918381807186">"Buku terbuka"</string>
+ <string name="spoken_emoji_1F4D7" msgid="7813394163241379223">"Buku hijau"</string>
+ <string name="spoken_emoji_1F4D8" msgid="7189799718984979521">"Buku biru"</string>
+ <string name="spoken_emoji_1F4D9" msgid="3874664073186440225">"Buku jingga"</string>
+ <string name="spoken_emoji_1F4DA" msgid="872212072924287762">"Buku"</string>
+ <string name="spoken_emoji_1F4DB" msgid="2015183603583392969">"Lencana nama"</string>
+ <string name="spoken_emoji_1F4DC" msgid="5075845110932456783">"Skrol"</string>
+ <string name="spoken_emoji_1F4DD" msgid="2494006707147586786">"Memo"</string>
+ <string name="spoken_emoji_1F4DE" msgid="7883008605002117671">"Gagang telefon"</string>
+ <string name="spoken_emoji_1F4DF" msgid="3538610110623780465">"Alat kelui"</string>
+ <string name="spoken_emoji_1F4E0" msgid="2960778342609543077">"Mesin faks"</string>
+ <string name="spoken_emoji_1F4E1" msgid="6269733703719242108">"Antena satelit"</string>
+ <string name="spoken_emoji_1F4E2" msgid="1987535386302883116">"Pembesar suara pengumuman awam"</string>
+ <string name="spoken_emoji_1F4E3" msgid="5588916572878599224">"Megafon sorakan"</string>
+ <string name="spoken_emoji_1F4E4" msgid="2063561529097749707">"Dulang peti keluar"</string>
+ <string name="spoken_emoji_1F4E5" msgid="3232462702926143576">"Dulang peti masuk"</string>
+ <string name="spoken_emoji_1F4E6" msgid="3399454337197561635">"Pakej"</string>
+ <string name="spoken_emoji_1F4E7" msgid="5557136988503873238">"Simbol e-mel"</string>
+ <string name="spoken_emoji_1F4E8" msgid="30698793974124123">"Sampul surat masuk"</string>
+ <string name="spoken_emoji_1F4E9" msgid="5947550337678643166">"Sampul surat dengan anak panah ke bawah di atas"</string>
+ <string name="spoken_emoji_1F4EA" msgid="772614045207213751">"Peti mel tertutup dengan bendera diturunkan"</string>
+ <string name="spoken_emoji_1F4EB" msgid="6491414165464146137">"Peti mel tertutup dengan bendera dinaikkan"</string>
+ <string name="spoken_emoji_1F4EC" msgid="7369517138779988438">"Peti mel terbuka dengan bendera dinaikkan"</string>
+ <string name="spoken_emoji_1F4ED" msgid="5657520436285454241">"Peti mel terbuka dengan bendera diturunkan"</string>
+ <string name="spoken_emoji_1F4EE" msgid="8464138906243608614">"Peti surat"</string>
+ <string name="spoken_emoji_1F4EF" msgid="8801427577198798226">"Hon pos"</string>
+ <string name="spoken_emoji_1F4F0" msgid="6330208624731662525">"Surat khabar"</string>
+ <string name="spoken_emoji_1F4F1" msgid="3966503935581675695">"Telefon mudah alih"</string>
+ <string name="spoken_emoji_1F4F2" msgid="1057540341746100087">"Telefon mudah alih dengan anak panah hala kanan di sebelah kiri"</string>
+ <string name="spoken_emoji_1F4F3" msgid="5003984447315754658">"Mod getaran"</string>
+ <string name="spoken_emoji_1F4F4" msgid="5549847566968306253">"Telefon mudah alih dimatikan"</string>
+ <string name="spoken_emoji_1F4F5" msgid="3660199448671699238">"Tiada telefon mudah alih"</string>
+ <string name="spoken_emoji_1F4F6" msgid="2676974903233268860">"Antena dengan bar"</string>
+ <string name="spoken_emoji_1F4F7" msgid="2643891943105989039">"Kamera"</string>
+ <string name="spoken_emoji_1F4F9" msgid="4475626303058218048">"Kamera video"</string>
+ <string name="spoken_emoji_1F4FA" msgid="1079796186652960775">"Televisyen"</string>
+ <string name="spoken_emoji_1F4FB" msgid="3848729587403760645">"Radio"</string>
+ <string name="spoken_emoji_1F4FC" msgid="8370432508874310054">"Kaset Video"</string>
+ <string name="spoken_emoji_1F500" msgid="2389947994502144547">"Anak panah hala kanan berpintal"</string>
+ <string name="spoken_emoji_1F501" msgid="2132188352433347009">"Anak panah bulatan terbuka hala kanan dan hala kiri mengikut arah jam"</string>
+ <string name="spoken_emoji_1F502" msgid="2361976580513178391">"Anak panah bulatan terbuka hala kanan dan hala kiri mengikut arah jam dengan tindihan satu dalam bulatan"</string>
+ <string name="spoken_emoji_1F503" msgid="8936283551917858793">"Anak panah bulatan terbuka menurun dan menaik mengikut arah jam"</string>
+ <string name="spoken_emoji_1F504" msgid="708290317843535943">"Anak panah bulatan terbuka menurun dan menaik lawan arah jam"</string>
+ <string name="spoken_emoji_1F505" msgid="6348909939004951860">"Simbol cahaya rendah"</string>
+ <string name="spoken_emoji_1F506" msgid="4449609297521280173">"Simbol cahaya tinggi"</string>
+ <string name="spoken_emoji_1F507" msgid="7136386694923708448">"Pembesar suara dengan garisan pembatalan"</string>
+ <string name="spoken_emoji_1F508" msgid="5063567689831527865">"Pembesar suara"</string>
+ <string name="spoken_emoji_1F509" msgid="3948050077992370791">"Pembesar suara dengan satu gelombang bunyi"</string>
+ <string name="spoken_emoji_1F50A" msgid="5818194948677277197">"Pembesar suara dengan tiga gelombang bunyi"</string>
+ <string name="spoken_emoji_1F50B" msgid="8083470451266295876">"Bateri"</string>
+ <string name="spoken_emoji_1F50C" msgid="7793219132036431680">"Palam elektrik"</string>
+ <string name="spoken_emoji_1F50D" msgid="8140244710637926780">"Kanta pembesar menunjuk ke kiri"</string>
+ <string name="spoken_emoji_1F50E" msgid="4751821352839693365">"Kata pembesar menunjuk ke kanan"</string>
+ <string name="spoken_emoji_1F50F" msgid="915079280472199605">"Mangga dengan pen dakwat"</string>
+ <string name="spoken_emoji_1F510" msgid="7658381761691758318">"Mangga tertutup dengan kunci"</string>
+ <string name="spoken_emoji_1F511" msgid="262319867774655688">"Anak kunci"</string>
+ <string name="spoken_emoji_1F512" msgid="5628688337255115175">"Mangga"</string>
+ <string name="spoken_emoji_1F513" msgid="8579201846619420981">"Mangga terbuka"</string>
+ <string name="spoken_emoji_1F514" msgid="7027268683047322521">"Loceng"</string>
+ <string name="spoken_emoji_1F515" msgid="8903179856036069242">"Loceng dengan garisan pembatalan"</string>
+ <string name="spoken_emoji_1F516" msgid="108097933937925381">"Penanda halaman"</string>
+ <string name="spoken_emoji_1F517" msgid="2450846665734313397">"Simbol pautan"</string>
+ <string name="spoken_emoji_1F518" msgid="7028220286841437832">"Butang radio"</string>
+ <string name="spoken_emoji_1F519" msgid="8211189165075445687">"Kembali dengan anak panah hala kiri di atas"</string>
+ <string name="spoken_emoji_1F51A" msgid="823966751787338892">"Akhir dengan anak panah hala kiri di atas"</string>
+ <string name="spoken_emoji_1F51B" msgid="5920570742107943382">"Hidup dengan tanda seruan dengan anak panah kiri kanan di atas"</string>
+ <string name="spoken_emoji_1F51C" msgid="110609810659826676">"Tidak lama lagi dengan anak panah hala kiri di atas"</string>
+ <string name="spoken_emoji_1F51D" msgid="4087697222026095447">"Atas dengan anak panah hala atas di atas"</string>
+ <string name="spoken_emoji_1F51E" msgid="8512873526157201775">"Simbol tiada sesiapa di bawah umur 18 tahun"</string>
+ <string name="spoken_emoji_1F51F" msgid="8673370823728653973">"Butang kekunci sepuluh"</string>
+ <string name="spoken_emoji_1F520" msgid="7335109890337048900">"Simbol input huruf besar latin"</string>
+ <string name="spoken_emoji_1F521" msgid="2693185864450925778">"Simbol input huruf kecil latin"</string>
+ <string name="spoken_emoji_1F522" msgid="8419130286280673347">"Simbol input nombor"</string>
+ <string name="spoken_emoji_1F523" msgid="3318053476401719421">"Simbol input untuk simbol"</string>
+ <string name="spoken_emoji_1F524" msgid="1625073997522316331">"Simbol input huruf latin"</string>
+ <string name="spoken_emoji_1F525" msgid="4083884189172963790">"Api"</string>
+ <string name="spoken_emoji_1F526" msgid="2035494936742643580">"Lampu suluh"</string>
+ <string name="spoken_emoji_1F527" msgid="134257142354034271">"Sepana"</string>
+ <string name="spoken_emoji_1F528" msgid="700627429570609375">"Tukul"</string>
+ <string name="spoken_emoji_1F529" msgid="7480548235904988573">"Nat dan bolt"</string>
+ <string name="spoken_emoji_1F52A" msgid="7613580031502317893">"Hocho"</string>
+ <string name="spoken_emoji_1F52B" msgid="4554906608328118613">"Pistol"</string>
+ <string name="spoken_emoji_1F52C" msgid="1330294501371770790">"Mikroskop"</string>
+ <string name="spoken_emoji_1F52D" msgid="7549551775445177140">"Teleskop"</string>
+ <string name="spoken_emoji_1F52E" msgid="4457099417872625141">"Bola kristal"</string>
+ <string name="spoken_emoji_1F52F" msgid="8899031001317442792">"Bintang berbucu enam dengan titik tengah"</string>
+ <string name="spoken_emoji_1F530" msgid="3572898444281774023">"Simbol Jepun untuk perantis"</string>
+ <string name="spoken_emoji_1F531" msgid="5225633376450025396">"Lambang trisula"</string>
+ <string name="spoken_emoji_1F532" msgid="9169568490485180779">"Butang empat segi hitam"</string>
+ <string name="spoken_emoji_1F533" msgid="6554193837201918598">"Butang empat segi putih"</string>
+ <string name="spoken_emoji_1F534" msgid="8339298801331865340">"Bulatan merah besar"</string>
+ <string name="spoken_emoji_1F535" msgid="1227403104835533512">"Bulatan biru besar"</string>
+ <string name="spoken_emoji_1F536" msgid="5477372445510469331">"Berlian oren besar"</string>
+ <string name="spoken_emoji_1F537" msgid="3158915214347274626">"Berlian biru besar"</string>
+ <string name="spoken_emoji_1F538" msgid="4300084249474451991">"Berlian oren kecil"</string>
+ <string name="spoken_emoji_1F539" msgid="6535159756325742275">"Berlian biru kecil"</string>
+ <string name="spoken_emoji_1F53A" msgid="3728196273988781389">"Segi tiga merah menunjuk ke atas"</string>
+ <string name="spoken_emoji_1F53B" msgid="7182097039614128707">"Segi tiga merah menunjuk ke bawah"</string>
+ <string name="spoken_emoji_1F53C" msgid="4077022046319615029">"Segi tiga merah kecil menunjuk ke atas"</string>
+ <string name="spoken_emoji_1F53D" msgid="3939112784894620713">"Segi tiga merah kecil menunjuk ke bawah"</string>
+ <string name="spoken_emoji_1F550" msgid="7761392621689986218">"Muka jam pukul satu"</string>
+ <string name="spoken_emoji_1F551" msgid="2699448504113431716">"Muka jam pukul dua"</string>
+ <string name="spoken_emoji_1F552" msgid="5872107867411853750">"Muka jam pukul tiga"</string>
+ <string name="spoken_emoji_1F553" msgid="8490966286158640743">"Muka jam pukul empat"</string>
+ <string name="spoken_emoji_1F554" msgid="7662585417832909280">"Muka jam pukul lima"</string>
+ <string name="spoken_emoji_1F555" msgid="5564698204520412009">"Muka jam pukul enam"</string>
+ <string name="spoken_emoji_1F556" msgid="7325712194836512205">"Muka jam pukul tujuh"</string>
+ <string name="spoken_emoji_1F557" msgid="4398343183682848693">"Muka jam pukul lapan"</string>
+ <string name="spoken_emoji_1F558" msgid="3110507820404018172">"Muka jam pukul sembilan"</string>
+ <string name="spoken_emoji_1F559" msgid="2972160366448337839">"Muka jam pukul sepuluh"</string>
+ <string name="spoken_emoji_1F55A" msgid="5568112876681714834">"Muka jam pukul sebelas"</string>
+ <string name="spoken_emoji_1F55B" msgid="6731739890330659276">"Muka jam pukul dua belas"</string>
+ <string name="spoken_emoji_1F55C" msgid="7838853679879115890">"Muka jam pukul satu setengah"</string>
+ <string name="spoken_emoji_1F55D" msgid="3518832144255922544">"Muka jam pukul dua setengah"</string>
+ <string name="spoken_emoji_1F55E" msgid="3092760695634993002">"Muka jam pukul tiga setengah"</string>
+ <string name="spoken_emoji_1F55F" msgid="2326720311892906763">"Muka jam pukul empat setengah"</string>
+ <string name="spoken_emoji_1F560" msgid="5771339179963924448">"Muka jam pukul lima setengah"</string>
+ <string name="spoken_emoji_1F561" msgid="3139944777062475382">"Muka jam pukul enam setengah"</string>
+ <string name="spoken_emoji_1F562" msgid="8273944611162457084">"Muka jam pukul tujuh setengah"</string>
+ <string name="spoken_emoji_1F563" msgid="8643976903718136299">"Muka jam pukul lapan setengah"</string>
+ <string name="spoken_emoji_1F564" msgid="3511070239796141638">"Muka jam pukul sembilan setengah"</string>
+ <string name="spoken_emoji_1F565" msgid="4567451985272963088">"Muka jam pukul sepuluh setengah"</string>
+ <string name="spoken_emoji_1F566" msgid="2790552288169929810">"Muka jam pukul sebelas setengah"</string>
+ <string name="spoken_emoji_1F567" msgid="9026037362100689337">"Muka jam pukul dua belas setengah"</string>
+ <string name="spoken_emoji_1F5FB" msgid="9037503671676124015">"Gunung fuji"</string>
+ <string name="spoken_emoji_1F5FC" msgid="1409415995817242150">"Menara Tokyo"</string>
+ <string name="spoken_emoji_1F5FD" msgid="2562726956654429582">"Patung Liberty"</string>
+ <string name="spoken_emoji_1F5FE" msgid="1184469756905210580">"Bebayang jepun"</string>
+ <string name="spoken_emoji_1F5FF" msgid="6003594799354942297">"Moyai"</string>
+ <string name="spoken_emoji_1F600" msgid="7601109464776835283">"Muka tersengih"</string>
+ <string name="spoken_emoji_1F601" msgid="746026523967444503">"Muka tersengih dengan mata tersenyum"</string>
+ <string name="spoken_emoji_1F602" msgid="8354558091785198246">"Muka dengan air mata kegembiraan"</string>
+ <string name="spoken_emoji_1F603" msgid="3861022912544159823">"Muka tersenyum dengan mulut terbuka"</string>
+ <string name="spoken_emoji_1F604" msgid="5119021072966343531">"Muka tersenyum dengan mulut terbuka dan mata tersenyum"</string>
+ <string name="spoken_emoji_1F605" msgid="6140813923973561735">"Muka tersenyum dengan mulut terbuka dan peluh dingin"</string>
+ <string name="spoken_emoji_1F606" msgid="3549936813966832799">"Muka tersenyum dengan mulut terbuka dan mata terpejam rapat"</string>
+ <string name="spoken_emoji_1F607" msgid="2826424078212384817">"Muka tersenyum dengan halo"</string>
+ <string name="spoken_emoji_1F608" msgid="7343559595089811640">"Muka tersenyum dengan tanduk"</string>
+ <string name="spoken_emoji_1F609" msgid="5481030187207504405">"Muka mengenyit mata"</string>
+ <string name="spoken_emoji_1F60A" msgid="5023337769148679767">"Muka tersenyum dengan mata tersenyum"</string>
+ <string name="spoken_emoji_1F60B" msgid="3005248217216195694">"Muka menikmati makanan lazat"</string>
+ <string name="spoken_emoji_1F60C" msgid="349384012958268496">"Muka lega"</string>
+ <string name="spoken_emoji_1F60D" msgid="7921853137164938391">"Muka tersenyum dengan mata berbentuk hati"</string>
+ <string name="spoken_emoji_1F60E" msgid="441718886380605643">"Muka tersenyum dengan cermin mata hitam"</string>
+ <string name="spoken_emoji_1F60F" msgid="2674453144890180538">"Muka mencebik"</string>
+ <string name="spoken_emoji_1F610" msgid="3225675825334102369">"Muka neutral"</string>
+ <string name="spoken_emoji_1F611" msgid="7199179827619679668">"Muka tanpa perasaan"</string>
+ <string name="spoken_emoji_1F612" msgid="985081329745137998">"Muka tidak hairan"</string>
+ <string name="spoken_emoji_1F613" msgid="5548607684830303562">"Muka dengan peluh dingin"</string>
+ <string name="spoken_emoji_1F614" msgid="3196305665259916390">"Muka termenung"</string>
+ <string name="spoken_emoji_1F615" msgid="3051674239303969101">"Muka keliru"</string>
+ <string name="spoken_emoji_1F616" msgid="8124887056243813089">"Muka bingung"</string>
+ <string name="spoken_emoji_1F617" msgid="7052733625511122870">"Muka bercium"</string>
+ <string name="spoken_emoji_1F618" msgid="408207170572303753">"Muka melayangkan ciuman"</string>
+ <string name="spoken_emoji_1F619" msgid="8645430335143153645">"Muka bercium dengan mata tersenyum"</string>
+ <string name="spoken_emoji_1F61A" msgid="2882157190974340247">"Muka bercium dengan mata tertutup"</string>
+ <string name="spoken_emoji_1F61B" msgid="3765927202787211499">"Muka dengan lidah terjelir"</string>
+ <string name="spoken_emoji_1F61C" msgid="198943912107589389">"Muka dengan lidah terjelir dan mengenyitkan mata"</string>
+ <string name="spoken_emoji_1F61D" msgid="7643546385877816182">"Muka dengan lidah terjelir dan mata tertutup rapat"</string>
+ <string name="spoken_emoji_1F61E" msgid="1528732952202098364">"Muka kecewa"</string>
+ <string name="spoken_emoji_1F61F" msgid="1853664164636082404">"Muka bimbang"</string>
+ <string name="spoken_emoji_1F620" msgid="6051942001307375830">"Muka marah"</string>
+ <string name="spoken_emoji_1F621" msgid="2114711878097257704">"Muka muncung"</string>
+ <string name="spoken_emoji_1F622" msgid="29291014645931822">"Muka menangis"</string>
+ <string name="spoken_emoji_1F623" msgid="7803959833595184773">"Muka bersungguh-sungguh"</string>
+ <string name="spoken_emoji_1F624" msgid="8637637647725752799">"Muka dengan rupa kemenangan"</string>
+ <string name="spoken_emoji_1F625" msgid="6153625183493635030">"Muka kecewa tetapi lega"</string>
+ <string name="spoken_emoji_1F626" msgid="6179485689935562950">"Muka muram dengan mulut terbuka"</string>
+ <string name="spoken_emoji_1F627" msgid="8566204052903012809">"Muka sedih"</string>
+ <string name="spoken_emoji_1F628" msgid="8875777401624904224">"Muka takut"</string>
+ <string name="spoken_emoji_1F629" msgid="1411538490319190118">"Muka letih"</string>
+ <string name="spoken_emoji_1F62A" msgid="4726686726690289969">"Muka mengantuk"</string>
+ <string name="spoken_emoji_1F62B" msgid="3221980473921623613">"Muka penat"</string>
+ <string name="spoken_emoji_1F62C" msgid="4616356691941225182">"Muka berkerut"</string>
+ <string name="spoken_emoji_1F62D" msgid="4283677508698812232">"Muka menangis kuat"</string>
+ <string name="spoken_emoji_1F62E" msgid="726083405284353894">"Muka dengan mulut terbuka"</string>
+ <string name="spoken_emoji_1F62F" msgid="7746620088234710962">"Muka diam"</string>
+ <string name="spoken_emoji_1F630" msgid="3298804852155581163">"Muka dengan mulut terbuka dan peluh dingin"</string>
+ <string name="spoken_emoji_1F631" msgid="1603391150954646779">"Muka menjerit ketakutan"</string>
+ <string name="spoken_emoji_1F632" msgid="4846193232203976013">"Muka terperanjat"</string>
+ <string name="spoken_emoji_1F633" msgid="4023593836629700443">"Muka merah"</string>
+ <string name="spoken_emoji_1F634" msgid="3155265083246248129">"Muka tidur"</string>
+ <string name="spoken_emoji_1F635" msgid="4616691133452764482">"Muka pening"</string>
+ <string name="spoken_emoji_1F636" msgid="947000211822375683">"Muka tanpa mulut"</string>
+ <string name="spoken_emoji_1F637" msgid="1269551267347165774">"Muka dengan topeng perubatan"</string>
+ <string name="spoken_emoji_1F638" msgid="3410766467496872301">"Muka kucing tersengih dengan mata tersenyum"</string>
+ <string name="spoken_emoji_1F639" msgid="1833417519781022031">"Muka kucing dengan air mata kegembiraan"</string>
+ <string name="spoken_emoji_1F63A" msgid="8566294484007152613">"Muka kucing tersenyum dengan mulut terbuka"</string>
+ <string name="spoken_emoji_1F63B" msgid="74417995938927571">"Muka kucing tersenyum dengan mata berbentuk hati"</string>
+ <string name="spoken_emoji_1F63C" msgid="6472812005729468870">"Muka kucing dengan senyuman sinis"</string>
+ <string name="spoken_emoji_1F63D" msgid="1638398369553349509">"Muka kucing bercium dengan mata tertutup"</string>
+ <string name="spoken_emoji_1F63E" msgid="6788969063020278986">"Muka kucing muncung"</string>
+ <string name="spoken_emoji_1F63F" msgid="1207234562459550185">"Muka kucing menangis"</string>
+ <string name="spoken_emoji_1F640" msgid="6023054549904329638">"Muka kucing letih"</string>
+ <string name="spoken_emoji_1F645" msgid="5202090629227587076">"Muka tanpa gerak isyarat baik"</string>
+ <string name="spoken_emoji_1F646" msgid="6734425134415138134">"Muka dengan gerak isyarat ok"</string>
+ <string name="spoken_emoji_1F647" msgid="1090285518444205483">"Orang menunduk lama"</string>
+ <string name="spoken_emoji_1F648" msgid="8978535230610522356">"Monyet menutup mata"</string>
+ <string name="spoken_emoji_1F649" msgid="8486145279809495102">"Monyet menutup telinga"</string>
+ <string name="spoken_emoji_1F64A" msgid="1237524974033228660">"Monyet menutup mulut"</string>
+ <string name="spoken_emoji_1F64B" msgid="4251150782016370475">"Orang gembira mengangkat satu tangan"</string>
+ <string name="spoken_emoji_1F64C" msgid="5446231430684558344">"Orang mengangkat kedua-dua tangan untuk meraikan"</string>
+ <string name="spoken_emoji_1F64D" msgid="4646485595309482342">"Orang muram"</string>
+ <string name="spoken_emoji_1F64E" msgid="3376579939836656097">"Orang dengan muka muncung"</string>
+ <string name="spoken_emoji_1F64F" msgid="1044439574356230711">"Orang dengan tangan bersilang"</string>
+ <string name="spoken_emoji_1F680" msgid="513263736012689059">"Roket"</string>
+ <string name="spoken_emoji_1F681" msgid="9201341783850525339">"Helikopter"</string>
+ <string name="spoken_emoji_1F682" msgid="8046933583867498698">"Kepala kereta api wap"</string>
+ <string name="spoken_emoji_1F683" msgid="8772750354339223092">"Kereta api"</string>
+ <string name="spoken_emoji_1F684" msgid="346396777356203608">"Kereta api kelajuan tinggi"</string>
+ <string name="spoken_emoji_1F685" msgid="1237059817190832730">"Kereta api kelajuan tinggi dengan muncung peluru"</string>
+ <string name="spoken_emoji_1F686" msgid="3525197227223620343">"Kereta api"</string>
+ <string name="spoken_emoji_1F687" msgid="5110143437960392837">"Metro"</string>
+ <string name="spoken_emoji_1F688" msgid="4702085029871797965">"Aliran ringan"</string>
+ <string name="spoken_emoji_1F689" msgid="2375851019798817094">"Stesen"</string>
+ <string name="spoken_emoji_1F68A" msgid="6368370859718717198">"Trem"</string>
+ <string name="spoken_emoji_1F68B" msgid="2920160427117436633">"Kereta trem"</string>
+ <string name="spoken_emoji_1F68C" msgid="1061520934758810864">"Bas"</string>
+ <string name="spoken_emoji_1F68D" msgid="2890059031360969304">"Bas dari arah depan"</string>
+ <string name="spoken_emoji_1F68E" msgid="6234042976027309654">"Bas elektrik"</string>
+ <string name="spoken_emoji_1F68F" msgid="5871099334672012107">"Perhentian bas"</string>
+ <string name="spoken_emoji_1F690" msgid="8080964620200195262">"Bas mini"</string>
+ <string name="spoken_emoji_1F691" msgid="999173032408730501">"Ambulans"</string>
+ <string name="spoken_emoji_1F692" msgid="1712863785341849487">"Kereta bomba"</string>
+ <string name="spoken_emoji_1F693" msgid="7987109037389768934">"Kereta polis"</string>
+ <string name="spoken_emoji_1F694" msgid="6061658916653884608">"Kereta polis dari arah depan"</string>
+ <string name="spoken_emoji_1F695" msgid="6913445460364247283">"Teksi"</string>
+ <string name="spoken_emoji_1F696" msgid="6391604457418285404">"Teksi dari arah depan"</string>
+ <string name="spoken_emoji_1F697" msgid="7978399334396733790">"Kereta"</string>
+ <string name="spoken_emoji_1F698" msgid="7006050861129732018">"Kereta dari arah depan"</string>
+ <string name="spoken_emoji_1F699" msgid="630317052666590607">"Kenderaan rekreasi"</string>
+ <string name="spoken_emoji_1F69A" msgid="4739797891735823577">"Trak penghantaran"</string>
+ <string name="spoken_emoji_1F69B" msgid="4715997280786620649">"Lori sambung sendi"</string>
+ <string name="spoken_emoji_1F69C" msgid="5557395610750818161">"Traktor"</string>
+ <string name="spoken_emoji_1F69D" msgid="5467164189942951047">"Monorel"</string>
+ <string name="spoken_emoji_1F69E" msgid="169238196389832234">"Kereta api gunung"</string>
+ <string name="spoken_emoji_1F69F" msgid="7508128757012845102">"Kereta api tergantung"</string>
+ <string name="spoken_emoji_1F6A0" msgid="8733056213790160147">"Kereta kabel gunung"</string>
+ <string name="spoken_emoji_1F6A1" msgid="4666516337749347253">"Trem udara"</string>
+ <string name="spoken_emoji_1F6A2" msgid="4511220588943129583">"Kapal"</string>
+ <string name="spoken_emoji_1F6A3" msgid="8412962252222205387">"Perahu dayung"</string>
+ <string name="spoken_emoji_1F6A4" msgid="8867571300266339211">"Bot laju"</string>
+ <string name="spoken_emoji_1F6A5" msgid="7650260812741963884">"Lampu isyarat mendatar"</string>
+ <string name="spoken_emoji_1F6A6" msgid="485575967773793454">"Lampu isyarat menegak"</string>
+ <string name="spoken_emoji_1F6A7" msgid="6411048933816976794">"Tanda pembinaan"</string>
+ <string name="spoken_emoji_1F6A8" msgid="6345717218374788364">"Lampu berputar kereta polis"</string>
+ <string name="spoken_emoji_1F6A9" msgid="6586380356807600412">"Bendera segi tiga pada tiang"</string>
+ <string name="spoken_emoji_1F6AA" msgid="8954448167261738885">"Pintu"</string>
+ <string name="spoken_emoji_1F6AB" msgid="5313946262888343544">"Isyarat dilarang masuk"</string>
+ <string name="spoken_emoji_1F6AC" msgid="6946858177965948288">"Simbol merokok"</string>
+ <string name="spoken_emoji_1F6AD" msgid="6320088669185507241">"Simbol dilarang merokok"</string>
+ <string name="spoken_emoji_1F6AE" msgid="1062469925352817189">"Simbol buang sampah di tempatnya"</string>
+ <string name="spoken_emoji_1F6AF" msgid="2286668056123642208">"Simbol jangan buang sampah"</string>
+ <string name="spoken_emoji_1F6B0" msgid="179424763882990952">"Simbol air boleh diminum"</string>
+ <string name="spoken_emoji_1F6B1" msgid="5585212805429161877">"Simbol air tidak boleh diminum"</string>
+ <string name="spoken_emoji_1F6B2" msgid="1771885082068421875">"Basikal"</string>
+ <string name="spoken_emoji_1F6B3" msgid="8033779581263314408">"Tiada basikal"</string>
+ <string name="spoken_emoji_1F6B4" msgid="1999538449018476947">"Penunggang basikal"</string>
+ <string name="spoken_emoji_1F6B5" msgid="340846352660993117">"Penunggang basikal gunung"</string>
+ <string name="spoken_emoji_1F6B6" msgid="4351024386495098336">"Pejalan kaki"</string>
+ <string name="spoken_emoji_1F6B7" msgid="4564800655866838802">"Tiada pejalan kaki"</string>
+ <string name="spoken_emoji_1F6B8" msgid="3020531906940267349">"Kanak-kanak melintas"</string>
+ <string name="spoken_emoji_1F6B9" msgid="1207095844125041251">"Simbol lelaki"</string>
+ <string name="spoken_emoji_1F6BA" msgid="2346879310071017531">"Simbol wanita"</string>
+ <string name="spoken_emoji_1F6BB" msgid="2370172469642078526">"Tandas"</string>
+ <string name="spoken_emoji_1F6BC" msgid="5558827593563530851">"Simbol bayi"</string>
+ <string name="spoken_emoji_1F6BD" msgid="9213590243049835957">"Tandas"</string>
+ <string name="spoken_emoji_1F6BE" msgid="394016533781742491">"Tandas"</string>
+ <string name="spoken_emoji_1F6BF" msgid="906336365928291207">"Pancuran"</string>
+ <string name="spoken_emoji_1F6C0" msgid="4592099854378821599">"Bilik mandi"</string>
+ <string name="spoken_emoji_1F6C1" msgid="2845056048320031158">"Tab mandi"</string>
+ <string name="spoken_emoji_1F6C2" msgid="8117262514698011877">"Kawalan pasport"</string>
+ <string name="spoken_emoji_1F6C3" msgid="1176342001834630675">"Kastam"</string>
+ <string name="spoken_emoji_1F6C4" msgid="1477622834179978886">"Tuntutan bagasi"</string>
+ <string name="spoken_emoji_1F6C5" msgid="2495834050856617451">"Bagasi kiri"</string>
+</resources>
diff --git a/java/res/values-ms-rMY/strings-talkback-descriptions.xml b/java/res/values-ms-rMY/strings-talkback-descriptions.xml
index e47b63909..842a2bf69 100644
--- a/java/res/values-ms-rMY/strings-talkback-descriptions.xml
+++ b/java/res/values-ms-rMY/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Tempat"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Simbol"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Emotikon"</string>
+ <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+ <skip />
+ <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+ <skip />
</resources>
diff --git a/java/res/values-ms-rMY/strings.xml b/java/res/values-ms-rMY/strings.xml
index cea20217e..04ea273ac 100644
--- a/java/res/values-ms-rMY/strings.xml
+++ b/java/res/values-ms-rMY/strings.xml
@@ -21,7 +21,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_input_options" msgid="3909945612939668554">"Pilihan input"</string>
- <string name="english_ime_research_log" msgid="8492602295696577851">"Arahan Log Penyelidikan"</string>
<string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Cari nama kenalan"</string>
<string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Penyemak ejaan menggunakan entri dari senarai kenalan anda"</string>
<string name="vibrate_on_keypress" msgid="5258079494276955460">"Getar pada tekanan kekunci"</string>
@@ -84,8 +83,6 @@
<string name="select_language" msgid="3693815588777926848">"Bahasa input"</string>
<string name="hint_add_to_dictionary" msgid="573678656946085380">"Sentuh lagi untuk menyimpan"</string>
<string name="has_dictionary" msgid="6071847973466625007">"Kamus tersedia"</string>
- <string name="prefs_enable_log" msgid="6620424505072963557">"Dayakan maklum balas pengguna"</string>
- <string name="prefs_description_log" msgid="7525225584555429211">"Bantu memperbaik editor kaedah input ini dengan menghantar statistik penggunaan dan laporan ranap secara automatik"</string>
<string name="keyboard_layout" msgid="8451164783510487501">"Tema papan kekunci"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"Bahasa Inggeris (UK)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"Bahasa Inggeris (Australia)"</string>
@@ -118,7 +115,6 @@
<string name="enable" msgid="5031294444630523247">"Dayakan"</string>
<string name="not_now" msgid="6172462888202790482">"Bukan sekarang"</string>
<string name="custom_input_style_already_exists" msgid="8008728952215449707">"The same input style already exists: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
- <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Mod kajian kebolehgunaan"</string>
<string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Kelewatan tekan lama kekunci"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Tempoh getaran tekan kekunci"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Kelantangan bunyi tekan kekunci"</string>
diff --git a/java/res/values-nb/strings-action-keys.xml b/java/res/values-nb/strings-action-keys.xml
index d4acd36c9..af67b0073 100644
--- a/java/res/values-nb/strings-action-keys.xml
+++ b/java/res/values-nb/strings-action-keys.xml
@@ -25,6 +25,8 @@
<string name="label_previous_key" msgid="1421141755779895275">"Forrige"</string>
<string name="label_done_key" msgid="7564866296502630852">"Ferdig"</string>
<string name="label_send_key" msgid="482252074224462163">"Send"</string>
+ <!-- no translation found for label_search_key (7965186050435796642) -->
+ <skip />
<string name="label_pause_key" msgid="2225922926459730642">"Pause"</string>
<string name="label_wait_key" msgid="5891247853595466039">"Vent"</string>
</resources>
diff --git a/java/res/values-nb/strings-talkback-descriptions.xml b/java/res/values-nb/strings-talkback-descriptions.xml
index cdf80575a..27c68fdc4 100644
--- a/java/res/values-nb/strings-talkback-descriptions.xml
+++ b/java/res/values-nb/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Steder"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Symboler"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Smilefjes"</string>
+ <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+ <skip />
+ <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+ <skip />
</resources>
diff --git a/java/res/values-nb/strings.xml b/java/res/values-nb/strings.xml
index e4f16032c..f4a3a2da0 100644
--- a/java/res/values-nb/strings.xml
+++ b/java/res/values-nb/strings.xml
@@ -21,7 +21,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_input_options" msgid="3909945612939668554">"Inndataalternativer"</string>
- <string name="english_ime_research_log" msgid="8492602295696577851">"Kommandoer for undersøkelseslogging"</string>
<string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Slå opp kontaktnavn"</string>
<string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Stavekontrollen bruker oppføringer fra kontaktlisten din"</string>
<string name="vibrate_on_keypress" msgid="5258079494276955460">"Vibrer ved tastetrykk"</string>
@@ -84,8 +83,6 @@
<string name="select_language" msgid="3693815588777926848">"Inndataspråk"</string>
<string name="hint_add_to_dictionary" msgid="573678656946085380">"Trykk på nytt for å lagre"</string>
<string name="has_dictionary" msgid="6071847973466625007">"Ordbok tilgjengelig"</string>
- <string name="prefs_enable_log" msgid="6620424505072963557">"Aktiver brukertilbakemelding"</string>
- <string name="prefs_description_log" msgid="7525225584555429211">"Ved å sende bruksstatistikk og programstopprapporter til Google automatisk, hjelper du oss med å gjøre redigeringsfunksjonen for denne inndatametoden enda bedre."</string>
<string name="keyboard_layout" msgid="8451164783510487501">"Tastaturtema"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"Engelsk (Storbritannia)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"Engelsk (USA)"</string>
@@ -118,7 +115,6 @@
<string name="enable" msgid="5031294444630523247">"Aktiver"</string>
<string name="not_now" msgid="6172462888202790482">"Ikke nå"</string>
<string name="custom_input_style_already_exists" msgid="8008728952215449707">"Inndatastilen finnes allerede: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
- <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Bruksstudiemodus"</string>
<string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Forsinkelse lange tastetrykk"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Vibrasjonstid ved tastetrykk"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Lydstyrke ved tastetrykk"</string>
diff --git a/java/res/values-ne-rNP/strings-action-keys.xml b/java/res/values-ne-rNP/strings-action-keys.xml
index 34b0a14a7..5c0a46225 100644
--- a/java/res/values-ne-rNP/strings-action-keys.xml
+++ b/java/res/values-ne-rNP/strings-action-keys.xml
@@ -25,6 +25,8 @@
<string name="label_previous_key" msgid="1421141755779895275">"पहिलो"</string>
<string name="label_done_key" msgid="7564866296502630852">"भयो"</string>
<string name="label_send_key" msgid="482252074224462163">"पठाउनुहोस्"</string>
+ <!-- no translation found for label_search_key (7965186050435796642) -->
+ <skip />
<string name="label_pause_key" msgid="2225922926459730642">"रोक्नुहोस्"</string>
<string name="label_wait_key" msgid="5891247853595466039">"पर्खनुहोस्"</string>
</resources>
diff --git a/java/res/values-ne-rNP/strings-emoji-descriptions.xml b/java/res/values-ne-rNP/strings-emoji-descriptions.xml
index cb13f5067..3cf2971c8 100644
--- a/java/res/values-ne-rNP/strings-emoji-descriptions.xml
+++ b/java/res/values-ne-rNP/strings-emoji-descriptions.xml
@@ -20,1627 +20,827 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- no translation found for spoken_emoji_00A9 (2859822817116803638) -->
- <skip />
- <!-- no translation found for spoken_emoji_00AE (7708335454134589027) -->
- <skip />
- <!-- no translation found for spoken_emoji_203C (153340916701508663) -->
- <skip />
- <!-- no translation found for spoken_emoji_2049 (4877256448299555371) -->
- <skip />
- <!-- no translation found for spoken_emoji_2122 (9188440722954720429) -->
- <skip />
- <!-- no translation found for spoken_emoji_2139 (9114342638917304327) -->
- <skip />
- <!-- no translation found for spoken_emoji_2194 (8055202727034946680) -->
- <skip />
- <!-- no translation found for spoken_emoji_2195 (8028122253301087407) -->
- <skip />
- <!-- no translation found for spoken_emoji_2196 (4019164898967854363) -->
- <skip />
- <!-- no translation found for spoken_emoji_2197 (4255723717709017801) -->
- <skip />
- <!-- no translation found for spoken_emoji_2198 (1452063451313622090) -->
- <skip />
- <!-- no translation found for spoken_emoji_2199 (6942722693368807849) -->
- <skip />
- <!-- no translation found for spoken_emoji_21A9 (5204750172335111188) -->
- <skip />
- <!-- no translation found for spoken_emoji_21AA (3950259884359247006) -->
- <skip />
- <!-- no translation found for spoken_emoji_231A (6751448803233874993) -->
- <skip />
- <!-- no translation found for spoken_emoji_231B (5956428809948426182) -->
- <skip />
- <!-- no translation found for spoken_emoji_23E9 (4022497733535162237) -->
- <skip />
- <!-- no translation found for spoken_emoji_23EA (2251396938087774944) -->
- <skip />
- <!-- no translation found for spoken_emoji_23EB (3746885195641491865) -->
- <skip />
- <!-- no translation found for spoken_emoji_23EC (7852372752901163416) -->
- <skip />
- <!-- no translation found for spoken_emoji_23F0 (8474219588750627870) -->
- <skip />
- <!-- no translation found for spoken_emoji_23F3 (166900119581024371) -->
- <skip />
- <!-- no translation found for spoken_emoji_24C2 (3948348737566038470) -->
- <skip />
- <!-- no translation found for spoken_emoji_25AA (7865181015100227349) -->
- <skip />
- <!-- no translation found for spoken_emoji_25AB (6446532820937381457) -->
- <skip />
- <!-- no translation found for spoken_emoji_25B6 (2423897708496040947) -->
- <skip />
- <!-- no translation found for spoken_emoji_25C0 (3595083440074484934) -->
- <skip />
- <!-- no translation found for spoken_emoji_25FB (4838691986881215419) -->
- <skip />
- <!-- no translation found for spoken_emoji_25FC (7008859564991191050) -->
- <skip />
- <!-- no translation found for spoken_emoji_25FD (7673439755069217479) -->
- <skip />
- <!-- no translation found for spoken_emoji_25FE (6782214109919768923) -->
- <skip />
- <!-- no translation found for spoken_emoji_2600 (2272722634618990413) -->
- <skip />
- <!-- no translation found for spoken_emoji_2601 (6205136889311537150) -->
- <skip />
- <!-- no translation found for spoken_emoji_260E (8670395193046424238) -->
- <skip />
- <!-- no translation found for spoken_emoji_2611 (4530550203347054611) -->
- <skip />
- <!-- no translation found for spoken_emoji_2614 (1612791247861229500) -->
- <skip />
- <!-- no translation found for spoken_emoji_2615 (3320562382424018588) -->
- <skip />
- <!-- no translation found for spoken_emoji_261D (4690554173549768467) -->
- <skip />
- <!-- no translation found for spoken_emoji_263A (3170094381521989300) -->
- <skip />
- <!-- no translation found for spoken_emoji_2648 (4621241062667020673) -->
- <skip />
- <!-- no translation found for spoken_emoji_2649 (7694461245947059086) -->
- <skip />
- <!-- no translation found for spoken_emoji_264A (1258074605878705030) -->
- <skip />
- <!-- no translation found for spoken_emoji_264B (4409219914377810956) -->
- <skip />
- <!-- no translation found for spoken_emoji_264C (6520255367817054163) -->
- <skip />
- <!-- no translation found for spoken_emoji_264D (1504758945499854018) -->
- <skip />
- <!-- no translation found for spoken_emoji_264E (2354847104530633519) -->
- <skip />
- <!-- no translation found for spoken_emoji_264F (5822933280406416112) -->
- <skip />
- <!-- no translation found for spoken_emoji_2650 (4832481156714796163) -->
- <skip />
- <!-- no translation found for spoken_emoji_2651 (840953134601595090) -->
- <skip />
- <!-- no translation found for spoken_emoji_2652 (3586925968718775281) -->
- <skip />
- <!-- no translation found for spoken_emoji_2653 (8420547731496254492) -->
- <skip />
- <!-- no translation found for spoken_emoji_2660 (4541170554542412536) -->
- <skip />
- <!-- no translation found for spoken_emoji_2663 (3669352721942285724) -->
- <skip />
- <!-- no translation found for spoken_emoji_2665 (6347941599683765843) -->
- <skip />
- <!-- no translation found for spoken_emoji_2666 (8296769213401115999) -->
- <skip />
- <!-- no translation found for spoken_emoji_2668 (7063148281053820386) -->
- <skip />
- <!-- no translation found for spoken_emoji_267B (21716857176812762) -->
- <skip />
- <!-- no translation found for spoken_emoji_267F (8833496533226475443) -->
- <skip />
- <!-- no translation found for spoken_emoji_2693 (7443148847598433088) -->
- <skip />
- <!-- no translation found for spoken_emoji_26A0 (6272635532992727510) -->
- <skip />
- <!-- no translation found for spoken_emoji_26A1 (5604749644693339145) -->
- <skip />
- <!-- no translation found for spoken_emoji_26AA (8005748091690377153) -->
- <skip />
- <!-- no translation found for spoken_emoji_26AB (1655910278422753244) -->
- <skip />
- <!-- no translation found for spoken_emoji_26BD (1545218197938889737) -->
- <skip />
- <!-- no translation found for spoken_emoji_26BE (8959760533076498209) -->
- <skip />
- <!-- no translation found for spoken_emoji_26C4 (3045791757044255626) -->
- <skip />
- <!-- no translation found for spoken_emoji_26C5 (5580129409712578639) -->
- <skip />
- <!-- no translation found for spoken_emoji_26CE (8963656417276062998) -->
- <skip />
- <!-- no translation found for spoken_emoji_26D4 (2231451988209604130) -->
- <skip />
- <!-- no translation found for spoken_emoji_26EA (7513319636103804907) -->
- <skip />
- <!-- no translation found for spoken_emoji_26F2 (7134115206158891037) -->
- <skip />
- <!-- no translation found for spoken_emoji_26F3 (4912302210162075465) -->
- <skip />
- <!-- no translation found for spoken_emoji_26F5 (4766328116769075217) -->
- <skip />
- <!-- no translation found for spoken_emoji_26FA (5888017494809199037) -->
- <skip />
- <!-- no translation found for spoken_emoji_26FD (2417060622927453534) -->
- <skip />
- <!-- no translation found for spoken_emoji_2702 (4005741160717451912) -->
- <skip />
- <!-- no translation found for spoken_emoji_2705 (164605766946697759) -->
- <skip />
- <!-- no translation found for spoken_emoji_2708 (7153840886849268988) -->
- <skip />
- <!-- no translation found for spoken_emoji_2709 (2217319160724311369) -->
- <skip />
- <!-- no translation found for spoken_emoji_270A (508347232762319473) -->
- <skip />
- <!-- no translation found for spoken_emoji_270B (6640562128327753423) -->
- <skip />
- <!-- no translation found for spoken_emoji_270C (1344288035704944581) -->
- <skip />
- <!-- no translation found for spoken_emoji_270F (6108251586067318718) -->
- <skip />
- <!-- no translation found for spoken_emoji_2712 (6320544535087710482) -->
- <skip />
- <!-- no translation found for spoken_emoji_2714 (1968242800064001654) -->
- <skip />
- <!-- no translation found for spoken_emoji_2716 (511941294762977228) -->
- <skip />
- <!-- no translation found for spoken_emoji_2728 (5650330815808691881) -->
- <skip />
- <!-- no translation found for spoken_emoji_2733 (8915809595141157327) -->
- <skip />
- <!-- no translation found for spoken_emoji_2734 (4846583547980754332) -->
- <skip />
- <!-- no translation found for spoken_emoji_2744 (4350636647760161042) -->
- <skip />
- <!-- no translation found for spoken_emoji_2747 (3718282973916474455) -->
- <skip />
- <!-- no translation found for spoken_emoji_274C (2752145886733295314) -->
- <skip />
- <!-- no translation found for spoken_emoji_274E (4262918689871098338) -->
- <skip />
- <!-- no translation found for spoken_emoji_2753 (6935897159942119808) -->
- <skip />
- <!-- no translation found for spoken_emoji_2754 (7277504915105532954) -->
- <skip />
- <!-- no translation found for spoken_emoji_2755 (6853076969826960210) -->
- <skip />
- <!-- no translation found for spoken_emoji_2757 (3707907828776912174) -->
- <skip />
+ <string name="spoken_emoji_00A9" msgid="2859822817116803638">"प्रतिलिपि अधिकार चिन्ह"</string>
+ <string name="spoken_emoji_00AE" msgid="7708335454134589027">"दर्ता चिन्ह"</string>
+ <string name="spoken_emoji_203C" msgid="153340916701508663">"दोहोरो उद्गार मार्क"</string>
+ <string name="spoken_emoji_2049" msgid="4877256448299555371">"विस्मयादिबोधक प्रश्न चिन्ह"</string>
+ <string name="spoken_emoji_2122" msgid="9188440722954720429">"व्यापार प्रतिक चिन्ह"</string>
+ <string name="spoken_emoji_2139" msgid="9114342638917304327">"सूचना स्रोत"</string>
+ <string name="spoken_emoji_2194" msgid="8055202727034946680">"दायाँ तीर बाँयामा"</string>
+ <string name="spoken_emoji_2195" msgid="8028122253301087407">"तल तीर माथिमा"</string>
+ <string name="spoken_emoji_2196" msgid="4019164898967854363">"उत्तर पश्चिम तीर"</string>
+ <string name="spoken_emoji_2197" msgid="4255723717709017801">"उत्तर पूर्वी तीर"</string>
+ <string name="spoken_emoji_2198" msgid="1452063451313622090">"दक्षिण पूर्व तीर"</string>
+ <string name="spoken_emoji_2199" msgid="6942722693368807849">"दक्षिण पश्चिम तीर"</string>
+ <string name="spoken_emoji_21A9" msgid="5204750172335111188">"बायाँ हुक साथ तीर"</string>
+ <string name="spoken_emoji_21AA" msgid="3950259884359247006">"दाँया हुक साथ तीर"</string>
+ <string name="spoken_emoji_231A" msgid="6751448803233874993">"हेर्नु"</string>
+ <string name="spoken_emoji_231B" msgid="5956428809948426182">"बलौटे घडी"</string>
+ <string name="spoken_emoji_23E9" msgid="4022497733535162237">"कालो दाँया देखाउने डबल त्रिकोण"</string>
+ <string name="spoken_emoji_23EA" msgid="2251396938087774944">"कालो बायाँ-इशारा डबल त्रिकोण"</string>
+ <string name="spoken_emoji_23EB" msgid="3746885195641491865">"कालो माथि देखाउने डबल त्रिकोण"</string>
+ <string name="spoken_emoji_23EC" msgid="7852372752901163416">"कालो तल-इशारा डबल त्रिकोण"</string>
+ <string name="spoken_emoji_23F0" msgid="8474219588750627870">"सचेतक घडी"</string>
+ <string name="spoken_emoji_23F3" msgid="166900119581024371">"बग्ने बालुवा साथ बालुवा घडी"</string>
+ <string name="spoken_emoji_24C2" msgid="3948348737566038470">"बृताकार भित्र ठुलो ल्याटिन अक्षर m"</string>
+ <string name="spoken_emoji_25AA" msgid="7865181015100227349">"कालो सानो वर्ग"</string>
+ <string name="spoken_emoji_25AB" msgid="6446532820937381457">"श्वेत सानो वर्ग"</string>
+ <string name="spoken_emoji_25B6" msgid="2423897708496040947">"कालो दाँया देखाउने त्रिकोण"</string>
+ <string name="spoken_emoji_25C0" msgid="3595083440074484934">"कालो बायाँ-इशारा त्रिकोण"</string>
+ <string name="spoken_emoji_25FB" msgid="4838691986881215419">"श्वेत मध्यम वर्ग"</string>
+ <string name="spoken_emoji_25FC" msgid="7008859564991191050">"कालो मध्यम वर्ग"</string>
+ <string name="spoken_emoji_25FD" msgid="7673439755069217479">"श्वेत मध्यम सानो वर्ग"</string>
+ <string name="spoken_emoji_25FE" msgid="6782214109919768923">"कालो मध्यम सानो वर्ग"</string>
+ <string name="spoken_emoji_2600" msgid="2272722634618990413">"किरण साथ कालो सूर्य"</string>
+ <string name="spoken_emoji_2601" msgid="6205136889311537150">"बादल"</string>
+ <string name="spoken_emoji_260E" msgid="8670395193046424238">"कालो टेलिफोन"</string>
+ <string name="spoken_emoji_2611" msgid="4530550203347054611">"जाँच साथ मतदान बक्स"</string>
+ <string name="spoken_emoji_2614" msgid="1612791247861229500">"वर्षा थोपा साथ छाता"</string>
+ <string name="spoken_emoji_2615" msgid="3320562382424018588">"तातो पेय"</string>
+ <string name="spoken_emoji_261D" msgid="4690554173549768467">"श्वेत अप सूचकांक इशारा"</string>
+ <string name="spoken_emoji_263A" msgid="3170094381521989300">"श्वेत हँसिलो अनुहार"</string>
+ <string name="spoken_emoji_2648" msgid="4621241062667020673">"मेष"</string>
+ <string name="spoken_emoji_2649" msgid="7694461245947059086">"वृष"</string>
+ <string name="spoken_emoji_264A" msgid="1258074605878705030">"मिथुन"</string>
+ <string name="spoken_emoji_264B" msgid="4409219914377810956">"कर्कट"</string>
+ <string name="spoken_emoji_264C" msgid="6520255367817054163">"सिंह"</string>
+ <string name="spoken_emoji_264D" msgid="1504758945499854018">"कन्या"</string>
+ <string name="spoken_emoji_264E" msgid="2354847104530633519">"तुला"</string>
+ <string name="spoken_emoji_264F" msgid="5822933280406416112">"वृष"</string>
+ <string name="spoken_emoji_2650" msgid="4832481156714796163">"धनु"</string>
+ <string name="spoken_emoji_2651" msgid="840953134601595090">"मकर"</string>
+ <string name="spoken_emoji_2652" msgid="3586925968718775281">"कुंभ"</string>
+ <string name="spoken_emoji_2653" msgid="8420547731496254492">"मीन"</string>
+ <string name="spoken_emoji_2660" msgid="4541170554542412536">"कालो कुदाल सुट"</string>
+ <string name="spoken_emoji_2663" msgid="3669352721942285724">"कालो क्लब सुट"</string>
+ <string name="spoken_emoji_2665" msgid="6347941599683765843">"कालो हृदय सुट"</string>
+ <string name="spoken_emoji_2666" msgid="8296769213401115999">"कालो हीरा सुट"</string>
+ <string name="spoken_emoji_2668" msgid="7063148281053820386">"तातो स्प्रिंग्स"</string>
+ <string name="spoken_emoji_267B" msgid="21716857176812762">"कालो विश्वव्यापी रिसाइकिलिंग चिन्ह"</string>
+ <string name="spoken_emoji_267F" msgid="8833496533226475443">"ह्वीलचेयर चिन्ह"</string>
+ <string name="spoken_emoji_2693" msgid="7443148847598433088">"अंकुश"</string>
+ <string name="spoken_emoji_26A0" msgid="6272635532992727510">"चेतावनी चिन्ह"</string>
+ <string name="spoken_emoji_26A1" msgid="5604749644693339145">"उच्च भोल्टेज चिन्ह"</string>
+ <string name="spoken_emoji_26AA" msgid="8005748091690377153">"मध्यम सफेद वृत्त"</string>
+ <string name="spoken_emoji_26AB" msgid="1655910278422753244">"मध्यम कालो वृत्त"</string>
+ <string name="spoken_emoji_26BD" msgid="1545218197938889737">"फुटबल"</string>
+ <string name="spoken_emoji_26BE" msgid="8959760533076498209">"बेसबल"</string>
+ <string name="spoken_emoji_26C4" msgid="3045791757044255626">"बिना हिउँ हिममानब"</string>
+ <string name="spoken_emoji_26C5" msgid="5580129409712578639">"बादलको पछाडी सूर्य"</string>
+ <string name="spoken_emoji_26CE" msgid="8963656417276062998">"तारामंडल Ophiuchus"</string>
+ <string name="spoken_emoji_26D4" msgid="2231451988209604130">"प्रवेश निषेध"</string>
+ <string name="spoken_emoji_26EA" msgid="7513319636103804907">"चर्च"</string>
+ <string name="spoken_emoji_26F2" msgid="7134115206158891037">"फोहरा"</string>
+ <string name="spoken_emoji_26F3" msgid="4912302210162075465">"प्वालमा झण्डा"</string>
+ <string name="spoken_emoji_26F5" msgid="4766328116769075217">"जहाजयात्रा"</string>
+ <string name="spoken_emoji_26FA" msgid="5888017494809199037">"पाल"</string>
+ <string name="spoken_emoji_26FD" msgid="2417060622927453534">"इन्धन पम्प"</string>
+ <string name="spoken_emoji_2702" msgid="4005741160717451912">"कालो कैंची"</string>
+ <string name="spoken_emoji_2705" msgid="164605766946697759">"श्वेत भारी चेक मार्क"</string>
+ <string name="spoken_emoji_2708" msgid="7153840886849268988">"हवाइजहाज"</string>
+ <string name="spoken_emoji_2709" msgid="2217319160724311369">"खाम"</string>
+ <string name="spoken_emoji_270A" msgid="508347232762319473">"उठेको मुट्ठी"</string>
+ <string name="spoken_emoji_270B" msgid="6640562128327753423">"उठाएको हात"</string>
+ <string name="spoken_emoji_270C" msgid="1344288035704944581">"विजयी हात"</string>
+ <string name="spoken_emoji_270F" msgid="6108251586067318718">"शिसाकलम"</string>
+ <string name="spoken_emoji_2712" msgid="6320544535087710482">"कालो निब"</string>
+ <string name="spoken_emoji_2714" msgid="1968242800064001654">"भारी चेक मार्क"</string>
+ <string name="spoken_emoji_2716" msgid="511941294762977228">"भारी गुणन x"</string>
+ <string name="spoken_emoji_2728" msgid="5650330815808691881">"झिल्काहरु"</string>
+ <string name="spoken_emoji_2733" msgid="8915809595141157327">"आठधर्के तारांकन"</string>
+ <string name="spoken_emoji_2734" msgid="4846583547980754332">"आठ चुच्चे कालो तारा"</string>
+ <string name="spoken_emoji_2744" msgid="4350636647760161042">"हिमपात"</string>
+ <string name="spoken_emoji_2747" msgid="3718282973916474455">"चमक"</string>
+ <string name="spoken_emoji_274C" msgid="2752145886733295314">"क्रस चिन्ह"</string>
+ <string name="spoken_emoji_274E" msgid="4262918689871098338">"उल्टो चारपाते काटिएको चिन्ह"</string>
+ <string name="spoken_emoji_2753" msgid="6935897159942119808">"कालो प्रश्न चिन्ह आभूषण"</string>
+ <string name="spoken_emoji_2754" msgid="7277504915105532954">"श्वेत प्रश्न चिन्ह आभूषण"</string>
+ <string name="spoken_emoji_2755" msgid="6853076969826960210">"श्वेत उद्गार चिन्ह आभूषण"</string>
+ <string name="spoken_emoji_2757" msgid="3707907828776912174">"भारी उद्गार चिन्ह प्रतिक"</string>
<string name="spoken_emoji_2764" msgid="4214257843609432167">"दह्रो कालो हृदय"</string>
- <!-- no translation found for spoken_emoji_2795 (6563954833786162168) -->
- <skip />
- <!-- no translation found for spoken_emoji_2796 (5990926508250772777) -->
- <skip />
- <!-- no translation found for spoken_emoji_2797 (24694184172879174) -->
- <skip />
- <!-- no translation found for spoken_emoji_27A1 (3513434778263100580) -->
- <skip />
- <!-- no translation found for spoken_emoji_27B0 (203395646864662198) -->
- <skip />
- <!-- no translation found for spoken_emoji_27BF (4940514642375640510) -->
- <skip />
- <!-- no translation found for spoken_emoji_2934 (9062130477982973457) -->
- <skip />
- <!-- no translation found for spoken_emoji_2935 (6198710960720232074) -->
- <skip />
- <!-- no translation found for spoken_emoji_2B05 (4813405635410707690) -->
- <skip />
- <!-- no translation found for spoken_emoji_2B06 (1223172079106250748) -->
- <skip />
- <!-- no translation found for spoken_emoji_2B07 (1599124424746596150) -->
- <skip />
- <!-- no translation found for spoken_emoji_2B1B (3461247311988501626) -->
- <skip />
- <!-- no translation found for spoken_emoji_2B1C (5793146430145248915) -->
- <skip />
- <!-- no translation found for spoken_emoji_2B50 (3850845519526950524) -->
- <skip />
- <!-- no translation found for spoken_emoji_2B55 (9137882158811541824) -->
- <skip />
- <!-- no translation found for spoken_emoji_3030 (4609172241893565639) -->
- <skip />
- <!-- no translation found for spoken_emoji_303D (2545833934975907505) -->
- <skip />
- <!-- no translation found for spoken_emoji_3297 (928912923628973800) -->
- <skip />
- <!-- no translation found for spoken_emoji_3299 (3930347573693668426) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F004 (1705216181345894600) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F0CF (7601493592085987866) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F170 (3817698686602826773) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F171 (3684218589626650242) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F17E (2978809190364779029) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F17F (463634348668462040) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F18E (1650705325221496768) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F191 (5386969264431429221) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F192 (8324226436829162496) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F193 (4731758603321515364) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F194 (4903128609556175887) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F195 (1433142500411060924) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F196 (8825160701159634202) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F197 (7841079241554176535) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F198 (7020298909426960622) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F199 (5971252667136235630) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F19A (4557270135899843959) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F201 (7000490044681139002) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F202 (8560906958695043947) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F21A (1496435317324514033) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F22F (609797148862445402) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F232 (8125716331632035820) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F233 (8749401090457355028) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F234 (3546951604285970768) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F235 (5320186982841793711) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F236 (879755752069393034) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F237 (6741807001205851437) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F238 (5504414186438196912) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F239 (1634067311597618959) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F23A (3107862957630169536) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F250 (6586943922806727907) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F251 (9099032855993346948) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F300 (4720098285295840383) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F301 (3601962477653752974) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F302 (3404357123421753593) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F303 (3899301321538188206) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F304 (2767148930689050040) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F305 (9165812924292061196) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F306 (5889294736109193104) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F307 (2714290867291163713) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F308 (688704703985173377) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F309 (6217981957992313528) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F30A (4329309263152110893) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F30B (5729430693700923112) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F30C (2961230863217543082) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F30D (1113905673331547953) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F30E (5278512600749223671) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F30F (5718144880978707493) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F310 (2959618582975247601) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F311 (623906380914895542) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F312 (4458575672576125401) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F313 (7599181787989497294) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F314 (4898293184964365413) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F315 (3218117051779496309) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F316 (2061317145777689569) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F317 (2721090687319539049) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F318 (3814091755648887570) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F319 (4074299824890459465) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F31A (3092285278116977103) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F31B (2658562138386927881) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F31C (7914768515547867384) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F31D (1925730459848297182) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F31E (8022112382524084418) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F31F (1051661214137766369) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F320 (5450591979068216115) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F330 (3115760035618051575) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F331 (5658888205290008691) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F332 (2935650450421165938) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F333 (5898847427062482675) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F334 (6183375224678417894) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F335 (5352418412103584941) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F337 (3839107352363566289) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F338 (6389970364260468490) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F339 (9128891447985256151) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F33A (2025828400095233078) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F33B (8163868254348448552) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F33C (6850371206262335812) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F33D (9033484052864509610) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F33E (2540173396638444120) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F33F (4384823344364908558) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F340 (3494255459156499305) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F341 (4581959481754990158) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F342 (3119068426871821222) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F343 (2663317495805149004) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F344 (2738517881678722159) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F345 (6135288642349085554) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F346 (2075395322785406367) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F347 (7753453754963890571) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F348 (1247076837284932788) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F349 (5563054555180611086) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F34A (4688661208570160524) -->
- <skip />
- <string name="spoken_emoji_1F34B" msgid="4335318423164185706">"कागती"</string>
- <!-- no translation found for spoken_emoji_1F34C (3712827239858159474) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F34D (7712521967162622936) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F34E (1859466882598614228) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F34F (8251711032295005633) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F350 (625802980159197701) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F351 (4269460120610911895) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F352 (965600953360182635) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F353 (7068623879906925592) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F354 (45162285238888494) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F355 (9157587635526433283) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F356 (2667196119149852244) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F357 (8022817413851052256) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F358 (3042693264748036476) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F359 (3988148661730121958) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F35A (1763824172198327268) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F35B (62530406745717835) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F35C (7537756539198945509) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F35D (8173523083861875196) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F35E (2935428307894662571) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F35F (4840297386785728443) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F360 (4094659855684686801) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F361 (6475486395784096109) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F362 (5004692577661076275) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F363 (1606603765717743806) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F364 (6550457766169570811) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F365 (4963815540953316307) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F366 (7862401745277049404) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F367 (7447972978281980414) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F368 (7790003146142724913) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F369 (7383712944084857350) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F36A (2726271795913042295) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F36B (6342163604299875931) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F36C (2168934753998218790) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F36D (3671507903799975792) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F36E (4630541402785165902) -->
- <skip />
+ <string name="spoken_emoji_2795" msgid="6563954833786162168">"भारी प्लस चिन्ह"</string>
+ <string name="spoken_emoji_2796" msgid="5990926508250772777">"भारी ऋण चिन्ह"</string>
+ <string name="spoken_emoji_2797" msgid="24694184172879174">"भारी विभाजन चिन्ह"</string>
+ <string name="spoken_emoji_27A1" msgid="3513434778263100580">"कालो दाँयातीर तीर"</string>
+ <string name="spoken_emoji_27B0" msgid="203395646864662198">"घुम्रिएको फेरो"</string>
+ <string name="spoken_emoji_27BF" msgid="4940514642375640510">"दोहोरो घुम्रिएको फेरो"</string>
+ <string name="spoken_emoji_2934" msgid="9062130477982973457">"दाँयातीर इशारा तीर त्यसपछि माथिको घुमाँइ"</string>
+ <string name="spoken_emoji_2935" msgid="6198710960720232074">"दाँयातीर इशारा तीर त्यसपछि तलको घुमाँइ"</string>
+ <string name="spoken_emoji_2B05" msgid="4813405635410707690">"कालोतीर बायाँतर्फ"</string>
+ <string name="spoken_emoji_2B06" msgid="1223172079106250748">"कालो तीर माथि तर्फ"</string>
+ <string name="spoken_emoji_2B07" msgid="1599124424746596150">"कालो तीर तल तर्फ"</string>
+ <string name="spoken_emoji_2B1B" msgid="3461247311988501626">"कालो ठूलो वर्ग"</string>
+ <string name="spoken_emoji_2B1C" msgid="5793146430145248915">"सेतो ठूलो वर्ग"</string>
+ <string name="spoken_emoji_2B50" msgid="3850845519526950524">"सेतो मध्यम तारा"</string>
+ <string name="spoken_emoji_2B55" msgid="9137882158811541824">"भारी ठूलो वृत्त"</string>
+ <string name="spoken_emoji_3030" msgid="4609172241893565639">"तरंग ड्यास"</string>
+ <string name="spoken_emoji_303D" msgid="2545833934975907505">"खण्ड बैकल्पिक मार्क"</string>
+ <string name="spoken_emoji_3297" msgid="928912923628973800">"बृताकार भाबाङ्कन बधाई"</string>
+ <string name="spoken_emoji_3299" msgid="3930347573693668426">"बृताकार भाबाङ्कन रहस्य"</string>
+ <string name="spoken_emoji_1F004" msgid="1705216181345894600">"माजोङ टाइल रातो ड्रागन"</string>
+ <string name="spoken_emoji_1F0CF" msgid="7601493592085987866">"खेल्ने तास कालो जोकर"</string>
+ <string name="spoken_emoji_1F170" msgid="3817698686602826773">"रक्त प्रकार A"</string>
+ <string name="spoken_emoji_1F171" msgid="3684218589626650242">"रक्त प्रकार B"</string>
+ <string name="spoken_emoji_1F17E" msgid="2978809190364779029">"रक्त प्रकार O"</string>
+ <string name="spoken_emoji_1F17F" msgid="463634348668462040">"पार्क्ङिग स्थल"</string>
+ <string name="spoken_emoji_1F18E" msgid="1650705325221496768">"रक्त प्रकार AB"</string>
+ <string name="spoken_emoji_1F191" msgid="5386969264431429221">"चारपाटे CL"</string>
+ <string name="spoken_emoji_1F192" msgid="8324226436829162496">"चारपाते सुन्दर"</string>
+ <string name="spoken_emoji_1F193" msgid="4731758603321515364">"चारपाते मुक्त"</string>
+ <string name="spoken_emoji_1F194" msgid="4903128609556175887">"चारपाते ID"</string>
+ <string name="spoken_emoji_1F195" msgid="1433142500411060924">"चारपाते नयाँ"</string>
+ <string name="spoken_emoji_1F196" msgid="8825160701159634202">"चारपाते N G"</string>
+ <string name="spoken_emoji_1F197" msgid="7841079241554176535">"चारपाते ठीक"</string>
+ <string name="spoken_emoji_1F198" msgid="7020298909426960622">"चारपाते SOS"</string>
+ <string name="spoken_emoji_1F199" msgid="5971252667136235630">"उद्गार चिन्ह साथ चारपाते"</string>
+ <string name="spoken_emoji_1F19A" msgid="4557270135899843959">"चारपाते बिरुद्ध"</string>
+ <string name="spoken_emoji_1F201" msgid="7000490044681139002">"यहाँ चारपाते काताकाना"</string>
+ <string name="spoken_emoji_1F202" msgid="8560906958695043947">"चारपाते काताकाना सेवा"</string>
+ <string name="spoken_emoji_1F21A" msgid="1496435317324514033">"चारपाते भाबाङ्कन -निःशुल्क"</string>
+ <string name="spoken_emoji_1F22F" msgid="609797148862445402">"चारपाते भाबाङ्कन सुरक्षित-सीट"</string>
+ <string name="spoken_emoji_1F232" msgid="8125716331632035820">"चारपाते भाबाङ्कन निषेध"</string>
+ <string name="spoken_emoji_1F233" msgid="8749401090457355028">"चारपाते भाबाङ्कन रिक्तता"</string>
+ <string name="spoken_emoji_1F234" msgid="3546951604285970768">"चारपाते भाबाङ्कन स्वीकृति"</string>
+ <string name="spoken_emoji_1F235" msgid="5320186982841793711">"चारपाते भाबाङ्कन पूर्ण अधिभोग"</string>
+ <string name="spoken_emoji_1F236" msgid="879755752069393034">"चारपाते भाबाङ्कन भुक्तानी"</string>
+ <string name="spoken_emoji_1F237" msgid="6741807001205851437">"चारपाते भाबाङ्कन मासिक"</string>
+ <string name="spoken_emoji_1F238" msgid="5504414186438196912">"चारपाते भाबाङ्कन अनुप्रयोग"</string>
+ <string name="spoken_emoji_1F239" msgid="1634067311597618959">"चारपाते भाबाङ्कन छूट"</string>
+ <string name="spoken_emoji_1F23A" msgid="3107862957630169536">"व्यापारमा चारपाते भाबाङ्कन"</string>
+ <string name="spoken_emoji_1F250" msgid="6586943922806727907">"बृताकार भाबाङ्कन लाभ"</string>
+ <string name="spoken_emoji_1F251" msgid="9099032855993346948">"बृताकार भाबाङ्कन स्वीकार"</string>
+ <string name="spoken_emoji_1F300" msgid="4720098285295840383">"चक्रवात"</string>
+ <string name="spoken_emoji_1F301" msgid="3601962477653752974">"धुवाँदार"</string>
+ <string name="spoken_emoji_1F302" msgid="3404357123421753593">"बन्द छाता"</string>
+ <string name="spoken_emoji_1F303" msgid="3899301321538188206">"ताराहरूका साथ रात"</string>
+ <string name="spoken_emoji_1F304" msgid="2767148930689050040">"पहाडमा सूर्योदय"</string>
+ <string name="spoken_emoji_1F305" msgid="9165812924292061196">"सूर्योदय"</string>
+ <string name="spoken_emoji_1F306" msgid="5889294736109193104">"धुलो रहित शहर"</string>
+ <string name="spoken_emoji_1F307" msgid="2714290867291163713">"भवनहरुमा सूर्यास्त"</string>
+ <string name="spoken_emoji_1F308" msgid="688704703985173377">"ईन्द्रेणी"</string>
+ <string name="spoken_emoji_1F309" msgid="6217981957992313528">"रातमा पुल"</string>
+ <string name="spoken_emoji_1F30A" msgid="4329309263152110893">"जल लहर"</string>
+ <string name="spoken_emoji_1F30B" msgid="5729430693700923112">"ज्वालामुखी"</string>
+ <string name="spoken_emoji_1F30C" msgid="2961230863217543082">"दुधेली बाटो"</string>
+ <string name="spoken_emoji_1F30D" msgid="1113905673331547953">"पृथ्बी विश्व युरोप-अफ्रिका"</string>
+ <string name="spoken_emoji_1F30E" msgid="5278512600749223671">"पृथ्बी विश्व अमेरीकास"</string>
+ <string name="spoken_emoji_1F30F" msgid="5718144880978707493">"पृथ्बी विश्व एशिया-अस्ट्रेलिया"</string>
+ <string name="spoken_emoji_1F310" msgid="2959618582975247601">"मेरीडियन साथ विश्व"</string>
+ <string name="spoken_emoji_1F311" msgid="623906380914895542">"नयाँ चन्द्रमाको चिन्ह"</string>
+ <string name="spoken_emoji_1F312" msgid="4458575672576125401">"पहेँलो अर्धचन्द्राकार चन्द्र प्रतीक"</string>
+ <string name="spoken_emoji_1F313" msgid="7599181787989497294">"पहिलो चौथाई चन्द्र प्रतीक"</string>
+ <string name="spoken_emoji_1F314" msgid="4898293184964365413">"पहेँलो बाँदर चन्द्र प्रतीक"</string>
+ <string name="spoken_emoji_1F315" msgid="3218117051779496309">"पूर्ण चन्द्र प्रतीक"</string>
+ <string name="spoken_emoji_1F316" msgid="2061317145777689569">"थकित बाँदर चन्द्र प्रतीक"</string>
+ <string name="spoken_emoji_1F317" msgid="2721090687319539049">"अन्तिम चौथाई चन्द्र प्रतीक"</string>
+ <string name="spoken_emoji_1F318" msgid="3814091755648887570">"चेतावनी अर्धचन्द्राकार चन्द्र प्रतीक"</string>
+ <string name="spoken_emoji_1F319" msgid="4074299824890459465">"अर्धचन्द्राकार चन्द्र"</string>
+ <string name="spoken_emoji_1F31A" msgid="3092285278116977103">"नयाँ चन्द्रामुहार"</string>
+ <string name="spoken_emoji_1F31B" msgid="2658562138386927881">"पहिलो चौथाइ चन्द्रामुहार"</string>
+ <string name="spoken_emoji_1F31C" msgid="7914768515547867384">"अन्तिम चौथाइ चन्द्रामुहार"</string>
+ <string name="spoken_emoji_1F31D" msgid="1925730459848297182">"पूर्ण चन्द्रामुहार"</string>
+ <string name="spoken_emoji_1F31E" msgid="8022112382524084418">"सूर्यामुहार"</string>
+ <string name="spoken_emoji_1F31F" msgid="1051661214137766369">"चमकिलो तारा"</string>
+ <string name="spoken_emoji_1F320" msgid="5450591979068216115">"सुटिङ तारा"</string>
+ <string name="spoken_emoji_1F330" msgid="3115760035618051575">"ओखर"</string>
+ <string name="spoken_emoji_1F331" msgid="5658888205290008691">"सिडिङ"</string>
+ <string name="spoken_emoji_1F332" msgid="2935650450421165938">"सदाबहार रूख"</string>
+ <string name="spoken_emoji_1F333" msgid="5898847427062482675">"पतझड रूख"</string>
+ <string name="spoken_emoji_1F334" msgid="6183375224678417894">"ताड रूख"</string>
+ <string name="spoken_emoji_1F335" msgid="5352418412103584941">"सिउँडी"</string>
+ <string name="spoken_emoji_1F337" msgid="3839107352363566289">"तुलिप"</string>
+ <string name="spoken_emoji_1F338" msgid="6389970364260468490">"चेरी फूल"</string>
+ <string name="spoken_emoji_1F339" msgid="9128891447985256151">"गुलाब"</string>
+ <string name="spoken_emoji_1F33A" msgid="2025828400095233078">"जाभाकुसुम"</string>
+ <string name="spoken_emoji_1F33B" msgid="8163868254348448552">"सूर्यमुखी"</string>
+ <string name="spoken_emoji_1F33C" msgid="6850371206262335812">"फूल"</string>
+ <string name="spoken_emoji_1F33D" msgid="9033484052864509610">"काने मकै"</string>
+ <string name="spoken_emoji_1F33E" msgid="2540173396638444120">"काने धान"</string>
+ <string name="spoken_emoji_1F33F" msgid="4384823344364908558">"जडिबुटी"</string>
+ <string name="spoken_emoji_1F340" msgid="3494255459156499305">"चार पाते क्लोभर"</string>
+ <string name="spoken_emoji_1F341" msgid="4581959481754990158">"मेपल पातको"</string>
+ <string name="spoken_emoji_1F342" msgid="3119068426871821222">"झरेको पात"</string>
+ <string name="spoken_emoji_1F343" msgid="2663317495805149004">"पात हावामा उड्दै"</string>
+ <string name="spoken_emoji_1F344" msgid="2738517881678722159">"च्याँउ"</string>
+ <string name="spoken_emoji_1F345" msgid="6135288642349085554">"गोलभेंडा"</string>
+ <string name="spoken_emoji_1F346" msgid="2075395322785406367">"डल्लो भन्टा"</string>
+ <string name="spoken_emoji_1F347" msgid="7753453754963890571">"अंगूर"</string>
+ <string name="spoken_emoji_1F348" msgid="1247076837284932788">"तरबूजा"</string>
+ <string name="spoken_emoji_1F349" msgid="5563054555180611086">"खरबूजा"</string>
+ <string name="spoken_emoji_1F34A" msgid="4688661208570160524">"सुन्तले रङ"</string>
+ <string name="spoken_emoji_1F34B" msgid="4335318423164185706">"लेमन"</string>
+ <string name="spoken_emoji_1F34C" msgid="3712827239858159474">"केरा"</string>
+ <string name="spoken_emoji_1F34D" msgid="7712521967162622936">"भुईंकतहर"</string>
+ <string name="spoken_emoji_1F34E" msgid="1859466882598614228">"रातो स्याउ"</string>
+ <string name="spoken_emoji_1F34F" msgid="8251711032295005633">"हरियो स्याउ"</string>
+ <string name="spoken_emoji_1F350" msgid="625802980159197701">"नाशपाती"</string>
+ <string name="spoken_emoji_1F351" msgid="4269460120610911895">"बयर"</string>
+ <string name="spoken_emoji_1F352" msgid="965600953360182635">"चेरी"</string>
+ <string name="spoken_emoji_1F353" msgid="7068623879906925592">"स्ट्रबेरी"</string>
+ <string name="spoken_emoji_1F354" msgid="45162285238888494">"ह्यामबर्गर"</string>
+ <string name="spoken_emoji_1F355" msgid="9157587635526433283">"पिज्जा टुक्रा"</string>
+ <string name="spoken_emoji_1F356" msgid="2667196119149852244">"हड्डीमा मासु"</string>
+ <string name="spoken_emoji_1F357" msgid="8022817413851052256">"कुखुराको खुट्टा"</string>
+ <string name="spoken_emoji_1F358" msgid="3042693264748036476">"चामलको पातलो बिस्कुट"</string>
+ <string name="spoken_emoji_1F359" msgid="3988148661730121958">"भातको बल"</string>
+ <string name="spoken_emoji_1F35A" msgid="1763824172198327268">"पकाएको भात"</string>
+ <string name="spoken_emoji_1F35B" msgid="62530406745717835">"करी र भात"</string>
+ <string name="spoken_emoji_1F35C" msgid="7537756539198945509">"उमालेको कचौरा"</string>
+ <string name="spoken_emoji_1F35D" msgid="8173523083861875196">"स्पैगेट्टी"</string>
+ <string name="spoken_emoji_1F35E" msgid="2935428307894662571">"रोटी"</string>
+ <string name="spoken_emoji_1F35F" msgid="4840297386785728443">"फ्रान्सेली फ्राइज"</string>
+ <string name="spoken_emoji_1F360" msgid="4094659855684686801">"रोस्ट गरेको मिठो आलु"</string>
+ <string name="spoken_emoji_1F361" msgid="6475486395784096109">"जापानी मिठाई"</string>
+ <string name="spoken_emoji_1F362" msgid="5004692577661076275">"ओदेन (जापानी खाना)"</string>
+ <string name="spoken_emoji_1F363" msgid="1606603765717743806">"भात र काँचो माछा"</string>
+ <string name="spoken_emoji_1F364" msgid="6550457766169570811">"तारेको सानो माछा"</string>
+ <string name="spoken_emoji_1F365" msgid="4963815540953316307">"घुमाउरो डिजाइनमा माछा केक"</string>
+ <string name="spoken_emoji_1F366" msgid="7862401745277049404">"नरम आइसक्रिम"</string>
+ <string name="spoken_emoji_1F367" msgid="7447972978281980414">"चुर्ण बरफ"</string>
+ <string name="spoken_emoji_1F368" msgid="7790003146142724913">"आइसक्रीम"</string>
+ <string name="spoken_emoji_1F369" msgid="7383712944084857350">"डोनट"</string>
+ <string name="spoken_emoji_1F36A" msgid="2726271795913042295">"कुकीज"</string>
+ <string name="spoken_emoji_1F36B" msgid="6342163604299875931">"चकलेट बार"</string>
+ <string name="spoken_emoji_1F36C" msgid="2168934753998218790">"क्यान्डी"</string>
+ <string name="spoken_emoji_1F36D" msgid="3671507903799975792">"लालीपप"</string>
+ <string name="spoken_emoji_1F36E" msgid="4630541402785165902">"कस्तार्ड"</string>
<string name="spoken_emoji_1F36F" msgid="5577915387425169439">"महदानी"</string>
- <!-- no translation found for spoken_emoji_1F370 (7243244547866114951) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F371 (6731527040552916358) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F372 (1635035323832181733) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F373 (7799289534289221045) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F374 (5973820884987069131) -->
- <skip />
+ <string name="spoken_emoji_1F370" msgid="7243244547866114951">"सर्टकेक"</string>
+ <string name="spoken_emoji_1F371" msgid="6731527040552916358">"टिफिन बट्टा"</string>
+ <string name="spoken_emoji_1F372" msgid="1635035323832181733">"खानाको भाँडो"</string>
+ <string name="spoken_emoji_1F373" msgid="7799289534289221045">"पकाउँदै"</string>
+ <string name="spoken_emoji_1F374" msgid="5973820884987069131">"काँटा र चक्कु"</string>
<string name="spoken_emoji_1F375" msgid="1074832087699617700">"ह्यान्डल बिनाको चियाकप"</string>
- <!-- no translation found for spoken_emoji_1F376 (6499274685584852067) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F377 (1762398562314172075) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F378 (5528234560590117516) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F379 (790581290787943325) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F37A (391966822450619516) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F37B (9015043286465670662) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F37C (2532113819464508894) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F380 (3487363857092458827) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F381 (614180683680675444) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F382 (4720497171946687501) -->
- <skip />
+ <string name="spoken_emoji_1F376" msgid="6499274685584852067">"शाके (जापानी रक्सी) बोतल र प्याला"</string>
+ <string name="spoken_emoji_1F377" msgid="1762398562314172075">"रक्सी गिलास"</string>
+ <string name="spoken_emoji_1F378" msgid="5528234560590117516">"ककटेल गिलास"</string>
+ <string name="spoken_emoji_1F379" msgid="790581290787943325">"ट्रपिकल पेयपदार्थ"</string>
+ <string name="spoken_emoji_1F37A" msgid="391966822450619516">"बियर मग"</string>
+ <string name="spoken_emoji_1F37B" msgid="9015043286465670662">"बियर मग छुआएको"</string>
+ <string name="spoken_emoji_1F37C" msgid="2532113819464508894">"बच्चाको बोतल"</string>
+ <string name="spoken_emoji_1F380" msgid="3487363857092458827">"रिबन"</string>
+ <string name="spoken_emoji_1F381" msgid="614180683680675444">"बेरिएको उपहार"</string>
+ <string name="spoken_emoji_1F382" msgid="4720497171946687501">"जन्मदिनको केक"</string>
<string name="spoken_emoji_1F383" msgid="3536505941578757623">"ज्याक-o-लालटिन"</string>
- <!-- no translation found for spoken_emoji_1F384 (1797870204479059004) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F385 (1754174063483626367) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F386 (2130445450758114746) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F387 (3403182563117999933) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F388 (2903047203723251804) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F389 (2352830665883549388) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F38A (6280428984773641322) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F38B (4902225837479015489) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F38C (7623268024030989365) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F38D (8237542796124408528) -->
- <skip />
+ <string name="spoken_emoji_1F384" msgid="1797870204479059004">"क्रिसमस रूख"</string>
+ <string name="spoken_emoji_1F385" msgid="1754174063483626367">"सान्ताक्लस"</string>
+ <string name="spoken_emoji_1F386" msgid="2130445450758114746">"आतसबाजी"</string>
+ <string name="spoken_emoji_1F387" msgid="3403182563117999933">"आतसबाजी झिल्का"</string>
+ <string name="spoken_emoji_1F388" msgid="2903047203723251804">"बेलुन"</string>
+ <string name="spoken_emoji_1F389" msgid="2352830665883549388">"पार्टी भंडुवा"</string>
+ <string name="spoken_emoji_1F38A" msgid="6280428984773641322">"रङगिन बल"</string>
+ <string name="spoken_emoji_1F38B" msgid="4902225837479015489">"तानाबाता रूख"</string>
+ <string name="spoken_emoji_1F38C" msgid="7623268024030989365">"क्रस झण्डा"</string>
+ <string name="spoken_emoji_1F38D" msgid="8237542796124408528">"पाइन सजावट"</string>
<string name="spoken_emoji_1F38E" msgid="5373397476238212371">"जापानी गुडिया"</string>
- <!-- no translation found for spoken_emoji_1F38F (8754091376829552844) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F390 (8903307048095431374) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F391 (2134952069191911841) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F392 (6380405493914304737) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F393 (6947890064872470996) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3A0 (3572095190082826057) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3A1 (4300565511681058798) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3A2 (15486093912232140) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3A3 (921739319504942924) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3A4 (7497596355346856950) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3A5 (4290497821228183002) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3A6 (26019057872319055) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3A7 (837856608794094105) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3A8 (2332260356509244587) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3A9 (9045869366525115256) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3AA (5728760354237132) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3AB (1657997517193216284) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3AC (4317366554314492152) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3AD (607157286336130470) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3AE (2902308174671548150) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3AF (5420539221790296407) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3B0 (7440244806527891956) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3B1 (545544382391379234) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3B2 (8302262034774787493) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3B3 (5180870610771027520) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3B4 (4723852033266071564) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3B5 (1998470239850548554) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3B6 (3827730457113941705) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3B7 (5503403099445042180) -->
- <skip />
+ <string name="spoken_emoji_1F38F" msgid="8754091376829552844">"कार्प तोरण"</string>
+ <string name="spoken_emoji_1F390" msgid="8903307048095431374">"हावा झंकार"</string>
+ <string name="spoken_emoji_1F391" msgid="2134952069191911841">"चन्द्र अबलोकन समारोह"</string>
+ <string name="spoken_emoji_1F392" msgid="6380405493914304737">"स्कूल झोला"</string>
+ <string name="spoken_emoji_1F393" msgid="6947890064872470996">"दिक्षान्त समारोह टोपी"</string>
+ <string name="spoken_emoji_1F3A0" msgid="3572095190082826057">"खेलाची घोडा"</string>
+ <string name="spoken_emoji_1F3A1" msgid="4300565511681058798">"रोटेपिङ्"</string>
+ <string name="spoken_emoji_1F3A2" msgid="15486093912232140">"रोलर कोस्टर"</string>
+ <string name="spoken_emoji_1F3A3" msgid="921739319504942924">"माछामार्ने पोल र माछा"</string>
+ <string name="spoken_emoji_1F3A4" msgid="7497596355346856950">"माइक्रोफोन"</string>
+ <string name="spoken_emoji_1F3A5" msgid="4290497821228183002">"चलचित्र क्यामेरा"</string>
+ <string name="spoken_emoji_1F3A6" msgid="26019057872319055">"चलचित्र"</string>
+ <string name="spoken_emoji_1F3A7" msgid="837856608794094105">"हेडफोन"</string>
+ <string name="spoken_emoji_1F3A8" msgid="2332260356509244587">"कलाकार रङदानी"</string>
+ <string name="spoken_emoji_1F3A9" msgid="9045869366525115256">"शीर्ष टोपी"</string>
+ <string name="spoken_emoji_1F3AA" msgid="5728760354237132">"सर्कस पाल"</string>
+ <string name="spoken_emoji_1F3AB" msgid="1657997517193216284">"टिकट"</string>
+ <string name="spoken_emoji_1F3AC" msgid="4317366554314492152">"क्लापर बोर्ड"</string>
+ <string name="spoken_emoji_1F3AD" msgid="607157286336130470">"कला प्रदर्शन"</string>
+ <string name="spoken_emoji_1F3AE" msgid="2902308174671548150">"भिडियो खेल"</string>
+ <string name="spoken_emoji_1F3AF" msgid="5420539221790296407">"प्रत्यक्ष निशाना"</string>
+ <string name="spoken_emoji_1F3B0" msgid="7440244806527891956">"स्लट मिसिन"</string>
+ <string name="spoken_emoji_1F3B1" msgid="545544382391379234">"बिलियर्ड्स"</string>
+ <string name="spoken_emoji_1F3B2" msgid="8302262034774787493">"पोट"</string>
+ <string name="spoken_emoji_1F3B3" msgid="5180870610771027520">"बलिङ"</string>
+ <string name="spoken_emoji_1F3B4" msgid="4723852033266071564">"फूलछापे तास"</string>
+ <string name="spoken_emoji_1F3B5" msgid="1998470239850548554">"साङ्गीतिक अक्षर"</string>
+ <string name="spoken_emoji_1F3B6" msgid="3827730457113941705">"बहु साङ्गीतिक अक्षर"</string>
+ <string name="spoken_emoji_1F3B7" msgid="5503403099445042180">"सेक्सोफोन"</string>
<string name="spoken_emoji_1F3B8" msgid="3985658156795011430">"गितार"</string>
- <!-- no translation found for spoken_emoji_1F3B9 (5596295757967881451) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3BA (4284064120340683558) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3BB (2856598510069988745) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3BC (1608424748821446230) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3BD (5490786111375627777) -->
- <skip />
+ <string name="spoken_emoji_1F3B9" msgid="5596295757967881451">"साङ्गीतिक कुञ्जीपाटी"</string>
+ <string name="spoken_emoji_1F3BA" msgid="4284064120340683558">"बिगुल"</string>
+ <string name="spoken_emoji_1F3BB" msgid="2856598510069988745">"भ्वायलिन"</string>
+ <string name="spoken_emoji_1F3BC" msgid="1608424748821446230">"साङ्गीतिक स्कोर"</string>
+ <string name="spoken_emoji_1F3BD" msgid="5490786111375627777">"तेर्सो धर्के जर्सी"</string>
<string name="spoken_emoji_1F3BE" msgid="1851613105691627931">"टेनिस रैकेट र बल"</string>
- <!-- no translation found for spoken_emoji_1F3BF (6862405997423247921) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3C0 (7421420756115104085) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3C1 (6926537251677319922) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3C2 (5708596929237987082) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3C3 (5850982999510115824) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3C4 (8468355585994639838) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3C6 (9094474706847545409) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3C7 (8172206200368370116) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3C8 (5619171461277597709) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3C9 (6371294008765871043) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3CA (130977831787806932) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3E0 (6277213201655811842) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3E1 (233476176077538885) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3E2 (919736380093964570) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3E3 (6177606081825094184) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3E4 (717377871070970293) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3E5 (1350532500431776780) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3E6 (342132788513806214) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3E7 (6322352038284944265) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3E8 (5864918444350599907) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3E9 (7830416185375326938) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3EA (5081084413084360479) -->
- <skip />
+ <string name="spoken_emoji_1F3BF" msgid="6862405997423247921">"स्की र स्की बुट"</string>
+ <string name="spoken_emoji_1F3C0" msgid="7421420756115104085">"बास्केटबल र रिंग"</string>
+ <string name="spoken_emoji_1F3C1" msgid="6926537251677319922">"चेकढाँचा झण्डा"</string>
+ <string name="spoken_emoji_1F3C2" msgid="5708596929237987082">"स्नोबोर्दर"</string>
+ <string name="spoken_emoji_1F3C3" msgid="5850982999510115824">"धावक"</string>
+ <string name="spoken_emoji_1F3C4" msgid="8468355585994639838">"सर्फ़र"</string>
+ <string name="spoken_emoji_1F3C6" msgid="9094474706847545409">"शिल"</string>
+ <string name="spoken_emoji_1F3C7" msgid="8172206200368370116">"घोडा दौड"</string>
+ <string name="spoken_emoji_1F3C8" msgid="5619171461277597709">"अमेरिकी फुटबल"</string>
+ <string name="spoken_emoji_1F3C9" msgid="6371294008765871043">"रग्बी फुटबल"</string>
+ <string name="spoken_emoji_1F3CA" msgid="130977831787806932">"पौडीबाज"</string>
+ <string name="spoken_emoji_1F3E0" msgid="6277213201655811842">"घर निर्माण"</string>
+ <string name="spoken_emoji_1F3E1" msgid="233476176077538885">"बगैचा सहित घर"</string>
+ <string name="spoken_emoji_1F3E2" msgid="919736380093964570">"कार्यालय भवन"</string>
+ <string name="spoken_emoji_1F3E3" msgid="6177606081825094184">"जापानी हुलाक"</string>
+ <string name="spoken_emoji_1F3E4" msgid="717377871070970293">"युरोपेली हुलाक"</string>
+ <string name="spoken_emoji_1F3E5" msgid="1350532500431776780">"अस्पताल"</string>
+ <string name="spoken_emoji_1F3E6" msgid="342132788513806214">"बैंक"</string>
+ <string name="spoken_emoji_1F3E7" msgid="6322352038284944265">"स्वचालित पारंगत मिसिन"</string>
+ <string name="spoken_emoji_1F3E8" msgid="5864918444350599907">"होटल"</string>
+ <string name="spoken_emoji_1F3E9" msgid="7830416185375326938">"मायालु होटल"</string>
+ <string name="spoken_emoji_1F3EA" msgid="5081084413084360479">"सुविधाजनक स्टोर"</string>
<string name="spoken_emoji_1F3EB" msgid="7010966528205150525">"स्कूल"</string>
- <!-- no translation found for spoken_emoji_1F3EC (4845978861878295154) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3ED (3980316226665215370) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3EE (1253964276770550248) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3EF (1128975573507389883) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3F0 (1544632297502291578) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F400 (2063034795679578294) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F401 (6736421616217369594) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F402 (7276670995895485604) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F403 (8045709541897118928) -->
- <skip />
+ <string name="spoken_emoji_1F3EC" msgid="4845978861878295154">"डिपार्टमेन्ट स्टोर"</string>
+ <string name="spoken_emoji_1F3ED" msgid="3980316226665215370">"कारखाना"</string>
+ <string name="spoken_emoji_1F3EE" msgid="1253964276770550248">"इजाकाया लालटेन"</string>
+ <string name="spoken_emoji_1F3EF" msgid="1128975573507389883">"जापानी किल्ला"</string>
+ <string name="spoken_emoji_1F3F0" msgid="1544632297502291578">"युरोपेली किल्ला"</string>
+ <string name="spoken_emoji_1F400" msgid="2063034795679578294">"मुसा"</string>
+ <string name="spoken_emoji_1F401" msgid="6736421616217369594">"घरेलु मुसा"</string>
+ <string name="spoken_emoji_1F402" msgid="7276670995895485604">"साँढे"</string>
+ <string name="spoken_emoji_1F403" msgid="8045709541897118928">"जल भैंसी"</string>
<string name="spoken_emoji_1F404" msgid="5240777285676662335">"गाई"</string>
- <!-- no translation found for spoken_emoji_1F406 (5163461930159540018) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F407 (6905370221172708160) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F408 (1362164550508207284) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F409 (8476130983168866013) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F40A (1149626786411545043) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F40B (5199104921208397643) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F40C (2704006052881702675) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F40D (8648186663643157522) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F40E (7219137467573327268) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F40F (7834336676729040395) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F410 (8686765722255775031) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F411 (3585715397876383525) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F412 (4924794582980077838) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F413 (1460475310405677377) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F414 (5857296282631892219) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F415 (5920041074892949527) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F416 (4362403392912540286) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F417 (6836978415840795128) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F418 (7926161463897783691) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F419 (1055233959755784186) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F41A (5195666556511558060) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F41B (7652480167465557832) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F41C (1123461148697574239) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F41D (718579308764058851) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F41E (6766305509608115467) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F41F (1207261298343160838) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F420 (1041145003133609221) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F421 (1748378324417438751) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F422 (4106724877523329148) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F423 (4077407945958691907) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F424 (6911326019270172283) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F425 (5466514196557885577) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F426 (2163979138772892755) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F427 (3585670324511212961) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F428 (7955440808647898579) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F429 (5028269352809819035) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F42A (4681926706404032484) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F42B (2725166074981558322) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F42C (6764791873413727085) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F42D (1033643138546864251) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F42E (8099223337120508820) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F42F (2104743989330781572) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F430 (525492897063150160) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F431 (6051358666235016851) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F432 (7698001871193018305) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F433 (3762356053512899326) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F434 (3619943222159943226) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F435 (59199202683252958) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F436 (340544719369009828) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F437 (1219818379784982585) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F438 (9128124743321008210) -->
- <skip />
+ <string name="spoken_emoji_1F406" msgid="5163461930159540018">"चितुवा"</string>
+ <string name="spoken_emoji_1F407" msgid="6905370221172708160">"खरायो"</string>
+ <string name="spoken_emoji_1F408" msgid="1362164550508207284">"बिरालो"</string>
+ <string name="spoken_emoji_1F409" msgid="8476130983168866013">"ड्रागन"</string>
+ <string name="spoken_emoji_1F40A" msgid="1149626786411545043">"गोही"</string>
+ <string name="spoken_emoji_1F40B" msgid="5199104921208397643">"ह्वेल"</string>
+ <string name="spoken_emoji_1F40C" msgid="2704006052881702675">"घोंघा"</string>
+ <string name="spoken_emoji_1F40D" msgid="8648186663643157522">"साँप"</string>
+ <string name="spoken_emoji_1F40E" msgid="7219137467573327268">"घोडा"</string>
+ <string name="spoken_emoji_1F40F" msgid="7834336676729040395">"मेष"</string>
+ <string name="spoken_emoji_1F410" msgid="8686765722255775031">"बाख्रा"</string>
+ <string name="spoken_emoji_1F411" msgid="3585715397876383525">"भेडा"</string>
+ <string name="spoken_emoji_1F412" msgid="4924794582980077838">"बाँदर"</string>
+ <string name="spoken_emoji_1F413" msgid="1460475310405677377">"रोस्टर कुखुरा"</string>
+ <string name="spoken_emoji_1F414" msgid="5857296282631892219">"कुखुरा"</string>
+ <string name="spoken_emoji_1F415" msgid="5920041074892949527">"कुकुर"</string>
+ <string name="spoken_emoji_1F416" msgid="4362403392912540286">"सुँगुर"</string>
+ <string name="spoken_emoji_1F417" msgid="6836978415840795128">"बँदेल"</string>
+ <string name="spoken_emoji_1F418" msgid="7926161463897783691">"हात्ती"</string>
+ <string name="spoken_emoji_1F419" msgid="1055233959755784186">"अक्टोपस"</string>
+ <string name="spoken_emoji_1F41A" msgid="5195666556511558060">"शंख"</string>
+ <string name="spoken_emoji_1F41B" msgid="7652480167465557832">"कनसुत्लो"</string>
+ <string name="spoken_emoji_1F41C" msgid="1123461148697574239">"कमिला"</string>
+ <string name="spoken_emoji_1F41D" msgid="718579308764058851">"माहुरी"</string>
+ <string name="spoken_emoji_1F41E" msgid="6766305509608115467">"खपटे कीरा"</string>
+ <string name="spoken_emoji_1F41F" msgid="1207261298343160838">"माछा"</string>
+ <string name="spoken_emoji_1F420" msgid="1041145003133609221">"ट्रपिकल माछा"</string>
+ <string name="spoken_emoji_1F421" msgid="1748378324417438751">"फुगु"</string>
+ <string name="spoken_emoji_1F422" msgid="4106724877523329148">"कछुवा"</string>
+ <string name="spoken_emoji_1F423" msgid="4077407945958691907">"चल्ला कोरल्नु"</string>
+ <string name="spoken_emoji_1F424" msgid="6911326019270172283">"सानोचल्ला"</string>
+ <string name="spoken_emoji_1F425" msgid="5466514196557885577">"अधोमुख सानोचल्ला"</string>
+ <string name="spoken_emoji_1F426" msgid="2163979138772892755">"चरा"</string>
+ <string name="spoken_emoji_1F427" msgid="3585670324511212961">"पेंगुइन"</string>
+ <string name="spoken_emoji_1F428" msgid="7955440808647898579">"कोआल"</string>
+ <string name="spoken_emoji_1F429" msgid="5028269352809819035">"पूडल"</string>
+ <string name="spoken_emoji_1F42A" msgid="4681926706404032484">"अरेबि उँट"</string>
+ <string name="spoken_emoji_1F42B" msgid="2725166074981558322">"दुईजुरे उँट"</string>
+ <string name="spoken_emoji_1F42C" msgid="6764791873413727085">"डल्फिन"</string>
+ <string name="spoken_emoji_1F42D" msgid="1033643138546864251">"मुसा अनुहार"</string>
+ <string name="spoken_emoji_1F42E" msgid="8099223337120508820">"गाई अनुहार"</string>
+ <string name="spoken_emoji_1F42F" msgid="2104743989330781572">"बाघ अनुहार"</string>
+ <string name="spoken_emoji_1F430" msgid="525492897063150160">"खरायो अनुहार"</string>
+ <string name="spoken_emoji_1F431" msgid="6051358666235016851">"बिरालो अनुहार"</string>
+ <string name="spoken_emoji_1F432" msgid="7698001871193018305">"ड्रागन अनुहार"</string>
+ <string name="spoken_emoji_1F433" msgid="3762356053512899326">"ह्वेल पानीफाल्दै"</string>
+ <string name="spoken_emoji_1F434" msgid="3619943222159943226">"घोडा अनुहार"</string>
+ <string name="spoken_emoji_1F435" msgid="59199202683252958">"बाँदर अनुहार"</string>
+ <string name="spoken_emoji_1F436" msgid="340544719369009828">"कुकुर अनुहार"</string>
+ <string name="spoken_emoji_1F437" msgid="1219818379784982585">"सुँगुर अनुहार"</string>
+ <string name="spoken_emoji_1F438" msgid="9128124743321008210">"भ्यागुतो अनुहार"</string>
<string name="spoken_emoji_1F439" msgid="1424161319554642266">"लोखर्के अनुहार"</string>
- <!-- no translation found for spoken_emoji_1F43A (6727645488430385584) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F43B (5397170068392865167) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F43C (2715995734367032431) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F43D (6005480717951776597) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F43E (8917626103219080547) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F440 (7144338258163384433) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F442 (1905515392292676124) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F443 (1491504447758933115) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F444 (3654613047946080332) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F445 (7024905244040509204) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F446 (2150365643636471745) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F447 (8794022344940891388) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F448 (3261812959215550650) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F449 (4764447975177805991) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F44A (7197417095486424841) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F44B (1975968945250833117) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F44C (3185919567897876562) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F44D (6182553970602667815) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F44E (8030851867365111809) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F44F (5148753662268213389) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F450 (1012021072085157054) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F451 (8257466714629051320) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F452 (4567394011149905466) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F453 (5978410551173163010) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F454 (348469036193323252) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F455 (5665118831861433578) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F456 (1890991330923356408) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F457 (3904310482655702620) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F458 (5704243858031107692) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F459 (3553148747050035251) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F45A (1389654639484716101) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F45B (1113293170254222904) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F45C (3410257778598006936) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F45D (812176504300064819) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F45E (2901741399934723562) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F45F (6828566359287798863) -->
- <skip />
- <string name="spoken_emoji_1F460" msgid="305863879170420855">"अग्लो-कुर्कुच्चा भएको जुत्ता"</string>
- <!-- no translation found for spoken_emoji_1F461 (5160493217831417630) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F462 (1722897795554863734) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F463 (5850772903593010699) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F464 (1228335905487734913) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F465 (4461307702499679879) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F466 (1938873085514108889) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F467 (8237080594860144998) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F468 (6081300722526675382) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F469 (1090140923076108158) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F46A (5063570981942606595) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F46B (6795882374287327952) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F46C (6844464165783964495) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F46D (2316773068014053180) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F46E (5897625605860822401) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F46F (7716871657717641490) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F470 (6409995400510338892) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F471 (3058247860441670806) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F472 (3928854667819339142) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F473 (5921952095808988381) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F474 (1082237499496725183) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F475 (7280323988642212761) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F476 (4713322657821088296) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F477 (2197036131029221370) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F478 (7245521193493488875) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F479 (6876475321015553972) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F47A (3900813633102703571) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F47B (2608250873194079390) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F47C (3838699131276537421) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F47D (2874077455888369538) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F47E (3642607168625579507) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F47F (441605977269926252) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F480 (3696253485164878739) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F481 (320408708521966893) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F482 (3424354860245608949) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F483 (3221113594843849083) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F484 (7348014979080444885) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F485 (6133507975565116339) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F486 (9085459968247394155) -->
- <skip />
+ <string name="spoken_emoji_1F43A" msgid="6727645488430385584">"ब्वाँसो अनुहार"</string>
+ <string name="spoken_emoji_1F43B" msgid="5397170068392865167">"भालु अनुहार"</string>
+ <string name="spoken_emoji_1F43C" msgid="2715995734367032431">"पाण्डा अनुहार"</string>
+ <string name="spoken_emoji_1F43D" msgid="6005480717951776597">"सुँगुर नाक"</string>
+ <string name="spoken_emoji_1F43E" msgid="8917626103219080547">"पंजा छाप"</string>
+ <string name="spoken_emoji_1F440" msgid="7144338258163384433">"आँखाहरु"</string>
+ <string name="spoken_emoji_1F442" msgid="1905515392292676124">"कान"</string>
+ <string name="spoken_emoji_1F443" msgid="1491504447758933115">"नाक"</string>
+ <string name="spoken_emoji_1F444" msgid="3654613047946080332">"मुख"</string>
+ <string name="spoken_emoji_1F445" msgid="7024905244040509204">"जिब्रो"</string>
+ <string name="spoken_emoji_1F446" msgid="2150365643636471745">"ठडाएको औंला पछाडिबाट सूचकांक इशारा"</string>
+ <string name="spoken_emoji_1F447" msgid="8794022344940891388">"घोप्ताएको औंला पछाडिबाट सूचकांक इशारा"</string>
+ <string name="spoken_emoji_1F448" msgid="3261812959215550650">"औंला इशारा पछाडिबाट सूचकांक बायाँ"</string>
+ <string name="spoken_emoji_1F449" msgid="4764447975177805991">"औंला इशारा पछाडिबाट सूचकांक दायाँ"</string>
+ <string name="spoken_emoji_1F44A" msgid="7197417095486424841">"मुठी चिन्ह"</string>
+ <string name="spoken_emoji_1F44B" msgid="1975968945250833117">"हल्लाएको हात चिन्ह"</string>
+ <string name="spoken_emoji_1F44C" msgid="3185919567897876562">"ठीक हात चिन्ह"</string>
+ <string name="spoken_emoji_1F44D" msgid="6182553970602667815">"औंठा माथी चिन्ह"</string>
+ <string name="spoken_emoji_1F44E" msgid="8030851867365111809">"औंठा तल चिन्ह"</string>
+ <string name="spoken_emoji_1F44F" msgid="5148753662268213389">"ताली चिन्ह"</string>
+ <string name="spoken_emoji_1F450" msgid="1012021072085157054">"खुला हात चिन्ह"</string>
+ <string name="spoken_emoji_1F451" msgid="8257466714629051320">"श्रीपेच"</string>
+ <string name="spoken_emoji_1F452" msgid="4567394011149905466">"महिला टोपी"</string>
+ <string name="spoken_emoji_1F453" msgid="5978410551173163010">"चश्मा"</string>
+ <string name="spoken_emoji_1F454" msgid="348469036193323252">"टाई"</string>
+ <string name="spoken_emoji_1F455" msgid="5665118831861433578">"टी-शर्ट"</string>
+ <string name="spoken_emoji_1F456" msgid="1890991330923356408">"जीन्स"</string>
+ <string name="spoken_emoji_1F457" msgid="3904310482655702620">"पोशाक"</string>
+ <string name="spoken_emoji_1F458" msgid="5704243858031107692">"किमोनो"</string>
+ <string name="spoken_emoji_1F459" msgid="3553148747050035251">"बिकिनी"</string>
+ <string name="spoken_emoji_1F45A" msgid="1389654639484716101">"महिला लुगा"</string>
+ <string name="spoken_emoji_1F45B" msgid="1113293170254222904">"बटुआ"</string>
+ <string name="spoken_emoji_1F45C" msgid="3410257778598006936">"हैंडबैग"</string>
+ <string name="spoken_emoji_1F45D" msgid="812176504300064819">"थैली"</string>
+ <string name="spoken_emoji_1F45E" msgid="2901741399934723562">"केटा जुत्ता"</string>
+ <string name="spoken_emoji_1F45F" msgid="6828566359287798863">"खेलाडी जुत्ता"</string>
+ <string name="spoken_emoji_1F460" msgid="305863879170420855">"अग्लो हिलको जुत्ता"</string>
+ <string name="spoken_emoji_1F461" msgid="5160493217831417630">"महिला जुत्ता"</string>
+ <string name="spoken_emoji_1F462" msgid="1722897795554863734">"महिला बूट"</string>
+ <string name="spoken_emoji_1F463" msgid="5850772903593010699">"पैताला छाप"</string>
+ <string name="spoken_emoji_1F464" msgid="1228335905487734913">"छाँया चित्र"</string>
+ <string name="spoken_emoji_1F465" msgid="4461307702499679879">"छाँया चित्रहरू"</string>
+ <string name="spoken_emoji_1F466" msgid="1938873085514108889">"केटा"</string>
+ <string name="spoken_emoji_1F467" msgid="8237080594860144998">"केटी"</string>
+ <string name="spoken_emoji_1F468" msgid="6081300722526675382">"मान्छे"</string>
+ <string name="spoken_emoji_1F469" msgid="1090140923076108158">"महिला"</string>
+ <string name="spoken_emoji_1F46A" msgid="5063570981942606595">"परिवार"</string>
+ <string name="spoken_emoji_1F46B" msgid="6795882374287327952">"स्त्री र पुरुष हातसमात्दै"</string>
+ <string name="spoken_emoji_1F46C" msgid="6844464165783964495">"दुई पुरुष हातसमात्दै"</string>
+ <string name="spoken_emoji_1F46D" msgid="2316773068014053180">"दुई महिला हातसमात्दै"</string>
+ <string name="spoken_emoji_1F46E" msgid="5897625605860822401">"प्रहरी अधिकारी"</string>
+ <string name="spoken_emoji_1F46F" msgid="7716871657717641490">"खरायो काने महिला"</string>
+ <string name="spoken_emoji_1F470" msgid="6409995400510338892">"घुम्टोमा दुलही"</string>
+ <string name="spoken_emoji_1F471" msgid="3058247860441670806">"खैरो कपाल व्यक्ति"</string>
+ <string name="spoken_emoji_1F472" msgid="3928854667819339142">"गुआपी माओ पहिरनमा मानिस"</string>
+ <string name="spoken_emoji_1F473" msgid="5921952095808988381">"फेटाधारी मानिस"</string>
+ <string name="spoken_emoji_1F474" msgid="1082237499496725183">"बृढमान्छे"</string>
+ <string name="spoken_emoji_1F475" msgid="7280323988642212761">"बृढा महिला"</string>
+ <string name="spoken_emoji_1F476" msgid="4713322657821088296">"बच्चा"</string>
+ <string name="spoken_emoji_1F477" msgid="2197036131029221370">"निर्माण कामदार"</string>
+ <string name="spoken_emoji_1F478" msgid="7245521193493488875">"राजकुमारी"</string>
+ <string name="spoken_emoji_1F479" msgid="6876475321015553972">"जापानी राक्षस"</string>
+ <string name="spoken_emoji_1F47A" msgid="3900813633102703571">"जापानी लुटेरा"</string>
+ <string name="spoken_emoji_1F47B" msgid="2608250873194079390">"भूत"</string>
+ <string name="spoken_emoji_1F47C" msgid="3838699131276537421">"सानोपरी"</string>
+ <string name="spoken_emoji_1F47D" msgid="2874077455888369538">"अन्य ग्रहबासी"</string>
+ <string name="spoken_emoji_1F47E" msgid="3642607168625579507">"अन्य ग्रहबासी राक्षस"</string>
+ <string name="spoken_emoji_1F47F" msgid="441605977269926252">"सानो शैतान"</string>
+ <string name="spoken_emoji_1F480" msgid="3696253485164878739">"खोपडी"</string>
+ <string name="spoken_emoji_1F481" msgid="320408708521966893">"सोधपुछको व्यक्ति"</string>
+ <string name="spoken_emoji_1F482" msgid="3424354860245608949">"पहरेदार"</string>
+ <string name="spoken_emoji_1F483" msgid="3221113594843849083">"नर्तक"</string>
+ <string name="spoken_emoji_1F484" msgid="7348014979080444885">"लिपस्टिक"</string>
+ <string name="spoken_emoji_1F485" msgid="6133507975565116339">"नेल पलिश"</string>
+ <string name="spoken_emoji_1F486" msgid="9085459968247394155">"अनुहार मालिश"</string>
<string name="spoken_emoji_1F487" msgid="1479113637259592150">"सैलुन"</string>
- <!-- no translation found for spoken_emoji_1F488 (6922559285234100252) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F489 (8114863680950147305) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F48A (8526843630145963032) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F48B (2538528967897640292) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F48C (1681173271652890232) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F48D (8259886164999042373) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F48E (8777981696011111101) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F48F (741593675183677907) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F490 (4482549128959806736) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F491 (2305245307882441500) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F492 (3884119934804475732) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F493 (1208828371565525121) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F494 (6198876398509338718) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F495 (9206202744967130919) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F496 (5436953041732207775) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F497 (7285142863951448473) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F498 (7940131245037575715) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F499 (4453235040265550009) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F49A (6262178648366971405) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F49B (8085384999750714368) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F49C (453829540120898698) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F49D (3460534750224161888) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F49E (4490636226072523867) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F49F (2059319756421226336) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4A0 (1954850380550212038) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4A1 (403137413540909021) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4A2 (2604192053295622063) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4A3 (6378351742957821735) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4A4 (7217736258870346625) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4A5 (5401995723541239858) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4A6 (3837802182716483848) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4A7 (5718438987757885141) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4A8 (4472108229720006377) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4A9 (1240958472788430032) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4AA (8427525538635146416) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4AB (5484114759939427459) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4AC (5571196638219612682) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4AD (353174619257798652) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4AE (1223142786927162641) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4AF (3526278354452138397) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4B0 (4124102195175124156) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4B1 (8339494003418572905) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4B2 (3179159430187243132) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4B3 (5375412518221759596) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4B4 (1068592463669453204) -->
- <skip />
- <string name="spoken_emoji_1F4B5" msgid="1426708699891832564">"डलर हस्ताक्षरित बैकनोट"</string>
- <!-- no translation found for spoken_emoji_1F4B6 (8289249930736444837) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4B7 (5245100496860739429) -->
- <skip />
+ <string name="spoken_emoji_1F488" msgid="6922559285234100252">"नाई पोल"</string>
+ <string name="spoken_emoji_1F489" msgid="8114863680950147305">"सुई"</string>
+ <string name="spoken_emoji_1F48A" msgid="8526843630145963032">"गोली"</string>
+ <string name="spoken_emoji_1F48B" msgid="2538528967897640292">"चुम्बन चिन्ह"</string>
+ <string name="spoken_emoji_1F48C" msgid="1681173271652890232">"प्रेमपत्र"</string>
+ <string name="spoken_emoji_1F48D" msgid="8259886164999042373">"औंठी"</string>
+ <string name="spoken_emoji_1F48E" msgid="8777981696011111101">"रत्न पत्थर"</string>
+ <string name="spoken_emoji_1F48F" msgid="741593675183677907">"चुम्बन"</string>
+ <string name="spoken_emoji_1F490" msgid="4482549128959806736">"फूलगुच्छा"</string>
+ <string name="spoken_emoji_1F491" msgid="2305245307882441500">"युगलजोडी"</string>
+ <string name="spoken_emoji_1F492" msgid="3884119934804475732">"विवाह"</string>
+ <string name="spoken_emoji_1F493" msgid="1208828371565525121">"हृदय धड्कन"</string>
+ <string name="spoken_emoji_1F494" msgid="6198876398509338718">"टुटेको हृदय"</string>
+ <string name="spoken_emoji_1F495" msgid="9206202744967130919">"दुई हृदय"</string>
+ <string name="spoken_emoji_1F496" msgid="5436953041732207775">"चम्केको हृदय"</string>
+ <string name="spoken_emoji_1F497" msgid="7285142863951448473">"बढ्दो हृदय"</string>
+ <string name="spoken_emoji_1F498" msgid="7940131245037575715">"तीर सहित हृदय"</string>
+ <string name="spoken_emoji_1F499" msgid="4453235040265550009">"नीलो हृदय"</string>
+ <string name="spoken_emoji_1F49A" msgid="6262178648366971405">"हरियो हृदय"</string>
+ <string name="spoken_emoji_1F49B" msgid="8085384999750714368">"पहेंलो हृदय"</string>
+ <string name="spoken_emoji_1F49C" msgid="453829540120898698">"बैजनी हृदय"</string>
+ <string name="spoken_emoji_1F49D" msgid="3460534750224161888">"रिबन साथ हृदय"</string>
+ <string name="spoken_emoji_1F49E" msgid="4490636226072523867">"परिक्रामी हृदय"</string>
+ <string name="spoken_emoji_1F49F" msgid="2059319756421226336">"हृदय सजावट"</string>
+ <string name="spoken_emoji_1F4A0" msgid="1954850380550212038">"भित्र बिन्दु साथ हीरा आकार"</string>
+ <string name="spoken_emoji_1F4A1" msgid="403137413540909021">"इलेक्ट्रिक चिम"</string>
+ <string name="spoken_emoji_1F4A2" msgid="2604192053295622063">"रिस प्रतीक"</string>
+ <string name="spoken_emoji_1F4A3" msgid="6378351742957821735">"बम"</string>
+ <string name="spoken_emoji_1F4A4" msgid="7217736258870346625">"सुताहा प्रतीक"</string>
+ <string name="spoken_emoji_1F4A5" msgid="5401995723541239858">"टकराव प्रतीक"</string>
+ <string name="spoken_emoji_1F4A6" msgid="3837802182716483848">"उछिट्टिएको पसिना प्रतीक"</string>
+ <string name="spoken_emoji_1F4A7" msgid="5718438987757885141">"सानो थोपा"</string>
+ <string name="spoken_emoji_1F4A8" msgid="4472108229720006377">"ड्यास प्रतीक"</string>
+ <string name="spoken_emoji_1F4A9" msgid="1240958472788430032">"थुप्रो गु"</string>
+ <string name="spoken_emoji_1F4AA" msgid="8427525538635146416">"पाखुरा प्रदर्शन"</string>
+ <string name="spoken_emoji_1F4AB" msgid="5484114759939427459">"तारा प्रतीक"</string>
+ <string name="spoken_emoji_1F4AC" msgid="5571196638219612682">"भाषण बेलुन"</string>
+ <string name="spoken_emoji_1F4AD" msgid="353174619257798652">"बैचारिक बेलुन"</string>
+ <string name="spoken_emoji_1F4AE" msgid="1223142786927162641">"सेतो फूल"</string>
+ <string name="spoken_emoji_1F4AF" msgid="3526278354452138397">"सय अंक प्रतीक"</string>
+ <string name="spoken_emoji_1F4B0" msgid="4124102195175124156">"पैसाको थैली"</string>
+ <string name="spoken_emoji_1F4B1" msgid="8339494003418572905">"मुद्रा विनिमय"</string>
+ <string name="spoken_emoji_1F4B2" msgid="3179159430187243132">"मोटो डलर चिन्ह"</string>
+ <string name="spoken_emoji_1F4B3" msgid="5375412518221759596">"क्रेडिट कार्ड"</string>
+ <string name="spoken_emoji_1F4B4" msgid="1068592463669453204">"येन चिन्ह साथ नोट"</string>
+ <string name="spoken_emoji_1F4B5" msgid="1426708699891832564">"डलर चिन्ह सहित बैकनोट"</string>
+ <string name="spoken_emoji_1F4B6" msgid="8289249930736444837">"यूरो चिन्ह साथ नोट"</string>
+ <string name="spoken_emoji_1F4B7" msgid="5245100496860739429">"पाउन्ड चिन्ह साथ नोट"</string>
<string name="spoken_emoji_1F4B8" msgid="4401099580477164440">"पखेटाली मुद्रा"</string>
- <!-- no translation found for spoken_emoji_1F4B9 (647509393536679903) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4BA (1269737854891046321) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4BB (6252883563347816451) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4BC (6182597732218446206) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4BD (5820961044768829176) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4BE (4754542485835379808) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4BF (2237481756984721795) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4C0 (491582501089694461) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4C1 (6645461382494158111) -->
- <skip />
- <string name="spoken_emoji_1F4C2" msgid="8095638715523765338">"खुला फाइल फोल्डर"</string>
- <!-- no translation found for spoken_emoji_1F4C3 (3727274466173970142) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4C4 (4382570710795501612) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4C5 (8693944622627762487) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4C6 (8469908708708424640) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4C7 (2665313547987324495) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4C8 (8007686702282833600) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4C9 (2271951411192893684) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4CA (3525692829622381444) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4CB (977639227554095521) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4CC (156107396088741574) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4CD (4266572175361190231) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4CE (6294288509864968290) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4CF (149679400831136810) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4D0 (8130339336619202915) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4D1 (5852176364856284968) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4D2 (2276810154105920052) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4D3 (5873386492793610808) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4D4 (4754469936418776360) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4D5 (4642713351802778905) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4D6 (6987347918381807186) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4D7 (7813394163241379223) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4D8 (7189799718984979521) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4D9 (3874664073186440225) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4DA (872212072924287762) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4DB (2015183603583392969) -->
- <skip />
- <string name="spoken_emoji_1F4DC" msgid="5075845110932456783">"सार्नु"</string>
- <!-- no translation found for spoken_emoji_1F4DD (2494006707147586786) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4DE (7883008605002117671) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4DF (3538610110623780465) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4E0 (2960778342609543077) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4E1 (6269733703719242108) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4E2 (1987535386302883116) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4E3 (5588916572878599224) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4E4 (2063561529097749707) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4E5 (3232462702926143576) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4E6 (3399454337197561635) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4E7 (5557136988503873238) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4E8 (30698793974124123) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4E9 (5947550337678643166) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4EA (772614045207213751) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4EB (6491414165464146137) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4EC (7369517138779988438) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4ED (5657520436285454241) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4EE (8464138906243608614) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4EF (8801427577198798226) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4F0 (6330208624731662525) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4F1 (3966503935581675695) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4F2 (1057540341746100087) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4F3 (5003984447315754658) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4F4 (5549847566968306253) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4F5 (3660199448671699238) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4F6 (2676974903233268860) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4F7 (2643891943105989039) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4F9 (4475626303058218048) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4FA (1079796186652960775) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4FB (3848729587403760645) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4FC (8370432508874310054) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F500 (2389947994502144547) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F501 (2132188352433347009) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F502 (2361976580513178391) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F503 (8936283551917858793) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F504 (708290317843535943) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F505 (6348909939004951860) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F506 (4449609297521280173) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F507 (7136386694923708448) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F508 (5063567689831527865) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F509 (3948050077992370791) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F50A (5818194948677277197) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F50B (8083470451266295876) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F50C (7793219132036431680) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F50D (8140244710637926780) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F50E (4751821352839693365) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F50F (915079280472199605) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F510 (7658381761691758318) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F511 (262319867774655688) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F512 (5628688337255115175) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F513 (8579201846619420981) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F514 (7027268683047322521) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F515 (8903179856036069242) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F516 (108097933937925381) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F517 (2450846665734313397) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F518 (7028220286841437832) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F519 (8211189165075445687) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F51A (823966751787338892) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F51B (5920570742107943382) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F51C (110609810659826676) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F51D (4087697222026095447) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F51E (8512873526157201775) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F51F (8673370823728653973) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F520 (7335109890337048900) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F521 (2693185864450925778) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F522 (8419130286280673347) -->
- <skip />
- <string name="spoken_emoji_1F523" msgid="3318053476401719421">"प्रतीकको लागि प्रतीक प्रविष्ट गर्नुस्"</string>
- <!-- no translation found for spoken_emoji_1F524 (1625073997522316331) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F525 (4083884189172963790) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F526 (2035494936742643580) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F527 (134257142354034271) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F528 (700627429570609375) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F529 (7480548235904988573) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F52A (7613580031502317893) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F52B (4554906608328118613) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F52C (1330294501371770790) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F52D (7549551775445177140) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F52E (4457099417872625141) -->
- <skip />
- <string name="spoken_emoji_1F52F" msgid="8899031001317442792">"बिचमा थोप्ला निहित छ चुच्चे तारा"</string>
- <!-- no translation found for spoken_emoji_1F530 (3572898444281774023) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F531 (5225633376450025396) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F532 (9169568490485180779) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F533 (6554193837201918598) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F534 (8339298801331865340) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F535 (1227403104835533512) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F536 (5477372445510469331) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F537 (3158915214347274626) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F538 (4300084249474451991) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F539 (6535159756325742275) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F53A (3728196273988781389) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F53B (7182097039614128707) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F53C (4077022046319615029) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F53D (3939112784894620713) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F550 (7761392621689986218) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F551 (2699448504113431716) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F552 (5872107867411853750) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F553 (8490966286158640743) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F554 (7662585417832909280) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F555 (5564698204520412009) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F556 (7325712194836512205) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F557 (4398343183682848693) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F558 (3110507820404018172) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F559 (2972160366448337839) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F55A (5568112876681714834) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F55B (6731739890330659276) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F55C (7838853679879115890) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F55D (3518832144255922544) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F55E (3092760695634993002) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F55F (2326720311892906763) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F560 (5771339179963924448) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F561 (3139944777062475382) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F562 (8273944611162457084) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F563 (8643976903718136299) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F564 (3511070239796141638) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F565 (4567451985272963088) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F566 (2790552288169929810) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F567 (9026037362100689337) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F5FB (9037503671676124015) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F5FC (1409415995817242150) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F5FD (2562726956654429582) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F5FE (1184469756905210580) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F5FF (6003594799354942297) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F600 (7601109464776835283) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F601 (746026523967444503) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F602 (8354558091785198246) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F603 (3861022912544159823) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F604 (5119021072966343531) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F605 (6140813923973561735) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F606 (3549936813966832799) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F607 (2826424078212384817) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F608 (7343559595089811640) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F609 (5481030187207504405) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F60A (5023337769148679767) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F60B (3005248217216195694) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F60C (349384012958268496) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F60D (7921853137164938391) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F60E (441718886380605643) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F60F (2674453144890180538) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F610 (3225675825334102369) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F611 (7199179827619679668) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F612 (985081329745137998) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F613 (5548607684830303562) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F614 (3196305665259916390) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F615 (3051674239303969101) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F616 (8124887056243813089) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F617 (7052733625511122870) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F618 (408207170572303753) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F619 (8645430335143153645) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F61A (2882157190974340247) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F61B (3765927202787211499) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F61C (198943912107589389) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F61D (7643546385877816182) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F61E (1528732952202098364) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F61F (1853664164636082404) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F620 (6051942001307375830) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F621 (2114711878097257704) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F622 (29291014645931822) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F623 (7803959833595184773) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F624 (8637637647725752799) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F625 (6153625183493635030) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F626 (6179485689935562950) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F627 (8566204052903012809) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F628 (8875777401624904224) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F629 (1411538490319190118) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F62A (4726686726690289969) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F62B (3221980473921623613) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F62C (4616356691941225182) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F62D (4283677508698812232) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F62E (726083405284353894) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F62F (7746620088234710962) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F630 (3298804852155581163) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F631 (1603391150954646779) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F632 (4846193232203976013) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F633 (4023593836629700443) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F634 (3155265083246248129) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F635 (4616691133452764482) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F636 (947000211822375683) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F637 (1269551267347165774) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F638 (3410766467496872301) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F639 (1833417519781022031) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F63A (8566294484007152613) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F63B (74417995938927571) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F63C (6472812005729468870) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F63D (1638398369553349509) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F63E (6788969063020278986) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F63F (1207234562459550185) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F640 (6023054549904329638) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F645 (5202090629227587076) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F646 (6734425134415138134) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F647 (1090285518444205483) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F648 (8978535230610522356) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F649 (8486145279809495102) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F64A (1237524974033228660) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F64B (4251150782016370475) -->
- <skip />
+ <string name="spoken_emoji_1F4B9" msgid="647509393536679903">"माथिको प्रवृत्ति र येन चिन्ह साथ चित्रपाती"</string>
+ <string name="spoken_emoji_1F4BA" msgid="1269737854891046321">"सिट"</string>
+ <string name="spoken_emoji_1F4BB" msgid="6252883563347816451">"निजी कम्प्यूटर"</string>
+ <string name="spoken_emoji_1F4BC" msgid="6182597732218446206">"ब्रिफकेस"</string>
+ <string name="spoken_emoji_1F4BD" msgid="5820961044768829176">"सानो डिस्क"</string>
+ <string name="spoken_emoji_1F4BE" msgid="4754542485835379808">"फ्लपी डिस्क"</string>
+ <string name="spoken_emoji_1F4BF" msgid="2237481756984721795">"सी डि चक्का"</string>
+ <string name="spoken_emoji_1F4C0" msgid="491582501089694461">"डिभिडी"</string>
+ <string name="spoken_emoji_1F4C1" msgid="6645461382494158111">"फाइल फोल्डर"</string>
+ <string name="spoken_emoji_1F4C2" msgid="8095638715523765338">"फाइल फोल्डर खोल्नुहोस्"</string>
+ <string name="spoken_emoji_1F4C3" msgid="3727274466173970142">"दोब्र्याइएको पृष्ठ"</string>
+ <string name="spoken_emoji_1F4C4" msgid="4382570710795501612">"माथि पत्याएको पृष्ठ"</string>
+ <string name="spoken_emoji_1F4C5" msgid="8693944622627762487">"पात्रो"</string>
+ <string name="spoken_emoji_1F4C6" msgid="8469908708708424640">"च्यातेर पठाउने पात्रो"</string>
+ <string name="spoken_emoji_1F4C7" msgid="2665313547987324495">"कार्ड सूचकांक"</string>
+ <string name="spoken_emoji_1F4C8" msgid="8007686702282833600">"माथिको प्रवृत्ति साथ चित्रपाती"</string>
+ <string name="spoken_emoji_1F4C9" msgid="2271951411192893684">"तल प्रवृत्ति साथ चित्रपाती"</string>
+ <string name="spoken_emoji_1F4CA" msgid="3525692829622381444">"बार चार्ट"</string>
+ <string name="spoken_emoji_1F4CB" msgid="977639227554095521">"क्लिपबोर्ड"</string>
+ <string name="spoken_emoji_1F4CC" msgid="156107396088741574">"पुस पिन"</string>
+ <string name="spoken_emoji_1F4CD" msgid="4266572175361190231">"गोल पुस पिन"</string>
+ <string name="spoken_emoji_1F4CE" msgid="6294288509864968290">"क्लिप"</string>
+ <string name="spoken_emoji_1F4CF" msgid="149679400831136810">"फुट"</string>
+ <string name="spoken_emoji_1F4D0" msgid="8130339336619202915">"त्रिकोणात्मक फुट"</string>
+ <string name="spoken_emoji_1F4D1" msgid="5852176364856284968">"किताबी ट्याबहरू"</string>
+ <string name="spoken_emoji_1F4D2" msgid="2276810154105920052">"लेजर"</string>
+ <string name="spoken_emoji_1F4D3" msgid="5873386492793610808">"नोटबुक"</string>
+ <string name="spoken_emoji_1F4D4" msgid="4754469936418776360">"सजावटी खोल सहित नोटबुक"</string>
+ <string name="spoken_emoji_1F4D5" msgid="4642713351802778905">"बन्द पुस्तक"</string>
+ <string name="spoken_emoji_1F4D6" msgid="6987347918381807186">"खुला पुस्तक"</string>
+ <string name="spoken_emoji_1F4D7" msgid="7813394163241379223">"हरियो पुस्तक"</string>
+ <string name="spoken_emoji_1F4D8" msgid="7189799718984979521">"नीलो पुस्तक"</string>
+ <string name="spoken_emoji_1F4D9" msgid="3874664073186440225">"सुन्तला पुस्तक"</string>
+ <string name="spoken_emoji_1F4DA" msgid="872212072924287762">"पुस्तकहरू"</string>
+ <string name="spoken_emoji_1F4DB" msgid="2015183603583392969">"बिल्ला नाम"</string>
+ <string name="spoken_emoji_1F4DC" msgid="5075845110932456783">"स्क्रोल"</string>
+ <string name="spoken_emoji_1F4DD" msgid="2494006707147586786">"मेमो"</string>
+ <string name="spoken_emoji_1F4DE" msgid="7883008605002117671">"टेलिफोन रिसीभर"</string>
+ <string name="spoken_emoji_1F4DF" msgid="3538610110623780465">"पेजर"</string>
+ <string name="spoken_emoji_1F4E0" msgid="2960778342609543077">"फ्याक्स मेसिन"</string>
+ <string name="spoken_emoji_1F4E1" msgid="6269733703719242108">"स्याटलाइट एंटीना"</string>
+ <string name="spoken_emoji_1F4E2" msgid="1987535386302883116">"आकाशबाणी"</string>
+ <string name="spoken_emoji_1F4E3" msgid="5588916572878599224">"ढ्वांग फुक्नु"</string>
+ <string name="spoken_emoji_1F4E4" msgid="2063561529097749707">"आउटबक्स ट्रे"</string>
+ <string name="spoken_emoji_1F4E5" msgid="3232462702926143576">"इनबक्समा ट्रे"</string>
+ <string name="spoken_emoji_1F4E6" msgid="3399454337197561635">"प्याकेज"</string>
+ <string name="spoken_emoji_1F4E7" msgid="5557136988503873238">"इमेल प्रतीक"</string>
+ <string name="spoken_emoji_1F4E8" msgid="30698793974124123">"आगमन खाम"</string>
+ <string name="spoken_emoji_1F4E9" msgid="5947550337678643166">"माथि तीर तल देखाइएको साथ खाम"</string>
+ <string name="spoken_emoji_1F4EA" msgid="772614045207213751">"माथि झण्डा साथ बन्द मेलबक्स"</string>
+ <string name="spoken_emoji_1F4EB" msgid="6491414165464146137">"उठाएको झन्डा साथ बन्द मेलबक्स"</string>
+ <string name="spoken_emoji_1F4EC" msgid="7369517138779988438">"उठाएको झन्डा साथ खुला मेलबक्स"</string>
+ <string name="spoken_emoji_1F4ED" msgid="5657520436285454241">"तल झण्डा साथ खुला मेलबक्स"</string>
+ <string name="spoken_emoji_1F4EE" msgid="8464138906243608614">"पत्र पेटिका"</string>
+ <string name="spoken_emoji_1F4EF" msgid="8801427577198798226">"पोस्टल सीङ"</string>
+ <string name="spoken_emoji_1F4F0" msgid="6330208624731662525">"अखबार"</string>
+ <string name="spoken_emoji_1F4F1" msgid="3966503935581675695">"मोबाइल फोन"</string>
+ <string name="spoken_emoji_1F4F2" msgid="1057540341746100087">"दाँया तीर साथ मोबाइल फोन बायाँ"</string>
+ <string name="spoken_emoji_1F4F3" msgid="5003984447315754658">"कम्पन ढाँचाः"</string>
+ <string name="spoken_emoji_1F4F4" msgid="5549847566968306253">"मोबाइल फोन बन्द"</string>
+ <string name="spoken_emoji_1F4F5" msgid="3660199448671699238">"बिना मोबाइल फोनहरु"</string>
+ <string name="spoken_emoji_1F4F6" msgid="2676974903233268860">"बारहरू साथ एंटीना"</string>
+ <string name="spoken_emoji_1F4F7" msgid="2643891943105989039">"क्यामेरा"</string>
+ <string name="spoken_emoji_1F4F9" msgid="4475626303058218048">"भिडियो क्यामेरा"</string>
+ <string name="spoken_emoji_1F4FA" msgid="1079796186652960775">"टेलिभिजन"</string>
+ <string name="spoken_emoji_1F4FB" msgid="3848729587403760645">"रेडियो"</string>
+ <string name="spoken_emoji_1F4FC" msgid="8370432508874310054">"भिडियोक्यासेट"</string>
+ <string name="spoken_emoji_1F500" msgid="2389947994502144547">"दाँया बटारिएको तीर"</string>
+ <string name="spoken_emoji_1F501" msgid="2132188352433347009">"दाँया र बायाँ खुला वृत्त तीर घडीकोदिशामा"</string>
+ <string name="spoken_emoji_1F502" msgid="2361976580513178391">"वृत्त दोबारेको साथ दाँया र बायाँ खुला वृत्त तीर घडीकोदिशामा"</string>
+ <string name="spoken_emoji_1F503" msgid="8936283551917858793">"घडीको दिशामा तल र माथिको तर्फ खुला वृत्त तीर"</string>
+ <string name="spoken_emoji_1F504" msgid="708290317843535943">"उल्टा घडीको दिशामा तल र माथिको तर्फ खुला वृत्त तीर"</string>
+ <string name="spoken_emoji_1F505" msgid="6348909939004951860">"कम चमक प्रतीक"</string>
+ <string name="spoken_emoji_1F506" msgid="4449609297521280173">"उच्च चमक प्रतीक"</string>
+ <string name="spoken_emoji_1F507" msgid="7136386694923708448">"ध्वोंनी निषेध स्ट्रोक"</string>
+ <string name="spoken_emoji_1F508" msgid="5063567689831527865">"स्पिकर"</string>
+ <string name="spoken_emoji_1F509" msgid="3948050077992370791">"एक तरङ्ग साथ स्पिकर"</string>
+ <string name="spoken_emoji_1F50A" msgid="5818194948677277197">"तीन ध्वनि लहरहरु साथ स्पिकर"</string>
+ <string name="spoken_emoji_1F50B" msgid="8083470451266295876">"ब्याट्री"</string>
+ <string name="spoken_emoji_1F50C" msgid="7793219132036431680">"बिद्धुतीय प्लग"</string>
+ <string name="spoken_emoji_1F50D" msgid="8140244710637926780">"बाँया-इशारा आबर्धक लेन्स"</string>
+ <string name="spoken_emoji_1F50E" msgid="4751821352839693365">"दायाँ इशारा आबर्धक लेन्स"</string>
+ <string name="spoken_emoji_1F50F" msgid="915079280472199605">"मसी कलमले बन्द"</string>
+ <string name="spoken_emoji_1F510" msgid="7658381761691758318">"साँचो साथ बन्द ताला"</string>
+ <string name="spoken_emoji_1F511" msgid="262319867774655688">"साँचो"</string>
+ <string name="spoken_emoji_1F512" msgid="5628688337255115175">"लक गर्नुहोस्"</string>
+ <string name="spoken_emoji_1F513" msgid="8579201846619420981">"खुला ताला"</string>
+ <string name="spoken_emoji_1F514" msgid="7027268683047322521">"घन्टी"</string>
+ <string name="spoken_emoji_1F515" msgid="8903179856036069242">"रद्द स्ट्रोक साथ घन्टी"</string>
+ <string name="spoken_emoji_1F516" msgid="108097933937925381">"बुकमार्क"</string>
+ <string name="spoken_emoji_1F517" msgid="2450846665734313397">"संपर्क प्रतीक"</string>
+ <string name="spoken_emoji_1F518" msgid="7028220286841437832">"रेडियो बटन"</string>
+ <string name="spoken_emoji_1F519" msgid="8211189165075445687">"बायाँ माथि तीर साथ फर्काएको"</string>
+ <string name="spoken_emoji_1F51A" msgid="823966751787338892">"बायाँ माथि तीर साथ अन्त्य"</string>
+ <string name="spoken_emoji_1F51B" msgid="5920570742107943382">"बायाँ साथ उद्गार चिन्हले दाँया माथि तीर"</string>
+ <string name="spoken_emoji_1F51C" msgid="110609810659826676">"दाँया माथि तीर साथ चाँडै"</string>
+ <string name="spoken_emoji_1F51D" msgid="4087697222026095447">"माथिको माथि तीर साथ माथि"</string>
+ <string name="spoken_emoji_1F51E" msgid="8512873526157201775">"अठार मुनिका प्रतीक निषेधित"</string>
+ <string name="spoken_emoji_1F51F" msgid="8673370823728653973">"किक्याप दस"</string>
+ <string name="spoken_emoji_1F520" msgid="7335109890337048900">"ठुलो ल्याटिन अक्षरका आगत प्रतीक"</string>
+ <string name="spoken_emoji_1F521" msgid="2693185864450925778">"सानो ल्याटिन अक्षरका आगत प्रतीक"</string>
+ <string name="spoken_emoji_1F522" msgid="8419130286280673347">"संख्याका लागि आगत प्रतीक"</string>
+ <string name="spoken_emoji_1F523" msgid="3318053476401719421">"प्रतीकको लागि प्रतीक प्रविष्ट गर्नुहोस्"</string>
+ <string name="spoken_emoji_1F524" msgid="1625073997522316331">"ल्याटिन अक्षरका आगत प्रतीक"</string>
+ <string name="spoken_emoji_1F525" msgid="4083884189172963790">"आगो"</string>
+ <string name="spoken_emoji_1F526" msgid="2035494936742643580">"बिजुली बत्ती"</string>
+ <string name="spoken_emoji_1F527" msgid="134257142354034271">"रेंच"</string>
+ <string name="spoken_emoji_1F528" msgid="700627429570609375">"हथौडा"</string>
+ <string name="spoken_emoji_1F529" msgid="7480548235904988573">"नट बोल्ट"</string>
+ <string name="spoken_emoji_1F52A" msgid="7613580031502317893">"जापानी चक्कु होचो"</string>
+ <string name="spoken_emoji_1F52B" msgid="4554906608328118613">"पिस्तौल"</string>
+ <string name="spoken_emoji_1F52C" msgid="1330294501371770790">"माइक्रोस्कोप"</string>
+ <string name="spoken_emoji_1F52D" msgid="7549551775445177140">"टेलिस्कोप"</string>
+ <string name="spoken_emoji_1F52E" msgid="4457099417872625141">"क्रिस्टल बल"</string>
+ <string name="spoken_emoji_1F52F" msgid="8899031001317442792">"बीचमा थोप्ला निहित छ चुच्चे तारा"</string>
+ <string name="spoken_emoji_1F530" msgid="3572898444281774023">"शुरुवातको लागि जापानी प्रतीक"</string>
+ <string name="spoken_emoji_1F531" msgid="5225633376450025396">"त्रिशूल प्रतीक"</string>
+ <string name="spoken_emoji_1F532" msgid="9169568490485180779">"कालो वर्ग बटन"</string>
+ <string name="spoken_emoji_1F533" msgid="6554193837201918598">"सेतो वर्ग बटन"</string>
+ <string name="spoken_emoji_1F534" msgid="8339298801331865340">"ठूलो लाल वृत्त"</string>
+ <string name="spoken_emoji_1F535" msgid="1227403104835533512">"ठूलो नीलो वृत्त"</string>
+ <string name="spoken_emoji_1F536" msgid="5477372445510469331">"ठूलो सुन्तला हीरा"</string>
+ <string name="spoken_emoji_1F537" msgid="3158915214347274626">"ठूलो नीलो हीरा"</string>
+ <string name="spoken_emoji_1F538" msgid="4300084249474451991">"लघु सुन्तला हीरा"</string>
+ <string name="spoken_emoji_1F539" msgid="6535159756325742275">"लघु नीलो हीरा"</string>
+ <string name="spoken_emoji_1F53A" msgid="3728196273988781389">"माथी-इशारा रातो त्रिकोण"</string>
+ <string name="spoken_emoji_1F53B" msgid="7182097039614128707">"तल-इशारा रातो त्रिकोण"</string>
+ <string name="spoken_emoji_1F53C" msgid="4077022046319615029">"माथी इशारा सानो रातो त्रिकोण"</string>
+ <string name="spoken_emoji_1F53D" msgid="3939112784894620713">"तल-इशारा सानो रातो त्रिकोण"</string>
+ <string name="spoken_emoji_1F550" msgid="7761392621689986218">"घडी अनुहार एक बजे"</string>
+ <string name="spoken_emoji_1F551" msgid="2699448504113431716">"घडी अनुहार दुई बजे"</string>
+ <string name="spoken_emoji_1F552" msgid="5872107867411853750">"घडी अनुहार तीन बजे"</string>
+ <string name="spoken_emoji_1F553" msgid="8490966286158640743">"घडी अनुहार चार बजे"</string>
+ <string name="spoken_emoji_1F554" msgid="7662585417832909280">"घडी अनुहार पाँच बजे"</string>
+ <string name="spoken_emoji_1F555" msgid="5564698204520412009">"घडी अनुहार छ बजे"</string>
+ <string name="spoken_emoji_1F556" msgid="7325712194836512205">"घडी अनुहार सात बजे"</string>
+ <string name="spoken_emoji_1F557" msgid="4398343183682848693">"घडी अनुहार आठ बजे"</string>
+ <string name="spoken_emoji_1F558" msgid="3110507820404018172">"घडी अनुहार नौ बजे"</string>
+ <string name="spoken_emoji_1F559" msgid="2972160366448337839">"घडी अनुहार दश बजे"</string>
+ <string name="spoken_emoji_1F55A" msgid="5568112876681714834">"घडी अनुहार एघार बजे"</string>
+ <string name="spoken_emoji_1F55B" msgid="6731739890330659276">"घडी अनुहार बाह्र बजे"</string>
+ <string name="spoken_emoji_1F55C" msgid="7838853679879115890">"घडी अनुहार एक-तिस"</string>
+ <string name="spoken_emoji_1F55D" msgid="3518832144255922544">"घडी अनुहार दुई-तिस"</string>
+ <string name="spoken_emoji_1F55E" msgid="3092760695634993002">"घडी अनुहार तीन तीस"</string>
+ <string name="spoken_emoji_1F55F" msgid="2326720311892906763">"घडी अनुहार चार-तिस"</string>
+ <string name="spoken_emoji_1F560" msgid="5771339179963924448">"घडी अनुहार पाँच-तिस"</string>
+ <string name="spoken_emoji_1F561" msgid="3139944777062475382">"घडी अनुहार छ-तिस"</string>
+ <string name="spoken_emoji_1F562" msgid="8273944611162457084">"घडी अनुहार सात-तिस"</string>
+ <string name="spoken_emoji_1F563" msgid="8643976903718136299">"घडी अनुहार आठ-तिस"</string>
+ <string name="spoken_emoji_1F564" msgid="3511070239796141638">"घडी अनुहार नौ-तिस"</string>
+ <string name="spoken_emoji_1F565" msgid="4567451985272963088">"घडी अनुहार दश-तिस"</string>
+ <string name="spoken_emoji_1F566" msgid="2790552288169929810">"घडी अनुहार एघार-तिस"</string>
+ <string name="spoken_emoji_1F567" msgid="9026037362100689337">"घडी अनुहार बाह्र-तिस"</string>
+ <string name="spoken_emoji_1F5FB" msgid="9037503671676124015">"माउन्ट फुजी"</string>
+ <string name="spoken_emoji_1F5FC" msgid="1409415995817242150">"टोकियो टावर"</string>
+ <string name="spoken_emoji_1F5FD" msgid="2562726956654429582">"स्वतन्त्रताको प्रतिमा"</string>
+ <string name="spoken_emoji_1F5FE" msgid="1184469756905210580">"जापानको छान्य मुर्ति"</string>
+ <string name="spoken_emoji_1F5FF" msgid="6003594799354942297">"मोयै"</string>
+ <string name="spoken_emoji_1F600" msgid="7601109464776835283">"अनुहार ङिच्च हँसाइ"</string>
+ <string name="spoken_emoji_1F601" msgid="746026523967444503">"हँसिल आँखाको साथ ङिच्च हँसाइ"</string>
+ <string name="spoken_emoji_1F602" msgid="8354558091785198246">"आनन्द आँसुको साथ अनुहार"</string>
+ <string name="spoken_emoji_1F603" msgid="3861022912544159823">"खुला मुखको साथ हँसिलो अनुहार"</string>
+ <string name="spoken_emoji_1F604" msgid="5119021072966343531">"खुला मुखको र हँसिलो आँखा साथ हँसिलो अनुहार"</string>
+ <string name="spoken_emoji_1F605" msgid="6140813923973561735">"खुला मुख र चिसो पसिना साथ हँसिलो अनुहार"</string>
+ <string name="spoken_emoji_1F606" msgid="3549936813966832799">"खुला मुख र बन्द आँखाको साथ हँसिलो अनुहार"</string>
+ <string name="spoken_emoji_1F607" msgid="2826424078212384817">"हेलो साथ हँसिलो अनुहार"</string>
+ <string name="spoken_emoji_1F608" msgid="7343559595089811640">"सिंगहरु साथ हँसिलो अनुहार"</string>
+ <string name="spoken_emoji_1F609" msgid="5481030187207504405">"आँखा झिम्काएको अनुहार"</string>
+ <string name="spoken_emoji_1F60A" msgid="5023337769148679767">"हँसिलो आँखाले साथ हँसिलो अनुहार"</string>
+ <string name="spoken_emoji_1F60B" msgid="3005248217216195694">"स्वादिष्ट भोजन savoring अनुहार"</string>
+ <string name="spoken_emoji_1F60C" msgid="349384012958268496">"ढुक्क अनुहार"</string>
+ <string name="spoken_emoji_1F60D" msgid="7921853137164938391">"हृदय आकारको आँखाले हँसिलो अनुहार"</string>
+ <string name="spoken_emoji_1F60E" msgid="441718886380605643">"घाम साथ हँसिलो अनुहार"</string>
+ <string name="spoken_emoji_1F60F" msgid="2674453144890180538">"स्वाँग पारेको अनुहार"</string>
+ <string name="spoken_emoji_1F610" msgid="3225675825334102369">"सामान्य अनुहार"</string>
+ <string name="spoken_emoji_1F611" msgid="7199179827619679668">"भाबबिहिन अनुहार"</string>
+ <string name="spoken_emoji_1F612" msgid="985081329745137998">"निराश अनुहार"</string>
+ <string name="spoken_emoji_1F613" msgid="5548607684830303562">"चिसो पसिना साथ अनुहार"</string>
+ <string name="spoken_emoji_1F614" msgid="3196305665259916390">"चिंताग्रस्त अनुहार"</string>
+ <string name="spoken_emoji_1F615" msgid="3051674239303969101">"गोलमाल अनुहार"</string>
+ <string name="spoken_emoji_1F616" msgid="8124887056243813089">"आघातको अवस्थामा अनुहार"</string>
+ <string name="spoken_emoji_1F617" msgid="7052733625511122870">"चुम्बन अनुहार"</string>
+ <string name="spoken_emoji_1F618" msgid="408207170572303753">"चुम्बन फालिएको अनुहार"</string>
+ <string name="spoken_emoji_1F619" msgid="8645430335143153645">"हँसिलो आँखा साथ चुम्बन अनुहार"</string>
+ <string name="spoken_emoji_1F61A" msgid="2882157190974340247">"बन्द आँखा साथ चुम्बन अनुहार"</string>
+ <string name="spoken_emoji_1F61B" msgid="3765927202787211499">"बाहिर जिब्रो साथ अनुहार"</string>
+ <string name="spoken_emoji_1F61C" msgid="198943912107589389">"बाहिर जिब्रो र झिम्काएको आँखा साथ अनुहार"</string>
+ <string name="spoken_emoji_1F61D" msgid="7643546385877816182">"बाहिर जिब्रो र बेस्सरी बन्द आँखा साथ अनुहार"</string>
+ <string name="spoken_emoji_1F61E" msgid="1528732952202098364">"निराश अनुहार"</string>
+ <string name="spoken_emoji_1F61F" msgid="1853664164636082404">"चिन्तित अनुहार"</string>
+ <string name="spoken_emoji_1F620" msgid="6051942001307375830">"आक्रोशित अनुहार"</string>
+ <string name="spoken_emoji_1F621" msgid="2114711878097257704">"दुखी अनुहार"</string>
+ <string name="spoken_emoji_1F622" msgid="29291014645931822">"कराएको अनुहार"</string>
+ <string name="spoken_emoji_1F623" msgid="7803959833595184773">"संरक्षित अनुहार"</string>
+ <string name="spoken_emoji_1F624" msgid="8637637647725752799">"विजय नजर अनुहार"</string>
+ <string name="spoken_emoji_1F625" msgid="6153625183493635030">"निराश तर राहत अनुहार"</string>
+ <string name="spoken_emoji_1F626" msgid="6179485689935562950">"खुला मुखको साथ निन्याउरो अनुहार"</string>
+ <string name="spoken_emoji_1F627" msgid="8566204052903012809">"विचलित अनुहार"</string>
+ <string name="spoken_emoji_1F628" msgid="8875777401624904224">"डराएको अनुहार"</string>
+ <string name="spoken_emoji_1F629" msgid="1411538490319190118">"थकित अनुहार"</string>
+ <string name="spoken_emoji_1F62A" msgid="4726686726690289969">"निदाएको अनुहार"</string>
+ <string name="spoken_emoji_1F62B" msgid="3221980473921623613">"थकित अनुहार"</string>
+ <string name="spoken_emoji_1F62C" msgid="4616356691941225182">"कित्किताएको अनुहार"</string>
+ <string name="spoken_emoji_1F62D" msgid="4283677508698812232">"चर्को सोरले कराएको अनुहार"</string>
+ <string name="spoken_emoji_1F62E" msgid="726083405284353894">"खुला मुख अनुहार"</string>
+ <string name="spoken_emoji_1F62F" msgid="7746620088234710962">"चुप अनुहार"</string>
+ <string name="spoken_emoji_1F630" msgid="3298804852155581163">"खुला मुख र चिसो पसिना अनुहार"</string>
+ <string name="spoken_emoji_1F631" msgid="1603391150954646779">"डरमा चिल्लाएको अनुहार"</string>
+ <string name="spoken_emoji_1F632" msgid="4846193232203976013">"छक्क अनुहार"</string>
+ <string name="spoken_emoji_1F633" msgid="4023593836629700443">"निर्लज्ज अनुहार"</string>
+ <string name="spoken_emoji_1F634" msgid="3155265083246248129">"निन्द्रे अनुहार"</string>
+ <string name="spoken_emoji_1F635" msgid="4616691133452764482">"चक्करलागेको अनुहार"</string>
+ <string name="spoken_emoji_1F636" msgid="947000211822375683">"मुख नभएको अनुहार"</string>
+ <string name="spoken_emoji_1F637" msgid="1269551267347165774">"चिकित्सक माक्स लगाएको अनुहार"</string>
+ <string name="spoken_emoji_1F638" msgid="3410766467496872301">"हँसिलो आँखा साथ ङीच्च बिरालो अनुहार"</string>
+ <string name="spoken_emoji_1F639" msgid="1833417519781022031">"आनन्द आँसु झार्दै बिरालो अनुहार"</string>
+ <string name="spoken_emoji_1F63A" msgid="8566294484007152613">"खुला मुखले हँसिलो बिरालो अनुहार"</string>
+ <string name="spoken_emoji_1F63B" msgid="74417995938927571">"हृदय आकारको आँखाले हँसिलो बिरालो अनुहार"</string>
+ <string name="spoken_emoji_1F63C" msgid="6472812005729468870">"छट्टु मुस्कान साथ बिरालो अनुहार"</string>
+ <string name="spoken_emoji_1F63D" msgid="1638398369553349509">"बन्द आँखा साथ चुम्बन बिरालो अनुहार"</string>
+ <string name="spoken_emoji_1F63E" msgid="6788969063020278986">"दुखी बिरालो अनुहार"</string>
+ <string name="spoken_emoji_1F63F" msgid="1207234562459550185">"कराएको बिरालो अनुहार"</string>
+ <string name="spoken_emoji_1F640" msgid="6023054549904329638">"वाक्क भइसकेको बिरालो अनुहार"</string>
+ <string name="spoken_emoji_1F645" msgid="5202090629227587076">"कुनै राम्रो सङ्केत बिना साथ अनुहार"</string>
+ <string name="spoken_emoji_1F646" msgid="6734425134415138134">"ठीक इशारा साथ अनुहार"</string>
+ <string name="spoken_emoji_1F647" msgid="1090285518444205483">"गहिरो निहुरेको व्यक्ति"</string>
+ <string name="spoken_emoji_1F648" msgid="8978535230610522356">"हेर्नुहोस्-कुनै-दुष्ट बाँदर"</string>
+ <string name="spoken_emoji_1F649" msgid="8486145279809495102">"सुन-कुनै-दुष्ट बाँदर"</string>
+ <string name="spoken_emoji_1F64A" msgid="1237524974033228660">"बोल्नु-कुनै-दुष्ट बाँदर"</string>
+ <string name="spoken_emoji_1F64B" msgid="4251150782016370475">"खुसी व्यक्ति एक हात उठाउँदै"</string>
<string name="spoken_emoji_1F64C" msgid="5446231430684558344">"उत्सवमा दुवै हात उठाँउदैको व्यक्ति"</string>
- <!-- no translation found for spoken_emoji_1F64D (4646485595309482342) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F64E (3376579939836656097) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F64F (1044439574356230711) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F680 (513263736012689059) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F681 (9201341783850525339) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F682 (8046933583867498698) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F683 (8772750354339223092) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F684 (346396777356203608) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F685 (1237059817190832730) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F686 (3525197227223620343) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F687 (5110143437960392837) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F688 (4702085029871797965) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F689 (2375851019798817094) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F68A (6368370859718717198) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F68B (2920160427117436633) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F68C (1061520934758810864) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F68D (2890059031360969304) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F68E (6234042976027309654) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F68F (5871099334672012107) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F690 (8080964620200195262) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F691 (999173032408730501) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F692 (1712863785341849487) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F693 (7987109037389768934) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F694 (6061658916653884608) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F695 (6913445460364247283) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F696 (6391604457418285404) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F697 (7978399334396733790) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F698 (7006050861129732018) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F699 (630317052666590607) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F69A (4739797891735823577) -->
- <skip />
+ <string name="spoken_emoji_1F64D" msgid="4646485595309482342">"निराश व्यक्ति"</string>
+ <string name="spoken_emoji_1F64E" msgid="3376579939836656097">"दुखी अनुहार व्यक्ति"</string>
+ <string name="spoken_emoji_1F64F" msgid="1044439574356230711">"नतमस्तक व्यक्ति"</string>
+ <string name="spoken_emoji_1F680" msgid="513263736012689059">"रकेट"</string>
+ <string name="spoken_emoji_1F681" msgid="9201341783850525339">"हेलिकोप्टर"</string>
+ <string name="spoken_emoji_1F682" msgid="8046933583867498698">"भापद्वारा चल्ने यातायात"</string>
+ <string name="spoken_emoji_1F683" msgid="8772750354339223092">"रेलवे कार"</string>
+ <string name="spoken_emoji_1F684" msgid="346396777356203608">"उच्च गति रेल"</string>
+ <string name="spoken_emoji_1F685" msgid="1237059817190832730">"गोली नाक साथ उच्च गतिमा रेल"</string>
+ <string name="spoken_emoji_1F686" msgid="3525197227223620343">"रेल"</string>
+ <string name="spoken_emoji_1F687" msgid="5110143437960392837">"मेट्रो"</string>
+ <string name="spoken_emoji_1F688" msgid="4702085029871797965">"प्रकाश रेल"</string>
+ <string name="spoken_emoji_1F689" msgid="2375851019798817094">"स्टेशन"</string>
+ <string name="spoken_emoji_1F68A" msgid="6368370859718717198">"ट्राम"</string>
+ <string name="spoken_emoji_1F68B" msgid="2920160427117436633">"ट्राम कार"</string>
+ <string name="spoken_emoji_1F68C" msgid="1061520934758810864">"बस"</string>
+ <string name="spoken_emoji_1F68D" msgid="2890059031360969304">"आउदैको बस"</string>
+ <string name="spoken_emoji_1F68E" msgid="6234042976027309654">"ट्रलीबस"</string>
+ <string name="spoken_emoji_1F68F" msgid="5871099334672012107">"बस बिसौना"</string>
+ <string name="spoken_emoji_1F690" msgid="8080964620200195262">"सानो बस"</string>
+ <string name="spoken_emoji_1F691" msgid="999173032408730501">"एम्बुलेन्स"</string>
+ <string name="spoken_emoji_1F692" msgid="1712863785341849487">"दमकल"</string>
+ <string name="spoken_emoji_1F693" msgid="7987109037389768934">"प्रहरी कार"</string>
+ <string name="spoken_emoji_1F694" msgid="6061658916653884608">"आऊदैको प्रहरी कार"</string>
+ <string name="spoken_emoji_1F695" msgid="6913445460364247283">"ट्याक्सी"</string>
+ <string name="spoken_emoji_1F696" msgid="6391604457418285404">"आऊदैको ट्याक्सी"</string>
+ <string name="spoken_emoji_1F697" msgid="7978399334396733790">"अटोमोबाइल"</string>
+ <string name="spoken_emoji_1F698" msgid="7006050861129732018">"आऊदैको गाडी"</string>
+ <string name="spoken_emoji_1F699" msgid="630317052666590607">"मनोरंजन वाहन"</string>
+ <string name="spoken_emoji_1F69A" msgid="4739797891735823577">"वितरण ट्रक"</string>
<string name="spoken_emoji_1F69B" msgid="4715997280786620649">"जोडिएको ठूलोगाडी"</string>
- <!-- no translation found for spoken_emoji_1F69C (5557395610750818161) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F69D (5467164189942951047) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F69E (169238196389832234) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F69F (7508128757012845102) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6A0 (8733056213790160147) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6A1 (4666516337749347253) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6A2 (4511220588943129583) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6A3 (8412962252222205387) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6A4 (8867571300266339211) -->
- <skip />
+ <string name="spoken_emoji_1F69C" msgid="5557395610750818161">"ट्रयाक्टर"</string>
+ <string name="spoken_emoji_1F69D" msgid="5467164189942951047">"एकतर्फी रेल"</string>
+ <string name="spoken_emoji_1F69E" msgid="169238196389832234">"पहाडी रेलवे"</string>
+ <string name="spoken_emoji_1F69F" msgid="7508128757012845102">"सस्पेंशन रेलवे"</string>
+ <string name="spoken_emoji_1F6A0" msgid="8733056213790160147">"पहाडी केवलवे"</string>
+ <string name="spoken_emoji_1F6A1" msgid="4666516337749347253">"हवाई ट्रामगाडी"</string>
+ <string name="spoken_emoji_1F6A2" msgid="4511220588943129583">"पानीजहाज"</string>
+ <string name="spoken_emoji_1F6A3" msgid="8412962252222205387">"डुंगा"</string>
+ <string name="spoken_emoji_1F6A4" msgid="8867571300266339211">"द्रुत डुंगा"</string>
<string name="spoken_emoji_1F6A5" msgid="7650260812741963884">"तेर्सो यातायात बत्ती"</string>
- <!-- no translation found for spoken_emoji_1F6A6 (485575967773793454) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6A7 (6411048933816976794) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6A8 (6345717218374788364) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6A9 (6586380356807600412) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6AA (8954448167261738885) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6AB (5313946262888343544) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6AC (6946858177965948288) -->
- <skip />
+ <string name="spoken_emoji_1F6A6" msgid="485575967773793454">"ठाडो यातायात प्रकाश"</string>
+ <string name="spoken_emoji_1F6A7" msgid="6411048933816976794">"निर्माण चिन्ह"</string>
+ <string name="spoken_emoji_1F6A8" msgid="6345717218374788364">"प्रहरी कारको परिक्रामी प्रकाश"</string>
+ <string name="spoken_emoji_1F6A9" msgid="6586380356807600412">"पोस्टमा त्रिकोणात्मक झण्डा"</string>
+ <string name="spoken_emoji_1F6AA" msgid="8954448167261738885">"ढोका"</string>
+ <string name="spoken_emoji_1F6AB" msgid="5313946262888343544">"प्रवेश निषेध चिन्ह"</string>
+ <string name="spoken_emoji_1F6AC" msgid="6946858177965948288">"धूम्रपान चिन्ह"</string>
<string name="spoken_emoji_1F6AD" msgid="6320088669185507241">"धुम्रपान निषेधित चिन्ह"</string>
- <!-- no translation found for spoken_emoji_1F6AE (1062469925352817189) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6AF (2286668056123642208) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6B0 (179424763882990952) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6B1 (5585212805429161877) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6B2 (1771885082068421875) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6B3 (8033779581263314408) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6B4 (1999538449018476947) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6B5 (340846352660993117) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6B6 (4351024386495098336) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6B7 (4564800655866838802) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6B8 (3020531906940267349) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6B9 (1207095844125041251) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6BA (2346879310071017531) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6BB (2370172469642078526) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6BC (5558827593563530851) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6BD (9213590243049835957) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6BE (394016533781742491) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6BF (906336365928291207) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6C0 (4592099854378821599) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6C1 (2845056048320031158) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6C2 (8117262514698011877) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6C3 (1176342001834630675) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6C4 (1477622834179978886) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6C5 (2495834050856617451) -->
- <skip />
+ <string name="spoken_emoji_1F6AE" msgid="1062469925352817189">"फोहर राख्ने ठाउँ चिन्ह"</string>
+ <string name="spoken_emoji_1F6AF" msgid="2286668056123642208">"फोहर फाल्न निषेधित चिन्ह"</string>
+ <string name="spoken_emoji_1F6B0" msgid="179424763882990952">"पेय जल चिन्ह"</string>
+ <string name="spoken_emoji_1F6B1" msgid="5585212805429161877">"गैह्र पिउने पानी चिन्ह"</string>
+ <string name="spoken_emoji_1F6B2" msgid="1771885082068421875">"साइकल"</string>
+ <string name="spoken_emoji_1F6B3" msgid="8033779581263314408">"साइकल निषेध"</string>
+ <string name="spoken_emoji_1F6B4" msgid="1999538449018476947">"साइकल यात्री"</string>
+ <string name="spoken_emoji_1F6B5" msgid="340846352660993117">"पहाडी साइकल् यात्री"</string>
+ <string name="spoken_emoji_1F6B6" msgid="4351024386495098336">"पैदल यात्री"</string>
+ <string name="spoken_emoji_1F6B7" msgid="4564800655866838802">"पैदल यात्री निषेध"</string>
+ <string name="spoken_emoji_1F6B8" msgid="3020531906940267349">"बच्चाहरु बाटो काट्दै"</string>
+ <string name="spoken_emoji_1F6B9" msgid="1207095844125041251">"पुरुष चिन्ह"</string>
+ <string name="spoken_emoji_1F6BA" msgid="2346879310071017531">"महिला चिन्ह"</string>
+ <string name="spoken_emoji_1F6BB" msgid="2370172469642078526">"शौचालय"</string>
+ <string name="spoken_emoji_1F6BC" msgid="5558827593563530851">"बच्चा चिन्ह"</string>
+ <string name="spoken_emoji_1F6BD" msgid="9213590243049835957">"शौचालय"</string>
+ <string name="spoken_emoji_1F6BE" msgid="394016533781742491">"कम्बोथ"</string>
+ <string name="spoken_emoji_1F6BF" msgid="906336365928291207">"फोहरा"</string>
+ <string name="spoken_emoji_1F6C0" msgid="4592099854378821599">"स्नान"</string>
+ <string name="spoken_emoji_1F6C1" msgid="2845056048320031158">"बाथटब"</string>
+ <string name="spoken_emoji_1F6C2" msgid="8117262514698011877">"राहदानी नियन्त्रण"</string>
+ <string name="spoken_emoji_1F6C3" msgid="1176342001834630675">"भन्सार"</string>
+ <string name="spoken_emoji_1F6C4" msgid="1477622834179978886">"सामान दाबी"</string>
+ <string name="spoken_emoji_1F6C5" msgid="2495834050856617451">"छुटेको सामान"</string>
</resources>
diff --git a/java/res/values-ne-rNP/strings-talkback-descriptions.xml b/java/res/values-ne-rNP/strings-talkback-descriptions.xml
index d5bcea943..c8e5a7529 100644
--- a/java/res/values-ne-rNP/strings-talkback-descriptions.xml
+++ b/java/res/values-ne-rNP/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"स्थानहरू"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"प्रतिकहरू"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"ईमोटिकन्स"</string>
+ <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+ <skip />
+ <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+ <skip />
</resources>
diff --git a/java/res/values-ne-rNP/strings.xml b/java/res/values-ne-rNP/strings.xml
index f467443b3..60321466f 100644
--- a/java/res/values-ne-rNP/strings.xml
+++ b/java/res/values-ne-rNP/strings.xml
@@ -21,7 +21,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_input_options" msgid="3909945612939668554">"इनपुट विकल्पहरू"</string>
- <string name="english_ime_research_log" msgid="8492602295696577851">"लग निर्देशनहरू शोध गर्नुहोस्"</string>
<string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"सम्पर्क नामहरू हेर्नुहोस्"</string>
<string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"तपाईँको सम्पर्क सूचीबाट हिज्जे परीक्षकले प्रविष्टिहरूको प्रयोग गर्छ"</string>
<string name="vibrate_on_keypress" msgid="5258079494276955460">"कुञ्जी थिच्दा भाइब्रेट"</string>
@@ -84,8 +83,6 @@
<string name="select_language" msgid="3693815588777926848">"इनपुट भाषाहरू"</string>
<string name="hint_add_to_dictionary" msgid="573678656946085380">"बचत गर्न पुनः छुनुहोस्"</string>
<string name="has_dictionary" msgid="6071847973466625007">"उपलब्ध शब्दकोश"</string>
- <string name="prefs_enable_log" msgid="6620424505072963557">"प्रयोगकर्ता प्रतिक्रिया सक्षम पार्नुहोस्"</string>
- <string name="prefs_description_log" msgid="7525225584555429211">"स्वचालित रूपमा प्रयोग तथ्याङ्कहरू र क्यास रिपोर्टहरू पठाएर यस इनपुट विधि सम्पादकलाई सुधार्न सहयोग गर्नुहोस्।"</string>
<string name="keyboard_layout" msgid="8451164783510487501">"किबोर्ड थिम"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"अंग्रेजी (युके)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"अंग्रेजी (युएस्)"</string>
@@ -118,7 +115,6 @@
<string name="enable" msgid="5031294444630523247">"सक्षम पार्नुहोस्"</string>
<string name="not_now" msgid="6172462888202790482">"अहिले होइन"</string>
<string name="custom_input_style_already_exists" msgid="8008728952215449707">"यस्तो इनपुट शैली पहिले नै अवस्थित छ: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
- <string name="prefs_usability_study_mode" msgid="1261130555134595254">"प्रयोग अध्ययन मोड"</string>
<string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"कुञ्जी लामो थिचाइ ढिलाइ"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"कुञ्जी थिचाइ भाइब्रेसन अवधि"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"कुञ्जी थिचाइ आवाज भोल्युम"</string>
diff --git a/java/res/values-nl/strings-action-keys.xml b/java/res/values-nl/strings-action-keys.xml
index c1ce25acf..c9c68bd25 100644
--- a/java/res/values-nl/strings-action-keys.xml
+++ b/java/res/values-nl/strings-action-keys.xml
@@ -25,6 +25,8 @@
<string name="label_previous_key" msgid="1421141755779895275">"Vorig"</string>
<string name="label_done_key" msgid="7564866296502630852">"Klaar"</string>
<string name="label_send_key" msgid="482252074224462163">"Verz."</string>
+ <!-- no translation found for label_search_key (7965186050435796642) -->
+ <skip />
<string name="label_pause_key" msgid="2225922926459730642">"Pauze"</string>
<string name="label_wait_key" msgid="5891247853595466039">"Wacht"</string>
</resources>
diff --git a/java/res/values-nl/strings-talkback-descriptions.xml b/java/res/values-nl/strings-talkback-descriptions.xml
index 7d61d5660..a7fe2073d 100644
--- a/java/res/values-nl/strings-talkback-descriptions.xml
+++ b/java/res/values-nl/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Plaatsen"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Symbolen"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Emoticons"</string>
+ <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+ <skip />
+ <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+ <skip />
</resources>
diff --git a/java/res/values-nl/strings.xml b/java/res/values-nl/strings.xml
index 342464fc8..a651f7e06 100644
--- a/java/res/values-nl/strings.xml
+++ b/java/res/values-nl/strings.xml
@@ -21,7 +21,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_input_options" msgid="3909945612939668554">"Invoeropties"</string>
- <string name="english_ime_research_log" msgid="8492602295696577851">"Opdrachten in onderzoekslogbestand"</string>
<string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Contactnamen opzoeken"</string>
<string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"De spellingcontrole gebruikt items uit uw contactenlijst"</string>
<string name="vibrate_on_keypress" msgid="5258079494276955460">"Trillen bij toetsaanslag"</string>
@@ -84,8 +83,6 @@
<string name="select_language" msgid="3693815588777926848">"Invoertalen"</string>
<string name="hint_add_to_dictionary" msgid="573678656946085380">"Raak nogmaals aan om op te slaan"</string>
<string name="has_dictionary" msgid="6071847973466625007">"Woordenboek beschikbaar"</string>
- <string name="prefs_enable_log" msgid="6620424505072963557">"Gebruikersfeedback inschakelen."</string>
- <string name="prefs_description_log" msgid="7525225584555429211">"Help deze invoermethode te verbeteren door automatisch gebruiksstatistieken en crashmeldingen te verzenden."</string>
<string name="keyboard_layout" msgid="8451164783510487501">"Toetsenbordthema"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"Engels (GB)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"Engels (VS)"</string>
@@ -118,7 +115,6 @@
<string name="enable" msgid="5031294444630523247">"Inschakelen"</string>
<string name="not_now" msgid="6172462888202790482">"Niet nu"</string>
<string name="custom_input_style_already_exists" msgid="8008728952215449707">"Dezelfde invoerstijl bestaat al: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
- <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Modus voor gebruiksvriendelijkheidsonderzoek"</string>
<string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Vertraging toets lang indrukkn"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Trilingsduur bij toetsgebruik"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Geluidsvolume bij toetsgebruik"</string>
diff --git a/java/res/values-pl/strings-action-keys.xml b/java/res/values-pl/strings-action-keys.xml
index 2984b98b8..d641cbc9e 100644
--- a/java/res/values-pl/strings-action-keys.xml
+++ b/java/res/values-pl/strings-action-keys.xml
@@ -25,6 +25,8 @@
<string name="label_previous_key" msgid="1421141755779895275">"Wróć"</string>
<string name="label_done_key" msgid="7564866296502630852">"Gotowe"</string>
<string name="label_send_key" msgid="482252074224462163">"Wyślij"</string>
+ <!-- no translation found for label_search_key (7965186050435796642) -->
+ <skip />
<string name="label_pause_key" msgid="2225922926459730642">"Pauza"</string>
<string name="label_wait_key" msgid="5891247853595466039">"Czekaj"</string>
</resources>
diff --git a/java/res/values-pl/strings-talkback-descriptions.xml b/java/res/values-pl/strings-talkback-descriptions.xml
index da5f46b25..1ec691e46 100644
--- a/java/res/values-pl/strings-talkback-descriptions.xml
+++ b/java/res/values-pl/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Miejsca"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Symbole"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Emotikony"</string>
+ <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+ <skip />
+ <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+ <skip />
</resources>
diff --git a/java/res/values-pl/strings.xml b/java/res/values-pl/strings.xml
index c4261c60e..e78b7f267 100644
--- a/java/res/values-pl/strings.xml
+++ b/java/res/values-pl/strings.xml
@@ -21,7 +21,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_input_options" msgid="3909945612939668554">"Opcje wprowadzania"</string>
- <string name="english_ime_research_log" msgid="8492602295696577851">"Polecenia dziennika badań"</string>
<string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Przeszukaj kontakty"</string>
<string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Sprawdzanie pisowni bierze pod uwagę wpisy z listy kontaktów."</string>
<string name="vibrate_on_keypress" msgid="5258079494276955460">"Wibracja przy naciśnięciu"</string>
@@ -84,8 +83,6 @@
<string name="select_language" msgid="3693815588777926848">"Języki wprowadzania"</string>
<string name="hint_add_to_dictionary" msgid="573678656946085380">"Dotknij ponownie, aby zapisać"</string>
<string name="has_dictionary" msgid="6071847973466625007">"Słownik dostępny"</string>
- <string name="prefs_enable_log" msgid="6620424505072963557">"Włącz przesyłanie opinii użytkownika"</string>
- <string name="prefs_description_log" msgid="7525225584555429211">"Pomóż ulepszyć edytor wprowadzania tekstu, automatycznie wysyłając statystyki użycia i raporty o awariach."</string>
<string name="keyboard_layout" msgid="8451164783510487501">"Motyw klawiatury"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"angielski (Wielka Brytania)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"angielski (Stany Zjednoczone)"</string>
@@ -118,7 +115,6 @@
<string name="enable" msgid="5031294444630523247">"Włącz"</string>
<string name="not_now" msgid="6172462888202790482">"Nie teraz"</string>
<string name="custom_input_style_already_exists" msgid="8008728952215449707">"Taki styl wprowadzania już istnieje: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
- <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Tryb badania przydatności"</string>
<string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Opóźnienie przy długim naciśnięciu"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Wibracja przy naciśniętym klawiszu"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Głośność przy naciśniętym klawiszu"</string>
diff --git a/java/res/values-pt-rPT/strings-action-keys.xml b/java/res/values-pt-rPT/strings-action-keys.xml
index 7a7559fea..1b5921f3e 100644
--- a/java/res/values-pt-rPT/strings-action-keys.xml
+++ b/java/res/values-pt-rPT/strings-action-keys.xml
@@ -25,6 +25,8 @@
<string name="label_previous_key" msgid="1421141755779895275">"Ant."</string>
<string name="label_done_key" msgid="7564866296502630852">"Conc."</string>
<string name="label_send_key" msgid="482252074224462163">"Env."</string>
+ <!-- no translation found for label_search_key (7965186050435796642) -->
+ <skip />
<string name="label_pause_key" msgid="2225922926459730642">"Pausa"</string>
<string name="label_wait_key" msgid="5891247853595466039">"Esp."</string>
</resources>
diff --git a/java/res/values-pt-rPT/strings-talkback-descriptions.xml b/java/res/values-pt-rPT/strings-talkback-descriptions.xml
index b49b58bc2..854136479 100644
--- a/java/res/values-pt-rPT/strings-talkback-descriptions.xml
+++ b/java/res/values-pt-rPT/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Locais"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Símbolos"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Ícones expressivos"</string>
+ <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+ <skip />
+ <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+ <skip />
</resources>
diff --git a/java/res/values-pt-rPT/strings.xml b/java/res/values-pt-rPT/strings.xml
index 8b75dd0dd..d13fca3ba 100644
--- a/java/res/values-pt-rPT/strings.xml
+++ b/java/res/values-pt-rPT/strings.xml
@@ -21,7 +21,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_input_options" msgid="3909945612939668554">"Opções de introdução"</string>
- <string name="english_ime_research_log" msgid="8492602295696577851">"Comandos de Reg. Invest."</string>
<string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Procurar nomes de contac."</string>
<string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"O corretor ortográfico utiliza entradas da sua lista de contactos"</string>
<string name="vibrate_on_keypress" msgid="5258079494276955460">"Vibrar ao primir as teclas"</string>
@@ -84,8 +83,6 @@
<string name="select_language" msgid="3693815588777926848">"Idiomas de introdução"</string>
<string name="hint_add_to_dictionary" msgid="573678656946085380">"Toque novamente para guardar"</string>
<string name="has_dictionary" msgid="6071847973466625007">"Dicionário disponível"</string>
- <string name="prefs_enable_log" msgid="6620424505072963557">"Ativar comentários do utilizador"</string>
- <string name="prefs_description_log" msgid="7525225584555429211">"Envie automaticamente estatísticas de utilização e relatórios de falhas e ajude-nos a melhorar este editor do método de introdução."</string>
<string name="keyboard_layout" msgid="8451164783510487501">"Tema do teclado"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"Inglês (RU)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"Inglês (EUA)"</string>
@@ -118,7 +115,6 @@
<string name="enable" msgid="5031294444630523247">"Ativar"</string>
<string name="not_now" msgid="6172462888202790482">"Agora não"</string>
<string name="custom_input_style_already_exists" msgid="8008728952215449707">"Já existe o mesmo estilo de introdução: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
- <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Modo de estudo da capacidade de utilização"</string>
<string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Atraso ao manter tecla premida"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Duração vibr. ao premir teclas"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Volume do som ao premir teclas"</string>
diff --git a/java/res/values-pt/strings-action-keys.xml b/java/res/values-pt/strings-action-keys.xml
index 1d8e760e7..470846b21 100644
--- a/java/res/values-pt/strings-action-keys.xml
+++ b/java/res/values-pt/strings-action-keys.xml
@@ -25,6 +25,8 @@
<string name="label_previous_key" msgid="1421141755779895275">"Ant."</string>
<string name="label_done_key" msgid="7564866296502630852">"Conc."</string>
<string name="label_send_key" msgid="482252074224462163">"Env."</string>
+ <!-- no translation found for label_search_key (7965186050435796642) -->
+ <skip />
<string name="label_pause_key" msgid="2225922926459730642">"Pausa"</string>
<string name="label_wait_key" msgid="5891247853595466039">"Esp."</string>
</resources>
diff --git a/java/res/values-pt/strings-emoji-descriptions.xml b/java/res/values-pt/strings-emoji-descriptions.xml
new file mode 100644
index 000000000..1c6ad71f9
--- /dev/null
+++ b/java/res/values-pt/strings-emoji-descriptions.xml
@@ -0,0 +1,846 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/*
+**
+** Copyright 2014, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="spoken_emoji_00A9" msgid="2859822817116803638">"Símbolo de copyright"</string>
+ <string name="spoken_emoji_00AE" msgid="7708335454134589027">"Símbolo de marca registrada"</string>
+ <string name="spoken_emoji_203C" msgid="153340916701508663">"Ponto de exclamação duplo"</string>
+ <string name="spoken_emoji_2049" msgid="4877256448299555371">"Ponto de exclamação e ponto de interrogação"</string>
+ <string name="spoken_emoji_2122" msgid="9188440722954720429">"Símbolo de marca comercial"</string>
+ <string name="spoken_emoji_2139" msgid="9114342638917304327">"Fonte de informação"</string>
+ <string name="spoken_emoji_2194" msgid="8055202727034946680">"Seta para esquerda e para direita"</string>
+ <string name="spoken_emoji_2195" msgid="8028122253301087407">"Seta para cima e para baixo"</string>
+ <string name="spoken_emoji_2196" msgid="4019164898967854363">"Seta para o noroeste"</string>
+ <string name="spoken_emoji_2197" msgid="4255723717709017801">"Seta para o nordeste"</string>
+ <string name="spoken_emoji_2198" msgid="1452063451313622090">"Seta para o sudeste"</string>
+ <string name="spoken_emoji_2199" msgid="6942722693368807849">"Seta para o sudoeste"</string>
+ <string name="spoken_emoji_21A9" msgid="5204750172335111188">"Seta para a esquerda com gancho"</string>
+ <string name="spoken_emoji_21AA" msgid="3950259884359247006">"Seta para a direita com gancho"</string>
+ <string name="spoken_emoji_231A" msgid="6751448803233874993">"Relógio de pulso"</string>
+ <string name="spoken_emoji_231B" msgid="5956428809948426182">"Ampulheta"</string>
+ <string name="spoken_emoji_23E9" msgid="4022497733535162237">"Triângulo duplo preto para a direita"</string>
+ <string name="spoken_emoji_23EA" msgid="2251396938087774944">"Triângulo duplo preto para a esquerda"</string>
+ <string name="spoken_emoji_23EB" msgid="3746885195641491865">"Triângulo duplo preto para cima"</string>
+ <string name="spoken_emoji_23EC" msgid="7852372752901163416">"Triângulo duplo preto para baixo"</string>
+ <string name="spoken_emoji_23F0" msgid="8474219588750627870">"Despertador"</string>
+ <string name="spoken_emoji_23F3" msgid="166900119581024371">"Ampulheta com areia correndo"</string>
+ <string name="spoken_emoji_24C2" msgid="3948348737566038470">"Letra M maiúscula contida em círculo"</string>
+ <string name="spoken_emoji_25AA" msgid="7865181015100227349">"Quadrado pequeno preto"</string>
+ <string name="spoken_emoji_25AB" msgid="6446532820937381457">"Quadrado pequeno branco"</string>
+ <string name="spoken_emoji_25B6" msgid="2423897708496040947">"Triângulo preto para a direita"</string>
+ <string name="spoken_emoji_25C0" msgid="3595083440074484934">"Triângulo preto para a esquerda"</string>
+ <string name="spoken_emoji_25FB" msgid="4838691986881215419">"Quadrado médio branco"</string>
+ <string name="spoken_emoji_25FC" msgid="7008859564991191050">"Quadrado médio preto"</string>
+ <string name="spoken_emoji_25FD" msgid="7673439755069217479">"Quadrado médio branco"</string>
+ <string name="spoken_emoji_25FE" msgid="6782214109919768923">"Quadrado médio preto"</string>
+ <string name="spoken_emoji_2600" msgid="2272722634618990413">"Sol preto com raios"</string>
+ <string name="spoken_emoji_2601" msgid="6205136889311537150">"Nuvem"</string>
+ <string name="spoken_emoji_260E" msgid="8670395193046424238">"Telefone preto"</string>
+ <string name="spoken_emoji_2611" msgid="4530550203347054611">"Urna de votação com marca de verificação"</string>
+ <string name="spoken_emoji_2614" msgid="1612791247861229500">"Guarda-chuva com gotas de chuva"</string>
+ <string name="spoken_emoji_2615" msgid="3320562382424018588">"Bebida quente"</string>
+ <string name="spoken_emoji_261D" msgid="4690554173549768467">"Dedo indicador branco apontando para cima de frente"</string>
+ <string name="spoken_emoji_263A" msgid="3170094381521989300">"Rosto sorridente branco"</string>
+ <string name="spoken_emoji_2648" msgid="4621241062667020673">"Áries"</string>
+ <string name="spoken_emoji_2649" msgid="7694461245947059086">"Touro"</string>
+ <string name="spoken_emoji_264A" msgid="1258074605878705030">"Gêmeos"</string>
+ <string name="spoken_emoji_264B" msgid="4409219914377810956">"Câncer"</string>
+ <string name="spoken_emoji_264C" msgid="6520255367817054163">"Leão"</string>
+ <string name="spoken_emoji_264D" msgid="1504758945499854018">"Virgem"</string>
+ <string name="spoken_emoji_264E" msgid="2354847104530633519">"Libra"</string>
+ <string name="spoken_emoji_264F" msgid="5822933280406416112">"Escorpião"</string>
+ <string name="spoken_emoji_2650" msgid="4832481156714796163">"Sagitário"</string>
+ <string name="spoken_emoji_2651" msgid="840953134601595090">"Capricórnio"</string>
+ <string name="spoken_emoji_2652" msgid="3586925968718775281">"Aquário"</string>
+ <string name="spoken_emoji_2653" msgid="8420547731496254492">"Peixes"</string>
+ <string name="spoken_emoji_2660" msgid="4541170554542412536">"Naipe preto de espadas"</string>
+ <string name="spoken_emoji_2663" msgid="3669352721942285724">"Naipe preto de paus"</string>
+ <string name="spoken_emoji_2665" msgid="6347941599683765843">"Naipe preto de copas"</string>
+ <string name="spoken_emoji_2666" msgid="8296769213401115999">"Naipe preto de ouros"</string>
+ <string name="spoken_emoji_2668" msgid="7063148281053820386">"Águas termais"</string>
+ <string name="spoken_emoji_267B" msgid="21716857176812762">"Símbolo de reciclagem universal preto"</string>
+ <string name="spoken_emoji_267F" msgid="8833496533226475443">"Símbolo de cadeira de rodas"</string>
+ <string name="spoken_emoji_2693" msgid="7443148847598433088">"Âncora"</string>
+ <string name="spoken_emoji_26A0" msgid="6272635532992727510">"Sinal de aviso"</string>
+ <string name="spoken_emoji_26A1" msgid="5604749644693339145">"Sinal de alta tensão"</string>
+ <string name="spoken_emoji_26AA" msgid="8005748091690377153">"Círculo branco médio"</string>
+ <string name="spoken_emoji_26AB" msgid="1655910278422753244">"Círculo preto médio"</string>
+ <string name="spoken_emoji_26BD" msgid="1545218197938889737">"Bola de futebol"</string>
+ <string name="spoken_emoji_26BE" msgid="8959760533076498209">"Bola de beisebol"</string>
+ <string name="spoken_emoji_26C4" msgid="3045791757044255626">"Boneco de neve sem neve"</string>
+ <string name="spoken_emoji_26C5" msgid="5580129409712578639">"Sol atrás da nuvem"</string>
+ <string name="spoken_emoji_26CE" msgid="8963656417276062998">"Serpentário"</string>
+ <string name="spoken_emoji_26D4" msgid="2231451988209604130">"Entrada proíbida"</string>
+ <string name="spoken_emoji_26EA" msgid="7513319636103804907">"Igreja"</string>
+ <string name="spoken_emoji_26F2" msgid="7134115206158891037">"Fonte"</string>
+ <string name="spoken_emoji_26F3" msgid="4912302210162075465">"Bandeira no buraco"</string>
+ <string name="spoken_emoji_26F5" msgid="4766328116769075217">"Barco a vela"</string>
+ <string name="spoken_emoji_26FA" msgid="5888017494809199037">"Barraca"</string>
+ <string name="spoken_emoji_26FD" msgid="2417060622927453534">"Bomba de combustível"</string>
+ <string name="spoken_emoji_2702" msgid="4005741160717451912">"Tesoura preta"</string>
+ <string name="spoken_emoji_2705" msgid="164605766946697759">"Marca de verificação grossa branca"</string>
+ <string name="spoken_emoji_2708" msgid="7153840886849268988">"Avião"</string>
+ <string name="spoken_emoji_2709" msgid="2217319160724311369">"Envelope"</string>
+ <string name="spoken_emoji_270A" msgid="508347232762319473">"Punho levantado"</string>
+ <string name="spoken_emoji_270B" msgid="6640562128327753423">"Mão levantada"</string>
+ <string name="spoken_emoji_270C" msgid="1344288035704944581">"Mão de vitória"</string>
+ <string name="spoken_emoji_270F" msgid="6108251586067318718">"Lápis"</string>
+ <string name="spoken_emoji_2712" msgid="6320544535087710482">"Ponta de caneta-tinteiro preta"</string>
+ <string name="spoken_emoji_2714" msgid="1968242800064001654">"Marca de verificação grossa"</string>
+ <string name="spoken_emoji_2716" msgid="511941294762977228">"Sinal de multiplicação x grosso"</string>
+ <string name="spoken_emoji_2728" msgid="5650330815808691881">"Brilhos"</string>
+ <string name="spoken_emoji_2733" msgid="8915809595141157327">"Asterisco de oito pontas"</string>
+ <string name="spoken_emoji_2734" msgid="4846583547980754332">"Estrela preta de oito pontas"</string>
+ <string name="spoken_emoji_2744" msgid="4350636647760161042">"Floco de neve"</string>
+ <string name="spoken_emoji_2747" msgid="3718282973916474455">"Brilho"</string>
+ <string name="spoken_emoji_274C" msgid="2752145886733295314">"Sinal de cruzamento"</string>
+ <string name="spoken_emoji_274E" msgid="4262918689871098338">"egativo de sinal de cruzamento contido em quadrado"</string>
+ <string name="spoken_emoji_2753" msgid="6935897159942119808">"Ornamento de ponto de interrogação preto"</string>
+ <string name="spoken_emoji_2754" msgid="7277504915105532954">"Ornamento de ponto de interrogação branco"</string>
+ <string name="spoken_emoji_2755" msgid="6853076969826960210">"Ornamento de ponto de exclamação branco"</string>
+ <string name="spoken_emoji_2757" msgid="3707907828776912174">"Símbolo de ponto de exclamação grosso"</string>
+ <string name="spoken_emoji_2764" msgid="4214257843609432167">"Coração preto grosso"</string>
+ <string name="spoken_emoji_2795" msgid="6563954833786162168">"Sinal de adição grosso"</string>
+ <string name="spoken_emoji_2796" msgid="5990926508250772777">"Sinal de subtração grosso"</string>
+ <string name="spoken_emoji_2797" msgid="24694184172879174">"Sinal de divisão grosso"</string>
+ <string name="spoken_emoji_27A1" msgid="3513434778263100580">"Seta para a direita preta"</string>
+ <string name="spoken_emoji_27B0" msgid="203395646864662198">"Laçada"</string>
+ <string name="spoken_emoji_27BF" msgid="4940514642375640510">"Laçada dupla"</string>
+ <string name="spoken_emoji_2934" msgid="9062130477982973457">"Seta para a direita com curva para cima"</string>
+ <string name="spoken_emoji_2935" msgid="6198710960720232074">"Seta para a direita com curva para baixo"</string>
+ <string name="spoken_emoji_2B05" msgid="4813405635410707690">"Seta preta para a esquerda"</string>
+ <string name="spoken_emoji_2B06" msgid="1223172079106250748">"Seta preta para cima"</string>
+ <string name="spoken_emoji_2B07" msgid="1599124424746596150">"Seta preta para baixo"</string>
+ <string name="spoken_emoji_2B1B" msgid="3461247311988501626">"Quadrado grande preto"</string>
+ <string name="spoken_emoji_2B1C" msgid="5793146430145248915">"Quadrado grande branco"</string>
+ <string name="spoken_emoji_2B50" msgid="3850845519526950524">"Estrela média branca"</string>
+ <string name="spoken_emoji_2B55" msgid="9137882158811541824">"Círculo grande grosso"</string>
+ <string name="spoken_emoji_3030" msgid="4609172241893565639">"Traço ondulado"</string>
+ <string name="spoken_emoji_303D" msgid="2545833934975907505">"Marca de alternação de parte"</string>
+ <string name="spoken_emoji_3297" msgid="928912923628973800">"Ideograma \"parabéns\" contido em círculo"</string>
+ <string name="spoken_emoji_3299" msgid="3930347573693668426">"Ideograma \"segredo\" contido em círculo"</string>
+ <string name="spoken_emoji_1F004" msgid="1705216181345894600">"Pedra de mahjong do dragão vermelho"</string>
+ <string name="spoken_emoji_1F0CF" msgid="7601493592085987866">"Curinga preto de baralho"</string>
+ <string name="spoken_emoji_1F170" msgid="3817698686602826773">"Tipo sanguíneo A"</string>
+ <string name="spoken_emoji_1F171" msgid="3684218589626650242">"Tipo sanguíneo B"</string>
+ <string name="spoken_emoji_1F17E" msgid="2978809190364779029">"Tipo sanguíneo O"</string>
+ <string name="spoken_emoji_1F17F" msgid="463634348668462040">"Estacionamento"</string>
+ <string name="spoken_emoji_1F18E" msgid="1650705325221496768">"Tipo sanguíneo AB"</string>
+ <string name="spoken_emoji_1F191" msgid="5386969264431429221">"\"CL\" em letras de fôrma"</string>
+ <string name="spoken_emoji_1F192" msgid="8324226436829162496">"\"COOL\" em letras de fôrma"</string>
+ <string name="spoken_emoji_1F193" msgid="4731758603321515364">"\"‘FREE\" em letras de fôrma"</string>
+ <string name="spoken_emoji_1F194" msgid="4903128609556175887">"\"ID\" em letras de fôrma"</string>
+ <string name="spoken_emoji_1F195" msgid="1433142500411060924">"\"NEW\" em letras de fôrma"</string>
+ <string name="spoken_emoji_1F196" msgid="8825160701159634202">"\"NG\" em letras de fôrma"</string>
+ <string name="spoken_emoji_1F197" msgid="7841079241554176535">"\"OK\" em letras de fôrma"</string>
+ <string name="spoken_emoji_1F198" msgid="7020298909426960622">"\"SOS\" em letras de fôrma"</string>
+ <string name="spoken_emoji_1F199" msgid="5971252667136235630">"\"UP!\" em letras de fôrma"</string>
+ <string name="spoken_emoji_1F19A" msgid="4557270135899843959">"\"VS\" em letras de fôrma"</string>
+ <string name="spoken_emoji_1F201" msgid="7000490044681139002">"Caracteres koko em katakana contidos em quadrado"</string>
+ <string name="spoken_emoji_1F202" msgid="8560906958695043947">"Caractere sa em katakana contido em quadrado"</string>
+ <string name="spoken_emoji_1F21A" msgid="1496435317324514033">"Ideograma \"gratuito\" contido em quadrado"</string>
+ <string name="spoken_emoji_1F22F" msgid="609797148862445402">"Ideograma \"lugar reservado\" contido em quadrado"</string>
+ <string name="spoken_emoji_1F232" msgid="8125716331632035820">"Ideograma \"proibição\" contido em quadrado"</string>
+ <string name="spoken_emoji_1F233" msgid="8749401090457355028">"Ideograma \"vaga\" contido em quadrado"</string>
+ <string name="spoken_emoji_1F234" msgid="3546951604285970768">"Ideograma \"aceitação\" contido em quadrado"</string>
+ <string name="spoken_emoji_1F235" msgid="5320186982841793711">"Ideograma \"lotação esgotada\" contido em quadrado"</string>
+ <string name="spoken_emoji_1F236" msgid="879755752069393034">"Ideograma \"pago\" contido em quadrado"</string>
+ <string name="spoken_emoji_1F237" msgid="6741807001205851437">"Ideograma \"mensal\" contido em quadrado"</string>
+ <string name="spoken_emoji_1F238" msgid="5504414186438196912">"Ideograma \"aplicação\" contido em quadrado"</string>
+ <string name="spoken_emoji_1F239" msgid="1634067311597618959">"Ideograma \"desconto\" contido em quadrado"</string>
+ <string name="spoken_emoji_1F23A" msgid="3107862957630169536">"Ideograma \"em atividade\" contido em quadrado"</string>
+ <string name="spoken_emoji_1F250" msgid="6586943922806727907">"Ideograma \"vantagem\" contido em círculo"</string>
+ <string name="spoken_emoji_1F251" msgid="9099032855993346948">"Ideograma \"aceitar\" contido em círculo"</string>
+ <string name="spoken_emoji_1F300" msgid="4720098285295840383">"Ciclone"</string>
+ <string name="spoken_emoji_1F301" msgid="3601962477653752974">"Enevoado"</string>
+ <string name="spoken_emoji_1F302" msgid="3404357123421753593">"Guarda-chuva fechado"</string>
+ <string name="spoken_emoji_1F303" msgid="3899301321538188206">"Noite estrelada"</string>
+ <string name="spoken_emoji_1F304" msgid="2767148930689050040">"Nascer do sol nas montanhas"</string>
+ <string name="spoken_emoji_1F305" msgid="9165812924292061196">"Nascer do sol"</string>
+ <string name="spoken_emoji_1F306" msgid="5889294736109193104">"Cidade ao entardecer"</string>
+ <string name="spoken_emoji_1F307" msgid="2714290867291163713">"Pôr do sol nos prédios"</string>
+ <string name="spoken_emoji_1F308" msgid="688704703985173377">"Arco-íris"</string>
+ <string name="spoken_emoji_1F309" msgid="6217981957992313528">"Ponte à noite"</string>
+ <string name="spoken_emoji_1F30A" msgid="4329309263152110893">"Onda do mar"</string>
+ <string name="spoken_emoji_1F30B" msgid="5729430693700923112">"Vulcão"</string>
+ <string name="spoken_emoji_1F30C" msgid="2961230863217543082">"Via Láctea"</string>
+ <string name="spoken_emoji_1F30D" msgid="1113905673331547953">"Globo terrestre Europa/África"</string>
+ <string name="spoken_emoji_1F30E" msgid="5278512600749223671">"Globo terrestre Américas"</string>
+ <string name="spoken_emoji_1F30F" msgid="5718144880978707493">"Globo terrestre Ásia/Austrália"</string>
+ <string name="spoken_emoji_1F310" msgid="2959618582975247601">"Globo com meridianos"</string>
+ <string name="spoken_emoji_1F311" msgid="623906380914895542">"Símbolo da lua nova"</string>
+ <string name="spoken_emoji_1F312" msgid="4458575672576125401">"Símbolo da lua crescente"</string>
+ <string name="spoken_emoji_1F313" msgid="7599181787989497294">"Símbolo da lua em quarto crescente"</string>
+ <string name="spoken_emoji_1F314" msgid="4898293184964365413">"Símbolo da lua crescente gibosa"</string>
+ <string name="spoken_emoji_1F315" msgid="3218117051779496309">"Símbolo da lua cheia"</string>
+ <string name="spoken_emoji_1F316" msgid="2061317145777689569">"Símbolo da lua minguante gibosa"</string>
+ <string name="spoken_emoji_1F317" msgid="2721090687319539049">"Símbolo da lua em quarto minguante"</string>
+ <string name="spoken_emoji_1F318" msgid="3814091755648887570">"Símbolo da lua minguante"</string>
+ <string name="spoken_emoji_1F319" msgid="4074299824890459465">"Lua crescente"</string>
+ <string name="spoken_emoji_1F31A" msgid="3092285278116977103">"Lua nova com rosto"</string>
+ <string name="spoken_emoji_1F31B" msgid="2658562138386927881">"Lua em quarto crescente com rosto"</string>
+ <string name="spoken_emoji_1F31C" msgid="7914768515547867384">"Lua em quarto minguante com rosto"</string>
+ <string name="spoken_emoji_1F31D" msgid="1925730459848297182">"Lua cheia com rosto"</string>
+ <string name="spoken_emoji_1F31E" msgid="8022112382524084418">"Sol com rosto"</string>
+ <string name="spoken_emoji_1F31F" msgid="1051661214137766369">"Estrela brilhante"</string>
+ <string name="spoken_emoji_1F320" msgid="5450591979068216115">"Estrela cadente"</string>
+ <string name="spoken_emoji_1F330" msgid="3115760035618051575">"Castanha"</string>
+ <string name="spoken_emoji_1F331" msgid="5658888205290008691">"Muda"</string>
+ <string name="spoken_emoji_1F332" msgid="2935650450421165938">"Árvore perenifólia"</string>
+ <string name="spoken_emoji_1F333" msgid="5898847427062482675">"Árvore decídua"</string>
+ <string name="spoken_emoji_1F334" msgid="6183375224678417894">"Palmeira"</string>
+ <string name="spoken_emoji_1F335" msgid="5352418412103584941">"Cacto"</string>
+ <string name="spoken_emoji_1F337" msgid="3839107352363566289">"Tulipa"</string>
+ <string name="spoken_emoji_1F338" msgid="6389970364260468490">"Flor de cerejeira"</string>
+ <string name="spoken_emoji_1F339" msgid="9128891447985256151">"Rosa"</string>
+ <string name="spoken_emoji_1F33A" msgid="2025828400095233078">"Hibisco"</string>
+ <string name="spoken_emoji_1F33B" msgid="8163868254348448552">"Girassol"</string>
+ <string name="spoken_emoji_1F33C" msgid="6850371206262335812">"Florescência"</string>
+ <string name="spoken_emoji_1F33D" msgid="9033484052864509610">"Espiga de milho"</string>
+ <string name="spoken_emoji_1F33E" msgid="2540173396638444120">"Espiga de arroz"</string>
+ <string name="spoken_emoji_1F33F" msgid="4384823344364908558">"Erva"</string>
+ <string name="spoken_emoji_1F340" msgid="3494255459156499305">"Trevo de quatro folhas"</string>
+ <string name="spoken_emoji_1F341" msgid="4581959481754990158">"Folha de bordo"</string>
+ <string name="spoken_emoji_1F342" msgid="3119068426871821222">"Folha caída"</string>
+ <string name="spoken_emoji_1F343" msgid="2663317495805149004">"Folha ao sabor do vento"</string>
+ <string name="spoken_emoji_1F344" msgid="2738517881678722159">"Cogumelo"</string>
+ <string name="spoken_emoji_1F345" msgid="6135288642349085554">"Tomate"</string>
+ <string name="spoken_emoji_1F346" msgid="2075395322785406367">"Berinjela"</string>
+ <string name="spoken_emoji_1F347" msgid="7753453754963890571">"Uvas"</string>
+ <string name="spoken_emoji_1F348" msgid="1247076837284932788">"Melão"</string>
+ <string name="spoken_emoji_1F349" msgid="5563054555180611086">"Melancia"</string>
+ <string name="spoken_emoji_1F34A" msgid="4688661208570160524">"Tangerina"</string>
+ <string name="spoken_emoji_1F34B" msgid="4335318423164185706">"Limão"</string>
+ <string name="spoken_emoji_1F34C" msgid="3712827239858159474">"Banana"</string>
+ <string name="spoken_emoji_1F34D" msgid="7712521967162622936">"Abacaxi"</string>
+ <string name="spoken_emoji_1F34E" msgid="1859466882598614228">"Maçã vermelha"</string>
+ <string name="spoken_emoji_1F34F" msgid="8251711032295005633">"Maçã verde"</string>
+ <string name="spoken_emoji_1F350" msgid="625802980159197701">"Pera"</string>
+ <string name="spoken_emoji_1F351" msgid="4269460120610911895">"Pêssego"</string>
+ <string name="spoken_emoji_1F352" msgid="965600953360182635">"Cerejas"</string>
+ <string name="spoken_emoji_1F353" msgid="7068623879906925592">"Morango"</string>
+ <string name="spoken_emoji_1F354" msgid="45162285238888494">"Hambúrguer"</string>
+ <string name="spoken_emoji_1F355" msgid="9157587635526433283">"Fatia de pizza"</string>
+ <string name="spoken_emoji_1F356" msgid="2667196119149852244">"Carne com osso"</string>
+ <string name="spoken_emoji_1F357" msgid="8022817413851052256">"Coxa de frango"</string>
+ <string name="spoken_emoji_1F358" msgid="3042693264748036476">"Biscoito de arroz japonês"</string>
+ <string name="spoken_emoji_1F359" msgid="3988148661730121958">"Bolinho de arroz japonês"</string>
+ <string name="spoken_emoji_1F35A" msgid="1763824172198327268">"Arroz cozido"</string>
+ <string name="spoken_emoji_1F35B" msgid="62530406745717835">"Arroz com curry"</string>
+ <string name="spoken_emoji_1F35C" msgid="7537756539198945509">"Tigela quente"</string>
+ <string name="spoken_emoji_1F35D" msgid="8173523083861875196">"Espaguete"</string>
+ <string name="spoken_emoji_1F35E" msgid="2935428307894662571">"Pão"</string>
+ <string name="spoken_emoji_1F35F" msgid="4840297386785728443">"Batatas fritas"</string>
+ <string name="spoken_emoji_1F360" msgid="4094659855684686801">"Batata doce assada"</string>
+ <string name="spoken_emoji_1F361" msgid="6475486395784096109">"Dango"</string>
+ <string name="spoken_emoji_1F362" msgid="5004692577661076275">"Oden"</string>
+ <string name="spoken_emoji_1F363" msgid="1606603765717743806">"Sushi"</string>
+ <string name="spoken_emoji_1F364" msgid="6550457766169570811">"Camarão frito"</string>
+ <string name="spoken_emoji_1F365" msgid="4963815540953316307">"Kamaboko com design de espiral"</string>
+ <string name="spoken_emoji_1F366" msgid="7862401745277049404">"Sorvete de massa"</string>
+ <string name="spoken_emoji_1F367" msgid="7447972978281980414">"Raspadinha"</string>
+ <string name="spoken_emoji_1F368" msgid="7790003146142724913">"Sorvete"</string>
+ <string name="spoken_emoji_1F369" msgid="7383712944084857350">"Rosquinha"</string>
+ <string name="spoken_emoji_1F36A" msgid="2726271795913042295">"Cookie"</string>
+ <string name="spoken_emoji_1F36B" msgid="6342163604299875931">"Barra de chocolate"</string>
+ <string name="spoken_emoji_1F36C" msgid="2168934753998218790">"Doce"</string>
+ <string name="spoken_emoji_1F36D" msgid="3671507903799975792">"Pirulito"</string>
+ <string name="spoken_emoji_1F36E" msgid="4630541402785165902">"Flan"</string>
+ <string name="spoken_emoji_1F36F" msgid="5577915387425169439">"Pote de mel"</string>
+ <string name="spoken_emoji_1F370" msgid="7243244547866114951">"Torta"</string>
+ <string name="spoken_emoji_1F371" msgid="6731527040552916358">"Marmiteira bento"</string>
+ <string name="spoken_emoji_1F372" msgid="1635035323832181733">"Tigela de comida"</string>
+ <string name="spoken_emoji_1F373" msgid="7799289534289221045">"Cozinha"</string>
+ <string name="spoken_emoji_1F374" msgid="5973820884987069131">"Garfo e faca"</string>
+ <string name="spoken_emoji_1F375" msgid="1074832087699617700">"Xícara sem asa"</string>
+ <string name="spoken_emoji_1F376" msgid="6499274685584852067">"Garrafa e copo para saquê"</string>
+ <string name="spoken_emoji_1F377" msgid="1762398562314172075">"Copo para vinho"</string>
+ <string name="spoken_emoji_1F378" msgid="5528234560590117516">"Copo para coquetel"</string>
+ <string name="spoken_emoji_1F379" msgid="790581290787943325">"Bebida tropical"</string>
+ <string name="spoken_emoji_1F37A" msgid="391966822450619516">"Caneca de cerveja"</string>
+ <string name="spoken_emoji_1F37B" msgid="9015043286465670662">"Canecas de cerveja brindando"</string>
+ <string name="spoken_emoji_1F37C" msgid="2532113819464508894">"Mamadeira"</string>
+ <string name="spoken_emoji_1F380" msgid="3487363857092458827">"Fita de presente"</string>
+ <string name="spoken_emoji_1F381" msgid="614180683680675444">"Presente embrulhado"</string>
+ <string name="spoken_emoji_1F382" msgid="4720497171946687501">"Bolo de aniversário"</string>
+ <string name="spoken_emoji_1F383" msgid="3536505941578757623">"Jack Lanterna"</string>
+ <string name="spoken_emoji_1F384" msgid="1797870204479059004">"Árvore de Natal"</string>
+ <string name="spoken_emoji_1F385" msgid="1754174063483626367">"Papai Noel"</string>
+ <string name="spoken_emoji_1F386" msgid="2130445450758114746">"Fogos de artifício"</string>
+ <string name="spoken_emoji_1F387" msgid="3403182563117999933">"Estrelinha"</string>
+ <string name="spoken_emoji_1F388" msgid="2903047203723251804">"Balão"</string>
+ <string name="spoken_emoji_1F389" msgid="2352830665883549388">"Lança confetes"</string>
+ <string name="spoken_emoji_1F38A" msgid="6280428984773641322">"Bola de confetes"</string>
+ <string name="spoken_emoji_1F38B" msgid="4902225837479015489">"Árvore de Tanabata"</string>
+ <string name="spoken_emoji_1F38C" msgid="7623268024030989365">"Bandeiras cruzadas"</string>
+ <string name="spoken_emoji_1F38D" msgid="8237542796124408528">"Decoração Kadomatsu"</string>
+ <string name="spoken_emoji_1F38E" msgid="5373397476238212371">"Bonecas japonesas"</string>
+ <string name="spoken_emoji_1F38F" msgid="8754091376829552844">"Biruta de carpa Koinobori"</string>
+ <string name="spoken_emoji_1F390" msgid="8903307048095431374">"Sinos de vento"</string>
+ <string name="spoken_emoji_1F391" msgid="2134952069191911841">"Cerimônia de contemplação da lua Otsukimi"</string>
+ <string name="spoken_emoji_1F392" msgid="6380405493914304737">"Mochila escolar"</string>
+ <string name="spoken_emoji_1F393" msgid="6947890064872470996">"Capelo"</string>
+ <string name="spoken_emoji_1F3A0" msgid="3572095190082826057">"Carrossel de cavalinho"</string>
+ <string name="spoken_emoji_1F3A1" msgid="4300565511681058798">"Roda-gigante"</string>
+ <string name="spoken_emoji_1F3A2" msgid="15486093912232140">"Montanha russa"</string>
+ <string name="spoken_emoji_1F3A3" msgid="921739319504942924">"Vara de pescar e peixe"</string>
+ <string name="spoken_emoji_1F3A4" msgid="7497596355346856950">"Microfone"</string>
+ <string name="spoken_emoji_1F3A5" msgid="4290497821228183002">"Câmera cinematográfica"</string>
+ <string name="spoken_emoji_1F3A6" msgid="26019057872319055">"Cinema"</string>
+ <string name="spoken_emoji_1F3A7" msgid="837856608794094105">"Fone de ouvido"</string>
+ <string name="spoken_emoji_1F3A8" msgid="2332260356509244587">"Aquarela"</string>
+ <string name="spoken_emoji_1F3A9" msgid="9045869366525115256">"Cartola"</string>
+ <string name="spoken_emoji_1F3AA" msgid="5728760354237132">"Tenda de circo"</string>
+ <string name="spoken_emoji_1F3AB" msgid="1657997517193216284">"Ingresso"</string>
+ <string name="spoken_emoji_1F3AC" msgid="4317366554314492152">"Claquete"</string>
+ <string name="spoken_emoji_1F3AD" msgid="607157286336130470">"Artes cênicas"</string>
+ <string name="spoken_emoji_1F3AE" msgid="2902308174671548150">"Videogame"</string>
+ <string name="spoken_emoji_1F3AF" msgid="5420539221790296407">"Bela pontaria"</string>
+ <string name="spoken_emoji_1F3B0" msgid="7440244806527891956">"Caça-níqueis"</string>
+ <string name="spoken_emoji_1F3B1" msgid="545544382391379234">"Bilhar"</string>
+ <string name="spoken_emoji_1F3B2" msgid="8302262034774787493">"Dados"</string>
+ <string name="spoken_emoji_1F3B3" msgid="5180870610771027520">"Boliche"</string>
+ <string name="spoken_emoji_1F3B4" msgid="4723852033266071564">"Baralho temático de flores"</string>
+ <string name="spoken_emoji_1F3B5" msgid="1998470239850548554">"Nota musical"</string>
+ <string name="spoken_emoji_1F3B6" msgid="3827730457113941705">"Várias notas musicais"</string>
+ <string name="spoken_emoji_1F3B7" msgid="5503403099445042180">"Saxofone"</string>
+ <string name="spoken_emoji_1F3B8" msgid="3985658156795011430">"Guitarra"</string>
+ <string name="spoken_emoji_1F3B9" msgid="5596295757967881451">"Teclado musical"</string>
+ <string name="spoken_emoji_1F3BA" msgid="4284064120340683558">"Trompete"</string>
+ <string name="spoken_emoji_1F3BB" msgid="2856598510069988745">"Violino"</string>
+ <string name="spoken_emoji_1F3BC" msgid="1608424748821446230">"Partitura"</string>
+ <string name="spoken_emoji_1F3BD" msgid="5490786111375627777">"Camiseta de corrida com faixa"</string>
+ <string name="spoken_emoji_1F3BE" msgid="1851613105691627931">"Raquete e bola de tênis"</string>
+ <string name="spoken_emoji_1F3BF" msgid="6862405997423247921">"Esqui e bota de esqui"</string>
+ <string name="spoken_emoji_1F3C0" msgid="7421420756115104085">"Bola de basquete e cesto"</string>
+ <string name="spoken_emoji_1F3C1" msgid="6926537251677319922">"Bandeira xadrez"</string>
+ <string name="spoken_emoji_1F3C2" msgid="5708596929237987082">"Snowboarder"</string>
+ <string name="spoken_emoji_1F3C3" msgid="5850982999510115824">"Corredor"</string>
+ <string name="spoken_emoji_1F3C4" msgid="8468355585994639838">"Surfista"</string>
+ <string name="spoken_emoji_1F3C6" msgid="9094474706847545409">"Troféu"</string>
+ <string name="spoken_emoji_1F3C7" msgid="8172206200368370116">"Corridas de cavalos"</string>
+ <string name="spoken_emoji_1F3C8" msgid="5619171461277597709">"Futebol americano"</string>
+ <string name="spoken_emoji_1F3C9" msgid="6371294008765871043">"Bola de rugby"</string>
+ <string name="spoken_emoji_1F3CA" msgid="130977831787806932">"Nadador"</string>
+ <string name="spoken_emoji_1F3E0" msgid="6277213201655811842">"Construção de casas"</string>
+ <string name="spoken_emoji_1F3E1" msgid="233476176077538885">"Casa com jardim"</string>
+ <string name="spoken_emoji_1F3E2" msgid="919736380093964570">"Edifício comercial"</string>
+ <string name="spoken_emoji_1F3E3" msgid="6177606081825094184">"Correio japonês"</string>
+ <string name="spoken_emoji_1F3E4" msgid="717377871070970293">"Correio europeu"</string>
+ <string name="spoken_emoji_1F3E5" msgid="1350532500431776780">"Hospital"</string>
+ <string name="spoken_emoji_1F3E6" msgid="342132788513806214">"Banco"</string>
+ <string name="spoken_emoji_1F3E7" msgid="6322352038284944265">"Caixa eletrônico"</string>
+ <string name="spoken_emoji_1F3E8" msgid="5864918444350599907">"Hotel"</string>
+ <string name="spoken_emoji_1F3E9" msgid="7830416185375326938">"Motel"</string>
+ <string name="spoken_emoji_1F3EA" msgid="5081084413084360479">"Loja de conveniência"</string>
+ <string name="spoken_emoji_1F3EB" msgid="7010966528205150525">"Escola"</string>
+ <string name="spoken_emoji_1F3EC" msgid="4845978861878295154">"Loja de departamentos"</string>
+ <string name="spoken_emoji_1F3ED" msgid="3980316226665215370">"Fábrica"</string>
+ <string name="spoken_emoji_1F3EE" msgid="1253964276770550248">"Luminária izakaya"</string>
+ <string name="spoken_emoji_1F3EF" msgid="1128975573507389883">"Castelo japonês"</string>
+ <string name="spoken_emoji_1F3F0" msgid="1544632297502291578">"Castelo europeu"</string>
+ <string name="spoken_emoji_1F400" msgid="2063034795679578294">"Rato"</string>
+ <string name="spoken_emoji_1F401" msgid="6736421616217369594">"Camundongo"</string>
+ <string name="spoken_emoji_1F402" msgid="7276670995895485604">"Boi"</string>
+ <string name="spoken_emoji_1F403" msgid="8045709541897118928">"Búfalo asiático"</string>
+ <string name="spoken_emoji_1F404" msgid="5240777285676662335">"Vaca"</string>
+ <string name="spoken_emoji_1F406" msgid="5163461930159540018">"Leopardo"</string>
+ <string name="spoken_emoji_1F407" msgid="6905370221172708160">"Coelho"</string>
+ <string name="spoken_emoji_1F408" msgid="1362164550508207284">"Gato"</string>
+ <string name="spoken_emoji_1F409" msgid="8476130983168866013">"Dragão"</string>
+ <string name="spoken_emoji_1F40A" msgid="1149626786411545043">"Crocodilo"</string>
+ <string name="spoken_emoji_1F40B" msgid="5199104921208397643">"Baleia"</string>
+ <string name="spoken_emoji_1F40C" msgid="2704006052881702675">"Caracol"</string>
+ <string name="spoken_emoji_1F40D" msgid="8648186663643157522">"Serpente"</string>
+ <string name="spoken_emoji_1F40E" msgid="7219137467573327268">"Cavalo"</string>
+ <string name="spoken_emoji_1F40F" msgid="7834336676729040395">"Carneiro"</string>
+ <string name="spoken_emoji_1F410" msgid="8686765722255775031">"Cabra"</string>
+ <string name="spoken_emoji_1F411" msgid="3585715397876383525">"Ovelha"</string>
+ <string name="spoken_emoji_1F412" msgid="4924794582980077838">"Macaco"</string>
+ <string name="spoken_emoji_1F413" msgid="1460475310405677377">"Galo"</string>
+ <string name="spoken_emoji_1F414" msgid="5857296282631892219">"Galinha"</string>
+ <string name="spoken_emoji_1F415" msgid="5920041074892949527">"Cachorro"</string>
+ <string name="spoken_emoji_1F416" msgid="4362403392912540286">"Porco"</string>
+ <string name="spoken_emoji_1F417" msgid="6836978415840795128">"Javali"</string>
+ <string name="spoken_emoji_1F418" msgid="7926161463897783691">"Elefante"</string>
+ <string name="spoken_emoji_1F419" msgid="1055233959755784186">"Polvo"</string>
+ <string name="spoken_emoji_1F41A" msgid="5195666556511558060">"Concha espiral"</string>
+ <string name="spoken_emoji_1F41B" msgid="7652480167465557832">"Inseto"</string>
+ <string name="spoken_emoji_1F41C" msgid="1123461148697574239">"Formiga"</string>
+ <string name="spoken_emoji_1F41D" msgid="718579308764058851">"Abelha"</string>
+ <string name="spoken_emoji_1F41E" msgid="6766305509608115467">"Joaninha"</string>
+ <string name="spoken_emoji_1F41F" msgid="1207261298343160838">"Peixe"</string>
+ <string name="spoken_emoji_1F420" msgid="1041145003133609221">"Peixe tropical"</string>
+ <string name="spoken_emoji_1F421" msgid="1748378324417438751">"Peixe-balão"</string>
+ <string name="spoken_emoji_1F422" msgid="4106724877523329148">"Tartaruga"</string>
+ <string name="spoken_emoji_1F423" msgid="4077407945958691907">"Pintinho nascendo"</string>
+ <string name="spoken_emoji_1F424" msgid="6911326019270172283">"Pintinho"</string>
+ <string name="spoken_emoji_1F425" msgid="5466514196557885577">"Pintinho de frente"</string>
+ <string name="spoken_emoji_1F426" msgid="2163979138772892755">"Pássaro"</string>
+ <string name="spoken_emoji_1F427" msgid="3585670324511212961">"Pinguim"</string>
+ <string name="spoken_emoji_1F428" msgid="7955440808647898579">"Coala"</string>
+ <string name="spoken_emoji_1F429" msgid="5028269352809819035">"Poodle"</string>
+ <string name="spoken_emoji_1F42A" msgid="4681926706404032484">"Dromedário"</string>
+ <string name="spoken_emoji_1F42B" msgid="2725166074981558322">"Camelo bactriano"</string>
+ <string name="spoken_emoji_1F42C" msgid="6764791873413727085">"Golfinho"</string>
+ <string name="spoken_emoji_1F42D" msgid="1033643138546864251">"Smiley de rato"</string>
+ <string name="spoken_emoji_1F42E" msgid="8099223337120508820">"Smiley de vaca"</string>
+ <string name="spoken_emoji_1F42F" msgid="2104743989330781572">"Smiley de tigre"</string>
+ <string name="spoken_emoji_1F430" msgid="525492897063150160">"Smiley de coelho"</string>
+ <string name="spoken_emoji_1F431" msgid="6051358666235016851">"Smiley de gato"</string>
+ <string name="spoken_emoji_1F432" msgid="7698001871193018305">"Smiley de dragão"</string>
+ <string name="spoken_emoji_1F433" msgid="3762356053512899326">"Baleia jorrando água"</string>
+ <string name="spoken_emoji_1F434" msgid="3619943222159943226">"Smiley de cavalo"</string>
+ <string name="spoken_emoji_1F435" msgid="59199202683252958">"Smiley de macaco"</string>
+ <string name="spoken_emoji_1F436" msgid="340544719369009828">"Smiley de cachorro"</string>
+ <string name="spoken_emoji_1F437" msgid="1219818379784982585">"Smiley de porco"</string>
+ <string name="spoken_emoji_1F438" msgid="9128124743321008210">"Smiley de sapo"</string>
+ <string name="spoken_emoji_1F439" msgid="1424161319554642266">"Smiley de porquinho-da-índia"</string>
+ <string name="spoken_emoji_1F43A" msgid="6727645488430385584">"Smiley de lobo"</string>
+ <string name="spoken_emoji_1F43B" msgid="5397170068392865167">"Smiley de urso"</string>
+ <string name="spoken_emoji_1F43C" msgid="2715995734367032431">"Smiley de panda"</string>
+ <string name="spoken_emoji_1F43D" msgid="6005480717951776597">"Focinho de porco"</string>
+ <string name="spoken_emoji_1F43E" msgid="8917626103219080547">"Pegadas de patas"</string>
+ <string name="spoken_emoji_1F440" msgid="7144338258163384433">"Olhos"</string>
+ <string name="spoken_emoji_1F442" msgid="1905515392292676124">"Orelha"</string>
+ <string name="spoken_emoji_1F443" msgid="1491504447758933115">"Nariz"</string>
+ <string name="spoken_emoji_1F444" msgid="3654613047946080332">"Boca"</string>
+ <string name="spoken_emoji_1F445" msgid="7024905244040509204">"Língua"</string>
+ <string name="spoken_emoji_1F446" msgid="2150365643636471745">"Dedo indicador branco apontando para cima"</string>
+ <string name="spoken_emoji_1F447" msgid="8794022344940891388">"Dedo indicador branco apontando para baixo"</string>
+ <string name="spoken_emoji_1F448" msgid="3261812959215550650">"Dedo indicador branco apontando para a esquerda"</string>
+ <string name="spoken_emoji_1F449" msgid="4764447975177805991">"Dedo indicador branco apontando para a direita"</string>
+ <string name="spoken_emoji_1F44A" msgid="7197417095486424841">"Sinal de mão em punho"</string>
+ <string name="spoken_emoji_1F44B" msgid="1975968945250833117">"Sinal de mão acenando"</string>
+ <string name="spoken_emoji_1F44C" msgid="3185919567897876562">"Sinal de mão indicando OK"</string>
+ <string name="spoken_emoji_1F44D" msgid="6182553970602667815">"Sinal com polegar para cima"</string>
+ <string name="spoken_emoji_1F44E" msgid="8030851867365111809">"Sinal com polegar para baixo"</string>
+ <string name="spoken_emoji_1F44F" msgid="5148753662268213389">"Sinal de bater palmas"</string>
+ <string name="spoken_emoji_1F450" msgid="1012021072085157054">"Sinal de mãos abertas"</string>
+ <string name="spoken_emoji_1F451" msgid="8257466714629051320">"Coroa"</string>
+ <string name="spoken_emoji_1F452" msgid="4567394011149905466">"Chapéu de mulher"</string>
+ <string name="spoken_emoji_1F453" msgid="5978410551173163010">"Óculos de grau"</string>
+ <string name="spoken_emoji_1F454" msgid="348469036193323252">"Gravata"</string>
+ <string name="spoken_emoji_1F455" msgid="5665118831861433578">"Camiseta"</string>
+ <string name="spoken_emoji_1F456" msgid="1890991330923356408">"Calça jeans"</string>
+ <string name="spoken_emoji_1F457" msgid="3904310482655702620">"Vestido"</string>
+ <string name="spoken_emoji_1F458" msgid="5704243858031107692">"Quimono"</string>
+ <string name="spoken_emoji_1F459" msgid="3553148747050035251">"Biquíni"</string>
+ <string name="spoken_emoji_1F45A" msgid="1389654639484716101">"Roupas de mulher"</string>
+ <string name="spoken_emoji_1F45B" msgid="1113293170254222904">"Bolsinha"</string>
+ <string name="spoken_emoji_1F45C" msgid="3410257778598006936">"Bolsa"</string>
+ <string name="spoken_emoji_1F45D" msgid="812176504300064819">"Bolsa saco"</string>
+ <string name="spoken_emoji_1F45E" msgid="2901741399934723562">"Sapato masculino"</string>
+ <string name="spoken_emoji_1F45F" msgid="6828566359287798863">"Tênis"</string>
+ <string name="spoken_emoji_1F460" msgid="305863879170420855">"Sapato de salto alto"</string>
+ <string name="spoken_emoji_1F461" msgid="5160493217831417630">"Sandália feminina"</string>
+ <string name="spoken_emoji_1F462" msgid="1722897795554863734">"Botas femininas"</string>
+ <string name="spoken_emoji_1F463" msgid="5850772903593010699">"Pegadas"</string>
+ <string name="spoken_emoji_1F464" msgid="1228335905487734913">"Busto em silhueta"</string>
+ <string name="spoken_emoji_1F465" msgid="4461307702499679879">"Bustos em silhueta"</string>
+ <string name="spoken_emoji_1F466" msgid="1938873085514108889">"Menino"</string>
+ <string name="spoken_emoji_1F467" msgid="8237080594860144998">"Menina"</string>
+ <string name="spoken_emoji_1F468" msgid="6081300722526675382">"Homem"</string>
+ <string name="spoken_emoji_1F469" msgid="1090140923076108158">"Mulher"</string>
+ <string name="spoken_emoji_1F46A" msgid="5063570981942606595">"Família"</string>
+ <string name="spoken_emoji_1F46B" msgid="6795882374287327952">"Homem e mulher de mãos dadas"</string>
+ <string name="spoken_emoji_1F46C" msgid="6844464165783964495">"Dois homens de mãos dadas"</string>
+ <string name="spoken_emoji_1F46D" msgid="2316773068014053180">"Duas mulheres de mãos dadas"</string>
+ <string name="spoken_emoji_1F46E" msgid="5897625605860822401">"Policial"</string>
+ <string name="spoken_emoji_1F46F" msgid="7716871657717641490">"Mulher com orelhas de coelho"</string>
+ <string name="spoken_emoji_1F470" msgid="6409995400510338892">"Noiva com véu"</string>
+ <string name="spoken_emoji_1F471" msgid="3058247860441670806">"Pessoa loira"</string>
+ <string name="spoken_emoji_1F472" msgid="3928854667819339142">"Homem com gua pi mao"</string>
+ <string name="spoken_emoji_1F473" msgid="5921952095808988381">"Homem com turbante"</string>
+ <string name="spoken_emoji_1F474" msgid="1082237499496725183">"Idoso"</string>
+ <string name="spoken_emoji_1F475" msgid="7280323988642212761">"Idosa"</string>
+ <string name="spoken_emoji_1F476" msgid="4713322657821088296">"Bebê"</string>
+ <string name="spoken_emoji_1F477" msgid="2197036131029221370">"Operário de construção civil"</string>
+ <string name="spoken_emoji_1F478" msgid="7245521193493488875">"Princesa"</string>
+ <string name="spoken_emoji_1F479" msgid="6876475321015553972">"Ogro japonês"</string>
+ <string name="spoken_emoji_1F47A" msgid="3900813633102703571">"Gnomo japonês"</string>
+ <string name="spoken_emoji_1F47B" msgid="2608250873194079390">"Fantasma"</string>
+ <string name="spoken_emoji_1F47C" msgid="3838699131276537421">"Anjo bebê"</string>
+ <string name="spoken_emoji_1F47D" msgid="2874077455888369538">"Alienígena"</string>
+ <string name="spoken_emoji_1F47E" msgid="3642607168625579507">"Monstro alienígena"</string>
+ <string name="spoken_emoji_1F47F" msgid="441605977269926252">"Duende"</string>
+ <string name="spoken_emoji_1F480" msgid="3696253485164878739">"Caveira"</string>
+ <string name="spoken_emoji_1F481" msgid="320408708521966893">"Recepcionista de balcão de informações"</string>
+ <string name="spoken_emoji_1F482" msgid="3424354860245608949">"Guarda"</string>
+ <string name="spoken_emoji_1F483" msgid="3221113594843849083">"Dançarina"</string>
+ <string name="spoken_emoji_1F484" msgid="7348014979080444885">"Batom"</string>
+ <string name="spoken_emoji_1F485" msgid="6133507975565116339">"Esmalte"</string>
+ <string name="spoken_emoji_1F486" msgid="9085459968247394155">"Massagem facial"</string>
+ <string name="spoken_emoji_1F487" msgid="1479113637259592150">"Corte de cabelo"</string>
+ <string name="spoken_emoji_1F488" msgid="6922559285234100252">"Poste de barbearia"</string>
+ <string name="spoken_emoji_1F489" msgid="8114863680950147305">"Seringa"</string>
+ <string name="spoken_emoji_1F48A" msgid="8526843630145963032">"Comprimido"</string>
+ <string name="spoken_emoji_1F48B" msgid="2538528967897640292">"Marca de beijo"</string>
+ <string name="spoken_emoji_1F48C" msgid="1681173271652890232">"Carta de amor"</string>
+ <string name="spoken_emoji_1F48D" msgid="8259886164999042373">"Anel"</string>
+ <string name="spoken_emoji_1F48E" msgid="8777981696011111101">"Gema"</string>
+ <string name="spoken_emoji_1F48F" msgid="741593675183677907">"Beijo"</string>
+ <string name="spoken_emoji_1F490" msgid="4482549128959806736">"Buquê"</string>
+ <string name="spoken_emoji_1F491" msgid="2305245307882441500">"Casal com coração"</string>
+ <string name="spoken_emoji_1F492" msgid="3884119934804475732">"Casamento"</string>
+ <string name="spoken_emoji_1F493" msgid="1208828371565525121">"Coração batendo"</string>
+ <string name="spoken_emoji_1F494" msgid="6198876398509338718">"Coração partido"</string>
+ <string name="spoken_emoji_1F495" msgid="9206202744967130919">"Dois corações"</string>
+ <string name="spoken_emoji_1F496" msgid="5436953041732207775">"Coração brilhando"</string>
+ <string name="spoken_emoji_1F497" msgid="7285142863951448473">"Coração crescendo"</string>
+ <string name="spoken_emoji_1F498" msgid="7940131245037575715">"Coração com flecha"</string>
+ <string name="spoken_emoji_1F499" msgid="4453235040265550009">"Coração azul"</string>
+ <string name="spoken_emoji_1F49A" msgid="6262178648366971405">"Coração verde"</string>
+ <string name="spoken_emoji_1F49B" msgid="8085384999750714368">"Coração amarelo"</string>
+ <string name="spoken_emoji_1F49C" msgid="453829540120898698">"Coração roxo"</string>
+ <string name="spoken_emoji_1F49D" msgid="3460534750224161888">"Coração com fita"</string>
+ <string name="spoken_emoji_1F49E" msgid="4490636226072523867">"Corações em círculo"</string>
+ <string name="spoken_emoji_1F49F" msgid="2059319756421226336">"Decoração de coração"</string>
+ <string name="spoken_emoji_1F4A0" msgid="1954850380550212038">"Forma de losango com ponto interno"</string>
+ <string name="spoken_emoji_1F4A1" msgid="403137413540909021">"Lâmpada elétrica"</string>
+ <string name="spoken_emoji_1F4A2" msgid="2604192053295622063">"Símbolo de raiva"</string>
+ <string name="spoken_emoji_1F4A3" msgid="6378351742957821735">"Bomba"</string>
+ <string name="spoken_emoji_1F4A4" msgid="7217736258870346625">"Símbolo de sono"</string>
+ <string name="spoken_emoji_1F4A5" msgid="5401995723541239858">"Símbolo de colisão"</string>
+ <string name="spoken_emoji_1F4A6" msgid="3837802182716483848">"Símbolo da gota de suor"</string>
+ <string name="spoken_emoji_1F4A7" msgid="5718438987757885141">"Gota"</string>
+ <string name="spoken_emoji_1F4A8" msgid="4472108229720006377">"Símbolo de traço"</string>
+ <string name="spoken_emoji_1F4A9" msgid="1240958472788430032">"Cocô"</string>
+ <string name="spoken_emoji_1F4AA" msgid="8427525538635146416">"Bíceps contraídos"</string>
+ <string name="spoken_emoji_1F4AB" msgid="5484114759939427459">"Símbolo de tontura"</string>
+ <string name="spoken_emoji_1F4AC" msgid="5571196638219612682">"Balão de fala"</string>
+ <string name="spoken_emoji_1F4AD" msgid="353174619257798652">"Balão de pensamento"</string>
+ <string name="spoken_emoji_1F4AE" msgid="1223142786927162641">"Flor branca"</string>
+ <string name="spoken_emoji_1F4AF" msgid="3526278354452138397">"Símbolo de cem pontos"</string>
+ <string name="spoken_emoji_1F4B0" msgid="4124102195175124156">"Saco de dinheiro"</string>
+ <string name="spoken_emoji_1F4B1" msgid="8339494003418572905">"Câmbio de moeda"</string>
+ <string name="spoken_emoji_1F4B2" msgid="3179159430187243132">"Sinal de cifrão grosso"</string>
+ <string name="spoken_emoji_1F4B3" msgid="5375412518221759596">"Cartão de crédito"</string>
+ <string name="spoken_emoji_1F4B4" msgid="1068592463669453204">"Nota bancária com sinal de iene"</string>
+ <string name="spoken_emoji_1F4B5" msgid="1426708699891832564">"Nota bancária com sinal de dólar"</string>
+ <string name="spoken_emoji_1F4B6" msgid="8289249930736444837">"Nota bancária com sinal de euro"</string>
+ <string name="spoken_emoji_1F4B7" msgid="5245100496860739429">"Nota bancária com sinal de libra"</string>
+ <string name="spoken_emoji_1F4B8" msgid="4401099580477164440">"Dinheiro com asas"</string>
+ <string name="spoken_emoji_1F4B9" msgid="647509393536679903">"Gráfico com tendência ascendente e símbolo de iene"</string>
+ <string name="spoken_emoji_1F4BA" msgid="1269737854891046321">"Assento"</string>
+ <string name="spoken_emoji_1F4BB" msgid="6252883563347816451">"Computador pessoal"</string>
+ <string name="spoken_emoji_1F4BC" msgid="6182597732218446206">"Valise"</string>
+ <string name="spoken_emoji_1F4BD" msgid="5820961044768829176">"Minidisco"</string>
+ <string name="spoken_emoji_1F4BE" msgid="4754542485835379808">"Disquete"</string>
+ <string name="spoken_emoji_1F4BF" msgid="2237481756984721795">"Disco óptico"</string>
+ <string name="spoken_emoji_1F4C0" msgid="491582501089694461">"DVD"</string>
+ <string name="spoken_emoji_1F4C1" msgid="6645461382494158111">"Pasta de arquivos"</string>
+ <string name="spoken_emoji_1F4C2" msgid="8095638715523765338">"Pasta de arquivos aberta"</string>
+ <string name="spoken_emoji_1F4C3" msgid="3727274466173970142">"Página com curva"</string>
+ <string name="spoken_emoji_1F4C4" msgid="4382570710795501612">"Página voltada para cima"</string>
+ <string name="spoken_emoji_1F4C5" msgid="8693944622627762487">"Calendário"</string>
+ <string name="spoken_emoji_1F4C6" msgid="8469908708708424640">"Calendário destacável"</string>
+ <string name="spoken_emoji_1F4C7" msgid="2665313547987324495">"Índice de cartões"</string>
+ <string name="spoken_emoji_1F4C8" msgid="8007686702282833600">"Gráfico com tendência ascendente"</string>
+ <string name="spoken_emoji_1F4C9" msgid="2271951411192893684">"Gráfico com tendência descendente"</string>
+ <string name="spoken_emoji_1F4CA" msgid="3525692829622381444">"Gráfico de barras"</string>
+ <string name="spoken_emoji_1F4CB" msgid="977639227554095521">"Prancheta"</string>
+ <string name="spoken_emoji_1F4CC" msgid="156107396088741574">"Alfinete"</string>
+ <string name="spoken_emoji_1F4CD" msgid="4266572175361190231">"Alfinete redondo"</string>
+ <string name="spoken_emoji_1F4CE" msgid="6294288509864968290">"Clipe de papel"</string>
+ <string name="spoken_emoji_1F4CF" msgid="149679400831136810">"Régua reta"</string>
+ <string name="spoken_emoji_1F4D0" msgid="8130339336619202915">"Régua triangular"</string>
+ <string name="spoken_emoji_1F4D1" msgid="5852176364856284968">"Guias de marca-página"</string>
+ <string name="spoken_emoji_1F4D2" msgid="2276810154105920052">"Livro-razão"</string>
+ <string name="spoken_emoji_1F4D3" msgid="5873386492793610808">"Bloco de anotações"</string>
+ <string name="spoken_emoji_1F4D4" msgid="4754469936418776360">"Bloco de anotações com capa decorativa"</string>
+ <string name="spoken_emoji_1F4D5" msgid="4642713351802778905">"Livro fechado"</string>
+ <string name="spoken_emoji_1F4D6" msgid="6987347918381807186">"Livro aberto"</string>
+ <string name="spoken_emoji_1F4D7" msgid="7813394163241379223">"Livro verde"</string>
+ <string name="spoken_emoji_1F4D8" msgid="7189799718984979521">"Livro azul"</string>
+ <string name="spoken_emoji_1F4D9" msgid="3874664073186440225">"Livro laranja"</string>
+ <string name="spoken_emoji_1F4DA" msgid="872212072924287762">"Livros"</string>
+ <string name="spoken_emoji_1F4DB" msgid="2015183603583392969">"Crachá"</string>
+ <string name="spoken_emoji_1F4DC" msgid="5075845110932456783">"Pergaminho"</string>
+ <string name="spoken_emoji_1F4DD" msgid="2494006707147586786">"Memorando"</string>
+ <string name="spoken_emoji_1F4DE" msgid="7883008605002117671">"Telefone"</string>
+ <string name="spoken_emoji_1F4DF" msgid="3538610110623780465">"Pager"</string>
+ <string name="spoken_emoji_1F4E0" msgid="2960778342609543077">"Aparelho de fax"</string>
+ <string name="spoken_emoji_1F4E1" msgid="6269733703719242108">"Antena de satélite"</string>
+ <string name="spoken_emoji_1F4E2" msgid="1987535386302883116">"Alto-falante para discursos públicos"</string>
+ <string name="spoken_emoji_1F4E3" msgid="5588916572878599224">"Megafone em uso"</string>
+ <string name="spoken_emoji_1F4E4" msgid="2063561529097749707">"Bandeja da caixa de saída"</string>
+ <string name="spoken_emoji_1F4E5" msgid="3232462702926143576">"Bandeja da caixa de entrada"</string>
+ <string name="spoken_emoji_1F4E6" msgid="3399454337197561635">"Pacote"</string>
+ <string name="spoken_emoji_1F4E7" msgid="5557136988503873238">"Símbolo de e-mail"</string>
+ <string name="spoken_emoji_1F4E8" msgid="30698793974124123">"Envelope recebido"</string>
+ <string name="spoken_emoji_1F4E9" msgid="5947550337678643166">"Envelope com seta para baixo"</string>
+ <string name="spoken_emoji_1F4EA" msgid="772614045207213751">"Caixa de correio fechada com bandeira abaixada"</string>
+ <string name="spoken_emoji_1F4EB" msgid="6491414165464146137">"Caixa de correio fechada com bandeira levantada"</string>
+ <string name="spoken_emoji_1F4EC" msgid="7369517138779988438">"Caixa de correio aberta com bandeira levantada"</string>
+ <string name="spoken_emoji_1F4ED" msgid="5657520436285454241">"Caixa de correio aberta com bandeira abaixada"</string>
+ <string name="spoken_emoji_1F4EE" msgid="8464138906243608614">"Caixa de correio"</string>
+ <string name="spoken_emoji_1F4EF" msgid="8801427577198798226">"Corneta de correio"</string>
+ <string name="spoken_emoji_1F4F0" msgid="6330208624731662525">"Jornal"</string>
+ <string name="spoken_emoji_1F4F1" msgid="3966503935581675695">"Celular"</string>
+ <string name="spoken_emoji_1F4F2" msgid="1057540341746100087">"Celular com seta para a direita"</string>
+ <string name="spoken_emoji_1F4F3" msgid="5003984447315754658">"Modo de vibração"</string>
+ <string name="spoken_emoji_1F4F4" msgid="5549847566968306253">"Celular desligado"</string>
+ <string name="spoken_emoji_1F4F5" msgid="3660199448671699238">"Proibido usar celular"</string>
+ <string name="spoken_emoji_1F4F6" msgid="2676974903233268860">"Antena com barras"</string>
+ <string name="spoken_emoji_1F4F7" msgid="2643891943105989039">"Câmera"</string>
+ <string name="spoken_emoji_1F4F9" msgid="4475626303058218048">"Filmadora"</string>
+ <string name="spoken_emoji_1F4FA" msgid="1079796186652960775">"Televisão"</string>
+ <string name="spoken_emoji_1F4FB" msgid="3848729587403760645">"Rádio"</string>
+ <string name="spoken_emoji_1F4FC" msgid="8370432508874310054">"Videocassete"</string>
+ <string name="spoken_emoji_1F500" msgid="2389947994502144547">"Setas entrelaçadas para a direita"</string>
+ <string name="spoken_emoji_1F501" msgid="2132188352433347009">"Setas para a esquerda e para a direita em sentido horário"</string>
+ <string name="spoken_emoji_1F502" msgid="2361976580513178391">"Setas para a esquerda e para a direita em sentido horário com \"1\""</string>
+ <string name="spoken_emoji_1F503" msgid="8936283551917858793">"Setas para baixo e para cima em sentido horário"</string>
+ <string name="spoken_emoji_1F504" msgid="708290317843535943">"Setas para baixo e para cima em sentido anti-horário"</string>
+ <string name="spoken_emoji_1F505" msgid="6348909939004951860">"Símbolo de baixo brilho"</string>
+ <string name="spoken_emoji_1F506" msgid="4449609297521280173">"Símbolo de alto brilho"</string>
+ <string name="spoken_emoji_1F507" msgid="7136386694923708448">"Alto-falante cortado"</string>
+ <string name="spoken_emoji_1F508" msgid="5063567689831527865">"Alto-falante"</string>
+ <string name="spoken_emoji_1F509" msgid="3948050077992370791">"Alto-falante com onda sonora"</string>
+ <string name="spoken_emoji_1F50A" msgid="5818194948677277197">"Alto-falante com três ondas sonoras"</string>
+ <string name="spoken_emoji_1F50B" msgid="8083470451266295876">"Bateria"</string>
+ <string name="spoken_emoji_1F50C" msgid="7793219132036431680">"Tomada elétrica"</string>
+ <string name="spoken_emoji_1F50D" msgid="8140244710637926780">"Lente de aumento virada para a esquerda"</string>
+ <string name="spoken_emoji_1F50E" msgid="4751821352839693365">"Lente de aumento virada para a direita"</string>
+ <string name="spoken_emoji_1F50F" msgid="915079280472199605">"Cadeado com caneta-tinteiro"</string>
+ <string name="spoken_emoji_1F510" msgid="7658381761691758318">"Cadeado fechado com chave"</string>
+ <string name="spoken_emoji_1F511" msgid="262319867774655688">"Chave"</string>
+ <string name="spoken_emoji_1F512" msgid="5628688337255115175">"Cadeado"</string>
+ <string name="spoken_emoji_1F513" msgid="8579201846619420981">"Cadeado aberto"</string>
+ <string name="spoken_emoji_1F514" msgid="7027268683047322521">"Sino"</string>
+ <string name="spoken_emoji_1F515" msgid="8903179856036069242">"Sino cortado"</string>
+ <string name="spoken_emoji_1F516" msgid="108097933937925381">"Marca-página"</string>
+ <string name="spoken_emoji_1F517" msgid="2450846665734313397">"Símbolo de link"</string>
+ <string name="spoken_emoji_1F518" msgid="7028220286841437832">"Botão de opção"</string>
+ <string name="spoken_emoji_1F519" msgid="8211189165075445687">"\"Back\" com seta para a esquerda"</string>
+ <string name="spoken_emoji_1F51A" msgid="823966751787338892">"\"End\" com seta para a esquerda"</string>
+ <string name="spoken_emoji_1F51B" msgid="5920570742107943382">"\"On!\" com seta para a esquerda e para a direita"</string>
+ <string name="spoken_emoji_1F51C" msgid="110609810659826676">"\"Soon\" com seta para a direita"</string>
+ <string name="spoken_emoji_1F51D" msgid="4087697222026095447">"\"Top\" com seta para cima"</string>
+ <string name="spoken_emoji_1F51E" msgid="8512873526157201775">"Símbolo de proibido para menores de 18"</string>
+ <string name="spoken_emoji_1F51F" msgid="8673370823728653973">"Tecla do dez"</string>
+ <string name="spoken_emoji_1F520" msgid="7335109890337048900">"Símbolo de entrada de letras latinas maiúsculas"</string>
+ <string name="spoken_emoji_1F521" msgid="2693185864450925778">"Símbolo de entrada de letras latinas minúsculas"</string>
+ <string name="spoken_emoji_1F522" msgid="8419130286280673347">"Símbolo de entrada de números"</string>
+ <string name="spoken_emoji_1F523" msgid="3318053476401719421">"Símbolo de entrada de símbolos"</string>
+ <string name="spoken_emoji_1F524" msgid="1625073997522316331">"Símbolo de entrada de letras latinas"</string>
+ <string name="spoken_emoji_1F525" msgid="4083884189172963790">"Fogo"</string>
+ <string name="spoken_emoji_1F526" msgid="2035494936742643580">"Tocha elétrica"</string>
+ <string name="spoken_emoji_1F527" msgid="134257142354034271">"Chave inglesa"</string>
+ <string name="spoken_emoji_1F528" msgid="700627429570609375">"Martelo"</string>
+ <string name="spoken_emoji_1F529" msgid="7480548235904988573">"Porca e parafuso"</string>
+ <string name="spoken_emoji_1F52A" msgid="7613580031502317893">"Facão"</string>
+ <string name="spoken_emoji_1F52B" msgid="4554906608328118613">"Pistola"</string>
+ <string name="spoken_emoji_1F52C" msgid="1330294501371770790">"Microscópio"</string>
+ <string name="spoken_emoji_1F52D" msgid="7549551775445177140">"Telescópio"</string>
+ <string name="spoken_emoji_1F52E" msgid="4457099417872625141">"Bola de cristal"</string>
+ <string name="spoken_emoji_1F52F" msgid="8899031001317442792">"Estrela de seis pontas com ponto central"</string>
+ <string name="spoken_emoji_1F530" msgid="3572898444281774023">"Símbolo japonês para iniciante"</string>
+ <string name="spoken_emoji_1F531" msgid="5225633376450025396">"Emblema de tridente"</string>
+ <string name="spoken_emoji_1F532" msgid="9169568490485180779">"Botão quadrado preto"</string>
+ <string name="spoken_emoji_1F533" msgid="6554193837201918598">"Botão quadrado branco"</string>
+ <string name="spoken_emoji_1F534" msgid="8339298801331865340">"Círculo grande vermelho"</string>
+ <string name="spoken_emoji_1F535" msgid="1227403104835533512">"Círculo grande azul"</string>
+ <string name="spoken_emoji_1F536" msgid="5477372445510469331">"Losango grande laranja"</string>
+ <string name="spoken_emoji_1F537" msgid="3158915214347274626">"Losango grande azul"</string>
+ <string name="spoken_emoji_1F538" msgid="4300084249474451991">"Losango pequeno laranja"</string>
+ <string name="spoken_emoji_1F539" msgid="6535159756325742275">"Losango pequeno azul"</string>
+ <string name="spoken_emoji_1F53A" msgid="3728196273988781389">"Triângulo vermelho apontando para cima"</string>
+ <string name="spoken_emoji_1F53B" msgid="7182097039614128707">"Triângulo vermelho apontando para baixo"</string>
+ <string name="spoken_emoji_1F53C" msgid="4077022046319615029">"Triângulo pequeno vermelho apontando para cima"</string>
+ <string name="spoken_emoji_1F53D" msgid="3939112784894620713">"Triângulo pequeno vermelho apontando para baixo"</string>
+ <string name="spoken_emoji_1F550" msgid="7761392621689986218">"Relógio mostrando 01h00"</string>
+ <string name="spoken_emoji_1F551" msgid="2699448504113431716">"Relógio mostrando 02h00"</string>
+ <string name="spoken_emoji_1F552" msgid="5872107867411853750">"Relógio mostrando 03h00"</string>
+ <string name="spoken_emoji_1F553" msgid="8490966286158640743">"Relógio mostrando 04h00"</string>
+ <string name="spoken_emoji_1F554" msgid="7662585417832909280">"Relógio mostrando 05h00"</string>
+ <string name="spoken_emoji_1F555" msgid="5564698204520412009">"Relógio mostrando 06h00"</string>
+ <string name="spoken_emoji_1F556" msgid="7325712194836512205">"Relógio mostrando 07h00"</string>
+ <string name="spoken_emoji_1F557" msgid="4398343183682848693">"Relógio mostrando 08h00"</string>
+ <string name="spoken_emoji_1F558" msgid="3110507820404018172">"Relógio mostrando 09h00"</string>
+ <string name="spoken_emoji_1F559" msgid="2972160366448337839">"Relógio mostrando 10h00"</string>
+ <string name="spoken_emoji_1F55A" msgid="5568112876681714834">"Relógio mostrando 11h00"</string>
+ <string name="spoken_emoji_1F55B" msgid="6731739890330659276">"Relógio mostrando 12h00"</string>
+ <string name="spoken_emoji_1F55C" msgid="7838853679879115890">"Relógio mostrando 01h30"</string>
+ <string name="spoken_emoji_1F55D" msgid="3518832144255922544">"Relógio mostrando 02h30"</string>
+ <string name="spoken_emoji_1F55E" msgid="3092760695634993002">"Relógio mostrando 03h30"</string>
+ <string name="spoken_emoji_1F55F" msgid="2326720311892906763">"Relógio mostrando 04h30"</string>
+ <string name="spoken_emoji_1F560" msgid="5771339179963924448">"Relógio mostrando 05h30"</string>
+ <string name="spoken_emoji_1F561" msgid="3139944777062475382">"Relógio mostrando 06h30"</string>
+ <string name="spoken_emoji_1F562" msgid="8273944611162457084">"Relógio mostrando 07h30"</string>
+ <string name="spoken_emoji_1F563" msgid="8643976903718136299">"Relógio mostrando 08h30"</string>
+ <string name="spoken_emoji_1F564" msgid="3511070239796141638">"Relógio mostrando 09h30"</string>
+ <string name="spoken_emoji_1F565" msgid="4567451985272963088">"Relógio mostrando 10h30"</string>
+ <string name="spoken_emoji_1F566" msgid="2790552288169929810">"Relógio mostrando 11h30"</string>
+ <string name="spoken_emoji_1F567" msgid="9026037362100689337">"Relógio mostrando 12h30"</string>
+ <string name="spoken_emoji_1F5FB" msgid="9037503671676124015">"Monte Fuji"</string>
+ <string name="spoken_emoji_1F5FC" msgid="1409415995817242150">"Torre de Tóquio"</string>
+ <string name="spoken_emoji_1F5FD" msgid="2562726956654429582">"Estátua da Liberdade"</string>
+ <string name="spoken_emoji_1F5FE" msgid="1184469756905210580">"Silhueta do Japão"</string>
+ <string name="spoken_emoji_1F5FF" msgid="6003594799354942297">"Moai"</string>
+ <string name="spoken_emoji_1F600" msgid="7601109464776835283">"Rosto mostrando os dentes"</string>
+ <string name="spoken_emoji_1F601" msgid="746026523967444503">"Rosto mostrando os dentes com olhos sorridentes"</string>
+ <string name="spoken_emoji_1F602" msgid="8354558091785198246">"Rosto com lágrimas de alegria"</string>
+ <string name="spoken_emoji_1F603" msgid="3861022912544159823">"Rosto sorridente com boca aberta"</string>
+ <string name="spoken_emoji_1F604" msgid="5119021072966343531">"Rosto sorridente com boca aberta e olhos sorridentes"</string>
+ <string name="spoken_emoji_1F605" msgid="6140813923973561735">"Rosto sorridente com boca aberta e suando frio"</string>
+ <string name="spoken_emoji_1F606" msgid="3549936813966832799">"Rosto sorridente com boca aberta e olhos bem fechados"</string>
+ <string name="spoken_emoji_1F607" msgid="2826424078212384817">"Rosto sorridente com auréola"</string>
+ <string name="spoken_emoji_1F608" msgid="7343559595089811640">"Rosto sorridente com chifres"</string>
+ <string name="spoken_emoji_1F609" msgid="5481030187207504405">"Rosto com olho piscando"</string>
+ <string name="spoken_emoji_1F60A" msgid="5023337769148679767">"Rosto sorridente com olhos sorridentes"</string>
+ <string name="spoken_emoji_1F60B" msgid="3005248217216195694">"Rosto saboreando comida deliciosa"</string>
+ <string name="spoken_emoji_1F60C" msgid="349384012958268496">"Rosto aliviado"</string>
+ <string name="spoken_emoji_1F60D" msgid="7921853137164938391">"Rosto sorridente com olhos de coração"</string>
+ <string name="spoken_emoji_1F60E" msgid="441718886380605643">"Rosto sorridente com óculos de sol"</string>
+ <string name="spoken_emoji_1F60F" msgid="2674453144890180538">"Rosto com meio sorriso"</string>
+ <string name="spoken_emoji_1F610" msgid="3225675825334102369">"Rosto neutro"</string>
+ <string name="spoken_emoji_1F611" msgid="7199179827619679668">"Rosto sem expressão"</string>
+ <string name="spoken_emoji_1F612" msgid="985081329745137998">"Rosto de desinteressado"</string>
+ <string name="spoken_emoji_1F613" msgid="5548607684830303562">"Rosto suando frio"</string>
+ <string name="spoken_emoji_1F614" msgid="3196305665259916390">"Rosto pensativo"</string>
+ <string name="spoken_emoji_1F615" msgid="3051674239303969101">"Rosto confuso"</string>
+ <string name="spoken_emoji_1F616" msgid="8124887056243813089">"Rosto desconcertado"</string>
+ <string name="spoken_emoji_1F617" msgid="7052733625511122870">"Rosto beijando"</string>
+ <string name="spoken_emoji_1F618" msgid="408207170572303753">"Rosto jogando beijo"</string>
+ <string name="spoken_emoji_1F619" msgid="8645430335143153645">"Rosto beijando com olhos sorridentes"</string>
+ <string name="spoken_emoji_1F61A" msgid="2882157190974340247">"Rosto beijando com olhos fechados"</string>
+ <string name="spoken_emoji_1F61B" msgid="3765927202787211499">"Rosto com língua de fora"</string>
+ <string name="spoken_emoji_1F61C" msgid="198943912107589389">"Rosto com língua de fora e piscando"</string>
+ <string name="spoken_emoji_1F61D" msgid="7643546385877816182">"Rosto com língua de fora e olhos bem fechados"</string>
+ <string name="spoken_emoji_1F61E" msgid="1528732952202098364">"Rosto de frustrado"</string>
+ <string name="spoken_emoji_1F61F" msgid="1853664164636082404">"Rosto preocupado"</string>
+ <string name="spoken_emoji_1F620" msgid="6051942001307375830">"Rosto nervoso"</string>
+ <string name="spoken_emoji_1F621" msgid="2114711878097257704">"Rosto de desaprovação"</string>
+ <string name="spoken_emoji_1F622" msgid="29291014645931822">"Rosto chorando"</string>
+ <string name="spoken_emoji_1F623" msgid="7803959833595184773">"Rosto de perseverante"</string>
+ <string name="spoken_emoji_1F624" msgid="8637637647725752799">"Rosto com aparência de triunfo"</string>
+ <string name="spoken_emoji_1F625" msgid="6153625183493635030">"Rosto com misto de decepção e alívio"</string>
+ <string name="spoken_emoji_1F626" msgid="6179485689935562950">"Rosto franzido com boca aberta"</string>
+ <string name="spoken_emoji_1F627" msgid="8566204052903012809">"Rosto angustiado"</string>
+ <string name="spoken_emoji_1F628" msgid="8875777401624904224">"Rosto temeroso"</string>
+ <string name="spoken_emoji_1F629" msgid="1411538490319190118">"Rosto fatigado"</string>
+ <string name="spoken_emoji_1F62A" msgid="4726686726690289969">"Rosto sonolento"</string>
+ <string name="spoken_emoji_1F62B" msgid="3221980473921623613">"Rosto cansado"</string>
+ <string name="spoken_emoji_1F62C" msgid="4616356691941225182">"Rosto mostrando os dentes"</string>
+ <string name="spoken_emoji_1F62D" msgid="4283677508698812232">"Rosto chorando alto"</string>
+ <string name="spoken_emoji_1F62E" msgid="726083405284353894">"Rosto com boca aberta"</string>
+ <string name="spoken_emoji_1F62F" msgid="7746620088234710962">"Rosto silenciado"</string>
+ <string name="spoken_emoji_1F630" msgid="3298804852155581163">"Rosto com boca aberta e suando frio"</string>
+ <string name="spoken_emoji_1F631" msgid="1603391150954646779">"Rosto gritando de medo"</string>
+ <string name="spoken_emoji_1F632" msgid="4846193232203976013">"Rosto surpreso"</string>
+ <string name="spoken_emoji_1F633" msgid="4023593836629700443">"Rosto enrubescido"</string>
+ <string name="spoken_emoji_1F634" msgid="3155265083246248129">"Rosto dormindo"</string>
+ <string name="spoken_emoji_1F635" msgid="4616691133452764482">"Rosto tonto"</string>
+ <string name="spoken_emoji_1F636" msgid="947000211822375683">"Rosto sem boca"</string>
+ <string name="spoken_emoji_1F637" msgid="1269551267347165774">"Rosto com máscara hospitalar"</string>
+ <string name="spoken_emoji_1F638" msgid="3410766467496872301">"Smiley de gato feliz com olhos sorridentes"</string>
+ <string name="spoken_emoji_1F639" msgid="1833417519781022031">"Smiley de gato com lágrimas de alegria"</string>
+ <string name="spoken_emoji_1F63A" msgid="8566294484007152613">"Smiley de gato sorridente com boca aberta"</string>
+ <string name="spoken_emoji_1F63B" msgid="74417995938927571">"Smiley de gato sorridente com olhos de coração"</string>
+ <string name="spoken_emoji_1F63C" msgid="6472812005729468870">"Smiley de gato com sorriso maroto"</string>
+ <string name="spoken_emoji_1F63D" msgid="1638398369553349509">"Smiley de gato beijando com olhos fechados"</string>
+ <string name="spoken_emoji_1F63E" msgid="6788969063020278986">"Smiley de gato de desaprovação"</string>
+ <string name="spoken_emoji_1F63F" msgid="1207234562459550185">"Smiley de gato chorando"</string>
+ <string name="spoken_emoji_1F640" msgid="6023054549904329638">"Smiley de gato fatigado"</string>
+ <string name="spoken_emoji_1F645" msgid="5202090629227587076">"Smiley com gesto de reprovação"</string>
+ <string name="spoken_emoji_1F646" msgid="6734425134415138134">"Smiley com gesto de ok"</string>
+ <string name="spoken_emoji_1F647" msgid="1090285518444205483">"Pessoa curvando-se bastante"</string>
+ <string name="spoken_emoji_1F648" msgid="8978535230610522356">"Macaco cego"</string>
+ <string name="spoken_emoji_1F649" msgid="8486145279809495102">"Macaco surdo"</string>
+ <string name="spoken_emoji_1F64A" msgid="1237524974033228660">"Macaco mudo"</string>
+ <string name="spoken_emoji_1F64B" msgid="4251150782016370475">"Pessoa feliz levantando uma mão"</string>
+ <string name="spoken_emoji_1F64C" msgid="5446231430684558344">"Pessoa levantando as mãos em comemoração"</string>
+ <string name="spoken_emoji_1F64D" msgid="4646485595309482342">"Pessoa franzindo a testa"</string>
+ <string name="spoken_emoji_1F64E" msgid="3376579939836656097">"Pessoa com rosto de desaprovação"</string>
+ <string name="spoken_emoji_1F64F" msgid="1044439574356230711">"Pessoa com mãos unidas em oração"</string>
+ <string name="spoken_emoji_1F680" msgid="513263736012689059">"Foguete"</string>
+ <string name="spoken_emoji_1F681" msgid="9201341783850525339">"Helicóptero"</string>
+ <string name="spoken_emoji_1F682" msgid="8046933583867498698">"Locomotiva a vapor"</string>
+ <string name="spoken_emoji_1F683" msgid="8772750354339223092">"Vagão"</string>
+ <string name="spoken_emoji_1F684" msgid="346396777356203608">"Trem de alta velocidade"</string>
+ <string name="spoken_emoji_1F685" msgid="1237059817190832730">"Trem-bala de alta velocidade"</string>
+ <string name="spoken_emoji_1F686" msgid="3525197227223620343">"Trem"</string>
+ <string name="spoken_emoji_1F687" msgid="5110143437960392837">"Metrô"</string>
+ <string name="spoken_emoji_1F688" msgid="4702085029871797965">"Metrô leve"</string>
+ <string name="spoken_emoji_1F689" msgid="2375851019798817094">"Estação"</string>
+ <string name="spoken_emoji_1F68A" msgid="6368370859718717198">"Bonde"</string>
+ <string name="spoken_emoji_1F68B" msgid="2920160427117436633">"Elétrico"</string>
+ <string name="spoken_emoji_1F68C" msgid="1061520934758810864">"Ônibus"</string>
+ <string name="spoken_emoji_1F68D" msgid="2890059031360969304">"Ônibus de frente"</string>
+ <string name="spoken_emoji_1F68E" msgid="6234042976027309654">"Trólebus"</string>
+ <string name="spoken_emoji_1F68F" msgid="5871099334672012107">"Ponto de ônibus"</string>
+ <string name="spoken_emoji_1F690" msgid="8080964620200195262">"Micro-ônibus"</string>
+ <string name="spoken_emoji_1F691" msgid="999173032408730501">"Ambulância"</string>
+ <string name="spoken_emoji_1F692" msgid="1712863785341849487">"Caminhão de bombeiros"</string>
+ <string name="spoken_emoji_1F693" msgid="7987109037389768934">"Viatura policial"</string>
+ <string name="spoken_emoji_1F694" msgid="6061658916653884608">"Viatura policial de frente"</string>
+ <string name="spoken_emoji_1F695" msgid="6913445460364247283">"Táxi"</string>
+ <string name="spoken_emoji_1F696" msgid="6391604457418285404">"Táxi de frente"</string>
+ <string name="spoken_emoji_1F697" msgid="7978399334396733790">"Automóvel"</string>
+ <string name="spoken_emoji_1F698" msgid="7006050861129732018">"Automóvel de frente"</string>
+ <string name="spoken_emoji_1F699" msgid="630317052666590607">"Veículo recreativo"</string>
+ <string name="spoken_emoji_1F69A" msgid="4739797891735823577">"Caminhão de entrega"</string>
+ <string name="spoken_emoji_1F69B" msgid="4715997280786620649">"Caminhão articulado"</string>
+ <string name="spoken_emoji_1F69C" msgid="5557395610750818161">"Trator"</string>
+ <string name="spoken_emoji_1F69D" msgid="5467164189942951047">"Monotrilho"</string>
+ <string name="spoken_emoji_1F69E" msgid="169238196389832234">"Trem de montanha"</string>
+ <string name="spoken_emoji_1F69F" msgid="7508128757012845102">"Trem suspenso"</string>
+ <string name="spoken_emoji_1F6A0" msgid="8733056213790160147">"Bondinho"</string>
+ <string name="spoken_emoji_1F6A1" msgid="4666516337749347253">"Teleférico"</string>
+ <string name="spoken_emoji_1F6A2" msgid="4511220588943129583">"Navio"</string>
+ <string name="spoken_emoji_1F6A3" msgid="8412962252222205387">"Barco a remo"</string>
+ <string name="spoken_emoji_1F6A4" msgid="8867571300266339211">"Lancha"</string>
+ <string name="spoken_emoji_1F6A5" msgid="7650260812741963884">"Semáforo horizontal"</string>
+ <string name="spoken_emoji_1F6A6" msgid="485575967773793454">"Semáforo vertical"</string>
+ <string name="spoken_emoji_1F6A7" msgid="6411048933816976794">"Sinal de construção"</string>
+ <string name="spoken_emoji_1F6A8" msgid="6345717218374788364">"Giroflex de viaturas policiais"</string>
+ <string name="spoken_emoji_1F6A9" msgid="6586380356807600412">"Bandeira triangular em poste"</string>
+ <string name="spoken_emoji_1F6AA" msgid="8954448167261738885">"Porta"</string>
+ <string name="spoken_emoji_1F6AB" msgid="5313946262888343544">"Sinal de entrada proibida"</string>
+ <string name="spoken_emoji_1F6AC" msgid="6946858177965948288">"Símbolo de permitido fumar"</string>
+ <string name="spoken_emoji_1F6AD" msgid="6320088669185507241">"Símbolo de proibido fumar"</string>
+ <string name="spoken_emoji_1F6AE" msgid="1062469925352817189">"Símbolo de \"jogue o lixo no lixo\""</string>
+ <string name="spoken_emoji_1F6AF" msgid="2286668056123642208">"Símbolo de proibido jogar lixo"</string>
+ <string name="spoken_emoji_1F6B0" msgid="179424763882990952">"Símbolo de água potável"</string>
+ <string name="spoken_emoji_1F6B1" msgid="5585212805429161877">"Símbolo de água não potável"</string>
+ <string name="spoken_emoji_1F6B2" msgid="1771885082068421875">"Bicicleta"</string>
+ <string name="spoken_emoji_1F6B3" msgid="8033779581263314408">"Proibido bicicletas"</string>
+ <string name="spoken_emoji_1F6B4" msgid="1999538449018476947">"Ciclista"</string>
+ <string name="spoken_emoji_1F6B5" msgid="340846352660993117">"Ciclista de montanha"</string>
+ <string name="spoken_emoji_1F6B6" msgid="4351024386495098336">"Pedestre"</string>
+ <string name="spoken_emoji_1F6B7" msgid="4564800655866838802">"Proibido pedestres"</string>
+ <string name="spoken_emoji_1F6B8" msgid="3020531906940267349">"Travessia de crianças"</string>
+ <string name="spoken_emoji_1F6B9" msgid="1207095844125041251">"Símbolo masculino"</string>
+ <string name="spoken_emoji_1F6BA" msgid="2346879310071017531">"Símbolo feminino"</string>
+ <string name="spoken_emoji_1F6BB" msgid="2370172469642078526">"Banheiro"</string>
+ <string name="spoken_emoji_1F6BC" msgid="5558827593563530851">"Símbolo de bebê"</string>
+ <string name="spoken_emoji_1F6BD" msgid="9213590243049835957">"Vaso sanitário"</string>
+ <string name="spoken_emoji_1F6BE" msgid="394016533781742491">"WC"</string>
+ <string name="spoken_emoji_1F6BF" msgid="906336365928291207">"Chuveiro"</string>
+ <string name="spoken_emoji_1F6C0" msgid="4592099854378821599">"Banho"</string>
+ <string name="spoken_emoji_1F6C1" msgid="2845056048320031158">"Banheira"</string>
+ <string name="spoken_emoji_1F6C2" msgid="8117262514698011877">"Controle de passaportes"</string>
+ <string name="spoken_emoji_1F6C3" msgid="1176342001834630675">"Alfândega"</string>
+ <string name="spoken_emoji_1F6C4" msgid="1477622834179978886">"Esteira de bagagem"</string>
+ <string name="spoken_emoji_1F6C5" msgid="2495834050856617451">"Bagagem abandonada"</string>
+</resources>
diff --git a/java/res/values-pt/strings-talkback-descriptions.xml b/java/res/values-pt/strings-talkback-descriptions.xml
index b9a70f397..7ad42ad19 100644
--- a/java/res/values-pt/strings-talkback-descriptions.xml
+++ b/java/res/values-pt/strings-talkback-descriptions.xml
@@ -27,14 +27,10 @@
<string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g> realiza correção automática"</string>
<string name="spoken_description_unknown" msgid="2382510329910793539">"Código de tecla %d"</string>
<string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string>
- <!-- no translation found for spoken_description_symbols_shift (3483198879916435717) -->
- <skip />
- <!-- no translation found for spoken_description_shift_shifted (3122704922642232605) -->
- <skip />
- <!-- no translation found for spoken_description_symbols_shift_shifted (5179175466878186081) -->
- <skip />
- <!-- no translation found for spoken_description_caps_lock (1224851412185975036) -->
- <skip />
+ <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Mais símbolos"</string>
+ <string name="spoken_description_shift_shifted" msgid="3122704922642232605">"Shift"</string>
+ <string name="spoken_description_symbols_shift_shifted" msgid="5179175466878186081">"Símbolos"</string>
+ <string name="spoken_description_caps_lock" msgid="1224851412185975036">"Shift"</string>
<string name="spoken_description_delete" msgid="3878902286264983302">"Excluir"</string>
<string name="spoken_description_to_symbol" msgid="8244903740201126590">"Símbolos"</string>
<string name="spoken_description_to_alpha" msgid="4081215210530031950">"Letras"</string>
@@ -53,8 +49,7 @@
<string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"Shift ativado"</string>
<string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"Caps Lock ativado"</string>
<string name="spoken_description_mode_symbol" msgid="111186851131446691">"Modo de símbolos"</string>
- <!-- no translation found for spoken_description_mode_symbol_shift (4305607977537665389) -->
- <skip />
+ <string name="spoken_description_mode_symbol_shift" msgid="4305607977537665389">"Modo mais símbolos"</string>
<string name="spoken_description_mode_alpha" msgid="4676004119618778911">"Modo de letras"</string>
<string name="spoken_description_mode_phone" msgid="2061220553756692903">"Modo de telefone"</string>
<string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"Modo de símbolos do telefone"</string>
@@ -76,4 +71,12 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Lugares"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Símbolos"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Emoticons"</string>
+ <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+ <skip />
+ <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+ <skip />
</resources>
diff --git a/java/res/values-pt/strings.xml b/java/res/values-pt/strings.xml
index afee26d25..f19ce5ed4 100644
--- a/java/res/values-pt/strings.xml
+++ b/java/res/values-pt/strings.xml
@@ -21,7 +21,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_input_options" msgid="3909945612939668554">"Opções de entrada"</string>
- <string name="english_ime_research_log" msgid="8492602295696577851">"Pesq. comandos de reg."</string>
<string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Buscar nomes de contatos"</string>
<string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"O corretor ortográfico usa entradas de sua lista de contatos"</string>
<string name="vibrate_on_keypress" msgid="5258079494276955460">"Vibrar ao tocar a tecla"</string>
@@ -84,8 +83,6 @@
<string name="select_language" msgid="3693815588777926848">"Idiomas de entrada"</string>
<string name="hint_add_to_dictionary" msgid="573678656946085380">"Toque novamente para salvar"</string>
<string name="has_dictionary" msgid="6071847973466625007">"Dicionário disponível"</string>
- <string name="prefs_enable_log" msgid="6620424505072963557">"Ativar comentário do usuário"</string>
- <string name="prefs_description_log" msgid="7525225584555429211">"Ajude a melhorar este editor de método de entrada enviando automaticamente estatísticas de uso e relatórios de falhas."</string>
<string name="keyboard_layout" msgid="8451164783510487501">"Tema do teclado"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"inglês (Reino Unido)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"inglês (EUA)"</string>
@@ -118,7 +115,6 @@
<string name="enable" msgid="5031294444630523247">"Ativar"</string>
<string name="not_now" msgid="6172462888202790482">"Agora não"</string>
<string name="custom_input_style_already_exists" msgid="8008728952215449707">"O estilo de entrada já existe: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
- <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Modo de estudo de utilização"</string>
<string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Atraso ao pressionar teclas"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Duração da vibração ao tocar"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Volume ao tocar na tela"</string>
diff --git a/java/res/values-rm/strings.xml b/java/res/values-rm/strings.xml
index 2ea98cf53..526ec73bd 100644
--- a/java/res/values-rm/strings.xml
+++ b/java/res/values-rm/strings.xml
@@ -22,7 +22,6 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<!-- no translation found for english_ime_input_options (3909945612939668554) -->
<skip />
- <!-- no translation found for english_ime_research_log (8492602295696577851) -->
<skip />
<!-- no translation found for use_contacts_for_spellchecking_option_title (5374120998125353898) -->
<skip />
@@ -134,8 +133,6 @@
<!-- no translation found for hint_add_to_dictionary (573678656946085380) -->
<skip />
<string name="has_dictionary" msgid="6071847973466625007">"Dicziunari disponibel"</string>
- <string name="prefs_enable_log" msgid="6620424505072963557">"Activar il feedback da l\'utilisader"</string>
- <!-- no translation found for prefs_description_log (7525225584555429211) -->
<skip />
<!-- no translation found for keyboard_layout (8451164783510487501) -->
<skip />
@@ -191,7 +188,6 @@
<skip />
<!-- no translation found for custom_input_style_already_exists (8008728952215449707) -->
<skip />
- <!-- no translation found for prefs_usability_study_mode (1261130555134595254) -->
<skip />
<!-- no translation found for prefs_key_longpress_timeout_settings (6102240298932897873) -->
<skip />
diff --git a/java/res/values-ro/strings-action-keys.xml b/java/res/values-ro/strings-action-keys.xml
index 51aa82f9c..bee4b12ea 100644
--- a/java/res/values-ro/strings-action-keys.xml
+++ b/java/res/values-ro/strings-action-keys.xml
@@ -25,6 +25,8 @@
<string name="label_previous_key" msgid="1421141755779895275">"Înap."</string>
<string name="label_done_key" msgid="7564866296502630852">"Gata"</string>
<string name="label_send_key" msgid="482252074224462163">"Trim."</string>
+ <!-- no translation found for label_search_key (7965186050435796642) -->
+ <skip />
<string name="label_pause_key" msgid="2225922926459730642">"Pauză"</string>
<string name="label_wait_key" msgid="5891247853595466039">"Așt."</string>
</resources>
diff --git a/java/res/values-ro/strings-emoji-descriptions.xml b/java/res/values-ro/strings-emoji-descriptions.xml
new file mode 100644
index 000000000..a4a1a9527
--- /dev/null
+++ b/java/res/values-ro/strings-emoji-descriptions.xml
@@ -0,0 +1,846 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/*
+**
+** Copyright 2014, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="spoken_emoji_00A9" msgid="2859822817116803638">"Semnul Copyright"</string>
+ <string name="spoken_emoji_00AE" msgid="7708335454134589027">"Semnul Marcă înregistrată"</string>
+ <string name="spoken_emoji_203C" msgid="153340916701508663">"Semn de exclamare dublu"</string>
+ <string name="spoken_emoji_2049" msgid="4877256448299555371">"Semn de exclamare și întrebare"</string>
+ <string name="spoken_emoji_2122" msgid="9188440722954720429">"Semn marcă înregistrată"</string>
+ <string name="spoken_emoji_2139" msgid="9114342638917304327">"Sursă de informații"</string>
+ <string name="spoken_emoji_2194" msgid="8055202727034946680">"Săgeată stânga-dreapta"</string>
+ <string name="spoken_emoji_2195" msgid="8028122253301087407">"Săgeată sus-jos"</string>
+ <string name="spoken_emoji_2196" msgid="4019164898967854363">"Săgeată nord-vest"</string>
+ <string name="spoken_emoji_2197" msgid="4255723717709017801">"Săgeată nord-est"</string>
+ <string name="spoken_emoji_2198" msgid="1452063451313622090">"Săgeată sud-est"</string>
+ <string name="spoken_emoji_2199" msgid="6942722693368807849">"Săgeată sud-vest"</string>
+ <string name="spoken_emoji_21A9" msgid="5204750172335111188">"Săgeată încovoiată spre stânga"</string>
+ <string name="spoken_emoji_21AA" msgid="3950259884359247006">"Săgeată încovoiată spre dreapta"</string>
+ <string name="spoken_emoji_231A" msgid="6751448803233874993">"Ceas de mână"</string>
+ <string name="spoken_emoji_231B" msgid="5956428809948426182">"Clepsidră"</string>
+ <string name="spoken_emoji_23E9" msgid="4022497733535162237">"Triunghi dublu, negru, orientat spre dreapta"</string>
+ <string name="spoken_emoji_23EA" msgid="2251396938087774944">"Triunghi dublu, negru, orientat spre stânga"</string>
+ <string name="spoken_emoji_23EB" msgid="3746885195641491865">"Triunghi dublu, negru, orientat în sus"</string>
+ <string name="spoken_emoji_23EC" msgid="7852372752901163416">"Triunghi dublu, negru, orientat în jos"</string>
+ <string name="spoken_emoji_23F0" msgid="8474219588750627870">"Ceas deşteptător"</string>
+ <string name="spoken_emoji_23F3" msgid="166900119581024371">"Clepsidră cu nisip"</string>
+ <string name="spoken_emoji_24C2" msgid="3948348737566038470">"Majuscula „M”, din alfabetul latin, încercuită"</string>
+ <string name="spoken_emoji_25AA" msgid="7865181015100227349">"Pătrat mic negru"</string>
+ <string name="spoken_emoji_25AB" msgid="6446532820937381457">"Pătrat mic alb"</string>
+ <string name="spoken_emoji_25B6" msgid="2423897708496040947">"Triunghi negru, orientat spre dreapta"</string>
+ <string name="spoken_emoji_25C0" msgid="3595083440074484934">"Triunghi negru, orientat spre stânga"</string>
+ <string name="spoken_emoji_25FB" msgid="4838691986881215419">"Pătrat mediu alb"</string>
+ <string name="spoken_emoji_25FC" msgid="7008859564991191050">"Pătrat negru mediu"</string>
+ <string name="spoken_emoji_25FD" msgid="7673439755069217479">"Pătrat alb, mijlociu spre mic"</string>
+ <string name="spoken_emoji_25FE" msgid="6782214109919768923">"Pătrat negru, mijlociu spre mic"</string>
+ <string name="spoken_emoji_2600" msgid="2272722634618990413">"Soare negru cu raze"</string>
+ <string name="spoken_emoji_2601" msgid="6205136889311537150">"Nor"</string>
+ <string name="spoken_emoji_260E" msgid="8670395193046424238">"Telefon negru"</string>
+ <string name="spoken_emoji_2611" msgid="4530550203347054611">"Casetă cu bifă"</string>
+ <string name="spoken_emoji_2614" msgid="1612791247861229500">"Umbrelă cu picături de ploaie"</string>
+ <string name="spoken_emoji_2615" msgid="3320562382424018588">"Băuturi calde"</string>
+ <string name="spoken_emoji_261D" msgid="4690554173549768467">"Deget arătător alb, orientat în sus"</string>
+ <string name="spoken_emoji_263A" msgid="3170094381521989300">"Față zâmbitoare albă"</string>
+ <string name="spoken_emoji_2648" msgid="4621241062667020673">"Berbec"</string>
+ <string name="spoken_emoji_2649" msgid="7694461245947059086">"Taur"</string>
+ <string name="spoken_emoji_264A" msgid="1258074605878705030">"Gemeni"</string>
+ <string name="spoken_emoji_264B" msgid="4409219914377810956">"Rac"</string>
+ <string name="spoken_emoji_264C" msgid="6520255367817054163">"Leu"</string>
+ <string name="spoken_emoji_264D" msgid="1504758945499854018">"Fecioară"</string>
+ <string name="spoken_emoji_264E" msgid="2354847104530633519">"Balanţă"</string>
+ <string name="spoken_emoji_264F" msgid="5822933280406416112">"Scorpion"</string>
+ <string name="spoken_emoji_2650" msgid="4832481156714796163">"Săgetător"</string>
+ <string name="spoken_emoji_2651" msgid="840953134601595090">"Capricorn"</string>
+ <string name="spoken_emoji_2652" msgid="3586925968718775281">"Vărsător"</string>
+ <string name="spoken_emoji_2653" msgid="8420547731496254492">"Peşti"</string>
+ <string name="spoken_emoji_2660" msgid="4541170554542412536">"Pică neagră"</string>
+ <string name="spoken_emoji_2663" msgid="3669352721942285724">"Treflă neagră"</string>
+ <string name="spoken_emoji_2665" msgid="6347941599683765843">"Inimă neagra"</string>
+ <string name="spoken_emoji_2666" msgid="8296769213401115999">"Romb negru"</string>
+ <string name="spoken_emoji_2668" msgid="7063148281053820386">"Izvoare termale"</string>
+ <string name="spoken_emoji_267B" msgid="21716857176812762">"Simbol negru, universal, de reciclare"</string>
+ <string name="spoken_emoji_267F" msgid="8833496533226475443">"Simbol pentru scaun cu rotile"</string>
+ <string name="spoken_emoji_2693" msgid="7443148847598433088">"Ancoră"</string>
+ <string name="spoken_emoji_26A0" msgid="6272635532992727510">"Semn de avertizare"</string>
+ <string name="spoken_emoji_26A1" msgid="5604749644693339145">"Semn de înaltă tensiune"</string>
+ <string name="spoken_emoji_26AA" msgid="8005748091690377153">"Cerc alb mediu"</string>
+ <string name="spoken_emoji_26AB" msgid="1655910278422753244">"Cerc negru mediu"</string>
+ <string name="spoken_emoji_26BD" msgid="1545218197938889737">"Minge de fotbal"</string>
+ <string name="spoken_emoji_26BE" msgid="8959760533076498209">"Minge de baseball"</string>
+ <string name="spoken_emoji_26C4" msgid="3045791757044255626">"Om de zăpadă fără zăpadă"</string>
+ <string name="spoken_emoji_26C5" msgid="5580129409712578639">"Soare în spatele unui nor"</string>
+ <string name="spoken_emoji_26CE" msgid="8963656417276062998">"Ophiuchus"</string>
+ <string name="spoken_emoji_26D4" msgid="2231451988209604130">"Intrarea interzisă"</string>
+ <string name="spoken_emoji_26EA" msgid="7513319636103804907">"Biserică"</string>
+ <string name="spoken_emoji_26F2" msgid="7134115206158891037">"Fântână"</string>
+ <string name="spoken_emoji_26F3" msgid="4912302210162075465">"Steag în gaură"</string>
+ <string name="spoken_emoji_26F5" msgid="4766328116769075217">"Barcă cu pânze"</string>
+ <string name="spoken_emoji_26FA" msgid="5888017494809199037">"Cort"</string>
+ <string name="spoken_emoji_26FD" msgid="2417060622927453534">"Pompă de combustibil"</string>
+ <string name="spoken_emoji_2702" msgid="4005741160717451912">"Foarfece negru"</string>
+ <string name="spoken_emoji_2705" msgid="164605766946697759">"Bifă albă îngroșată"</string>
+ <string name="spoken_emoji_2708" msgid="7153840886849268988">"Avion"</string>
+ <string name="spoken_emoji_2709" msgid="2217319160724311369">"Plic"</string>
+ <string name="spoken_emoji_270A" msgid="508347232762319473">"Pumn ridicat"</string>
+ <string name="spoken_emoji_270B" msgid="6640562128327753423">"Mână ridicată"</string>
+ <string name="spoken_emoji_270C" msgid="1344288035704944581">"Mână cu semnul victoriei"</string>
+ <string name="spoken_emoji_270F" msgid="6108251586067318718">"Creion"</string>
+ <string name="spoken_emoji_2712" msgid="6320544535087710482">"Peniță neagră"</string>
+ <string name="spoken_emoji_2714" msgid="1968242800064001654">"Bifă îngroșată"</string>
+ <string name="spoken_emoji_2716" msgid="511941294762977228">"Înmulțire complexă x"</string>
+ <string name="spoken_emoji_2728" msgid="5650330815808691881">"Scântei"</string>
+ <string name="spoken_emoji_2733" msgid="8915809595141157327">"Asterisc cu opt colțuri"</string>
+ <string name="spoken_emoji_2734" msgid="4846583547980754332">"Stea neagră, cu opt colțuri"</string>
+ <string name="spoken_emoji_2744" msgid="4350636647760161042">"Fulg de nea"</string>
+ <string name="spoken_emoji_2747" msgid="3718282973916474455">"Scânteie"</string>
+ <string name="spoken_emoji_274C" msgid="2752145886733295314">"Semn x"</string>
+ <string name="spoken_emoji_274E" msgid="4262918689871098338">"Semn x alb pe fond negru în pătrat"</string>
+ <string name="spoken_emoji_2753" msgid="6935897159942119808">"Semn de întrebare ornamental negru"</string>
+ <string name="spoken_emoji_2754" msgid="7277504915105532954">"Semn de întrebare ornamental alb"</string>
+ <string name="spoken_emoji_2755" msgid="6853076969826960210">"Semn de exclamare ornamental alb"</string>
+ <string name="spoken_emoji_2757" msgid="3707907828776912174">"Semn de exclamare îngroșat"</string>
+ <string name="spoken_emoji_2764" msgid="4214257843609432167">"Inimă neagră îngroșată"</string>
+ <string name="spoken_emoji_2795" msgid="6563954833786162168">"Semn plus îngroșat"</string>
+ <string name="spoken_emoji_2796" msgid="5990926508250772777">"Semn minus îngroșat"</string>
+ <string name="spoken_emoji_2797" msgid="24694184172879174">"Semn de împărțire îngroșat"</string>
+ <string name="spoken_emoji_27A1" msgid="3513434778263100580">"Săgeată neagră, spre dreapta"</string>
+ <string name="spoken_emoji_27B0" msgid="203395646864662198">"Buclă ondulată"</string>
+ <string name="spoken_emoji_27BF" msgid="4940514642375640510">"Buclă ondulată dublă"</string>
+ <string name="spoken_emoji_2934" msgid="9062130477982973457">"Săgeată orientată spre dreapta, apoi curbată în sus"</string>
+ <string name="spoken_emoji_2935" msgid="6198710960720232074">"Săgeată orientată spre dreapta, apoi curbată în jos"</string>
+ <string name="spoken_emoji_2B05" msgid="4813405635410707690">"Săgeată neagră orientată spre stânga"</string>
+ <string name="spoken_emoji_2B06" msgid="1223172079106250748">"Săgeată neagră orientată în sus"</string>
+ <string name="spoken_emoji_2B07" msgid="1599124424746596150">"Săgeată neagră orientată în jos"</string>
+ <string name="spoken_emoji_2B1B" msgid="3461247311988501626">"Pătrat negru mare"</string>
+ <string name="spoken_emoji_2B1C" msgid="5793146430145248915">"Pătrat alb mare"</string>
+ <string name="spoken_emoji_2B50" msgid="3850845519526950524">"Stea albă medie"</string>
+ <string name="spoken_emoji_2B55" msgid="9137882158811541824">"Cerc îngroșat, mare"</string>
+ <string name="spoken_emoji_3030" msgid="4609172241893565639">"Liniuță ondulată"</string>
+ <string name="spoken_emoji_303D" msgid="2545833934975907505">"Semn de modificare"</string>
+ <string name="spoken_emoji_3297" msgid="928912923628973800">"Ideogramă încercuită - felicitări"</string>
+ <string name="spoken_emoji_3299" msgid="3930347573693668426">"Ideogramă încercuită - secret"</string>
+ <string name="spoken_emoji_1F004" msgid="1705216181345894600">"Piesă Mahjong dragon roșu"</string>
+ <string name="spoken_emoji_1F0CF" msgid="7601493592085987866">"Carte de joc joker negru"</string>
+ <string name="spoken_emoji_1F170" msgid="3817698686602826773">"Grupa de sânge A"</string>
+ <string name="spoken_emoji_1F171" msgid="3684218589626650242">"Grupa de sânge B"</string>
+ <string name="spoken_emoji_1F17E" msgid="2978809190364779029">"Grupa de sânge O"</string>
+ <string name="spoken_emoji_1F17F" msgid="463634348668462040">"Parcare"</string>
+ <string name="spoken_emoji_1F18E" msgid="1650705325221496768">"Grupa de sânge AB"</string>
+ <string name="spoken_emoji_1F191" msgid="5386969264431429221">"„CL” în pătrat"</string>
+ <string name="spoken_emoji_1F192" msgid="8324226436829162496">"„COOL” în pătrat"</string>
+ <string name="spoken_emoji_1F193" msgid="4731758603321515364">"„FREE” în pătrat"</string>
+ <string name="spoken_emoji_1F194" msgid="4903128609556175887">"„ID” în pătrat"</string>
+ <string name="spoken_emoji_1F195" msgid="1433142500411060924">"„NEW” în pătrat"</string>
+ <string name="spoken_emoji_1F196" msgid="8825160701159634202">"„N G” în pătrat"</string>
+ <string name="spoken_emoji_1F197" msgid="7841079241554176535">"„OK” în pătrat"</string>
+ <string name="spoken_emoji_1F198" msgid="7020298909426960622">"„SOS” în pătrat"</string>
+ <string name="spoken_emoji_1F199" msgid="5971252667136235630">"„UP” cu semn de exclamare în pătrat"</string>
+ <string name="spoken_emoji_1F19A" msgid="4557270135899843959">"„VS” în pătrat"</string>
+ <string name="spoken_emoji_1F201" msgid="7000490044681139002">"„Katakana” în pătrat"</string>
+ <string name="spoken_emoji_1F202" msgid="8560906958695043947">"„Servicii Katakana” în pătrat"</string>
+ <string name="spoken_emoji_1F21A" msgid="1496435317324514033">"Caracter ideografic „Gratuit” în pătrat"</string>
+ <string name="spoken_emoji_1F22F" msgid="609797148862445402">"Caracter ideografic „Loc rezervat” în pătrat"</string>
+ <string name="spoken_emoji_1F232" msgid="8125716331632035820">"Caracter ideografic „Interzis” în pătrat"</string>
+ <string name="spoken_emoji_1F233" msgid="8749401090457355028">"Caracter ideografic „Loc liber” în pătrat"</string>
+ <string name="spoken_emoji_1F234" msgid="3546951604285970768">"Caracter ideografic „Aprobare” în pătrat"</string>
+ <string name="spoken_emoji_1F235" msgid="5320186982841793711">"Caracter ideografic „Nu sunt locuri libere” în pătrat"</string>
+ <string name="spoken_emoji_1F236" msgid="879755752069393034">"Caracter ideografic „Cu plată” în pătrat"</string>
+ <string name="spoken_emoji_1F237" msgid="6741807001205851437">"Caracter ideografic „Lunar” în pătrat"</string>
+ <string name="spoken_emoji_1F238" msgid="5504414186438196912">"Caracter ideografic „Înscriere” în pătrat"</string>
+ <string name="spoken_emoji_1F239" msgid="1634067311597618959">"Caracter ideografic „Reducere” în pătrat"</string>
+ <string name="spoken_emoji_1F23A" msgid="3107862957630169536">"Caracter ideografic „În activitate” în pătrat"</string>
+ <string name="spoken_emoji_1F250" msgid="6586943922806727907">"Caracter ideografic „Avantaj” în pătrat"</string>
+ <string name="spoken_emoji_1F251" msgid="9099032855993346948">"Caracter ideografic „Acord” în pătrat"</string>
+ <string name="spoken_emoji_1F300" msgid="4720098285295840383">"Ciclon"</string>
+ <string name="spoken_emoji_1F301" msgid="3601962477653752974">"Ceaţă"</string>
+ <string name="spoken_emoji_1F302" msgid="3404357123421753593">"Umbrelă închisă"</string>
+ <string name="spoken_emoji_1F303" msgid="3899301321538188206">"Noapte cu stele"</string>
+ <string name="spoken_emoji_1F304" msgid="2767148930689050040">"Răsărit peste munți"</string>
+ <string name="spoken_emoji_1F305" msgid="9165812924292061196">"Răsărit"</string>
+ <string name="spoken_emoji_1F306" msgid="5889294736109193104">"Peisaj urban la asfințit"</string>
+ <string name="spoken_emoji_1F307" msgid="2714290867291163713">"Apus de soare deasupra clădirilor"</string>
+ <string name="spoken_emoji_1F308" msgid="688704703985173377">"Curcubeu"</string>
+ <string name="spoken_emoji_1F309" msgid="6217981957992313528">"Pod noaptea"</string>
+ <string name="spoken_emoji_1F30A" msgid="4329309263152110893">"Val"</string>
+ <string name="spoken_emoji_1F30B" msgid="5729430693700923112">"Vulcan"</string>
+ <string name="spoken_emoji_1F30C" msgid="2961230863217543082">"Calea Lactee"</string>
+ <string name="spoken_emoji_1F30D" msgid="1113905673331547953">"Globul pământesc: Europa-Africa"</string>
+ <string name="spoken_emoji_1F30E" msgid="5278512600749223671">"Globul pământesc: continentul american"</string>
+ <string name="spoken_emoji_1F30F" msgid="5718144880978707493">"Globul pământesc: Asia-Australia"</string>
+ <string name="spoken_emoji_1F310" msgid="2959618582975247601">"Glob pământesc cu meridiane"</string>
+ <string name="spoken_emoji_1F311" msgid="623906380914895542">"Simbolul Lună nouă"</string>
+ <string name="spoken_emoji_1F312" msgid="4458575672576125401">"Simbolul Lună nouă"</string>
+ <string name="spoken_emoji_1F313" msgid="7599181787989497294">"Simbolul Primul pătrar"</string>
+ <string name="spoken_emoji_1F314" msgid="4898293184964365413">"Simbolul Înainte de lună plină"</string>
+ <string name="spoken_emoji_1F315" msgid="3218117051779496309">"Simbolul Lună plină"</string>
+ <string name="spoken_emoji_1F316" msgid="2061317145777689569">"Simbolul După lună plină"</string>
+ <string name="spoken_emoji_1F317" msgid="2721090687319539049">"Simbolul Ultimul pătrar"</string>
+ <string name="spoken_emoji_1F318" msgid="3814091755648887570">"Simbolul Înainte de lună nouă"</string>
+ <string name="spoken_emoji_1F319" msgid="4074299824890459465">"Semilună"</string>
+ <string name="spoken_emoji_1F31A" msgid="3092285278116977103">"Lună nouă, cu chip"</string>
+ <string name="spoken_emoji_1F31B" msgid="2658562138386927881">"Lună în primul pătrar, cu chip"</string>
+ <string name="spoken_emoji_1F31C" msgid="7914768515547867384">"Lună în ultimul pătrar, cu chip"</string>
+ <string name="spoken_emoji_1F31D" msgid="1925730459848297182">"Lună plină, cu chip"</string>
+ <string name="spoken_emoji_1F31E" msgid="8022112382524084418">"Soare cu chip"</string>
+ <string name="spoken_emoji_1F31F" msgid="1051661214137766369">"Stea strălucitoare"</string>
+ <string name="spoken_emoji_1F320" msgid="5450591979068216115">"Stea căzătoare"</string>
+ <string name="spoken_emoji_1F330" msgid="3115760035618051575">"Castană"</string>
+ <string name="spoken_emoji_1F331" msgid="5658888205290008691">"Puiet"</string>
+ <string name="spoken_emoji_1F332" msgid="2935650450421165938">"Copac veșnic verde"</string>
+ <string name="spoken_emoji_1F333" msgid="5898847427062482675">"Copac cu frunze căzătoare"</string>
+ <string name="spoken_emoji_1F334" msgid="6183375224678417894">"Palmier"</string>
+ <string name="spoken_emoji_1F335" msgid="5352418412103584941">"Cactus"</string>
+ <string name="spoken_emoji_1F337" msgid="3839107352363566289">"Lalea"</string>
+ <string name="spoken_emoji_1F338" msgid="6389970364260468490">"Floare de cireș"</string>
+ <string name="spoken_emoji_1F339" msgid="9128891447985256151">"Trandafir"</string>
+ <string name="spoken_emoji_1F33A" msgid="2025828400095233078">"Hibiscus"</string>
+ <string name="spoken_emoji_1F33B" msgid="8163868254348448552">"Floarea-soarelui"</string>
+ <string name="spoken_emoji_1F33C" msgid="6850371206262335812">"Floare"</string>
+ <string name="spoken_emoji_1F33D" msgid="9033484052864509610">"Spic de porumb"</string>
+ <string name="spoken_emoji_1F33E" msgid="2540173396638444120">"Spic de orez"</string>
+ <string name="spoken_emoji_1F33F" msgid="4384823344364908558">"Plantă"</string>
+ <string name="spoken_emoji_1F340" msgid="3494255459156499305">"Trifoi cu patru foi"</string>
+ <string name="spoken_emoji_1F341" msgid="4581959481754990158">"Frunză de arțar"</string>
+ <string name="spoken_emoji_1F342" msgid="3119068426871821222">"Frunză căzută"</string>
+ <string name="spoken_emoji_1F343" msgid="2663317495805149004">"Frunză în vânt"</string>
+ <string name="spoken_emoji_1F344" msgid="2738517881678722159">"Ciupercă"</string>
+ <string name="spoken_emoji_1F345" msgid="6135288642349085554">"Roșie"</string>
+ <string name="spoken_emoji_1F346" msgid="2075395322785406367">"Vânătă"</string>
+ <string name="spoken_emoji_1F347" msgid="7753453754963890571">"Struguri"</string>
+ <string name="spoken_emoji_1F348" msgid="1247076837284932788">"Pepene galben"</string>
+ <string name="spoken_emoji_1F349" msgid="5563054555180611086">"Pepene verde"</string>
+ <string name="spoken_emoji_1F34A" msgid="4688661208570160524">"Mandarină"</string>
+ <string name="spoken_emoji_1F34B" msgid="4335318423164185706">"Lămâie"</string>
+ <string name="spoken_emoji_1F34C" msgid="3712827239858159474">"Banană"</string>
+ <string name="spoken_emoji_1F34D" msgid="7712521967162622936">"Ananas"</string>
+ <string name="spoken_emoji_1F34E" msgid="1859466882598614228">"Măr roșu"</string>
+ <string name="spoken_emoji_1F34F" msgid="8251711032295005633">"Măr verde"</string>
+ <string name="spoken_emoji_1F350" msgid="625802980159197701">"Pară"</string>
+ <string name="spoken_emoji_1F351" msgid="4269460120610911895">"Piersic"</string>
+ <string name="spoken_emoji_1F352" msgid="965600953360182635">"Cireșe"</string>
+ <string name="spoken_emoji_1F353" msgid="7068623879906925592">"Căpșună"</string>
+ <string name="spoken_emoji_1F354" msgid="45162285238888494">"Hamburger"</string>
+ <string name="spoken_emoji_1F355" msgid="9157587635526433283">"Felie de pizza"</string>
+ <string name="spoken_emoji_1F356" msgid="2667196119149852244">"Carne pe os"</string>
+ <string name="spoken_emoji_1F357" msgid="8022817413851052256">"Picior de pasăre"</string>
+ <string name="spoken_emoji_1F358" msgid="3042693264748036476">"Biscuite de orez"</string>
+ <string name="spoken_emoji_1F359" msgid="3988148661730121958">"Chiftea de orez"</string>
+ <string name="spoken_emoji_1F35A" msgid="1763824172198327268">"Orez gătit"</string>
+ <string name="spoken_emoji_1F35B" msgid="62530406745717835">"Orez cu curry"</string>
+ <string name="spoken_emoji_1F35C" msgid="7537756539198945509">"Castron aburind"</string>
+ <string name="spoken_emoji_1F35D" msgid="8173523083861875196">"Spaghete"</string>
+ <string name="spoken_emoji_1F35E" msgid="2935428307894662571">"Pâine"</string>
+ <string name="spoken_emoji_1F35F" msgid="4840297386785728443">"Cartofi prăjiți"</string>
+ <string name="spoken_emoji_1F360" msgid="4094659855684686801">"Cartof dulce copt"</string>
+ <string name="spoken_emoji_1F361" msgid="6475486395784096109">"Dango"</string>
+ <string name="spoken_emoji_1F362" msgid="5004692577661076275">"Oden"</string>
+ <string name="spoken_emoji_1F363" msgid="1606603765717743806">"Sushi"</string>
+ <string name="spoken_emoji_1F364" msgid="6550457766169570811">"Creveți prăjiți"</string>
+ <string name="spoken_emoji_1F365" msgid="4963815540953316307">"Plăcintă de pește cu model ondulat"</string>
+ <string name="spoken_emoji_1F366" msgid="7862401745277049404">"Cornet de înghețată"</string>
+ <string name="spoken_emoji_1F367" msgid="7447972978281980414">"Fulgi de gheață"</string>
+ <string name="spoken_emoji_1F368" msgid="7790003146142724913">"Înghețată"</string>
+ <string name="spoken_emoji_1F369" msgid="7383712944084857350">"Gogoașă"</string>
+ <string name="spoken_emoji_1F36A" msgid="2726271795913042295">"Biscuit"</string>
+ <string name="spoken_emoji_1F36B" msgid="6342163604299875931">"Ciocolată"</string>
+ <string name="spoken_emoji_1F36C" msgid="2168934753998218790">"Bomboane"</string>
+ <string name="spoken_emoji_1F36D" msgid="3671507903799975792">"Acadea"</string>
+ <string name="spoken_emoji_1F36E" msgid="4630541402785165902">"Budincă"</string>
+ <string name="spoken_emoji_1F36F" msgid="5577915387425169439">"Oală de miere"</string>
+ <string name="spoken_emoji_1F370" msgid="7243244547866114951">"Prăjitură"</string>
+ <string name="spoken_emoji_1F371" msgid="6731527040552916358">"Cutie Bento"</string>
+ <string name="spoken_emoji_1F372" msgid="1635035323832181733">"Oală cu mâncare"</string>
+ <string name="spoken_emoji_1F373" msgid="7799289534289221045">"Gătit"</string>
+ <string name="spoken_emoji_1F374" msgid="5973820884987069131">"Furculiță și cuțit"</string>
+ <string name="spoken_emoji_1F375" msgid="1074832087699617700">"Ceașcă fără toartă"</string>
+ <string name="spoken_emoji_1F376" msgid="6499274685584852067">"Sticlă și ceașcă de sake"</string>
+ <string name="spoken_emoji_1F377" msgid="1762398562314172075">"Pahar de vin"</string>
+ <string name="spoken_emoji_1F378" msgid="5528234560590117516">"Pahar de cocktail"</string>
+ <string name="spoken_emoji_1F379" msgid="790581290787943325">"Băutură tropicală"</string>
+ <string name="spoken_emoji_1F37A" msgid="391966822450619516">"Halbă de bere"</string>
+ <string name="spoken_emoji_1F37B" msgid="9015043286465670662">"Halbe de bere ciocnindu-se"</string>
+ <string name="spoken_emoji_1F37C" msgid="2532113819464508894">"Biberon"</string>
+ <string name="spoken_emoji_1F380" msgid="3487363857092458827">"Panglică"</string>
+ <string name="spoken_emoji_1F381" msgid="614180683680675444">"Cadou ambalat"</string>
+ <string name="spoken_emoji_1F382" msgid="4720497171946687501">"Tort"</string>
+ <string name="spoken_emoji_1F383" msgid="3536505941578757623">"Felinar din dovleac"</string>
+ <string name="spoken_emoji_1F384" msgid="1797870204479059004">"Pom de Crăciun"</string>
+ <string name="spoken_emoji_1F385" msgid="1754174063483626367">"Moș Crăciun"</string>
+ <string name="spoken_emoji_1F386" msgid="2130445450758114746">"Focuri de artificii"</string>
+ <string name="spoken_emoji_1F387" msgid="3403182563117999933">"Artificiu"</string>
+ <string name="spoken_emoji_1F388" msgid="2903047203723251804">"Balon"</string>
+ <string name="spoken_emoji_1F389" msgid="2352830665883549388">"Tun de confetti"</string>
+ <string name="spoken_emoji_1F38A" msgid="6280428984773641322">"Minge de confetti"</string>
+ <string name="spoken_emoji_1F38B" msgid="4902225837479015489">"Copac Tanabata"</string>
+ <string name="spoken_emoji_1F38C" msgid="7623268024030989365">"Steaguri încrucișate"</string>
+ <string name="spoken_emoji_1F38D" msgid="8237542796124408528">"Decorațiune de Crăciun"</string>
+ <string name="spoken_emoji_1F38E" msgid="5373397476238212371">"Păpuși japoneze"</string>
+ <string name="spoken_emoji_1F38F" msgid="8754091376829552844">"Steaguri în formă de pește"</string>
+ <string name="spoken_emoji_1F390" msgid="8903307048095431374">"Clopoței de vânt"</string>
+ <string name="spoken_emoji_1F391" msgid="2134952069191911841">"Ceremonia contemplării lunii"</string>
+ <string name="spoken_emoji_1F392" msgid="6380405493914304737">"Ghiozdan"</string>
+ <string name="spoken_emoji_1F393" msgid="6947890064872470996">"Tocă de absolvire"</string>
+ <string name="spoken_emoji_1F3A0" msgid="3572095190082826057">"Cal de carusel"</string>
+ <string name="spoken_emoji_1F3A1" msgid="4300565511681058798">"Roata mare"</string>
+ <string name="spoken_emoji_1F3A2" msgid="15486093912232140">"Montaigne-russe"</string>
+ <string name="spoken_emoji_1F3A3" msgid="921739319504942924">"Undiță și pește"</string>
+ <string name="spoken_emoji_1F3A4" msgid="7497596355346856950">"Microfon"</string>
+ <string name="spoken_emoji_1F3A5" msgid="4290497821228183002">"Cameră video"</string>
+ <string name="spoken_emoji_1F3A6" msgid="26019057872319055">"Cinema"</string>
+ <string name="spoken_emoji_1F3A7" msgid="837856608794094105">"Căști"</string>
+ <string name="spoken_emoji_1F3A8" msgid="2332260356509244587">"Paletă de pictură"</string>
+ <string name="spoken_emoji_1F3A9" msgid="9045869366525115256">"Joben"</string>
+ <string name="spoken_emoji_1F3AA" msgid="5728760354237132">"Cort de circ"</string>
+ <string name="spoken_emoji_1F3AB" msgid="1657997517193216284">"Bilet"</string>
+ <string name="spoken_emoji_1F3AC" msgid="4317366554314492152">"Clachetă"</string>
+ <string name="spoken_emoji_1F3AD" msgid="607157286336130470">"Arta spectacolului"</string>
+ <string name="spoken_emoji_1F3AE" msgid="2902308174671548150">"Joc video"</string>
+ <string name="spoken_emoji_1F3AF" msgid="5420539221790296407">"Lovitură drept la țintă"</string>
+ <string name="spoken_emoji_1F3B0" msgid="7440244806527891956">"Jocuri mecanice"</string>
+ <string name="spoken_emoji_1F3B1" msgid="545544382391379234">"Biliard"</string>
+ <string name="spoken_emoji_1F3B2" msgid="8302262034774787493">"Zaruri"</string>
+ <string name="spoken_emoji_1F3B3" msgid="5180870610771027520">"Popice"</string>
+ <string name="spoken_emoji_1F3B4" msgid="4723852033266071564">"Cărți de joc cu flori"</string>
+ <string name="spoken_emoji_1F3B5" msgid="1998470239850548554">"Notă muzicală"</string>
+ <string name="spoken_emoji_1F3B6" msgid="3827730457113941705">"Mai multe note muzicale"</string>
+ <string name="spoken_emoji_1F3B7" msgid="5503403099445042180">"Saxofon"</string>
+ <string name="spoken_emoji_1F3B8" msgid="3985658156795011430">"Chitară"</string>
+ <string name="spoken_emoji_1F3B9" msgid="5596295757967881451">"Claviatură"</string>
+ <string name="spoken_emoji_1F3BA" msgid="4284064120340683558">"Trompetă"</string>
+ <string name="spoken_emoji_1F3BB" msgid="2856598510069988745">"Vioară"</string>
+ <string name="spoken_emoji_1F3BC" msgid="1608424748821446230">"Partitură"</string>
+ <string name="spoken_emoji_1F3BD" msgid="5490786111375627777">"Maieu de sport cu dungă"</string>
+ <string name="spoken_emoji_1F3BE" msgid="1851613105691627931">"Rachetă de tenis și minge"</string>
+ <string name="spoken_emoji_1F3BF" msgid="6862405997423247921">"Schi și gheată de schi"</string>
+ <string name="spoken_emoji_1F3C0" msgid="7421420756115104085">"Minge și inel de baschet"</string>
+ <string name="spoken_emoji_1F3C1" msgid="6926537251677319922">"Steag în carouri"</string>
+ <string name="spoken_emoji_1F3C2" msgid="5708596929237987082">"Practicant de snowboard"</string>
+ <string name="spoken_emoji_1F3C3" msgid="5850982999510115824">"Alergător"</string>
+ <string name="spoken_emoji_1F3C4" msgid="8468355585994639838">"Practicant de surf"</string>
+ <string name="spoken_emoji_1F3C6" msgid="9094474706847545409">"Trofeu"</string>
+ <string name="spoken_emoji_1F3C7" msgid="8172206200368370116">"Curse de cai"</string>
+ <string name="spoken_emoji_1F3C8" msgid="5619171461277597709">"Fotbal american"</string>
+ <string name="spoken_emoji_1F3C9" msgid="6371294008765871043">"Rugby"</string>
+ <string name="spoken_emoji_1F3CA" msgid="130977831787806932">"Înnotător"</string>
+ <string name="spoken_emoji_1F3E0" msgid="6277213201655811842">"Clădire"</string>
+ <string name="spoken_emoji_1F3E1" msgid="233476176077538885">"Casă cu grădină"</string>
+ <string name="spoken_emoji_1F3E2" msgid="919736380093964570">"Clădire de birouri"</string>
+ <string name="spoken_emoji_1F3E3" msgid="6177606081825094184">"Oficiu poștal japonez"</string>
+ <string name="spoken_emoji_1F3E4" msgid="717377871070970293">"Oficiu poștal european"</string>
+ <string name="spoken_emoji_1F3E5" msgid="1350532500431776780">"Spital"</string>
+ <string name="spoken_emoji_1F3E6" msgid="342132788513806214">"Bancă"</string>
+ <string name="spoken_emoji_1F3E7" msgid="6322352038284944265">"Bancomat"</string>
+ <string name="spoken_emoji_1F3E8" msgid="5864918444350599907">"Hotel"</string>
+ <string name="spoken_emoji_1F3E9" msgid="7830416185375326938">"Hoteluri pentru îndrăgostiți"</string>
+ <string name="spoken_emoji_1F3EA" msgid="5081084413084360479">"Alimentară"</string>
+ <string name="spoken_emoji_1F3EB" msgid="7010966528205150525">"Şcoală"</string>
+ <string name="spoken_emoji_1F3EC" msgid="4845978861878295154">"Magazin universal"</string>
+ <string name="spoken_emoji_1F3ED" msgid="3980316226665215370">"Fabrică"</string>
+ <string name="spoken_emoji_1F3EE" msgid="1253964276770550248">"Felinar Izakaya"</string>
+ <string name="spoken_emoji_1F3EF" msgid="1128975573507389883">"Castel japonez"</string>
+ <string name="spoken_emoji_1F3F0" msgid="1544632297502291578">"Castel european"</string>
+ <string name="spoken_emoji_1F400" msgid="2063034795679578294">"Șobolan"</string>
+ <string name="spoken_emoji_1F401" msgid="6736421616217369594">"Șoarece"</string>
+ <string name="spoken_emoji_1F402" msgid="7276670995895485604">"Bou"</string>
+ <string name="spoken_emoji_1F403" msgid="8045709541897118928">"Bivol de apă"</string>
+ <string name="spoken_emoji_1F404" msgid="5240777285676662335">"Vacă"</string>
+ <string name="spoken_emoji_1F406" msgid="5163461930159540018">"Leopard"</string>
+ <string name="spoken_emoji_1F407" msgid="6905370221172708160">"Iepure"</string>
+ <string name="spoken_emoji_1F408" msgid="1362164550508207284">"Pisică"</string>
+ <string name="spoken_emoji_1F409" msgid="8476130983168866013">"Dragon"</string>
+ <string name="spoken_emoji_1F40A" msgid="1149626786411545043">"Crocodil"</string>
+ <string name="spoken_emoji_1F40B" msgid="5199104921208397643">"Balenă"</string>
+ <string name="spoken_emoji_1F40C" msgid="2704006052881702675">"Melc"</string>
+ <string name="spoken_emoji_1F40D" msgid="8648186663643157522">"Șarpe"</string>
+ <string name="spoken_emoji_1F40E" msgid="7219137467573327268">"Cal"</string>
+ <string name="spoken_emoji_1F40F" msgid="7834336676729040395">"Berbec"</string>
+ <string name="spoken_emoji_1F410" msgid="8686765722255775031">"Capră"</string>
+ <string name="spoken_emoji_1F411" msgid="3585715397876383525">"Oaie"</string>
+ <string name="spoken_emoji_1F412" msgid="4924794582980077838">"Maimuţă"</string>
+ <string name="spoken_emoji_1F413" msgid="1460475310405677377">"Cocoș"</string>
+ <string name="spoken_emoji_1F414" msgid="5857296282631892219">"Pui"</string>
+ <string name="spoken_emoji_1F415" msgid="5920041074892949527">"Câine"</string>
+ <string name="spoken_emoji_1F416" msgid="4362403392912540286">"Porc"</string>
+ <string name="spoken_emoji_1F417" msgid="6836978415840795128">"Porc mistreț"</string>
+ <string name="spoken_emoji_1F418" msgid="7926161463897783691">"Elefant"</string>
+ <string name="spoken_emoji_1F419" msgid="1055233959755784186">"Caracatiță"</string>
+ <string name="spoken_emoji_1F41A" msgid="5195666556511558060">"Scoică spiralată"</string>
+ <string name="spoken_emoji_1F41B" msgid="7652480167465557832">"Insectă"</string>
+ <string name="spoken_emoji_1F41C" msgid="1123461148697574239">"Furnică"</string>
+ <string name="spoken_emoji_1F41D" msgid="718579308764058851">"Albină"</string>
+ <string name="spoken_emoji_1F41E" msgid="6766305509608115467">"Buburuză"</string>
+ <string name="spoken_emoji_1F41F" msgid="1207261298343160838">"Pești"</string>
+ <string name="spoken_emoji_1F420" msgid="1041145003133609221">"Pești tropicali"</string>
+ <string name="spoken_emoji_1F421" msgid="1748378324417438751">"Pește lună"</string>
+ <string name="spoken_emoji_1F422" msgid="4106724877523329148">"Broască țestoasă"</string>
+ <string name="spoken_emoji_1F423" msgid="4077407945958691907">"Pui ieșind din ou"</string>
+ <string name="spoken_emoji_1F424" msgid="6911326019270172283">"Pui de găină"</string>
+ <string name="spoken_emoji_1F425" msgid="5466514196557885577">"Pui văzut din față"</string>
+ <string name="spoken_emoji_1F426" msgid="2163979138772892755">"Pasăre"</string>
+ <string name="spoken_emoji_1F427" msgid="3585670324511212961">"Pinguin"</string>
+ <string name="spoken_emoji_1F428" msgid="7955440808647898579">"Urs koala"</string>
+ <string name="spoken_emoji_1F429" msgid="5028269352809819035">"Pudel"</string>
+ <string name="spoken_emoji_1F42A" msgid="4681926706404032484">"Dromader"</string>
+ <string name="spoken_emoji_1F42B" msgid="2725166074981558322">"Cămilă cu două cocoașe"</string>
+ <string name="spoken_emoji_1F42C" msgid="6764791873413727085">"Delfin"</string>
+ <string name="spoken_emoji_1F42D" msgid="1033643138546864251">"Cap de șoarece"</string>
+ <string name="spoken_emoji_1F42E" msgid="8099223337120508820">"Cap de vacă"</string>
+ <string name="spoken_emoji_1F42F" msgid="2104743989330781572">"Cap de tigru"</string>
+ <string name="spoken_emoji_1F430" msgid="525492897063150160">"Cap de iepure"</string>
+ <string name="spoken_emoji_1F431" msgid="6051358666235016851">"Cap de pisică"</string>
+ <string name="spoken_emoji_1F432" msgid="7698001871193018305">"Cap de dragon"</string>
+ <string name="spoken_emoji_1F433" msgid="3762356053512899326">"Balenă cenușie"</string>
+ <string name="spoken_emoji_1F434" msgid="3619943222159943226">"Cap de cal"</string>
+ <string name="spoken_emoji_1F435" msgid="59199202683252958">"Cap de maimuță"</string>
+ <string name="spoken_emoji_1F436" msgid="340544719369009828">"Cap de câine"</string>
+ <string name="spoken_emoji_1F437" msgid="1219818379784982585">"Cap de porc"</string>
+ <string name="spoken_emoji_1F438" msgid="9128124743321008210">"Cap de broască"</string>
+ <string name="spoken_emoji_1F439" msgid="1424161319554642266">"Cap de hamster"</string>
+ <string name="spoken_emoji_1F43A" msgid="6727645488430385584">"Cap de lup"</string>
+ <string name="spoken_emoji_1F43B" msgid="5397170068392865167">"Cap de urs"</string>
+ <string name="spoken_emoji_1F43C" msgid="2715995734367032431">"Cap de urs panda"</string>
+ <string name="spoken_emoji_1F43D" msgid="6005480717951776597">"Rât de porc"</string>
+ <string name="spoken_emoji_1F43E" msgid="8917626103219080547">"Urme de labe"</string>
+ <string name="spoken_emoji_1F440" msgid="7144338258163384433">"Ochi"</string>
+ <string name="spoken_emoji_1F442" msgid="1905515392292676124">"Ureche"</string>
+ <string name="spoken_emoji_1F443" msgid="1491504447758933115">"Nas"</string>
+ <string name="spoken_emoji_1F444" msgid="3654613047946080332">"Gură"</string>
+ <string name="spoken_emoji_1F445" msgid="7024905244040509204">"Limbă scoasă"</string>
+ <string name="spoken_emoji_1F446" msgid="2150365643636471745">"Deget arătător alb, orientat în sus"</string>
+ <string name="spoken_emoji_1F447" msgid="8794022344940891388">"Deget arătător alb, orientat în jos"</string>
+ <string name="spoken_emoji_1F448" msgid="3261812959215550650">"Deget arătător alb, orientat la stânga"</string>
+ <string name="spoken_emoji_1F449" msgid="4764447975177805991">"Deget arătător alb, orientat la dreapta"</string>
+ <string name="spoken_emoji_1F44A" msgid="7197417095486424841">"Semn pumn strâns"</string>
+ <string name="spoken_emoji_1F44B" msgid="1975968945250833117">"Semn palmă deschisă"</string>
+ <string name="spoken_emoji_1F44C" msgid="3185919567897876562">"Semn OK"</string>
+ <string name="spoken_emoji_1F44D" msgid="6182553970602667815">"Semn de aprobare"</string>
+ <string name="spoken_emoji_1F44E" msgid="8030851867365111809">"Semn de dezaprobare"</string>
+ <string name="spoken_emoji_1F44F" msgid="5148753662268213389">"Semn Aplauze"</string>
+ <string name="spoken_emoji_1F450" msgid="1012021072085157054">"Semn Palme deschise"</string>
+ <string name="spoken_emoji_1F451" msgid="8257466714629051320">"Coroană"</string>
+ <string name="spoken_emoji_1F452" msgid="4567394011149905466">"Pălărie de damă"</string>
+ <string name="spoken_emoji_1F453" msgid="5978410551173163010">"Ochelari"</string>
+ <string name="spoken_emoji_1F454" msgid="348469036193323252">"Cravată"</string>
+ <string name="spoken_emoji_1F455" msgid="5665118831861433578">"Tricou"</string>
+ <string name="spoken_emoji_1F456" msgid="1890991330923356408">"Blugi"</string>
+ <string name="spoken_emoji_1F457" msgid="3904310482655702620">"Rochie"</string>
+ <string name="spoken_emoji_1F458" msgid="5704243858031107692">"Kimono"</string>
+ <string name="spoken_emoji_1F459" msgid="3553148747050035251">"Bikini"</string>
+ <string name="spoken_emoji_1F45A" msgid="1389654639484716101">"Haine de damă"</string>
+ <string name="spoken_emoji_1F45B" msgid="1113293170254222904">"Poșetă"</string>
+ <string name="spoken_emoji_1F45C" msgid="3410257778598006936">"Geantă"</string>
+ <string name="spoken_emoji_1F45D" msgid="812176504300064819">"Borsetă"</string>
+ <string name="spoken_emoji_1F45E" msgid="2901741399934723562">"Pantofi bărbătești"</string>
+ <string name="spoken_emoji_1F45F" msgid="6828566359287798863">"Încălțăminte sport"</string>
+ <string name="spoken_emoji_1F460" msgid="305863879170420855">"Pantof cu toc înalt"</string>
+ <string name="spoken_emoji_1F461" msgid="5160493217831417630">"Sandale de damă"</string>
+ <string name="spoken_emoji_1F462" msgid="1722897795554863734">"Cizme de damă"</string>
+ <string name="spoken_emoji_1F463" msgid="5850772903593010699">"Urme de pași"</string>
+ <string name="spoken_emoji_1F464" msgid="1228335905487734913">"Bust siluetă"</string>
+ <string name="spoken_emoji_1F465" msgid="4461307702499679879">"Busturi siluetă"</string>
+ <string name="spoken_emoji_1F466" msgid="1938873085514108889">"Băiat"</string>
+ <string name="spoken_emoji_1F467" msgid="8237080594860144998">"Fată"</string>
+ <string name="spoken_emoji_1F468" msgid="6081300722526675382">"Bărbat"</string>
+ <string name="spoken_emoji_1F469" msgid="1090140923076108158">"Femeie"</string>
+ <string name="spoken_emoji_1F46A" msgid="5063570981942606595">"Familie"</string>
+ <string name="spoken_emoji_1F46B" msgid="6795882374287327952">"Bărbat și femeie ținându-se de mână"</string>
+ <string name="spoken_emoji_1F46C" msgid="6844464165783964495">"Doi bărbați ținându-se de mână"</string>
+ <string name="spoken_emoji_1F46D" msgid="2316773068014053180">"Două femei ținându-se de mână"</string>
+ <string name="spoken_emoji_1F46E" msgid="5897625605860822401">"Polițist"</string>
+ <string name="spoken_emoji_1F46F" msgid="7716871657717641490">"Femeie cu urechi de iepure"</string>
+ <string name="spoken_emoji_1F470" msgid="6409995400510338892">"Mireasă cu voal"</string>
+ <string name="spoken_emoji_1F471" msgid="3058247860441670806">"Persoană cu păr blond"</string>
+ <string name="spoken_emoji_1F472" msgid="3928854667819339142">"Bărbat cu gua pi mao"</string>
+ <string name="spoken_emoji_1F473" msgid="5921952095808988381">"Bărbat cu turban"</string>
+ <string name="spoken_emoji_1F474" msgid="1082237499496725183">"Bătrân"</string>
+ <string name="spoken_emoji_1F475" msgid="7280323988642212761">"Bătrână"</string>
+ <string name="spoken_emoji_1F476" msgid="4713322657821088296">"Bebeluș"</string>
+ <string name="spoken_emoji_1F477" msgid="2197036131029221370">"Muncitor în construcții"</string>
+ <string name="spoken_emoji_1F478" msgid="7245521193493488875">"Prinţesă"</string>
+ <string name="spoken_emoji_1F479" msgid="6876475321015553972">"Căpcăun japonez"</string>
+ <string name="spoken_emoji_1F47A" msgid="3900813633102703571">"Goblin japonez"</string>
+ <string name="spoken_emoji_1F47B" msgid="2608250873194079390">"Fantomă"</string>
+ <string name="spoken_emoji_1F47C" msgid="3838699131276537421">"Îngeraș"</string>
+ <string name="spoken_emoji_1F47D" msgid="2874077455888369538">"Extraterestru"</string>
+ <string name="spoken_emoji_1F47E" msgid="3642607168625579507">"Monstru extraterestru"</string>
+ <string name="spoken_emoji_1F47F" msgid="441605977269926252">"Demon"</string>
+ <string name="spoken_emoji_1F480" msgid="3696253485164878739">"Craniu"</string>
+ <string name="spoken_emoji_1F481" msgid="320408708521966893">"Persoană la ghișeul de informații"</string>
+ <string name="spoken_emoji_1F482" msgid="3424354860245608949">"Paznic"</string>
+ <string name="spoken_emoji_1F483" msgid="3221113594843849083">"Dansator"</string>
+ <string name="spoken_emoji_1F484" msgid="7348014979080444885">"Ruj"</string>
+ <string name="spoken_emoji_1F485" msgid="6133507975565116339">"Lac de unghii"</string>
+ <string name="spoken_emoji_1F486" msgid="9085459968247394155">"Masaj facial"</string>
+ <string name="spoken_emoji_1F487" msgid="1479113637259592150">"Tunsoare"</string>
+ <string name="spoken_emoji_1F488" msgid="6922559285234100252">"Simbol pentru bărbier"</string>
+ <string name="spoken_emoji_1F489" msgid="8114863680950147305">"Seringă"</string>
+ <string name="spoken_emoji_1F48A" msgid="8526843630145963032">"Pilulă"</string>
+ <string name="spoken_emoji_1F48B" msgid="2538528967897640292">"Semn de sărut"</string>
+ <string name="spoken_emoji_1F48C" msgid="1681173271652890232">"Scrisoare de dragoste"</string>
+ <string name="spoken_emoji_1F48D" msgid="8259886164999042373">"Inel"</string>
+ <string name="spoken_emoji_1F48E" msgid="8777981696011111101">"Piatră prețioasă"</string>
+ <string name="spoken_emoji_1F48F" msgid="741593675183677907">"Sărut"</string>
+ <string name="spoken_emoji_1F490" msgid="4482549128959806736">"Buchet"</string>
+ <string name="spoken_emoji_1F491" msgid="2305245307882441500">"Cuplu cu inimă"</string>
+ <string name="spoken_emoji_1F492" msgid="3884119934804475732">"Nuntă"</string>
+ <string name="spoken_emoji_1F493" msgid="1208828371565525121">"Inimă bătând"</string>
+ <string name="spoken_emoji_1F494" msgid="6198876398509338718">"Inimă zdrobită"</string>
+ <string name="spoken_emoji_1F495" msgid="9206202744967130919">"Două inimi"</string>
+ <string name="spoken_emoji_1F496" msgid="5436953041732207775">"Inimă strălucitoare"</string>
+ <string name="spoken_emoji_1F497" msgid="7285142863951448473">"Inimă care crește"</string>
+ <string name="spoken_emoji_1F498" msgid="7940131245037575715">"Inimă cu sageată"</string>
+ <string name="spoken_emoji_1F499" msgid="4453235040265550009">"Inimă albastră"</string>
+ <string name="spoken_emoji_1F49A" msgid="6262178648366971405">"Inimă verde"</string>
+ <string name="spoken_emoji_1F49B" msgid="8085384999750714368">"Inimă galbenă"</string>
+ <string name="spoken_emoji_1F49C" msgid="453829540120898698">"Inimă violet"</string>
+ <string name="spoken_emoji_1F49D" msgid="3460534750224161888">"Inimăcu panglică"</string>
+ <string name="spoken_emoji_1F49E" msgid="4490636226072523867">"Inimi care se rotesc"</string>
+ <string name="spoken_emoji_1F49F" msgid="2059319756421226336">"Ornament inimă"</string>
+ <string name="spoken_emoji_1F4A0" msgid="1954850380550212038">"Formă romboidală cu un punct înăuntru"</string>
+ <string name="spoken_emoji_1F4A1" msgid="403137413540909021">"Bec electric"</string>
+ <string name="spoken_emoji_1F4A2" msgid="2604192053295622063">"Simbol pentru furie"</string>
+ <string name="spoken_emoji_1F4A3" msgid="6378351742957821735">"Bombă"</string>
+ <string name="spoken_emoji_1F4A4" msgid="7217736258870346625">"Simbol pentru somn"</string>
+ <string name="spoken_emoji_1F4A5" msgid="5401995723541239858">"Simbol pentru accident"</string>
+ <string name="spoken_emoji_1F4A6" msgid="3837802182716483848">"Simbol stropi de transpirație"</string>
+ <string name="spoken_emoji_1F4A7" msgid="5718438987757885141">"Picătură"</string>
+ <string name="spoken_emoji_1F4A8" msgid="4472108229720006377">"Simbol liniuță"</string>
+ <string name="spoken_emoji_1F4A9" msgid="1240958472788430032">"Excremente"</string>
+ <string name="spoken_emoji_1F4AA" msgid="8427525538635146416">"Biceps flexat"</string>
+ <string name="spoken_emoji_1F4AB" msgid="5484114759939427459">"Simbol pentru amețeală"</string>
+ <string name="spoken_emoji_1F4AC" msgid="5571196638219612682">"Balon de dialog"</string>
+ <string name="spoken_emoji_1F4AD" msgid="353174619257798652">"Balon de gândire"</string>
+ <string name="spoken_emoji_1F4AE" msgid="1223142786927162641">"Floare albă"</string>
+ <string name="spoken_emoji_1F4AF" msgid="3526278354452138397">"Simbol pentru o sută de puncte"</string>
+ <string name="spoken_emoji_1F4B0" msgid="4124102195175124156">"Sac cu bani"</string>
+ <string name="spoken_emoji_1F4B1" msgid="8339494003418572905">"Schimb valutar"</string>
+ <string name="spoken_emoji_1F4B2" msgid="3179159430187243132">"Semn dolar îngroșat"</string>
+ <string name="spoken_emoji_1F4B3" msgid="5375412518221759596">"Card de credit"</string>
+ <string name="spoken_emoji_1F4B4" msgid="1068592463669453204">"Bancnotă cu simbolul yen"</string>
+ <string name="spoken_emoji_1F4B5" msgid="1426708699891832564">"Bancnotă cu simbolul dolar"</string>
+ <string name="spoken_emoji_1F4B6" msgid="8289249930736444837">"Bancnotă cu simbolul euro"</string>
+ <string name="spoken_emoji_1F4B7" msgid="5245100496860739429">"Bancnotă cu simbolul liră"</string>
+ <string name="spoken_emoji_1F4B8" msgid="4401099580477164440">"Bani cu aripi"</string>
+ <string name="spoken_emoji_1F4B9" msgid="647509393536679903">"Diagramă reprezentând o tendință crescătoare și simbolul yen"</string>
+ <string name="spoken_emoji_1F4BA" msgid="1269737854891046321">"Loc"</string>
+ <string name="spoken_emoji_1F4BB" msgid="6252883563347816451">"Computer"</string>
+ <string name="spoken_emoji_1F4BC" msgid="6182597732218446206">"Servietă"</string>
+ <string name="spoken_emoji_1F4BD" msgid="5820961044768829176">"Minidisc"</string>
+ <string name="spoken_emoji_1F4BE" msgid="4754542485835379808">"Dischetă"</string>
+ <string name="spoken_emoji_1F4BF" msgid="2237481756984721795">"Disc optic"</string>
+ <string name="spoken_emoji_1F4C0" msgid="491582501089694461">"DVD"</string>
+ <string name="spoken_emoji_1F4C1" msgid="6645461382494158111">"Dosar cu fișiere"</string>
+ <string name="spoken_emoji_1F4C2" msgid="8095638715523765338">"Dosar deschis"</string>
+ <string name="spoken_emoji_1F4C3" msgid="3727274466173970142">"Pagină îndoită"</string>
+ <string name="spoken_emoji_1F4C4" msgid="4382570710795501612">"Pagină orientată în sus"</string>
+ <string name="spoken_emoji_1F4C5" msgid="8693944622627762487">"Calendar"</string>
+ <string name="spoken_emoji_1F4C6" msgid="8469908708708424640">"Calendar cu file detașabile"</string>
+ <string name="spoken_emoji_1F4C7" msgid="2665313547987324495">"Index cărți de vizită"</string>
+ <string name="spoken_emoji_1F4C8" msgid="8007686702282833600">"Diagramă reprezentând o tendință crescătoare"</string>
+ <string name="spoken_emoji_1F4C9" msgid="2271951411192893684">"Diagramă reprezentând o tendință descrescătoare"</string>
+ <string name="spoken_emoji_1F4CA" msgid="3525692829622381444">"Diagramă cu bare"</string>
+ <string name="spoken_emoji_1F4CB" msgid="977639227554095521">"Clipboard"</string>
+ <string name="spoken_emoji_1F4CC" msgid="156107396088741574">"Piuneză"</string>
+ <string name="spoken_emoji_1F4CD" msgid="4266572175361190231">"Piuneză rotundă"</string>
+ <string name="spoken_emoji_1F4CE" msgid="6294288509864968290">"Agrafă de birou"</string>
+ <string name="spoken_emoji_1F4CF" msgid="149679400831136810">"Riglă dreaptă"</string>
+ <string name="spoken_emoji_1F4D0" msgid="8130339336619202915">"Riglă triunghiulară"</string>
+ <string name="spoken_emoji_1F4D1" msgid="5852176364856284968">"File de marcaj"</string>
+ <string name="spoken_emoji_1F4D2" msgid="2276810154105920052">"Registru"</string>
+ <string name="spoken_emoji_1F4D3" msgid="5873386492793610808">"Blocnotes"</string>
+ <string name="spoken_emoji_1F4D4" msgid="4754469936418776360">"Blocnotes cu copertă decorativă"</string>
+ <string name="spoken_emoji_1F4D5" msgid="4642713351802778905">"Carte închisă"</string>
+ <string name="spoken_emoji_1F4D6" msgid="6987347918381807186">"Carte deschisă"</string>
+ <string name="spoken_emoji_1F4D7" msgid="7813394163241379223">"Carte verde"</string>
+ <string name="spoken_emoji_1F4D8" msgid="7189799718984979521">"Carte albastră"</string>
+ <string name="spoken_emoji_1F4D9" msgid="3874664073186440225">"Carte portocalie"</string>
+ <string name="spoken_emoji_1F4DA" msgid="872212072924287762">"Cărți"</string>
+ <string name="spoken_emoji_1F4DB" msgid="2015183603583392969">"Insignă cu numele"</string>
+ <string name="spoken_emoji_1F4DC" msgid="5075845110932456783">"Sul"</string>
+ <string name="spoken_emoji_1F4DD" msgid="2494006707147586786">"Notă"</string>
+ <string name="spoken_emoji_1F4DE" msgid="7883008605002117671">"Receptor de telefon"</string>
+ <string name="spoken_emoji_1F4DF" msgid="3538610110623780465">"Pager"</string>
+ <string name="spoken_emoji_1F4E0" msgid="2960778342609543077">"Fax"</string>
+ <string name="spoken_emoji_1F4E1" msgid="6269733703719242108">"Antenă satelit"</string>
+ <string name="spoken_emoji_1F4E2" msgid="1987535386302883116">"Megafon"</string>
+ <string name="spoken_emoji_1F4E3" msgid="5588916572878599224">"Megafon"</string>
+ <string name="spoken_emoji_1F4E4" msgid="2063561529097749707">"Tavă de ieșiri"</string>
+ <string name="spoken_emoji_1F4E5" msgid="3232462702926143576">"Tavă de intrări"</string>
+ <string name="spoken_emoji_1F4E6" msgid="3399454337197561635">"Pachet"</string>
+ <string name="spoken_emoji_1F4E7" msgid="5557136988503873238">"Simbolul E-mail"</string>
+ <string name="spoken_emoji_1F4E8" msgid="30698793974124123">"Plic primit"</string>
+ <string name="spoken_emoji_1F4E9" msgid="5947550337678643166">"Plic cu săgeată în jos deasupra"</string>
+ <string name="spoken_emoji_1F4EA" msgid="772614045207213751">"Cutie poștală închisă cu steag coborât"</string>
+ <string name="spoken_emoji_1F4EB" msgid="6491414165464146137">"Cutie poștală închisă cu steag ridicat"</string>
+ <string name="spoken_emoji_1F4EC" msgid="7369517138779988438">"Cutie poștală deschisă cu steag ridicat"</string>
+ <string name="spoken_emoji_1F4ED" msgid="5657520436285454241">"Cutie poștală deschisă cu steag coborât"</string>
+ <string name="spoken_emoji_1F4EE" msgid="8464138906243608614">"Cutie poștală"</string>
+ <string name="spoken_emoji_1F4EF" msgid="8801427577198798226">"Simbolul poștal"</string>
+ <string name="spoken_emoji_1F4F0" msgid="6330208624731662525">"Ziar"</string>
+ <string name="spoken_emoji_1F4F1" msgid="3966503935581675695">"Telefon mobil"</string>
+ <string name="spoken_emoji_1F4F2" msgid="1057540341746100087">"Telefon mobil cu săgeată spre dreapta la stânga"</string>
+ <string name="spoken_emoji_1F4F3" msgid="5003984447315754658">"Modul vibrații"</string>
+ <string name="spoken_emoji_1F4F4" msgid="5549847566968306253">"Telefon mobil închis"</string>
+ <string name="spoken_emoji_1F4F5" msgid="3660199448671699238">"Telefoanele mobile interzise"</string>
+ <string name="spoken_emoji_1F4F6" msgid="2676974903233268860">"Antenă cu bare"</string>
+ <string name="spoken_emoji_1F4F7" msgid="2643891943105989039">"Cameră foto"</string>
+ <string name="spoken_emoji_1F4F9" msgid="4475626303058218048">"Cameră video"</string>
+ <string name="spoken_emoji_1F4FA" msgid="1079796186652960775">"Emisiuni TV"</string>
+ <string name="spoken_emoji_1F4FB" msgid="3848729587403760645">"Radio"</string>
+ <string name="spoken_emoji_1F4FC" msgid="8370432508874310054">"Casetă video"</string>
+ <string name="spoken_emoji_1F500" msgid="2389947994502144547">"Săgeți răsucite spre dreapta"</string>
+ <string name="spoken_emoji_1F501" msgid="2132188352433347009">"Săgeți în formă de cerc deschis, orientate spre dreapta și spre stânga, în sensul acelor de ceasornic"</string>
+ <string name="spoken_emoji_1F502" msgid="2361976580513178391">"Săgeți în formă de cerc deschis, orientate spre dreapta și spre stânga, în sensul acelor de ceasornic, cu suprapunerea cifrei 1 într-un cerc"</string>
+ <string name="spoken_emoji_1F503" msgid="8936283551917858793">"Săgeți în formă de cerc deschis, orientate în sus și în jos, în sens orar"</string>
+ <string name="spoken_emoji_1F504" msgid="708290317843535943">"Săgeți în formă de cerc deschis, orientate în sus și în jos, în sens antiorar"</string>
+ <string name="spoken_emoji_1F505" msgid="6348909939004951860">"Simbol de luminozitate scăzută"</string>
+ <string name="spoken_emoji_1F506" msgid="4449609297521280173">"Simbol de luminozitate ridicată"</string>
+ <string name="spoken_emoji_1F507" msgid="7136386694923708448">"Difuzor cu simbol de anulare"</string>
+ <string name="spoken_emoji_1F508" msgid="5063567689831527865">"Difuzor"</string>
+ <string name="spoken_emoji_1F509" msgid="3948050077992370791">"Difuzor cu un val de sunet"</string>
+ <string name="spoken_emoji_1F50A" msgid="5818194948677277197">"Difuzor cu trei valuri de sunet"</string>
+ <string name="spoken_emoji_1F50B" msgid="8083470451266295876">"Baterie"</string>
+ <string name="spoken_emoji_1F50C" msgid="7793219132036431680">"Alimentare electrică"</string>
+ <string name="spoken_emoji_1F50D" msgid="8140244710637926780">"Lupă orientată spre stânga"</string>
+ <string name="spoken_emoji_1F50E" msgid="4751821352839693365">"Lupă orientată spre dreapta"</string>
+ <string name="spoken_emoji_1F50F" msgid="915079280472199605">"Lacăt cu stilou"</string>
+ <string name="spoken_emoji_1F510" msgid="7658381761691758318">"Lacăt închis cu cheie"</string>
+ <string name="spoken_emoji_1F511" msgid="262319867774655688">"Cheie"</string>
+ <string name="spoken_emoji_1F512" msgid="5628688337255115175">"Lacăt"</string>
+ <string name="spoken_emoji_1F513" msgid="8579201846619420981">"Lacăt deschis"</string>
+ <string name="spoken_emoji_1F514" msgid="7027268683047322521">"Clopoțel"</string>
+ <string name="spoken_emoji_1F515" msgid="8903179856036069242">"Clopoțel cu simbol de anulare"</string>
+ <string name="spoken_emoji_1F516" msgid="108097933937925381">"Marcaj"</string>
+ <string name="spoken_emoji_1F517" msgid="2450846665734313397">"Simbol lanț"</string>
+ <string name="spoken_emoji_1F518" msgid="7028220286841437832">"Buton radio"</string>
+ <string name="spoken_emoji_1F519" msgid="8211189165075445687">"„BACK” cu săgeată spre stânga deasupra"</string>
+ <string name="spoken_emoji_1F51A" msgid="823966751787338892">"„END” cu săgeată spre stânga deasupra"</string>
+ <string name="spoken_emoji_1F51B" msgid="5920570742107943382">"„ON” cu semn de exclamare și cu săgeată stânga-dreapta deasupra"</string>
+ <string name="spoken_emoji_1F51C" msgid="110609810659826676">"„SOON” cu săgeată spre dreapta deasupra"</string>
+ <string name="spoken_emoji_1F51D" msgid="4087697222026095447">"„TOP” cu săgeată în sus deasupra"</string>
+ <string name="spoken_emoji_1F51E" msgid="8512873526157201775">"Simbolul „Interzis sub optsprezece ani”"</string>
+ <string name="spoken_emoji_1F51F" msgid="8673370823728653973">"Tastă zece"</string>
+ <string name="spoken_emoji_1F520" msgid="7335109890337048900">"Simbol de introducere a majusculelor latine"</string>
+ <string name="spoken_emoji_1F521" msgid="2693185864450925778">"Simbol de introducere a literelor mici latine"</string>
+ <string name="spoken_emoji_1F522" msgid="8419130286280673347">"Simbol de introducere a cifrelor"</string>
+ <string name="spoken_emoji_1F523" msgid="3318053476401719421">"Simbol de introducere a simbolurilor"</string>
+ <string name="spoken_emoji_1F524" msgid="1625073997522316331">"Simbol de introducere a literelor latine"</string>
+ <string name="spoken_emoji_1F525" msgid="4083884189172963790">"Foc"</string>
+ <string name="spoken_emoji_1F526" msgid="2035494936742643580">"Lanternă"</string>
+ <string name="spoken_emoji_1F527" msgid="134257142354034271">"Cheie"</string>
+ <string name="spoken_emoji_1F528" msgid="700627429570609375">"Ciocan"</string>
+ <string name="spoken_emoji_1F529" msgid="7480548235904988573">"Piuliță și șurub"</string>
+ <string name="spoken_emoji_1F52A" msgid="7613580031502317893">"Hocho"</string>
+ <string name="spoken_emoji_1F52B" msgid="4554906608328118613">"Pistol"</string>
+ <string name="spoken_emoji_1F52C" msgid="1330294501371770790">"Microscop"</string>
+ <string name="spoken_emoji_1F52D" msgid="7549551775445177140">"Telescop"</string>
+ <string name="spoken_emoji_1F52E" msgid="4457099417872625141">"Glob de cristal"</string>
+ <string name="spoken_emoji_1F52F" msgid="8899031001317442792">"Stea cu șase colțuri cu punct în mijloc"</string>
+ <string name="spoken_emoji_1F530" msgid="3572898444281774023">"Simbolul japonez pentru începători"</string>
+ <string name="spoken_emoji_1F531" msgid="5225633376450025396">"Emblemă trident"</string>
+ <string name="spoken_emoji_1F532" msgid="9169568490485180779">"Buton negru pătrat"</string>
+ <string name="spoken_emoji_1F533" msgid="6554193837201918598">"Buton alb pătrat"</string>
+ <string name="spoken_emoji_1F534" msgid="8339298801331865340">"Cerc mare roșu"</string>
+ <string name="spoken_emoji_1F535" msgid="1227403104835533512">"Cerc mare albastru"</string>
+ <string name="spoken_emoji_1F536" msgid="5477372445510469331">"Romb mare portocaliu"</string>
+ <string name="spoken_emoji_1F537" msgid="3158915214347274626">"Romb mare albastru"</string>
+ <string name="spoken_emoji_1F538" msgid="4300084249474451991">"Romb mic portocaliu"</string>
+ <string name="spoken_emoji_1F539" msgid="6535159756325742275">"Romb mic albastru"</string>
+ <string name="spoken_emoji_1F53A" msgid="3728196273988781389">"Triunghi roșu, îndreptat în sus"</string>
+ <string name="spoken_emoji_1F53B" msgid="7182097039614128707">"Triunghi roșu, îndreptat în jos"</string>
+ <string name="spoken_emoji_1F53C" msgid="4077022046319615029">"Triunghi mic roșu, îndreptat în sus"</string>
+ <string name="spoken_emoji_1F53D" msgid="3939112784894620713">"Triunghi mic roșu, îndreptat în jos"</string>
+ <string name="spoken_emoji_1F550" msgid="7761392621689986218">"Ceas cu ora unu"</string>
+ <string name="spoken_emoji_1F551" msgid="2699448504113431716">"Ceas cu ora două"</string>
+ <string name="spoken_emoji_1F552" msgid="5872107867411853750">"Ceas cu ora trei"</string>
+ <string name="spoken_emoji_1F553" msgid="8490966286158640743">"Ceas cu ora patru"</string>
+ <string name="spoken_emoji_1F554" msgid="7662585417832909280">"Ceas cu ora cinci"</string>
+ <string name="spoken_emoji_1F555" msgid="5564698204520412009">"Ceas cu ora șase"</string>
+ <string name="spoken_emoji_1F556" msgid="7325712194836512205">"Ceas cu ora șapte"</string>
+ <string name="spoken_emoji_1F557" msgid="4398343183682848693">"Ceas cu ora opt"</string>
+ <string name="spoken_emoji_1F558" msgid="3110507820404018172">"Ceas cu ora nouă"</string>
+ <string name="spoken_emoji_1F559" msgid="2972160366448337839">"Ceas cu ora zece"</string>
+ <string name="spoken_emoji_1F55A" msgid="5568112876681714834">"Ceas cu ora unsprezece"</string>
+ <string name="spoken_emoji_1F55B" msgid="6731739890330659276">"Ceas cu ora douăsprezece"</string>
+ <string name="spoken_emoji_1F55C" msgid="7838853679879115890">"Ceas cu ora unu și jumătate"</string>
+ <string name="spoken_emoji_1F55D" msgid="3518832144255922544">"Ceas cu ora două și jumătate"</string>
+ <string name="spoken_emoji_1F55E" msgid="3092760695634993002">"Ceas cu ora trei și jumătate"</string>
+ <string name="spoken_emoji_1F55F" msgid="2326720311892906763">"Ceas cu ora patru și jumătate"</string>
+ <string name="spoken_emoji_1F560" msgid="5771339179963924448">"Ceas cu ora cinci și jumătate"</string>
+ <string name="spoken_emoji_1F561" msgid="3139944777062475382">"Ceas cu ora șase și jumătate"</string>
+ <string name="spoken_emoji_1F562" msgid="8273944611162457084">"Ceas cu ora șapte și jumătate"</string>
+ <string name="spoken_emoji_1F563" msgid="8643976903718136299">"Ceas cu ora opt și jumătate"</string>
+ <string name="spoken_emoji_1F564" msgid="3511070239796141638">"Ceas cu ora nouă și jumătate"</string>
+ <string name="spoken_emoji_1F565" msgid="4567451985272963088">"Ceas cu ora zece și jumătate"</string>
+ <string name="spoken_emoji_1F566" msgid="2790552288169929810">"Ceas cu ora unsprezece și jumătate"</string>
+ <string name="spoken_emoji_1F567" msgid="9026037362100689337">"Ceas cu ora douăsprezece și jumătate"</string>
+ <string name="spoken_emoji_1F5FB" msgid="9037503671676124015">"Muntele Fuji"</string>
+ <string name="spoken_emoji_1F5FC" msgid="1409415995817242150">"Turnul Tokyo"</string>
+ <string name="spoken_emoji_1F5FD" msgid="2562726956654429582">"Statuia Libertății"</string>
+ <string name="spoken_emoji_1F5FE" msgid="1184469756905210580">"Conturul Japoniei"</string>
+ <string name="spoken_emoji_1F5FF" msgid="6003594799354942297">"Moyai"</string>
+ <string name="spoken_emoji_1F600" msgid="7601109464776835283">"Față rânjind"</string>
+ <string name="spoken_emoji_1F601" msgid="746026523967444503">"Față rânjind cu ochi zâmbitori"</string>
+ <string name="spoken_emoji_1F602" msgid="8354558091785198246">"Față cu lacrimi de bucurie"</string>
+ <string name="spoken_emoji_1F603" msgid="3861022912544159823">"Față zâmbitoare cu gura deschisă"</string>
+ <string name="spoken_emoji_1F604" msgid="5119021072966343531">"Față zâmbitoare cu gura deschisă și ochi zâmbitori"</string>
+ <string name="spoken_emoji_1F605" msgid="6140813923973561735">"Față zâmbitoare, cu gura deschisă și sudoare rece"</string>
+ <string name="spoken_emoji_1F606" msgid="3549936813966832799">"Față zâmbitoare cu gura deschisă și ochii închiși"</string>
+ <string name="spoken_emoji_1F607" msgid="2826424078212384817">"Față zâmbitoare cu aură"</string>
+ <string name="spoken_emoji_1F608" msgid="7343559595089811640">"Față zâmbitoare cu coarne"</string>
+ <string name="spoken_emoji_1F609" msgid="5481030187207504405">"Față care face cu ochiul"</string>
+ <string name="spoken_emoji_1F60A" msgid="5023337769148679767">"Față zâmbitoare, cu ochii zâmbitori"</string>
+ <string name="spoken_emoji_1F60B" msgid="3005248217216195694">"Față savurând mâncare delicioasă"</string>
+ <string name="spoken_emoji_1F60C" msgid="349384012958268496">"Față ușurată"</string>
+ <string name="spoken_emoji_1F60D" msgid="7921853137164938391">"Față zâmbitoare, cu ochii în formă de inimă"</string>
+ <string name="spoken_emoji_1F60E" msgid="441718886380605643">"Față zâmbitoare cu ochelari de soare"</string>
+ <string name="spoken_emoji_1F60F" msgid="2674453144890180538">"Față zâmbind șiret"</string>
+ <string name="spoken_emoji_1F610" msgid="3225675825334102369">"Față neutră"</string>
+ <string name="spoken_emoji_1F611" msgid="7199179827619679668">"Față fără expresie"</string>
+ <string name="spoken_emoji_1F612" msgid="985081329745137998">"Față serioasă"</string>
+ <string name="spoken_emoji_1F613" msgid="5548607684830303562">"Față cu sudoare rece"</string>
+ <string name="spoken_emoji_1F614" msgid="3196305665259916390">"Față meditativă"</string>
+ <string name="spoken_emoji_1F615" msgid="3051674239303969101">"Față confuză"</string>
+ <string name="spoken_emoji_1F616" msgid="8124887056243813089">"Față confuză"</string>
+ <string name="spoken_emoji_1F617" msgid="7052733625511122870">"Față care sărută"</string>
+ <string name="spoken_emoji_1F618" msgid="408207170572303753">"Față care trimite bezele"</string>
+ <string name="spoken_emoji_1F619" msgid="8645430335143153645">"Față care sărută cu ochi zâmbitori"</string>
+ <string name="spoken_emoji_1F61A" msgid="2882157190974340247">"Față care sărută cu ochii închiși"</string>
+ <string name="spoken_emoji_1F61B" msgid="3765927202787211499">"Față care scoate limba"</string>
+ <string name="spoken_emoji_1F61C" msgid="198943912107589389">"Față care scoate limba și face cu ochiul"</string>
+ <string name="spoken_emoji_1F61D" msgid="7643546385877816182">"Față care scoate limba, cu ochii închiși"</string>
+ <string name="spoken_emoji_1F61E" msgid="1528732952202098364">"Față dezamăgită"</string>
+ <string name="spoken_emoji_1F61F" msgid="1853664164636082404">"Față îngrijorată"</string>
+ <string name="spoken_emoji_1F620" msgid="6051942001307375830">"Față furioasă"</string>
+ <string name="spoken_emoji_1F621" msgid="2114711878097257704">"Față bosumflată"</string>
+ <string name="spoken_emoji_1F622" msgid="29291014645931822">"Față care plânge"</string>
+ <string name="spoken_emoji_1F623" msgid="7803959833595184773">"Față perseverentă"</string>
+ <string name="spoken_emoji_1F624" msgid="8637637647725752799">"Față cu privire triumfătoare"</string>
+ <string name="spoken_emoji_1F625" msgid="6153625183493635030">"Față dezamăgită dar ușurată"</string>
+ <string name="spoken_emoji_1F626" msgid="6179485689935562950">"Față încruntată cu gura deschisă"</string>
+ <string name="spoken_emoji_1F627" msgid="8566204052903012809">"Față chinuită"</string>
+ <string name="spoken_emoji_1F628" msgid="8875777401624904224">"Față înfricoșată"</string>
+ <string name="spoken_emoji_1F629" msgid="1411538490319190118">"Față obosită"</string>
+ <string name="spoken_emoji_1F62A" msgid="4726686726690289969">"Față somnoroasă"</string>
+ <string name="spoken_emoji_1F62B" msgid="3221980473921623613">"Față obosită"</string>
+ <string name="spoken_emoji_1F62C" msgid="4616356691941225182">"Față cu grimasă"</string>
+ <string name="spoken_emoji_1F62D" msgid="4283677508698812232">"Față plângând în hohote"</string>
+ <string name="spoken_emoji_1F62E" msgid="726083405284353894">"Față cu gura deschisă"</string>
+ <string name="spoken_emoji_1F62F" msgid="7746620088234710962">"Față redusă la tăcere"</string>
+ <string name="spoken_emoji_1F630" msgid="3298804852155581163">"Față cu gura deschisă și sudoare rece"</string>
+ <string name="spoken_emoji_1F631" msgid="1603391150954646779">"Față țipând de frică"</string>
+ <string name="spoken_emoji_1F632" msgid="4846193232203976013">"Față uimită"</string>
+ <string name="spoken_emoji_1F633" msgid="4023593836629700443">"Față congestionată"</string>
+ <string name="spoken_emoji_1F634" msgid="3155265083246248129">"Față care doarme"</string>
+ <string name="spoken_emoji_1F635" msgid="4616691133452764482">"Față amețită"</string>
+ <string name="spoken_emoji_1F636" msgid="947000211822375683">"Față fără gura"</string>
+ <string name="spoken_emoji_1F637" msgid="1269551267347165774">"Față cu mască medicală"</string>
+ <string name="spoken_emoji_1F638" msgid="3410766467496872301">"Față de pisică rânjind, cu ochi zâmbitori"</string>
+ <string name="spoken_emoji_1F639" msgid="1833417519781022031">"Față de pisică cu lacrimi de bucurie"</string>
+ <string name="spoken_emoji_1F63A" msgid="8566294484007152613">"Față zâmbitoare de pisică, cu gura deschisă"</string>
+ <string name="spoken_emoji_1F63B" msgid="74417995938927571">"Față zâmbitoare pisică, cu ochii în formă de inimă"</string>
+ <string name="spoken_emoji_1F63C" msgid="6472812005729468870">"Față de pisică cu zâmbet crispat"</string>
+ <string name="spoken_emoji_1F63D" msgid="1638398369553349509">"Față de pisică sărutând cu ochii închiși"</string>
+ <string name="spoken_emoji_1F63E" msgid="6788969063020278986">"Față de pisică bosumflată"</string>
+ <string name="spoken_emoji_1F63F" msgid="1207234562459550185">"Față de pisică plângând"</string>
+ <string name="spoken_emoji_1F640" msgid="6023054549904329638">"Față de pisică obosită"</string>
+ <string name="spoken_emoji_1F645" msgid="5202090629227587076">"Față cu gest „nu are niciun rost”"</string>
+ <string name="spoken_emoji_1F646" msgid="6734425134415138134">"Față cu gest „OK”"</string>
+ <string name="spoken_emoji_1F647" msgid="1090285518444205483">"Persoană care face plecăciuni"</string>
+ <string name="spoken_emoji_1F648" msgid="8978535230610522356">"Maimuță care-și acoperă ochii"</string>
+ <string name="spoken_emoji_1F649" msgid="8486145279809495102">"Maimuță care-și acoperă urechile"</string>
+ <string name="spoken_emoji_1F64A" msgid="1237524974033228660">"Maimuță care-și acoperă gura"</string>
+ <string name="spoken_emoji_1F64B" msgid="4251150782016370475">"Persoană fericită, ridicând o mână"</string>
+ <string name="spoken_emoji_1F64C" msgid="5446231430684558344">"Persoană fericită ridicând ambele mâini de bucurie"</string>
+ <string name="spoken_emoji_1F64D" msgid="4646485595309482342">"Persoană încruntată"</string>
+ <string name="spoken_emoji_1F64E" msgid="3376579939836656097">"Persoană cu fața bosumflată"</string>
+ <string name="spoken_emoji_1F64F" msgid="1044439574356230711">"Persoană cu mâinile împreunate"</string>
+ <string name="spoken_emoji_1F680" msgid="513263736012689059">"Rachetă"</string>
+ <string name="spoken_emoji_1F681" msgid="9201341783850525339">"Elicopter"</string>
+ <string name="spoken_emoji_1F682" msgid="8046933583867498698">"Locomotivă cu abur"</string>
+ <string name="spoken_emoji_1F683" msgid="8772750354339223092">"Vagon de tren"</string>
+ <string name="spoken_emoji_1F684" msgid="346396777356203608">"Tren de mare viteză"</string>
+ <string name="spoken_emoji_1F685" msgid="1237059817190832730">"Tren de mare viteză cu vârf ascuțit"</string>
+ <string name="spoken_emoji_1F686" msgid="3525197227223620343">"Tren"</string>
+ <string name="spoken_emoji_1F687" msgid="5110143437960392837">"Metrou"</string>
+ <string name="spoken_emoji_1F688" msgid="4702085029871797965">"Metrou ușor"</string>
+ <string name="spoken_emoji_1F689" msgid="2375851019798817094">"Stație"</string>
+ <string name="spoken_emoji_1F68A" msgid="6368370859718717198">"Tramvai"</string>
+ <string name="spoken_emoji_1F68B" msgid="2920160427117436633">"Vagon de tramvai"</string>
+ <string name="spoken_emoji_1F68C" msgid="1061520934758810864">"Autobuz"</string>
+ <string name="spoken_emoji_1F68D" msgid="2890059031360969304">"Autobuz sosind din față"</string>
+ <string name="spoken_emoji_1F68E" msgid="6234042976027309654">"Troleibuz"</string>
+ <string name="spoken_emoji_1F68F" msgid="5871099334672012107">"Stație de autobuz"</string>
+ <string name="spoken_emoji_1F690" msgid="8080964620200195262">"Maxi-taxi"</string>
+ <string name="spoken_emoji_1F691" msgid="999173032408730501">"Ambulanță"</string>
+ <string name="spoken_emoji_1F692" msgid="1712863785341849487">"Mașină de pompieri"</string>
+ <string name="spoken_emoji_1F693" msgid="7987109037389768934">"Mașină de poliție"</string>
+ <string name="spoken_emoji_1F694" msgid="6061658916653884608">"Mașină de poliție sosind din față"</string>
+ <string name="spoken_emoji_1F695" msgid="6913445460364247283">"Taxi"</string>
+ <string name="spoken_emoji_1F696" msgid="6391604457418285404">"Taxi sosind din față"</string>
+ <string name="spoken_emoji_1F697" msgid="7978399334396733790">"Automobil"</string>
+ <string name="spoken_emoji_1F698" msgid="7006050861129732018">"Automobil sosind din față"</string>
+ <string name="spoken_emoji_1F699" msgid="630317052666590607">"Vehicul de agrement"</string>
+ <string name="spoken_emoji_1F69A" msgid="4739797891735823577">"Camion pentru livrări"</string>
+ <string name="spoken_emoji_1F69B" msgid="4715997280786620649">"Camion cu remorcă"</string>
+ <string name="spoken_emoji_1F69C" msgid="5557395610750818161">"Tractor"</string>
+ <string name="spoken_emoji_1F69D" msgid="5467164189942951047">"Monoșină"</string>
+ <string name="spoken_emoji_1F69E" msgid="169238196389832234">"Cale ferată montană"</string>
+ <string name="spoken_emoji_1F69F" msgid="7508128757012845102">"Cale ferată suspendată"</string>
+ <string name="spoken_emoji_1F6A0" msgid="8733056213790160147">"Teleferic montan"</string>
+ <string name="spoken_emoji_1F6A1" msgid="4666516337749347253">"Tramvai aerian"</string>
+ <string name="spoken_emoji_1F6A2" msgid="4511220588943129583">"Vapor"</string>
+ <string name="spoken_emoji_1F6A3" msgid="8412962252222205387">"Barcă cu vâsle"</string>
+ <string name="spoken_emoji_1F6A4" msgid="8867571300266339211">"Barcă cu motor"</string>
+ <string name="spoken_emoji_1F6A5" msgid="7650260812741963884">"Semafor orizontal"</string>
+ <string name="spoken_emoji_1F6A6" msgid="485575967773793454">"Semafor vertical"</string>
+ <string name="spoken_emoji_1F6A7" msgid="6411048933816976794">"Semn de construcție"</string>
+ <string name="spoken_emoji_1F6A8" msgid="6345717218374788364">"Sirena de la mașina de poliție"</string>
+ <string name="spoken_emoji_1F6A9" msgid="6586380356807600412">"Stâlp cu steag triunghiular"</string>
+ <string name="spoken_emoji_1F6AA" msgid="8954448167261738885">"Ușă"</string>
+ <string name="spoken_emoji_1F6AB" msgid="5313946262888343544">"Semn Intrarea oprită"</string>
+ <string name="spoken_emoji_1F6AC" msgid="6946858177965948288">"Simbol Fumatul permis"</string>
+ <string name="spoken_emoji_1F6AD" msgid="6320088669185507241">"Simbol Fumatul interzis"</string>
+ <string name="spoken_emoji_1F6AE" msgid="1062469925352817189">"Simbol Aruncați gunoiul în locuri amenajate"</string>
+ <string name="spoken_emoji_1F6AF" msgid="2286668056123642208">"Simbol Păstrați curățenia"</string>
+ <string name="spoken_emoji_1F6B0" msgid="179424763882990952">"Simbol Apă potabilă"</string>
+ <string name="spoken_emoji_1F6B1" msgid="5585212805429161877">"Simbol Apă care nu este potabilă"</string>
+ <string name="spoken_emoji_1F6B2" msgid="1771885082068421875">"Bicicletă"</string>
+ <string name="spoken_emoji_1F6B3" msgid="8033779581263314408">"Interzis accesul cu bicicleta"</string>
+ <string name="spoken_emoji_1F6B4" msgid="1999538449018476947">"Biciclist"</string>
+ <string name="spoken_emoji_1F6B5" msgid="340846352660993117">"Biciclist pe trasee montane"</string>
+ <string name="spoken_emoji_1F6B6" msgid="4351024386495098336">"Pieton"</string>
+ <string name="spoken_emoji_1F6B7" msgid="4564800655866838802">"Accesul pietonilor interzis"</string>
+ <string name="spoken_emoji_1F6B8" msgid="3020531906940267349">"Copii traversând"</string>
+ <string name="spoken_emoji_1F6B9" msgid="1207095844125041251">"Simbol Bărbați"</string>
+ <string name="spoken_emoji_1F6BA" msgid="2346879310071017531">"Simbol Femei"</string>
+ <string name="spoken_emoji_1F6BB" msgid="2370172469642078526">"Toaletă"</string>
+ <string name="spoken_emoji_1F6BC" msgid="5558827593563530851">"Simbol Bebeluș"</string>
+ <string name="spoken_emoji_1F6BD" msgid="9213590243049835957">"Toaletă"</string>
+ <string name="spoken_emoji_1F6BE" msgid="394016533781742491">"WC"</string>
+ <string name="spoken_emoji_1F6BF" msgid="906336365928291207">"Duș"</string>
+ <string name="spoken_emoji_1F6C0" msgid="4592099854378821599">"Baie"</string>
+ <string name="spoken_emoji_1F6C1" msgid="2845056048320031158">"Cadă"</string>
+ <string name="spoken_emoji_1F6C2" msgid="8117262514698011877">"Control pașapoarte"</string>
+ <string name="spoken_emoji_1F6C3" msgid="1176342001834630675">"Vamă"</string>
+ <string name="spoken_emoji_1F6C4" msgid="1477622834179978886">"Revendicarea bagajului"</string>
+ <string name="spoken_emoji_1F6C5" msgid="2495834050856617451">"Bagaj în custodie"</string>
+</resources>
diff --git a/java/res/values-ro/strings-talkback-descriptions.xml b/java/res/values-ro/strings-talkback-descriptions.xml
index 8a6ceb315..40821758b 100644
--- a/java/res/values-ro/strings-talkback-descriptions.xml
+++ b/java/res/values-ro/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Locații"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Simboluri"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Emoticonuri"</string>
+ <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+ <skip />
+ <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+ <skip />
</resources>
diff --git a/java/res/values-ro/strings.xml b/java/res/values-ro/strings.xml
index 51d3c5901..5d5330d3b 100644
--- a/java/res/values-ro/strings.xml
+++ b/java/res/values-ro/strings.xml
@@ -21,7 +21,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_input_options" msgid="3909945612939668554">"Opţiuni de introducere text"</string>
- <string name="english_ime_research_log" msgid="8492602295696577851">"Comenzi jurnal cercetare"</string>
<string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Verificare nume în agendă"</string>
<string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Verificatorul ortografic utilizează intrări din lista de contacte"</string>
<string name="vibrate_on_keypress" msgid="5258079494276955460">"Vibrare la apăsarea tastei"</string>
@@ -84,8 +83,6 @@
<string name="select_language" msgid="3693815588777926848">"Limbi de introducere de text"</string>
<string name="hint_add_to_dictionary" msgid="573678656946085380">"Atingeţi din nou pentru a salva"</string>
<string name="has_dictionary" msgid="6071847973466625007">"Dicţionar disponibil"</string>
- <string name="prefs_enable_log" msgid="6620424505072963557">"Activaţi feedback de la utilizatori"</string>
- <string name="prefs_description_log" msgid="7525225584555429211">"Ajutați la îmbunătățirea acestui instrument de editare a metodelor de introducere a textului trimițând în mod automat statistici de utilizare și rapoarte de blocare."</string>
<string name="keyboard_layout" msgid="8451164783510487501">"Temă pentru tastatură"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"engleză (Regatul Unit)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"engleză (S.U.A.)"</string>
@@ -118,7 +115,6 @@
<string name="enable" msgid="5031294444630523247">"Activaţi"</string>
<string name="not_now" msgid="6172462888202790482">"Nu acum"</string>
<string name="custom_input_style_already_exists" msgid="8008728952215449707">"Acelaşi stil de introducere există deja: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
- <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Modul Studiu privind utilizarea"</string>
<string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Timpul apăsării lungi a tastei"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Vibrare după apăsarea tastei"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Sunet la apăsarea tastelor"</string>
diff --git a/java/res/values-ru/strings-action-keys.xml b/java/res/values-ru/strings-action-keys.xml
index d5080ceb5..3edf2285c 100644
--- a/java/res/values-ru/strings-action-keys.xml
+++ b/java/res/values-ru/strings-action-keys.xml
@@ -25,6 +25,8 @@
<string name="label_previous_key" msgid="1421141755779895275">"Назад"</string>
<string name="label_done_key" msgid="7564866296502630852">"Готово"</string>
<string name="label_send_key" msgid="482252074224462163">"Отправить"</string>
+ <!-- no translation found for label_search_key (7965186050435796642) -->
+ <skip />
<string name="label_pause_key" msgid="2225922926459730642">"Пауза"</string>
<string name="label_wait_key" msgid="5891247853595466039">"Пауза"</string>
</resources>
diff --git a/java/res/values-ru/strings-talkback-descriptions.xml b/java/res/values-ru/strings-talkback-descriptions.xml
index b1cdbb20b..09fbb454c 100644
--- a/java/res/values-ru/strings-talkback-descriptions.xml
+++ b/java/res/values-ru/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Места."</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Символы."</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Смайлики."</string>
+ <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+ <skip />
+ <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+ <skip />
</resources>
diff --git a/java/res/values-ru/strings.xml b/java/res/values-ru/strings.xml
index bef248385..e78874948 100644
--- a/java/res/values-ru/strings.xml
+++ b/java/res/values-ru/strings.xml
@@ -21,7 +21,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_input_options" msgid="3909945612939668554">"Настройки"</string>
- <string name="english_ime_research_log" msgid="8492602295696577851">"Все команды"</string>
<string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Поиск контактов"</string>
<string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Обращаться к списку контактов при проверке правописания"</string>
<string name="vibrate_on_keypress" msgid="5258079494276955460">"Виброотклик клавиш"</string>
@@ -84,8 +83,6 @@
<string name="select_language" msgid="3693815588777926848">"Языки ввода"</string>
<string name="hint_add_to_dictionary" msgid="573678656946085380">"Нажмите, чтобы сохранить"</string>
<string name="has_dictionary" msgid="6071847973466625007">"Доступен словарь"</string>
- <string name="prefs_enable_log" msgid="6620424505072963557">"Включить отправку сведений"</string>
- <string name="prefs_description_log" msgid="7525225584555429211">"Помогите усовершенствовать редактор способа ввода, разрешив отправку статистики и отчетов о сбоях"</string>
<string name="keyboard_layout" msgid="8451164783510487501">"Тема клавиатуры"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"английский (Великобритания)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"английский (США)"</string>
@@ -118,7 +115,6 @@
<string name="enable" msgid="5031294444630523247">"Включить"</string>
<string name="not_now" msgid="6172462888202790482">"Не сейчас"</string>
<string name="custom_input_style_already_exists" msgid="8008728952215449707">"Такой стиль ввода уже существует: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
- <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Режим проверки удобства использования"</string>
<string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Долгое нажатие"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Вибросигнал при нажатии клавиш"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Звук при нажатии клавиш"</string>
diff --git a/java/res/values-sk/strings-action-keys.xml b/java/res/values-sk/strings-action-keys.xml
index 3586fb140..ffc5be2d6 100644
--- a/java/res/values-sk/strings-action-keys.xml
+++ b/java/res/values-sk/strings-action-keys.xml
@@ -25,6 +25,8 @@
<string name="label_previous_key" msgid="1421141755779895275">"Pred."</string>
<string name="label_done_key" msgid="7564866296502630852">"OK"</string>
<string name="label_send_key" msgid="482252074224462163">"Posl."</string>
+ <!-- no translation found for label_search_key (7965186050435796642) -->
+ <skip />
<string name="label_pause_key" msgid="2225922926459730642">"Pauza"</string>
<string name="label_wait_key" msgid="5891247853595466039">"Čakať"</string>
</resources>
diff --git a/java/res/values-sk/strings-talkback-descriptions.xml b/java/res/values-sk/strings-talkback-descriptions.xml
index 9c0a85752..68bd175ae 100644
--- a/java/res/values-sk/strings-talkback-descriptions.xml
+++ b/java/res/values-sk/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Miesta"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Symboly"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Emotikony"</string>
+ <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+ <skip />
+ <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+ <skip />
</resources>
diff --git a/java/res/values-sk/strings.xml b/java/res/values-sk/strings.xml
index 9a3564782..179960f50 100644
--- a/java/res/values-sk/strings.xml
+++ b/java/res/values-sk/strings.xml
@@ -21,7 +21,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_input_options" msgid="3909945612939668554">"Možnosti zadávania textu a údajov"</string>
- <string name="english_ime_research_log" msgid="8492602295696577851">"Príkazy denníka výskumu"</string>
<string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Vyhľadať kontakty"</string>
<string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Kontrola pravopisu používa záznamy z vášho zoznamu kontaktov"</string>
<string name="vibrate_on_keypress" msgid="5258079494276955460">"Pri stlačení klávesu vibrovať"</string>
@@ -84,8 +83,6 @@
<string name="select_language" msgid="3693815588777926848">"Jazyky vstupu"</string>
<string name="hint_add_to_dictionary" msgid="573678656946085380">"Opätovným dotykom uložíte"</string>
<string name="has_dictionary" msgid="6071847973466625007">"K dispozícii je slovník"</string>
- <string name="prefs_enable_log" msgid="6620424505072963557">"Povoliť spätnú väzbu od používateľov"</string>
- <string name="prefs_description_log" msgid="7525225584555429211">"Automatickým zasielaním štatistík o využívaní editora metódy vstupu a správ o jeho zlyhaní môžete prispieť k vylepšeniu tohto nástroja"</string>
<string name="keyboard_layout" msgid="8451164783510487501">"Motív klávesnice"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"Anglická klávesnica (UK)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"Anglická klávesnica (US)"</string>
@@ -118,7 +115,6 @@
<string name="enable" msgid="5031294444630523247">"Povoliť"</string>
<string name="not_now" msgid="6172462888202790482">"Teraz nie"</string>
<string name="custom_input_style_already_exists" msgid="8008728952215449707">"Rovnaký štýl vstupu už existuje: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
- <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Režim štúdie použiteľnosti"</string>
<string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Oneskor. pri stlač. a podržaní"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Trvanie vibrov. pri stlač. kl."</string>
<string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Hlasitosť pri stlačení klávesu"</string>
diff --git a/java/res/values-sl/strings-action-keys.xml b/java/res/values-sl/strings-action-keys.xml
index 0235887af..f8b764723 100644
--- a/java/res/values-sl/strings-action-keys.xml
+++ b/java/res/values-sl/strings-action-keys.xml
@@ -25,6 +25,8 @@
<string name="label_previous_key" msgid="1421141755779895275">"Prej."</string>
<string name="label_done_key" msgid="7564866296502630852">"Konec"</string>
<string name="label_send_key" msgid="482252074224462163">"Pošl."</string>
+ <!-- no translation found for label_search_key (7965186050435796642) -->
+ <skip />
<string name="label_pause_key" msgid="2225922926459730642">"Zaus."</string>
<string name="label_wait_key" msgid="5891247853595466039">"Čakaj"</string>
</resources>
diff --git a/java/res/values-sl/strings-talkback-descriptions.xml b/java/res/values-sl/strings-talkback-descriptions.xml
index 9cb296c27..ec6289b53 100644
--- a/java/res/values-sl/strings-talkback-descriptions.xml
+++ b/java/res/values-sl/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Mesta"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Simboli"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Čustveni simboli"</string>
+ <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+ <skip />
+ <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+ <skip />
</resources>
diff --git a/java/res/values-sl/strings.xml b/java/res/values-sl/strings.xml
index 2594aaec4..64eedc623 100644
--- a/java/res/values-sl/strings.xml
+++ b/java/res/values-sl/strings.xml
@@ -21,7 +21,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_input_options" msgid="3909945612939668554">"Možnosti vnosa"</string>
- <string name="english_ime_research_log" msgid="8492602295696577851">"Ukazi za dnevnik raziskav"</string>
<string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Iskanje imen stikov"</string>
<string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Črkovalnik uporablja vnose s seznama stikov"</string>
<string name="vibrate_on_keypress" msgid="5258079494276955460">"Vibriranje ob pritisku tipke"</string>
@@ -84,8 +83,6 @@
<string name="select_language" msgid="3693815588777926848">"Jeziki vnosa"</string>
<string name="hint_add_to_dictionary" msgid="573678656946085380">"Dotaknite se še enkrat, da shranite"</string>
<string name="has_dictionary" msgid="6071847973466625007">"Slovar je na voljo"</string>
- <string name="prefs_enable_log" msgid="6620424505072963557">"Omogoči povratne informacije uporabnikov"</string>
- <string name="prefs_description_log" msgid="7525225584555429211">"S samodejnim pošiljanjem statističnih podatkov o uporabi in poročil o zrušitvah nam pomagate izboljšati urejevalnik načina vnosa."</string>
<string name="keyboard_layout" msgid="8451164783510487501">"Tema tipkovnice"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"angleščina (Združeno kraljestvo)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"angleščina (ZDA)"</string>
@@ -118,7 +115,6 @@
<string name="enable" msgid="5031294444630523247">"Omogoči"</string>
<string name="not_now" msgid="6172462888202790482">"Ne zdaj"</string>
<string name="custom_input_style_already_exists" msgid="8008728952215449707">"Isti slog vnosa že obstaja: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
- <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Način za preučevanje uporabnosti"</string>
<string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Zakasn. za dolg pritisk tipke"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Trajanje vibr. ob prit. tipke"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Glasn. zvoka ob pritisku tipke"</string>
diff --git a/java/res/values-sr/strings-action-keys.xml b/java/res/values-sr/strings-action-keys.xml
index 1ce0ed7fb..b3d9411c7 100644
--- a/java/res/values-sr/strings-action-keys.xml
+++ b/java/res/values-sr/strings-action-keys.xml
@@ -25,6 +25,8 @@
<string name="label_previous_key" msgid="1421141755779895275">"Претх"</string>
<string name="label_done_key" msgid="7564866296502630852">"Готов"</string>
<string name="label_send_key" msgid="482252074224462163">"Шаљи"</string>
+ <!-- no translation found for label_search_key (7965186050435796642) -->
+ <skip />
<string name="label_pause_key" msgid="2225922926459730642">"Пауза"</string>
<string name="label_wait_key" msgid="5891247853595466039">"Чекај"</string>
</resources>
diff --git a/java/res/values-sr/strings-talkback-descriptions.xml b/java/res/values-sr/strings-talkback-descriptions.xml
index 0f062ab70..f8d1eb43c 100644
--- a/java/res/values-sr/strings-talkback-descriptions.xml
+++ b/java/res/values-sr/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Места"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Симболи"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Емотикони"</string>
+ <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+ <skip />
+ <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+ <skip />
</resources>
diff --git a/java/res/values-sr/strings.xml b/java/res/values-sr/strings.xml
index 7bd7f67e5..a37d22e7e 100644
--- a/java/res/values-sr/strings.xml
+++ b/java/res/values-sr/strings.xml
@@ -21,7 +21,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_input_options" msgid="3909945612939668554">"Опције уноса"</string>
- <string name="english_ime_research_log" msgid="8492602295696577851">"Команде евиденције истраживања"</string>
<string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Потражи имена контаката"</string>
<string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Контролор правописа користи уносе са листе контаката"</string>
<string name="vibrate_on_keypress" msgid="5258079494276955460">"Вибрирај на притисак тастера"</string>
@@ -84,8 +83,6 @@
<string name="select_language" msgid="3693815588777926848">"Језици уноса"</string>
<string name="hint_add_to_dictionary" msgid="573678656946085380">"Поново додирните да бисте сачували"</string>
<string name="has_dictionary" msgid="6071847973466625007">"Речник је доступан"</string>
- <string name="prefs_enable_log" msgid="6620424505072963557">"Омогући повратну информацију корисника"</string>
- <string name="prefs_description_log" msgid="7525225584555429211">"Помозите нам да побољшамо овај уређивач метода уноса тако што ћете аутоматски слати статистику коришћења и извештаје о отказивању"</string>
<string name="keyboard_layout" msgid="8451164783510487501">"Тема тастатуре"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"енглески (УК)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"енглески (САД)"</string>
@@ -118,7 +115,6 @@
<string name="enable" msgid="5031294444630523247">"Омогући"</string>
<string name="not_now" msgid="6172462888202790482">"Не сада"</string>
<string name="custom_input_style_already_exists" msgid="8008728952215449707">"Исти стил уноса већ постоји: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
- <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Режим за студију могућности коришћења"</string>
<string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Одлагање при дугом притиску"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Трајање вибрације при притиску"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Јачина звука при притиску"</string>
diff --git a/java/res/values-sv/strings-action-keys.xml b/java/res/values-sv/strings-action-keys.xml
index e13860811..053461d07 100644
--- a/java/res/values-sv/strings-action-keys.xml
+++ b/java/res/values-sv/strings-action-keys.xml
@@ -25,6 +25,8 @@
<string name="label_previous_key" msgid="1421141755779895275">"Föreg"</string>
<string name="label_done_key" msgid="7564866296502630852">"Klart"</string>
<string name="label_send_key" msgid="482252074224462163">"Sänd"</string>
+ <!-- no translation found for label_search_key (7965186050435796642) -->
+ <skip />
<string name="label_pause_key" msgid="2225922926459730642">"Pausa"</string>
<string name="label_wait_key" msgid="5891247853595466039">"Vänta"</string>
</resources>
diff --git a/java/res/values-sv/strings-talkback-descriptions.xml b/java/res/values-sv/strings-talkback-descriptions.xml
index 062d337b4..cb241c8af 100644
--- a/java/res/values-sv/strings-talkback-descriptions.xml
+++ b/java/res/values-sv/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Platser"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Symboler"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Uttryckssymboler"</string>
+ <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+ <skip />
+ <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+ <skip />
</resources>
diff --git a/java/res/values-sv/strings.xml b/java/res/values-sv/strings.xml
index 7092e6876..1cb57dda9 100644
--- a/java/res/values-sv/strings.xml
+++ b/java/res/values-sv/strings.xml
@@ -21,7 +21,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_input_options" msgid="3909945612939668554">"Inmatningsalternativ"</string>
- <string name="english_ime_research_log" msgid="8492602295696577851">"Loggkommandon"</string>
<string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Sök namn på kontakter"</string>
<string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"I stavningskontrollen används poster från kontaktlistan"</string>
<string name="vibrate_on_keypress" msgid="5258079494276955460">"Vibrera vid tangenttryck"</string>
@@ -84,8 +83,6 @@
<string name="select_language" msgid="3693815588777926848">"Inmatningsspråk"</string>
<string name="hint_add_to_dictionary" msgid="573678656946085380">"Spara genom att trycka igen"</string>
<string name="has_dictionary" msgid="6071847973466625007">"En ordlista är tillgänglig"</string>
- <string name="prefs_enable_log" msgid="6620424505072963557">"Aktivera synpunkter från användare"</string>
- <string name="prefs_description_log" msgid="7525225584555429211">"Du kan hjälpa till att förbättra inmatningsmetoden genom att automatiskt skicka användningsstatistik och felrapporter"</string>
<string name="keyboard_layout" msgid="8451164783510487501">"Tangentbordstema"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"Engelskt (brittiskt)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"Engelskt (amerikanskt)"</string>
@@ -118,7 +115,6 @@
<string name="enable" msgid="5031294444630523247">"Aktivera"</string>
<string name="not_now" msgid="6172462888202790482">"Inte nu"</string>
<string name="custom_input_style_already_exists" msgid="8008728952215449707">"Samma indatastil finns redan: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
- <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Läge för studie av användbarhet"</string>
<string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Fördröjning vid långt tryck"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Vibrationslängd för tangenter"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Ljudvolym för tangenter"</string>
diff --git a/java/res/values-sw/strings-action-keys.xml b/java/res/values-sw/strings-action-keys.xml
index 7d8822e80..587cbfa6a 100644
--- a/java/res/values-sw/strings-action-keys.xml
+++ b/java/res/values-sw/strings-action-keys.xml
@@ -25,6 +25,8 @@
<string name="label_previous_key" msgid="1421141755779895275">"Nyuma"</string>
<string name="label_done_key" msgid="7564866296502630852">"Imekamilika"</string>
<string name="label_send_key" msgid="482252074224462163">"Tuma"</string>
+ <!-- no translation found for label_search_key (7965186050435796642) -->
+ <skip />
<string name="label_pause_key" msgid="2225922926459730642">"Sitisha"</string>
<string name="label_wait_key" msgid="5891247853595466039">"Subiri"</string>
</resources>
diff --git a/java/res/values-sw/strings-talkback-descriptions.xml b/java/res/values-sw/strings-talkback-descriptions.xml
index 703dc4db7..f03287036 100644
--- a/java/res/values-sw/strings-talkback-descriptions.xml
+++ b/java/res/values-sw/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Maeneo"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Alama"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Vikaragosi"</string>
+ <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+ <skip />
+ <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+ <skip />
</resources>
diff --git a/java/res/values-sw/strings.xml b/java/res/values-sw/strings.xml
index 56312899d..361e9f67d 100644
--- a/java/res/values-sw/strings.xml
+++ b/java/res/values-sw/strings.xml
@@ -21,7 +21,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_input_options" msgid="3909945612939668554">"Chaguo za uingizaji"</string>
- <string name="english_ime_research_log" msgid="8492602295696577851">"Amri za Kumbukumbu za Utafiti"</string>
<string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Angalia majina ya unaowasiliana nao"</string>
<string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Kikagua tahajia hutumia majina yaliyoingizwa katika orodha yako ya anwani"</string>
<string name="vibrate_on_keypress" msgid="5258079494276955460">"Tetema unabofya kitufe"</string>
@@ -84,8 +83,6 @@
<string name="select_language" msgid="3693815588777926848">"Lugha zinazoruhusiwa"</string>
<string name="hint_add_to_dictionary" msgid="573678656946085380">"Gusa tena ili kuhifadhi"</string>
<string name="has_dictionary" msgid="6071847973466625007">"Kamusi inapatikana"</string>
- <string name="prefs_enable_log" msgid="6620424505072963557">"Wezesha maoni ya watumiaji"</string>
- <string name="prefs_description_log" msgid="7525225584555429211">"Saidia kuimarisha mbinu hii ya uingizaji wa kihariri, kwa kutuma takwimu za matumizi na ripoti za kuvurugika kiotomatiki"</string>
<string name="keyboard_layout" msgid="8451164783510487501">"Maandhari ya kibodi"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"Kiingereza cha (Uingereza)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"Kiingereza cha (Marekani)"</string>
@@ -118,7 +115,6 @@
<string name="enable" msgid="5031294444630523247">"Washa"</string>
<string name="not_now" msgid="6172462888202790482">"Sio sasa"</string>
<string name="custom_input_style_already_exists" msgid="8008728952215449707">"Mfumo sawa wa maingizo tayari upo: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
- <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Modi ya uchunguzi wa utumizi"</string>
<string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Ubofyaji kitufe kunakochelewa"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Bonyeza kitufe cha muda wa kutetema"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Bonyeza kitufe cha kiwango cha sauti"</string>
diff --git a/java/res/values-th/strings-action-keys.xml b/java/res/values-th/strings-action-keys.xml
index f23bfbc2a..6cbd491f9 100644
--- a/java/res/values-th/strings-action-keys.xml
+++ b/java/res/values-th/strings-action-keys.xml
@@ -25,6 +25,8 @@
<string name="label_previous_key" msgid="1421141755779895275">"ก่อน"</string>
<string name="label_done_key" msgid="7564866296502630852">"เสร็จ"</string>
<string name="label_send_key" msgid="482252074224462163">"ส่ง"</string>
+ <!-- no translation found for label_search_key (7965186050435796642) -->
+ <skip />
<string name="label_pause_key" msgid="2225922926459730642">"หยุด"</string>
<string name="label_wait_key" msgid="5891247853595466039">"รอ"</string>
</resources>
diff --git a/java/res/values-th/strings-talkback-descriptions.xml b/java/res/values-th/strings-talkback-descriptions.xml
index 0a7133020..48b21b72b 100644
--- a/java/res/values-th/strings-talkback-descriptions.xml
+++ b/java/res/values-th/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"สถานที่"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"สัญลักษณ์"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"ไอคอนสื่ออารมณ์"</string>
+ <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+ <skip />
+ <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+ <skip />
</resources>
diff --git a/java/res/values-th/strings.xml b/java/res/values-th/strings.xml
index ece0c4ba9..5bbff3dc8 100644
--- a/java/res/values-th/strings.xml
+++ b/java/res/values-th/strings.xml
@@ -21,7 +21,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_input_options" msgid="3909945612939668554">"ตัวเลือกการป้อนข้อมูล"</string>
- <string name="english_ime_research_log" msgid="8492602295696577851">"คำสั่งบันทึกการวิจัย"</string>
<string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"ค้นหารายชื่อติดต่อ"</string>
<string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"เครื่องมือตรวจการสะกดใช้รายการจากรายชื่อติดต่อของคุณ"</string>
<string name="vibrate_on_keypress" msgid="5258079494276955460">"สั่นเมื่อกดปุ่ม"</string>
@@ -84,8 +83,6 @@
<string name="select_language" msgid="3693815588777926848">"ภาษาสำหรับการป้อนข้อมูล"</string>
<string name="hint_add_to_dictionary" msgid="573678656946085380">"แตะอีกครั้งเพื่อบัน​​ทึก"</string>
<string name="has_dictionary" msgid="6071847973466625007">"มีพจนานุกรมให้ใช้งาน"</string>
- <string name="prefs_enable_log" msgid="6620424505072963557">"เปิดใช้งานการแสดงความคิดเห็นจากผู้ใช้"</string>
- <string name="prefs_description_log" msgid="7525225584555429211">"ช่วยปรับปรุงตัวแก้ไขวิธีการป้อนข้อมูลนี้โดยการส่งสถิติการใช้งานและรายงานการขัดข้องโดยอัตโนมัติ"</string>
<string name="keyboard_layout" msgid="8451164783510487501">"ชุดรูปแบบแป้นพิมพ์"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"อังกฤษ (สหราชอาณาจักร)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"อังกฤษ (อเมริกัน)"</string>
@@ -118,7 +115,6 @@
<string name="enable" msgid="5031294444630523247">"เปิดใช้งาน"</string>
<string name="not_now" msgid="6172462888202790482">"ข้ามไปก่อน"</string>
<string name="custom_input_style_already_exists" msgid="8008728952215449707">"รูปแบบการป้อนข้อมูลเดียวกันนี้มีอยู่แล้ว: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
- <string name="prefs_usability_study_mode" msgid="1261130555134595254">"โหมดศึกษาประโยชน์ในการใช้งาน"</string>
<string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"การหน่วงเวลาของการกดแป้นค้าง"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"ระยะเวลาการสั่นเมื่อกดแป้นพิมพ์"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"ระดับเสียงเมื่อกดแป้นพิมพ์"</string>
diff --git a/java/res/values-tl/strings-action-keys.xml b/java/res/values-tl/strings-action-keys.xml
index a7f4cc78f..ac511d03f 100644
--- a/java/res/values-tl/strings-action-keys.xml
+++ b/java/res/values-tl/strings-action-keys.xml
@@ -25,6 +25,8 @@
<string name="label_previous_key" msgid="1421141755779895275">"Nauna"</string>
<string name="label_done_key" msgid="7564866296502630852">"Tapos"</string>
<string name="label_send_key" msgid="482252074224462163">"Send"</string>
+ <!-- no translation found for label_search_key (7965186050435796642) -->
+ <skip />
<string name="label_pause_key" msgid="2225922926459730642">"Pause"</string>
<string name="label_wait_key" msgid="5891247853595466039">"Intay"</string>
</resources>
diff --git a/java/res/values-tl/strings-talkback-descriptions.xml b/java/res/values-tl/strings-talkback-descriptions.xml
index 4c34ad46f..97905ad57 100644
--- a/java/res/values-tl/strings-talkback-descriptions.xml
+++ b/java/res/values-tl/strings-talkback-descriptions.xml
@@ -27,14 +27,10 @@
<string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"Nagsasagawa ang <xliff:g id="KEY_NAME">%1$s</xliff:g> ng auto-correction"</string>
<string name="spoken_description_unknown" msgid="2382510329910793539">"Key code %d"</string>
<string name="spoken_description_shift" msgid="7209798151676638728">"Shift"</string>
- <!-- no translation found for spoken_description_symbols_shift (3483198879916435717) -->
- <skip />
- <!-- no translation found for spoken_description_shift_shifted (3122704922642232605) -->
- <skip />
- <!-- no translation found for spoken_description_symbols_shift_shifted (5179175466878186081) -->
- <skip />
- <!-- no translation found for spoken_description_caps_lock (1224851412185975036) -->
- <skip />
+ <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"Marami pang simbolo"</string>
+ <string name="spoken_description_shift_shifted" msgid="3122704922642232605">"Shift"</string>
+ <string name="spoken_description_symbols_shift_shifted" msgid="5179175466878186081">"Mga Simbolo"</string>
+ <string name="spoken_description_caps_lock" msgid="1224851412185975036">"Shift"</string>
<string name="spoken_description_delete" msgid="3878902286264983302">"Tanggalin"</string>
<string name="spoken_description_to_symbol" msgid="8244903740201126590">"Mga Simbolo"</string>
<string name="spoken_description_to_alpha" msgid="4081215210530031950">"Mga Titik"</string>
@@ -53,8 +49,7 @@
<string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"Naka-enable ang shift"</string>
<string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"Naka-enable ang caps lock"</string>
<string name="spoken_description_mode_symbol" msgid="111186851131446691">"Symbols mode"</string>
- <!-- no translation found for spoken_description_mode_symbol_shift (4305607977537665389) -->
- <skip />
+ <string name="spoken_description_mode_symbol_shift" msgid="4305607977537665389">"Mode na marami pang simbolo"</string>
<string name="spoken_description_mode_alpha" msgid="4676004119618778911">"Letters mode"</string>
<string name="spoken_description_mode_phone" msgid="2061220553756692903">"Phone mode"</string>
<string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"Phone symbols mode"</string>
@@ -76,4 +71,12 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Mga Lugar"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Mga Simbolo"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Mga Emoticon"</string>
+ <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+ <skip />
+ <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+ <skip />
</resources>
diff --git a/java/res/values-tl/strings.xml b/java/res/values-tl/strings.xml
index ce1207a5f..d1b665c72 100644
--- a/java/res/values-tl/strings.xml
+++ b/java/res/values-tl/strings.xml
@@ -21,7 +21,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_input_options" msgid="3909945612939668554">"Mga pagpipilian sa input"</string>
- <string name="english_ime_research_log" msgid="8492602295696577851">"Cmmnd sa Log ng Pnnliksik"</string>
<string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Maghanap pangalan contact"</string>
<string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Gumagamit ang Spell Checker ng entries mula sa iyong contact list."</string>
<string name="vibrate_on_keypress" msgid="5258079494276955460">"Mag-vibrate sa keypress"</string>
@@ -84,8 +83,6 @@
<string name="select_language" msgid="3693815588777926848">"Mga wika ng input"</string>
<string name="hint_add_to_dictionary" msgid="573678656946085380">"Pinduting muli upang i-save"</string>
<string name="has_dictionary" msgid="6071847973466625007">"Available ang diksyunaryo"</string>
- <string name="prefs_enable_log" msgid="6620424505072963557">"Paganahin ang feedback ng user"</string>
- <string name="prefs_description_log" msgid="7525225584555429211">"Tumulong na pahusayin ang editor ng pamamaraan ng pag-input na ito sa pamamagitan ng awtomatikong pagpapadala ng mga istatistika ng paggamit at ulat ng pag-crash"</string>
<string name="keyboard_layout" msgid="8451164783510487501">"Tema ng keyboard"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"Ingles (UK)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"Ingles (Estados Unidos)"</string>
@@ -118,7 +115,6 @@
<string name="enable" msgid="5031294444630523247">"Paganahin"</string>
<string name="not_now" msgid="6172462888202790482">"Hindi ngayon"</string>
<string name="custom_input_style_already_exists" msgid="8008728952215449707">"Umiiral na ang parehong estilo ng input: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
- <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Study mode ng pagiging kapaki-pakinabang"</string>
<string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Key long press delay"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Tagal ng vibration ng keypress"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Volume ng tunog ng keypress"</string>
diff --git a/java/res/values-tr/strings-action-keys.xml b/java/res/values-tr/strings-action-keys.xml
index b34c576b6..5592e6c69 100644
--- a/java/res/values-tr/strings-action-keys.xml
+++ b/java/res/values-tr/strings-action-keys.xml
@@ -25,6 +25,8 @@
<string name="label_previous_key" msgid="1421141755779895275">"Geri"</string>
<string name="label_done_key" msgid="7564866296502630852">"Bitti"</string>
<string name="label_send_key" msgid="482252074224462163">"Gönder"</string>
+ <!-- no translation found for label_search_key (7965186050435796642) -->
+ <skip />
<string name="label_pause_key" msgid="2225922926459730642">"Dur"</string>
<string name="label_wait_key" msgid="5891247853595466039">"Bekle"</string>
</resources>
diff --git a/java/res/values-tr/strings-talkback-descriptions.xml b/java/res/values-tr/strings-talkback-descriptions.xml
index 829fe6109..970f5848a 100644
--- a/java/res/values-tr/strings-talkback-descriptions.xml
+++ b/java/res/values-tr/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Yerler"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Simgeler"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"İfadeler"</string>
+ <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+ <skip />
+ <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+ <skip />
</resources>
diff --git a/java/res/values-tr/strings.xml b/java/res/values-tr/strings.xml
index 3584ec5db..adbd67690 100644
--- a/java/res/values-tr/strings.xml
+++ b/java/res/values-tr/strings.xml
@@ -21,7 +21,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_input_options" msgid="3909945612939668554">"Giriş seçenekleri"</string>
- <string name="english_ime_research_log" msgid="8492602295696577851">"Araştırma Günlüğü Komutları"</string>
<string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Kişi adlarını denetle"</string>
<string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Yazım denetleyici, kişi listenizdeki girişleri kullanır"</string>
<string name="vibrate_on_keypress" msgid="5258079494276955460">"Tuşa basıldığında titret"</string>
@@ -84,8 +83,6 @@
<string name="select_language" msgid="3693815588777926848">"Giriş dilleri"</string>
<string name="hint_add_to_dictionary" msgid="573678656946085380">"Kaydetmek için tekrar dokunun"</string>
<string name="has_dictionary" msgid="6071847973466625007">"Sözlük kullanılabilir"</string>
- <string name="prefs_enable_log" msgid="6620424505072963557">"Kullanıcı geri bildirimini etkinleştir"</string>
- <string name="prefs_description_log" msgid="7525225584555429211">"Kullanım istatistiklerini ve kilitlenme raporlarını otomatik olarak göndererek bu giriş yöntemi düzenleyicisinin iyileştirilmesine yardımcı olun."</string>
<string name="keyboard_layout" msgid="8451164783510487501">"Klavye teması"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"İngilizce (BK)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"İngilizce (ABD)"</string>
@@ -118,7 +115,6 @@
<string name="enable" msgid="5031294444630523247">"Etkinleştir"</string>
<string name="not_now" msgid="6172462888202790482">"Şimdi değil"</string>
<string name="custom_input_style_already_exists" msgid="8008728952215449707">"Aynı giriş stili zaten var: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
- <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Kullanılabilirlik çalışması modu"</string>
<string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Tuşa uzun basma gecikmesi"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Tuşa basma titreşim süresi"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Tuşa basma ses seviyesi"</string>
diff --git a/java/res/values-uk/strings-action-keys.xml b/java/res/values-uk/strings-action-keys.xml
index 3e5762b3f..8b71498c1 100644
--- a/java/res/values-uk/strings-action-keys.xml
+++ b/java/res/values-uk/strings-action-keys.xml
@@ -25,6 +25,8 @@
<string name="label_previous_key" msgid="1421141755779895275">"Назад"</string>
<string name="label_done_key" msgid="7564866296502630852">"ОК"</string>
<string name="label_send_key" msgid="482252074224462163">"Слати"</string>
+ <!-- no translation found for label_search_key (7965186050435796642) -->
+ <skip />
<string name="label_pause_key" msgid="2225922926459730642">"Пауза"</string>
<string name="label_wait_key" msgid="5891247853595466039">"Ждати"</string>
</resources>
diff --git a/java/res/values-uk/strings-talkback-descriptions.xml b/java/res/values-uk/strings-talkback-descriptions.xml
index ddb821436..20f164740 100644
--- a/java/res/values-uk/strings-talkback-descriptions.xml
+++ b/java/res/values-uk/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Місця"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Символи"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Смайли"</string>
+ <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+ <skip />
+ <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+ <skip />
</resources>
diff --git a/java/res/values-uk/strings.xml b/java/res/values-uk/strings.xml
index 15a30805e..8ce96561f 100644
--- a/java/res/values-uk/strings.xml
+++ b/java/res/values-uk/strings.xml
@@ -21,7 +21,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_input_options" msgid="3909945612939668554">"Парам. введення"</string>
- <string name="english_ime_research_log" msgid="8492602295696577851">"Команди журналу дослідж."</string>
<string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Шукати імена контактів"</string>
<string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Програма перевірки правопису використ. записи зі списку контактів"</string>
<string name="vibrate_on_keypress" msgid="5258079494276955460">"Вібр. при натисканні клавіш"</string>
@@ -84,8 +83,6 @@
<string name="select_language" msgid="3693815588777926848">"Мови введення"</string>
<string name="hint_add_to_dictionary" msgid="573678656946085380">"Торкніться знову, щоб зберегти"</string>
<string name="has_dictionary" msgid="6071847973466625007">"Словник доступний"</string>
- <string name="prefs_enable_log" msgid="6620424505072963557">"Увімк. відгуки корист."</string>
- <string name="prefs_description_log" msgid="7525225584555429211">"Допоможіть покращити цей редактор методу введення, автоматично надсилаючи в Google статистику використання та звіти про аварійне завершення роботи."</string>
<string name="keyboard_layout" msgid="8451164783510487501">"Тема клавіатури"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"Англійська (Великобританія)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"Англійська (США)"</string>
@@ -118,7 +115,6 @@
<string name="enable" msgid="5031294444630523247">"Увімкнути"</string>
<string name="not_now" msgid="6172462888202790482">"Не зараз"</string>
<string name="custom_input_style_already_exists" msgid="8008728952215449707">"Такий стиль введення вже існує: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
- <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Режим вивчення зручності у використанні"</string>
<string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Затримка довгого натискання"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Вібрація при натисканні клавіш"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Гучність натискання клавіш"</string>
diff --git a/java/res/values-vi/strings-action-keys.xml b/java/res/values-vi/strings-action-keys.xml
index ceb780ed1..16b7c959e 100644
--- a/java/res/values-vi/strings-action-keys.xml
+++ b/java/res/values-vi/strings-action-keys.xml
@@ -25,6 +25,8 @@
<string name="label_previous_key" msgid="1421141755779895275">"Trước"</string>
<string name="label_done_key" msgid="7564866296502630852">"Xong"</string>
<string name="label_send_key" msgid="482252074224462163">"Gửi"</string>
+ <!-- no translation found for label_search_key (7965186050435796642) -->
+ <skip />
<string name="label_pause_key" msgid="2225922926459730642">"Tdừng"</string>
<string name="label_wait_key" msgid="5891247853595466039">"Đợi"</string>
</resources>
diff --git a/java/res/values-vi/strings-talkback-descriptions.xml b/java/res/values-vi/strings-talkback-descriptions.xml
index 10a64a7ee..6da8cec09 100644
--- a/java/res/values-vi/strings-talkback-descriptions.xml
+++ b/java/res/values-vi/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Địa điểm"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Biểu tượng"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Biểu tượng cảm xúc"</string>
+ <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+ <skip />
+ <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+ <skip />
</resources>
diff --git a/java/res/values-vi/strings.xml b/java/res/values-vi/strings.xml
index 529dcec17..5d4705892 100644
--- a/java/res/values-vi/strings.xml
+++ b/java/res/values-vi/strings.xml
@@ -21,7 +21,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_input_options" msgid="3909945612939668554">"Tùy chọn nhập"</string>
- <string name="english_ime_research_log" msgid="8492602295696577851">"Lệnh ghi nhật ký cho nghiên cứu"</string>
<string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Tra cứu tên liên hệ"</string>
<string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Trình kiểm tra chính tả sử dụng các mục nhập từ danh sách liên hệ của bạn"</string>
<string name="vibrate_on_keypress" msgid="5258079494276955460">"Rung khi nhấn phím"</string>
@@ -84,8 +83,6 @@
<string name="select_language" msgid="3693815588777926848">"Ngôn ngữ nhập"</string>
<string name="hint_add_to_dictionary" msgid="573678656946085380">"Chạm lại để lưu"</string>
<string name="has_dictionary" msgid="6071847973466625007">"Có sẵn từ điển"</string>
- <string name="prefs_enable_log" msgid="6620424505072963557">"Bật phản hồi của người dùng"</string>
- <string name="prefs_description_log" msgid="7525225584555429211">"Giúp cải tiến trình chỉnh sửa phương thức nhập này bằng cách tự động gửi thống kê sử dụng và báo cáo sự cố"</string>
<string name="keyboard_layout" msgid="8451164783510487501">"Chủ đề bàn phím"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"Tiếng Anh (Anh)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"Tiếng Anh (Mỹ)"</string>
@@ -118,7 +115,6 @@
<string name="enable" msgid="5031294444630523247">"Bật"</string>
<string name="not_now" msgid="6172462888202790482">"Để sau"</string>
<string name="custom_input_style_already_exists" msgid="8008728952215449707">"Đã tồn tại kiểu nhập tương tự: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
- <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Chế độ nghiên cứu tính khả dụng"</string>
<string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Tgian chờ cho nhấn và giữ phím"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Thời gian rung khi nhấn phím"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Âm lượng khi nhấn phím"</string>
diff --git a/java/res/values-zh-rCN/strings-action-keys.xml b/java/res/values-zh-rCN/strings-action-keys.xml
index aacbb5fc7..a3629da2f 100644
--- a/java/res/values-zh-rCN/strings-action-keys.xml
+++ b/java/res/values-zh-rCN/strings-action-keys.xml
@@ -25,6 +25,8 @@
<string name="label_previous_key" msgid="1421141755779895275">"上个"</string>
<string name="label_done_key" msgid="7564866296502630852">"完成"</string>
<string name="label_send_key" msgid="482252074224462163">"发送"</string>
+ <!-- no translation found for label_search_key (7965186050435796642) -->
+ <skip />
<string name="label_pause_key" msgid="2225922926459730642">"暂停"</string>
<string name="label_wait_key" msgid="5891247853595466039">"等待"</string>
</resources>
diff --git a/java/res/values-zh-rCN/strings-talkback-descriptions.xml b/java/res/values-zh-rCN/strings-talkback-descriptions.xml
index 3d25cd1da..ee025f689 100644
--- a/java/res/values-zh-rCN/strings-talkback-descriptions.xml
+++ b/java/res/values-zh-rCN/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"地点"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"符号"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"表情图标"</string>
+ <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+ <skip />
+ <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+ <skip />
</resources>
diff --git a/java/res/values-zh-rCN/strings.xml b/java/res/values-zh-rCN/strings.xml
index 41fe0bfb6..4f5cddda7 100644
--- a/java/res/values-zh-rCN/strings.xml
+++ b/java/res/values-zh-rCN/strings.xml
@@ -21,7 +21,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_input_options" msgid="3909945612939668554">"输入选项"</string>
- <string name="english_ime_research_log" msgid="8492602295696577851">"研究记录命令"</string>
<string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"查找联系人姓名"</string>
<string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"拼写检查工具会使用您的联系人列表中的条目"</string>
<string name="vibrate_on_keypress" msgid="5258079494276955460">"按键振动"</string>
@@ -84,8 +83,6 @@
<string name="select_language" msgid="3693815588777926848">"输入语言"</string>
<string name="hint_add_to_dictionary" msgid="573678656946085380">"再次触摸即可保存"</string>
<string name="has_dictionary" msgid="6071847973466625007">"有可用词典"</string>
- <string name="prefs_enable_log" msgid="6620424505072963557">"启用用户反馈"</string>
- <string name="prefs_description_log" msgid="7525225584555429211">"自动发送使用情况统计信息和崩溃报告,帮助改进此输入法。"</string>
<string name="keyboard_layout" msgid="8451164783510487501">"键盘主题"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"英语(英国)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"英语(美国)"</string>
@@ -118,7 +115,6 @@
<string name="enable" msgid="5031294444630523247">"启用"</string>
<string name="not_now" msgid="6172462888202790482">"以后再说"</string>
<string name="custom_input_style_already_exists" msgid="8008728952215449707">"已经存在相同的输入风格:<xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
- <string name="prefs_usability_study_mode" msgid="1261130555134595254">"可用性研究模式"</string>
<string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"按键长按延迟"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"按键振动时长"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"按键音量"</string>
diff --git a/java/res/values-zh-rHK/strings-action-keys.xml b/java/res/values-zh-rHK/strings-action-keys.xml
index e95251696..4dc5c8450 100644
--- a/java/res/values-zh-rHK/strings-action-keys.xml
+++ b/java/res/values-zh-rHK/strings-action-keys.xml
@@ -25,6 +25,8 @@
<string name="label_previous_key" msgid="1421141755779895275">"上一步"</string>
<string name="label_done_key" msgid="7564866296502630852">"完成"</string>
<string name="label_send_key" msgid="482252074224462163">"傳送"</string>
+ <!-- no translation found for label_search_key (7965186050435796642) -->
+ <skip />
<string name="label_pause_key" msgid="2225922926459730642">"暫停"</string>
<string name="label_wait_key" msgid="5891247853595466039">"等候"</string>
</resources>
diff --git a/java/res/values-zh-rHK/strings-talkback-descriptions.xml b/java/res/values-zh-rHK/strings-talkback-descriptions.xml
index baa56e4cd..3484bf33b 100644
--- a/java/res/values-zh-rHK/strings-talkback-descriptions.xml
+++ b/java/res/values-zh-rHK/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"地點"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"符號"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"表情符號"</string>
+ <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+ <skip />
+ <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+ <skip />
</resources>
diff --git a/java/res/values-zh-rHK/strings.xml b/java/res/values-zh-rHK/strings.xml
index 34fa9c037..1d6030e0a 100644
--- a/java/res/values-zh-rHK/strings.xml
+++ b/java/res/values-zh-rHK/strings.xml
@@ -21,7 +21,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_input_options" msgid="3909945612939668554">"輸入選項"</string>
- <string name="english_ime_research_log" msgid="8492602295696577851">"研究記錄指令"</string>
<string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"查找聯絡人姓名"</string>
<string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"拼字檢查程式使用您的聯絡人名單中的各項記錄"</string>
<string name="vibrate_on_keypress" msgid="5258079494276955460">"按鍵時震動"</string>
@@ -84,8 +83,6 @@
<string name="select_language" msgid="3693815588777926848">"輸入語言"</string>
<string name="hint_add_to_dictionary" msgid="573678656946085380">"再次輕觸即可儲存"</string>
<string name="has_dictionary" msgid="6071847973466625007">"可使用字典"</string>
- <string name="prefs_enable_log" msgid="6620424505072963557">"啟用用戶意見反映"</string>
- <string name="prefs_description_log" msgid="7525225584555429211">"自動傳送使用統計資料和當機報告,協助改良這個輸入法編輯器"</string>
<string name="keyboard_layout" msgid="8451164783510487501">"鍵盤主題"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"英文 (英國)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"英文 (美國)"</string>
@@ -118,7 +115,6 @@
<string name="enable" msgid="5031294444630523247">"啟用"</string>
<string name="not_now" msgid="6172462888202790482">"暫時不要"</string>
<string name="custom_input_style_already_exists" msgid="8008728952215449707">"已存在相同的輸入樣式:<xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
- <string name="prefs_usability_study_mode" msgid="1261130555134595254">"可用性研究模式"</string>
<string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"長按鍵延遲"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"按鍵震動時間"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"按鍵音量"</string>
diff --git a/java/res/values-zh-rTW/strings-action-keys.xml b/java/res/values-zh-rTW/strings-action-keys.xml
index 00daa5c63..9b8be9426 100644
--- a/java/res/values-zh-rTW/strings-action-keys.xml
+++ b/java/res/values-zh-rTW/strings-action-keys.xml
@@ -25,6 +25,8 @@
<string name="label_previous_key" msgid="1421141755779895275">"返回"</string>
<string name="label_done_key" msgid="7564866296502630852">"完成"</string>
<string name="label_send_key" msgid="482252074224462163">"傳送"</string>
+ <!-- no translation found for label_search_key (7965186050435796642) -->
+ <skip />
<string name="label_pause_key" msgid="2225922926459730642">"暫停"</string>
<string name="label_wait_key" msgid="5891247853595466039">"等待"</string>
</resources>
diff --git a/java/res/values-zh-rTW/strings-talkback-descriptions.xml b/java/res/values-zh-rTW/strings-talkback-descriptions.xml
index d8a0cc4e7..4d0352ec2 100644
--- a/java/res/values-zh-rTW/strings-talkback-descriptions.xml
+++ b/java/res/values-zh-rTW/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"地點"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"符號"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"表情"</string>
+ <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+ <skip />
+ <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+ <skip />
</resources>
diff --git a/java/res/values-zh-rTW/strings.xml b/java/res/values-zh-rTW/strings.xml
index 9c9f5e052..ae74d055c 100644
--- a/java/res/values-zh-rTW/strings.xml
+++ b/java/res/values-zh-rTW/strings.xml
@@ -21,7 +21,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_input_options" msgid="3909945612939668554">"輸入選項"</string>
- <string name="english_ime_research_log" msgid="8492602295696577851">"研究紀錄指令"</string>
<string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"查詢聯絡人姓名"</string>
<string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"拼字檢查程式使用您的聯絡人清單項目"</string>
<string name="vibrate_on_keypress" msgid="5258079494276955460">"按鍵時震動"</string>
@@ -84,8 +83,6 @@
<string name="select_language" msgid="3693815588777926848">"輸入語言"</string>
<string name="hint_add_to_dictionary" msgid="573678656946085380">"再次輕觸即可儲存"</string>
<string name="has_dictionary" msgid="6071847973466625007">"可用的字典"</string>
- <string name="prefs_enable_log" msgid="6620424505072963557">"啟用使用者意見回饋"</string>
- <string name="prefs_description_log" msgid="7525225584555429211">"自動傳送使用統計資料和當機報告,協助改善此輸入法編輯器"</string>
<string name="keyboard_layout" msgid="8451164783510487501">"鍵盤主題"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"英文 (英國)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"英文 (美國)"</string>
@@ -118,7 +115,6 @@
<string name="enable" msgid="5031294444630523247">"啟用"</string>
<string name="not_now" msgid="6172462888202790482">"暫時不要"</string>
<string name="custom_input_style_already_exists" msgid="8008728952215449707">"已存在相同的輸入樣式:<xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
- <string name="prefs_usability_study_mode" msgid="1261130555134595254">"使用習慣學習模式"</string>
<string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"按鍵長按延遲"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"按鍵震動持續時間"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"按鍵音量"</string>
diff --git a/java/res/values-zu/strings-action-keys.xml b/java/res/values-zu/strings-action-keys.xml
index 6cd5e8c99..5d60a6cca 100644
--- a/java/res/values-zu/strings-action-keys.xml
+++ b/java/res/values-zu/strings-action-keys.xml
@@ -25,6 +25,8 @@
<string name="label_previous_key" msgid="1421141755779895275">"Okwedlule"</string>
<string name="label_done_key" msgid="7564866296502630852">"Kwenziwe"</string>
<string name="label_send_key" msgid="482252074224462163">"Thumela"</string>
+ <!-- no translation found for label_search_key (7965186050435796642) -->
+ <skip />
<string name="label_pause_key" msgid="2225922926459730642">"Misa isikhashana"</string>
<string name="label_wait_key" msgid="5891247853595466039">"Linda"</string>
</resources>
diff --git a/java/res/values-zu/strings-talkback-descriptions.xml b/java/res/values-zu/strings-talkback-descriptions.xml
index 3f7ae7e50..ff7c3c999 100644
--- a/java/res/values-zu/strings-talkback-descriptions.xml
+++ b/java/res/values-zu/strings-talkback-descriptions.xml
@@ -71,4 +71,12 @@
<string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"Izindawo"</string>
<string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"Amasimbuli"</string>
<string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"Izithombe-mzwelo"</string>
+ <!-- no translation found for spoken_description_upper_case (4904835255229433916) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0049 (4743162182646977944) -->
+ <skip />
+ <!-- no translation found for spoken_letter_0130 (4766619646231612274) -->
+ <skip />
+ <!-- no translation found for spoken_emoji_unknown (5981009928135394306) -->
+ <skip />
</resources>
diff --git a/java/res/values-zu/strings.xml b/java/res/values-zu/strings.xml
index c79d81dcc..a0054cbde 100644
--- a/java/res/values-zu/strings.xml
+++ b/java/res/values-zu/strings.xml
@@ -21,7 +21,6 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="english_ime_input_options" msgid="3909945612939668554">"Okukhethwa kukho kokungenayo"</string>
- <string name="english_ime_research_log" msgid="8492602295696577851">"Imiyalo yefayela lokungena lokucwaninga"</string>
<string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"Bheka amagama woxhumana nabo"</string>
<string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"Isihloli sokupela sisebenzisa okungenayo kusuka kuhlu lalabo oxhumana nabo"</string>
<string name="vibrate_on_keypress" msgid="5258079494276955460">"Dlidlizelisa ngokucindezela inkinobho"</string>
@@ -84,8 +83,6 @@
<string name="select_language" msgid="3693815588777926848">"Izilimi zokufakwayo"</string>
<string name="hint_add_to_dictionary" msgid="573678656946085380">"Thinta futhi ukuze ulondoloze"</string>
<string name="has_dictionary" msgid="6071847973466625007">"Isichazamazwi siyatholakala"</string>
- <string name="prefs_enable_log" msgid="6620424505072963557">"Vumela impendulo yomsebenzisi"</string>
- <string name="prefs_description_log" msgid="7525225584555429211">"Siza ukuthuthukisa lo mhleli wendlela yokufaka ngokusithumela ngokuzenzakalela izibalo zokusetshenziswa nokukhubeka."</string>
<string name="keyboard_layout" msgid="8451164783510487501">"Indikimba yekhibhodi"</string>
<string name="subtype_en_GB" msgid="88170601942311355">"i-English(UK)"</string>
<string name="subtype_en_US" msgid="6160452336634534239">"i-English (US)"</string>
@@ -118,7 +115,6 @@
<string name="enable" msgid="5031294444630523247">"Nika amandla"</string>
<string name="not_now" msgid="6172462888202790482">"Hhayi manje"</string>
<string name="custom_input_style_already_exists" msgid="8008728952215449707">"Isitayela sokufaka esifanayo sesivele sikhona: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
- <string name="prefs_usability_study_mode" msgid="1261130555134595254">"Imodi yesitadi yokusebenziseka"</string>
<string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"Ukulibazisa ukucindezela isikhashana ukhiye"</string>
<string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"Ubude besikhathi sokudlidliza ukucindezela ukhiye"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"Ivolumu yomsindo wokucindezela ukhiye"</string>
diff --git a/java/res/values/attrs.xml b/java/res/values/attrs.xml
index 307ef1351..775a90c48 100644
--- a/java/res/values/attrs.xml
+++ b/java/res/values/attrs.xml
@@ -30,10 +30,6 @@
<attr name="keyPreviewTextViewStyle" format="reference"/>
<!-- EmojiPalettesView style -->
<attr name="emojiPalettesViewStyle" format="reference" />
- <!-- TabWidget of EmojiPlettesView style -->
- <attr name="emojiTabWidgetStyle" format="reference" />
- <!-- EmojiCategoryPageIndicatorView style -->
- <attr name="emojiCategoryPageIndicatorViewStyle" format="reference" />
<!-- MoreKeysKeyboard style -->
<attr name="moreKeysKeyboardStyle" format="reference" />
<!-- MoreKeysKeyboardView style -->
@@ -176,6 +172,11 @@
</declare-styleable>
<declare-styleable name="EmojiPalettesView">
+ <attr name="categoryIndicatorEnabled" format="boolean" />
+ <attr name="categoryIndicatorDrawable" format="reference" />
+ <attr name="categoryIndicatorBackground" format="reference" />
+ <attr name="categoryPageIndicatorColor" format="color" />
+ <attr name="categoryPageIndicatorBackground" format="color" />
<attr name="iconEmojiRecentsTab" format="reference" />
<attr name="iconEmojiCategory1Tab" format="reference" />
<attr name="iconEmojiCategory2Tab" format="reference" />
@@ -185,10 +186,6 @@
<attr name="iconEmojiCategory6Tab" format="reference" />
</declare-styleable>
- <declare-styleable name="EmojiCategoryPageIndicatorView">
- <attr name="emojiCategoryPageIndicatorColor" format="color" />
- </declare-styleable>
-
<declare-styleable name="SuggestionStripView">
<attr name="suggestionStripOptions" format="integer">
<!-- This should be aligned with SuggestionStripLayoutHelper.AUTO_CORRECT_* and etc. -->
diff --git a/java/res/values/donottranslate.xml b/java/res/values/donottranslate.xml
index 415dd0b65..83d082f82 100644
--- a/java/res/values/donottranslate.xml
+++ b/java/res/values/donottranslate.xml
@@ -137,6 +137,4 @@
<item>tr:AsciiCapable,SupportTouchPositionCorrection,EmojiCapable</item>
<item>qwerty</item>
</string-array>
-
- <string name="settings_warning_researcher_mode">Attention! You are using the special keyboard for research purposes.</string>
</resources>
diff --git a/java/res/values/research_strings.xml b/java/res/values/research_strings.xml
deleted file mode 100644
index e73871109..000000000
--- a/java/res/values/research_strings.xml
+++ /dev/null
@@ -1,41 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-**
-** Copyright 2012, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <!-- Contents of note explaining what data is collected and how. -->
- <!-- TODO: remove translatable=false attribute once text is stable -->
- <string name="research_splash_content" translatable="false"></string>
- <!-- Account type allowed for inclusion in user-invoked feedback logs [CHAR LIMIT=38] -->
- <string name="research_account_type" translatable="false"></string>
- <!-- Account domain allowed for inclusion in user-invoked feedback logs [CHAR LIMIT=38] -->
- <string name="research_allowed_account_domain" translatable="false"></string>
-
- <!-- Menu option that lets user send feedback for research purposes about the IME [CHAR LIMIT=38] -->
- <!-- TODO: remove translatable=false attribute once text is stable -->
- <string name="research_feedback_menu_option" translatable="false">Send feedback</string>
- <!-- Title of dialog box that lets user send feedback for research purposes about the IME [CHAR LIMIT=38] -->
- <!-- TODO: remove translatable=false attribute once text is stable -->
- <string name="research_feedback_dialog_title" translatable="false">Send feedback</string>
- <!-- Hint to user about the text entry field where they should enter research feedback [CHAR LIMIT=40] -->
- <!-- TODO: remove translatable=false attribute once text is stable -->
- <string name="research_feedback_hint" translatable="false">Enter your feedback here.</string>
- <!-- Message informing the user that the feedback string must not be empty [CHAR LIMIT=100] -->
- <!-- TODO: remove translatable=false attribute once text is stable -->
- <string name="research_feedback_empty_feedback_error_message" translatable="false">The feedback field must not be empty.</string>
-</resources>
diff --git a/java/res/values/strings-action-keys.xml b/java/res/values/strings-action-keys.xml
index 7003784c6..96b2e7dda 100644
--- a/java/res/values/strings-action-keys.xml
+++ b/java/res/values/strings-action-keys.xml
@@ -29,6 +29,8 @@
<string name="label_done_key">Done</string>
<!-- Label for soft enter key when it performs SEND action. Must be short to fit on key. 5 chars or less is preferable. [CHAR LIMIT=7] -->
<string name="label_send_key">Send</string>
+ <!-- Label for soft enter key when it performs SEARCH action. Must be short to fit on key. 5 chars or less is preferable. [CHAR LIMIT=7] -->
+ <string name="label_search_key">Search</string>
<!-- Label for "Pause" key of phone number keyboard. Must be short to fit on key. 5 chars or less is preferable. [CHAR LIMIT=7] -->
<string name="label_pause_key">Pause</string>
<!-- Label for "Wait" key of phone number keyboard. Must be short to fit on key. 5 chars or less is preferable. [CHAR LIMIT=7]-->
diff --git a/java/res/values/strings-talkback-descriptions.xml b/java/res/values/strings-talkback-descriptions.xml
index 14455d088..d7978b0c8 100644
--- a/java/res/values/strings-talkback-descriptions.xml
+++ b/java/res/values/strings-talkback-descriptions.xml
@@ -128,11 +128,13 @@
<string name="spoken_descrption_emoji_category_emoticons">Emoticons</string>
<!-- Description of an upper case letter of LOWER_LETTER. -->
- <string name="spoke_description_upper_case">Capital <xliff:g id="LOWER_LETTER" example="A, E, ligature">%s</xliff:g></string>
+ <string name="spoken_description_upper_case">Capital <xliff:g id="LOWER_LETTER" example="A, E, ligature">%s</xliff:g></string>
<!-- Spoken description for Unicode code point U+0049: "I" LATIN CAPITAL LETTER I
Note that depending on locale, the lower-case of this letter is U+0069 or U+0131. -->
<string name="spoken_letter_0049">Capital I</string>
<!-- Spoken description for Unicode code point U+0130: "İ" LATIN CAPITAL LETTER I WITH DOT ABOVE
Note that depending on locale, the lower-case of this letter is U+0069 or U+0131. -->
<string name="spoken_letter_0130">Capital I, dot above</string>
+ <!-- Spoken description for unknown emoji code point. -->
+ <string name="spoken_emoji_unknown">Unknown emoji</string>
</resources>
diff --git a/java/res/values/strings.xml b/java/res/values/strings.xml
index 9f93055e2..2ad7ce592 100644
--- a/java/res/values/strings.xml
+++ b/java/res/values/strings.xml
@@ -21,9 +21,6 @@
<!-- Title for Latin keyboard input options dialog [CHAR LIMIT=25] -->
<string name="english_ime_input_options">Input options</string>
- <!-- Title for Latin keyboard research log dialog, which contains special commands for users that contribute data for research. [CHAR LIMIT=33] -->
- <string name="english_ime_research_log">Research Log Commands</string>
-
<!-- Title for the spell checker option to turn on/off contact names lookup [CHAR LIMIT=25] -->
<string name="use_contacts_for_spellchecking_option_title">Look up contact names</string>
@@ -166,68 +163,8 @@
<!-- Title for input language selection screen -->
<string name="language_selection_title">Input languages</string>
- <!-- Title for dialog option to let users cancel logging and delete log for this session [CHAR LIMIT=35] -->
- <!-- TODO: remove translatable=false attribute once text is stable -->
- <string name="research_do_not_log_this_session" translatable="false">Suspend logging</string>
- <!-- Title for dialog option to let users reenable logging [CHAR LIMIT=35] -->
- <!-- TODO: remove translatable=false attribute once text is stable -->
- <string name="research_enable_session_logging" translatable="false">Enable logging</string>
- <!-- Toast notification that the system is processing the request to delete the log for this session [CHAR LIMIT=35] -->
- <!-- TODO: remove translatable=false attribute once text is stable -->
- <string name="research_notify_session_log_deleting" translatable="false">Deleting session log</string>
- <!-- Toast notification that the system has successfully deleted the log for this session [CHAR LIMIT=35] -->
- <!-- TODO: remove translatable=false attribute once text is stable -->
- <string name="research_notify_logging_suspended" translatable="false">Logging temporarily suspended. To disable permanently, go to Android Keyboard Settings</string>
- <!-- Toast notification that the system has failed to delete the log for this session [CHAR LIMIT=35] -->
- <!-- TODO: remove translatable=false attribute once text is stable -->
- <string name="research_notify_session_log_not_deleted" translatable="false">Session log NOT deleted</string>
- <!-- Toast notification that the system is enabling logging [CHAR LIMIT=35] -->
- <!-- TODO: remove translatable=false attribute once text is stable -->
- <string name="research_notify_session_logging_enabled" translatable="false">Session logging enabled</string>
-
- <!-- Text for checkbox option to include user data in feedback for research purposes [CHAR LIMIT=50] -->
- <!-- TODO: remove translatable=false attribute once text is stable -->
- <string name="research_feedback_include_history_label" translatable="false">Include session history</string>
- <!-- Text for checkbox option to include user account name in feedback for research purposes [CHAR LIMIT=50] -->
- <!-- TODO: remove translatable=false attribute once text is stable -->
- <string name="research_feedback_include_account_name_label" translatable="false">Include account name</string>
- <!-- Text for checkbox option to include a recording in feedback for research purposes [CHAR LIMIT=50] -->
- <!-- TODO: remove translatable=false attribute once text is stable -->
- <string name="research_feedback_include_recording_label" translatable="false">Include recorded demonstration</string>
- <!-- Dialog button choice to send research feedback [CHAR LIMIT=35] -->
- <!-- TODO: remove translatable=false attribute once text is stable -->
- <string name="research_feedback_send" translatable="false">Send</string>
- <!-- Dialog button choice to cancel sending research feedback [CHAR LIMIT=35] -->
- <!-- TODO: remove translatable=false attribute once text is stable -->
- <string name="research_feedback_cancel" translatable="false">Cancel</string>
- <!-- Temporary notification to provide user with instructions about stopping a recording
- - operation[CHAR LIMIT=100] -->
- <!-- TODO: remove translatable=false attribute once text is stable -->
- <string name="research_feedback_demonstration_instructions" translatable="false">Please demonstrate the issue you are writing about.\n\nWhen finished, select the \"Bug?\" button again."</string>
<!-- Title of a preference to send feedback. [CHAR LIMIT=30]-->
<string name="send_feedback">Send feedback</string>
- <!-- Temporary notification of recording failure [CHAR LIMIT=100] -->
- <!-- TODO: remove translatable=false attribute once text is stable -->
- <string name="research_feedback_recording_failure" translatable="false">Recording cancelled due to timeout</string>
- <!-- Toast notification to ask user to quit the research feedback dialog to perform this operation [CHAR LIMIT=100] -->
- <!-- TODO: remove translatable=false attribute once text is stable -->
- <string name="research_please_exit_feedback_form" translatable="false">Please exit the feedback dialog to access the research log menu</string>
-
- <!-- Title of dialog shown at start informing users about contributing research usage data-->
- <!-- TODO: remove translatable=false attribute once text is stable -->
- <string name="research_splash_title" translatable="false">Warning</string>
-
- <!-- Toast message informing users that logging has been disabled -->
- <!-- TODO: remove translatable=false attribute once text is stable -->
- <string name="research_logging_disabled" translatable="false">Logging Disabled</string>
-
- <!-- Name for the research uploading service to be displayed to users. [CHAR LIMIT=50] -->
- <!-- TODO: remove translatable=false attribute once text is stable -->
- <string name="research_log_uploader_name" translatable="false">Research Uploader Service</string>
-
- <!-- Name for the research replaying service to be displayed to users. [CHAR LIMIT=50] -->
- <!-- TODO: remove translatable=false attribute once text is stable -->
- <string name="research_log_replayer_name" translatable="false">Research Replayer Service</string>
<!-- Preference for input language selection -->
<string name="select_language">Input languages</string>
@@ -238,11 +175,6 @@
<!-- Inform the user that a particular language has an available dictionary -->
<string name="has_dictionary">Dictionary available</string>
- <!-- Preferences item for enabling to send user statistics for development only diagnostics -->
- <string name="prefs_enable_log">Enable user feedback</string>
- <!-- Description for enabling to send user statistics for development only diagnostics -->
- <string name="prefs_description_log">Help improve this input method editor by automatically sending usage statistics and crash reports</string>
-
<!-- Title of the item to change the keyboard theme [CHAR LIMIT=20]-->
<string name="keyboard_layout">Keyboard theme</string>
@@ -390,8 +322,6 @@ mobile devices. [CHAR LIMIT=25] -->
<!-- Toast text to describe the same input style already exists [CHAR LIMIT=64]-->
<string name="custom_input_style_already_exists">"The same input style already exists: <xliff:g id="INPUT_STYLE_NAME" example="English (Dvorak)">%s</xliff:g>"</string>
- <!-- Title of an option for usability study mode -->
- <string name="prefs_usability_study_mode">Usability study mode</string>
<!-- Title of the settings for key long press delay [CHAR LIMIT=35] -->
<string name="prefs_key_longpress_timeout_settings">Key long press delay</string>
<!-- Title of the settings for keypress vibration duration [CHAR LIMIT=35] -->
diff --git a/java/res/values/themes-common.xml b/java/res/values/themes-common.xml
index c5d3f55a1..df26fb3b4 100644
--- a/java/res/values/themes-common.xml
+++ b/java/res/values/themes-common.xml
@@ -110,8 +110,6 @@
<!-- Though {@link EmojiPalettesView} doesn't extend {@link KeyboardView}, some views inside it,
for instance delete button, need themed {@link KeyboardView} attributes. -->
<style name="EmojiPalettesView" />
- <style name="EmojiTabWidget" />
- <style name="EmojiCategoryPageIndicatorView" />
<style name="MoreKeysKeyboard" />
<style
name="MoreKeysKeyboardView"
diff --git a/java/res/values/themes-ics.xml b/java/res/values/themes-ics.xml
index f7ca5a340..319b4aeed 100644
--- a/java/res/values/themes-ics.xml
+++ b/java/res/values/themes-ics.xml
@@ -25,8 +25,6 @@
<item name="mainKeyboardViewStyle">@style/MainKeyboardView.ICS</item>
<item name="keyPreviewTextViewStyle">@style/KeyPreviewTextView.ICS</item>
<item name="emojiPalettesViewStyle">@style/EmojiPalettesView.ICS</item>
- <item name="emojiTabWidgetStyle">@style/EmojiTabWidget.ICS</item>
- <item name="emojiCategoryPageIndicatorViewStyle">@style/EmojiCategoryPageIndicatorView.ICS</item>
<item name="moreKeysKeyboardStyle">@style/MoreKeysKeyboard.ICS</item>
<item name="moreKeysKeyboardViewStyle">@style/MoreKeysKeyboardView.ICS</item>
<item name="suggestionStripViewStyle">@style/SuggestionStripView.ICS</item>
@@ -89,6 +87,11 @@
name="EmojiPalettesView.ICS"
parent="MainKeyboardView.ICS"
>
+ <item name="categoryIndicatorEnabled">true</item>
+ <item name="categoryIndicatorDrawable">@drawable/emoji_category_tab_selected_ics</item>
+ <item name="categoryIndicatorBackground">@drawable/emoji_category_tab_unselected_holo_dark</item>
+ <item name="categoryPageIndicatorColor">@color/highlight_color_ics</item>
+ <item name="categoryPageIndicatorBackground">@color/emoji_tab_page_indicator_background_holo</item>
<item name="iconEmojiRecentsTab">@drawable/ic_emoji_recents_holo_dark</item>
<item name="iconEmojiCategory1Tab">@drawable/ic_emoji_people_holo_dark</item>
<item name="iconEmojiCategory2Tab">@drawable/ic_emoji_objects_holo_dark</item>
@@ -97,15 +100,6 @@
<item name="iconEmojiCategory5Tab">@drawable/ic_emoji_symbols_holo_dark</item>
<item name="iconEmojiCategory6Tab">@drawable/ic_emoji_emoticons_holo_dark</item>
</style>
- <style name="EmojiCategoryPageIndicatorView.ICS">
- <item name="android:background">@color/emoji_tab_page_indicator_background_holo</item>
- <item name="emojiCategoryPageIndicatorColor">@color/highlight_color_ics</item>
- </style>
- <style name="EmojiTabWidget.ICS">
- <item name="android:background">@drawable/emoji_category_tab_selected_ics</item>
- <item name="android:tabStripLeft">@drawable/emoji_category_tab_unselected_holo_dark</item>
- <item name="android:tabStripRight">@drawable/emoji_category_tab_unselected_holo_dark</item>
- </style>
<style
name="MoreKeysKeyboard.ICS"
parent="Keyboard.ICS"
diff --git a/java/res/values/themes-klp.xml b/java/res/values/themes-klp.xml
index 96d0478ba..208723dd3 100644
--- a/java/res/values/themes-klp.xml
+++ b/java/res/values/themes-klp.xml
@@ -25,8 +25,6 @@
<item name="mainKeyboardViewStyle">@style/MainKeyboardView.KLP</item>
<item name="keyPreviewTextViewStyle">@style/KeyPreviewTextView.KLP</item>
<item name="emojiPalettesViewStyle">@style/EmojiPalettesView.KLP</item>
- <item name="emojiTabWidgetStyle">@style/EmojiTabWidget.KLP</item>
- <item name="emojiCategoryPageIndicatorViewStyle">@style/EmojiCategoryPageIndicatorView.KLP</item>
<item name="moreKeysKeyboardStyle">@style/MoreKeysKeyboard.KLP</item>
<item name="moreKeysKeyboardViewStyle">@style/MoreKeysKeyboardView.KLP</item>
<item name="suggestionStripViewStyle">@style/SuggestionStripView.KLP</item>
@@ -89,6 +87,11 @@
name="EmojiPalettesView.KLP"
parent="MainKeyboardView.KLP"
>
+ <item name="categoryIndicatorEnabled">true</item>
+ <item name="categoryIndicatorDrawable">@drawable/emoji_category_tab_selected_klp</item>
+ <item name="categoryIndicatorBackground">@drawable/emoji_category_tab_unselected_holo_dark</item>
+ <item name="categoryPageIndicatorColor">@color/highlight_color_klp</item>
+ <item name="categoryPageIndicatorBackground">@color/emoji_tab_page_indicator_background_holo</item>
<item name="iconEmojiRecentsTab">@drawable/ic_emoji_recents_holo_dark</item>
<item name="iconEmojiCategory1Tab">@drawable/ic_emoji_people_holo_dark</item>
<item name="iconEmojiCategory2Tab">@drawable/ic_emoji_objects_holo_dark</item>
@@ -97,15 +100,6 @@
<item name="iconEmojiCategory5Tab">@drawable/ic_emoji_symbols_holo_dark</item>
<item name="iconEmojiCategory6Tab">@drawable/ic_emoji_emoticons_holo_dark</item>
</style>
- <style name="EmojiCategoryPageIndicatorView.KLP">
- <item name="android:background">@color/emoji_tab_page_indicator_background_holo</item>
- <item name="emojiCategoryPageIndicatorColor">@color/highlight_color_klp</item>
- </style>
- <style name="EmojiTabWidget.KLP">
- <item name="android:background">@drawable/emoji_category_tab_selected_klp</item>
- <item name="android:tabStripLeft">@drawable/emoji_category_tab_unselected_holo_dark</item>
- <item name="android:tabStripRight">@drawable/emoji_category_tab_unselected_holo_dark</item>
- </style>
<style
name="MoreKeysKeyboard.KLP"
parent="Keyboard.KLP"
diff --git a/java/res/values/themes-lxx-dark.xml b/java/res/values/themes-lxx-dark.xml
index 98c045def..e9a295c67 100644
--- a/java/res/values/themes-lxx-dark.xml
+++ b/java/res/values/themes-lxx-dark.xml
@@ -25,8 +25,6 @@
<item name="mainKeyboardViewStyle">@style/MainKeyboardView.LXX_Dark</item>
<item name="keyPreviewTextViewStyle">@style/KeyPreviewTextView.LXX_Dark</item>
<item name="emojiPalettesViewStyle">@style/EmojiPalettesView.LXX_Dark</item>
- <item name="emojiTabWidgetStyle">@style/EmojiTabWidget.LXX_Dark</item>
- <item name="emojiCategoryPageIndicatorViewStyle">@style/EmojiCategoryPageIndicatorView.LXX_Dark</item>
<item name="moreKeysKeyboardStyle">@style/MoreKeysKeyboard.LXX_Dark</item>
<item name="moreKeysKeyboardViewStyle">@style/MoreKeysKeyboardView.LXX_Dark</item>
<item name="suggestionStripViewStyle">@style/SuggestionStripView.LXX_Dark</item>
@@ -90,6 +88,9 @@
name="EmojiPalettesView.LXX_Dark"
parent="MainKeyboardView.LXX_Dark"
>
+ <item name="categoryIndicatorEnabled">false</item>
+ <item name="categoryPageIndicatorColor">@color/highlight_color_lxx_dark</item>
+ <item name="categoryPageIndicatorBackground">@color/emoji_tab_page_indicator_background_lxx_dark</item>
<!-- TODO: Update those icons to LXX_Dark theme. -->
<item name="iconEmojiRecentsTab">@drawable/ic_emoji_recents_holo_dark</item>
<item name="iconEmojiCategory1Tab">@drawable/ic_emoji_people_holo_dark</item>
@@ -99,15 +100,6 @@
<item name="iconEmojiCategory5Tab">@drawable/ic_emoji_symbols_holo_dark</item>
<item name="iconEmojiCategory6Tab">@drawable/ic_emoji_emoticons_holo_dark</item>
</style>
- <style name="EmojiCategoryPageIndicatorView.LXX_Dark">
- <item name="android:background">@color/emoji_tab_page_indicator_background_lxx_dark</item>
- <item name="emojiCategoryPageIndicatorColor">@color/highlight_color_lxx_dark</item>
- </style>
- <style name="EmojiTabWidget.LXX_Dark">
- <item name="android:background">@drawable/emoji_category_tab_selected_lxx_dark</item>
- <item name="android:tabStripLeft">@drawable/emoji_category_tab_unselected_lxx_dark</item>
- <item name="android:tabStripRight">@drawable/emoji_category_tab_unselected_lxx_dark</item>
- </style>
<style
name="MoreKeysKeyboard.LXX_Dark"
parent="Keyboard.LXX_Dark"
diff --git a/java/res/values/urls.xml b/java/res/values/urls.xml
deleted file mode 100644
index a8e9ad7d3..000000000
--- a/java/res/values/urls.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-**
-** Copyright 2012, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
--->
-<resources>
- <string name="research_logger_upload_url" translatable="false"></string>
-</resources>
diff --git a/java/res/xml-sw600dp/key_styles_enter.xml b/java/res/xml-sw600dp/key_styles_enter.xml
index 55f00ef7d..740bf3543 100644
--- a/java/res/xml-sw600dp/key_styles_enter.xml
+++ b/java/res/xml-sw600dp/key_styles_enter.xml
@@ -131,7 +131,6 @@
<key-style
latin:styleName="enterKeyStyle"
latin:keySpec="!text/label_go_key|!code/key_enter"
- latin:backgroundType="action"
latin:parentStyle="defaultEnterKeyStyle" />
</case>
<case
@@ -150,7 +149,6 @@
<key-style
latin:styleName="enterKeyStyle"
latin:keySpec="!text/label_next_key|!code/key_enter"
- latin:backgroundType="action"
latin:parentStyle="defaultEnterKeyStyle" />
</case>
<case
@@ -169,7 +167,6 @@
<key-style
latin:styleName="enterKeyStyle"
latin:keySpec="!text/label_previous_key|!code/key_enter"
- latin:backgroundType="action"
latin:parentStyle="defaultEnterKeyStyle" />
</case>
<case
@@ -188,7 +185,6 @@
<key-style
latin:styleName="enterKeyStyle"
latin:keySpec="!text/label_done_key|!code/key_enter"
- latin:backgroundType="action"
latin:parentStyle="defaultEnterKeyStyle" />
</case>
<case
@@ -207,11 +203,11 @@
<key-style
latin:styleName="enterKeyStyle"
latin:keySpec="!text/label_send_key|!code/key_enter"
- latin:backgroundType="action"
latin:parentStyle="defaultEnterKeyStyle" />
</case>
<case
latin:imeAction="actionSearch"
+ latin:isIconDefined="search_key"
>
<key-style
latin:styleName="enterKeyStyle"
@@ -220,13 +216,20 @@
latin:parentStyle="defaultEnterKeyStyle" />
</case>
<case
+ latin:imeAction="actionSearch"
+ >
+ <key-style
+ latin:styleName="enterKeyStyle"
+ latin:keySpec="!text/label_search_key|!code/key_enter"
+ latin:parentStyle="defaultEnterKeyStyle" />
+ </case>
+ <case
latin:imeAction="actionCustomLabel"
>
<key-style
latin:styleName="enterKeyStyle"
latin:keySpec="dummy_label|!code/key_enter"
latin:keyLabelFlags="fromCustomActionLabel"
- latin:backgroundType="action"
latin:parentStyle="defaultEnterKeyStyle" />
</case>
<!-- imeAction is either actionNone or actionUnspecified. -->
diff --git a/java/res/xml/key_styles_enter.xml b/java/res/xml/key_styles_enter.xml
index 1a60bcce8..50530e1bf 100644
--- a/java/res/xml/key_styles_enter.xml
+++ b/java/res/xml/key_styles_enter.xml
@@ -298,7 +298,6 @@
<key-style
latin:styleName="enterKeyStyle"
latin:keySpec="!text/label_go_key|!code/key_enter"
- latin:backgroundType="action"
latin:parentStyle="defaultEnterKeyStyle" />
</case>
<case
@@ -317,7 +316,6 @@
<key-style
latin:styleName="enterKeyStyle"
latin:keySpec="!text/label_next_key|!code/key_enter"
- latin:backgroundType="action"
latin:parentStyle="defaultEnterKeyStyle" />
</case>
<case
@@ -336,7 +334,6 @@
<key-style
latin:styleName="enterKeyStyle"
latin:keySpec="!text/label_previous_key|!code/key_enter"
- latin:backgroundType="action"
latin:parentStyle="defaultEnterKeyStyle" />
</case>
<case
@@ -355,7 +352,6 @@
<key-style
latin:styleName="enterKeyStyle"
latin:keySpec="!text/label_done_key|!code/key_enter"
- latin:backgroundType="action"
latin:parentStyle="defaultEnterKeyStyle" />
</case>
<case
@@ -374,11 +370,11 @@
<key-style
latin:styleName="enterKeyStyle"
latin:keySpec="!text/label_send_key|!code/key_enter"
- latin:backgroundType="action"
latin:parentStyle="defaultEnterKeyStyle" />
</case>
<case
latin:imeAction="actionSearch"
+ latin:isIconDefined="search_key"
>
<key-style
latin:styleName="enterKeyStyle"
@@ -387,13 +383,20 @@
latin:parentStyle="defaultEnterKeyStyle" />
</case>
<case
+ latin:imeAction="actionSearch"
+ >
+ <key-style
+ latin:styleName="enterKeyStyle"
+ latin:keySpec="!text/label_search_key|!code/key_enter"
+ latin:parentStyle="defaultEnterKeyStyle" />
+ </case>
+ <case
latin:imeAction="actionCustomLabel"
>
<key-style
latin:styleName="enterKeyStyle"
latin:keySpec="dummy_label|!code/key_enter"
latin:keyLabelFlags="fromCustomActionLabel"
- latin:backgroundType="action"
latin:parentStyle="defaultEnterKeyStyle" />
</case>
<!-- imeAction is either actionNone or actionUnspecified. -->
diff --git a/java/res/xml/prefs.xml b/java/res/xml/prefs.xml
index 61ebb6992..a62986228 100644
--- a/java/res/xml/prefs.xml
+++ b/java/res/xml/prefs.xml
@@ -153,6 +153,7 @@
android:defaultValue="true" />
<CheckBoxPreference
android:key="pref_include_other_imes_in_language_switch_list"
+ android:dependency="pref_show_language_switch_key"
android:title="@string/include_other_imes_in_language_switch_list"
android:summary="@string/include_other_imes_in_language_switch_list_summary"
android:persistent="true"
diff --git a/java/res/xml/prefs_for_debug.xml b/java/res/xml/prefs_for_debug.xml
index c333b0751..1a7fe71fe 100644
--- a/java/res/xml/prefs_for_debug.xml
+++ b/java/res/xml/prefs_for_debug.xml
@@ -21,12 +21,6 @@
android:key="english_ime_debug_settings"
>
<CheckBoxPreference
- android:key="enable_logging"
- android:title="@string/prefs_enable_log"
- android:summary="@string/prefs_description_log"
- android:persistent="true"
- android:defaultValue="false" />
- <CheckBoxPreference
android:key="debug_mode"
android:title="@string/prefs_debug_mode"
android:persistent="true"
@@ -37,11 +31,6 @@
android:persistent="true"
android:defaultValue="false" />
<CheckBoxPreference
- android:key="usability_study_mode"
- android:title="@string/prefs_usability_study_mode"
- android:persistent="true"
- android:defaultValue="false" />
- <CheckBoxPreference
android:key="pref_sliding_key_input_preview"
android:title="@string/sliding_key_input_preview"
android:summary="@string/sliding_key_input_preview_summary"
diff --git a/java/src/com/android/inputmethod/accessibility/AccessibilityUtils.java b/java/src/com/android/inputmethod/accessibility/AccessibilityUtils.java
index d50dd3ee6..27896fd11 100644
--- a/java/src/com/android/inputmethod/accessibility/AccessibilityUtils.java
+++ b/java/src/com/android/inputmethod/accessibility/AccessibilityUtils.java
@@ -114,7 +114,7 @@ public final class AccessibilityUtils {
* @param event The event to check.
* @return {@true} is the event is a touch exploration event
*/
- public boolean isTouchExplorationEvent(final MotionEvent event) {
+ public static boolean isTouchExplorationEvent(final MotionEvent event) {
final int action = event.getAction();
return action == MotionEvent.ACTION_HOVER_ENTER
|| action == MotionEvent.ACTION_HOVER_EXIT
diff --git a/java/src/com/android/inputmethod/accessibility/KeyCodeDescriptionMapper.java b/java/src/com/android/inputmethod/accessibility/KeyCodeDescriptionMapper.java
index 2c87fc1e9..58672ace7 100644
--- a/java/src/com/android/inputmethod/accessibility/KeyCodeDescriptionMapper.java
+++ b/java/src/com/android/inputmethod/accessibility/KeyCodeDescriptionMapper.java
@@ -285,15 +285,14 @@ public final class KeyCodeDescriptionMapper {
if (index >= 0) {
return context.getString(mKeyCodeMap.valueAt(index));
}
- final String accentedLetter = getSpokenAccentedLetterDescriptionId(context, code);
+ final String accentedLetter = getSpokenAccentedLetterDescription(context, code);
if (accentedLetter != null) {
return accentedLetter;
}
- // Here, <code>code</code> may be a base letter.
- final int spokenEmojiId = getSpokenDescriptionId(
- context, code, SPOKEN_EMOJI_RESOURCE_NAME_FORMAT);
- if (spokenEmojiId != 0) {
- return context.getString(spokenEmojiId);
+ // Here, <code>code</code> may be a base (non-accented) letter.
+ final String emojiDescription = getSpokenEmojiDescription(context, code);
+ if (emojiDescription != null) {
+ return emojiDescription;
}
if (isDefinedNonCtrl) {
return Character.toString((char) code);
@@ -304,7 +303,7 @@ public final class KeyCodeDescriptionMapper {
return context.getString(R.string.spoken_description_unknown, code);
}
- private String getSpokenAccentedLetterDescriptionId(final Context context, final int code) {
+ private String getSpokenAccentedLetterDescription(final Context context, final int code) {
final boolean isUpperCase = Character.isUpperCase(code);
final int baseCode = isUpperCase ? Character.toLowerCase(code) : code;
final int baseIndex = mKeyCodeMap.indexOfKey(baseCode);
@@ -314,7 +313,17 @@ public final class KeyCodeDescriptionMapper {
return null;
}
final String spokenText = context.getString(resId);
- return isUpperCase ? context.getString(R.string.spoke_description_upper_case, spokenText)
+ return isUpperCase ? context.getString(R.string.spoken_description_upper_case, spokenText)
+ : spokenText;
+ }
+
+ private String getSpokenEmojiDescription(final Context context, final int code) {
+ final int resId = getSpokenDescriptionId(context, code, SPOKEN_EMOJI_RESOURCE_NAME_FORMAT);
+ if (resId == 0) {
+ return null;
+ }
+ final String spokenText = context.getString(resId);
+ return TextUtils.isEmpty(spokenText) ? context.getString(R.string.spoken_emoji_unknown)
: spokenText;
}
diff --git a/java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityDelegate.java b/java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityDelegate.java
index eed40f4a9..7cae9861c 100644
--- a/java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityDelegate.java
+++ b/java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityDelegate.java
@@ -16,11 +16,12 @@
package com.android.inputmethod.accessibility;
-import android.os.SystemClock;
+import android.content.Context;
import android.support.v4.view.AccessibilityDelegateCompat;
import android.support.v4.view.ViewCompat;
import android.support.v4.view.accessibility.AccessibilityEventCompat;
import android.support.v4.view.accessibility.AccessibilityNodeInfoCompat;
+import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewParent;
@@ -30,6 +31,7 @@ import com.android.inputmethod.keyboard.Key;
import com.android.inputmethod.keyboard.KeyDetector;
import com.android.inputmethod.keyboard.Keyboard;
import com.android.inputmethod.keyboard.KeyboardView;
+import com.android.inputmethod.keyboard.PointerTracker;
public class KeyboardAccessibilityDelegate<KV extends KeyboardView>
extends AccessibilityDelegateCompat {
@@ -37,7 +39,7 @@ public class KeyboardAccessibilityDelegate<KV extends KeyboardView>
protected final KeyDetector mKeyDetector;
private Keyboard mKeyboard;
private KeyboardAccessibilityNodeProvider mAccessibilityNodeProvider;
- private Key mLastHoverKey;
+ private Key mCurrentHoverKey;
public KeyboardAccessibilityDelegate(final KV keyboardView, final KeyDetector keyDetector) {
super();
@@ -65,10 +67,31 @@ public class KeyboardAccessibilityDelegate<KV extends KeyboardView>
mKeyboard = keyboard;
}
- protected Keyboard getKeyboard() {
+ protected final Keyboard getKeyboard() {
return mKeyboard;
}
+ protected final void setCurrentHoverKey(final Key key) {
+ mCurrentHoverKey = key;
+ }
+
+ protected final Key getCurrentHoverKey() {
+ return mCurrentHoverKey;
+ }
+
+ /**
+ * Sends a window state change event with the specified string resource id.
+ *
+ * @param resId The string resource id of the text to send with the event.
+ */
+ protected void sendWindowStateChanged(final int resId) {
+ if (resId == 0) {
+ return;
+ }
+ final Context context = mKeyboardView.getContext();
+ sendWindowStateChanged(context.getString(resId));
+ }
+
/**
* Sends a window state change event with the specified text.
*
@@ -114,119 +137,157 @@ public class KeyboardAccessibilityDelegate<KV extends KeyboardView>
}
/**
+ * Get a key that a hover event is on.
+ *
+ * @param event The hover event.
+ * @return key The key that the <code>event</code> is on.
+ */
+ protected final Key getHoverKey(final MotionEvent event) {
+ final int actionIndex = event.getActionIndex();
+ final int x = (int)event.getX(actionIndex);
+ final int y = (int)event.getY(actionIndex);
+ return mKeyDetector.detectHitKey(x, y);
+ }
+
+ /**
* Receives hover events when touch exploration is turned on in SDK versions ICS and higher.
*
* @param event The hover event.
- * @return {@code true} if the event is handled
+ * @return {@code true} if the event is handled.
*/
- public boolean dispatchHoverEvent(final MotionEvent event) {
- final int x = (int) event.getX();
- final int y = (int) event.getY();
- final Key previousKey = mLastHoverKey;
- final Key key = mKeyDetector.detectHitKey(x, y);
- mLastHoverKey = key;
-
- switch (event.getAction()) {
- case MotionEvent.ACTION_HOVER_EXIT:
- // Make sure we're not getting an EXIT event because the user slid
- // off the keyboard area, then force a key press.
- if (key != null) {
- final long downTime = simulateKeyPress(key);
- simulateKeyRelease(key, downTime);
- }
- //$FALL-THROUGH$
+ public boolean onHoverEvent(final MotionEvent event) {
+ switch (event.getActionMasked()) {
case MotionEvent.ACTION_HOVER_ENTER:
- return onHoverKey(key, event);
+ onHoverEnter(event);
+ break;
case MotionEvent.ACTION_HOVER_MOVE:
- if (key != previousKey) {
- return onTransitionKey(key, previousKey, event);
+ onHoverMove(event);
+ break;
+ case MotionEvent.ACTION_HOVER_EXIT:
+ onHoverExit(event);
+ break;
+ default:
+ Log.w(getClass().getSimpleName(), "Unknown hover event: " + event);
+ break;
+ }
+ return true;
+ }
+
+ /**
+ * Process {@link MotionEvent#ACTION_HOVER_ENTER} event.
+ *
+ * @param event A hover enter event.
+ */
+ protected void onHoverEnter(final MotionEvent event) {
+ final Key key = getHoverKey(event);
+ if (key != null) {
+ onHoverEnterKey(key);
+ }
+ setCurrentHoverKey(key);
+ }
+
+ /**
+ * Process {@link MotionEvent#ACTION_HOVER_MOVE} event.
+ *
+ * @param event A hover move event.
+ */
+ protected void onHoverMove(final MotionEvent event) {
+ final Key previousKey = getCurrentHoverKey();
+ final Key key = getHoverKey(event);
+ if (key != previousKey) {
+ if (previousKey != null) {
+ onHoverExitKey(previousKey);
}
- return onHoverKey(key, event);
+ if (key != null) {
+ onHoverEnterKey(key);
+ }
+ }
+ if (key != null) {
+ onHoverMoveKey(key);
}
- return false;
+ setCurrentHoverKey(key);
}
/**
- * Simulates a key press by injecting touch an event into the keyboard view.
- * This avoids the complexity of trackers and listeners within the keyboard.
+ * Process {@link MotionEvent#ACTION_HOVER_EXIT} event.
*
- * @param key The key to press.
+ * @param event A hover exit event.
*/
- private long simulateKeyPress(final Key key) {
- final int x = key.getHitBox().centerX();
- final int y = key.getHitBox().centerY();
- final long downTime = SystemClock.uptimeMillis();
- final MotionEvent downEvent = MotionEvent.obtain(
- downTime, downTime, MotionEvent.ACTION_DOWN, x, y, 0);
- mKeyboardView.onTouchEvent(downEvent);
- downEvent.recycle();
- return downTime;
+ protected void onHoverExit(final MotionEvent event) {
+ final Key key = getHoverKey(event);
+ // Make sure we're not getting an EXIT event because the user slid
+ // off the keyboard area, then force a key press.
+ if (key != null) {
+ simulateTouchEvent(MotionEvent.ACTION_DOWN, event);
+ simulateTouchEvent(MotionEvent.ACTION_UP, event);
+ onHoverExitKey(key);
+ }
+ setCurrentHoverKey(null);
}
/**
- * Simulates a key release by injecting touch an event into the keyboard view.
- * This avoids the complexity of trackers and listeners within the keyboard.
+ * Simulating a touch event by injecting a synthesized touch event into {@link PointerTracker}.
*
- * @param key The key to release.
+ * @param touchAction The action of the synthesizing touch event.
+ * @param hoverEvent The base hover event from that the touch event is synthesized.
*/
- private void simulateKeyRelease(final Key key, final long downTime) {
- final int x = key.getHitBox().centerX();
- final int y = key.getHitBox().centerY();
- final MotionEvent upEvent = MotionEvent.obtain(
- downTime, SystemClock.uptimeMillis(), MotionEvent.ACTION_UP, x, y, 0);
- mKeyboardView.onTouchEvent(upEvent);
- upEvent.recycle();
+ protected void simulateTouchEvent(final int touchAction, final MotionEvent hoverEvent) {
+ final MotionEvent touchEvent = synthesizeTouchEvent(touchAction, hoverEvent);
+ final int actionIndex = touchEvent.getActionIndex();
+ final int pointerId = touchEvent.getPointerId(actionIndex);
+ final PointerTracker tracker = PointerTracker.getPointerTracker(pointerId);
+ tracker.processMotionEvent(touchEvent, mKeyDetector);
+ touchEvent.recycle();
}
/**
- * Simulates a transition between two {@link Key}s by sending a HOVER_EXIT on the previous key,
- * a HOVER_ENTER on the current key, and a HOVER_MOVE on the current key.
+ * Synthesize a touch event from a hover event.
*
- * @param currentKey The currently hovered key.
- * @param previousKey The previously hovered key.
- * @param event The event that triggered the transition.
- * @return {@code true} if the event was handled.
+ * @param touchAction The action of the synthesizing touch event.
+ * @param event The base hover event from that the touch event is synthesized.
+ * @return The synthesized touch event of <code>touchAction</code> that has pointer information
+ * of <code>event</code>.
*/
- private boolean onTransitionKey(final Key currentKey, final Key previousKey,
+ protected static MotionEvent synthesizeTouchEvent(final int touchAction,
final MotionEvent event) {
- final int savedAction = event.getAction();
- event.setAction(MotionEvent.ACTION_HOVER_EXIT);
- onHoverKey(previousKey, event);
- event.setAction(MotionEvent.ACTION_HOVER_ENTER);
- onHoverKey(currentKey, event);
- event.setAction(MotionEvent.ACTION_HOVER_MOVE);
- final boolean handled = onHoverKey(currentKey, event);
- event.setAction(savedAction);
- return handled;
+ final long downTime = event.getDownTime();
+ final long eventTime = event.getEventTime();
+ final int actionIndex = event.getActionIndex();
+ final float x = event.getX(actionIndex);
+ final float y = event.getY(actionIndex);
+ final int pointerId = event.getPointerId(actionIndex);
+ return MotionEvent.obtain(downTime, eventTime, touchAction, x, y, pointerId);
}
/**
- * Handles a hover event on a key. If {@link Key} extended View, this would be analogous to
- * calling View.onHoverEvent(MotionEvent).
+ * Handles a hover enter event on a key.
*
* @param key The currently hovered key.
- * @param event The hover event.
- * @return {@code true} if the event was handled.
*/
- private boolean onHoverKey(final Key key, final MotionEvent event) {
- // Null keys can't receive events.
- if (key == null) {
- return false;
- }
+ protected void onHoverEnterKey(final Key key) {
+ key.onPressed();
+ mKeyboardView.invalidateKey(key);
final KeyboardAccessibilityNodeProvider provider = getAccessibilityNodeProvider();
+ provider.sendAccessibilityEventForKey(key, AccessibilityEventCompat.TYPE_VIEW_HOVER_ENTER);
+ provider.performActionForKey(key, AccessibilityNodeInfoCompat.ACTION_ACCESSIBILITY_FOCUS);
+ }
- switch (event.getAction()) {
- case MotionEvent.ACTION_HOVER_ENTER:
- provider.sendAccessibilityEventForKey(
- key, AccessibilityEventCompat.TYPE_VIEW_HOVER_ENTER);
- provider.performActionForKey(
- key, AccessibilityNodeInfoCompat.ACTION_ACCESSIBILITY_FOCUS, null);
- break;
- case MotionEvent.ACTION_HOVER_EXIT:
- provider.sendAccessibilityEventForKey(
- key, AccessibilityEventCompat.TYPE_VIEW_HOVER_EXIT);
- break;
- }
- return true;
+ /**
+ * Handles a hover move event on a key.
+ *
+ * @param key The currently hovered key.
+ */
+ protected void onHoverMoveKey(final Key key) { }
+
+ /**
+ * Handles a hover exit event on a key.
+ *
+ * @param key The currently hovered key.
+ */
+ protected void onHoverExitKey(final Key key) {
+ key.onReleased();
+ mKeyboardView.invalidateKey(key);
+ final KeyboardAccessibilityNodeProvider provider = getAccessibilityNodeProvider();
+ provider.sendAccessibilityEventForKey(key, AccessibilityEventCompat.TYPE_VIEW_HOVER_EXIT);
}
}
diff --git a/java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityNodeProvider.java b/java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityNodeProvider.java
index cddd1c7ed..a6997e2f9 100644
--- a/java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityNodeProvider.java
+++ b/java/src/com/android/inputmethod/accessibility/KeyboardAccessibilityNodeProvider.java
@@ -134,7 +134,7 @@ public final class KeyboardAccessibilityNodeProvider extends AccessibilityNodePr
event.setClassName(key.getClass().getName());
event.setContentDescription(keyDescription);
event.setEnabled(true);
- final AccessibilityRecordCompat record = new AccessibilityRecordCompat(event);
+ final AccessibilityRecordCompat record = AccessibilityEventCompat.asRecord(event);
record.setSource(mKeyboardView, virtualViewId);
return event;
}
@@ -229,7 +229,7 @@ public final class KeyboardAccessibilityNodeProvider extends AccessibilityNodePr
if (key == null) {
return false;
}
- return performActionForKey(key, action, arguments);
+ return performActionForKey(key, action);
}
/**
@@ -237,25 +237,16 @@ public final class KeyboardAccessibilityNodeProvider extends AccessibilityNodePr
*
* @param key The on which to perform the action.
* @param action The action to perform.
- * @param arguments The action's arguments.
* @return The result of performing the action, or false if the action is not supported.
*/
- boolean performActionForKey(final Key key, final int action, final Bundle arguments) {
- final int virtualViewId = getVirtualViewIdOf(key);
-
+ boolean performActionForKey(final Key key, final int action) {
switch (action) {
case AccessibilityNodeInfoCompat.ACTION_ACCESSIBILITY_FOCUS:
- if (mAccessibilityFocusedView == virtualViewId) {
- return false;
- }
- mAccessibilityFocusedView = virtualViewId;
+ mAccessibilityFocusedView = getVirtualViewIdOf(key);
sendAccessibilityEventForKey(
key, AccessibilityEventCompat.TYPE_VIEW_ACCESSIBILITY_FOCUSED);
return true;
case AccessibilityNodeInfoCompat.ACTION_CLEAR_ACCESSIBILITY_FOCUS:
- if (mAccessibilityFocusedView != virtualViewId) {
- return false;
- }
mAccessibilityFocusedView = UNDEFINED;
sendAccessibilityEventForKey(
key, AccessibilityEventCompat.TYPE_VIEW_ACCESSIBILITY_FOCUS_CLEARED);
diff --git a/java/src/com/android/inputmethod/accessibility/MainKeyboardAccessibilityDelegate.java b/java/src/com/android/inputmethod/accessibility/MainKeyboardAccessibilityDelegate.java
index c114551c8..ec6bb0156 100644
--- a/java/src/com/android/inputmethod/accessibility/MainKeyboardAccessibilityDelegate.java
+++ b/java/src/com/android/inputmethod/accessibility/MainKeyboardAccessibilityDelegate.java
@@ -17,13 +17,8 @@
package com.android.inputmethod.accessibility;
import android.content.Context;
-import android.os.SystemClock;
-import android.support.v4.view.accessibility.AccessibilityEventCompat;
-import android.support.v4.view.accessibility.AccessibilityNodeInfoCompat;
import android.util.SparseIntArray;
-import android.view.MotionEvent;
-import com.android.inputmethod.keyboard.Key;
import com.android.inputmethod.keyboard.KeyDetector;
import com.android.inputmethod.keyboard.Keyboard;
import com.android.inputmethod.keyboard.KeyboardId;
@@ -168,17 +163,13 @@ public final class MainKeyboardAccessibilityDelegate
default:
return;
}
- final String text = mKeyboardView.getContext().getString(resId);
- sendWindowStateChanged(text);
+ sendWindowStateChanged(resId);
}
/**
* Announces that the keyboard has been hidden.
*/
private void announceKeyboardHidden() {
- final Context context = mKeyboardView.getContext();
- final String text = context.getString(R.string.announce_keyboard_hidden);
-
- sendWindowStateChanged(text);
+ sendWindowStateChanged(R.string.announce_keyboard_hidden);
}
}
diff --git a/java/src/com/android/inputmethod/compat/SuggestionSpanUtils.java b/java/src/com/android/inputmethod/compat/SuggestionSpanUtils.java
index 60f7e2def..4d51821f2 100644
--- a/java/src/com/android/inputmethod/compat/SuggestionSpanUtils.java
+++ b/java/src/com/android/inputmethod/compat/SuggestionSpanUtils.java
@@ -27,7 +27,6 @@ import com.android.inputmethod.latin.LatinImeLogger;
import com.android.inputmethod.latin.SuggestedWords;
import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
import com.android.inputmethod.latin.SuggestionSpanPickedNotificationReceiver;
-import com.android.inputmethod.latin.utils.CollectionUtils;
import java.lang.reflect.Field;
import java.util.ArrayList;
@@ -73,13 +72,13 @@ public final class SuggestionSpanUtils {
return pickedWord;
}
- final ArrayList<String> suggestionsList = CollectionUtils.newArrayList();
+ final ArrayList<String> suggestionsList = new ArrayList<>();
for (int i = 0; i < suggestedWords.size(); ++i) {
if (suggestionsList.size() >= SuggestionSpan.SUGGESTIONS_MAX_SIZE) {
break;
}
final SuggestedWordInfo info = suggestedWords.getInfo(i);
- if (info.mKind == SuggestedWordInfo.KIND_PREDICTION) {
+ if (info.isKindOf(SuggestedWordInfo.KIND_PREDICTION)) {
continue;
}
final String word = suggestedWords.getWord(i);
diff --git a/java/src/com/android/inputmethod/compat/ViewCompatUtils.java b/java/src/com/android/inputmethod/compat/ViewCompatUtils.java
index dec739d39..767cc423d 100644
--- a/java/src/com/android/inputmethod/compat/ViewCompatUtils.java
+++ b/java/src/com/android/inputmethod/compat/ViewCompatUtils.java
@@ -24,23 +24,13 @@ import java.lang.reflect.Method;
// Currently {@link #getPaddingEnd(View)} and {@link #setPaddingRelative(View,int,int,int,int)}
// are missing from android-support-v4 static library in KitKat SDK.
public final class ViewCompatUtils {
- // Note that View.LAYOUT_DIRECTION_LTR and View.LAYOUT_DIRECTION_RTL have been introduced in
- // API level 17 (Build.VERSION_CODE.JELLY_BEAN_MR1).
- public static final int LAYOUT_DIRECTION_LTR = (Integer)CompatUtils.getFieldValue(null, 0x0,
- CompatUtils.getField(View.class, "LAYOUT_DIRECTION_LTR"));
- public static final int LAYOUT_DIRECTION_RTL = (Integer)CompatUtils.getFieldValue(null, 0x1,
- CompatUtils.getField(View.class, "LAYOUT_DIRECTION_RTL"));
-
- // Note that View.getPaddingEnd(), View.setPaddingRelative(int,int,int,int), and
- // View.getLayoutDirection() have been introduced in API level 17
- // (Build.VERSION_CODE.JELLY_BEAN_MR1).
+ // Note that View.getPaddingEnd(), View.setPaddingRelative(int,int,int,int) have been
+ // introduced in API level 17 (Build.VERSION_CODE.JELLY_BEAN_MR1).
private static final Method METHOD_getPaddingEnd = CompatUtils.getMethod(
View.class, "getPaddingEnd");
private static final Method METHOD_setPaddingRelative = CompatUtils.getMethod(
View.class, "setPaddingRelative",
Integer.TYPE, Integer.TYPE, Integer.TYPE, Integer.TYPE);
- private static final Method METHOD_getLayoutDirection = CompatUtils.getMethod(
- View.class, "getLayoutDirection");
private ViewCompatUtils() {
// This utility class is not publicly instantiable.
@@ -61,11 +51,4 @@ public final class ViewCompatUtils {
}
CompatUtils.invoke(view, null, METHOD_setPaddingRelative, start, top, end, bottom);
}
-
- public static int getLayoutDirection(final View view) {
- if (METHOD_getLayoutDirection == null) {
- return LAYOUT_DIRECTION_LTR;
- }
- return (Integer)CompatUtils.invoke(view, 0, METHOD_getLayoutDirection);
- }
}
diff --git a/java/src/com/android/inputmethod/dictionarypack/ActionBatch.java b/java/src/com/android/inputmethod/dictionarypack/ActionBatch.java
index 3f69cedee..3d294acd7 100644
--- a/java/src/com/android/inputmethod/dictionarypack/ActionBatch.java
+++ b/java/src/com/android/inputmethod/dictionarypack/ActionBatch.java
@@ -16,7 +16,6 @@
package com.android.inputmethod.dictionarypack;
-import android.app.DownloadManager;
import android.app.DownloadManager.Request;
import android.content.ContentValues;
import android.content.Context;
@@ -600,7 +599,7 @@ public final class ActionBatch {
private final Queue<Action> mActions;
public ActionBatch() {
- mActions = new LinkedList<Action>();
+ mActions = new LinkedList<>();
}
public void add(final Action a) {
diff --git a/java/src/com/android/inputmethod/dictionarypack/DictionaryDownloadProgressBar.java b/java/src/com/android/inputmethod/dictionarypack/DictionaryDownloadProgressBar.java
index 2623eff56..1d84e5888 100644
--- a/java/src/com/android/inputmethod/dictionarypack/DictionaryDownloadProgressBar.java
+++ b/java/src/com/android/inputmethod/dictionarypack/DictionaryDownloadProgressBar.java
@@ -29,7 +29,6 @@ import android.view.View;
import android.widget.ProgressBar;
public class DictionaryDownloadProgressBar extends ProgressBar {
- @SuppressWarnings("unused")
private static final String TAG = DictionaryDownloadProgressBar.class.getSimpleName();
private static final int NOT_A_DOWNLOADMANAGER_PENDING_ID = 0;
@@ -119,7 +118,6 @@ public class DictionaryDownloadProgressBar extends ProgressBar {
try {
final UpdateHelper updateHelper = new UpdateHelper();
final Query query = new Query().setFilterById(mId);
- int lastProgress = 0;
setIndeterminate(true);
while (!isInterrupted()) {
final Cursor cursor = mDownloadManagerWrapper.query(query);
diff --git a/java/src/com/android/inputmethod/dictionarypack/DictionaryListInterfaceState.java b/java/src/com/android/inputmethod/dictionarypack/DictionaryListInterfaceState.java
index 13c07de35..8e026171d 100644
--- a/java/src/com/android/inputmethod/dictionarypack/DictionaryListInterfaceState.java
+++ b/java/src/com/android/inputmethod/dictionarypack/DictionaryListInterfaceState.java
@@ -18,8 +18,6 @@ package com.android.inputmethod.dictionarypack;
import android.view.View;
-import com.android.inputmethod.latin.utils.CollectionUtils;
-
import java.util.ArrayList;
import java.util.HashMap;
@@ -39,8 +37,8 @@ public class DictionaryListInterfaceState {
public int mStatus = MetadataDbHelper.STATUS_UNKNOWN;
}
- private HashMap<String, State> mWordlistToState = CollectionUtils.newHashMap();
- private ArrayList<View> mViewCache = CollectionUtils.newArrayList();
+ private HashMap<String, State> mWordlistToState = new HashMap<>();
+ private ArrayList<View> mViewCache = new ArrayList<>();
public boolean isOpen(final String wordlistId) {
final State state = mWordlistToState.get(wordlistId);
diff --git a/java/src/com/android/inputmethod/dictionarypack/DictionaryProvider.java b/java/src/com/android/inputmethod/dictionarypack/DictionaryProvider.java
index c35995b24..f5bd84c8c 100644
--- a/java/src/com/android/inputmethod/dictionarypack/DictionaryProvider.java
+++ b/java/src/com/android/inputmethod/dictionarypack/DictionaryProvider.java
@@ -357,7 +357,7 @@ public final class DictionaryProvider extends ContentProvider {
return Collections.<WordListInfo>emptyList();
}
try {
- final HashMap<String, WordListInfo> dicts = new HashMap<String, WordListInfo>();
+ final HashMap<String, WordListInfo> dicts = new HashMap<>();
final int idIndex = results.getColumnIndex(MetadataDbHelper.WORDLISTID_COLUMN);
final int localeIndex = results.getColumnIndex(MetadataDbHelper.LOCALE_COLUMN);
final int localFileNameIndex =
diff --git a/java/src/com/android/inputmethod/dictionarypack/DictionarySettingsFragment.java b/java/src/com/android/inputmethod/dictionarypack/DictionarySettingsFragment.java
index dae2f22a4..11982fa65 100644
--- a/java/src/com/android/inputmethod/dictionarypack/DictionarySettingsFragment.java
+++ b/java/src/com/android/inputmethod/dictionarypack/DictionarySettingsFragment.java
@@ -33,13 +33,13 @@ import android.preference.PreferenceGroup;
import android.text.TextUtils;
import android.text.format.DateUtils;
import android.util.Log;
-import android.view.animation.AnimationUtils;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
+import android.view.animation.AnimationUtils;
import com.android.inputmethod.latin.R;
@@ -67,8 +67,8 @@ public final class DictionarySettingsFragment extends PreferenceFragment
private boolean mChangedSettings;
private DictionaryListInterfaceState mDictionaryListInterfaceState =
new DictionaryListInterfaceState();
- private TreeMap<String, WordListPreference> mCurrentPreferenceMap =
- new TreeMap<String, WordListPreference>(); // never null
+ // never null
+ private TreeMap<String, WordListPreference> mCurrentPreferenceMap = new TreeMap<>();
private final BroadcastReceiver mConnectivityChangedReceiver = new BroadcastReceiver() {
@Override
@@ -280,19 +280,18 @@ public final class DictionarySettingsFragment extends PreferenceFragment
: activity.getContentResolver().query(contentUri, null, null, null, null);
if (null == cursor) {
- final ArrayList<Preference> result = new ArrayList<Preference>();
+ final ArrayList<Preference> result = new ArrayList<>();
result.add(createErrorMessage(activity, R.string.cannot_connect_to_dict_service));
return result;
}
try {
if (!cursor.moveToFirst()) {
- final ArrayList<Preference> result = new ArrayList<Preference>();
+ final ArrayList<Preference> result = new ArrayList<>();
result.add(createErrorMessage(activity, R.string.no_dictionaries_available));
return result;
} else {
final String systemLocaleString = Locale.getDefault().toString();
- final TreeMap<String, WordListPreference> prefMap =
- new TreeMap<String, WordListPreference>();
+ final TreeMap<String, WordListPreference> prefMap = new TreeMap<>();
final int idIndex = cursor.getColumnIndex(MetadataDbHelper.WORDLISTID_COLUMN);
final int versionIndex = cursor.getColumnIndex(MetadataDbHelper.VERSION_COLUMN);
final int localeIndex = cursor.getColumnIndex(MetadataDbHelper.LOCALE_COLUMN);
diff --git a/java/src/com/android/inputmethod/dictionarypack/LocaleUtils.java b/java/src/com/android/inputmethod/dictionarypack/LocaleUtils.java
index 77f67b8a3..4f0805c5c 100644
--- a/java/src/com/android/inputmethod/dictionarypack/LocaleUtils.java
+++ b/java/src/com/android/inputmethod/dictionarypack/LocaleUtils.java
@@ -175,7 +175,7 @@ public final class LocaleUtils {
return saveLocale;
}
- private static final HashMap<String, Locale> sLocaleCache = new HashMap<String, Locale>();
+ private static final HashMap<String, Locale> sLocaleCache = new HashMap<>();
/**
* Creates a locale from a string specification.
diff --git a/java/src/com/android/inputmethod/dictionarypack/MetadataDbHelper.java b/java/src/com/android/inputmethod/dictionarypack/MetadataDbHelper.java
index 668eb925b..17dd781d5 100644
--- a/java/src/com/android/inputmethod/dictionarypack/MetadataDbHelper.java
+++ b/java/src/com/android/inputmethod/dictionarypack/MetadataDbHelper.java
@@ -47,7 +47,7 @@ public class MetadataDbHelper extends SQLiteOpenHelper {
// used to identify the versions for upgrades. This should never change going forward.
private static final int METADATA_DATABASE_VERSION_WITH_CLIENTID = 6;
// The current database version.
- private static final int CURRENT_METADATA_DATABASE_VERSION = 8;
+ private static final int CURRENT_METADATA_DATABASE_VERSION = 9;
private final static long NOT_A_DOWNLOAD_ID = -1;
@@ -160,7 +160,7 @@ public class MetadataDbHelper extends SQLiteOpenHelper {
// this legacy database. New clients should make sure to always pass a client ID so as
// to avoid conflicts.
final String clientId = null != clientIdOrNull ? clientIdOrNull : "";
- if (null == sInstanceMap) sInstanceMap = new TreeMap<String, MetadataDbHelper>();
+ if (null == sInstanceMap) sInstanceMap = new TreeMap<>();
MetadataDbHelper helper = sInstanceMap.get(clientId);
if (null == helper) {
helper = new MetadataDbHelper(context, clientId);
@@ -639,7 +639,7 @@ public class MetadataDbHelper extends SQLiteOpenHelper {
public static ArrayList<DownloadRecord> getDownloadRecordsForDownloadId(final Context context,
final long downloadId) {
final SQLiteDatabase defaultDb = getDb(context, "");
- final ArrayList<DownloadRecord> results = new ArrayList<DownloadRecord>();
+ final ArrayList<DownloadRecord> results = new ArrayList<>();
final Cursor cursor = defaultDb.query(CLIENT_TABLE_NAME, CLIENT_TABLE_COLUMNS,
null, null, null, null, null);
try {
@@ -923,7 +923,7 @@ public class MetadataDbHelper extends SQLiteOpenHelper {
// - Remove the old entry from the table
// - Erase the old file
// We start by gathering the names of the files we should delete.
- final List<String> filenames = new LinkedList<String>();
+ final List<String> filenames = new LinkedList<>();
final Cursor c = db.query(METADATA_TABLE_NAME,
new String[] { LOCAL_FILENAME_COLUMN },
LOCALE_COLUMN + " = ? AND " +
diff --git a/java/src/com/android/inputmethod/dictionarypack/MetadataHandler.java b/java/src/com/android/inputmethod/dictionarypack/MetadataHandler.java
index 63e419871..d66b69050 100644
--- a/java/src/com/android/inputmethod/dictionarypack/MetadataHandler.java
+++ b/java/src/com/android/inputmethod/dictionarypack/MetadataHandler.java
@@ -43,7 +43,7 @@ public class MetadataHandler {
* @return the constructed list of wordlist metadata.
*/
private static List<WordListMetadata> makeMetadataObject(final Cursor results) {
- final ArrayList<WordListMetadata> buildingMetadata = new ArrayList<WordListMetadata>();
+ final ArrayList<WordListMetadata> buildingMetadata = new ArrayList<>();
if (null != results && results.moveToFirst()) {
final int localeColumn = results.getColumnIndex(MetadataDbHelper.LOCALE_COLUMN);
final int typeColumn = results.getColumnIndex(MetadataDbHelper.TYPE_COLUMN);
diff --git a/java/src/com/android/inputmethod/dictionarypack/MetadataParser.java b/java/src/com/android/inputmethod/dictionarypack/MetadataParser.java
index a88173e8e..52290cadc 100644
--- a/java/src/com/android/inputmethod/dictionarypack/MetadataParser.java
+++ b/java/src/com/android/inputmethod/dictionarypack/MetadataParser.java
@@ -52,7 +52,7 @@ public class MetadataParser {
*/
private static WordListMetadata parseOneWordList(final JsonReader reader)
throws IOException, BadFormatException {
- final TreeMap<String, String> arguments = new TreeMap<String, String>();
+ final TreeMap<String, String> arguments = new TreeMap<>();
reader.beginObject();
while (reader.hasNext()) {
final String name = reader.nextName();
@@ -100,7 +100,7 @@ public class MetadataParser {
public static List<WordListMetadata> parseMetadata(final InputStreamReader input)
throws IOException, BadFormatException {
JsonReader reader = new JsonReader(input);
- final ArrayList<WordListMetadata> readInfo = new ArrayList<WordListMetadata>();
+ final ArrayList<WordListMetadata> readInfo = new ArrayList<>();
reader.beginArray();
while (reader.hasNext()) {
final WordListMetadata thisMetadata = parseOneWordList(reader);
diff --git a/java/src/com/android/inputmethod/dictionarypack/UpdateHandler.java b/java/src/com/android/inputmethod/dictionarypack/UpdateHandler.java
index dcff490db..95a094232 100644
--- a/java/src/com/android/inputmethod/dictionarypack/UpdateHandler.java
+++ b/java/src/com/android/inputmethod/dictionarypack/UpdateHandler.java
@@ -177,7 +177,7 @@ public final class UpdateHandler {
*/
public static boolean tryUpdate(final Context context, final boolean updateNow) {
// TODO: loop through all clients instead of only doing the default one.
- final TreeSet<String> uris = new TreeSet<String>();
+ final TreeSet<String> uris = new TreeSet<>();
final Cursor cursor = MetadataDbHelper.queryClientIds(context);
if (null == cursor) return false;
try {
@@ -557,7 +557,7 @@ public final class UpdateHandler {
// Instantiation of a parameterized type is not possible in Java, so it's not possible to
// return the same type of list that was passed - probably the same reason why Collections
// does not do it. So we need to decide statically which concrete type to return.
- return new LinkedList<T>(src);
+ return new LinkedList<>(src);
}
/**
@@ -740,10 +740,10 @@ public final class UpdateHandler {
final ActionBatch actions = new ActionBatch();
// Upgrade existing word lists
DebugLogUtils.l("Comparing dictionaries");
- final Set<String> wordListIds = new TreeSet<String>();
+ final Set<String> wordListIds = new TreeSet<>();
// TODO: Can these be null?
- if (null == from) from = new ArrayList<WordListMetadata>();
- if (null == to) to = new ArrayList<WordListMetadata>();
+ if (null == from) from = new ArrayList<>();
+ if (null == to) to = new ArrayList<>();
for (WordListMetadata wlData : from) wordListIds.add(wlData.mId);
for (WordListMetadata wlData : to) wordListIds.add(wlData.mId);
for (String id : wordListIds) {
diff --git a/java/src/com/android/inputmethod/event/CombinerChain.java b/java/src/com/android/inputmethod/event/CombinerChain.java
index 9e7f04d4f..61bc11b39 100644
--- a/java/src/com/android/inputmethod/event/CombinerChain.java
+++ b/java/src/com/android/inputmethod/event/CombinerChain.java
@@ -20,7 +20,6 @@ import android.text.SpannableStringBuilder;
import android.text.TextUtils;
import com.android.inputmethod.latin.Constants;
-import com.android.inputmethod.latin.utils.CollectionUtils;
import java.util.ArrayList;
import java.util.HashMap;
@@ -44,8 +43,8 @@ public class CombinerChain {
private SpannableStringBuilder mStateFeedback;
private final ArrayList<Combiner> mCombiners;
- private static final HashMap<String, Class> IMPLEMENTED_COMBINERS
- = new HashMap<String, Class>();
+ private static final HashMap<String, Class<? extends Combiner>> IMPLEMENTED_COMBINERS =
+ new HashMap<>();
static {
IMPLEMENTED_COMBINERS.put("MyanmarReordering", MyanmarReordering.class);
}
@@ -63,7 +62,7 @@ public class CombinerChain {
* @param combinerList A list of combiners to be applied in order.
*/
public CombinerChain(final String initialText, final Combiner... combinerList) {
- mCombiners = CollectionUtils.newArrayList();
+ mCombiners = new ArrayList<>();
// The dead key combiner is always active, and always first
mCombiners.add(new DeadKeyCombiner());
for (final Combiner combiner : combinerList) {
@@ -87,7 +86,7 @@ public class CombinerChain {
* @param newEvent the new event to process
*/
public void processEvent(final ArrayList<Event> previousEvents, final Event newEvent) {
- final ArrayList<Event> modifiablePreviousEvents = new ArrayList<Event>(previousEvents);
+ final ArrayList<Event> modifiablePreviousEvents = new ArrayList<>(previousEvents);
Event event = newEvent;
for (final Combiner combiner : mCombiners) {
// A combiner can never return more than one event; it can return several
@@ -136,12 +135,13 @@ public class CombinerChain {
final Combiner[] combiners = new Combiner[combinerDescriptors.length];
int i = 0;
for (final String combinerDescriptor : combinerDescriptors) {
- final Class combinerClass = IMPLEMENTED_COMBINERS.get(combinerDescriptor);
+ final Class<? extends Combiner> combinerClass =
+ IMPLEMENTED_COMBINERS.get(combinerDescriptor);
if (null == combinerClass) {
throw new RuntimeException("Unknown combiner descriptor: " + combinerDescriptor);
}
try {
- combiners[i++] = (Combiner)combinerClass.newInstance();
+ combiners[i++] = combinerClass.newInstance();
} catch (InstantiationException e) {
throw new RuntimeException("Unable to instantiate combiner: " + combinerDescriptor,
e);
diff --git a/java/src/com/android/inputmethod/event/MyanmarReordering.java b/java/src/com/android/inputmethod/event/MyanmarReordering.java
index da0228bd2..32919932d 100644
--- a/java/src/com/android/inputmethod/event/MyanmarReordering.java
+++ b/java/src/com/android/inputmethod/event/MyanmarReordering.java
@@ -17,7 +17,6 @@
package com.android.inputmethod.event;
import com.android.inputmethod.latin.Constants;
-import com.android.inputmethod.latin.utils.CollectionUtils;
import java.util.ArrayList;
import java.util.Arrays;
@@ -32,7 +31,7 @@ public class MyanmarReordering implements Combiner {
// U+200B ZERO WIDTH SPACE
private final static int ZERO_WIDTH_NON_JOINER = 0x200B; // should be 0x200C
- private final ArrayList<Event> mCurrentEvents = CollectionUtils.newArrayList();
+ private final ArrayList<Event> mCurrentEvents = new ArrayList<>();
// List of consonants :
// U+1000 MYANMAR LETTER KA
diff --git a/java/src/com/android/inputmethod/keyboard/Keyboard.java b/java/src/com/android/inputmethod/keyboard/Keyboard.java
index f646a03c2..85dfea4e7 100644
--- a/java/src/com/android/inputmethod/keyboard/Keyboard.java
+++ b/java/src/com/android/inputmethod/keyboard/Keyboard.java
@@ -22,9 +22,9 @@ import com.android.inputmethod.keyboard.internal.KeyVisualAttributes;
import com.android.inputmethod.keyboard.internal.KeyboardIconsSet;
import com.android.inputmethod.keyboard.internal.KeyboardParams;
import com.android.inputmethod.latin.Constants;
-import com.android.inputmethod.latin.utils.CollectionUtils;
import com.android.inputmethod.latin.utils.CoordinateUtils;
+import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -83,7 +83,7 @@ public class Keyboard {
public final List<Key> mAltCodeKeysWhileTyping;
public final KeyboardIconsSet mIconsSet;
- private final SparseArray<Key> mKeyCache = CollectionUtils.newSparseArray();
+ private final SparseArray<Key> mKeyCache = new SparseArray<>();
private final ProximityInfo mProximityInfo;
private final boolean mProximityCharsCorrectionEnabled;
@@ -103,8 +103,7 @@ public class Keyboard {
mTopPadding = params.mTopPadding;
mVerticalGap = params.mVerticalGap;
- mSortedKeys = Collections.unmodifiableList(
- CollectionUtils.newArrayList(params.mSortedKeys));
+ mSortedKeys = Collections.unmodifiableList(new ArrayList<>(params.mSortedKeys));
mShiftKeys = Collections.unmodifiableList(params.mShiftKeys);
mAltCodeKeysWhileTyping = Collections.unmodifiableList(params.mAltCodeKeysWhileTyping);
mIconsSet = params.mIconsSet;
@@ -159,7 +158,7 @@ public class Keyboard {
/**
* Return the sorted list of keys of this keyboard.
* The keys are sorted from top-left to bottom-right order.
- * The list may contain {@link Spacer} object as well.
+ * The list may contain {@link Key.Spacer} object as well.
* @return the sorted unmodifiable list of {@link Key}s of this keyboard.
*/
public List<Key> getSortedKeys() {
diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardLayoutSet.java b/java/src/com/android/inputmethod/keyboard/KeyboardLayoutSet.java
index cde5091c4..aa646994c 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardLayoutSet.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardLayoutSet.java
@@ -41,7 +41,6 @@ import com.android.inputmethod.latin.InputAttributes;
import com.android.inputmethod.latin.LatinImeLogger;
import com.android.inputmethod.latin.R;
import com.android.inputmethod.latin.SubtypeSwitcher;
-import com.android.inputmethod.latin.utils.CollectionUtils;
import com.android.inputmethod.latin.utils.InputTypeUtils;
import com.android.inputmethod.latin.utils.SubtypeLocaleUtils;
import com.android.inputmethod.latin.utils.XmlParseUtils;
@@ -81,7 +80,7 @@ public final class KeyboardLayoutSet {
// them from disappearing from sKeyboardCache.
private static final Keyboard[] sForcibleKeyboardCache = new Keyboard[FORCIBLE_CACHE_SIZE];
private static final HashMap<KeyboardId, SoftReference<Keyboard>> sKeyboardCache =
- CollectionUtils.newHashMap();
+ new HashMap<>();
private static final KeysCache sKeysCache = new KeysCache();
@SuppressWarnings("serial")
@@ -117,7 +116,7 @@ public final class KeyboardLayoutSet {
int mKeyboardHeight;
// Sparse array of KeyboardLayoutSet element parameters indexed by element's id.
final SparseArray<ElementParams> mKeyboardLayoutSetElementIdToParamsMap =
- CollectionUtils.newSparseArray();
+ new SparseArray<>();
}
public static void clearKeyboardCache() {
@@ -181,7 +180,7 @@ public final class KeyboardLayoutSet {
}
final KeyboardBuilder<KeyboardParams> builder =
- new KeyboardBuilder<KeyboardParams>(mContext, new KeyboardParams());
+ new KeyboardBuilder<>(mContext, new KeyboardParams());
if (id.isAlphabetKeyboard()) {
builder.setAutoGenerate(sKeysCache);
}
@@ -192,7 +191,7 @@ public final class KeyboardLayoutSet {
}
builder.setProximityCharsCorrectionEnabled(elementParams.mProximityCharsCorrectionEnabled);
final Keyboard keyboard = builder.build();
- sKeyboardCache.put(id, new SoftReference<Keyboard>(keyboard));
+ sKeyboardCache.put(id, new SoftReference<>(keyboard));
if ((id.mElementId == KeyboardId.ELEMENT_ALPHABET
|| id.mElementId == KeyboardId.ELEMENT_ALPHABET_AUTOMATIC_SHIFTED)
&& !mParams.mIsSpellChecker) {
diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java b/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java
index 61d51d1c9..ef5fabb41 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardSwitcher.java
@@ -33,7 +33,6 @@ import com.android.inputmethod.keyboard.internal.KeyboardState;
import com.android.inputmethod.keyboard.internal.KeyboardTextsSet;
import com.android.inputmethod.latin.InputView;
import com.android.inputmethod.latin.LatinIME;
-import com.android.inputmethod.latin.LatinImeLogger;
import com.android.inputmethod.latin.R;
import com.android.inputmethod.latin.RichInputMethodManager;
import com.android.inputmethod.latin.SubtypeSwitcher;
@@ -127,7 +126,6 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions {
mKeyboardTextsSet.setLocale(mSubtypeSwitcher.getCurrentSubtypeLocale(), mThemeContext);
} catch (KeyboardLayoutSetException e) {
Log.w(TAG, "loading keyboard failed: " + e.mKeyboardId, e.getCause());
- LatinImeLogger.logOnException(e.mKeyboardId.toString(), e.getCause());
return;
}
}
diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardTheme.java b/java/src/com/android/inputmethod/keyboard/KeyboardTheme.java
index 1f14aa2e3..60d9a054d 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardTheme.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardTheme.java
@@ -81,20 +81,6 @@ public final class KeyboardTheme {
return mThemeId;
}
- // TODO: This method should be removed when {@link LatinImeLogger} is removed.
- public int getCompatibleThemeIdForLogging() {
- switch (mThemeId) {
- case THEME_ID_ICS:
- return 5;
- case THEME_ID_KLP:
- return 9;
- case THEME_ID_LXX_DARK:
- return 10;
- default: // Invalid theme
- return -1;
- }
- }
-
private static KeyboardTheme searchKeyboardThemeById(final int themeId) {
// TODO: This search algorithm isn't optimal if there are many themes.
for (final KeyboardTheme theme : KEYBOARD_THEMES) {
diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardView.java b/java/src/com/android/inputmethod/keyboard/KeyboardView.java
index edfc5fded..c4ca1c495 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardView.java
@@ -35,12 +35,8 @@ import android.view.View;
import com.android.inputmethod.keyboard.internal.KeyDrawParams;
import com.android.inputmethod.keyboard.internal.KeyVisualAttributes;
import com.android.inputmethod.latin.Constants;
-import com.android.inputmethod.latin.LatinImeLogger;
import com.android.inputmethod.latin.R;
-import com.android.inputmethod.latin.define.ProductionFlag;
-import com.android.inputmethod.latin.utils.CollectionUtils;
import com.android.inputmethod.latin.utils.TypefaceUtils;
-import com.android.inputmethod.research.ResearchLogger;
import java.util.HashSet;
@@ -110,7 +106,7 @@ public class KeyboardView extends View {
/** True if all keys should be drawn */
private boolean mInvalidateAllKeys;
/** The keys that should be drawn */
- private final HashSet<Key> mInvalidatedKeys = CollectionUtils.newHashSet();
+ private final HashSet<Key> mInvalidatedKeys = new HashSet<>();
/** The working rectangle variable */
private final Rect mWorkingRect = new Rect();
/** The keyboard bitmap buffer for faster updates */
@@ -188,7 +184,6 @@ public class KeyboardView extends View {
*/
public void setKeyboard(final Keyboard keyboard) {
mKeyboard = keyboard;
- LatinImeLogger.onSetKeyboard(keyboard);
final int keyHeight = keyboard.mMostCommonKeyHeight - keyboard.mVerticalGap;
mKeyDrawParams.updateParams(keyHeight, mKeyVisualAttributes);
mKeyDrawParams.updateParams(keyHeight, keyboard.mKeyVisualAttributes);
@@ -318,13 +313,6 @@ public class KeyboardView extends View {
}
}
- // Research Logging (Development Only Diagnostics) indicator.
- // TODO: Reimplement using a keyboard background image specific to the ResearchLogger,
- // and remove this call.
- if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
- ResearchLogger.getInstance().paintIndicator(this, paint, canvas, width, height);
- }
-
mInvalidatedKeys.clear();
mInvalidateAllKeys = false;
}
@@ -363,9 +351,6 @@ public class KeyboardView extends View {
}
canvas.translate(bgX, bgY);
background.draw(canvas);
- if (LatinImeLogger.sVISUALDEBUG) {
- drawRectangle(canvas, 0.0f, 0.0f, bgWidth, bgHeight, 0x80c00000, new Paint());
- }
canvas.translate(-bgX, -bgY);
}
@@ -377,10 +362,6 @@ public class KeyboardView extends View {
final float centerX = keyWidth * 0.5f;
final float centerY = keyHeight * 0.5f;
- if (LatinImeLogger.sVISUALDEBUG) {
- drawRectangle(canvas, 0.0f, 0.0f, keyWidth, keyHeight, 0x800000c0, new Paint());
- }
-
// Draw key label.
final Drawable icon = key.getIcon(mKeyboard.mIconsSet, params.mAnimAlpha);
float positionX = centerX;
@@ -462,12 +443,6 @@ public class KeyboardView extends View {
drawIcon(canvas, icon, iconX, iconY, iconWidth, iconHeight);
}
}
-
- if (LatinImeLogger.sVISUALDEBUG) {
- final Paint line = new Paint();
- drawHorizontalLine(canvas, baseline, keyWidth, 0xc0008000, line);
- drawVerticalLine(canvas, positionX, keyHeight, 0xc0800080, line);
- }
}
// Draw hint label.
@@ -507,12 +482,6 @@ public class KeyboardView extends View {
paint.setTextAlign(Align.CENTER);
}
canvas.drawText(hintLabel, 0, hintLabel.length(), hintX, hintY + adjustmentY, paint);
-
- if (LatinImeLogger.sVISUALDEBUG) {
- final Paint line = new Paint();
- drawHorizontalLine(canvas, (int)hintY, keyWidth, 0xc0808000, line);
- drawVerticalLine(canvas, (int)hintX, keyHeight, 0xc0808000, line);
- }
}
// Draw key icon.
@@ -524,26 +493,17 @@ public class KeyboardView extends View {
iconWidth = Math.min(icon.getIntrinsicWidth(), keyWidth);
}
final int iconHeight = icon.getIntrinsicHeight();
- final int iconX, alignX;
final int iconY = key.isAlignButtom() ? keyHeight - iconHeight
: (keyHeight - iconHeight) / 2;
+ final int iconX;
if (key.isAlignLeft()) {
iconX = mKeyLabelHorizontalPadding;
- alignX = iconX;
} else if (key.isAlignRight()) {
iconX = keyWidth - mKeyLabelHorizontalPadding - iconWidth;
- alignX = iconX + iconWidth;
} else { // Align center
iconX = (keyWidth - iconWidth) / 2;
- alignX = iconX + iconWidth / 2;
}
drawIcon(canvas, icon, iconX, iconY, iconWidth, iconHeight);
-
- if (LatinImeLogger.sVISUALDEBUG) {
- final Paint line = new Paint();
- drawVerticalLine(canvas, alignX, keyHeight, 0xc0800080, line);
- drawRectangle(canvas, iconX, iconY, iconWidth, iconHeight, 0x80c00000, line);
- }
}
if (key.hasPopupHint() && key.getMoreKeys() != null) {
@@ -565,12 +525,6 @@ public class KeyboardView extends View {
- TypefaceUtils.getReferenceCharWidth(paint) / 2.0f;
final float hintY = keyHeight - mKeyPopupHintLetterPadding;
canvas.drawText(POPUP_HINT_CHAR, hintX, hintY, paint);
-
- if (LatinImeLogger.sVISUALDEBUG) {
- final Paint line = new Paint();
- drawHorizontalLine(canvas, (int)hintY, keyWidth, 0xc0808000, line);
- drawVerticalLine(canvas, (int)hintX, keyHeight, 0xc0808000, line);
- }
}
protected static void drawIcon(final Canvas canvas, final Drawable icon, final int x,
@@ -581,32 +535,6 @@ public class KeyboardView extends View {
canvas.translate(-x, -y);
}
- private static void drawHorizontalLine(final Canvas canvas, final float y, final float w,
- final int color, final Paint paint) {
- paint.setStyle(Paint.Style.STROKE);
- paint.setStrokeWidth(1.0f);
- paint.setColor(color);
- canvas.drawLine(0.0f, y, w, y, paint);
- }
-
- private static void drawVerticalLine(final Canvas canvas, final float x, final float h,
- final int color, final Paint paint) {
- paint.setStyle(Paint.Style.STROKE);
- paint.setStrokeWidth(1.0f);
- paint.setColor(color);
- canvas.drawLine(x, 0.0f, x, h, paint);
- }
-
- private static void drawRectangle(final Canvas canvas, final float x, final float y,
- final float w, final float h, final int color, final Paint paint) {
- paint.setStyle(Paint.Style.STROKE);
- paint.setStrokeWidth(1.0f);
- paint.setColor(color);
- canvas.translate(x, y);
- canvas.drawRect(0.0f, 0.0f, w, h, paint);
- canvas.translate(-x, -y);
- }
-
public Paint newLabelPaint(final Key key) {
final Paint paint = new Paint();
paint.setAntiAlias(true);
diff --git a/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java b/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
index 86036ccc1..95258ccdc 100644
--- a/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
@@ -52,17 +52,12 @@ import com.android.inputmethod.keyboard.internal.NonDistinctMultitouchHelper;
import com.android.inputmethod.keyboard.internal.SlidingKeyInputDrawingPreview;
import com.android.inputmethod.keyboard.internal.TimerHandler;
import com.android.inputmethod.latin.Constants;
-import com.android.inputmethod.latin.LatinImeLogger;
import com.android.inputmethod.latin.R;
import com.android.inputmethod.latin.SuggestedWords;
-import com.android.inputmethod.latin.define.ProductionFlag;
import com.android.inputmethod.latin.settings.DebugSettings;
-import com.android.inputmethod.latin.utils.CollectionUtils;
import com.android.inputmethod.latin.utils.CoordinateUtils;
import com.android.inputmethod.latin.utils.SpacebarLanguageUtils;
import com.android.inputmethod.latin.utils.TypefaceUtils;
-import com.android.inputmethod.latin.utils.UsabilityStudyLogUtils;
-import com.android.inputmethod.research.ResearchLogger;
import java.util.WeakHashMap;
@@ -150,8 +145,7 @@ public final class MainKeyboardView extends KeyboardView implements PointerTrack
private final Paint mBackgroundDimAlphaPaint = new Paint();
private boolean mNeedsToDimEntireKeyboard;
private final View mMoreKeysKeyboardContainer;
- private final WeakHashMap<Key, Keyboard> mMoreKeysKeyboardCache =
- CollectionUtils.newWeakHashMap();
+ private final WeakHashMap<Key, Keyboard> mMoreKeysKeyboardCache = new WeakHashMap<>();
private final boolean mConfigShowMoreKeysKeyboardAtTouchedPoint;
// More keys panel (used by both more keys keyboard and more suggestions view)
// TODO: Consider extending to support multiple more keys panels
@@ -389,10 +383,6 @@ public final class MainKeyboardView extends KeyboardView implements PointerTrack
mSpaceKey = keyboard.getKey(Constants.CODE_SPACE);
final int keyHeight = keyboard.mMostCommonKeyHeight - keyboard.mVerticalGap;
mLanguageOnSpacebarTextSize = keyHeight * mLanguageOnSpacebarTextRatio;
- if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
- final int orientation = getContext().getResources().getConfiguration().orientation;
- ResearchLogger.mainKeyboardView_setKeyboard(keyboard, orientation);
- }
mAccessibilityDelegate.setKeyboard(keyboard);
}
@@ -554,24 +544,12 @@ public final class MainKeyboardView extends KeyboardView implements PointerTrack
protected void onAttachedToWindow() {
super.onAttachedToWindow();
installPreviewPlacerView();
- // Notify the ResearchLogger (development only diagnostics) that the keyboard view has
- // been attached. This is needed to properly show the splash screen, which requires that
- // the window token of the KeyboardView be non-null.
- if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
- ResearchLogger.getInstance().mainKeyboardView_onAttachedToWindow(this);
- }
}
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
mDrawingPreviewPlacerView.removeAllViews();
- // Notify the ResearchLogger (development only diagnostics) that the keyboard view has
- // been detached. This is needed to invalidate the reference of {@link MainKeyboardView}
- // to null.
- if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
- ResearchLogger.getInstance().mainKeyboardView_onDetachedFromWindow();
- }
}
private MoreKeysPanel onCreateMoreKeysPanel(final Key key, final Context context) {
@@ -607,9 +585,6 @@ public final class MainKeyboardView extends KeyboardView implements PointerTrack
if (key == null) {
return;
}
- if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
- ResearchLogger.mainKeyboardView_onLongPress();
- }
final KeyboardActionListener listener = mKeyboardActionListener;
if (key.hasNoPanelAutoMoreKey()) {
final int moreKeyCode = key.getMoreKeys()[0].mCode;
@@ -722,14 +697,6 @@ public final class MainKeyboardView extends KeyboardView implements PointerTrack
}
public boolean processMotionEvent(final MotionEvent me) {
- if (LatinImeLogger.sUsabilityStudy) {
- UsabilityStudyLogUtils.writeMotionEvent(me);
- }
- // Currently the same "move" event is being logged twice.
- if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
- ResearchLogger.mainKeyboardView_processMotionEvent(me);
- }
-
final int index = me.getActionIndex();
final int id = me.getPointerId(index);
final PointerTracker tracker = PointerTracker.getPointerTracker(id);
@@ -765,19 +732,14 @@ public final class MainKeyboardView extends KeyboardView implements PointerTrack
}
/**
- * Receives hover events from the input framework.
- *
- * @param event The motion event to be dispatched.
- * @return {@code true} if the event was handled by the view, {@code false}
- * otherwise
+ * {@inheritDoc}
*/
@Override
- public boolean dispatchHoverEvent(final MotionEvent event) {
- if (!AccessibilityUtils.getInstance().isTouchExplorationEnabled()) {
- // Reflection doesn't support calling superclass methods.
- return false;
+ public boolean onHoverEvent(final MotionEvent event) {
+ if (AccessibilityUtils.getInstance().isTouchExplorationEnabled()) {
+ return mAccessibilityDelegate.onHoverEvent(event);
}
- return mAccessibilityDelegate.dispatchHoverEvent(event);
+ return super.onHoverEvent(event);
}
public void updateShortcutKey(final boolean available) {
diff --git a/java/src/com/android/inputmethod/keyboard/PointerTracker.java b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
index 4777166ea..f80761132 100644
--- a/java/src/com/android/inputmethod/keyboard/PointerTracker.java
+++ b/java/src/com/android/inputmethod/keyboard/PointerTracker.java
@@ -35,12 +35,9 @@ import com.android.inputmethod.latin.Constants;
import com.android.inputmethod.latin.InputPointers;
import com.android.inputmethod.latin.LatinImeLogger;
import com.android.inputmethod.latin.R;
-import com.android.inputmethod.latin.define.ProductionFlag;
import com.android.inputmethod.latin.settings.Settings;
-import com.android.inputmethod.latin.utils.CollectionUtils;
import com.android.inputmethod.latin.utils.CoordinateUtils;
import com.android.inputmethod.latin.utils.ResourceUtils;
-import com.android.inputmethod.research.ResearchLogger;
import java.util.ArrayList;
@@ -144,7 +141,7 @@ public final class PointerTracker implements PointerTrackerQueue.Element,
// TODO: Device specific parameter would be better for device specific hack?
private static final float PHANTOM_SUDDEN_MOVE_THRESHOLD = 0.25f; // in keyWidth
- private static final ArrayList<PointerTracker> sTrackers = CollectionUtils.newArrayList();
+ private static final ArrayList<PointerTracker> sTrackers = new ArrayList<>();
private static final PointerTrackerQueue sPointerTrackerQueue = new PointerTrackerQueue();
public final int mPointerId;
@@ -336,10 +333,6 @@ public final class PointerTracker implements PointerTrackerQueue.Element,
output, ignoreModifierKey ? " ignoreModifier" : "",
altersCode ? " altersCode" : "", key.isEnabled() ? "" : " disabled"));
}
- if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
- ResearchLogger.pointerTracker_callListenerOnCodeInput(key, x, y, ignoreModifierKey,
- altersCode, code);
- }
if (ignoreModifierKey) {
return;
}
@@ -374,10 +367,6 @@ public final class PointerTracker implements PointerTrackerQueue.Element,
withSliding ? " sliding" : "", ignoreModifierKey ? " ignoreModifier" : "",
key.isEnabled() ? "": " disabled"));
}
- if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
- ResearchLogger.pointerTracker_callListenerOnRelease(key, primaryCode, withSliding,
- ignoreModifierKey);
- }
if (ignoreModifierKey) {
return;
}
@@ -397,9 +386,6 @@ public final class PointerTracker implements PointerTrackerQueue.Element,
if (DEBUG_LISTENER) {
Log.d(TAG, String.format("[%d] onCancelInput", mPointerId));
}
- if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
- ResearchLogger.pointerTracker_callListenerOnCancelInput();
- }
sListener.onCancelInput();
}
@@ -703,9 +689,6 @@ public final class PointerTracker implements PointerTrackerQueue.Element,
Log.w(TAG, String.format("[%d] onDownEvent:"
+ " ignore potential noise: time=%d distance=%d",
mPointerId, deltaT, distance));
- if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
- ResearchLogger.pointerTracker_onDownEvent(deltaT, distance * distance);
- }
cancelTrackingForAction();
return;
}
@@ -877,10 +860,6 @@ public final class PointerTracker implements PointerTrackerQueue.Element,
lastX, lastY, Constants.printableCode(oldKey.getCode()),
x, y, Constants.printableCode(key.getCode())));
}
- // TODO: This should be moved to outside of this nested if-clause?
- if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
- ResearchLogger.pointerTracker_onMoveEvent(x, y, lastX, lastY);
- }
onUpEventInternal(x, y, eventTime);
onDownEventInternal(x, y, eventTime);
}
diff --git a/java/src/com/android/inputmethod/keyboard/ProximityInfo.java b/java/src/com/android/inputmethod/keyboard/ProximityInfo.java
index c89bda40e..c19cd671a 100644
--- a/java/src/com/android/inputmethod/keyboard/ProximityInfo.java
+++ b/java/src/com/android/inputmethod/keyboard/ProximityInfo.java
@@ -22,7 +22,6 @@ import android.util.Log;
import com.android.inputmethod.keyboard.internal.TouchPositionCorrection;
import com.android.inputmethod.latin.Constants;
-import com.android.inputmethod.latin.utils.CollectionUtils;
import com.android.inputmethod.latin.utils.JniUtils;
import java.util.ArrayList;
@@ -55,6 +54,7 @@ public class ProximityInfo {
private final List<Key>[] mGridNeighbors;
private final String mLocaleStr;
+ @SuppressWarnings("unchecked")
ProximityInfo(final String localeStr, final int gridWidth, final int gridHeight,
final int minWidth, final int height, final int mostCommonKeyWidth,
final int mostCommonKeyHeight, final List<Key> sortedKeys,
@@ -360,7 +360,7 @@ y |---+---+---+---+-v-+-|-+---+---+---+---+---| | thresholdBase and get
for (int i = 0; i < gridSize; ++i) {
final int indexStart = i * keyCount;
final int indexEnd = indexStart + neighborCountPerCell[i];
- final ArrayList<Key> neighbors = CollectionUtils.newArrayList(indexEnd - indexStart);
+ final ArrayList<Key> neighbors = new ArrayList<>(indexEnd - indexStart);
for (int index = indexStart; index < indexEnd; index++) {
neighbors.add(neighborsFlatBuffer[index]);
}
diff --git a/java/src/com/android/inputmethod/keyboard/emoji/DynamicGridKeyboard.java b/java/src/com/android/inputmethod/keyboard/emoji/DynamicGridKeyboard.java
index c7a9025c0..daeb1f928 100644
--- a/java/src/com/android/inputmethod/keyboard/emoji/DynamicGridKeyboard.java
+++ b/java/src/com/android/inputmethod/keyboard/emoji/DynamicGridKeyboard.java
@@ -23,7 +23,6 @@ import android.util.Log;
import com.android.inputmethod.keyboard.Key;
import com.android.inputmethod.keyboard.Keyboard;
import com.android.inputmethod.latin.settings.Settings;
-import com.android.inputmethod.latin.utils.CollectionUtils;
import com.android.inputmethod.latin.utils.JsonUtils;
import java.util.ArrayDeque;
@@ -47,8 +46,8 @@ final class DynamicGridKeyboard extends Keyboard {
private final int mColumnsNum;
private final int mMaxKeyCount;
private final boolean mIsRecents;
- private final ArrayDeque<GridKey> mGridKeys = CollectionUtils.newArrayDeque();
- private final ArrayDeque<Key> mPendingKeys = CollectionUtils.newArrayDeque();
+ private final ArrayDeque<GridKey> mGridKeys = new ArrayDeque<>();
+ private final ArrayDeque<Key> mPendingKeys = new ArrayDeque<>();
private List<Key> mCachedGridKeys;
@@ -131,7 +130,7 @@ final class DynamicGridKeyboard extends Keyboard {
}
private void saveRecentKeys() {
- final ArrayList<Object> keys = CollectionUtils.newArrayList();
+ final ArrayList<Object> keys = new ArrayList<>();
for (final Key key : mGridKeys) {
if (key.getOutputText() != null) {
keys.add(key.getOutputText());
diff --git a/java/src/com/android/inputmethod/keyboard/emoji/EmojiCategory.java b/java/src/com/android/inputmethod/keyboard/emoji/EmojiCategory.java
index 859099110..512d4615d 100644
--- a/java/src/com/android/inputmethod/keyboard/emoji/EmojiCategory.java
+++ b/java/src/com/android/inputmethod/keyboard/emoji/EmojiCategory.java
@@ -31,7 +31,6 @@ import com.android.inputmethod.keyboard.KeyboardLayoutSet;
import com.android.inputmethod.latin.Constants;
import com.android.inputmethod.latin.R;
import com.android.inputmethod.latin.settings.Settings;
-import com.android.inputmethod.latin.utils.CollectionUtils;
import java.util.ArrayList;
import java.util.Collections;
@@ -101,12 +100,11 @@ final class EmojiCategory {
private final Resources mRes;
private final int mMaxPageKeyCount;
private final KeyboardLayoutSet mLayoutSet;
- private final HashMap<String, Integer> mCategoryNameToIdMap = CollectionUtils.newHashMap();
+ private final HashMap<String, Integer> mCategoryNameToIdMap = new HashMap<>();
private final int[] mCategoryTabIconId = new int[sCategoryName.length];
- private final ArrayList<CategoryProperties> mShownCategories =
- CollectionUtils.newArrayList();
- private final ConcurrentHashMap<Long, DynamicGridKeyboard>
- mCategoryKeyboardMap = new ConcurrentHashMap<Long, DynamicGridKeyboard>();
+ private final ArrayList<CategoryProperties> mShownCategories = new ArrayList<>();
+ private final ConcurrentHashMap<Long, DynamicGridKeyboard> mCategoryKeyboardMap =
+ new ConcurrentHashMap<>();
private int mCurrentCategoryId = EmojiCategory.ID_UNSPECIFIED;
private int mCurrentCategoryPageId = 0;
@@ -257,7 +255,7 @@ final class EmojiCategory {
final int temp = sum;
sum += properties.mPageCount;
if (sum > position) {
- return new Pair<Integer, Integer>(properties.mCategoryId, position - temp);
+ return new Pair<>(properties.mCategoryId, position - temp);
}
}
return null;
@@ -343,7 +341,7 @@ final class EmojiCategory {
};
private static Key[][] sortKeysIntoPages(final List<Key> inKeys, final int maxPageCount) {
- final ArrayList<Key> keys = CollectionUtils.newArrayList(inKeys);
+ final ArrayList<Key> keys = new ArrayList<>(inKeys);
Collections.sort(keys, EMOJI_KEY_COMPARATOR);
final int pageCount = (keys.size() - 1) / maxPageCount + 1;
final Key[][] retval = new Key[pageCount][maxPageCount];
diff --git a/java/src/com/android/inputmethod/keyboard/emoji/EmojiCategoryPageIndicatorView.java b/java/src/com/android/inputmethod/keyboard/emoji/EmojiCategoryPageIndicatorView.java
index a6b089169..43d62c71a 100644
--- a/java/src/com/android/inputmethod/keyboard/emoji/EmojiCategoryPageIndicatorView.java
+++ b/java/src/com/android/inputmethod/keyboard/emoji/EmojiCategoryPageIndicatorView.java
@@ -17,14 +17,11 @@
package com.android.inputmethod.keyboard.emoji;
import android.content.Context;
-import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.View;
-import com.android.inputmethod.latin.R;
-
public final class EmojiCategoryPageIndicatorView extends View {
private static final float BOTTOM_MARGIN_RATIO = 1.0f;
private final Paint mPaint = new Paint();
@@ -33,19 +30,17 @@ public final class EmojiCategoryPageIndicatorView extends View {
private float mOffset = 0.0f;
public EmojiCategoryPageIndicatorView(final Context context, final AttributeSet attrs) {
- this(context, attrs, R.attr.emojiCategoryPageIndicatorViewStyle);
+ this(context, attrs, 0);
}
public EmojiCategoryPageIndicatorView(final Context context, final AttributeSet attrs,
final int defStyle) {
super(context, attrs, defStyle);
- final TypedArray indicatorViewAttr = context.obtainStyledAttributes(attrs,
- R.styleable.EmojiCategoryPageIndicatorView, defStyle,
- R.style.EmojiCategoryPageIndicatorView);
- final int indicatorColor = indicatorViewAttr.getColor(
- R.styleable.EmojiCategoryPageIndicatorView_emojiCategoryPageIndicatorColor, 0);
- indicatorViewAttr.recycle();
- mPaint.setColor(indicatorColor);
+ }
+
+ public void setColors(final int foregroundColor, final int backgroundColor) {
+ mPaint.setColor(foregroundColor);
+ setBackgroundColor(backgroundColor);
}
public void setCategoryPageId(final int size, final int id, final float offset) {
diff --git a/java/src/com/android/inputmethod/keyboard/emoji/EmojiPageKeyboardView.java b/java/src/com/android/inputmethod/keyboard/emoji/EmojiPageKeyboardView.java
index 48efa17ad..0166802a4 100644
--- a/java/src/com/android/inputmethod/keyboard/emoji/EmojiPageKeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/emoji/EmojiPageKeyboardView.java
@@ -83,13 +83,15 @@ final class EmojiPageKeyboardView extends KeyboardView implements
mKeyDetector.setKeyboard(keyboard, 0 /* correctionX */, 0 /* correctionY */);
}
+ /**
+ * {@inheritDoc}
+ */
@Override
- public boolean dispatchHoverEvent(final MotionEvent event) {
- if (!AccessibilityUtils.getInstance().isTouchExplorationEnabled()) {
- // Reflection doesn't support calling superclass methods.
- return false;
+ public boolean onHoverEvent(final MotionEvent event) {
+ if (AccessibilityUtils.getInstance().isTouchExplorationEnabled()) {
+ return mAccessibilityDelegate.onHoverEvent(event);
}
- return mAccessibilityDelegate.dispatchHoverEvent(event);
+ return super.onHoverEvent(event);
}
/**
@@ -102,7 +104,7 @@ final class EmojiPageKeyboardView extends KeyboardView implements
}
final Key key = getKey(e);
if (key != null && key != mCurrentKey) {
- releaseCurrentKey();
+ releaseCurrentKey(false /* withKeyRegistering */);
}
return true;
}
@@ -119,7 +121,7 @@ final class EmojiPageKeyboardView extends KeyboardView implements
return mKeyDetector.detectHitKey(x, y);
}
- public void releaseCurrentKey() {
+ public void releaseCurrentKey(final boolean withKeyRegistering) {
mHandler.removeCallbacks(mPendingKeyDown);
mPendingKeyDown = null;
final Key currentKey = mCurrentKey;
@@ -128,13 +130,16 @@ final class EmojiPageKeyboardView extends KeyboardView implements
}
currentKey.onReleased();
invalidateKey(currentKey);
+ if (withKeyRegistering) {
+ mListener.onReleaseKey(currentKey);
+ }
mCurrentKey = null;
}
@Override
public boolean onDown(final MotionEvent e) {
final Key key = getKey(e);
- releaseCurrentKey();
+ releaseCurrentKey(false /* withKeyRegistering */);
mCurrentKey = key;
if (key == null) {
return false;
@@ -163,7 +168,7 @@ final class EmojiPageKeyboardView extends KeyboardView implements
final Key key = getKey(e);
final Runnable pendingKeyDown = mPendingKeyDown;
final Key currentKey = mCurrentKey;
- releaseCurrentKey();
+ releaseCurrentKey(false /* withKeyRegistering */);
if (key == null) {
return false;
}
@@ -189,14 +194,14 @@ final class EmojiPageKeyboardView extends KeyboardView implements
@Override
public boolean onScroll(final MotionEvent e1, final MotionEvent e2, final float distanceX,
final float distanceY) {
- releaseCurrentKey();
+ releaseCurrentKey(false /* withKeyRegistering */);
return false;
}
@Override
public boolean onFling(final MotionEvent e1, final MotionEvent e2, final float velocityX,
final float velocityY) {
- releaseCurrentKey();
+ releaseCurrentKey(false /* withKeyRegistering */);
return false;
}
diff --git a/java/src/com/android/inputmethod/keyboard/emoji/EmojiPalettesAdapter.java b/java/src/com/android/inputmethod/keyboard/emoji/EmojiPalettesAdapter.java
index 52a4dde97..68056e0eb 100644
--- a/java/src/com/android/inputmethod/keyboard/emoji/EmojiPalettesAdapter.java
+++ b/java/src/com/android/inputmethod/keyboard/emoji/EmojiPalettesAdapter.java
@@ -27,7 +27,6 @@ import com.android.inputmethod.keyboard.Key;
import com.android.inputmethod.keyboard.Keyboard;
import com.android.inputmethod.keyboard.KeyboardView;
import com.android.inputmethod.latin.R;
-import com.android.inputmethod.latin.utils.CollectionUtils;
final class EmojiPalettesAdapter extends PagerAdapter {
private static final String TAG = EmojiPalettesAdapter.class.getSimpleName();
@@ -35,8 +34,7 @@ final class EmojiPalettesAdapter extends PagerAdapter {
private final EmojiPageKeyboardView.OnKeyEventListener mListener;
private final DynamicGridKeyboard mRecentsKeyboard;
- private final SparseArray<EmojiPageKeyboardView> mActiveKeyboardViews =
- CollectionUtils.newSparseArray();
+ private final SparseArray<EmojiPageKeyboardView> mActiveKeyboardViews = new SparseArray<>();
private final EmojiCategory mEmojiCategory;
private int mActivePosition = 0;
@@ -70,13 +68,18 @@ final class EmojiPalettesAdapter extends PagerAdapter {
}
public void onPageScrolled() {
+ releaseCurrentKey(false /* withKeyRegistering */);
+ }
+
+ public void releaseCurrentKey(final boolean withKeyRegistering) {
// Make sure the delayed key-down event (highlight effect and haptic feedback) will be
// canceled.
final EmojiPageKeyboardView currentKeyboardView =
mActiveKeyboardViews.get(mActivePosition);
- if (currentKeyboardView != null) {
- currentKeyboardView.releaseCurrentKey();
+ if (currentKeyboardView == null) {
+ return;
}
+ currentKeyboardView.releaseCurrentKey(withKeyRegistering);
}
@Override
@@ -92,7 +95,7 @@ final class EmojiPalettesAdapter extends PagerAdapter {
}
final EmojiPageKeyboardView oldKeyboardView = mActiveKeyboardViews.get(mActivePosition);
if (oldKeyboardView != null) {
- oldKeyboardView.releaseCurrentKey();
+ oldKeyboardView.releaseCurrentKey(false /* withKeyRegistering */);
oldKeyboardView.deallocateMemory();
}
mActivePosition = position;
diff --git a/java/src/com/android/inputmethod/keyboard/emoji/EmojiPalettesView.java b/java/src/com/android/inputmethod/keyboard/emoji/EmojiPalettesView.java
index 6b9e880b9..f9e25bcc3 100644
--- a/java/src/com/android/inputmethod/keyboard/emoji/EmojiPalettesView.java
+++ b/java/src/com/android/inputmethod/keyboard/emoji/EmojiPalettesView.java
@@ -36,6 +36,7 @@ import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TabHost;
import android.widget.TabHost.OnTabChangeListener;
+import android.widget.TabWidget;
import android.widget.TextView;
import com.android.inputmethod.keyboard.Key;
@@ -68,6 +69,11 @@ public final class EmojiPalettesView extends LinearLayout implements OnTabChange
EmojiPageKeyboardView.OnKeyEventListener {
private final int mFunctionalKeyBackgroundId;
private final int mSpacebarBackgroundId;
+ private final boolean mCategoryIndicatorEnabled;
+ private final int mCategoryIndicatorDrawableResId;
+ private final int mCategoryIndicatorBackgroundResId;
+ private final int mCategoryPageIndicatorColor;
+ private final int mCategoryPageIndicatorBackground;
private final DeleteKeyOnTouchListener mDeleteKeyOnTouchListener;
private EmojiPalettesAdapter mEmojiPalettesAdapter;
private final EmojiLayoutParams mEmojiLayoutParams;
@@ -114,6 +120,16 @@ public final class EmojiPalettesView extends LinearLayout implements OnTabChange
R.styleable.EmojiPalettesView, defStyle, R.style.EmojiPalettesView);
mEmojiCategory = new EmojiCategory(PreferenceManager.getDefaultSharedPreferences(context),
res, layoutSet, emojiPalettesViewAttr);
+ mCategoryIndicatorEnabled = emojiPalettesViewAttr.getBoolean(
+ R.styleable.EmojiPalettesView_categoryIndicatorEnabled, false);
+ mCategoryIndicatorDrawableResId = emojiPalettesViewAttr.getResourceId(
+ R.styleable.EmojiPalettesView_categoryIndicatorDrawable, 0);
+ mCategoryIndicatorBackgroundResId = emojiPalettesViewAttr.getResourceId(
+ R.styleable.EmojiPalettesView_categoryIndicatorBackground, 0);
+ mCategoryPageIndicatorColor = emojiPalettesViewAttr.getColor(
+ R.styleable.EmojiPalettesView_categoryPageIndicatorColor, 0);
+ mCategoryPageIndicatorBackground = emojiPalettesViewAttr.getColor(
+ R.styleable.EmojiPalettesView_categoryPageIndicatorBackground, 0);
emojiPalettesViewAttr.recycle();
mDeleteKeyOnTouchListener = new DeleteKeyOnTouchListener(context);
}
@@ -152,7 +168,15 @@ public final class EmojiPalettesView extends LinearLayout implements OnTabChange
addTab(mTabHost, properties.mCategoryId);
}
mTabHost.setOnTabChangedListener(this);
- mTabHost.getTabWidget().setStripEnabled(true);
+ final TabWidget tabWidget = mTabHost.getTabWidget();
+ tabWidget.setStripEnabled(mCategoryIndicatorEnabled);
+ if (mCategoryIndicatorEnabled) {
+ // On TabWidget's strip, what looks like an indicator is actually a background.
+ // And what looks like a background are actually left and right drawables.
+ tabWidget.setBackgroundResource(mCategoryIndicatorDrawableResId);
+ tabWidget.setLeftStripDrawable(mCategoryIndicatorBackgroundResId);
+ tabWidget.setRightStripDrawable(mCategoryIndicatorBackgroundResId);
+ }
mEmojiPalettesAdapter = new EmojiPalettesAdapter(mEmojiCategory, this);
@@ -165,6 +189,8 @@ public final class EmojiPalettesView extends LinearLayout implements OnTabChange
mEmojiCategoryPageIndicatorView =
(EmojiCategoryPageIndicatorView)findViewById(R.id.emoji_category_page_id_view);
+ mEmojiCategoryPageIndicatorView.setColors(
+ mCategoryPageIndicatorColor, mCategoryPageIndicatorBackground);
mEmojiLayoutParams.setCategoryPageIdViewProperties(mEmojiCategoryPageIndicatorView);
setCurrentCategoryId(mEmojiCategory.getCurrentCategoryId(), true /* force */);
@@ -354,6 +380,7 @@ public final class EmojiPalettesView extends LinearLayout implements OnTabChange
}
public void stopEmojiPalettes() {
+ mEmojiPalettesAdapter.releaseCurrentKey(true /* withKeyRegistering */);
mEmojiPalettesAdapter.flushPendingRecentKeys();
mEmojiPager.setAdapter(null);
}
diff --git a/java/src/com/android/inputmethod/keyboard/internal/DrawingPreviewPlacerView.java b/java/src/com/android/inputmethod/keyboard/internal/DrawingPreviewPlacerView.java
index fdc2458d4..3b4c43418 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/DrawingPreviewPlacerView.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/DrawingPreviewPlacerView.java
@@ -24,7 +24,6 @@ import android.graphics.PorterDuffXfermode;
import android.util.AttributeSet;
import android.widget.RelativeLayout;
-import com.android.inputmethod.latin.utils.CollectionUtils;
import com.android.inputmethod.latin.utils.CoordinateUtils;
import java.util.ArrayList;
@@ -32,7 +31,7 @@ import java.util.ArrayList;
public final class DrawingPreviewPlacerView extends RelativeLayout {
private final int[] mKeyboardViewOrigin = CoordinateUtils.newInstance();
- private final ArrayList<AbstractDrawingPreview> mPreviews = CollectionUtils.newArrayList();
+ private final ArrayList<AbstractDrawingPreview> mPreviews = new ArrayList<>();
public DrawingPreviewPlacerView(final Context context, final AttributeSet attrs) {
super(context, attrs);
diff --git a/java/src/com/android/inputmethod/keyboard/internal/GestureTrailsDrawingPreview.java b/java/src/com/android/inputmethod/keyboard/internal/GestureTrailsDrawingPreview.java
index d8b00c707..72628e38a 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/GestureTrailsDrawingPreview.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/GestureTrailsDrawingPreview.java
@@ -29,15 +29,13 @@ import android.util.SparseArray;
import android.view.View;
import com.android.inputmethod.keyboard.PointerTracker;
-import com.android.inputmethod.latin.utils.CollectionUtils;
import com.android.inputmethod.latin.utils.LeakGuardHandlerWrapper;
/**
* Draw preview graphics of multiple gesture trails during gesture input.
*/
public final class GestureTrailsDrawingPreview extends AbstractDrawingPreview {
- private final SparseArray<GestureTrailDrawingPoints> mGestureTrails =
- CollectionUtils.newSparseArray();
+ private final SparseArray<GestureTrailDrawingPoints> mGestureTrails = new SparseArray<>();
private final GestureTrailDrawingParams mDrawingParams;
private final Paint mGesturePaint;
private int mOffscreenWidth;
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyPreviewChoreographer.java b/java/src/com/android/inputmethod/keyboard/internal/KeyPreviewChoreographer.java
index 625d1f0a4..605519b02 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyPreviewChoreographer.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyPreviewChoreographer.java
@@ -32,7 +32,6 @@ import android.widget.TextView;
import com.android.inputmethod.keyboard.Key;
import com.android.inputmethod.latin.R;
-import com.android.inputmethod.latin.utils.CollectionUtils;
import com.android.inputmethod.latin.utils.CoordinateUtils;
import com.android.inputmethod.latin.utils.ViewLayoutUtils;
@@ -48,9 +47,9 @@ import java.util.HashSet;
*/
public final class KeyPreviewChoreographer {
// Free {@link TextView} pool that can be used for key preview.
- private final ArrayDeque<TextView> mFreeKeyPreviewTextViews = CollectionUtils.newArrayDeque();
+ private final ArrayDeque<TextView> mFreeKeyPreviewTextViews = new ArrayDeque<>();
// Map from {@link Key} to {@link TextView} that is currently being displayed as key preview.
- private final HashMap<Key,TextView> mShowingKeyPreviewTextViews = CollectionUtils.newHashMap();
+ private final HashMap<Key,TextView> mShowingKeyPreviewTextViews = new HashMap<>();
private final KeyPreviewDrawParams mParams;
@@ -83,7 +82,7 @@ public final class KeyPreviewChoreographer {
}
public void dismissAllKeyPreviews() {
- for (final Key key : new HashSet<Key>(mShowingKeyPreviewTextViews.keySet())) {
+ for (final Key key : new HashSet<>(mShowingKeyPreviewTextViews.keySet())) {
dismissKeyPreview(key, false /* withAnimation */);
}
}
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyStylesSet.java b/java/src/com/android/inputmethod/keyboard/internal/KeyStylesSet.java
index 700c9b07c..0b0e761d2 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyStylesSet.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyStylesSet.java
@@ -21,7 +21,6 @@ import android.util.Log;
import android.util.SparseArray;
import com.android.inputmethod.latin.R;
-import com.android.inputmethod.latin.utils.CollectionUtils;
import com.android.inputmethod.latin.utils.XmlParseUtils;
import org.xmlpull.v1.XmlPullParser;
@@ -34,7 +33,7 @@ public final class KeyStylesSet {
private static final String TAG = KeyStylesSet.class.getSimpleName();
private static final boolean DEBUG = false;
- private final HashMap<String, KeyStyle> mStyles = CollectionUtils.newHashMap();
+ private final HashMap<String, KeyStyle> mStyles = new HashMap<>();
private final KeyboardTextsSet mTextsSet;
private final KeyStyle mEmptyKeyStyle;
@@ -75,7 +74,7 @@ public final class KeyStylesSet {
private static final class DeclaredKeyStyle extends KeyStyle {
private final HashMap<String, KeyStyle> mStyles;
private final String mParentStyleName;
- private final SparseArray<Object> mStyleAttributes = CollectionUtils.newSparseArray();
+ private final SparseArray<Object> mStyleAttributes = new SparseArray<>();
public DeclaredKeyStyle(final String parentStyleName, final KeyboardTextsSet textsSet,
final HashMap<String, KeyStyle> styles) {
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardCodesSet.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardCodesSet.java
index 06da5719b..62b69dcc9 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardCodesSet.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardCodesSet.java
@@ -17,14 +17,13 @@
package com.android.inputmethod.keyboard.internal;
import com.android.inputmethod.latin.Constants;
-import com.android.inputmethod.latin.utils.CollectionUtils;
import java.util.HashMap;
public final class KeyboardCodesSet {
public static final String PREFIX_CODE = "!code/";
- private static final HashMap<String, Integer> sNameToIdMap = CollectionUtils.newHashMap();
+ private static final HashMap<String, Integer> sNameToIdMap = new HashMap<>();
private KeyboardCodesSet() {
// This utility class is not publicly instantiable.
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardIconsSet.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardIconsSet.java
index b5a94807e..916c4e1a7 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardIconsSet.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardIconsSet.java
@@ -23,7 +23,6 @@ import android.util.Log;
import android.util.SparseIntArray;
import com.android.inputmethod.latin.R;
-import com.android.inputmethod.latin.utils.CollectionUtils;
import java.util.HashMap;
@@ -60,7 +59,7 @@ public final class KeyboardIconsSet {
private static final SparseIntArray ATTR_ID_TO_ICON_ID = new SparseIntArray();
// Icon name to icon id map.
- private static final HashMap<String, Integer> sNameToIdsMap = CollectionUtils.newHashMap();
+ private static final HashMap<String, Integer> sNameToIdsMap = new HashMap<>();
private static final Object[] NAMES_AND_ATTR_IDS = {
NAME_UNDEFINED, ATTR_UNDEFINED,
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardParams.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardParams.java
index a61a79b85..5df9d3ece 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardParams.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardParams.java
@@ -21,7 +21,6 @@ import android.util.SparseIntArray;
import com.android.inputmethod.keyboard.Key;
import com.android.inputmethod.keyboard.KeyboardId;
import com.android.inputmethod.latin.Constants;
-import com.android.inputmethod.latin.utils.CollectionUtils;
import java.util.ArrayList;
import java.util.Comparator;
@@ -61,9 +60,9 @@ public class KeyboardParams {
public int GRID_HEIGHT;
// Keys are sorted from top-left to bottom-right order.
- public final SortedSet<Key> mSortedKeys = new TreeSet<Key>(ROW_COLUMN_COMPARATOR);
- public final ArrayList<Key> mShiftKeys = CollectionUtils.newArrayList();
- public final ArrayList<Key> mAltCodeKeysWhileTyping = CollectionUtils.newArrayList();
+ public final SortedSet<Key> mSortedKeys = new TreeSet<>(ROW_COLUMN_COMPARATOR);
+ public final ArrayList<Key> mShiftKeys = new ArrayList<>();
+ public final ArrayList<Key> mAltCodeKeysWhileTyping = new ArrayList<>();
public final KeyboardIconsSet mIconsSet = new KeyboardIconsSet();
public final KeyboardTextsSet mTextsSet = new KeyboardTextsSet();
public final KeyStylesSet mKeyStyles = new KeyStylesSet(mTextsSet);
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardRow.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardRow.java
index 0f9497c27..6db1d02c9 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardRow.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardRow.java
@@ -23,7 +23,6 @@ import android.util.Xml;
import com.android.inputmethod.keyboard.Key;
import com.android.inputmethod.keyboard.Keyboard;
import com.android.inputmethod.latin.R;
-import com.android.inputmethod.latin.utils.CollectionUtils;
import com.android.inputmethod.latin.utils.ResourceUtils;
import org.xmlpull.v1.XmlPullParser;
@@ -44,7 +43,7 @@ public final class KeyboardRow {
/** The height of this row. */
private final int mRowHeight;
- private final ArrayDeque<RowAttributes> mRowAttributesStack = CollectionUtils.newArrayDeque();
+ private final ArrayDeque<RowAttributes> mRowAttributesStack = new ArrayDeque<>();
private static class RowAttributes {
/** Default width of a key in this row. */
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsSet.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsSet.java
index 0047aa4a1..cd6abeed3 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsSet.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsSet.java
@@ -22,7 +22,6 @@ import android.text.TextUtils;
import com.android.inputmethod.annotations.UsedForTesting;
import com.android.inputmethod.latin.Constants;
-import com.android.inputmethod.latin.utils.CollectionUtils;
import com.android.inputmethod.latin.utils.RunInLocale;
import com.android.inputmethod.latin.utils.SubtypeLocaleUtils;
@@ -38,7 +37,7 @@ public final class KeyboardTextsSet {
private String[] mTextsTable;
// Resource name to text map.
- private HashMap<String, String> mResourceNameToTextsMap = CollectionUtils.newHashMap();
+ private HashMap<String, String> mResourceNameToTextsMap = new HashMap<>();
public void setLocale(final Locale locale, final Context context) {
mTextsTable = KeyboardTextsTable.getTextsTable(locale);
@@ -141,6 +140,7 @@ public final class KeyboardTextsSet {
"label_send_key",
"label_next_key",
"label_done_key",
+ "label_search_key",
"label_previous_key",
// Other labels.
"label_pause_key",
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.java
index 7e6181a4e..40c915c8d 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardTextsTable.java
@@ -16,8 +16,6 @@
package com.android.inputmethod.keyboard.internal;
-import com.android.inputmethod.latin.utils.CollectionUtils;
-
import java.util.HashMap;
import java.util.Locale;
@@ -44,14 +42,12 @@ import java.util.Locale;
*/
public final class KeyboardTextsTable {
// Name to index map.
- private static final HashMap<String, Integer> sNameToIndexesMap = CollectionUtils.newHashMap();
+ private static final HashMap<String, Integer> sNameToIndexesMap = new HashMap<>();
// Locale to texts table map.
- private static final HashMap<String, String[]> sLocaleToTextsTableMap =
- CollectionUtils.newHashMap();
+ private static final HashMap<String, String[]> sLocaleToTextsTableMap = new HashMap<>();
// TODO: Remove this variable after debugging.
// Texts table to locale maps.
- private static final HashMap<String[], String> sTextsTableToLocaleMap =
- CollectionUtils.newHashMap();
+ private static final HashMap<String[], String> sTextsTableToLocaleMap = new HashMap<>();
public static String getText(final String name, final String[] textsTable) {
final Integer indexObj = sNameToIndexesMap.get(name);
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeysCache.java b/java/src/com/android/inputmethod/keyboard/internal/KeysCache.java
index 7c2e3e174..7743d4744 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeysCache.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeysCache.java
@@ -17,12 +17,11 @@
package com.android.inputmethod.keyboard.internal;
import com.android.inputmethod.keyboard.Key;
-import com.android.inputmethod.latin.utils.CollectionUtils;
import java.util.HashMap;
public final class KeysCache {
- private final HashMap<Key, Key> mMap = CollectionUtils.newHashMap();
+ private final HashMap<Key, Key> mMap = new HashMap<>();
public void clear() {
mMap.clear();
diff --git a/java/src/com/android/inputmethod/keyboard/internal/MoreKeySpec.java b/java/src/com/android/inputmethod/keyboard/internal/MoreKeySpec.java
index 56ef4767f..e0d5173ac 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/MoreKeySpec.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/MoreKeySpec.java
@@ -149,7 +149,7 @@ public final class MoreKeySpec {
// Skip empty entry.
if (pos - start > 0) {
if (list == null) {
- list = CollectionUtils.newArrayList();
+ list = new ArrayList<>();
}
list.add(text.substring(start, pos));
}
diff --git a/java/src/com/android/inputmethod/keyboard/internal/PointerTrackerQueue.java b/java/src/com/android/inputmethod/keyboard/internal/PointerTrackerQueue.java
index 5ac34188c..8e89e61ea 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/PointerTrackerQueue.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/PointerTrackerQueue.java
@@ -18,8 +18,6 @@ package com.android.inputmethod.keyboard.internal;
import android.util.Log;
-import com.android.inputmethod.latin.utils.CollectionUtils;
-
import java.util.ArrayList;
public final class PointerTrackerQueue {
@@ -37,7 +35,7 @@ public final class PointerTrackerQueue {
// Note: {@link #mExpandableArrayOfActivePointers} and {@link #mArraySize} are synchronized by
// {@link #mExpandableArrayOfActivePointers}
private final ArrayList<Element> mExpandableArrayOfActivePointers =
- CollectionUtils.newArrayList(INITIAL_CAPACITY);
+ new ArrayList<>(INITIAL_CAPACITY);
private int mArraySize = 0;
public int size() {
diff --git a/java/src/com/android/inputmethod/latin/BinaryDictionary.java b/java/src/com/android/inputmethod/latin/BinaryDictionary.java
index e7ab02ac1..096b946d2 100644
--- a/java/src/com/android/inputmethod/latin/BinaryDictionary.java
+++ b/java/src/com/android/inputmethod/latin/BinaryDictionary.java
@@ -30,7 +30,6 @@ import com.android.inputmethod.latin.makedict.UnsupportedFormatException;
import com.android.inputmethod.latin.makedict.WordProperty;
import com.android.inputmethod.latin.settings.NativeSuggestOptions;
import com.android.inputmethod.latin.utils.BinaryDictionaryUtils;
-import com.android.inputmethod.latin.utils.CollectionUtils;
import com.android.inputmethod.latin.utils.FileUtils;
import com.android.inputmethod.latin.utils.JniUtils;
import com.android.inputmethod.latin.utils.LanguageModelParam;
@@ -104,8 +103,7 @@ public final class BinaryDictionary extends Dictionary {
private final NativeSuggestOptions mNativeSuggestOptions = new NativeSuggestOptions();
- private final SparseArray<DicTraverseSession> mDicTraverseSessions =
- CollectionUtils.newSparseArray();
+ private final SparseArray<DicTraverseSession> mDicTraverseSessions = new SparseArray<>();
// TODO: There should be a way to remove used DicTraverseSession objects from
// {@code mDicTraverseSessions}.
@@ -185,13 +183,14 @@ public final class BinaryDictionary extends Dictionary {
private static native void getHeaderInfoNative(long dict, int[] outHeaderSize,
int[] outFormatVersion, ArrayList<int[]> outAttributeKeys,
ArrayList<int[]> outAttributeValues);
- private static native void flushNative(long dict, String filePath);
+ private static native boolean flushNative(long dict, String filePath);
private static native boolean needsToRunGCNative(long dict, boolean mindsBlockByGC);
- private static native void flushWithGCNative(long dict, String filePath);
+ private static native boolean flushWithGCNative(long dict, String filePath);
private static native void closeNative(long dict);
private static native int getFormatVersionNative(long dict);
private static native int getProbabilityNative(long dict, int[] word);
- private static native int getBigramProbabilityNative(long dict, int[] word0, int[] word1);
+ private static native int getBigramProbabilityNative(long dict, int[] word0,
+ boolean isBeginningOfSentence, int[] word1);
private static native void getWordPropertyNative(long dict, int[] word,
int[] outCodePoints, boolean[] outFlags, int[] outProbabilityInfo,
ArrayList<int[]> outBigramTargets, ArrayList<int[]> outBigramProbabilityInfo,
@@ -200,15 +199,17 @@ public final class BinaryDictionary extends Dictionary {
private static native void getSuggestionsNative(long dict, long proximityInfo,
long traverseSession, int[] xCoordinates, int[] yCoordinates, int[] times,
int[] pointerIds, int[] inputCodePoints, int inputSize, int[] suggestOptions,
- int[] prevWordCodePointArray, int[] outputSuggestionCount, int[] outputCodePoints,
- int[] outputScores, int[] outputIndices, int[] outputTypes,
- int[] outputAutoCommitFirstWordConfidence, float[] inOutLanguageWeight);
- private static native void addUnigramWordNative(long dict, int[] word, int probability,
- int[] shortcutTarget, int shortcutProbability, boolean isNotAWord,
- boolean isBlacklisted, int timestamp);
- private static native void addBigramWordsNative(long dict, int[] word0, int[] word1,
- int probability, int timestamp);
- private static native void removeBigramWordsNative(long dict, int[] word0, int[] word1);
+ int[] prevWordCodePointArray, boolean isBeginningOfSentence,
+ int[] outputSuggestionCount, int[] outputCodePoints, int[] outputScores,
+ int[] outputIndices, int[] outputTypes, int[] outputAutoCommitFirstWordConfidence,
+ float[] inOutLanguageWeight);
+ private static native boolean addUnigramWordNative(long dict, int[] word, int probability,
+ int[] shortcutTarget, int shortcutProbability, boolean isBeginningOfSentence,
+ boolean isNotAWord, boolean isBlacklisted, int timestamp);
+ private static native boolean addBigramWordsNative(long dict, int[] word0,
+ boolean isBeginningOfSentence, int[] word1, int probability, int timestamp);
+ private static native boolean removeBigramWordsNative(long dict, int[] word0,
+ boolean isBeginningOfSentence, int[] word1);
private static native int addMultipleDictionaryEntriesNative(long dict,
LanguageModelParam[] languageModelParams, int startIndex);
private static native String getPropertyNative(long dict, String query);
@@ -245,11 +246,11 @@ public final class BinaryDictionary extends Dictionary {
}
final int[] outHeaderSize = new int[1];
final int[] outFormatVersion = new int[1];
- final ArrayList<int[]> outAttributeKeys = CollectionUtils.newArrayList();
- final ArrayList<int[]> outAttributeValues = CollectionUtils.newArrayList();
+ final ArrayList<int[]> outAttributeKeys = new ArrayList<>();
+ final ArrayList<int[]> outAttributeValues = new ArrayList<>();
getHeaderInfoNative(mNativeDict, outHeaderSize, outFormatVersion, outAttributeKeys,
outAttributeValues);
- final HashMap<String, String> attributes = new HashMap<String, String>();
+ final HashMap<String, String> attributes = new HashMap<>();
for (int i = 0; i < outAttributeKeys.size(); i++) {
final String attributeKey = StringUtils.getStringFromNullTerminatedCodePointArray(
outAttributeKeys.get(i));
@@ -301,14 +302,15 @@ public final class BinaryDictionary extends Dictionary {
getTraverseSession(sessionId).getSession(), inputPointers.getXCoordinates(),
inputPointers.getYCoordinates(), inputPointers.getTimes(),
inputPointers.getPointerIds(), mInputCodePoints, inputSize,
- mNativeSuggestOptions.getOptions(), prevWordCodePointArray, mOutputSuggestionCount,
+ mNativeSuggestOptions.getOptions(), prevWordCodePointArray,
+ prevWordsInfo.mIsBeginningOfSentence, mOutputSuggestionCount,
mOutputCodePoints, mOutputScores, mSpaceIndices, mOutputTypes,
mOutputAutoCommitFirstWordConfidence, mInputOutputLanguageWeight);
if (inOutLanguageWeight != null) {
inOutLanguageWeight[0] = mInputOutputLanguageWeight[0];
}
final int count = mOutputSuggestionCount[0];
- final ArrayList<SuggestedWordInfo> suggestions = CollectionUtils.newArrayList();
+ final ArrayList<SuggestedWordInfo> suggestions = new ArrayList<>();
for (int j = 0; j < count; ++j) {
final int start = j * MAX_WORD_LENGTH;
int len = 0;
@@ -316,23 +318,18 @@ public final class BinaryDictionary extends Dictionary {
++len;
}
if (len > 0) {
- final int flags = mOutputTypes[j] & SuggestedWordInfo.KIND_MASK_FLAGS;
- if (blockOffensiveWords
- && 0 != (flags & SuggestedWordInfo.KIND_FLAG_POSSIBLY_OFFENSIVE)
- && 0 == (flags & SuggestedWordInfo.KIND_FLAG_EXACT_MATCH)) {
+ final SuggestedWordInfo suggestedWordInfo =
+ new SuggestedWordInfo(new String(mOutputCodePoints, start, len),
+ mOutputScores[j], mOutputTypes[j], this /* sourceDict */,
+ mSpaceIndices[j] /* indexOfTouchPointOfSecondWord */,
+ mOutputAutoCommitFirstWordConfidence[0]);
+ if (blockOffensiveWords && suggestedWordInfo.isPossiblyOffensive()
+ && !suggestedWordInfo.isExactMatch()) {
// If we block potentially offensive words, and if the word is possibly
// offensive, then we don't output it unless it's also an exact match.
continue;
}
- final int kind = mOutputTypes[j] & SuggestedWordInfo.KIND_MASK_KIND;
- final int score = SuggestedWordInfo.KIND_WHITELIST == kind
- ? SuggestedWordInfo.MAX_SCORE : mOutputScores[j];
- // TODO: check that all users of the `kind' parameter are ready to accept
- // flags too and pass mOutputTypes[j] instead of kind
- suggestions.add(new SuggestedWordInfo(new String(mOutputCodePoints, start, len),
- score, kind, this /* sourceDict */,
- mSpaceIndices[j] /* indexOfTouchPointOfSecondWord */,
- mOutputAutoCommitFirstWordConfidence[0]));
+ suggestions.add(suggestedWordInfo);
}
}
return suggestions;
@@ -364,12 +361,13 @@ public final class BinaryDictionary extends Dictionary {
}
public int getNgramProbability(final PrevWordsInfo prevWordsInfo, final String word) {
- if (TextUtils.isEmpty(prevWordsInfo.mPrevWord) || TextUtils.isEmpty(word)) {
+ if (!prevWordsInfo.isValid() || TextUtils.isEmpty(word)) {
return NOT_A_PROBABILITY;
}
final int[] codePoints0 = StringUtils.toCodePointArray(prevWordsInfo.mPrevWord);
final int[] codePoints1 = StringUtils.toCodePointArray(word);
- return getBigramProbabilityNative(mNativeDict, codePoints0, codePoints1);
+ return getBigramProbabilityNative(mNativeDict, codePoints0,
+ prevWordsInfo.mIsBeginningOfSentence, codePoints1);
}
public WordProperty getWordProperty(final String word) {
@@ -381,10 +379,10 @@ public final class BinaryDictionary extends Dictionary {
final boolean[] outFlags = new boolean[FORMAT_WORD_PROPERTY_OUTPUT_FLAG_COUNT];
final int[] outProbabilityInfo =
new int[FORMAT_WORD_PROPERTY_OUTPUT_PROBABILITY_INFO_COUNT];
- final ArrayList<int[]> outBigramTargets = CollectionUtils.newArrayList();
- final ArrayList<int[]> outBigramProbabilityInfo = CollectionUtils.newArrayList();
- final ArrayList<int[]> outShortcutTargets = CollectionUtils.newArrayList();
- final ArrayList<Integer> outShortcutProbabilities = CollectionUtils.newArrayList();
+ final ArrayList<int[]> outBigramTargets = new ArrayList<>();
+ final ArrayList<int[]> outBigramProbabilityInfo = new ArrayList<>();
+ final ArrayList<int[]> outShortcutTargets = new ArrayList<>();
+ final ArrayList<Integer> outShortcutProbabilities = new ArrayList<>();
getWordPropertyNative(mNativeDict, codePoints, outCodePoints, outFlags, outProbabilityInfo,
outBigramTargets, outBigramProbabilityInfo, outShortcutTargets,
outShortcutProbabilities);
@@ -419,42 +417,53 @@ public final class BinaryDictionary extends Dictionary {
}
// Add a unigram entry to binary dictionary with unigram attributes in native code.
- public void addUnigramEntry(final String word, final int probability,
- final String shortcutTarget, final int shortcutProbability, final boolean isNotAWord,
+ public boolean addUnigramEntry(final String word, final int probability,
+ final String shortcutTarget, final int shortcutProbability,
+ final boolean isBeginningOfSentence, final boolean isNotAWord,
final boolean isBlacklisted, final int timestamp) {
- if (TextUtils.isEmpty(word)) {
- return;
+ if (word == null || (word.isEmpty() && !isBeginningOfSentence)) {
+ return false;
}
final int[] codePoints = StringUtils.toCodePointArray(word);
final int[] shortcutTargetCodePoints = (shortcutTarget != null) ?
StringUtils.toCodePointArray(shortcutTarget) : null;
- addUnigramWordNative(mNativeDict, codePoints, probability, shortcutTargetCodePoints,
- shortcutProbability, isNotAWord, isBlacklisted, timestamp);
+ if (!addUnigramWordNative(mNativeDict, codePoints, probability, shortcutTargetCodePoints,
+ shortcutProbability, isBeginningOfSentence, isNotAWord, isBlacklisted, timestamp)) {
+ return false;
+ }
mHasUpdated = true;
+ return true;
}
// Add an n-gram entry to the binary dictionary with timestamp in native code.
- public void addNgramEntry(final PrevWordsInfo prevWordsInfo, final String word,
- final int probability,
- final int timestamp) {
- if (TextUtils.isEmpty(prevWordsInfo.mPrevWord) || TextUtils.isEmpty(word)) {
- return;
+ public boolean addNgramEntry(final PrevWordsInfo prevWordsInfo, final String word,
+ final int probability, final int timestamp) {
+ if (!prevWordsInfo.isValid() || TextUtils.isEmpty(word)) {
+ return false;
}
final int[] codePoints0 = StringUtils.toCodePointArray(prevWordsInfo.mPrevWord);
final int[] codePoints1 = StringUtils.toCodePointArray(word);
- addBigramWordsNative(mNativeDict, codePoints0, codePoints1, probability, timestamp);
+ if (!addBigramWordsNative(mNativeDict, codePoints0, prevWordsInfo.mIsBeginningOfSentence,
+ codePoints1, probability, timestamp)) {
+ return false;
+ }
mHasUpdated = true;
+ return true;
}
// Remove an n-gram entry from the binary dictionary in native code.
- public void removeNgramEntry(final PrevWordsInfo prevWordsInfo, final String word) {
- if (TextUtils.isEmpty(prevWordsInfo.mPrevWord) || TextUtils.isEmpty(word)) {
- return;
+ public boolean removeNgramEntry(final PrevWordsInfo prevWordsInfo, final String word) {
+ if (!prevWordsInfo.isValid() || TextUtils.isEmpty(word)) {
+ return false;
}
final int[] codePoints0 = StringUtils.toCodePointArray(prevWordsInfo.mPrevWord);
final int[] codePoints1 = StringUtils.toCodePointArray(word);
- removeBigramWordsNative(mNativeDict, codePoints0, codePoints1);
+ if (!removeBigramWordsNative(mNativeDict, codePoints0, prevWordsInfo.mIsBeginningOfSentence,
+ codePoints1)) {
+ return false;
+ }
mHasUpdated = true;
+ return true;
}
public void addMultipleDictionaryEntries(final LanguageModelParam[] languageModelParams) {
@@ -484,26 +493,33 @@ public final class BinaryDictionary extends Dictionary {
}
// Flush to dict file if the dictionary has been updated.
- public void flush() {
- if (!isValidDictionary()) return;
+ public boolean flush() {
+ if (!isValidDictionary()) return false;
if (mHasUpdated) {
- flushNative(mNativeDict, mDictFilePath);
+ if (!flushNative(mNativeDict, mDictFilePath)) {
+ return false;
+ }
reopen();
}
+ return true;
}
// Run GC and flush to dict file if the dictionary has been updated.
- public void flushWithGCIfHasUpdated() {
+ public boolean flushWithGCIfHasUpdated() {
if (mHasUpdated) {
- flushWithGC();
+ return flushWithGC();
}
+ return true;
}
// Run GC and flush to dict file.
- public void flushWithGC() {
- if (!isValidDictionary()) return;
- flushWithGCNative(mNativeDict, mDictFilePath);
+ public boolean flushWithGC() {
+ if (!isValidDictionary()) return false;
+ if (!flushWithGCNative(mNativeDict, mDictFilePath)) {
+ return false;
+ }
reopen();
+ return true;
}
/**
diff --git a/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java b/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java
index 72757e086..10b1f1b77 100644
--- a/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java
+++ b/java/src/com/android/inputmethod/latin/BinaryDictionaryFileDumper.java
@@ -29,7 +29,6 @@ import android.util.Log;
import com.android.inputmethod.dictionarypack.DictionaryPackConstants;
import com.android.inputmethod.dictionarypack.MD5Calculator;
-import com.android.inputmethod.latin.utils.CollectionUtils;
import com.android.inputmethod.latin.utils.DictionaryInfoUtils;
import com.android.inputmethod.latin.utils.DictionaryInfoUtils.DictionaryInfo;
import com.android.inputmethod.latin.utils.FileTransforms;
@@ -44,8 +43,8 @@ import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
-import java.util.Arrays;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Locale;
@@ -165,7 +164,7 @@ public final class BinaryDictionaryFileDumper {
if (cursor.getCount() <= 0 || !cursor.moveToFirst()) {
return Collections.<WordListInfo>emptyList();
}
- final ArrayList<WordListInfo> list = CollectionUtils.newArrayList();
+ final ArrayList<WordListInfo> list = new ArrayList<>();
do {
final String wordListId = cursor.getString(0);
final String wordListLocale = cursor.getString(1);
diff --git a/java/src/com/android/inputmethod/latin/BinaryDictionaryGetter.java b/java/src/com/android/inputmethod/latin/BinaryDictionaryGetter.java
index 4c49cb31c..867c18686 100644
--- a/java/src/com/android/inputmethod/latin/BinaryDictionaryGetter.java
+++ b/java/src/com/android/inputmethod/latin/BinaryDictionaryGetter.java
@@ -24,7 +24,6 @@ import android.util.Log;
import com.android.inputmethod.latin.makedict.DictionaryHeader;
import com.android.inputmethod.latin.makedict.UnsupportedFormatException;
import com.android.inputmethod.latin.utils.BinaryDictionaryUtils;
-import com.android.inputmethod.latin.utils.CollectionUtils;
import com.android.inputmethod.latin.utils.DictionaryInfoUtils;
import com.android.inputmethod.latin.utils.LocaleUtils;
@@ -160,7 +159,7 @@ final public class BinaryDictionaryGetter {
public static File[] getCachedWordLists(final String locale, final Context context) {
final File[] directoryList = DictionaryInfoUtils.getCachedDirectoryList(context);
if (null == directoryList) return EMPTY_FILE_ARRAY;
- final HashMap<String, FileAndMatchLevel> cacheFiles = CollectionUtils.newHashMap();
+ final HashMap<String, FileAndMatchLevel> cacheFiles = new HashMap<>();
for (File directory : directoryList) {
if (!directory.isDirectory()) continue;
final String dirLocale =
@@ -273,7 +272,7 @@ final public class BinaryDictionaryGetter {
final DictPackSettings dictPackSettings = new DictPackSettings(context);
boolean foundMainDict = false;
- final ArrayList<AssetFileAddress> fileList = CollectionUtils.newArrayList();
+ final ArrayList<AssetFileAddress> fileList = new ArrayList<>();
// cachedWordLists may not be null, see doc for getCachedDictionaryList
for (final File f : cachedWordLists) {
final String wordListId = DictionaryInfoUtils.getWordListIdFromFileName(f.getName());
diff --git a/java/src/com/android/inputmethod/latin/Constants.java b/java/src/com/android/inputmethod/latin/Constants.java
index 67ca59540..efc5a618b 100644
--- a/java/src/com/android/inputmethod/latin/Constants.java
+++ b/java/src/com/android/inputmethod/latin/Constants.java
@@ -192,7 +192,6 @@ public final class Constants {
public static final int CODE_SPACE = ' ';
public static final int CODE_PERIOD = '.';
public static final int CODE_COMMA = ',';
- public static final int CODE_ARMENIAN_PERIOD = 0x0589;
public static final int CODE_DASH = '-';
public static final int CODE_SINGLE_QUOTE = '\'';
public static final int CODE_DOUBLE_QUOTE = '"';
@@ -208,6 +207,8 @@ public final class Constants {
public static final int CODE_CLOSING_SQUARE_BRACKET = ']';
public static final int CODE_CLOSING_CURLY_BRACKET = '}';
public static final int CODE_CLOSING_ANGLE_BRACKET = '>';
+ public static final int CODE_INVERTED_QUESTION_MARK = 0xBF; // ¿
+ public static final int CODE_INVERTED_EXCLAMATION_MARK = 0xA1; // ¡
/**
* Special keys code. Must be negative.
diff --git a/java/src/com/android/inputmethod/latin/ContactsBinaryDictionary.java b/java/src/com/android/inputmethod/latin/ContactsBinaryDictionary.java
index 3fb76b142..dd5b376a1 100644
--- a/java/src/com/android/inputmethod/latin/ContactsBinaryDictionary.java
+++ b/java/src/com/android/inputmethod/latin/ContactsBinaryDictionary.java
@@ -31,7 +31,6 @@ import android.util.Log;
import com.android.inputmethod.annotations.UsedForTesting;
import com.android.inputmethod.latin.personalization.AccountUtils;
-import com.android.inputmethod.latin.utils.CollectionUtils;
import com.android.inputmethod.latin.utils.ExecutorUtils;
import com.android.inputmethod.latin.utils.StringUtils;
@@ -180,7 +179,7 @@ public class ContactsBinaryDictionary extends ExpandableBinaryDictionary {
private void addWordsLocked(final Cursor cursor) {
int count = 0;
- final ArrayList<String> names = CollectionUtils.newArrayList();
+ final ArrayList<String> names = new ArrayList<>();
while (!cursor.isAfterLast() && count < MAX_CONTACT_COUNT) {
String name = cursor.getString(INDEX_NAME);
if (isValidName(name)) {
@@ -224,7 +223,7 @@ public class ContactsBinaryDictionary extends ExpandableBinaryDictionary {
*/
private void addNameLocked(final String name) {
int len = StringUtils.codePointCount(name);
- PrevWordsInfo prevWordsInfo = new PrevWordsInfo(null);
+ PrevWordsInfo prevWordsInfo = PrevWordsInfo.EMPTY_PREV_WORDS_INFO;
// TODO: Better tokenization for non-Latin writing systems
for (int i = 0; i < len; i++) {
if (Character.isLetter(name.codePointAt(i))) {
@@ -298,7 +297,7 @@ public class ContactsBinaryDictionary extends ExpandableBinaryDictionary {
if (null == cursor) {
return false;
}
- final ArrayList<String> names = CollectionUtils.newArrayList();
+ final ArrayList<String> names = new ArrayList<>();
try {
if (cursor.moveToFirst()) {
while (!cursor.isAfterLast()) {
diff --git a/java/src/com/android/inputmethod/latin/DictionaryCollection.java b/java/src/com/android/inputmethod/latin/DictionaryCollection.java
index e6e4e0938..53be28139 100644
--- a/java/src/com/android/inputmethod/latin/DictionaryCollection.java
+++ b/java/src/com/android/inputmethod/latin/DictionaryCollection.java
@@ -20,7 +20,6 @@ import android.util.Log;
import com.android.inputmethod.keyboard.ProximityInfo;
import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
-import com.android.inputmethod.latin.utils.CollectionUtils;
import java.util.ArrayList;
import java.util.Collection;
@@ -36,22 +35,22 @@ public final class DictionaryCollection extends Dictionary {
public DictionaryCollection(final String dictType) {
super(dictType);
- mDictionaries = CollectionUtils.newCopyOnWriteArrayList();
+ mDictionaries = new CopyOnWriteArrayList<>();
}
public DictionaryCollection(final String dictType, final Dictionary... dictionaries) {
super(dictType);
if (null == dictionaries) {
- mDictionaries = CollectionUtils.newCopyOnWriteArrayList();
+ mDictionaries = new CopyOnWriteArrayList<>();
} else {
- mDictionaries = CollectionUtils.newCopyOnWriteArrayList(dictionaries);
+ mDictionaries = new CopyOnWriteArrayList<>(dictionaries);
mDictionaries.removeAll(Collections.singleton(null));
}
}
public DictionaryCollection(final String dictType, final Collection<Dictionary> dictionaries) {
super(dictType);
- mDictionaries = CollectionUtils.newCopyOnWriteArrayList(dictionaries);
+ mDictionaries = new CopyOnWriteArrayList<>(dictionaries);
mDictionaries.removeAll(Collections.singleton(null));
}
@@ -67,7 +66,7 @@ public final class DictionaryCollection extends Dictionary {
ArrayList<SuggestedWordInfo> suggestions = dictionaries.get(0).getSuggestions(composer,
prevWordsInfo, proximityInfo, blockOffensiveWords, additionalFeaturesOptions,
sessionId, inOutLanguageWeight);
- if (null == suggestions) suggestions = CollectionUtils.newArrayList();
+ if (null == suggestions) suggestions = new ArrayList<>();
final int length = dictionaries.size();
for (int i = 1; i < length; ++ i) {
final ArrayList<SuggestedWordInfo> sugg = dictionaries.get(i).getSuggestions(composer,
diff --git a/java/src/com/android/inputmethod/latin/DictionaryFacilitatorForSuggest.java b/java/src/com/android/inputmethod/latin/DictionaryFacilitator.java
index 301b832b6..7fa3d0479 100644
--- a/java/src/com/android/inputmethod/latin/DictionaryFacilitatorForSuggest.java
+++ b/java/src/com/android/inputmethod/latin/DictionaryFacilitator.java
@@ -19,14 +19,17 @@ package com.android.inputmethod.latin;
import android.content.Context;
import android.text.TextUtils;
import android.util.Log;
+import android.view.inputmethod.InputMethodSubtype;
import com.android.inputmethod.annotations.UsedForTesting;
import com.android.inputmethod.keyboard.ProximityInfo;
import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
import com.android.inputmethod.latin.personalization.ContextualDictionary;
+import com.android.inputmethod.latin.personalization.PersonalizationDataChunk;
import com.android.inputmethod.latin.personalization.PersonalizationDictionary;
import com.android.inputmethod.latin.personalization.UserHistoryDictionary;
-import com.android.inputmethod.latin.utils.CollectionUtils;
+import com.android.inputmethod.latin.settings.SpacingAndPunctuations;
+import com.android.inputmethod.latin.utils.DistracterFilter;
import com.android.inputmethod.latin.utils.ExecutorUtils;
import com.android.inputmethod.latin.utils.LanguageModelParam;
import com.android.inputmethod.latin.utils.SuggestionResults;
@@ -37,16 +40,17 @@ import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
import java.util.Locale;
import java.util.Map;
-import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
// TODO: Consolidate dictionaries in native code.
-public class DictionaryFacilitatorForSuggest {
- public static final String TAG = DictionaryFacilitatorForSuggest.class.getSimpleName();
+public class DictionaryFacilitator {
+ public static final String TAG = DictionaryFacilitator.class.getSimpleName();
// HACK: This threshold is being used when adding a capitalized entry in the User History
// dictionary.
@@ -57,6 +61,7 @@ public class DictionaryFacilitatorForSuggest {
private volatile CountDownLatch mLatchForWaitingLoadingMainDictionary = new CountDownLatch(0);
// To synchronize assigning mDictionaries to ensure closing dictionaries.
private final Object mLock = new Object();
+ private final DistracterFilter mDistracterFilter;
private static final String[] DICT_TYPES_ORDERED_TO_GET_SUGGESTION =
new String[] {
@@ -69,7 +74,7 @@ public class DictionaryFacilitatorForSuggest {
};
private static final Map<String, Class<? extends ExpandableBinaryDictionary>>
- DICT_TYPE_TO_CLASS = CollectionUtils.newHashMap();
+ DICT_TYPE_TO_CLASS = new HashMap<>();
static {
DICT_TYPE_TO_CLASS.put(Dictionary.TYPE_USER_HISTORY, UserHistoryDictionary.class);
@@ -94,7 +99,7 @@ public class DictionaryFacilitatorForSuggest {
public final Locale mLocale;
private Dictionary mMainDict;
public final ConcurrentHashMap<String, ExpandableBinaryDictionary> mSubDictMap =
- CollectionUtils.newConcurrentHashMap();
+ new ConcurrentHashMap<>();
public Dictionaries() {
mLocale = null;
@@ -162,7 +167,17 @@ public class DictionaryFacilitatorForSuggest {
public void onUpdateMainDictionaryAvailability(boolean isMainDictionaryAvailable);
}
- public DictionaryFacilitatorForSuggest() {}
+ public DictionaryFacilitator() {
+ mDistracterFilter = DistracterFilter.EMPTY_DISTRACTER_FILTER;
+ }
+
+ public DictionaryFacilitator(final DistracterFilter distracterFilter) {
+ mDistracterFilter = distracterFilter;
+ }
+
+ public void updateEnabledSubtypes(final List<InputMethodSubtype> enabledSubtypes) {
+ mDistracterFilter.updateEnabledSubtypes(enabledSubtypes);
+ }
public Locale getLocale() {
return mDictionaries.mLocale;
@@ -196,7 +211,7 @@ public class DictionaryFacilitatorForSuggest {
// We always try to have the main dictionary. Other dictionaries can be unused.
final boolean reloadMainDictionary = localeHasBeenChanged || forceReloadMainDictionary;
// TODO: Make subDictTypesToUse configurable by resource or a static final list.
- final Set<String> subDictTypesToUse = CollectionUtils.newHashSet();
+ final HashSet<String> subDictTypesToUse = new HashSet<>();
if (useContactsDict) {
subDictTypesToUse.add(Dictionary.TYPE_CONTACTS);
}
@@ -215,7 +230,7 @@ public class DictionaryFacilitatorForSuggest {
newMainDict = mDictionaries.getDict(Dictionary.TYPE_MAIN);
}
- final Map<String, ExpandableBinaryDictionary> subDicts = CollectionUtils.newHashMap();
+ final Map<String, ExpandableBinaryDictionary> subDicts = new HashMap<>();
for (final String dictType : SUB_DICT_TYPES) {
if (!subDictTypesToUse.contains(dictType)) {
// This dictionary will not be used.
@@ -288,7 +303,7 @@ public class DictionaryFacilitatorForSuggest {
final ArrayList<String> dictionaryTypes, final HashMap<String, File> dictionaryFiles,
final Map<String, Map<String, String>> additionalDictAttributes) {
Dictionary mainDictionary = null;
- final Map<String, ExpandableBinaryDictionary> subDicts = CollectionUtils.newHashMap();
+ final Map<String, ExpandableBinaryDictionary> subDicts = new HashMap<>();
for (final String dictType : dictionaryTypes) {
if (dictType.equals(Dictionary.TYPE_MAIN)) {
@@ -321,6 +336,7 @@ public class DictionaryFacilitatorForSuggest {
for (final String dictType : DICT_TYPES_ORDERED_TO_GET_SUGGESTION) {
dictionaries.closeDict(dictType);
}
+ mDistracterFilter.close();
}
// The main dictionary could have been loaded asynchronously. Don't cache the return value
@@ -392,7 +408,7 @@ public class DictionaryFacilitatorForSuggest {
if (userHistoryDictionary == null) {
return;
}
- final int maxFreq = getMaxFrequency(word);
+ final int maxFreq = getFrequency(word);
if (maxFreq == 0 && blockPotentiallyOffensive) {
return;
}
@@ -432,7 +448,7 @@ public class DictionaryFacilitatorForSuggest {
// We don't add words with 0-frequency (assuming they would be profanity etc.).
final boolean isValid = maxFreq > 0;
UserHistoryDictionary.addToDictionary(userHistoryDictionary, prevWordsInfo, secondWord,
- isValid, timeStampInSeconds);
+ isValid, timeStampInSeconds, mDistracterFilter);
}
public void cancelAddingUserHistory(final PrevWordsInfo prevWordsInfo,
@@ -500,7 +516,7 @@ public class DictionaryFacilitatorForSuggest {
return false;
}
- private int getMaxFrequency(final String word) {
+ public int getFrequency(final String word) {
if (TextUtils.isEmpty(word)) {
return Dictionary.NOT_A_PROBABILITY;
}
@@ -537,9 +553,16 @@ public class DictionaryFacilitatorForSuggest {
personalizationDict.clear();
}
- public void addMultipleDictionaryEntriesToPersonalizationDictionary(
- final ArrayList<LanguageModelParam> languageModelParams,
+ public void addEntriesToPersonalizationDictionary(
+ final PersonalizationDataChunk personalizationDataChunk,
+ final SpacingAndPunctuations spacingAndPunctuations,
final ExpandableBinaryDictionary.AddMultipleDictionaryEntriesCallback callback) {
+ final ArrayList<LanguageModelParam> languageModelParams =
+ LanguageModelParam.createLanguageModelParamsFrom(
+ personalizationDataChunk.mTokens,
+ personalizationDataChunk.mTimestampInSeconds,
+ this /* dictionaryFacilitator */, spacingAndPunctuations,
+ mDistracterFilter);
final ExpandableBinaryDictionary personalizationDict =
mDictionaries.getSubDict(Dictionary.TYPE_PERSONALIZATION);
if (personalizationDict == null || languageModelParams == null
diff --git a/java/src/com/android/inputmethod/latin/DictionaryFactory.java b/java/src/com/android/inputmethod/latin/DictionaryFactory.java
index e09c309ea..59de4f82a 100644
--- a/java/src/com/android/inputmethod/latin/DictionaryFactory.java
+++ b/java/src/com/android/inputmethod/latin/DictionaryFactory.java
@@ -23,7 +23,6 @@ import android.content.res.Resources;
import android.util.Log;
import com.android.inputmethod.annotations.UsedForTesting;
-import com.android.inputmethod.latin.utils.CollectionUtils;
import com.android.inputmethod.latin.utils.DictionaryInfoUtils;
import java.io.File;
@@ -55,7 +54,7 @@ public final class DictionaryFactory {
createReadOnlyBinaryDictionary(context, locale));
}
- final LinkedList<Dictionary> dictList = CollectionUtils.newLinkedList();
+ final LinkedList<Dictionary> dictList = new LinkedList<>();
final ArrayList<AssetFileAddress> assetFileList =
BinaryDictionaryGetter.getDictionaryFiles(locale, context);
if (null != assetFileList) {
diff --git a/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java b/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java
index d67253c3b..b10bae01a 100644
--- a/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java
+++ b/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java
@@ -27,6 +27,7 @@ import com.android.inputmethod.latin.makedict.UnsupportedFormatException;
import com.android.inputmethod.latin.makedict.WordProperty;
import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
import com.android.inputmethod.latin.utils.CombinedFormatUtils;
+import com.android.inputmethod.latin.utils.DistracterFilter;
import com.android.inputmethod.latin.utils.ExecutorUtils;
import com.android.inputmethod.latin.utils.FileUtils;
import com.android.inputmethod.latin.utils.LanguageModelParam;
@@ -53,7 +54,6 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {
private static final String TAG = ExpandableBinaryDictionary.class.getSimpleName();
/** Whether to print debug output to log */
- private static boolean DEBUG = false;
private static final boolean DBG_STRESS_TEST = false;
private static final int TIMEOUT_FOR_READ_OPS_IN_MILLISECONDS = 100;
@@ -114,7 +114,8 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {
private boolean needsToMigrateDictionary(final int formatVersion) {
// When we bump up the dictionary format version, the old version should be added to here
// for supporting migration. Note that native code has to support reading such formats.
- return formatVersion == FormatSpec.VERSION4_ONLY_FOR_TESTING;
+ return formatVersion == FormatSpec.VERSION4_ONLY_FOR_TESTING
+ || formatVersion == FormatSpec.VERSION401;
}
public boolean isValidDictionaryLocked() {
@@ -191,7 +192,7 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {
}
protected Map<String, String> getHeaderAttributeMap() {
- HashMap<String, String> attributeMap = new HashMap<String, String>();
+ HashMap<String, String> attributeMap = new HashMap<>();
if (mAdditionalAttributeMap != null) {
attributeMap.putAll(mAdditionalAttributeMap);
}
@@ -271,9 +272,10 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {
/**
* Adds unigram information of a word to the dictionary. May overwrite an existing entry.
*/
- public void addUnigramEntry(final String word, final int frequency,
+ public void addUnigramEntryWithCheckingDistracter(final String word, final int frequency,
final String shortcutTarget, final int shortcutFreq, final boolean isNotAWord,
- final boolean isBlacklisted, final int timestamp) {
+ final boolean isBlacklisted, final int timestamp,
+ final DistracterFilter distracterFilter) {
reloadDictionaryIfRequired();
asyncExecuteTaskWithWriteLock(new Runnable() {
@Override
@@ -281,6 +283,11 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {
if (mBinaryDictionary == null) {
return;
}
+ if (distracterFilter.isDistracterToWordsInDictionaries(
+ PrevWordsInfo.EMPTY_PREV_WORDS_INFO, word, mLocale)) {
+ // The word is a distracter.
+ return;
+ }
runGCIfRequiredLocked(true /* mindsBlockByGC */);
addUnigramLocked(word, frequency, shortcutTarget, shortcutFreq,
isNotAWord, isBlacklisted, timestamp);
@@ -291,8 +298,10 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {
protected void addUnigramLocked(final String word, final int frequency,
final String shortcutTarget, final int shortcutFreq, final boolean isNotAWord,
final boolean isBlacklisted, final int timestamp) {
- mBinaryDictionary.addUnigramEntry(word, frequency, shortcutTarget, shortcutFreq,
- isNotAWord, isBlacklisted, timestamp);
+ if (!mBinaryDictionary.addUnigramEntry(word, frequency, shortcutTarget, shortcutFreq,
+ false /* isBeginningOfSentence */, isNotAWord, isBlacklisted, timestamp)) {
+ Log.e(TAG, "Cannot add unigram entry. word: " + word);
+ }
}
/**
@@ -315,7 +324,11 @@ abstract public class ExpandableBinaryDictionary extends Dictionary {
protected void addNgramEntryLocked(final PrevWordsInfo prevWordsInfo, final String word,
final int frequency, final int timestamp) {
- mBinaryDictionary.addNgramEntry(prevWordsInfo, word, frequency, timestamp);
+ if (!mBinaryDictionary.addNgramEntry(prevWordsInfo, word, frequency, timestamp)) {
+ Log.e(TAG, "Cannot add n-gram entry.");
+ Log.e(TAG, " PrevWordsInfo: " + prevWordsInfo);
+ Log.e(TAG, " word: " + word);
+ }
}
/**
diff --git a/java/src/com/android/inputmethod/latin/InputAttributes.java b/java/src/com/android/inputmethod/latin/InputAttributes.java
index df4948322..e778a14f6 100644
--- a/java/src/com/android/inputmethod/latin/InputAttributes.java
+++ b/java/src/com/android/inputmethod/latin/InputAttributes.java
@@ -20,7 +20,6 @@ import android.text.InputType;
import android.util.Log;
import android.view.inputmethod.EditorInfo;
-import com.android.inputmethod.latin.utils.CollectionUtils;
import com.android.inputmethod.latin.utils.InputTypeUtils;
import com.android.inputmethod.latin.utils.StringUtils;
@@ -214,7 +213,7 @@ public final class InputAttributes {
}
private static String toFlagsString(final int flags) {
- final ArrayList<String> flagsArray = CollectionUtils.newArrayList();
+ final ArrayList<String> flagsArray = new ArrayList<>();
if (0 != (flags & InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS))
flagsArray.add("TYPE_TEXT_FLAG_NO_SUGGESTIONS");
if (0 != (flags & InputType.TYPE_TEXT_FLAG_MULTI_LINE))
diff --git a/java/src/com/android/inputmethod/latin/LastComposedWord.java b/java/src/com/android/inputmethod/latin/LastComposedWord.java
index 9caec3e01..8cbf8379b 100644
--- a/java/src/com/android/inputmethod/latin/LastComposedWord.java
+++ b/java/src/com/android/inputmethod/latin/LastComposedWord.java
@@ -69,7 +69,7 @@ public final class LastComposedWord {
mInputPointers.copy(inputPointers);
}
mTypedWord = typedWord;
- mEvents = new ArrayList<Event>(events);
+ mEvents = new ArrayList<>(events);
mCommittedWord = committedWord;
mSeparatorString = separatorString;
mActive = true;
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index ab7e66a09..d329d2ce6 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -28,7 +28,6 @@ import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.content.Intent;
import android.content.IntentFilter;
-import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.graphics.Rect;
@@ -38,7 +37,6 @@ import android.net.ConnectivityManager;
import android.os.Debug;
import android.os.IBinder;
import android.os.Message;
-import android.preference.PreferenceManager;
import android.text.InputType;
import android.text.TextUtils;
import android.util.Log;
@@ -83,18 +81,18 @@ import com.android.inputmethod.latin.utils.ApplicationUtils;
import com.android.inputmethod.latin.utils.CapsModeUtils;
import com.android.inputmethod.latin.utils.CoordinateUtils;
import com.android.inputmethod.latin.utils.DialogUtils;
-import com.android.inputmethod.latin.utils.DistracterFilter;
+import com.android.inputmethod.latin.utils.DistracterFilterUsingSuggestion;
import com.android.inputmethod.latin.utils.ImportantNoticeUtils;
import com.android.inputmethod.latin.utils.IntentUtils;
import com.android.inputmethod.latin.utils.JniUtils;
import com.android.inputmethod.latin.utils.LeakGuardHandlerWrapper;
import com.android.inputmethod.latin.utils.StatsUtils;
import com.android.inputmethod.latin.utils.SubtypeLocaleUtils;
-import com.android.inputmethod.research.ResearchLogger;
import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.util.ArrayList;
+import java.util.List;
import java.util.Locale;
import java.util.concurrent.TimeUnit;
@@ -103,7 +101,7 @@ import java.util.concurrent.TimeUnit;
*/
public class LatinIME extends InputMethodService implements KeyboardActionListener,
SuggestionStripView.Listener, SuggestionStripViewAccessor,
- DictionaryFacilitatorForSuggest.DictionaryInitializationListener,
+ DictionaryFacilitator.DictionaryInitializationListener,
ImportantNoticeDialog.ImportantNoticeDialogListener {
private static final String TAG = LatinIME.class.getSimpleName();
private static final boolean TRACE = false;
@@ -122,12 +120,13 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
private static final String SCHEME_PACKAGE = "package";
private final Settings mSettings;
+ private final DictionaryFacilitator mDictionaryFacilitator =
+ new DictionaryFacilitator(new DistracterFilterUsingSuggestion(this /* context */));
private final InputLogic mInputLogic = new InputLogic(this /* LatinIME */,
- this /* SuggestionStripViewAccessor */);
+ this /* SuggestionStripViewAccessor */, mDictionaryFacilitator);
// We expect to have only one decoder in almost all cases, hence the default capacity of 1.
// If it turns out we need several, it will get grown seamlessly.
- final SparseArray<HardwareEventDecoder> mHardwareEventDecoders
- = new SparseArray<HardwareEventDecoder>(1);
+ final SparseArray<HardwareEventDecoder> mHardwareEventDecoders = new SparseArray<>(1);
private View mExtractArea;
private View mKeyPreviewBackingView;
@@ -256,7 +255,8 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
if (latinIme == null) {
return;
}
- if (!latinIme.mSettings.getCurrent().isSuggestionStripVisible()) {
+ if (!latinIme.mSettings.getCurrent()
+ .isCurrentOrientationAllowingSuggestionsPerUserSettings()) {
return;
}
removeMessages(MSG_RESUME_SUGGESTIONS);
@@ -491,12 +491,6 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
loadSettings();
resetSuggest();
- if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
- ResearchLogger.getInstance().init(this, mKeyboardSwitcher);
- ResearchLogger.getInstance().initDictionary(
- mInputLogic.mSuggest.mDictionaryFacilitator);
- }
-
// Register to receive ringer mode change and network state change.
// Also receive installation and removal of a dictionary pack.
final IntentFilter filter = new IntentFilter();
@@ -538,13 +532,13 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
if (!mHandler.hasPendingReopenDictionaries()) {
resetSuggestForLocale(locale);
}
+ mDictionaryFacilitator.updateEnabledSubtypes(mRichImm.getMyEnabledInputMethodSubtypeList(
+ true /* allowsImplicitlySelectedSubtypes */));
refreshPersonalizationDictionarySession();
StatsUtils.onLoadSettings(currentSettingsValues);
}
private void refreshPersonalizationDictionarySession() {
- final DictionaryFacilitatorForSuggest dictionaryFacilitator =
- mInputLogic.mSuggest.mDictionaryFacilitator;
final boolean shouldKeepUserHistoryDictionaries;
final boolean shouldKeepPersonalizationDictionaries;
if (mSettings.getCurrent().mUsePersonalizedDicts) {
@@ -559,16 +553,14 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
if (!shouldKeepUserHistoryDictionaries) {
// Remove user history dictionaries.
PersonalizationHelper.removeAllUserHistoryDictionaries(this);
- dictionaryFacilitator.clearUserHistoryDictionary();
+ mDictionaryFacilitator.clearUserHistoryDictionary();
}
if (!shouldKeepPersonalizationDictionaries) {
// Remove personalization dictionaries.
PersonalizationHelper.removeAllPersonalizationDictionaries(this);
PersonalizationDictionarySessionRegistrar.resetAll(this);
} else {
- final DistracterFilter distracterFilter = createDistracterFilter();
- PersonalizationDictionarySessionRegistrar.init(
- this, dictionaryFacilitator, distracterFilter);
+ PersonalizationDictionarySessionRegistrar.init(this, mDictionaryFacilitator);
}
}
@@ -606,10 +598,8 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
* @param locale the locale
*/
private void resetSuggestForLocale(final Locale locale) {
- final DictionaryFacilitatorForSuggest dictionaryFacilitator =
- mInputLogic.mSuggest.mDictionaryFacilitator;
final SettingsValues settingsValues = mSettings.getCurrent();
- dictionaryFacilitator.resetDictionaries(this /* context */, locale,
+ mDictionaryFacilitator.resetDictionaries(this /* context */, locale,
settingsValues.mUseContactsDict, settingsValues.mUsePersonalizedDicts,
false /* forceReloadMainDictionary */, this);
if (settingsValues.mCorrectionEnabled) {
@@ -622,27 +612,20 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
* Reset suggest by loading the main dictionary of the current locale.
*/
/* package private */ void resetSuggestMainDict() {
- final DictionaryFacilitatorForSuggest dictionaryFacilitator =
- mInputLogic.mSuggest.mDictionaryFacilitator;
final SettingsValues settingsValues = mSettings.getCurrent();
- dictionaryFacilitator.resetDictionaries(this /* context */,
- dictionaryFacilitator.getLocale(), settingsValues.mUseContactsDict,
+ mDictionaryFacilitator.resetDictionaries(this /* context */,
+ mDictionaryFacilitator.getLocale(), settingsValues.mUseContactsDict,
settingsValues.mUsePersonalizedDicts, true /* forceReloadMainDictionary */, this);
}
@Override
public void onDestroy() {
- mInputLogic.mSuggest.mDictionaryFacilitator.closeDictionaries();
+ mDictionaryFacilitator.closeDictionaries();
mSettings.onDestroy();
unregisterReceiver(mConnectivityAndRingerModeChangeReceiver);
- if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
- ResearchLogger.getInstance().onDestroy();
- }
unregisterReceiver(mDictionaryPackInstallReceiver);
unregisterReceiver(mDictionaryDumpBroadcastReceiver);
PersonalizationDictionarySessionRegistrar.close(this);
- LatinImeLogger.commit();
- LatinImeLogger.onDestroy();
StatsUtils.onDestroy();
super.onDestroy();
}
@@ -666,9 +649,8 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
mInputLogic.mConnection.finishComposingText();
mInputLogic.mConnection.endBatchEdit();
}
- final DistracterFilter distracterFilter = createDistracterFilter();
PersonalizationDictionarySessionRegistrar.onConfigurationChanged(this, conf,
- mInputLogic.mSuggest.mDictionaryFacilitator, distracterFilter);
+ mDictionaryFacilitator);
super.onConfigurationChanged(conf);
}
@@ -687,9 +669,6 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
if (hasSuggestionStripView()) {
mSuggestionStripView.setListener(this, view);
}
- if (LatinImeLogger.sVISUALDEBUG) {
- mKeyPreviewBackingView.setBackgroundColor(0x10FF0000);
- }
}
@Override
@@ -762,10 +741,6 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
}
Log.i(TAG, "Starting input. Cursor position = "
+ editorInfo.initialSelStart + "," + editorInfo.initialSelEnd);
- if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
- final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
- ResearchLogger.latinIME_onStartInputViewInternal(editorInfo, prefs);
- }
if (InputAttributes.inPrivateImeOptions(null, NO_MICROPHONE_COMPAT, editorInfo)) {
Log.w(TAG, "Deprecated private IME option specified: " + editorInfo.privateImeOptions);
Log.w(TAG, "Use " + getPackageName() + "." + NO_MICROPHONE + " instead");
@@ -775,7 +750,6 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
Log.w(TAG, "Use EditorInfo.IME_FLAG_FORCE_ASCII flag instead");
}
- LatinImeLogger.onStartInputView(editorInfo);
// In landscape mode, this method gets called without the input view being created.
if (mainKeyboardView == null) {
return;
@@ -841,7 +815,8 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
currentSettingsValues = mSettings.getCurrent();
if (currentSettingsValues.mCorrectionEnabled) {
- suggest.setAutoCorrectionThreshold(currentSettingsValues.mAutoCorrectionThreshold);
+ suggest.setAutoCorrectionThreshold(
+ currentSettingsValues.mAutoCorrectionThreshold);
}
switcher.loadKeyboard(editorInfo, currentSettingsValues, getCurrentAutoCapsState(),
@@ -870,7 +845,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
mHandler.cancelUpdateSuggestionStrip();
mainKeyboardView.setMainDictionaryAvailability(
- suggest.mDictionaryFacilitator.hasInitializedMainDictionary());
+ mDictionaryFacilitator.hasInitializedMainDictionary());
mainKeyboardView.setKeyPreviewPopupEnabled(currentSettingsValues.mKeyPreviewPopupOn,
currentSettingsValues.mKeyPreviewPopupDismissDelay);
mainKeyboardView.setSlidingKeyInputPreviewEnabled(
@@ -895,7 +870,6 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
private void onFinishInputInternal() {
super.onFinishInput();
- LatinImeLogger.commit();
final MainKeyboardView mainKeyboardView = mKeyboardSwitcher.getMainKeyboardView();
if (mainKeyboardView != null) {
mainKeyboardView.closing();
@@ -909,10 +883,6 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
mHandler.cancelUpdateSuggestionStrip();
// Should do the following in onFinishInputInternal but until JB MR2 it's not called :(
mInputLogic.finishInput();
- // Notify ResearchLogger
- if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
- ResearchLogger.latinIME_onFinishInputViewInternal(finishingInput);
- }
}
@Override
@@ -926,11 +896,6 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
+ ", nss=" + newSelStart + ", nse=" + newSelEnd
+ ", cs=" + composingSpanStart + ", ce=" + composingSpanEnd);
}
- if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
- ResearchLogger.latinIME_onUpdateSelection(oldSelStart, oldSelEnd,
- oldSelStart, oldSelEnd, newSelStart, newSelEnd, composingSpanStart,
- composingSpanEnd, mInputLogic.mConnection);
- }
// If the keyboard is not visible, we don't need to do all the housekeeping work, as it
// will be reset when the keyboard shows up anyway.
@@ -991,7 +956,6 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
@Override
public void hideWindow() {
- LatinImeLogger.commit();
mKeyboardSwitcher.onHideWindow();
if (TRACE) Debug.stopMethodTracing();
@@ -1017,9 +981,6 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
}
if (applicationSpecifiedCompletions == null) {
setNeutralSuggestionStrip();
- if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
- ResearchLogger.latinIME_onDisplayCompletions(null);
- }
return;
}
@@ -1031,9 +992,6 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
false /* isObsoleteSuggestions */, false /* isPrediction */);
// When in fullscreen mode, show completions generated by the application forcibly
setSuggestedWords(suggestedWords, true /* isSuggestionStripVisible */);
- if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
- ResearchLogger.latinIME_onDisplayCompletions(applicationSpecifiedCompletions);
- }
}
private int getAdjustedBackingViewHeight() {
@@ -1167,8 +1125,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
} else {
wordToEdit = word;
}
- mInputLogic.mSuggest.mDictionaryFacilitator.addWordToUserDictionary(
- this /* context */, wordToEdit);
+ mDictionaryFacilitator.addWordToUserDictionary(this /* context */, wordToEdit);
}
// Callback for the {@link SuggestionStripView}, to call when the important notice strip is
@@ -1352,7 +1309,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
currentSettings.mInputAttributes)) {
return true;
}
- if (!currentSettings.isSuggestionStripVisible()) {
+ if (!currentSettings.isCurrentOrientationAllowingSuggestionsPerUserSettings()) {
return false;
}
if (currentSettings.isApplicationSpecifiedCompletionsOn()) {
@@ -1397,8 +1354,14 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
final SettingsValues currentSettings = mSettings.getCurrent();
final boolean showSuggestions;
- if (SuggestedWords.EMPTY == suggestedWords || suggestedWords.isPunctuationSuggestions()
- || !currentSettings.isSuggestionsRequested()) {
+ // May show the important notice when there are no suggestions to show,
+ if (SuggestedWords.EMPTY == suggestedWords
+ // or the suggestion strip is expected to show punctuation suggestions,
+ || suggestedWords.isPunctuationSuggestions()
+ // or it's not requested to show suggestions by the input field,
+ || !currentSettings.isSuggestionsRequested()
+ // or the "show correction suggestions" settings is off by users preference.
+ || !currentSettings.isCurrentOrientationAllowingSuggestionsPerUserSettings()) {
showSuggestions = !mSuggestionStripView.maybeShowImportantNoticeTitle(
currentSettings.mInputAttributes);
} else {
@@ -1725,15 +1688,14 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
@UsedForTesting
/* package for test */ void waitForLoadingDictionaries(final long timeout, final TimeUnit unit)
throws InterruptedException {
- mInputLogic.mSuggest.mDictionaryFacilitator.waitForLoadingDictionariesForTesting(
- timeout, unit);
+ mDictionaryFacilitator.waitForLoadingDictionariesForTesting(timeout, unit);
}
// DO NOT USE THIS for any other purpose than testing. This can break the keyboard badly.
@UsedForTesting
/* package for test */ void replaceDictionariesForTest(final Locale locale) {
final SettingsValues settingsValues = mSettings.getCurrent();
- mInputLogic.mSuggest.mDictionaryFacilitator.resetDictionaries(this, locale,
+ mDictionaryFacilitator.resetDictionaries(this, locale,
settingsValues.mUseContactsDict, settingsValues.mUsePersonalizedDicts,
false /* forceReloadMainDictionary */, this /* listener */);
}
@@ -1741,24 +1703,21 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
// DO NOT USE THIS for any other purpose than testing.
@UsedForTesting
/* package for test */ void clearPersonalizedDictionariesForTest() {
- mInputLogic.mSuggest.mDictionaryFacilitator.clearUserHistoryDictionary();
- mInputLogic.mSuggest.mDictionaryFacilitator.clearPersonalizationDictionary();
+ mDictionaryFacilitator.clearUserHistoryDictionary();
+ mDictionaryFacilitator.clearPersonalizationDictionary();
}
@UsedForTesting
- /* package for test */ DistracterFilter createDistracterFilter() {
- return new DistracterFilter(this /* Context */,
- mRichImm.getMyEnabledInputMethodSubtypeList(
- true /* allowsImplicitlySelectedSubtypes */));
+ /* package for test */ List<InputMethodSubtype> getEnabledSubtypesForTest() {
+ return (mRichImm != null) ? mRichImm.getMyEnabledInputMethodSubtypeList(
+ true /* allowsImplicitlySelectedSubtypes */) : new ArrayList<InputMethodSubtype>();
}
public void dumpDictionaryForDebug(final String dictName) {
- final DictionaryFacilitatorForSuggest dictionaryFacilitator =
- mInputLogic.mSuggest.mDictionaryFacilitator;
- if (dictionaryFacilitator.getLocale() == null) {
+ if (mDictionaryFacilitator.getLocale() == null) {
resetSuggest();
}
- mInputLogic.mSuggest.mDictionaryFacilitator.dumpDictionaryForDebug(dictName);
+ mDictionaryFacilitator.dumpDictionaryForDebug(dictName);
}
public void debugDumpStateAndCrashWithException(final String context) {
diff --git a/java/src/com/android/inputmethod/latin/LatinImeLogger.java b/java/src/com/android/inputmethod/latin/LatinImeLogger.java
index 3f2b0a3f4..8fd36b937 100644
--- a/java/src/com/android/inputmethod/latin/LatinImeLogger.java
+++ b/java/src/com/android/inputmethod/latin/LatinImeLogger.java
@@ -16,76 +16,12 @@
package com.android.inputmethod.latin;
-import android.content.SharedPreferences;
-import android.view.inputmethod.EditorInfo;
+import android.content.Context;
-import com.android.inputmethod.keyboard.Keyboard;
+// TODO: Rename this class name to make it more relevant.
+public final class LatinImeLogger {
+ public static final boolean sDBG = false;
-public final class LatinImeLogger implements SharedPreferences.OnSharedPreferenceChangeListener {
-
- public static boolean sDBG = false;
- public static boolean sVISUALDEBUG = false;
- public static boolean sUsabilityStudy = false;
-
- @Override
- public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
- }
-
- public static void init(LatinIME context) {
- }
-
- public static void commit() {
- }
-
- public static boolean getUsabilityStudyMode(final SharedPreferences prefs) {
- return false;
- }
-
- public static void onDestroy() {
- }
-
- public static void logOnManualSuggestion(
- String before, String after, int position, SuggestedWords suggestedWords) {
- }
-
- public static void logOnAutoCorrectionForTyping(
- String before, String after, int separatorCode) {
- }
-
- public static void logOnAutoCorrectionForGeometric(String before, String after,
- int separatorCode, InputPointers inputPointers) {
- }
-
- public static void logOnAutoCorrectionCancelled() {
- }
-
- public static void logOnDelete(int x, int y) {
- }
-
- public static void logOnInputChar() {
- }
-
- public static void logOnInputSeparator() {
- }
-
- public static void logOnException(String metaData, Throwable e) {
- }
-
- public static void logOnWarning(String warning) {
- }
-
- public static void onStartInputView(EditorInfo editorInfo) {
- }
-
- public static void onStartSuggestion(CharSequence previousWords) {
- }
-
- public static void onAddSuggestedWord(String word, String sourceDictionaryId) {
- }
-
- public static void onSetKeyboard(Keyboard kb) {
- }
-
- public static void onPrintAllUsabilityStudyLogs() {
+ public static void init(Context context) {
}
}
diff --git a/java/src/com/android/inputmethod/latin/PrevWordsInfo.java b/java/src/com/android/inputmethod/latin/PrevWordsInfo.java
index ecc8947db..42b311c69 100644
--- a/java/src/com/android/inputmethod/latin/PrevWordsInfo.java
+++ b/java/src/com/android/inputmethod/latin/PrevWordsInfo.java
@@ -16,23 +16,32 @@
package com.android.inputmethod.latin;
-import android.util.Log;
-
+/**
+ * Class to represent information of previous words. This class is used to add n-gram entries
+ * into binary dictionaries, to get predictions, and to get suggestions.
+ */
// TODO: Support multiple previous words for n-gram.
public class PrevWordsInfo {
- // The previous word. May be null after resetting and before starting a new composing word, or
- // when there is no context like at the start of text for example. It can also be set to null
- // externally when the user enters a separator that does not let bigrams across, like a period
- // or a comma.
+ public static final PrevWordsInfo EMPTY_PREV_WORDS_INFO = new PrevWordsInfo(null);
+ public static final PrevWordsInfo BEGINNING_OF_SENTENCE = new PrevWordsInfo();
+
+ // The word immediately before the considered word. null means we don't have any context
+ // including the "beginning of sentence context" - we just don't know what to predict.
+ // An example of that is after a comma.
+ // For simplicity of implementation, this may also be null transiently after the WordComposer
+ // was reset and before starting a new composing word, but we should never be calling
+ // getSuggetions* in this situation.
+ // This is an empty string when mIsBeginningOfSentence is true.
public final String mPrevWord;
// TODO: Have sentence separator.
- // Whether the current context is beginning of sentence or not.
+ // Whether the current context is beginning of sentence or not. This is true when composing at
+ // the beginning of an input field or composing a word after a sentence separator.
public final boolean mIsBeginningOfSentence;
// Beginning of sentence.
public PrevWordsInfo() {
- mPrevWord = null;
+ mPrevWord = "";
mIsBeginningOfSentence = true;
}
@@ -40,4 +49,14 @@ public class PrevWordsInfo {
mPrevWord = prevWord;
mIsBeginningOfSentence = false;
}
+
+ public boolean isValid() {
+ return mPrevWord != null;
+ }
+
+ @Override
+ public String toString() {
+ return "PrevWord: " + mPrevWord + ", isBeginningOfSentence: "
+ + mIsBeginningOfSentence + ".";
+ }
}
diff --git a/java/src/com/android/inputmethod/latin/PunctuationSuggestions.java b/java/src/com/android/inputmethod/latin/PunctuationSuggestions.java
index 4911bcdf6..0fba37c8a 100644
--- a/java/src/com/android/inputmethod/latin/PunctuationSuggestions.java
+++ b/java/src/com/android/inputmethod/latin/PunctuationSuggestions.java
@@ -17,8 +17,6 @@
package com.android.inputmethod.latin;
import com.android.inputmethod.keyboard.internal.KeySpecParser;
-import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
-import com.android.inputmethod.latin.utils.CollectionUtils;
import com.android.inputmethod.latin.utils.StringUtils;
import java.util.ArrayList;
@@ -49,7 +47,7 @@ public final class PunctuationSuggestions extends SuggestedWords {
*/
public static PunctuationSuggestions newPunctuationSuggestions(
final String[] punctuationSpecs) {
- final ArrayList<SuggestedWordInfo> puncuationsList = CollectionUtils.newArrayList();
+ final ArrayList<SuggestedWordInfo> puncuationsList = new ArrayList<>();
for (final String puncSpec : punctuationSpecs) {
puncuationsList.add(newHardCodedWordInfo(puncSpec));
}
diff --git a/java/src/com/android/inputmethod/latin/RichInputConnection.java b/java/src/com/android/inputmethod/latin/RichInputConnection.java
index 2c54e10aa..46c015116 100644
--- a/java/src/com/android/inputmethod/latin/RichInputConnection.java
+++ b/java/src/com/android/inputmethod/latin/RichInputConnection.java
@@ -26,14 +26,12 @@ import android.view.inputmethod.ExtractedText;
import android.view.inputmethod.ExtractedTextRequest;
import android.view.inputmethod.InputConnection;
-import com.android.inputmethod.latin.define.ProductionFlag;
import com.android.inputmethod.latin.settings.SpacingAndPunctuations;
import com.android.inputmethod.latin.utils.CapsModeUtils;
import com.android.inputmethod.latin.utils.DebugLogUtils;
import com.android.inputmethod.latin.utils.SpannableStringUtils;
import com.android.inputmethod.latin.utils.StringUtils;
import com.android.inputmethod.latin.utils.TextRange;
-import com.android.inputmethod.research.ResearchLogger;
import java.util.Arrays;
import java.util.regex.Pattern;
@@ -174,9 +172,6 @@ public final class RichInputConnection {
}
if (null != mIC && shouldFinishComposition) {
mIC.finishComposingText();
- if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
- ResearchLogger.richInputConnection_finishComposingText();
- }
}
return true;
}
@@ -223,9 +218,6 @@ public final class RichInputConnection {
mComposingText.setLength(0);
if (null != mIC) {
mIC.finishComposingText();
- if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
- ResearchLogger.richInputConnection_finishComposingText();
- }
}
}
@@ -363,9 +355,6 @@ public final class RichInputConnection {
}
if (null != mIC) {
mIC.deleteSurroundingText(beforeLength, afterLength);
- if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
- ResearchLogger.richInputConnection_deleteSurroundingText(beforeLength, afterLength);
- }
}
if (DEBUG_PREVIOUS_TEXT) checkConsistencyForDebug();
}
@@ -374,9 +363,6 @@ public final class RichInputConnection {
mIC = mParent.getCurrentInputConnection();
if (null != mIC) {
mIC.performEditorAction(actionId);
- if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
- ResearchLogger.richInputConnection_performEditorAction(actionId);
- }
}
}
@@ -429,9 +415,6 @@ public final class RichInputConnection {
}
if (null != mIC) {
mIC.sendKeyEvent(keyEvent);
- if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
- ResearchLogger.richInputConnection_sendKeyEvent(keyEvent);
- }
}
}
@@ -469,9 +452,6 @@ public final class RichInputConnection {
// newCursorPosition != 1.
if (null != mIC) {
mIC.setComposingText(text, newCursorPosition);
- if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
- ResearchLogger.richInputConnection_setComposingText(text, newCursorPosition);
- }
}
if (DEBUG_PREVIOUS_TEXT) checkConsistencyForDebug();
}
@@ -500,9 +480,6 @@ public final class RichInputConnection {
if (!isIcValid) {
return false;
}
- if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
- ResearchLogger.richInputConnection_setSelection(start, end);
- }
}
return reloadTextCache();
}
@@ -530,9 +507,6 @@ public final class RichInputConnection {
mComposingText.setLength(0);
if (null != mIC) {
mIC.commitCompletion(completionInfo);
- if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
- ResearchLogger.richInputConnection_commitCompletion(completionInfo);
- }
}
if (DEBUG_PREVIOUS_TEXT) checkConsistencyForDebug();
}
@@ -542,7 +516,7 @@ public final class RichInputConnection {
final SpacingAndPunctuations spacingAndPunctuations, final int n) {
mIC = mParent.getCurrentInputConnection();
if (null == mIC) {
- return new PrevWordsInfo(null);
+ return PrevWordsInfo.EMPTY_PREV_WORDS_INFO;
}
final CharSequence prev = getTextBeforeCursor(LOOKBACK_CHARACTER_NUM, 0);
if (DEBUG_PREVIOUS_TEXT && null != prev) {
@@ -588,30 +562,30 @@ public final class RichInputConnection {
// (n = 2) "abc. def|" -> beginning-of-sentence
public static PrevWordsInfo getPrevWordsInfoFromNthPreviousWord(final CharSequence prev,
final SpacingAndPunctuations spacingAndPunctuations, final int n) {
- if (prev == null) return new PrevWordsInfo(null);
+ if (prev == null) return PrevWordsInfo.EMPTY_PREV_WORDS_INFO;
final String[] w = spaceRegex.split(prev);
// If we can't find n words, or we found an empty word, the context is
// beginning-of-sentence.
if (w.length < n) {
- return new PrevWordsInfo();
+ return PrevWordsInfo.BEGINNING_OF_SENTENCE;
}
final String nthPrevWord = w[w.length - n];
final int length = nthPrevWord.length();
if (length <= 0) {
- return new PrevWordsInfo();
+ return PrevWordsInfo.BEGINNING_OF_SENTENCE;
}
// If ends in a sentence separator, the context is beginning-of-sentence.
final char lastChar = nthPrevWord.charAt(length - 1);
if (spacingAndPunctuations.isSentenceSeparator(lastChar)) {
- new PrevWordsInfo();
+ return PrevWordsInfo.BEGINNING_OF_SENTENCE;
}
// If ends in a word separator or connector, the context is unclear.
// TODO: Return meaningful context for this case.
if (spacingAndPunctuations.isWordSeparator(lastChar)
|| spacingAndPunctuations.isWordConnector(lastChar)) {
- return new PrevWordsInfo(null);
+ return PrevWordsInfo.EMPTY_PREV_WORDS_INFO;
}
return new PrevWordsInfo(nthPrevWord);
}
@@ -765,9 +739,6 @@ public final class RichInputConnection {
deleteSurroundingText(2, 0);
final String singleSpace = " ";
commitText(singleSpace, 1);
- if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
- ResearchLogger.richInputConnection_revertDoubleSpacePeriod();
- }
return true;
}
@@ -790,9 +761,6 @@ public final class RichInputConnection {
deleteSurroundingText(2, 0);
final String text = " " + textBeforeCursor.subSequence(0, 1);
commitText(text, 1);
- if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
- ResearchLogger.richInputConnection_revertSwapPunctuation();
- }
return true;
}
diff --git a/java/src/com/android/inputmethod/latin/RichInputMethodManager.java b/java/src/com/android/inputmethod/latin/RichInputMethodManager.java
index 64cc562c8..cbdc4b9eb 100644
--- a/java/src/com/android/inputmethod/latin/RichInputMethodManager.java
+++ b/java/src/com/android/inputmethod/latin/RichInputMethodManager.java
@@ -31,7 +31,6 @@ import android.view.inputmethod.InputMethodSubtype;
import com.android.inputmethod.compat.InputMethodManagerCompatWrapper;
import com.android.inputmethod.latin.settings.Settings;
import com.android.inputmethod.latin.utils.AdditionalSubtypeUtils;
-import com.android.inputmethod.latin.utils.CollectionUtils;
import com.android.inputmethod.latin.utils.SubtypeLocaleUtils;
import java.util.Collections;
@@ -53,9 +52,9 @@ public final class RichInputMethodManager {
private InputMethodManagerCompatWrapper mImmWrapper;
private InputMethodInfoCache mInputMethodInfoCache;
final HashMap<InputMethodInfo, List<InputMethodSubtype>>
- mSubtypeListCacheWithImplicitlySelectedSubtypes = CollectionUtils.newHashMap();
+ mSubtypeListCacheWithImplicitlySelectedSubtypes = new HashMap<>();
final HashMap<InputMethodInfo, List<InputMethodSubtype>>
- mSubtypeListCacheWithoutImplicitlySelectedSubtypes = CollectionUtils.newHashMap();
+ mSubtypeListCacheWithoutImplicitlySelectedSubtypes = new HashMap<>();
private static final int INDEX_NOT_FOUND = -1;
diff --git a/java/src/com/android/inputmethod/latin/SubtypeSwitcher.java b/java/src/com/android/inputmethod/latin/SubtypeSwitcher.java
index c8a2fb2f9..a3d09565c 100644
--- a/java/src/com/android/inputmethod/latin/SubtypeSwitcher.java
+++ b/java/src/com/android/inputmethod/latin/SubtypeSwitcher.java
@@ -255,8 +255,7 @@ public final class SubtypeSwitcher {
public boolean isSystemLocaleSameAsLocaleOfAllEnabledSubtypesOfEnabledImes() {
final Locale systemLocale = mResources.getConfiguration().locale;
- final Set<InputMethodSubtype> enabledSubtypesOfEnabledImes =
- new HashSet<InputMethodSubtype>();
+ final Set<InputMethodSubtype> enabledSubtypesOfEnabledImes = new HashSet<>();
final InputMethodManager inputMethodManager = mRichImm.getInputMethodManager();
final List<InputMethodInfo> enabledInputMethodInfoList =
inputMethodManager.getEnabledInputMethodList();
diff --git a/java/src/com/android/inputmethod/latin/Suggest.java b/java/src/com/android/inputmethod/latin/Suggest.java
index 43daee4d2..9da0f8451 100644
--- a/java/src/com/android/inputmethod/latin/Suggest.java
+++ b/java/src/com/android/inputmethod/latin/Suggest.java
@@ -23,7 +23,6 @@ import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
import com.android.inputmethod.latin.define.ProductionFlag;
import com.android.inputmethod.latin.utils.AutoCorrectionUtils;
import com.android.inputmethod.latin.utils.BinaryDictionaryUtils;
-import com.android.inputmethod.latin.utils.CollectionUtils;
import com.android.inputmethod.latin.utils.StringUtils;
import com.android.inputmethod.latin.utils.SuggestionResults;
@@ -52,11 +51,14 @@ public final class Suggest {
private static final int SUPPRESS_SUGGEST_THRESHOLD = -2000000000;
private static final boolean DBG = LatinImeLogger.sDBG;
- public final DictionaryFacilitatorForSuggest mDictionaryFacilitator =
- new DictionaryFacilitatorForSuggest();
+ private final DictionaryFacilitator mDictionaryFacilitator;
private float mAutoCorrectionThreshold;
+ public Suggest(final DictionaryFacilitator dictionaryFacilitator) {
+ mDictionaryFacilitator = dictionaryFacilitator;
+ }
+
public Locale getLocale() {
return mDictionaryFacilitator.getLocale();
}
@@ -74,7 +76,6 @@ public final class Suggest {
final boolean blockOffensiveWords, final boolean isCorrectionEnabled,
final int[] additionalFeaturesOptions, final int sessionId, final int sequenceNumber,
final OnGetSuggestedWordsCallback callback) {
- LatinImeLogger.onStartSuggestion(prevWordsInfo.mPrevWord);
if (wordComposer.isBatchMode()) {
getSuggestedWordsForBatchInput(wordComposer, prevWordsInfo, proximityInfo,
blockOffensiveWords, additionalFeaturesOptions, sessionId, sequenceNumber,
@@ -98,11 +99,10 @@ public final class Suggest {
final String consideredWord = trailingSingleQuotesCount > 0
? typedWord.substring(0, typedWord.length() - trailingSingleQuotesCount)
: typedWord;
- LatinImeLogger.onAddSuggestedWord(typedWord, Dictionary.TYPE_USER_TYPED);
final ArrayList<SuggestedWordInfo> rawSuggestions;
if (ProductionFlag.INCLUDE_RAW_SUGGESTIONS) {
- rawSuggestions = CollectionUtils.newArrayList();
+ rawSuggestions = new ArrayList<>();
} else {
rawSuggestions = null;
}
@@ -124,7 +124,7 @@ public final class Suggest {
suggestionResults.first(), suggestionResults.mLocale, isAllUpperCase,
isFirstCharCapitalized, trailingSingleQuotesCount);
firstSuggestion = firstSuggestedWordInfo.mWord;
- if (SuggestedWordInfo.KIND_WHITELIST != firstSuggestedWordInfo.mKind) {
+ if (!firstSuggestedWordInfo.isKindOf(SuggestedWordInfo.KIND_WHITELIST)) {
whitelistedWord = null;
} else {
whitelistedWord = firstSuggestion;
@@ -155,7 +155,7 @@ public final class Suggest {
|| suggestionResults.isEmpty() || wordComposer.hasDigits()
|| wordComposer.isMostlyCaps() || wordComposer.isResumed()
|| !mDictionaryFacilitator.hasInitializedMainDictionary()
- || SuggestedWordInfo.KIND_SHORTCUT == suggestionResults.first().mKind) {
+ || suggestionResults.first().isKindOf(SuggestedWordInfo.KIND_SHORTCUT)) {
// If we don't have a main dictionary, we never want to auto-correct. The reason for
// this is, the user may have a contact whose name happens to match a valid word in
// their language, and it will unexpectedly auto-correct. For example, if the user
@@ -171,7 +171,7 @@ public final class Suggest {
}
final ArrayList<SuggestedWordInfo> suggestionsContainer =
- CollectionUtils.newArrayList(suggestionResults);
+ new ArrayList<>(suggestionResults);
final int suggestionsCount = suggestionsContainer.size();
if (isFirstCharCapitalized || isAllUpperCase || 0 != trailingSingleQuotesCount) {
for (int i = 0; i < suggestionsCount; ++i) {
@@ -183,12 +183,6 @@ public final class Suggest {
}
}
- for (int i = 0; i < suggestionsCount; ++i) {
- final SuggestedWordInfo wordInfo = suggestionsContainer.get(i);
- LatinImeLogger.onAddSuggestedWord(wordInfo.mWord.toString(),
- wordInfo.mSourceDict.mDictType);
- }
-
if (!TextUtils.isEmpty(typedWord)) {
suggestionsContainer.add(0, new SuggestedWordInfo(typedWord,
SuggestedWordInfo.MAX_SCORE, SuggestedWordInfo.KIND_TYPED,
@@ -223,19 +217,15 @@ public final class Suggest {
final OnGetSuggestedWordsCallback callback) {
final ArrayList<SuggestedWordInfo> rawSuggestions;
if (ProductionFlag.INCLUDE_RAW_SUGGESTIONS) {
- rawSuggestions = CollectionUtils.newArrayList();
+ rawSuggestions = new ArrayList<>();
} else {
rawSuggestions = null;
}
final SuggestionResults suggestionResults = mDictionaryFacilitator.getSuggestionResults(
wordComposer, prevWordsInfo, proximityInfo, blockOffensiveWords,
additionalFeaturesOptions, sessionId, rawSuggestions);
- for (SuggestedWordInfo wordInfo : suggestionResults) {
- LatinImeLogger.onAddSuggestedWord(wordInfo.mWord, wordInfo.mSourceDict.mDictType);
- }
-
final ArrayList<SuggestedWordInfo> suggestionsContainer =
- CollectionUtils.newArrayList(suggestionResults);
+ new ArrayList<>(suggestionResults);
final int suggestionsCount = suggestionsContainer.size();
final boolean isFirstCharCapitalized = wordComposer.wasShiftedNoLock();
final boolean isAllUpperCase = wordComposer.isAllUpperCase();
@@ -278,8 +268,7 @@ public final class Suggest {
final SuggestedWordInfo typedWordInfo = suggestions.get(0);
typedWordInfo.setDebugString("+");
final int suggestionsSize = suggestions.size();
- final ArrayList<SuggestedWordInfo> suggestionsList =
- CollectionUtils.newArrayList(suggestionsSize);
+ final ArrayList<SuggestedWordInfo> suggestionsList = new ArrayList<>(suggestionsSize);
suggestionsList.add(typedWordInfo);
// Note: i here is the index in mScores[], but the index in mSuggestions is one more
// than i because we added the typed word to mSuggestions without touching mScores.
@@ -320,7 +309,7 @@ public final class Suggest {
for (int i = quotesToAppend - 1; i >= 0; --i) {
sb.appendCodePoint(Constants.CODE_SINGLE_QUOTE);
}
- return new SuggestedWordInfo(sb.toString(), wordInfo.mScore, wordInfo.mKind,
+ return new SuggestedWordInfo(sb.toString(), wordInfo.mScore, wordInfo.mKindAndFlags,
wordInfo.mSourceDict, wordInfo.mIndexOfTouchPointOfSecondWord,
wordInfo.mAutoCommitFirstWordConfidence);
}
diff --git a/java/src/com/android/inputmethod/latin/SuggestedWords.java b/java/src/com/android/inputmethod/latin/SuggestedWords.java
index dc2c9fd0e..72461e17a 100644
--- a/java/src/com/android/inputmethod/latin/SuggestedWords.java
+++ b/java/src/com/android/inputmethod/latin/SuggestedWords.java
@@ -19,7 +19,6 @@ package com.android.inputmethod.latin;
import android.text.TextUtils;
import android.view.inputmethod.CompletionInfo;
-import com.android.inputmethod.latin.utils.CollectionUtils;
import com.android.inputmethod.latin.utils.StringUtils;
import java.util.ArrayList;
@@ -34,8 +33,7 @@ public class SuggestedWords {
// The maximum number of suggestions available.
public static final int MAX_SUGGESTIONS = 18;
- private static final ArrayList<SuggestedWordInfo> EMPTY_WORD_INFO_LIST =
- CollectionUtils.newArrayList(0);
+ private static final ArrayList<SuggestedWordInfo> EMPTY_WORD_INFO_LIST = new ArrayList<>(0);
public static final SuggestedWords EMPTY = new SuggestedWords(
EMPTY_WORD_INFO_LIST, null /* rawSuggestions */, false, false, false, false);
@@ -165,7 +163,7 @@ public class SuggestedWords {
public static ArrayList<SuggestedWordInfo> getFromApplicationSpecifiedCompletions(
final CompletionInfo[] infos) {
- final ArrayList<SuggestedWordInfo> result = CollectionUtils.newArrayList();
+ final ArrayList<SuggestedWordInfo> result = new ArrayList<>();
for (final CompletionInfo info : infos) {
if (null == info || null == info.getText()) {
continue;
@@ -179,8 +177,8 @@ public class SuggestedWords {
// and replace it with what the user currently typed.
public static ArrayList<SuggestedWordInfo> getTypedWordAndPreviousSuggestions(
final String typedWord, final SuggestedWords previousSuggestions) {
- final ArrayList<SuggestedWordInfo> suggestionsList = CollectionUtils.newArrayList();
- final HashSet<String> alreadySeen = CollectionUtils.newHashSet();
+ final ArrayList<SuggestedWordInfo> suggestionsList = new ArrayList<>();
+ final HashSet<String> alreadySeen = new HashSet<>();
suggestionsList.add(new SuggestedWordInfo(typedWord, SuggestedWordInfo.MAX_SCORE,
SuggestedWordInfo.KIND_TYPED, Dictionary.DICTIONARY_USER_TYPED,
SuggestedWordInfo.NOT_AN_INDEX /* indexOfTouchPointOfSecondWord */,
@@ -209,7 +207,8 @@ public class SuggestedWords {
public static final int NOT_AN_INDEX = -1;
public static final int NOT_A_CONFIDENCE = -1;
public static final int MAX_SCORE = Integer.MAX_VALUE;
- public static final int KIND_MASK_KIND = 0xFF; // Mask to get only the kind
+
+ private static final int KIND_MASK_KIND = 0xFF; // Mask to get only the kind
public static final int KIND_TYPED = 0; // What user typed
public static final int KIND_CORRECTION = 1; // Simple correction/suggestion
public static final int KIND_COMPLETION = 2; // Completion (suggestion with appended chars)
@@ -224,16 +223,16 @@ public class SuggestedWords {
public static final int KIND_RESUMED = 9;
public static final int KIND_OOV_CORRECTION = 10; // Most probable string correction
- public static final int KIND_MASK_FLAGS = 0xFFFFFF00; // Mask to get the flags
public static final int KIND_FLAG_POSSIBLY_OFFENSIVE = 0x80000000;
public static final int KIND_FLAG_EXACT_MATCH = 0x40000000;
+ public static final int KIND_FLAG_EXACT_MATCH_WITH_INTENTIONAL_OMISSION = 0x20000000;
public final String mWord;
// The completion info from the application. Null for suggestions that don't come from
// the application (including keyboard-computed ones, so this is almost always null)
public final CompletionInfo mApplicationSpecifiedCompletionInfo;
public final int mScore;
- public final int mKind; // one of the KIND_* constants above
+ public final int mKindAndFlags;
public final int mCodePointCount;
public final Dictionary mSourceDict;
// For auto-commit. This keeps track of the index inside the touch coordinates array
@@ -249,18 +248,19 @@ public class SuggestedWords {
* Create a new suggested word info.
* @param word The string to suggest.
* @param score A measure of how likely this suggestion is.
- * @param kind The kind of suggestion, as one of the above KIND_* constants.
+ * @param kindAndFlags The kind of suggestion, as one of the above KIND_* constants with
+ * flags.
* @param sourceDict What instance of Dictionary produced this suggestion.
* @param indexOfTouchPointOfSecondWord See mIndexOfTouchPointOfSecondWord.
* @param autoCommitFirstWordConfidence See mAutoCommitFirstWordConfidence.
*/
- public SuggestedWordInfo(final String word, final int score, final int kind,
+ public SuggestedWordInfo(final String word, final int score, final int kindAndFlags,
final Dictionary sourceDict, final int indexOfTouchPointOfSecondWord,
final int autoCommitFirstWordConfidence) {
mWord = word;
mApplicationSpecifiedCompletionInfo = null;
mScore = score;
- mKind = kind;
+ mKindAndFlags = kindAndFlags;
mSourceDict = sourceDict;
mCodePointCount = StringUtils.codePointCount(mWord);
mIndexOfTouchPointOfSecondWord = indexOfTouchPointOfSecondWord;
@@ -276,7 +276,7 @@ public class SuggestedWords {
mWord = applicationSpecifiedCompletion.getText().toString();
mApplicationSpecifiedCompletionInfo = applicationSpecifiedCompletion;
mScore = SuggestedWordInfo.MAX_SCORE;
- mKind = SuggestedWordInfo.KIND_APP_DEFINED;
+ mKindAndFlags = SuggestedWordInfo.KIND_APP_DEFINED;
mSourceDict = Dictionary.DICTIONARY_APPLICATION_DEFINED;
mCodePointCount = StringUtils.codePointCount(mWord);
mIndexOfTouchPointOfSecondWord = SuggestedWordInfo.NOT_AN_INDEX;
@@ -284,7 +284,27 @@ public class SuggestedWords {
}
public boolean isEligibleForAutoCommit() {
- return (KIND_CORRECTION == mKind && NOT_AN_INDEX != mIndexOfTouchPointOfSecondWord);
+ return (isKindOf(KIND_CORRECTION) && NOT_AN_INDEX != mIndexOfTouchPointOfSecondWord);
+ }
+
+ public int getKind() {
+ return (mKindAndFlags & KIND_MASK_KIND);
+ }
+
+ public boolean isKindOf(final int kind) {
+ return getKind() == kind;
+ }
+
+ public boolean isPossiblyOffensive() {
+ return (mKindAndFlags & KIND_FLAG_POSSIBLY_OFFENSIVE) != 0;
+ }
+
+ public boolean isExactMatch() {
+ return (mKindAndFlags & KIND_FLAG_EXACT_MATCH) != 0;
+ }
+
+ public boolean isExactMatchWithIntentionalOmission() {
+ return (mKindAndFlags & KIND_FLAG_EXACT_MATCH_WITH_INTENTIONAL_OMISSION) != 0;
}
public void setDebugString(final String str) {
@@ -337,11 +357,11 @@ public class SuggestedWords {
// SuggestedWords is an immutable object, as much as possible. We must not just remove
// words from the member ArrayList as some other parties may expect the object to never change.
public SuggestedWords getSuggestedWordsExcludingTypedWord() {
- final ArrayList<SuggestedWordInfo> newSuggestions = CollectionUtils.newArrayList();
+ final ArrayList<SuggestedWordInfo> newSuggestions = new ArrayList<>();
String typedWord = null;
for (int i = 0; i < mSuggestedWordInfoList.size(); ++i) {
final SuggestedWordInfo info = mSuggestedWordInfoList.get(i);
- if (SuggestedWordInfo.KIND_TYPED != info.mKind) {
+ if (!info.isKindOf(SuggestedWordInfo.KIND_TYPED)) {
newSuggestions.add(info);
} else {
assert(null == typedWord);
@@ -361,12 +381,12 @@ public class SuggestedWords {
// we should only suggest replacements for this last word.
// TODO: make this work with languages without spaces.
public SuggestedWords getSuggestedWordsForLastWordOfPhraseGesture() {
- final ArrayList<SuggestedWordInfo> newSuggestions = CollectionUtils.newArrayList();
+ final ArrayList<SuggestedWordInfo> newSuggestions = new ArrayList<>();
for (int i = 0; i < mSuggestedWordInfoList.size(); ++i) {
final SuggestedWordInfo info = mSuggestedWordInfoList.get(i);
final int indexOfLastSpace = info.mWord.lastIndexOf(Constants.CODE_SPACE) + 1;
final String lastWord = info.mWord.substring(indexOfLastSpace);
- newSuggestions.add(new SuggestedWordInfo(lastWord, info.mScore, info.mKind,
+ newSuggestions.add(new SuggestedWordInfo(lastWord, info.mScore, info.mKindAndFlags,
info.mSourceDict, SuggestedWordInfo.NOT_AN_INDEX,
SuggestedWordInfo.NOT_A_CONFIDENCE));
}
diff --git a/java/src/com/android/inputmethod/latin/WordComposer.java b/java/src/com/android/inputmethod/latin/WordComposer.java
index 6ecb37346..864942d04 100644
--- a/java/src/com/android/inputmethod/latin/WordComposer.java
+++ b/java/src/com/android/inputmethod/latin/WordComposer.java
@@ -18,7 +18,6 @@ package com.android.inputmethod.latin;
import com.android.inputmethod.event.CombinerChain;
import com.android.inputmethod.event.Event;
-import com.android.inputmethod.latin.utils.CollectionUtils;
import com.android.inputmethod.latin.utils.CoordinateUtils;
import com.android.inputmethod.latin.utils.StringUtils;
@@ -79,13 +78,13 @@ public final class WordComposer {
public WordComposer() {
mCombinerChain = new CombinerChain("");
- mEvents = CollectionUtils.newArrayList();
+ mEvents = new ArrayList<>();
mAutoCorrection = null;
mIsResumed = false;
mIsBatchMode = false;
mCursorPositionWithinWord = 0;
mRejectedBatchModeSuggestion = null;
- mPrevWordsInfo = new PrevWordsInfo(null);
+ mPrevWordsInfo = PrevWordsInfo.EMPTY_PREV_WORDS_INFO;
refreshTypedWordCache();
}
@@ -117,7 +116,7 @@ public final class WordComposer {
mIsBatchMode = false;
mCursorPositionWithinWord = 0;
mRejectedBatchModeSuggestion = null;
- mPrevWordsInfo = new PrevWordsInfo(null);
+ mPrevWordsInfo = PrevWordsInfo.EMPTY_PREV_WORDS_INFO;
refreshTypedWordCache();
}
@@ -445,7 +444,7 @@ public final class WordComposer {
// when the user inputs a separator that's not whitespace (including the case of the
// double-space-to-period feature).
public void discardPreviousWordForSuggestion() {
- mPrevWordsInfo = new PrevWordsInfo(null);
+ mPrevWordsInfo = PrevWordsInfo.EMPTY_PREV_WORDS_INFO;
}
public void resumeSuggestionOnLastComposedWord(final LastComposedWord lastComposedWord,
diff --git a/java/src/com/android/inputmethod/latin/debug/ExternalDictionaryGetterForDebug.java b/java/src/com/android/inputmethod/latin/debug/ExternalDictionaryGetterForDebug.java
index 139e73aa4..7071d8689 100644
--- a/java/src/com/android/inputmethod/latin/debug/ExternalDictionaryGetterForDebug.java
+++ b/java/src/com/android/inputmethod/latin/debug/ExternalDictionaryGetterForDebug.java
@@ -27,7 +27,6 @@ import com.android.inputmethod.latin.BinaryDictionaryFileDumper;
import com.android.inputmethod.latin.BinaryDictionaryGetter;
import com.android.inputmethod.latin.R;
import com.android.inputmethod.latin.makedict.DictionaryHeader;
-import com.android.inputmethod.latin.utils.CollectionUtils;
import com.android.inputmethod.latin.utils.DialogUtils;
import com.android.inputmethod.latin.utils.DictionaryInfoUtils;
import com.android.inputmethod.latin.utils.LocaleUtils;
@@ -50,7 +49,7 @@ public class ExternalDictionaryGetterForDebug {
private static String[] findDictionariesInTheDownloadedFolder() {
final File[] files = new File(SOURCE_FOLDER).listFiles();
- final ArrayList<String> eligibleList = CollectionUtils.newArrayList();
+ final ArrayList<String> eligibleList = new ArrayList<>();
for (File f : files) {
final DictionaryHeader header = DictionaryInfoUtils.getDictionaryFileHeaderOrNull(f);
if (null == header) continue;
diff --git a/java/src/com/android/inputmethod/latin/define/ProductionFlag.java b/java/src/com/android/inputmethod/latin/define/ProductionFlag.java
index 761f457ea..972580298 100644
--- a/java/src/com/android/inputmethod/latin/define/ProductionFlag.java
+++ b/java/src/com/android/inputmethod/latin/define/ProductionFlag.java
@@ -21,13 +21,6 @@ public final class ProductionFlag {
// This class is not publicly instantiable.
}
- public static final boolean USES_DEVELOPMENT_ONLY_DIAGNOSTICS = false;
-
- // When false, USES_DEVELOPMENT_ONLY_DIAGNOSTICS_DEBUG suggests that all guarded
- // class-private DEBUG flags should be false, and any privacy controls should be enforced.
- // USES_DEVELOPMENT_ONLY_DIAGNOSTICS must be false for any production build.
- public static final boolean USES_DEVELOPMENT_ONLY_DIAGNOSTICS_DEBUG = false;
-
public static final boolean IS_HARDWARE_KEYBOARD_SUPPORTED = false;
// When true, enable {@link InputMethodService#onUpdateCursor} callback with
diff --git a/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java b/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java
index 7536ff94c..4fac5ed2d 100644
--- a/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java
+++ b/java/src/com/android/inputmethod/latin/inputlogic/InputLogic.java
@@ -32,7 +32,7 @@ import com.android.inputmethod.event.InputTransaction;
import com.android.inputmethod.keyboard.KeyboardSwitcher;
import com.android.inputmethod.latin.Constants;
import com.android.inputmethod.latin.Dictionary;
-import com.android.inputmethod.latin.DictionaryFacilitatorForSuggest;
+import com.android.inputmethod.latin.DictionaryFacilitator;
import com.android.inputmethod.latin.InputPointers;
import com.android.inputmethod.latin.LastComposedWord;
import com.android.inputmethod.latin.LatinIME;
@@ -44,18 +44,14 @@ import com.android.inputmethod.latin.Suggest.OnGetSuggestedWordsCallback;
import com.android.inputmethod.latin.SuggestedWords;
import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
import com.android.inputmethod.latin.WordComposer;
-import com.android.inputmethod.latin.define.ProductionFlag;
import com.android.inputmethod.latin.settings.SettingsValues;
import com.android.inputmethod.latin.settings.SpacingAndPunctuations;
import com.android.inputmethod.latin.suggestions.SuggestionStripViewAccessor;
import com.android.inputmethod.latin.utils.AsyncResultHolder;
-import com.android.inputmethod.latin.utils.CollectionUtils;
import com.android.inputmethod.latin.utils.InputTypeUtils;
-import com.android.inputmethod.latin.utils.LatinImeLoggerUtils;
import com.android.inputmethod.latin.utils.RecapitalizeStatus;
import com.android.inputmethod.latin.utils.StringUtils;
import com.android.inputmethod.latin.utils.TextRange;
-import com.android.inputmethod.research.ResearchLogger;
import java.util.ArrayList;
import java.util.TreeSet;
@@ -79,7 +75,8 @@ public final class InputLogic {
private int mSpaceState;
// Never null
public SuggestedWords mSuggestedWords = SuggestedWords.EMPTY;
- public final Suggest mSuggest = new Suggest();
+ public final Suggest mSuggest;
+ private final DictionaryFacilitator mDictionaryFacilitator;
public LastComposedWord mLastComposedWord = LastComposedWord.NOT_A_COMPOSED_WORD;
public final WordComposer mWordComposer;
@@ -88,7 +85,7 @@ public final class InputLogic {
private int mDeleteCount;
private long mLastKeyTime;
- public final TreeSet<Long> mCurrentlyPressedHardwareKeys = CollectionUtils.newTreeSet();
+ public final TreeSet<Long> mCurrentlyPressedHardwareKeys = new TreeSet<>();
// Keeps track of most recently inserted text (multi-character key) for reverting
private String mEnteredText;
@@ -102,14 +99,19 @@ public final class InputLogic {
* Create a new instance of the input logic.
* @param latinIME the instance of the parent LatinIME. We should remove this when we can.
* @param suggestionStripViewAccessor an object to access the suggestion strip view.
+ * @param dictionaryFacilitator facilitator for getting suggestions and updating user history
+ * dictionary.
*/
public InputLogic(final LatinIME latinIME,
- final SuggestionStripViewAccessor suggestionStripViewAccessor) {
+ final SuggestionStripViewAccessor suggestionStripViewAccessor,
+ final DictionaryFacilitator dictionaryFacilitator) {
mLatinIME = latinIME;
mSuggestionStripViewAccessor = suggestionStripViewAccessor;
mWordComposer = new WordComposer();
mConnection = new RichInputConnection(latinIME);
mInputLogicHandler = InputLogicHandler.NULL_HANDLER;
+ mSuggest = new Suggest(dictionaryFacilitator);
+ mDictionaryFacilitator = dictionaryFacilitator;
}
/**
@@ -173,7 +175,7 @@ public final class InputLogic {
final InputLogicHandler inputLogicHandler = mInputLogicHandler;
mInputLogicHandler = InputLogicHandler.NULL_HANDLER;
inputLogicHandler.destroy();
- mSuggest.mDictionaryFacilitator.closeDictionaries();
+ mDictionaryFacilitator.closeDictionaries();
}
/**
@@ -196,19 +198,11 @@ public final class InputLogic {
resetComposingState(true /* alsoResetLastComposedWord */);
}
handler.postUpdateSuggestionStrip();
- if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS
- && ResearchLogger.RESEARCH_KEY_OUTPUT_TEXT.equals(rawText)) {
- ResearchLogger.getInstance().onResearchKeySelected(mLatinIME);
- return;
- }
final String text = performSpecificTldProcessingOnTextInput(rawText);
if (SpaceState.PHANTOM == mSpaceState) {
promotePhantomSpace(settingsValues);
}
mConnection.commitText(text, 1);
- if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
- ResearchLogger.latinIME_onTextInput(text, false /* isBatchMode */);
- }
mConnection.endBatchEdit();
// Space state must be updated before calling updateShiftState
mSpaceState = SpaceState.NONE;
@@ -235,14 +229,8 @@ public final class InputLogic {
// If this is a punctuation picked from the suggestion strip, pass it to onCodeInput
if (suggestion.length() == 1 && suggestedWords.isPunctuationSuggestions()) {
// Word separators are suggested before the user inputs something.
- // So, LatinImeLogger logs "" as a user's input.
- LatinImeLogger.logOnManualSuggestion("", suggestion, index, suggestedWords);
// Rely on onCodeInput to do the complicated swapping/stripping logic consistently.
final Event event = Event.createPunctuationSuggestionPickedEvent(suggestionInfo);
- if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
- ResearchLogger.latinIME_punctuationSuggestion(index, suggestion,
- false /* isBatchMode */, suggestedWords.mIsPrediction);
- }
return onCodeInput(settingsValues, event, keyboardShiftState, handler);
}
@@ -265,7 +253,7 @@ public final class InputLogic {
// code path as for other kinds, use commitChosenWord, and do everything normally. We will
// however need to reset the suggestion strip right away, because we know we can't take
// the risk of calling commitCompletion twice because we don't know how the app will react.
- if (SuggestedWordInfo.KIND_APP_DEFINED == suggestionInfo.mKind) {
+ if (suggestionInfo.isKindOf(SuggestedWordInfo.KIND_APP_DEFINED)) {
mSuggestedWords = SuggestedWords.EMPTY;
mSuggestionStripViewAccessor.setNeutralSuggestionStrip();
inputTransaction.requireShiftUpdate(InputTransaction.SHIFT_UPDATE_NOW);
@@ -278,14 +266,8 @@ public final class InputLogic {
// We need to log before we commit, because the word composer will store away the user
// typed word.
final String replacedWord = mWordComposer.getTypedWord();
- LatinImeLogger.logOnManualSuggestion(replacedWord, suggestion, index, suggestedWords);
commitChosenWord(settingsValues, suggestion,
LastComposedWord.COMMIT_TYPE_MANUAL_PICK, LastComposedWord.NOT_A_SEPARATOR);
- if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
- ResearchLogger.latinIME_pickSuggestionManually(replacedWord, index, suggestion,
- mWordComposer.isBatchMode(), suggestionInfo.mScore,
- suggestionInfo.mKind, suggestionInfo.mSourceDict.mDictType);
- }
mConnection.endBatchEdit();
// Don't allow cancellation of manual pick
mLastComposedWord.deactivate();
@@ -295,18 +277,12 @@ public final class InputLogic {
// We should show the "Touch again to save" hint if the user pressed the first entry
// AND it's in none of our current dictionaries (main, user or otherwise).
- final DictionaryFacilitatorForSuggest dictionaryFacilitator =
- mSuggest.mDictionaryFacilitator;
final boolean showingAddToDictionaryHint =
- (SuggestedWordInfo.KIND_TYPED == suggestionInfo.mKind
- || SuggestedWordInfo.KIND_OOV_CORRECTION == suggestionInfo.mKind)
- && !dictionaryFacilitator.isValidWord(suggestion, true /* ignoreCase */);
+ (suggestionInfo.isKindOf(SuggestedWordInfo.KIND_TYPED)
+ || suggestionInfo.isKindOf(SuggestedWordInfo.KIND_OOV_CORRECTION))
+ && !mDictionaryFacilitator.isValidWord(suggestion, true /* ignoreCase */);
- if (settingsValues.mIsInternal) {
- LatinImeLoggerUtils.onSeparator((char)Constants.CODE_SPACE,
- Constants.NOT_A_COORDINATE, Constants.NOT_A_COORDINATE);
- }
- if (showingAddToDictionaryHint && dictionaryFacilitator.isUserDictionaryEnabled()) {
+ if (showingAddToDictionaryHint && mDictionaryFacilitator.isUserDictionaryEnabled()) {
mSuggestionStripViewAccessor.showAddToDictionaryHint(suggestion);
} else {
// If we're not showing the "Touch again to save", then update the suggestion strip.
@@ -400,9 +376,6 @@ public final class InputLogic {
final InputTransaction inputTransaction = new InputTransaction(settingsValues, event,
SystemClock.uptimeMillis(), mSpaceState,
getActualCapsMode(settingsValues, keyboardShiftMode));
- if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
- ResearchLogger.latinIME_onCodeInput(code, event.mX, event.mY);
- }
if (event.mKeyCode != Constants.CODE_DELETE
|| inputTransaction.mTimestamp > mLastKeyTime + Constants.LONG_PRESS_MILLISECONDS) {
mDeleteCount = 0;
@@ -424,7 +397,6 @@ public final class InputLogic {
switch (event.mKeyCode) {
case Constants.CODE_DELETE:
handleBackspace(inputTransaction);
- LatinImeLogger.logOnDelete(event.mX, event.mY);
break;
case Constants.CODE_SHIFT:
performRecapitalization(inputTransaction.mSettingsValues);
@@ -530,12 +502,6 @@ public final class InputLogic {
++mAutoCommitSequenceNumber;
mConnection.beginBatchEdit();
if (mWordComposer.isComposingWord()) {
- if (settingsValues.mIsInternal) {
- if (mWordComposer.isBatchMode()) {
- LatinImeLoggerUtils.onAutoCorrection("", mWordComposer.getTypedWord(), " ",
- mWordComposer);
- }
- }
if (mWordComposer.isCursorFrontOrMiddleOfComposingWord()) {
// If we are in the middle of a recorrection, we need to commit the recorrection
// first so that we can insert the batch input at the current cursor position.
@@ -675,19 +641,9 @@ public final class InputLogic {
|| Character.getType(codePoint) == Character.OTHER_SYMBOL) {
didAutoCorrect = handleSeparator(inputTransaction,
inputTransaction.mEvent.isSuggestionStripPress(), handler);
- if (inputTransaction.mSettingsValues.mIsInternal) {
- LatinImeLoggerUtils.onSeparator((char)codePoint,
- inputTransaction.mEvent.mX, inputTransaction.mEvent.mY);
- }
} else {
didAutoCorrect = false;
if (SpaceState.PHANTOM == inputTransaction.mSpaceState) {
- if (inputTransaction.mSettingsValues.mIsInternal) {
- if (mWordComposer.isComposingWord() && mWordComposer.isBatchMode()) {
- LatinImeLoggerUtils.onAutoCorrection("", mWordComposer.getTypedWord(), " ",
- mWordComposer);
- }
- }
if (mWordComposer.isCursorFrontOrMiddleOfComposingWord()) {
// If we are in the middle of a recorrection, we need to commit the recorrection
// first so that we can insert the character at the current cursor position.
@@ -786,10 +742,6 @@ public final class InputLogic {
mSuggestionStripViewAccessor.dismissAddToDictionaryHint();
}
inputTransaction.setRequiresUpdateSuggestions();
- if (settingsValues.mIsInternal) {
- LatinImeLoggerUtils.onNonSeparator((char)codePoint, inputTransaction.mEvent.mX,
- inputTransaction.mEvent.mY);
- }
}
/**
@@ -852,9 +804,6 @@ public final class InputLogic {
if (needsPrecedingSpace) {
promotePhantomSpace(settingsValues);
}
- if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
- ResearchLogger.latinIME_handleSeparator(codePoint, wasComposingWord);
- }
if (!shouldAvoidSendingCode) {
sendKeyCodePoint(settingsValues, codePoint);
@@ -863,6 +812,7 @@ public final class InputLogic {
if (Constants.CODE_SPACE == codePoint) {
if (maybeDoubleSpacePeriod(inputTransaction)) {
inputTransaction.requireShiftUpdate(InputTransaction.SHIFT_UPDATE_NOW);
+ inputTransaction.setRequiresUpdateSuggestions();
mSpaceState = SpaceState.DOUBLE;
} else if (!mSuggestedWords.isPunctuationSuggestions()) {
mSpaceState = SpaceState.WEAK;
@@ -932,10 +882,6 @@ public final class InputLogic {
}
if (mWordComposer.isComposingWord()) {
if (mWordComposer.isBatchMode()) {
- if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
- final String word = mWordComposer.getTypedWord();
- ResearchLogger.latinIME_handleBackspace_batch(word, 1);
- }
final String rejectedSuggestion = mWordComposer.getTypedWord();
mWordComposer.reset();
mWordComposer.setRejectedBatchModeSuggestion(rejectedSuggestion);
@@ -950,9 +896,6 @@ public final class InputLogic {
inputTransaction.setRequiresUpdateSuggestions();
} else {
if (mLastComposedWord.canRevertCommit()) {
- if (inputTransaction.mSettingsValues.mIsInternal) {
- LatinImeLoggerUtils.onAutoCorrectionCancellation();
- }
revertCommit(inputTransaction);
return;
}
@@ -961,9 +904,6 @@ public final class InputLogic {
// This is triggered on backspace after a key that inputs multiple characters,
// like the smiley key or the .com key.
mConnection.deleteSurroundingText(mEnteredText.length(), 0);
- if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
- ResearchLogger.latinIME_handleBackspace_cancelTextInput(mEnteredText);
- }
mEnteredText = null;
// If we have mEnteredText, then we know that mHasUncommittedTypedChars == false.
// In addition we know that spaceState is false, and that we should not be
@@ -975,6 +915,11 @@ public final class InputLogic {
if (mConnection.revertDoubleSpacePeriod()) {
// No need to reset mSpaceState, it has already be done (that's why we
// receive it as a parameter)
+ inputTransaction.setRequiresUpdateSuggestions();
+ mWordComposer.setCapitalizedModeAndPreviousWordAtStartComposingTime(
+ WordComposer.CAPS_MODE_OFF,
+ getPrevWordsInfoFromNthPreviousWordForSuggestion(
+ inputTransaction.mSettingsValues.mSpacingAndPunctuations, 1));
return;
}
} else if (SpaceState.SWAP_PUNCTUATION == inputTransaction.mSpaceState) {
@@ -993,10 +938,6 @@ public final class InputLogic {
mConnection.setSelection(mConnection.getExpectedSelectionEnd(),
mConnection.getExpectedSelectionEnd());
mConnection.deleteSurroundingText(numCharsDeleted, 0);
- if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
- ResearchLogger.latinIME_handleBackspace(numCharsDeleted,
- false /* shouldUncommitLogUnit */);
- }
} else {
// There is no selection, just delete one character.
if (Constants.NOT_A_CURSOR_POSITION == mConnection.getExpectedSelectionEnd()) {
@@ -1031,10 +972,6 @@ public final class InputLogic {
final int lengthToDelete =
Character.isSupplementaryCodePoint(codePointBeforeCursor) ? 2 : 1;
mConnection.deleteSurroundingText(lengthToDelete, 0);
- if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
- ResearchLogger.latinIME_handleBackspace(lengthToDelete,
- true /* shouldUncommitLogUnit */);
- }
if (mDeleteCount > Constants.DELETE_ACCELERATE_AT) {
final int codePointBeforeCursorToDeleteAgain =
mConnection.getCodePointBeforeCursor();
@@ -1042,15 +979,12 @@ public final class InputLogic {
final int lengthToDeleteAgain = Character.isSupplementaryCodePoint(
codePointBeforeCursorToDeleteAgain) ? 2 : 1;
mConnection.deleteSurroundingText(lengthToDeleteAgain, 0);
- if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
- ResearchLogger.latinIME_handleBackspace(lengthToDeleteAgain,
- true /* shouldUncommitLogUnit */);
- }
}
}
}
}
- if (inputTransaction.mSettingsValues.isSuggestionStripVisible()
+ if (inputTransaction.mSettingsValues
+ .isCurrentOrientationAllowingSuggestionsPerUserSettings()
&& inputTransaction.mSettingsValues.mSpacingAndPunctuations
.mCurrentLanguageHasSpaces
&& !mConnection.isCursorFollowedByWordCharacter(
@@ -1082,9 +1016,6 @@ public final class InputLogic {
mConnection.deleteSurroundingText(2, 0);
final String text = lastTwo.charAt(1) + " ";
mConnection.commitText(text, 1);
- if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
- ResearchLogger.latinIME_swapSwapperAndSpace(lastTwo, text);
- }
inputTransaction.requireShiftUpdate(InputTransaction.SHIFT_UPDATE_NOW);
}
}
@@ -1168,10 +1099,6 @@ public final class InputLogic {
final String textToInsert = inputTransaction.mSettingsValues.mSpacingAndPunctuations
.mSentenceSeparatorAndSpace;
mConnection.commitText(textToInsert, 1);
- if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
- ResearchLogger.latinIME_maybeDoubleSpacePeriod(textToInsert,
- false /* isBatchMode */);
- }
mWordComposer.discardPreviousWordForSuggestion();
return true;
}
@@ -1250,7 +1177,7 @@ public final class InputLogic {
mWordComposer.wasAutoCapitalized() && !mWordComposer.isMostlyCaps();
final int timeStampInSeconds = (int)TimeUnit.MILLISECONDS.toSeconds(
System.currentTimeMillis());
- mSuggest.mDictionaryFacilitator.addToUserHistory(suggestion, wasAutoCapitalized,
+ mDictionaryFacilitator.addToUserHistory(suggestion, wasAutoCapitalized,
prevWordsInfo, timeStampInSeconds, settingsValues.mBlockPotentiallyOffensive);
}
@@ -1269,7 +1196,7 @@ public final class InputLogic {
return;
}
- final AsyncResultHolder<SuggestedWords> holder = new AsyncResultHolder<SuggestedWords>();
+ final AsyncResultHolder<SuggestedWords> holder = new AsyncResultHolder<>();
mInputLogicHandler.getSuggestedWords(Suggest.SESSION_TYPING,
SuggestedWords.NOT_A_SEQUENCE_NUMBER, new OnGetSuggestedWordsCallback() {
@Override
@@ -1349,7 +1276,7 @@ public final class InputLogic {
// we just do not resume because it's safer.
final int numberOfCharsInWordBeforeCursor = range.getNumberOfCharsInWordBeforeCursor();
if (numberOfCharsInWordBeforeCursor > expectedCursorPosition) return;
- final ArrayList<SuggestedWordInfo> suggestions = CollectionUtils.newArrayList();
+ final ArrayList<SuggestedWordInfo> suggestions = new ArrayList<>();
final String typedWord = range.mWord.toString();
if (includeResumedWordInSuggestions) {
suggestions.add(new SuggestedWordInfo(typedWord,
@@ -1462,8 +1389,7 @@ public final class InputLogic {
}
mConnection.deleteSurroundingText(deleteLength, 0);
if (!TextUtils.isEmpty(prevWordsInfo.mPrevWord) && !TextUtils.isEmpty(committedWord)) {
- mSuggest.mDictionaryFacilitator.cancelAddingUserHistory(
- prevWordsInfo, committedWordString);
+ mDictionaryFacilitator.cancelAddingUserHistory(prevWordsInfo, committedWordString);
}
final String stringToCommit = originallyTypedWord + mLastComposedWord.mSeparatorString;
final SpannableString textToCommit = new SpannableString(stringToCommit);
@@ -1473,7 +1399,7 @@ public final class InputLogic {
committedWord.length(), Object.class);
final int lastCharIndex = textToCommit.length() - 1;
// We will collect all suggestions in the following array.
- final ArrayList<String> suggestions = CollectionUtils.newArrayList();
+ final ArrayList<String> suggestions = new ArrayList<>();
// First, add the committed word to the list of suggestions.
suggestions.add(committedWordString);
for (final Object span : spans) {
@@ -1515,17 +1441,7 @@ public final class InputLogic {
mLatinIME.getCoordinatesForCurrentKeyboard(codePoints), prevWordsInfo);
mConnection.setComposingText(textToCommit, 1);
}
- if (inputTransaction.mSettingsValues.mIsInternal) {
- LatinImeLoggerUtils.onSeparator(mLastComposedWord.mSeparatorString,
- Constants.NOT_A_COORDINATE, Constants.NOT_A_COORDINATE);
- }
- if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
- ResearchLogger.latinIME_revertCommit(committedWord.toString(),
- originallyTypedWord.toString(),
- mWordComposer.isBatchMode(), mLastComposedWord.mSeparatorString);
- }
- // Don't restart suggestion yet. We'll restart if the user deletes the
- // separator.
+ // Don't restart suggestion yet. We'll restart if the user deletes the separator.
mLastComposedWord = LastComposedWord.NOT_A_COMPOSED_WORD;
// We have a separator between the word and the cursor: we should show predictions.
inputTransaction.setRequiresUpdateSuggestions();
@@ -1609,8 +1525,9 @@ public final class InputLogic {
return mConnection.getPrevWordsInfoFromNthPreviousWord(
spacingAndPunctuations, nthPreviousWord);
} else {
- return LastComposedWord.NOT_A_COMPOSED_WORD == mLastComposedWord ? new PrevWordsInfo()
- : new PrevWordsInfo(mLastComposedWord.mCommittedWord.toString());
+ return LastComposedWord.NOT_A_COMPOSED_WORD == mLastComposedWord ?
+ PrevWordsInfo.BEGINNING_OF_SENTENCE :
+ new PrevWordsInfo(mLastComposedWord.mCommittedWord.toString());
}
}
@@ -1788,9 +1705,6 @@ public final class InputLogic {
*/
// TODO: replace these two parameters with an InputTransaction
private void sendKeyCodePoint(final SettingsValues settingsValues, final int codePoint) {
- if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
- ResearchLogger.latinIME_sendKeyCodePoint(codePoint);
- }
// TODO: Remove this special handling of digit letters.
// For backward compatibility. See {@link InputMethodService#sendKeyChar(char)}.
if (codePoint >= '0' && codePoint <= '9') {
@@ -1822,9 +1736,6 @@ public final class InputLogic {
if (settingsValues.shouldInsertSpacesAutomatically()
&& settingsValues.mSpacingAndPunctuations.mCurrentLanguageHasSpaces
&& !mConnection.textBeforeCursorLooksLikeURL()) {
- if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
- ResearchLogger.latinIME_promotePhantomSpace();
- }
sendKeyCodePoint(settingsValues, Constants.CODE_SPACE);
}
}
@@ -1866,9 +1777,6 @@ public final class InputLogic {
mConnection.setComposingText(batchInputText, 1);
}
mConnection.endBatchEdit();
- if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
- ResearchLogger.latinIME_onEndBatchInput(batchInputText, 0, suggestedWords);
- }
// Space state must be updated before calling updateShiftState
mSpaceState = SpaceState.PHANTOM;
keyboardSwitcher.requestUpdatingShiftState(getCurrentAutoCapsState(settingsValues),
@@ -1895,9 +1803,6 @@ public final class InputLogic {
if (!mWordComposer.isComposingWord()) return;
final String typedWord = mWordComposer.getTypedWord();
if (typedWord.length() > 0) {
- if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
- ResearchLogger.getInstance().onWordFinished(typedWord, mWordComposer.isBatchMode());
- }
commitChosenWord(settingsValues, typedWord,
LastComposedWord.COMMIT_TYPE_USER_TYPED_WORD, separatorString);
}
@@ -1937,15 +1842,6 @@ public final class InputLogic {
throw new RuntimeException("We have an auto-correction but the typed word "
+ "is empty? Impossible! I must commit suicide.");
}
- if (settingsValues.mIsInternal) {
- LatinImeLoggerUtils.onAutoCorrection(
- typedWord, autoCorrection, separator, mWordComposer);
- }
- if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
- final SuggestedWords suggestedWords = mSuggestedWords;
- ResearchLogger.latinIme_commitCurrentAutoCorrection(typedWord, autoCorrection,
- separator, mWordComposer.isBatchMode(), suggestedWords);
- }
commitChosenWord(settingsValues, autoCorrection,
LastComposedWord.COMMIT_TYPE_DECIDED_WORD, separator);
if (!typedWord.equals(autoCorrection)) {
diff --git a/java/src/com/android/inputmethod/latin/makedict/FormatSpec.java b/java/src/com/android/inputmethod/latin/makedict/FormatSpec.java
index f5f072b7a..a2ae74b20 100644
--- a/java/src/com/android/inputmethod/latin/makedict/FormatSpec.java
+++ b/java/src/com/android/inputmethod/latin/makedict/FormatSpec.java
@@ -192,8 +192,9 @@ public final class FormatSpec {
public static final int VERSION2 = 2;
// Dictionary version used for testing.
public static final int VERSION4_ONLY_FOR_TESTING = 399;
- public static final int VERSION4 = 401;
- public static final int VERSION4_DEV = 402;
+ public static final int VERSION401 = 401;
+ public static final int VERSION4 = 402;
+ public static final int VERSION4_DEV = 403;
static final int MINIMUM_SUPPORTED_VERSION = VERSION2;
static final int MAXIMUM_SUPPORTED_VERSION = VERSION4_DEV;
diff --git a/java/src/com/android/inputmethod/latin/makedict/WordProperty.java b/java/src/com/android/inputmethod/latin/makedict/WordProperty.java
index 853392200..31cb59756 100644
--- a/java/src/com/android/inputmethod/latin/makedict/WordProperty.java
+++ b/java/src/com/android/inputmethod/latin/makedict/WordProperty.java
@@ -18,7 +18,6 @@ package com.android.inputmethod.latin.makedict;
import com.android.inputmethod.annotations.UsedForTesting;
import com.android.inputmethod.latin.BinaryDictionary;
-import com.android.inputmethod.latin.utils.CollectionUtils;
import com.android.inputmethod.latin.utils.CombinedFormatUtils;
import com.android.inputmethod.latin.utils.StringUtils;
@@ -35,6 +34,8 @@ public final class WordProperty implements Comparable<WordProperty> {
public final ProbabilityInfo mProbabilityInfo;
public final ArrayList<WeightedString> mShortcutTargets;
public final ArrayList<WeightedString> mBigrams;
+ // TODO: Support mIsBeginningOfSentence.
+ public final boolean mIsBeginningOfSentence;
public final boolean mIsNotAWord;
public final boolean mIsBlacklistEntry;
public final boolean mHasShortcuts;
@@ -51,6 +52,7 @@ public final class WordProperty implements Comparable<WordProperty> {
mProbabilityInfo = probabilityInfo;
mShortcutTargets = shortcutTargets;
mBigrams = bigrams;
+ mIsBeginningOfSentence = false;
mIsNotAWord = isNotAWord;
mIsBlacklistEntry = isBlacklistEntry;
mHasBigrams = bigrams != null && !bigrams.isEmpty();
@@ -75,8 +77,9 @@ public final class WordProperty implements Comparable<WordProperty> {
final ArrayList<Integer> shortcutProbabilities) {
mWord = StringUtils.getStringFromNullTerminatedCodePointArray(codePoints);
mProbabilityInfo = createProbabilityInfoFromArray(probabilityInfo);
- mShortcutTargets = CollectionUtils.newArrayList();
- mBigrams = CollectionUtils.newArrayList();
+ mShortcutTargets = new ArrayList<>();
+ mBigrams = new ArrayList<>();
+ mIsBeginningOfSentence = false;
mIsNotAWord = isNotAWord;
mIsBlacklistEntry = isBlacklisted;
mHasShortcuts = hasShortcuts;
diff --git a/java/src/com/android/inputmethod/latin/personalization/AccountUtils.java b/java/src/com/android/inputmethod/latin/personalization/AccountUtils.java
index a446672cb..ab3ef964e 100644
--- a/java/src/com/android/inputmethod/latin/personalization/AccountUtils.java
+++ b/java/src/com/android/inputmethod/latin/personalization/AccountUtils.java
@@ -35,7 +35,7 @@ public class AccountUtils {
}
public static List<String> getDeviceAccountsEmailAddresses(final Context context) {
- final ArrayList<String> retval = new ArrayList<String>();
+ final ArrayList<String> retval = new ArrayList<>();
for (final Account account : getAccounts(context)) {
final String name = account.name;
if (Patterns.EMAIL_ADDRESS.matcher(name).matches()) {
@@ -54,7 +54,7 @@ public class AccountUtils {
*/
public static List<String> getDeviceAccountsWithDomain(
final Context context, final String domain) {
- final ArrayList<String> retval = new ArrayList<String>();
+ final ArrayList<String> retval = new ArrayList<>();
final String atDomain = "@" + domain.toLowerCase(Locale.ROOT);
for (final Account account : getAccounts(context)) {
if (account.name.toLowerCase(Locale.ROOT).endsWith(atDomain)) {
diff --git a/java/src/com/android/inputmethod/latin/personalization/DecayingExpandableBinaryDictionaryBase.java b/java/src/com/android/inputmethod/latin/personalization/DecayingExpandableBinaryDictionaryBase.java
index 06bdba054..be658ceff 100644
--- a/java/src/com/android/inputmethod/latin/personalization/DecayingExpandableBinaryDictionaryBase.java
+++ b/java/src/com/android/inputmethod/latin/personalization/DecayingExpandableBinaryDictionaryBase.java
@@ -31,7 +31,6 @@ import java.util.Map;
* model.
*/
public abstract class DecayingExpandableBinaryDictionaryBase extends ExpandableBinaryDictionary {
- private static final String TAG = DecayingExpandableBinaryDictionaryBase.class.getSimpleName();
private static final boolean DBG_DUMP_ON_CLOSE = false;
/** Any pair being typed or picked */
diff --git a/java/src/com/android/inputmethod/latin/personalization/PersonalizationDataChunk.java b/java/src/com/android/inputmethod/latin/personalization/PersonalizationDataChunk.java
new file mode 100644
index 000000000..9d72de8c5
--- /dev/null
+++ b/java/src/com/android/inputmethod/latin/personalization/PersonalizationDataChunk.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.inputmethod.latin.personalization;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Locale;
+
+public class PersonalizationDataChunk {
+ public final boolean mInputByUser;
+ public final List<String> mTokens;
+ public final int mTimestampInSeconds;
+ public final String mPackageName;
+ public final Locale mlocale = null;
+
+ public PersonalizationDataChunk(boolean inputByUser, final List<String> tokens,
+ final int timestampInSeconds, final String packageName) {
+ mInputByUser = inputByUser;
+ mTokens = Collections.unmodifiableList(tokens);
+ mTimestampInSeconds = timestampInSeconds;
+ mPackageName = packageName;
+ }
+}
diff --git a/java/src/com/android/inputmethod/latin/personalization/PersonalizationDictionarySessionRegistrar.java b/java/src/com/android/inputmethod/latin/personalization/PersonalizationDictionarySessionRegistrar.java
index 9bef7a198..450644032 100644
--- a/java/src/com/android/inputmethod/latin/personalization/PersonalizationDictionarySessionRegistrar.java
+++ b/java/src/com/android/inputmethod/latin/personalization/PersonalizationDictionarySessionRegistrar.java
@@ -19,18 +19,15 @@ package com.android.inputmethod.latin.personalization;
import android.content.Context;
import android.content.res.Configuration;
-import com.android.inputmethod.latin.DictionaryFacilitatorForSuggest;
-import com.android.inputmethod.latin.utils.DistracterFilter;
+import com.android.inputmethod.latin.DictionaryFacilitator;
public class PersonalizationDictionarySessionRegistrar {
public static void init(final Context context,
- final DictionaryFacilitatorForSuggest dictionaryFacilitator,
- final DistracterFilter distracterFilter) {
+ final DictionaryFacilitator dictionaryFacilitator) {
}
public static void onConfigurationChanged(final Context context, final Configuration conf,
- final DictionaryFacilitatorForSuggest dictionaryFacilitator,
- final DistracterFilter distracterFilter) {
+ final DictionaryFacilitator dictionaryFacilitator) {
}
public static void onUpdateData(final Context context, final String type) {
diff --git a/java/src/com/android/inputmethod/latin/personalization/PersonalizationHelper.java b/java/src/com/android/inputmethod/latin/personalization/PersonalizationHelper.java
index 6ef505e76..aac40940b 100644
--- a/java/src/com/android/inputmethod/latin/personalization/PersonalizationHelper.java
+++ b/java/src/com/android/inputmethod/latin/personalization/PersonalizationHelper.java
@@ -16,12 +16,11 @@
package com.android.inputmethod.latin.personalization;
-import com.android.inputmethod.latin.utils.CollectionUtils;
-import com.android.inputmethod.latin.utils.FileUtils;
-
import android.content.Context;
import android.util.Log;
+import com.android.inputmethod.latin.utils.FileUtils;
+
import java.io.File;
import java.io.FilenameFilter;
import java.lang.ref.SoftReference;
@@ -33,9 +32,9 @@ public class PersonalizationHelper {
private static final String TAG = PersonalizationHelper.class.getSimpleName();
private static final boolean DEBUG = false;
private static final ConcurrentHashMap<String, SoftReference<UserHistoryDictionary>>
- sLangUserHistoryDictCache = CollectionUtils.newConcurrentHashMap();
+ sLangUserHistoryDictCache = new ConcurrentHashMap<>();
private static final ConcurrentHashMap<String, SoftReference<PersonalizationDictionary>>
- sLangPersonalizationDictCache = CollectionUtils.newConcurrentHashMap();
+ sLangPersonalizationDictCache = new ConcurrentHashMap<>();
public static UserHistoryDictionary getUserHistoryDictionary(
final Context context, final Locale locale) {
@@ -54,8 +53,7 @@ public class PersonalizationHelper {
}
}
final UserHistoryDictionary dict = new UserHistoryDictionary(context, locale);
- sLangUserHistoryDictCache.put(localeStr,
- new SoftReference<UserHistoryDictionary>(dict));
+ sLangUserHistoryDictCache.put(localeStr, new SoftReference<>(dict));
return dict;
}
}
@@ -108,8 +106,7 @@ public class PersonalizationHelper {
}
}
final PersonalizationDictionary dict = new PersonalizationDictionary(context, locale);
- sLangPersonalizationDictCache.put(
- localeStr, new SoftReference<PersonalizationDictionary>(dict));
+ sLangPersonalizationDictCache.put(localeStr, new SoftReference<>(dict));
return dict;
}
}
diff --git a/java/src/com/android/inputmethod/latin/personalization/UserHistoryDictionary.java b/java/src/com/android/inputmethod/latin/personalization/UserHistoryDictionary.java
index f89caf921..67ad54fb7 100644
--- a/java/src/com/android/inputmethod/latin/personalization/UserHistoryDictionary.java
+++ b/java/src/com/android/inputmethod/latin/personalization/UserHistoryDictionary.java
@@ -23,6 +23,7 @@ import com.android.inputmethod.latin.Constants;
import com.android.inputmethod.latin.Dictionary;
import com.android.inputmethod.latin.ExpandableBinaryDictionary;
import com.android.inputmethod.latin.PrevWordsInfo;
+import com.android.inputmethod.latin.utils.DistracterFilter;
import java.io.File;
import java.util.Locale;
@@ -60,10 +61,11 @@ public class UserHistoryDictionary extends DecayingExpandableBinaryDictionaryBas
* @param word the word the user inputted
* @param isValid whether the word is valid or not
* @param timestamp the timestamp when the word has been inputted
+ * @param distracterFilter the filter to check whether the word is a distracter
*/
public static void addToDictionary(final ExpandableBinaryDictionary userHistoryDictionary,
final PrevWordsInfo prevWordsInfo, final String word, final boolean isValid,
- final int timestamp) {
+ final int timestamp, final DistracterFilter distracterFilter) {
final String prevWord = prevWordsInfo.mPrevWord;
if (word.length() >= Constants.DICTIONARY_MAX_WORD_LENGTH ||
(prevWord != null && prevWord.length() >= Constants.DICTIONARY_MAX_WORD_LENGTH)) {
@@ -71,8 +73,9 @@ public class UserHistoryDictionary extends DecayingExpandableBinaryDictionaryBas
}
final int frequency = isValid ?
FREQUENCY_FOR_WORDS_IN_DICTS : FREQUENCY_FOR_WORDS_NOT_IN_DICTS;
- userHistoryDictionary.addUnigramEntry(word, frequency, null /* shortcutTarget */,
- 0 /* shortcutFreq */, false /* isNotAWord */, false /* isBlacklisted */, timestamp);
+ userHistoryDictionary.addUnigramEntryWithCheckingDistracter(word, frequency,
+ null /* shortcutTarget */, 0 /* shortcutFreq */, false /* isNotAWord */,
+ false /* isBlacklisted */, timestamp, distracterFilter);
// Do not insert a word as a bigram of itself
if (word.equals(prevWord)) {
return;
diff --git a/java/src/com/android/inputmethod/latin/settings/AdditionalSubtypeSettings.java b/java/src/com/android/inputmethod/latin/settings/AdditionalSubtypeSettings.java
index 39977e76f..31fa86774 100644
--- a/java/src/com/android/inputmethod/latin/settings/AdditionalSubtypeSettings.java
+++ b/java/src/com/android/inputmethod/latin/settings/AdditionalSubtypeSettings.java
@@ -47,7 +47,6 @@ import com.android.inputmethod.latin.Constants;
import com.android.inputmethod.latin.R;
import com.android.inputmethod.latin.RichInputMethodManager;
import com.android.inputmethod.latin.utils.AdditionalSubtypeUtils;
-import com.android.inputmethod.latin.utils.CollectionUtils;
import com.android.inputmethod.latin.utils.DialogUtils;
import com.android.inputmethod.latin.utils.IntentUtils;
import com.android.inputmethod.latin.utils.SubtypeLocaleUtils;
@@ -101,7 +100,7 @@ public final class AdditionalSubtypeSettings extends PreferenceFragment {
super(context, android.R.layout.simple_spinner_item);
setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
- final TreeSet<SubtypeLocaleItem> items = CollectionUtils.newTreeSet();
+ final TreeSet<SubtypeLocaleItem> items = new TreeSet<>();
final InputMethodInfo imi = RichInputMethodManager.getInstance()
.getInputMethodInfoOfThisIme();
final int count = imi.getSubtypeCount();
@@ -369,7 +368,6 @@ public final class AdditionalSubtypeSettings extends PreferenceFragment {
mSubtype = (InputMethodSubtype)source.readParcelable(null);
}
- @SuppressWarnings("hiding")
public static final Parcelable.Creator<SavedState> CREATOR =
new Parcelable.Creator<SavedState>() {
@Override
@@ -516,8 +514,7 @@ public final class AdditionalSubtypeSettings extends PreferenceFragment {
localeString, keyboardLayoutSetName);
}
- private AlertDialog createDialog(
- @SuppressWarnings("unused") final SubtypePreference subtypePref) {
+ private AlertDialog createDialog(final SubtypePreference subtypePref) {
final AlertDialog.Builder builder = new AlertDialog.Builder(
DialogUtils.getPlatformDialogThemeContext(getActivity()));
builder.setTitle(R.string.custom_input_styles_title)
@@ -555,7 +552,7 @@ public final class AdditionalSubtypeSettings extends PreferenceFragment {
private InputMethodSubtype[] getSubtypes() {
final PreferenceGroup group = getPreferenceScreen();
- final ArrayList<InputMethodSubtype> subtypes = CollectionUtils.newArrayList();
+ final ArrayList<InputMethodSubtype> subtypes = new ArrayList<>();
final int count = group.getPreferenceCount();
for (int i = 0; i < count; i++) {
final Preference pref = group.getPreference(i);
diff --git a/java/src/com/android/inputmethod/latin/settings/DebugSettings.java b/java/src/com/android/inputmethod/latin/settings/DebugSettings.java
index c4c1234fc..9e7e07e11 100644
--- a/java/src/com/android/inputmethod/latin/settings/DebugSettings.java
+++ b/java/src/com/android/inputmethod/latin/settings/DebugSettings.java
@@ -29,7 +29,6 @@ import android.preference.PreferenceScreen;
import com.android.inputmethod.latin.Dictionary;
import com.android.inputmethod.latin.DictionaryDumpBroadcastReceiver;
-import com.android.inputmethod.latin.LatinImeLogger;
import com.android.inputmethod.latin.R;
import com.android.inputmethod.latin.debug.ExternalDictionaryGetterForDebug;
import com.android.inputmethod.latin.utils.ApplicationUtils;
@@ -40,8 +39,6 @@ public final class DebugSettings extends PreferenceFragment
public static final String PREF_DEBUG_MODE = "debug_mode";
public static final String PREF_FORCE_NON_DISTINCT_MULTITOUCH = "force_non_distinct_multitouch";
- public static final String PREF_USABILITY_STUDY_MODE = "usability_study_mode";
- public static final String PREF_STATISTICS_LOGGING = "enable_logging";
public static final String PREF_KEY_PREVIEW_SHOW_UP_START_SCALE =
"pref_key_preview_show_up_start_scale";
public static final String PREF_KEY_PREVIEW_DISMISS_END_SCALE =
@@ -58,11 +55,8 @@ public final class DebugSettings extends PreferenceFragment
public static final String PREF_SLIDING_KEY_INPUT_PREVIEW = "pref_sliding_key_input_preview";
public static final String PREF_KEY_LONGPRESS_TIMEOUT = "pref_key_longpress_timeout";
- private static final boolean SHOW_STATISTICS_LOGGING = false;
-
private boolean mServiceNeedsRestart = false;
private CheckBoxPreference mDebugMode;
- private CheckBoxPreference mStatisticsLoggingPref;
@Override
public void onCreate(Bundle icicle) {
@@ -71,21 +65,6 @@ public final class DebugSettings extends PreferenceFragment
SharedPreferences prefs = getPreferenceManager().getSharedPreferences();
prefs.registerOnSharedPreferenceChangeListener(this);
- final Preference usabilityStudyPref = findPreference(PREF_USABILITY_STUDY_MODE);
- if (usabilityStudyPref instanceof CheckBoxPreference) {
- final CheckBoxPreference checkbox = (CheckBoxPreference)usabilityStudyPref;
- checkbox.setChecked(prefs.getBoolean(PREF_USABILITY_STUDY_MODE,
- LatinImeLogger.getUsabilityStudyMode(prefs)));
- checkbox.setSummary(R.string.settings_warning_researcher_mode);
- }
- final Preference statisticsLoggingPref = findPreference(PREF_STATISTICS_LOGGING);
- if (statisticsLoggingPref instanceof CheckBoxPreference) {
- mStatisticsLoggingPref = (CheckBoxPreference) statisticsLoggingPref;
- if (!SHOW_STATISTICS_LOGGING) {
- getPreferenceScreen().removePreference(statisticsLoggingPref);
- }
- }
-
final PreferenceScreen readExternalDictionary =
(PreferenceScreen) findPreference(PREF_READ_EXTERNAL_DICTIONARY);
if (null != readExternalDictionary) {
@@ -163,27 +142,22 @@ public final class DebugSettings extends PreferenceFragment
@Override
public void onStop() {
super.onStop();
- if (mServiceNeedsRestart) Process.killProcess(Process.myPid());
+ if (mServiceNeedsRestart) {
+ Process.killProcess(Process.myPid());
+ }
}
@Override
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
- if (key.equals(PREF_DEBUG_MODE)) {
- if (mDebugMode != null) {
- mDebugMode.setChecked(prefs.getBoolean(PREF_DEBUG_MODE, false));
- final boolean checked = mDebugMode.isChecked();
- if (mStatisticsLoggingPref != null) {
- if (checked) {
- getPreferenceScreen().addPreference(mStatisticsLoggingPref);
- } else {
- getPreferenceScreen().removePreference(mStatisticsLoggingPref);
- }
- }
- updateDebugMode();
- mServiceNeedsRestart = true;
- }
- } else if (key.equals(PREF_FORCE_NON_DISTINCT_MULTITOUCH)) {
+ if (key.equals(PREF_DEBUG_MODE) && mDebugMode != null) {
+ mDebugMode.setChecked(prefs.getBoolean(PREF_DEBUG_MODE, false));
+ updateDebugMode();
+ mServiceNeedsRestart = true;
+ return;
+ }
+ if (key.equals(PREF_FORCE_NON_DISTINCT_MULTITOUCH)) {
mServiceNeedsRestart = true;
+ return;
}
}
diff --git a/java/src/com/android/inputmethod/latin/settings/Settings.java b/java/src/com/android/inputmethod/latin/settings/Settings.java
index d4f6bcd10..235847799 100644
--- a/java/src/com/android/inputmethod/latin/settings/Settings.java
+++ b/java/src/com/android/inputmethod/latin/settings/Settings.java
@@ -20,6 +20,7 @@ import android.content.Context;
import android.content.SharedPreferences;
import android.content.pm.ApplicationInfo;
import android.content.res.Resources;
+import android.os.Build;
import android.preference.PreferenceManager;
import android.util.Log;
@@ -60,6 +61,10 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang
"pref_key_use_double_space_period";
public static final String PREF_BLOCK_POTENTIALLY_OFFENSIVE =
"pref_key_block_potentially_offensive";
+ public static final boolean ENABLE_SHOW_LANGUAGE_SWITCH_KEY_SETTINGS =
+ (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT)
+ || (Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT
+ && Build.VERSION.CODENAME.equals("REL"));
public static final String PREF_SHOW_LANGUAGE_SWITCH_KEY =
"pref_show_language_switch_key";
public static final String PREF_INCLUDE_OTHER_IMES_IN_LANGUAGE_SWITCH_LIST =
@@ -327,10 +332,6 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang
R.array.keypress_vibration_durations, DEFAULT_KEYPRESS_VIBRATION_DURATION));
}
- public static boolean readUsabilityStudyMode(final SharedPreferences prefs) {
- return prefs.getBoolean(DebugSettings.PREF_USABILITY_STUDY_MODE, true);
- }
-
public static float readKeyPreviewAnimationScale(final SharedPreferences prefs,
final String prefKey, final float defaultValue) {
final float fraction = prefs.getFloat(prefKey, UNDEFINED_PREFERENCE_VALUE_FLOAT);
diff --git a/java/src/com/android/inputmethod/latin/settings/SettingsFragment.java b/java/src/com/android/inputmethod/latin/settings/SettingsFragment.java
index e1d38e7c4..af46aad96 100644
--- a/java/src/com/android/inputmethod/latin/settings/SettingsFragment.java
+++ b/java/src/com/android/inputmethod/latin/settings/SettingsFragment.java
@@ -41,7 +41,6 @@ import com.android.inputmethod.keyboard.KeyboardTheme;
import com.android.inputmethod.latin.AudioAndHapticFeedbackManager;
import com.android.inputmethod.latin.R;
import com.android.inputmethod.latin.SubtypeSwitcher;
-import com.android.inputmethod.latin.define.ProductionFlag;
import com.android.inputmethod.latin.setup.LauncherIconVisibilityManager;
import com.android.inputmethod.latin.userdictionary.UserDictionaryList;
import com.android.inputmethod.latin.userdictionary.UserDictionarySettings;
@@ -59,7 +58,7 @@ public final class SettingsFragment extends InputMethodSettingsFragment
private static final boolean DBG_USE_INTERNAL_PERSONAL_DICTIONARY_SETTINGS = false;
private static final boolean USE_INTERNAL_PERSONAL_DICTIONARY_SETTIGS =
DBG_USE_INTERNAL_PERSONAL_DICTIONARY_SETTINGS
- || Build.VERSION.SDK_INT <= 18 /* Build.VERSION.JELLY_BEAN_MR2 */;
+ || Build.VERSION.SDK_INT <= Build.VERSION_CODES.JELLY_BEAN_MR2;
private void setPreferenceEnabled(final String preferenceKey, final boolean enabled) {
final Preference preference = findPreference(preferenceKey);
@@ -152,10 +151,6 @@ public final class SettingsFragment extends InputMethodSettingsFragment
miscSettings.removePreference(aboutSettings);
}
}
- if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
- // The about screen contains items that may be confusing in development-only versions.
- miscSettings.removePreference(aboutSettings);
- }
final boolean showVoiceKeyOption = res.getBoolean(
R.bool.config_enable_show_voice_key_option);
@@ -169,6 +164,13 @@ public final class SettingsFragment extends InputMethodSettingsFragment
removePreference(Settings.PREF_VIBRATE_ON, generalSettings);
removePreference(Settings.PREF_VIBRATION_DURATION_SETTINGS, advancedSettings);
}
+ if (!Settings.ENABLE_SHOW_LANGUAGE_SWITCH_KEY_SETTINGS) {
+ removePreference(
+ Settings.PREF_SHOW_LANGUAGE_SWITCH_KEY, advancedSettings);
+ removePreference(
+ Settings.PREF_INCLUDE_OTHER_IMES_IN_LANGUAGE_SWITCH_LIST, advancedSettings);
+ }
+
// TODO: consolidate key preview dismiss delay with the key preview animation parameters.
if (!Settings.readFromBuildConfigIfToShowKeyPreviewPopupOption(res)) {
@@ -199,9 +201,6 @@ public final class SettingsFragment extends InputMethodSettingsFragment
removePreference(Settings.PREF_SHOW_SETUP_WIZARD_ICON, advancedSettings);
}
- setPreferenceEnabled(Settings.PREF_INCLUDE_OTHER_IMES_IN_LANGUAGE_SWITCH_LIST,
- Settings.readShowsLanguageSwitchKey(prefs));
-
final PreferenceGroup textCorrectionGroup =
(PreferenceGroup) findPreference(Settings.PREF_CORRECTION_SETTINGS);
final PreferenceScreen dictionaryLink =
@@ -299,9 +298,6 @@ public final class SettingsFragment extends InputMethodSettingsFragment
if (key.equals(Settings.PREF_POPUP_ON)) {
setPreferenceEnabled(Settings.PREF_KEY_PREVIEW_POPUP_DISMISS_DELAY,
Settings.readKeyPreviewPopupEnabled(prefs, res));
- } else if (key.equals(Settings.PREF_SHOW_LANGUAGE_SWITCH_KEY)) {
- setPreferenceEnabled(Settings.PREF_INCLUDE_OTHER_IMES_IN_LANGUAGE_SWITCH_LIST,
- Settings.readShowsLanguageSwitchKey(prefs));
} else if (key.equals(Settings.PREF_SHOW_SETUP_WIZARD_ICON)) {
LauncherIconVisibilityManager.updateSetupWizardIconVisibility(getActivity());
}
diff --git a/java/src/com/android/inputmethod/latin/settings/SettingsValues.java b/java/src/com/android/inputmethod/latin/settings/SettingsValues.java
index 16fd05877..6c6e79e0f 100644
--- a/java/src/com/android/inputmethod/latin/settings/SettingsValues.java
+++ b/java/src/com/android/inputmethod/latin/settings/SettingsValues.java
@@ -125,9 +125,11 @@ public final class SettingsValues {
final String autoCorrectionThresholdRawValue = prefs.getString(
Settings.PREF_AUTO_CORRECTION_THRESHOLD,
res.getString(R.string.auto_correction_threshold_mode_index_modest));
- mIncludesOtherImesInLanguageSwitchList = prefs.getBoolean(
- Settings.PREF_INCLUDE_OTHER_IMES_IN_LANGUAGE_SWITCH_LIST, false);
- mShowsLanguageSwitchKey = Settings.readShowsLanguageSwitchKey(prefs);
+ mIncludesOtherImesInLanguageSwitchList = Settings.ENABLE_SHOW_LANGUAGE_SWITCH_KEY_SETTINGS
+ ? prefs.getBoolean(Settings.PREF_INCLUDE_OTHER_IMES_IN_LANGUAGE_SWITCH_LIST, false)
+ : true /* forcibly */;
+ mShowsLanguageSwitchKey = Settings.ENABLE_SHOW_LANGUAGE_SWITCH_KEY_SETTINGS
+ ? Settings.readShowsLanguageSwitchKey(prefs) : true /* forcibly */;
mUseContactsDict = prefs.getBoolean(Settings.PREF_KEY_USE_CONTACTS_DICT, true);
mUsePersonalizedDicts = prefs.getBoolean(Settings.PREF_KEY_USE_PERSONALIZED_DICTS, true);
mUseDoubleSpacePeriod = prefs.getBoolean(Settings.PREF_KEY_USE_DOUBLE_SPACE_PERIOD, true);
@@ -171,7 +173,7 @@ public final class SettingsValues {
ResourceUtils.getFloatFromFraction(
res, R.fraction.config_key_preview_dismiss_end_scale));
mDisplayOrientation = res.getConfiguration().orientation;
- mAppWorkarounds = new AsyncResultHolder<AppWorkaroundsUtils>();
+ mAppWorkarounds = new AsyncResultHolder<>();
final PackageInfo packageInfo = TargetPackageInfoGetterTask.getCachedPackageInfo(
mInputAttributes.mTargetApplicationPackageName);
if (null != packageInfo) {
@@ -188,10 +190,11 @@ public final class SettingsValues {
public boolean isSuggestionsRequested() {
return mInputAttributes.mIsSettingsSuggestionStripOn
- && (mCorrectionEnabled || isSuggestionStripVisible());
+ && (mCorrectionEnabled
+ || isCurrentOrientationAllowingSuggestionsPerUserSettings());
}
- public boolean isSuggestionStripVisible() {
+ public boolean isCurrentOrientationAllowingSuggestionsPerUserSettings() {
return (mSuggestionVisibility == SUGGESTION_VISIBILITY_SHOW_VALUE)
|| (mSuggestionVisibility == SUGGESTION_VISIBILITY_SHOW_ONLY_PORTRAIT_VALUE
&& mDisplayOrientation == Configuration.ORIENTATION_PORTRAIT);
diff --git a/java/src/com/android/inputmethod/latin/setup/SetupStartIndicatorView.java b/java/src/com/android/inputmethod/latin/setup/SetupStartIndicatorView.java
index 974dfddd3..73d25f6aa 100644
--- a/java/src/com/android/inputmethod/latin/setup/SetupStartIndicatorView.java
+++ b/java/src/com/android/inputmethod/latin/setup/SetupStartIndicatorView.java
@@ -21,13 +21,13 @@ import android.content.res.ColorStateList;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Path;
+import android.support.v4.view.ViewCompat;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.LinearLayout;
import android.widget.TextView;
-import com.android.inputmethod.compat.ViewCompatUtils;
import com.android.inputmethod.latin.R;
public final class SetupStartIndicatorView extends LinearLayout {
@@ -96,13 +96,13 @@ public final class SetupStartIndicatorView extends LinearLayout {
@Override
protected void onDraw(final Canvas canvas) {
super.onDraw(canvas);
- final int layoutDirection = ViewCompatUtils.getLayoutDirection(this);
+ final int layoutDirection = ViewCompat.getLayoutDirection(this);
final int width = getWidth();
final int height = getHeight();
final float halfHeight = height / 2.0f;
final Path path = mIndicatorPath;
path.rewind();
- if (layoutDirection == ViewCompatUtils.LAYOUT_DIRECTION_RTL) {
+ if (layoutDirection == ViewCompat.LAYOUT_DIRECTION_RTL) {
// Left arrow
path.moveTo(width, 0.0f);
path.lineTo(0.0f, halfHeight);
diff --git a/java/src/com/android/inputmethod/latin/setup/SetupStepIndicatorView.java b/java/src/com/android/inputmethod/latin/setup/SetupStepIndicatorView.java
index c909507c6..6734e61b8 100644
--- a/java/src/com/android/inputmethod/latin/setup/SetupStepIndicatorView.java
+++ b/java/src/com/android/inputmethod/latin/setup/SetupStepIndicatorView.java
@@ -20,10 +20,10 @@ import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.Path;
+import android.support.v4.view.ViewCompat;
import android.util.AttributeSet;
import android.view.View;
-import com.android.inputmethod.compat.ViewCompatUtils;
import com.android.inputmethod.latin.R;
public final class SetupStepIndicatorView extends View {
@@ -38,12 +38,12 @@ public final class SetupStepIndicatorView extends View {
}
public void setIndicatorPosition(final int stepPos, final int totalStepNum) {
- final int layoutDirection = ViewCompatUtils.getLayoutDirection(this);
+ final int layoutDirection = ViewCompat.getLayoutDirection(this);
// The indicator position is the center of the partition that is equally divided into
// the total step number.
final float partionWidth = 1.0f / totalStepNum;
final float pos = stepPos * partionWidth + partionWidth / 2.0f;
- mXRatio = (layoutDirection == ViewCompatUtils.LAYOUT_DIRECTION_RTL) ? 1.0f - pos : pos;
+ mXRatio = (layoutDirection == ViewCompat.LAYOUT_DIRECTION_RTL) ? 1.0f - pos : pos;
invalidate();
}
diff --git a/java/src/com/android/inputmethod/latin/setup/SetupWizardActivity.java b/java/src/com/android/inputmethod/latin/setup/SetupWizardActivity.java
index 5072fabd6..bcac05a6a 100644
--- a/java/src/com/android/inputmethod/latin/setup/SetupWizardActivity.java
+++ b/java/src/com/android/inputmethod/latin/setup/SetupWizardActivity.java
@@ -37,7 +37,6 @@ import com.android.inputmethod.compat.TextViewCompatUtils;
import com.android.inputmethod.compat.ViewCompatUtils;
import com.android.inputmethod.latin.R;
import com.android.inputmethod.latin.settings.SettingsActivity;
-import com.android.inputmethod.latin.utils.CollectionUtils;
import com.android.inputmethod.latin.utils.LeakGuardHandlerWrapper;
import java.util.ArrayList;
@@ -482,7 +481,7 @@ public final class SetupWizardActivity extends Activity implements View.OnClickL
static final class SetupStepGroup {
private final SetupStepIndicatorView mIndicatorView;
- private final ArrayList<SetupStep> mGroup = CollectionUtils.newArrayList();
+ private final ArrayList<SetupStep> mGroup = new ArrayList<>();
public SetupStepGroup(final SetupStepIndicatorView indicatorView) {
mIndicatorView = indicatorView;
diff --git a/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java b/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java
index 65ebcf5f1..8d495646d 100644
--- a/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java
+++ b/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerService.java
@@ -27,7 +27,6 @@ import android.view.inputmethod.InputMethodSubtype;
import android.view.textservice.SuggestionsInfo;
import com.android.inputmethod.keyboard.KeyboardLayoutSet;
-import com.android.inputmethod.latin.BinaryDictionary;
import com.android.inputmethod.latin.ContactsBinaryDictionary;
import com.android.inputmethod.latin.Dictionary;
import com.android.inputmethod.latin.DictionaryCollection;
@@ -77,7 +76,7 @@ public final class AndroidSpellCheckerService extends SpellCheckerService
private final Object mUseContactsLock = new Object();
private final HashSet<WeakReference<DictionaryCollection>> mDictionaryCollectionsList =
- CollectionUtils.newHashSet();
+ new HashSet<>();
public static final int SCRIPT_LATIN = 0;
public static final int SCRIPT_CYRILLIC = 1;
@@ -94,7 +93,7 @@ public final class AndroidSpellCheckerService extends SpellCheckerService
// proximity to pass to the dictionary descent algorithm.
// IMPORTANT: this only contains languages - do not write countries in there.
// Only the language is searched from the map.
- mLanguageToScript = CollectionUtils.newTreeMap();
+ mLanguageToScript = new TreeMap<>();
mLanguageToScript.put("cs", SCRIPT_LATIN);
mLanguageToScript.put("da", SCRIPT_LATIN);
mLanguageToScript.put("de", SCRIPT_LATIN);
@@ -255,7 +254,7 @@ public final class AndroidSpellCheckerService extends SpellCheckerService
mOriginalText = originalText;
mRecommendedThreshold = recommendedThreshold;
mMaxLength = maxLength;
- mSuggestions = CollectionUtils.newArrayList(maxLength + 1);
+ mSuggestions = new ArrayList<>(maxLength + 1);
mScores = new int[mMaxLength];
}
@@ -441,8 +440,7 @@ public final class AndroidSpellCheckerService extends SpellCheckerService
}
}
dictionaryCollection.addDictionary(mContactsDictionary);
- mDictionaryCollectionsList.add(
- new WeakReference<DictionaryCollection>(dictionaryCollection));
+ mDictionaryCollectionsList.add(new WeakReference<>(dictionaryCollection));
}
return new DictAndKeyboard(dictionaryCollection, keyboardLayoutSet);
}
diff --git a/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerSession.java b/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerSession.java
index e951f5a89..cc80e6f21 100644
--- a/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerSession.java
+++ b/java/src/com/android/inputmethod/latin/spellcheck/AndroidSpellCheckerSession.java
@@ -24,7 +24,6 @@ import android.view.textservice.SuggestionsInfo;
import android.view.textservice.TextInfo;
import com.android.inputmethod.latin.PrevWordsInfo;
-import com.android.inputmethod.latin.utils.CollectionUtils;
import java.util.ArrayList;
@@ -44,10 +43,9 @@ public final class AndroidSpellCheckerSession extends AndroidWordLevelSpellCheck
return null;
}
final int N = ssi.getSuggestionsCount();
- final ArrayList<Integer> additionalOffsets = CollectionUtils.newArrayList();
- final ArrayList<Integer> additionalLengths = CollectionUtils.newArrayList();
- final ArrayList<SuggestionsInfo> additionalSuggestionsInfos =
- CollectionUtils.newArrayList();
+ final ArrayList<Integer> additionalOffsets = new ArrayList<>();
+ final ArrayList<Integer> additionalLengths = new ArrayList<>();
+ final ArrayList<SuggestionsInfo> additionalSuggestionsInfos = new ArrayList<>();
String currentWord = null;
for (int i = 0; i < N; ++i) {
final SuggestionsInfo si = ssi.getSuggestionsInfoAt(i);
diff --git a/java/src/com/android/inputmethod/latin/spellcheck/AndroidWordLevelSpellCheckerSession.java b/java/src/com/android/inputmethod/latin/spellcheck/AndroidWordLevelSpellCheckerSession.java
index cf26000d5..d7953e6e7 100644
--- a/java/src/com/android/inputmethod/latin/spellcheck/AndroidWordLevelSpellCheckerSession.java
+++ b/java/src/com/android/inputmethod/latin/spellcheck/AndroidWordLevelSpellCheckerSession.java
@@ -28,7 +28,6 @@ import android.view.textservice.SuggestionsInfo;
import android.view.textservice.TextInfo;
import com.android.inputmethod.compat.SuggestionsInfoCompatUtils;
-import com.android.inputmethod.keyboard.Keyboard;
import com.android.inputmethod.latin.Constants;
import com.android.inputmethod.latin.Dictionary;
import com.android.inputmethod.latin.PrevWordsInfo;
@@ -69,7 +68,7 @@ public abstract class AndroidWordLevelSpellCheckerSession extends Session {
private static final char CHAR_DELIMITER = '\uFFFC';
private static final int MAX_CACHE_SIZE = 50;
private final LruCache<String, SuggestionsParams> mUnigramSuggestionsInfoCache =
- new LruCache<String, SuggestionsParams>(MAX_CACHE_SIZE);
+ new LruCache<>(MAX_CACHE_SIZE);
// TODO: Support n-gram input
private static String generateKey(final String query, final PrevWordsInfo prevWordsInfo) {
diff --git a/java/src/com/android/inputmethod/latin/spellcheck/DictAndKeyboard.java b/java/src/com/android/inputmethod/latin/spellcheck/DictAndKeyboard.java
index 1ffe50681..b33739fc1 100644
--- a/java/src/com/android/inputmethod/latin/spellcheck/DictAndKeyboard.java
+++ b/java/src/com/android/inputmethod/latin/spellcheck/DictAndKeyboard.java
@@ -16,11 +16,11 @@
package com.android.inputmethod.latin.spellcheck;
-import com.android.inputmethod.latin.Dictionary;
import com.android.inputmethod.keyboard.Keyboard;
import com.android.inputmethod.keyboard.KeyboardId;
import com.android.inputmethod.keyboard.KeyboardLayoutSet;
import com.android.inputmethod.keyboard.ProximityInfo;
+import com.android.inputmethod.latin.Dictionary;
/**
* A container for a Dictionary and a Keyboard.
@@ -28,19 +28,15 @@ import com.android.inputmethod.keyboard.ProximityInfo;
public final class DictAndKeyboard {
public final Dictionary mDictionary;
public final Keyboard mKeyboard;
- private final Keyboard mManualShiftedKeyboard;
public DictAndKeyboard(
final Dictionary dictionary, final KeyboardLayoutSet keyboardLayoutSet) {
mDictionary = dictionary;
if (keyboardLayoutSet == null) {
mKeyboard = null;
- mManualShiftedKeyboard = null;
return;
}
mKeyboard = keyboardLayoutSet.getKeyboard(KeyboardId.ELEMENT_ALPHABET);
- mManualShiftedKeyboard =
- keyboardLayoutSet.getKeyboard(KeyboardId.ELEMENT_ALPHABET_MANUAL_SHIFTED);
}
public ProximityInfo getProximityInfo() {
diff --git a/java/src/com/android/inputmethod/latin/spellcheck/DictionaryPool.java b/java/src/com/android/inputmethod/latin/spellcheck/DictionaryPool.java
index ba2e0c309..1331d52d5 100644
--- a/java/src/com/android/inputmethod/latin/spellcheck/DictionaryPool.java
+++ b/java/src/com/android/inputmethod/latin/spellcheck/DictionaryPool.java
@@ -23,7 +23,6 @@ import com.android.inputmethod.latin.Dictionary;
import com.android.inputmethod.latin.PrevWordsInfo;
import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
import com.android.inputmethod.latin.WordComposer;
-import com.android.inputmethod.latin.utils.CollectionUtils;
import java.util.ArrayList;
import java.util.Locale;
@@ -47,7 +46,7 @@ public final class DictionaryPool extends LinkedBlockingQueue<DictAndKeyboard> {
private final Locale mLocale;
private int mSize;
private volatile boolean mClosed;
- final static ArrayList<SuggestedWordInfo> noSuggestions = CollectionUtils.newArrayList();
+ final static ArrayList<SuggestedWordInfo> noSuggestions = new ArrayList<>();
private final static DictAndKeyboard dummyDict = new DictAndKeyboard(
new Dictionary(Dictionary.TYPE_MAIN) {
// TODO: this dummy dictionary should be a singleton in the Dictionary class.
diff --git a/java/src/com/android/inputmethod/latin/suggestions/MoreSuggestions.java b/java/src/com/android/inputmethod/latin/suggestions/MoreSuggestions.java
index e90b15ca5..346aea34a 100644
--- a/java/src/com/android/inputmethod/latin/suggestions/MoreSuggestions.java
+++ b/java/src/com/android/inputmethod/latin/suggestions/MoreSuggestions.java
@@ -23,23 +23,17 @@ import android.graphics.drawable.Drawable;
import com.android.inputmethod.keyboard.Key;
import com.android.inputmethod.keyboard.Keyboard;
-import com.android.inputmethod.keyboard.KeyboardActionListener;
import com.android.inputmethod.keyboard.internal.KeyboardBuilder;
import com.android.inputmethod.keyboard.internal.KeyboardIconsSet;
import com.android.inputmethod.keyboard.internal.KeyboardParams;
import com.android.inputmethod.latin.Constants;
import com.android.inputmethod.latin.R;
import com.android.inputmethod.latin.SuggestedWords;
-import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
import com.android.inputmethod.latin.utils.TypefaceUtils;
public final class MoreSuggestions extends Keyboard {
public final SuggestedWords mSuggestedWords;
- public static abstract class MoreSuggestionsListener extends KeyboardActionListener.Adapter {
- public abstract void onSuggestionSelected(final int index, final SuggestedWordInfo info);
- }
-
MoreSuggestions(final MoreSuggestionsParam params, final SuggestedWords suggestedWords) {
super(params);
mSuggestedWords = suggestedWords;
diff --git a/java/src/com/android/inputmethod/latin/suggestions/MoreSuggestionsView.java b/java/src/com/android/inputmethod/latin/suggestions/MoreSuggestionsView.java
index 7fd64c4bf..aa59db678 100644
--- a/java/src/com/android/inputmethod/latin/suggestions/MoreSuggestionsView.java
+++ b/java/src/com/android/inputmethod/latin/suggestions/MoreSuggestionsView.java
@@ -22,11 +22,12 @@ import android.util.Log;
import com.android.inputmethod.keyboard.Key;
import com.android.inputmethod.keyboard.Keyboard;
+import com.android.inputmethod.keyboard.KeyboardActionListener;
import com.android.inputmethod.keyboard.MoreKeysKeyboardView;
import com.android.inputmethod.latin.R;
import com.android.inputmethod.latin.SuggestedWords;
+import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
import com.android.inputmethod.latin.suggestions.MoreSuggestions.MoreSuggestionKey;
-import com.android.inputmethod.latin.suggestions.MoreSuggestions.MoreSuggestionsListener;
/**
* A view that renders a virtual {@link MoreSuggestions}. It handles rendering of keys and detecting
@@ -35,6 +36,10 @@ import com.android.inputmethod.latin.suggestions.MoreSuggestions.MoreSuggestions
public final class MoreSuggestionsView extends MoreKeysKeyboardView {
private static final String TAG = MoreSuggestionsView.class.getSimpleName();
+ public static abstract class MoreSuggestionsListener extends KeyboardActionListener.Adapter {
+ public abstract void onSuggestionSelected(final int index, final SuggestedWordInfo info);
+ }
+
public MoreSuggestionsView(final Context context, final AttributeSet attrs) {
this(context, attrs, R.attr.moreKeysKeyboardViewStyle);
}
diff --git a/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripView.java b/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripView.java
index 619804afa..4a5a7f004 100644
--- a/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripView.java
+++ b/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripView.java
@@ -47,12 +47,9 @@ import com.android.inputmethod.latin.LatinImeLogger;
import com.android.inputmethod.latin.R;
import com.android.inputmethod.latin.SuggestedWords;
import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
-import com.android.inputmethod.latin.define.ProductionFlag;
import com.android.inputmethod.latin.settings.Settings;
-import com.android.inputmethod.latin.suggestions.MoreSuggestions.MoreSuggestionsListener;
-import com.android.inputmethod.latin.utils.CollectionUtils;
+import com.android.inputmethod.latin.suggestions.MoreSuggestionsView.MoreSuggestionsListener;
import com.android.inputmethod.latin.utils.ImportantNoticeUtils;
-import com.android.inputmethod.research.ResearchLogger;
import java.util.ArrayList;
@@ -78,9 +75,9 @@ public final class SuggestionStripView extends RelativeLayout implements OnClick
private final MoreSuggestionsView mMoreSuggestionsView;
private final MoreSuggestions.Builder mMoreSuggestionsBuilder;
- private final ArrayList<TextView> mWordViews = CollectionUtils.newArrayList();
- private final ArrayList<TextView> mDebugInfoViews = CollectionUtils.newArrayList();
- private final ArrayList<View> mDividerViews = CollectionUtils.newArrayList();
+ private final ArrayList<TextView> mWordViews = new ArrayList<>();
+ private final ArrayList<TextView> mDebugInfoViews = new ArrayList<>();
+ private final ArrayList<View> mDividerViews = new ArrayList<>();
Listener mListener;
private SuggestedWords mSuggestedWords = SuggestedWords.EMPTY;
@@ -90,13 +87,16 @@ public final class SuggestionStripView extends RelativeLayout implements OnClick
private final StripVisibilityGroup mStripVisibilityGroup;
private static class StripVisibilityGroup {
+ private final View mSuggestionStripView;
private final View mSuggestionsStrip;
private final View mVoiceKey;
private final View mAddToDictionaryStrip;
private final View mImportantNoticeStrip;
- public StripVisibilityGroup(final View suggestionsStrip, final View voiceKey,
- final View addToDictionaryStrip, final View importantNoticeStrip) {
+ public StripVisibilityGroup(final View suggestionStripView,
+ final ViewGroup suggestionsStrip, final ImageButton voiceKey,
+ final ViewGroup addToDictionaryStrip, final View importantNoticeStrip) {
+ mSuggestionStripView = suggestionStripView;
mSuggestionsStrip = suggestionsStrip;
mVoiceKey = voiceKey;
mAddToDictionaryStrip = addToDictionaryStrip;
@@ -104,7 +104,10 @@ public final class SuggestionStripView extends RelativeLayout implements OnClick
showSuggestionsStrip(false /* voiceKeyEnabled */);
}
- public void setLayoutDirection(final int layoutDirection) {
+ public void setLayoutDirection(final boolean isRtlLanguage) {
+ final int layoutDirection = isRtlLanguage ? ViewCompat.LAYOUT_DIRECTION_RTL
+ : ViewCompat.LAYOUT_DIRECTION_LTR;
+ ViewCompat.setLayoutDirection(mSuggestionStripView, layoutDirection);
ViewCompat.setLayoutDirection(mSuggestionsStrip, layoutDirection);
ViewCompat.setLayoutDirection(mAddToDictionaryStrip, layoutDirection);
ViewCompat.setLayoutDirection(mImportantNoticeStrip, layoutDirection);
@@ -156,7 +159,7 @@ public final class SuggestionStripView extends RelativeLayout implements OnClick
mVoiceKey = (ImageButton)findViewById(R.id.suggestions_strip_voice_key);
mAddToDictionaryStrip = (ViewGroup)findViewById(R.id.add_to_dictionary_strip);
mImportantNoticeStrip = findViewById(R.id.important_notice_strip);
- mStripVisibilityGroup = new StripVisibilityGroup(mSuggestionsStrip, mVoiceKey,
+ mStripVisibilityGroup = new StripVisibilityGroup(this, mSuggestionsStrip, mVoiceKey,
mAddToDictionaryStrip, mImportantNoticeStrip);
for (int pos = 0; pos < SuggestedWords.MAX_SUGGESTIONS; pos++) {
@@ -217,16 +220,10 @@ public final class SuggestionStripView extends RelativeLayout implements OnClick
public void setSuggestions(final SuggestedWords suggestedWords, final boolean isRtlLanguage) {
clear();
- final int layoutDirection = isRtlLanguage ? ViewCompat.LAYOUT_DIRECTION_RTL
- : ViewCompat.LAYOUT_DIRECTION_LTR;
- setLayoutDirection(layoutDirection);
- mStripVisibilityGroup.setLayoutDirection(layoutDirection);
+ mStripVisibilityGroup.setLayoutDirection(isRtlLanguage);
mSuggestedWords = suggestedWords;
mSuggestionsCountInStrip = mLayoutHelper.layoutAndReturnSuggestionCountInStrip(
mSuggestedWords, mSuggestionsStrip, this);
- if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
- ResearchLogger.suggestionStripView_setSuggestions(mSuggestedWords);
- }
mStripVisibilityGroup.showSuggestionsStrip(isVoiceKeyEnabled());
}
diff --git a/java/src/com/android/inputmethod/latin/userdictionary/UserDictionaryAddWordContents.java b/java/src/com/android/inputmethod/latin/userdictionary/UserDictionaryAddWordContents.java
index 21426d1eb..80d4cc44f 100644
--- a/java/src/com/android/inputmethod/latin/userdictionary/UserDictionaryAddWordContents.java
+++ b/java/src/com/android/inputmethod/latin/userdictionary/UserDictionaryAddWordContents.java
@@ -256,7 +256,7 @@ public class UserDictionaryAddWordContents {
// The system locale should be inside. We want it at the 2nd spot.
locales.remove(systemLocale); // system locale may not be null
locales.remove(""); // Remove the empty string if it's there
- final ArrayList<LocaleRenderer> localesList = new ArrayList<LocaleRenderer>();
+ final ArrayList<LocaleRenderer> localesList = new ArrayList<>();
// Add the passed locale, then the system locale at the top of the list. Add an
// "all languages" entry at the bottom of the list.
addLocaleDisplayNameToList(activity, localesList, mLocale);
diff --git a/java/src/com/android/inputmethod/latin/userdictionary/UserDictionaryAddWordFragment.java b/java/src/com/android/inputmethod/latin/userdictionary/UserDictionaryAddWordFragment.java
index 4fc132f68..163443036 100644
--- a/java/src/com/android/inputmethod/latin/userdictionary/UserDictionaryAddWordFragment.java
+++ b/java/src/com/android/inputmethod/latin/userdictionary/UserDictionaryAddWordFragment.java
@@ -134,8 +134,8 @@ public class UserDictionaryAddWordFragment extends Fragment
final Spinner localeSpinner =
(Spinner)mRootView.findViewById(R.id.user_dictionary_add_locale);
- final ArrayAdapter<LocaleRenderer> adapter = new ArrayAdapter<LocaleRenderer>(getActivity(),
- android.R.layout.simple_spinner_item, localesList);
+ final ArrayAdapter<LocaleRenderer> adapter = new ArrayAdapter<>(
+ getActivity(), android.R.layout.simple_spinner_item, localesList);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
localeSpinner.setAdapter(adapter);
localeSpinner.setOnItemSelectedListener(this);
diff --git a/java/src/com/android/inputmethod/latin/userdictionary/UserDictionaryList.java b/java/src/com/android/inputmethod/latin/userdictionary/UserDictionaryList.java
index 97a924d7b..624783a70 100644
--- a/java/src/com/android/inputmethod/latin/userdictionary/UserDictionaryList.java
+++ b/java/src/com/android/inputmethod/latin/userdictionary/UserDictionaryList.java
@@ -56,7 +56,7 @@ public class UserDictionaryList extends PreferenceFragment {
final Cursor cursor = activity.getContentResolver().query(UserDictionary.Words.CONTENT_URI,
new String[] { UserDictionary.Words.LOCALE },
null, null, null);
- final TreeSet<String> localeSet = new TreeSet<String>();
+ final TreeSet<String> localeSet = new TreeSet<>();
if (null == cursor) {
// The user dictionary service is not present or disabled. Return null.
return null;
diff --git a/java/src/com/android/inputmethod/latin/utils/AdditionalSubtypeUtils.java b/java/src/com/android/inputmethod/latin/utils/AdditionalSubtypeUtils.java
index 2bb30a2ba..3ca7c7e1c 100644
--- a/java/src/com/android/inputmethod/latin/utils/AdditionalSubtypeUtils.java
+++ b/java/src/com/android/inputmethod/latin/utils/AdditionalSubtypeUtils.java
@@ -95,8 +95,7 @@ public final class AdditionalSubtypeUtils {
return EMPTY_SUBTYPE_ARRAY;
}
final String[] prefSubtypeArray = prefSubtypes.split(PREF_SUBTYPE_SEPARATOR);
- final ArrayList<InputMethodSubtype> subtypesList =
- CollectionUtils.newArrayList(prefSubtypeArray.length);
+ final ArrayList<InputMethodSubtype> subtypesList = new ArrayList<>(prefSubtypeArray.length);
for (final String prefSubtype : prefSubtypeArray) {
final String elems[] = prefSubtype.split(LOCALE_AND_LAYOUT_SEPARATOR);
if (elems.length != LENGTH_WITHOUT_EXTRA_VALUE
diff --git a/java/src/com/android/inputmethod/latin/utils/AutoCorrectionUtils.java b/java/src/com/android/inputmethod/latin/utils/AutoCorrectionUtils.java
index 22b9b77d2..34ee2152a 100644
--- a/java/src/com/android/inputmethod/latin/utils/AutoCorrectionUtils.java
+++ b/java/src/com/android/inputmethod/latin/utils/AutoCorrectionUtils.java
@@ -16,12 +16,11 @@
package com.android.inputmethod.latin.utils;
-import com.android.inputmethod.latin.BinaryDictionary;
+import android.util.Log;
+
import com.android.inputmethod.latin.LatinImeLogger;
import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
-import android.util.Log;
-
public final class AutoCorrectionUtils {
private static final boolean DBG = LatinImeLogger.sDBG;
private static final String TAG = AutoCorrectionUtils.class.getSimpleName();
@@ -36,7 +35,9 @@ public final class AutoCorrectionUtils {
final float autoCorrectionThreshold) {
if (null != suggestion) {
// Shortlist a whitelisted word
- if (suggestion.mKind == SuggestedWordInfo.KIND_WHITELIST) return true;
+ if (suggestion.isKindOf(SuggestedWordInfo.KIND_WHITELIST)) {
+ return true;
+ }
final int autoCorrectionSuggestionScore = suggestion.mScore;
// TODO: when the normalized score of the first suggestion is nearly equals to
// the normalized score of the second suggestion, behave less aggressive.
diff --git a/java/src/com/android/inputmethod/latin/utils/CapsModeUtils.java b/java/src/com/android/inputmethod/latin/utils/CapsModeUtils.java
index 702688f93..936219332 100644
--- a/java/src/com/android/inputmethod/latin/utils/CapsModeUtils.java
+++ b/java/src/com/android/inputmethod/latin/utils/CapsModeUtils.java
@@ -62,6 +62,22 @@ public final class CapsModeUtils {
}
/**
+ * Helper method to find out if a code point is starting punctuation.
+ *
+ * This include the Unicode START_PUNCTUATION category, but also some other symbols that are
+ * starting, like the inverted question mark or the double quote.
+ *
+ * @param codePoint the code point
+ * @return true if it's starting punctuation, false otherwise.
+ */
+ private static boolean isStartPunctuation(final int codePoint) {
+ return (codePoint == Constants.CODE_DOUBLE_QUOTE || codePoint == Constants.CODE_SINGLE_QUOTE
+ || codePoint == Constants.CODE_INVERTED_QUESTION_MARK
+ || codePoint == Constants.CODE_INVERTED_EXCLAMATION_MARK
+ || Character.getType(codePoint) == Character.START_PUNCTUATION);
+ }
+
+ /**
* Determine what caps mode should be in effect at the current offset in
* the text. Only the mode bits set in <var>reqModes</var> will be
* checked. Note that the caps mode flags here are explicitly defined
@@ -115,8 +131,7 @@ public final class CapsModeUtils {
} else {
for (i = cs.length(); i > 0; i--) {
final char c = cs.charAt(i - 1);
- if (c != Constants.CODE_DOUBLE_QUOTE && c != Constants.CODE_SINGLE_QUOTE
- && Character.getType(c) != Character.START_PUNCTUATION) {
+ if (!isStartPunctuation(c)) {
break;
}
}
@@ -210,11 +225,14 @@ public final class CapsModeUtils {
// We found out that we have a period. We need to determine if this is a full stop or
// otherwise sentence-ending period, or an abbreviation like "e.g.". An abbreviation
- // looks like (\w\.){2,}
+ // looks like (\w\.){2,}. Moreover, in German, you put periods after digits for dates
+ // and some other things, and in German specifically we need to not go into autocaps after
+ // a whitespace-digits-period sequence.
// To find out, we will have a simple state machine with the following states :
- // START, WORD, PERIOD, ABBREVIATION
+ // START, WORD, PERIOD, ABBREVIATION, NUMBER
// On START : (just before the first period)
// letter => WORD
+ // digit => NUMBER if German; end with caps otherwise
// whitespace => end with no caps (it was a stand-alone period)
// otherwise => end with caps (several periods/symbols in a row)
// On WORD : (within the word just before the first period)
@@ -228,6 +246,11 @@ public final class CapsModeUtils {
// letter => LETTER
// period => PERIOD
// otherwise => end with no caps (it was an abbreviation)
+ // On NUMBER : (period immediately preceded by one or more digits)
+ // digit => NUMBER
+ // letter => LETTER (promote to word)
+ // otherwise => end with no caps (it was a whitespace-digits-period sequence,
+ // or a punctuation-digits-period sequence like "11.11.")
// "Not an abbreviation" in the above chart essentially covers cases like "...yes.". This
// should capitalize.
@@ -235,6 +258,7 @@ public final class CapsModeUtils {
final int WORD = 1;
final int PERIOD = 2;
final int LETTER = 3;
+ final int NUMBER = 4;
final int caps = (TextUtils.CAP_MODE_CHARACTERS | TextUtils.CAP_MODE_WORDS
| TextUtils.CAP_MODE_SENTENCES) & reqModes;
final int noCaps = (TextUtils.CAP_MODE_CHARACTERS | TextUtils.CAP_MODE_WORDS) & reqModes;
@@ -247,6 +271,8 @@ public final class CapsModeUtils {
state = WORD;
} else if (Character.isWhitespace(c)) {
return noCaps;
+ } else if (Character.isDigit(c) && spacingAndPunctuations.mUsesGermanRules) {
+ state = NUMBER;
} else {
return caps;
}
@@ -275,6 +301,15 @@ public final class CapsModeUtils {
} else {
return noCaps;
}
+ break;
+ case NUMBER:
+ if (Character.isLetter(c)) {
+ state = WORD;
+ } else if (Character.isDigit(c)) {
+ state = NUMBER;
+ } else {
+ return noCaps;
+ }
}
}
// Here we arrived at the start of the line. This should behave exactly like whitespace.
diff --git a/java/src/com/android/inputmethod/latin/utils/CollectionUtils.java b/java/src/com/android/inputmethod/latin/utils/CollectionUtils.java
index bbfa0f091..e3aef29ba 100644
--- a/java/src/com/android/inputmethod/latin/utils/CollectionUtils.java
+++ b/java/src/com/android/inputmethod/latin/utils/CollectionUtils.java
@@ -16,93 +16,21 @@
package com.android.inputmethod.latin.utils;
-import android.util.SparseArray;
-
-import java.util.ArrayDeque;
import java.util.ArrayList;
-import java.util.Collection;
import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedList;
import java.util.Map;
import java.util.TreeMap;
-import java.util.TreeSet;
-import java.util.WeakHashMap;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.CopyOnWriteArrayList;
public final class CollectionUtils {
private CollectionUtils() {
// This utility class is not publicly instantiable.
}
- public static <K,V> HashMap<K,V> newHashMap() {
- return new HashMap<K,V>();
- }
-
- public static <K, V> WeakHashMap<K, V> newWeakHashMap() {
- return new WeakHashMap<K, V>();
- }
-
- public static <K,V> TreeMap<K,V> newTreeMap() {
- return new TreeMap<K,V>();
- }
-
public static <K, V> Map<K,V> newSynchronizedTreeMap() {
- final TreeMap<K,V> treeMap = newTreeMap();
+ final TreeMap<K,V> treeMap = new TreeMap<>();
return Collections.synchronizedMap(treeMap);
}
- public static <K,V> ConcurrentHashMap<K,V> newConcurrentHashMap() {
- return new ConcurrentHashMap<K,V>();
- }
-
- public static <E> HashSet<E> newHashSet() {
- return new HashSet<E>();
- }
-
- public static <E> TreeSet<E> newTreeSet() {
- return new TreeSet<E>();
- }
-
- public static <E> ArrayList<E> newArrayList() {
- return new ArrayList<E>();
- }
-
- public static <E> ArrayList<E> newArrayList(final int initialCapacity) {
- return new ArrayList<E>(initialCapacity);
- }
-
- public static <E> ArrayList<E> newArrayList(final Collection<E> collection) {
- return new ArrayList<E>(collection);
- }
-
- public static <E> LinkedList<E> newLinkedList() {
- return new LinkedList<E>();
- }
-
- public static <E> CopyOnWriteArrayList<E> newCopyOnWriteArrayList() {
- return new CopyOnWriteArrayList<E>();
- }
-
- public static <E> CopyOnWriteArrayList<E> newCopyOnWriteArrayList(
- final Collection<E> collection) {
- return new CopyOnWriteArrayList<E>(collection);
- }
-
- public static <E> CopyOnWriteArrayList<E> newCopyOnWriteArrayList(final E[] array) {
- return new CopyOnWriteArrayList<E>(array);
- }
-
- public static <E> ArrayDeque<E> newArrayDeque() {
- return new ArrayDeque<E>();
- }
-
- public static <E> SparseArray<E> newSparseArray() {
- return new SparseArray<E>();
- }
-
public static <E> ArrayList<E> arrayAsList(final E[] array, final int start, final int end) {
if (array == null) {
throw new NullPointerException();
@@ -111,7 +39,7 @@ public final class CollectionUtils {
throw new IllegalArgumentException();
}
- final ArrayList<E> list = newArrayList(end - start);
+ final ArrayList<E> list = new ArrayList<>(end - start);
for (int i = start; i < end; i++) {
list.add(array[i]);
}
diff --git a/java/src/com/android/inputmethod/latin/utils/CsvUtils.java b/java/src/com/android/inputmethod/latin/utils/CsvUtils.java
index b18a1d83b..a21a1373b 100644
--- a/java/src/com/android/inputmethod/latin/utils/CsvUtils.java
+++ b/java/src/com/android/inputmethod/latin/utils/CsvUtils.java
@@ -209,7 +209,7 @@ public final class CsvUtils {
@UsedForTesting
public static String[] split(final int splitFlags, final String line) throws CsvParseException {
final boolean trimSpaces = (splitFlags & SPLIT_FLAGS_TRIM_SPACES) != 0;
- final ArrayList<String> fields = CollectionUtils.newArrayList();
+ final ArrayList<String> fields = new ArrayList<>();
final int length = line.length();
int start = 0;
do {
diff --git a/java/src/com/android/inputmethod/latin/utils/DictionaryInfoUtils.java b/java/src/com/android/inputmethod/latin/utils/DictionaryInfoUtils.java
index 315913e2f..d76ea10c0 100644
--- a/java/src/com/android/inputmethod/latin/utils/DictionaryInfoUtils.java
+++ b/java/src/com/android/inputmethod/latin/utils/DictionaryInfoUtils.java
@@ -336,7 +336,7 @@ public class DictionaryInfoUtils {
public static ArrayList<DictionaryInfo> getCurrentDictionaryFileNameAndVersionInfo(
final Context context) {
- final ArrayList<DictionaryInfo> dictList = CollectionUtils.newArrayList();
+ final ArrayList<DictionaryInfo> dictList = new ArrayList<>();
// Retrieve downloaded dictionaries
final File[] directoryList = getCachedDirectoryList(context);
diff --git a/java/src/com/android/inputmethod/latin/utils/DistracterFilter.java b/java/src/com/android/inputmethod/latin/utils/DistracterFilter.java
index f1057da0b..787e4a59d 100644
--- a/java/src/com/android/inputmethod/latin/utils/DistracterFilter.java
+++ b/java/src/com/android/inputmethod/latin/utils/DistracterFilter.java
@@ -16,129 +16,14 @@
package com.android.inputmethod.latin.utils;
-import java.util.ArrayList;
-import java.util.HashMap;
import java.util.List;
import java.util.Locale;
-import java.util.Map;
-import java.util.concurrent.TimeUnit;
-import android.content.Context;
-import android.content.res.Resources;
-import android.text.InputType;
-import android.util.Log;
-import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodSubtype;
-import com.android.inputmethod.keyboard.Keyboard;
-import com.android.inputmethod.keyboard.KeyboardId;
-import com.android.inputmethod.keyboard.KeyboardLayoutSet;
-import com.android.inputmethod.latin.Constants;
import com.android.inputmethod.latin.PrevWordsInfo;
-import com.android.inputmethod.latin.Suggest;
-import com.android.inputmethod.latin.Suggest.OnGetSuggestedWordsCallback;
-import com.android.inputmethod.latin.SuggestedWords;
-import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
-import com.android.inputmethod.latin.WordComposer;
-
-/**
- * This class is used to prevent distracters being added to personalization
- * or user history dictionaries
- */
-public class DistracterFilter {
- private static final String TAG = DistracterFilter.class.getSimpleName();
-
- private static final long TIMEOUT_TO_WAIT_LOADING_DICTIONARIES_IN_SECONDS = 120;
-
- private final Context mContext;
- private final Map<Locale, InputMethodSubtype> mLocaleToSubtypeMap;
- private final Map<Locale, Keyboard> mLocaleToKeyboardMap;
- private final Suggest mSuggest;
- private Keyboard mKeyboard;
-
- // If the score of the top suggestion exceeds this value, the tested word (e.g.,
- // an OOV, a misspelling, or an in-vocabulary word) would be considered as a distracter to
- // words in dictionary. The greater the threshold is, the less likely the tested word would
- // become a distracter, which means the tested word will be more likely to be added to
- // the dictionary.
- private static final float DISTRACTER_WORD_SCORE_THRESHOLD = 2.0f;
-
- // Create empty distracter filter.
- public DistracterFilter() {
- this(null, new ArrayList<InputMethodSubtype>());
- }
-
- /**
- * Create a DistracterFilter instance.
- *
- * @param context the context.
- * @param enabledSubtypes the enabled subtypes.
- */
- public DistracterFilter(final Context context, final List<InputMethodSubtype> enabledSubtypes) {
- mContext = context;
- mLocaleToSubtypeMap = new HashMap<>();
- if (enabledSubtypes != null) {
- for (final InputMethodSubtype subtype : enabledSubtypes) {
- final Locale locale = SubtypeLocaleUtils.getSubtypeLocale(subtype);
- if (mLocaleToSubtypeMap.containsKey(locale)) {
- // Multiple subtypes are enabled for one locale.
- // TODO: Investigate what we should do for this case.
- continue;
- }
- mLocaleToSubtypeMap.put(locale, subtype);
- }
- }
- mLocaleToKeyboardMap = new HashMap<>();
- mSuggest = new Suggest();
- mKeyboard = null;
- }
-
- private static boolean suggestionExceedsDistracterThreshold(
- final SuggestedWordInfo suggestion, final String consideredWord,
- final float distracterThreshold) {
- if (null != suggestion) {
- final int suggestionScore = suggestion.mScore;
- final float normalizedScore = BinaryDictionaryUtils.calcNormalizedScore(
- consideredWord, suggestion.mWord, suggestionScore);
- if (normalizedScore > distracterThreshold) {
- return true;
- }
- }
- return false;
- }
-
- private void loadKeyboardForLocale(final Locale newLocale) {
- final Keyboard cachedKeyboard = mLocaleToKeyboardMap.get(newLocale);
- if (cachedKeyboard != null) {
- mKeyboard = cachedKeyboard;
- return;
- }
- final InputMethodSubtype subtype = mLocaleToSubtypeMap.get(newLocale);
- if (subtype == null) {
- return;
- }
- final EditorInfo editorInfo = new EditorInfo();
- editorInfo.inputType = InputType.TYPE_CLASS_TEXT;
- final KeyboardLayoutSet.Builder builder = new KeyboardLayoutSet.Builder(
- mContext, editorInfo);
- final Resources res = mContext.getResources();
- final int keyboardWidth = ResourceUtils.getDefaultKeyboardWidth(res);
- final int keyboardHeight = ResourceUtils.getDefaultKeyboardHeight(res);
- builder.setKeyboardGeometry(keyboardWidth, keyboardHeight);
- builder.setSubtype(subtype);
- builder.setIsSpellChecker(false /* isSpellChecker */);
- final KeyboardLayoutSet layoutSet = builder.build();
- mKeyboard = layoutSet.getKeyboard(KeyboardId.ELEMENT_ALPHABET);
- }
-
- private void loadDictionariesForLocale(final Locale newlocale) throws InterruptedException {
- mSuggest.mDictionaryFacilitator.resetDictionaries(mContext, newlocale,
- false /* useContactsDict */, false /* usePersonalizedDicts */,
- false /* forceReloadMainDictionary */, null /* listener */);
- mSuggest.mDictionaryFacilitator.waitForLoadingMainDictionary(
- TIMEOUT_TO_WAIT_LOADING_DICTIONARIES_IN_SECONDS, TimeUnit.SECONDS);
- }
+public interface DistracterFilter {
/**
* Determine whether a word is a distracter to words in dictionaries.
*
@@ -149,56 +34,25 @@ public class DistracterFilter {
* @return true if testedWord is a distracter, otherwise false.
*/
public boolean isDistracterToWordsInDictionaries(final PrevWordsInfo prevWordsInfo,
- final String testedWord, final Locale locale) {
- if (locale == null) {
- return false;
- }
- if (!locale.equals(mSuggest.mDictionaryFacilitator.getLocale())) {
- if (!mLocaleToSubtypeMap.containsKey(locale)) {
- Log.e(TAG, "Locale " + locale + " is not enabled.");
- // TODO: Investigate what we should do for disabled locales.
- return false;
- }
- loadKeyboardForLocale(locale);
- // Reset dictionaries for the locale.
- try {
- loadDictionariesForLocale(locale);
- } catch (final InterruptedException e) {
- Log.e(TAG, "Interrupted while waiting for loading dicts in DistracterFilter", e);
- return false;
- }
- }
- if (mKeyboard == null) {
+ final String testedWord, final Locale locale);
+
+ public void updateEnabledSubtypes(final List<InputMethodSubtype> enabledSubtypes);
+
+ public void close();
+
+ public static final DistracterFilter EMPTY_DISTRACTER_FILTER = new DistracterFilter() {
+ @Override
+ public boolean isDistracterToWordsInDictionaries(PrevWordsInfo prevWordsInfo,
+ String testedWord, Locale locale) {
return false;
}
- final WordComposer composer = new WordComposer();
- final int[] codePoints = StringUtils.toCodePointArray(testedWord);
- final int[] coordinates = mKeyboard.getCoordinates(codePoints);
- composer.setComposingWord(codePoints, coordinates, prevWordsInfo);
- final int trailingSingleQuotesCount = StringUtils.getTrailingSingleQuotesCount(testedWord);
- final String consideredWord = trailingSingleQuotesCount > 0 ?
- testedWord.substring(0, testedWord.length() - trailingSingleQuotesCount) :
- testedWord;
- final AsyncResultHolder<Boolean> holder = new AsyncResultHolder<Boolean>();
- final OnGetSuggestedWordsCallback callback = new OnGetSuggestedWordsCallback() {
- @Override
- public void onGetSuggestedWords(final SuggestedWords suggestedWords) {
- if (suggestedWords != null && suggestedWords.size() > 1) {
- // The suggestedWordInfo at 0 is the typed word. The 1st suggestion from
- // the decoder is at index 1.
- final SuggestedWordInfo firstSuggestion = suggestedWords.getInfo(1);
- final boolean hasStrongDistractor = suggestionExceedsDistracterThreshold(
- firstSuggestion, consideredWord, DISTRACTER_WORD_SCORE_THRESHOLD);
- holder.set(hasStrongDistractor);
- }
- }
- };
- mSuggest.getSuggestedWords(composer, prevWordsInfo, mKeyboard.getProximityInfo(),
- true /* blockOffensiveWords */, true /* isCorrectionEnbaled */,
- null /* additionalFeaturesOptions */, 0 /* sessionId */,
- SuggestedWords.NOT_A_SEQUENCE_NUMBER, callback);
+ @Override
+ public void close() {
+ }
- return holder.get(false /* defaultValue */, Constants.GET_SUGGESTED_WORDS_TIMEOUT);
- }
+ @Override
+ public void updateEnabledSubtypes(List<InputMethodSubtype> enabledSubtypes) {
+ }
+ };
}
diff --git a/java/src/com/android/inputmethod/latin/utils/DistracterFilterUsingSuggestion.java b/java/src/com/android/inputmethod/latin/utils/DistracterFilterUsingSuggestion.java
new file mode 100644
index 000000000..b9c7f5671
--- /dev/null
+++ b/java/src/com/android/inputmethod/latin/utils/DistracterFilterUsingSuggestion.java
@@ -0,0 +1,243 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.inputmethod.latin.utils;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.text.InputType;
+import android.util.Log;
+import android.view.inputmethod.EditorInfo;
+import android.view.inputmethod.InputMethodSubtype;
+
+import com.android.inputmethod.keyboard.Keyboard;
+import com.android.inputmethod.keyboard.KeyboardId;
+import com.android.inputmethod.keyboard.KeyboardLayoutSet;
+import com.android.inputmethod.latin.Constants;
+import com.android.inputmethod.latin.Dictionary;
+import com.android.inputmethod.latin.DictionaryFacilitator;
+import com.android.inputmethod.latin.PrevWordsInfo;
+import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
+import com.android.inputmethod.latin.WordComposer;
+
+/**
+ * This class is used to prevent distracters being added to personalization
+ * or user history dictionaries
+ */
+public class DistracterFilterUsingSuggestion implements DistracterFilter {
+ private static final String TAG = DistracterFilterUsingSuggestion.class.getSimpleName();
+ private static final boolean DEBUG = false;
+
+ private static final long TIMEOUT_TO_WAIT_LOADING_DICTIONARIES_IN_SECONDS = 120;
+
+ private final Context mContext;
+ private final Map<Locale, InputMethodSubtype> mLocaleToSubtypeMap;
+ private final Map<Locale, Keyboard> mLocaleToKeyboardMap;
+ private final DictionaryFacilitator mDictionaryFacilitator;
+ private Keyboard mKeyboard;
+ private final Object mLock = new Object();
+
+ /**
+ * Create a DistracterFilter instance.
+ *
+ * @param context the context.
+ */
+ public DistracterFilterUsingSuggestion(final Context context) {
+ mContext = context;
+ mLocaleToSubtypeMap = new HashMap<>();
+ mLocaleToKeyboardMap = new HashMap<>();
+ mDictionaryFacilitator = new DictionaryFacilitator();
+ mKeyboard = null;
+ }
+
+ @Override
+ public void close() {
+ mDictionaryFacilitator.closeDictionaries();
+ }
+
+ @Override
+ public void updateEnabledSubtypes(final List<InputMethodSubtype> enabledSubtypes) {
+ final Map<Locale, InputMethodSubtype> newLocaleToSubtypeMap = new HashMap<>();
+ if (enabledSubtypes != null) {
+ for (final InputMethodSubtype subtype : enabledSubtypes) {
+ final Locale locale = SubtypeLocaleUtils.getSubtypeLocale(subtype);
+ if (newLocaleToSubtypeMap.containsKey(locale)) {
+ // Multiple subtypes are enabled for one locale.
+ // TODO: Investigate what we should do for this case.
+ continue;
+ }
+ newLocaleToSubtypeMap.put(locale, subtype);
+ }
+ }
+ if (mLocaleToSubtypeMap.equals(newLocaleToSubtypeMap)) {
+ // Enabled subtypes have not been changed.
+ return;
+ }
+ synchronized (mLock) {
+ mLocaleToSubtypeMap.clear();
+ mLocaleToSubtypeMap.putAll(newLocaleToSubtypeMap);
+ mLocaleToKeyboardMap.clear();
+ }
+ }
+
+ private boolean isDistracter(
+ final SuggestionResults suggestionResults, final String consideredWord) {
+ int perfectMatchProbability = Dictionary.NOT_A_PROBABILITY;
+ for (final SuggestedWordInfo suggestedWordInfo : suggestionResults) {
+ if (suggestedWordInfo.mWord.equals(consideredWord)) {
+ perfectMatchProbability = mDictionaryFacilitator.getFrequency(consideredWord);
+ continue;
+ }
+ // Exact match can include case errors, accent errors, digraph conversions.
+ final boolean isExactMatch = suggestedWordInfo.isExactMatch();
+ final boolean isExactMatchWithIntentionalOmission =
+ suggestedWordInfo.isExactMatchWithIntentionalOmission();
+
+ if (DEBUG) {
+ final float normalizedScore = BinaryDictionaryUtils.calcNormalizedScore(
+ consideredWord, suggestedWordInfo.mWord, suggestedWordInfo.mScore);
+ Log.d(TAG, "consideredWord: " + consideredWord);
+ Log.d(TAG, "top suggestion: " + suggestedWordInfo.mWord);
+ Log.d(TAG, "suggestionScore: " + suggestedWordInfo.mScore);
+ Log.d(TAG, "normalizedScore: " + normalizedScore);
+ Log.d(TAG, "isExactMatch: " + isExactMatch);
+ Log.d(TAG, "isExactMatchWithIntentionalOmission: "
+ + isExactMatchWithIntentionalOmission);
+ }
+ if (perfectMatchProbability != Dictionary.NOT_A_PROBABILITY) {
+ final int topNonPerfectProbability = mDictionaryFacilitator.getFrequency(
+ suggestedWordInfo.mWord);
+ if (DEBUG) {
+ Log.d(TAG, "perfectMatchProbability: " + perfectMatchProbability);
+ Log.d(TAG, "topNonPerfectProbability: " + topNonPerfectProbability);
+ }
+ if (perfectMatchProbability > topNonPerfectProbability) {
+ return false;
+ }
+ }
+ return isExactMatch || isExactMatchWithIntentionalOmission;
+ }
+ return false;
+ }
+
+ private void loadKeyboardForLocale(final Locale newLocale) {
+ final Keyboard cachedKeyboard = mLocaleToKeyboardMap.get(newLocale);
+ if (cachedKeyboard != null) {
+ mKeyboard = cachedKeyboard;
+ return;
+ }
+ final InputMethodSubtype subtype;
+ synchronized (mLock) {
+ subtype = mLocaleToSubtypeMap.get(newLocale);
+ }
+ if (subtype == null) {
+ return;
+ }
+ final EditorInfo editorInfo = new EditorInfo();
+ editorInfo.inputType = InputType.TYPE_CLASS_TEXT;
+ final KeyboardLayoutSet.Builder builder = new KeyboardLayoutSet.Builder(
+ mContext, editorInfo);
+ final Resources res = mContext.getResources();
+ final int keyboardWidth = ResourceUtils.getDefaultKeyboardWidth(res);
+ final int keyboardHeight = ResourceUtils.getDefaultKeyboardHeight(res);
+ builder.setKeyboardGeometry(keyboardWidth, keyboardHeight);
+ builder.setSubtype(subtype);
+ builder.setIsSpellChecker(false /* isSpellChecker */);
+ final KeyboardLayoutSet layoutSet = builder.build();
+ mKeyboard = layoutSet.getKeyboard(KeyboardId.ELEMENT_ALPHABET);
+ }
+
+ private void loadDictionariesForLocale(final Locale newlocale) throws InterruptedException {
+ mDictionaryFacilitator.resetDictionaries(mContext, newlocale,
+ false /* useContactsDict */, false /* usePersonalizedDicts */,
+ false /* forceReloadMainDictionary */, null /* listener */);
+ mDictionaryFacilitator.waitForLoadingMainDictionary(
+ TIMEOUT_TO_WAIT_LOADING_DICTIONARIES_IN_SECONDS, TimeUnit.SECONDS);
+ }
+
+ /**
+ * Determine whether a word is a distracter to words in dictionaries.
+ *
+ * @param prevWordsInfo the information of previous words. Not used for now.
+ * @param testedWord the word that will be tested to see whether it is a distracter to words
+ * in dictionaries.
+ * @param locale the locale of word.
+ * @return true if testedWord is a distracter, otherwise false.
+ */
+ @Override
+ public boolean isDistracterToWordsInDictionaries(final PrevWordsInfo prevWordsInfo,
+ final String testedWord, final Locale locale) {
+ if (locale == null) {
+ return false;
+ }
+ if (!locale.equals(mDictionaryFacilitator.getLocale())) {
+ synchronized (mLock) {
+ if (!mLocaleToSubtypeMap.containsKey(locale)) {
+ Log.e(TAG, "Locale " + locale + " is not enabled.");
+ // TODO: Investigate what we should do for disabled locales.
+ return false;
+ }
+ loadKeyboardForLocale(locale);
+ // Reset dictionaries for the locale.
+ try {
+ loadDictionariesForLocale(locale);
+ } catch (final InterruptedException e) {
+ Log.e(TAG, "Interrupted while waiting for loading dicts in DistracterFilter",
+ e);
+ return false;
+ }
+ }
+ }
+ if (mKeyboard == null) {
+ return false;
+ }
+ final WordComposer composer = new WordComposer();
+ final int[] codePoints = StringUtils.toCodePointArray(testedWord);
+ final int[] coordinates = mKeyboard.getCoordinates(codePoints);
+ composer.setComposingWord(codePoints, coordinates, PrevWordsInfo.EMPTY_PREV_WORDS_INFO);
+
+ final int trailingSingleQuotesCount = StringUtils.getTrailingSingleQuotesCount(testedWord);
+ final String consideredWord = trailingSingleQuotesCount > 0 ?
+ testedWord.substring(0, testedWord.length() - trailingSingleQuotesCount) :
+ testedWord;
+ final AsyncResultHolder<Boolean> holder = new AsyncResultHolder<>();
+ ExecutorUtils.getExecutor("check distracters").execute(new Runnable() {
+ @Override
+ public void run() {
+ final SuggestionResults suggestionResults =
+ mDictionaryFacilitator.getSuggestionResults(
+ composer, PrevWordsInfo.EMPTY_PREV_WORDS_INFO,
+ mKeyboard.getProximityInfo(), true /* blockOffensiveWords */,
+ null /* additionalFeaturesOptions */, 0 /* sessionId */,
+ null /* rawSuggestions */);
+ if (suggestionResults.isEmpty()) {
+ holder.set(false);
+ return;
+ }
+ holder.set(isDistracter(suggestionResults, consideredWord));
+ }
+ });
+ // It's OK to block the distracter filtering, but the dictionary lookup should be done
+ // sequentially using ExecutorUtils.
+ return holder.get(false /* defaultValue */, Constants.GET_SUGGESTED_WORDS_TIMEOUT);
+ }
+}
diff --git a/java/src/com/android/inputmethod/latin/utils/ExecutorUtils.java b/java/src/com/android/inputmethod/latin/utils/ExecutorUtils.java
index ed502ed3d..61da1b789 100644
--- a/java/src/com/android/inputmethod/latin/utils/ExecutorUtils.java
+++ b/java/src/com/android/inputmethod/latin/utils/ExecutorUtils.java
@@ -19,22 +19,42 @@ package com.android.inputmethod.latin.utils;
import com.android.inputmethod.annotations.UsedForTesting;
import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ThreadFactory;
/**
* Utilities to manage executors.
*/
public class ExecutorUtils {
- private static final ConcurrentHashMap<String, PrioritizedSerialExecutor>
- sExecutorMap = CollectionUtils.newConcurrentHashMap();
+ private static final ConcurrentHashMap<String, ExecutorService> sExecutorMap =
+ new ConcurrentHashMap<>();
+
+ private static class ThreadFactoryWithId implements ThreadFactory {
+ private final String mId;
+
+ public ThreadFactoryWithId(final String id) {
+ mId = id;
+ }
+
+ @Override
+ public Thread newThread(final Runnable r) {
+ return new Thread(r, "Executor - " + mId);
+ }
+ }
+
/**
- * Gets the executor for the given dictionary name.
+ * Gets the executor for the given id.
*/
- public static PrioritizedSerialExecutor getExecutor(final String dictName) {
- PrioritizedSerialExecutor executor = sExecutorMap.get(dictName);
+ public static ExecutorService getExecutor(final String id) {
+ ExecutorService executor = sExecutorMap.get(id);
if (executor == null) {
synchronized(sExecutorMap) {
- executor = new PrioritizedSerialExecutor();
- sExecutorMap.put(dictName, executor);
+ executor = sExecutorMap.get(id);
+ if (executor == null) {
+ executor = Executors.newSingleThreadExecutor(new ThreadFactoryWithId(id));
+ sExecutorMap.put(id, executor);
+ }
}
}
return executor;
@@ -46,7 +66,7 @@ public class ExecutorUtils {
@UsedForTesting
public static void shutdownAllExecutors() {
synchronized(sExecutorMap) {
- for (final PrioritizedSerialExecutor executor : sExecutorMap.values()) {
+ for (final ExecutorService executor : sExecutorMap.values()) {
executor.execute(new Runnable() {
@Override
public void run() {
diff --git a/java/src/com/android/inputmethod/latin/utils/FragmentUtils.java b/java/src/com/android/inputmethod/latin/utils/FragmentUtils.java
index ee2b97b2a..e300bd1d3 100644
--- a/java/src/com/android/inputmethod/latin/utils/FragmentUtils.java
+++ b/java/src/com/android/inputmethod/latin/utils/FragmentUtils.java
@@ -26,12 +26,11 @@ import com.android.inputmethod.latin.userdictionary.UserDictionaryAddWordFragmen
import com.android.inputmethod.latin.userdictionary.UserDictionaryList;
import com.android.inputmethod.latin.userdictionary.UserDictionaryLocalePicker;
import com.android.inputmethod.latin.userdictionary.UserDictionarySettings;
-import com.android.inputmethod.research.FeedbackFragment;
import java.util.HashSet;
public class FragmentUtils {
- private static final HashSet<String> sLatinImeFragments = new HashSet<String>();
+ private static final HashSet<String> sLatinImeFragments = new HashSet<>();
static {
sLatinImeFragments.add(DictionarySettingsFragment.class.getName());
sLatinImeFragments.add(AboutPreferences.class.getName());
@@ -43,7 +42,6 @@ public class FragmentUtils {
sLatinImeFragments.add(UserDictionaryList.class.getName());
sLatinImeFragments.add(UserDictionaryLocalePicker.class.getName());
sLatinImeFragments.add(UserDictionarySettings.class.getName());
- sLatinImeFragments.add(FeedbackFragment.class.getName());
}
public static boolean isValidFragment(String fragmentName) {
diff --git a/java/src/com/android/inputmethod/latin/utils/JsonUtils.java b/java/src/com/android/inputmethod/latin/utils/JsonUtils.java
index 764ef72ce..6dd8d9711 100644
--- a/java/src/com/android/inputmethod/latin/utils/JsonUtils.java
+++ b/java/src/com/android/inputmethod/latin/utils/JsonUtils.java
@@ -37,7 +37,7 @@ public final class JsonUtils {
private static final String EMPTY_STRING = "";
public static List<Object> jsonStrToList(final String s) {
- final ArrayList<Object> list = CollectionUtils.newArrayList();
+ final ArrayList<Object> list = new ArrayList<>();
final JsonReader reader = new JsonReader(new StringReader(s));
try {
reader.beginArray();
diff --git a/java/src/com/android/inputmethod/latin/utils/LanguageModelParam.java b/java/src/com/android/inputmethod/latin/utils/LanguageModelParam.java
index aaf4a4064..4248bebf6 100644
--- a/java/src/com/android/inputmethod/latin/utils/LanguageModelParam.java
+++ b/java/src/com/android/inputmethod/latin/utils/LanguageModelParam.java
@@ -19,11 +19,12 @@ package com.android.inputmethod.latin.utils;
import android.util.Log;
import com.android.inputmethod.latin.Dictionary;
-import com.android.inputmethod.latin.DictionaryFacilitatorForSuggest;
+import com.android.inputmethod.latin.DictionaryFacilitator;
import com.android.inputmethod.latin.PrevWordsInfo;
import com.android.inputmethod.latin.settings.SpacingAndPunctuations;
import java.util.ArrayList;
+import java.util.List;
import java.util.Locale;
// Note: this class is used as a parameter type of a native method. You should be careful when you
@@ -79,14 +80,13 @@ public final class LanguageModelParam {
// Process a list of words and return a list of {@link LanguageModelParam} objects.
public static ArrayList<LanguageModelParam> createLanguageModelParamsFrom(
- final ArrayList<String> tokens, final int timestamp,
- final DictionaryFacilitatorForSuggest dictionaryFacilitator,
+ final List<String> tokens, final int timestamp,
+ final DictionaryFacilitator dictionaryFacilitator,
final SpacingAndPunctuations spacingAndPunctuations,
final DistracterFilter distracterFilter) {
- final ArrayList<LanguageModelParam> languageModelParams =
- CollectionUtils.newArrayList();
+ final ArrayList<LanguageModelParam> languageModelParams = new ArrayList<>();
final int N = tokens.size();
- PrevWordsInfo prevWordsInfo = new PrevWordsInfo(null);
+ PrevWordsInfo prevWordsInfo = PrevWordsInfo.EMPTY_PREV_WORDS_INFO;
for (int i = 0; i < N; ++i) {
final String tempWord = tokens.get(i);
if (StringUtils.isEmptyStringOrWhiteSpaces(tempWord)) {
@@ -103,7 +103,7 @@ public final class LanguageModelParam {
+ tempWord + "\"");
}
// Sentence terminator found. Split.
- prevWordsInfo = new PrevWordsInfo(null);
+ prevWordsInfo = PrevWordsInfo.EMPTY_PREV_WORDS_INFO;
continue;
}
if (DEBUG_TOKEN) {
@@ -124,43 +124,33 @@ public final class LanguageModelParam {
private static LanguageModelParam detectWhetherVaildWordOrNotAndGetLanguageModelParam(
final PrevWordsInfo prevWordsInfo, final String targetWord, final int timestamp,
- final DictionaryFacilitatorForSuggest dictionaryFacilitator,
+ final DictionaryFacilitator dictionaryFacilitator,
final DistracterFilter distracterFilter) {
final Locale locale = dictionaryFacilitator.getLocale();
if (locale == null) {
return null;
}
- // TODO: Though targetWord is an IV (in-vocabulary) word, we should still apply
- // distracterFilter in the following code. If targetWord is a distracter,
- // it should be filtered out.
if (dictionaryFacilitator.isValidWord(targetWord, false /* ignoreCase */)) {
return createAndGetLanguageModelParamOfWord(prevWordsInfo, targetWord, timestamp,
- true /* isValidWord */, locale);
+ true /* isValidWord */, locale, distracterFilter);
}
final String lowerCaseTargetWord = targetWord.toLowerCase(locale);
if (dictionaryFacilitator.isValidWord(lowerCaseTargetWord, false /* ignoreCase */)) {
// Add the lower-cased word.
return createAndGetLanguageModelParamOfWord(prevWordsInfo, lowerCaseTargetWord,
- timestamp, true /* isValidWord */, locale);
+ timestamp, true /* isValidWord */, locale, distracterFilter);
}
- // Treat the word as an OOV word. The following statement checks whether this OOV
- // is a distracter to words in dictionaries. Being a distracter means the OOV word is
- // too close to a common word in dictionaries (e.g., the OOV "mot" is very close to "not").
- // Adding such a word to dictonaries would interfere with entering in-dictionary words. For
- // example, adding "mot" to dictionaries might interfere with entering "not".
- // This kind of OOV should be filtered out.
- if (distracterFilter.isDistracterToWordsInDictionaries(prevWordsInfo, targetWord, locale)) {
- return null;
- }
+ // Treat the word as an OOV word.
return createAndGetLanguageModelParamOfWord(prevWordsInfo, targetWord, timestamp,
- false /* isValidWord */, locale);
+ false /* isValidWord */, locale, distracterFilter);
}
private static LanguageModelParam createAndGetLanguageModelParamOfWord(
final PrevWordsInfo prevWordsInfo, final String targetWord, final int timestamp,
- final boolean isValidWord, final Locale locale) {
+ final boolean isValidWord, final Locale locale,
+ final DistracterFilter distracterFilter) {
final String word;
if (StringUtils.getCapitalizationType(targetWord) == StringUtils.CAPITALIZE_FIRST
&& prevWordsInfo.mPrevWord == null && !isValidWord) {
@@ -168,6 +158,13 @@ public final class LanguageModelParam {
} else {
word = targetWord;
}
+ // Check whether the word is a distracter to words in the dictionaries.
+ if (distracterFilter.isDistracterToWordsInDictionaries(prevWordsInfo, word, locale)) {
+ if (DEBUG) {
+ Log.d(TAG, "The word (" + word + ") is a distracter. Skip this word.");
+ }
+ return null;
+ }
final int unigramProbability = isValidWord ?
UNIGRAM_PROBABILITY_FOR_VALID_WORD : UNIGRAM_PROBABILITY_FOR_OOV_WORD;
if (prevWordsInfo.mPrevWord == null) {
diff --git a/java/src/com/android/inputmethod/latin/utils/LatinImeLoggerUtils.java b/java/src/com/android/inputmethod/latin/utils/LatinImeLoggerUtils.java
deleted file mode 100644
index d14ba508b..000000000
--- a/java/src/com/android/inputmethod/latin/utils/LatinImeLoggerUtils.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.latin.utils;
-
-import android.text.TextUtils;
-
-import com.android.inputmethod.latin.Constants;
-import com.android.inputmethod.latin.LatinImeLogger;
-import com.android.inputmethod.latin.WordComposer;
-
-public final class LatinImeLoggerUtils {
- private LatinImeLoggerUtils() {
- // This utility class is not publicly instantiable.
- }
-
- public static void onNonSeparator(final char code, final int x, final int y) {
- UserLogRingCharBuffer.getInstance().push(code, x, y);
- LatinImeLogger.logOnInputChar();
- }
-
- public static void onSeparator(final int code, final int x, final int y) {
- // Helper method to log a single code point separator
- // TODO: cache this mapping of a code point to a string in a sparse array in StringUtils
- onSeparator(StringUtils.newSingleCodePointString(code), x, y);
- }
-
- public static void onSeparator(final String separator, final int x, final int y) {
- final int length = separator.length();
- for (int i = 0; i < length; i = Character.offsetByCodePoints(separator, i, 1)) {
- int codePoint = Character.codePointAt(separator, i);
- // TODO: accept code points
- UserLogRingCharBuffer.getInstance().push((char)codePoint, x, y);
- }
- LatinImeLogger.logOnInputSeparator();
- }
-
- public static void onAutoCorrection(final String typedWord, final String correctedWord,
- final String separatorString, final WordComposer wordComposer) {
- final boolean isBatchMode = wordComposer.isBatchMode();
- if (!isBatchMode && TextUtils.isEmpty(typedWord)) {
- return;
- }
- // TODO: this fails when the separator is more than 1 code point long, but
- // the backend can't handle it yet. The only case when this happens is with
- // smileys and other multi-character keys.
- final int codePoint = TextUtils.isEmpty(separatorString) ? Constants.NOT_A_CODE
- : separatorString.codePointAt(0);
- if (!isBatchMode) {
- LatinImeLogger.logOnAutoCorrectionForTyping(typedWord, correctedWord, codePoint);
- } else {
- if (!TextUtils.isEmpty(correctedWord)) {
- // We must make sure that InputPointer contains only the relative timestamps,
- // not actual timestamps.
- LatinImeLogger.logOnAutoCorrectionForGeometric(
- "", correctedWord, codePoint, wordComposer.getInputPointers());
- }
- }
- }
-
- public static void onAutoCorrectionCancellation() {
- LatinImeLogger.logOnAutoCorrectionCancelled();
- }
-}
diff --git a/java/src/com/android/inputmethod/latin/utils/LeakGuardHandlerWrapper.java b/java/src/com/android/inputmethod/latin/utils/LeakGuardHandlerWrapper.java
index 8469c87b0..dd6fac671 100644
--- a/java/src/com/android/inputmethod/latin/utils/LeakGuardHandlerWrapper.java
+++ b/java/src/com/android/inputmethod/latin/utils/LeakGuardHandlerWrapper.java
@@ -33,7 +33,7 @@ public class LeakGuardHandlerWrapper<T> extends Handler {
if (ownerInstance == null) {
throw new NullPointerException("ownerInstance is null");
}
- mOwnerInstanceRef = new WeakReference<T>(ownerInstance);
+ mOwnerInstanceRef = new WeakReference<>(ownerInstance);
}
public T getOwnerInstance() {
diff --git a/java/src/com/android/inputmethod/latin/utils/LocaleUtils.java b/java/src/com/android/inputmethod/latin/utils/LocaleUtils.java
index 0c55484b4..c519a0de6 100644
--- a/java/src/com/android/inputmethod/latin/utils/LocaleUtils.java
+++ b/java/src/com/android/inputmethod/latin/utils/LocaleUtils.java
@@ -159,7 +159,7 @@ public final class LocaleUtils {
return LOCALE_MATCH <= level;
}
- private static final HashMap<String, Locale> sLocaleCache = CollectionUtils.newHashMap();
+ private static final HashMap<String, Locale> sLocaleCache = new HashMap<>();
/**
* Creates a locale from a string specification.
diff --git a/java/src/com/android/inputmethod/latin/utils/PrioritizedSerialExecutor.java b/java/src/com/android/inputmethod/latin/utils/PrioritizedSerialExecutor.java
deleted file mode 100644
index bf38abc95..000000000
--- a/java/src/com/android/inputmethod/latin/utils/PrioritizedSerialExecutor.java
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.latin.utils;
-
-import com.android.inputmethod.annotations.UsedForTesting;
-
-import java.util.Queue;
-import java.util.concurrent.ArrayBlockingQueue;
-import java.util.concurrent.ConcurrentLinkedQueue;
-import java.util.concurrent.ThreadPoolExecutor;
-import java.util.concurrent.TimeUnit;
-
-/**
- * An object that executes submitted tasks using a thread.
- */
-public class PrioritizedSerialExecutor {
- public static final String TAG = PrioritizedSerialExecutor.class.getSimpleName();
-
- private final Object mLock = new Object();
-
- private final Queue<Runnable> mTasks;
- private final Queue<Runnable> mPrioritizedTasks;
- private boolean mIsShutdown;
- private final ThreadPoolExecutor mThreadPoolExecutor;
-
- // The task which is running now.
- private Runnable mActive;
-
- public PrioritizedSerialExecutor() {
- mTasks = new ConcurrentLinkedQueue<Runnable>();
- mPrioritizedTasks = new ConcurrentLinkedQueue<Runnable>();
- mIsShutdown = false;
- mThreadPoolExecutor = new ThreadPoolExecutor(1 /* corePoolSize */, 1 /* maximumPoolSize */,
- 0 /* keepAliveTime */, TimeUnit.MILLISECONDS, new ArrayBlockingQueue<Runnable>(1));
- }
-
- /**
- * Enqueues the given task into the task queue.
- * @param r the enqueued task
- */
- public void execute(final Runnable r) {
- synchronized(mLock) {
- if (!mIsShutdown) {
- mTasks.offer(new Runnable() {
- @Override
- public void run() {
- try {
- r.run();
- } finally {
- scheduleNext();
- }
- }
- });
- if (mActive == null) {
- scheduleNext();
- }
- }
- }
- }
-
- /**
- * Enqueues the given task into the prioritized task queue.
- * @param r the enqueued task
- */
- @UsedForTesting
- public void executePrioritized(final Runnable r) {
- synchronized(mLock) {
- if (!mIsShutdown) {
- mPrioritizedTasks.offer(new Runnable() {
- @Override
- public void run() {
- try {
- r.run();
- } finally {
- scheduleNext();
- }
- }
- });
- if (mActive == null) {
- scheduleNext();
- }
- }
- }
- }
-
- private boolean fetchNextTasksLocked() {
- mActive = mPrioritizedTasks.poll();
- if (mActive == null) {
- mActive = mTasks.poll();
- }
- return mActive != null;
- }
-
- private void scheduleNext() {
- synchronized(mLock) {
- if (fetchNextTasksLocked()) {
- mThreadPoolExecutor.execute(mActive);
- }
- }
- }
-
- public void shutdown() {
- synchronized(mLock) {
- mIsShutdown = true;
- mThreadPoolExecutor.shutdown();
- }
- }
-}
diff --git a/java/src/com/android/inputmethod/latin/utils/ResourceUtils.java b/java/src/com/android/inputmethod/latin/utils/ResourceUtils.java
index 49f4929b4..093c5a6c1 100644
--- a/java/src/com/android/inputmethod/latin/utils/ResourceUtils.java
+++ b/java/src/com/android/inputmethod/latin/utils/ResourceUtils.java
@@ -41,8 +41,7 @@ public final class ResourceUtils {
// This utility class is not publicly instantiable.
}
- private static final HashMap<String, String> sDeviceOverrideValueMap =
- CollectionUtils.newHashMap();
+ private static final HashMap<String, String> sDeviceOverrideValueMap = new HashMap<>();
private static final String[] BUILD_KEYS_AND_VALUES = {
"HARDWARE", Build.HARDWARE,
@@ -54,8 +53,8 @@ public final class ResourceUtils {
private static final String sBuildKeyValuesDebugString;
static {
- sBuildKeyValues = CollectionUtils.newHashMap();
- final ArrayList<String> keyValuePairs = CollectionUtils.newArrayList();
+ sBuildKeyValues = new HashMap<>();
+ final ArrayList<String> keyValuePairs = new ArrayList<>();
final int keyCount = BUILD_KEYS_AND_VALUES.length / 2;
for (int i = 0; i < keyCount; i++) {
final int index = i * 2;
diff --git a/java/src/com/android/inputmethod/latin/utils/StringUtils.java b/java/src/com/android/inputmethod/latin/utils/StringUtils.java
index 73ac9a573..4ed0f0a94 100644
--- a/java/src/com/android/inputmethod/latin/utils/StringUtils.java
+++ b/java/src/com/android/inputmethod/latin/utils/StringUtils.java
@@ -28,7 +28,6 @@ import java.util.Arrays;
import java.util.Locale;
public final class StringUtils {
- private static final String TAG = StringUtils.class.getSimpleName();
public static final int CAPITALIZE_NONE = 0; // No caps, or mixed case
public static final int CAPITALIZE_FIRST = 1; // First only
public static final int CAPITALIZE_ALL = 2; // All caps
@@ -110,7 +109,7 @@ public final class StringUtils {
if (!containsInArray(text, elements)) {
return extraValues;
}
- final ArrayList<String> result = CollectionUtils.newArrayList(elements.length - 1);
+ final ArrayList<String> result = new ArrayList<>(elements.length - 1);
for (final String element : elements) {
if (!text.equals(element)) {
result.add(element);
diff --git a/java/src/com/android/inputmethod/latin/utils/SubtypeLocaleUtils.java b/java/src/com/android/inputmethod/latin/utils/SubtypeLocaleUtils.java
index 938d27122..351d01400 100644
--- a/java/src/com/android/inputmethod/latin/utils/SubtypeLocaleUtils.java
+++ b/java/src/com/android/inputmethod/latin/utils/SubtypeLocaleUtils.java
@@ -49,17 +49,14 @@ public final class SubtypeLocaleUtils {
private static Resources sResources;
private static String[] sPredefinedKeyboardLayoutSet;
// Keyboard layout to its display name map.
- private static final HashMap<String, String> sKeyboardLayoutToDisplayNameMap =
- CollectionUtils.newHashMap();
+ private static final HashMap<String, String> sKeyboardLayoutToDisplayNameMap = new HashMap<>();
// Keyboard layout to subtype name resource id map.
- private static final HashMap<String, Integer> sKeyboardLayoutToNameIdsMap =
- CollectionUtils.newHashMap();
+ private static final HashMap<String, Integer> sKeyboardLayoutToNameIdsMap = new HashMap<>();
// Exceptional locale to subtype name resource id map.
- private static final HashMap<String, Integer> sExceptionalLocaleToNameIdsMap =
- CollectionUtils.newHashMap();
+ private static final HashMap<String, Integer> sExceptionalLocaleToNameIdsMap = new HashMap<>();
// Exceptional locale to subtype name with layout resource id map.
private static final HashMap<String, Integer> sExceptionalLocaleToWithLayoutNameIdsMap =
- CollectionUtils.newHashMap();
+ new HashMap<>();
private static final String SUBTYPE_NAME_RESOURCE_PREFIX =
"string/subtype_";
private static final String SUBTYPE_NAME_RESOURCE_GENERIC_PREFIX =
@@ -71,7 +68,7 @@ public final class SubtypeLocaleUtils {
// Keyboard layout set name for the subtypes that don't have a keyboardLayoutSet extra value.
// This is for compatibility to keep the same subtype ids as pre-JellyBean.
private static final HashMap<String, String> sLocaleAndExtraValueToKeyboardLayoutSetMap =
- CollectionUtils.newHashMap();
+ new HashMap<>();
private SubtypeLocaleUtils() {
// Intentional empty constructor for utility class.
diff --git a/java/src/com/android/inputmethod/latin/utils/TargetPackageInfoGetterTask.java b/java/src/com/android/inputmethod/latin/utils/TargetPackageInfoGetterTask.java
index 42ea3c959..ab2b00e36 100644
--- a/java/src/com/android/inputmethod/latin/utils/TargetPackageInfoGetterTask.java
+++ b/java/src/com/android/inputmethod/latin/utils/TargetPackageInfoGetterTask.java
@@ -27,8 +27,7 @@ import com.android.inputmethod.compat.AppWorkaroundsUtils;
public final class TargetPackageInfoGetterTask extends
AsyncTask<String, Void, PackageInfo> {
private static final int MAX_CACHE_ENTRIES = 64; // arbitrary
- private static final LruCache<String, PackageInfo> sCache =
- new LruCache<String, PackageInfo>(MAX_CACHE_ENTRIES);
+ private static final LruCache<String, PackageInfo> sCache = new LruCache<>(MAX_CACHE_ENTRIES);
public static PackageInfo getCachedPackageInfo(final String packageName) {
if (null == packageName) return null;
diff --git a/java/src/com/android/inputmethod/latin/utils/TypefaceUtils.java b/java/src/com/android/inputmethod/latin/utils/TypefaceUtils.java
index 087a7f255..fafba79c2 100644
--- a/java/src/com/android/inputmethod/latin/utils/TypefaceUtils.java
+++ b/java/src/com/android/inputmethod/latin/utils/TypefaceUtils.java
@@ -30,7 +30,7 @@ public final class TypefaceUtils {
}
// This sparse array caches key label text height in pixel indexed by key label text size.
- private static final SparseArray<Float> sTextHeightCache = CollectionUtils.newSparseArray();
+ private static final SparseArray<Float> sTextHeightCache = new SparseArray<>();
// Working variable for the following method.
private static final Rect sTextHeightBounds = new Rect();
@@ -50,7 +50,7 @@ public final class TypefaceUtils {
}
// This sparse array caches key label text width in pixel indexed by key label text size.
- private static final SparseArray<Float> sTextWidthCache = CollectionUtils.newSparseArray();
+ private static final SparseArray<Float> sTextWidthCache = new SparseArray<>();
// Working variable for the following method.
private static final Rect sTextWidthBounds = new Rect();
diff --git a/java/src/com/android/inputmethod/latin/utils/UsabilityStudyLogUtils.java b/java/src/com/android/inputmethod/latin/utils/UsabilityStudyLogUtils.java
deleted file mode 100644
index 06826dac0..000000000
--- a/java/src/com/android/inputmethod/latin/utils/UsabilityStudyLogUtils.java
+++ /dev/null
@@ -1,293 +0,0 @@
-/*
- * Copyright (C) 2016 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.latin.utils;
-
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.inputmethodservice.InputMethodService;
-import android.net.Uri;
-import android.os.Environment;
-import android.os.Handler;
-import android.os.HandlerThread;
-import android.os.Process;
-import android.util.Log;
-import android.view.MotionEvent;
-
-import com.android.inputmethod.latin.LatinImeLogger;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.PrintWriter;
-import java.nio.channels.FileChannel;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.Locale;
-
-public final class UsabilityStudyLogUtils {
- // TODO: remove code duplication with ResearchLog class
- private static final String USABILITY_TAG = UsabilityStudyLogUtils.class.getSimpleName();
- private static final String FILENAME = "log.txt";
- private final Handler mLoggingHandler;
- private File mFile;
- private File mDirectory;
- private InputMethodService mIms;
- private PrintWriter mWriter;
- private final Date mDate;
- private final SimpleDateFormat mDateFormat;
-
- private UsabilityStudyLogUtils() {
- mDate = new Date();
- mDateFormat = new SimpleDateFormat("yyyyMMdd-HHmmss.SSSZ", Locale.US);
-
- HandlerThread handlerThread = new HandlerThread("UsabilityStudyLogUtils logging task",
- Process.THREAD_PRIORITY_BACKGROUND);
- handlerThread.start();
- mLoggingHandler = new Handler(handlerThread.getLooper());
- }
-
- // Initialization-on-demand holder
- private static final class OnDemandInitializationHolder {
- public static final UsabilityStudyLogUtils sInstance = new UsabilityStudyLogUtils();
- }
-
- public static UsabilityStudyLogUtils getInstance() {
- return OnDemandInitializationHolder.sInstance;
- }
-
- public void init(final InputMethodService ims) {
- mIms = ims;
- mDirectory = ims.getFilesDir();
- }
-
- private void createLogFileIfNotExist() {
- if ((mFile == null || !mFile.exists())
- && (mDirectory != null && mDirectory.exists())) {
- try {
- mWriter = getPrintWriter(mDirectory, FILENAME, false);
- } catch (final IOException e) {
- Log.e(USABILITY_TAG, "Can't create log file.");
- }
- }
- }
-
- public static void writeBackSpace(final int x, final int y) {
- UsabilityStudyLogUtils.getInstance().write("<backspace>\t" + x + "\t" + y);
- }
-
- public static void writeChar(final char c, final int x, final int y) {
- String inputChar = String.valueOf(c);
- switch (c) {
- case '\n':
- inputChar = "<enter>";
- break;
- case '\t':
- inputChar = "<tab>";
- break;
- case ' ':
- inputChar = "<space>";
- break;
- }
- UsabilityStudyLogUtils.getInstance().write(inputChar + "\t" + x + "\t" + y);
- LatinImeLogger.onPrintAllUsabilityStudyLogs();
- }
-
- public static void writeMotionEvent(final MotionEvent me) {
- final int action = me.getActionMasked();
- final long eventTime = me.getEventTime();
- final int pointerCount = me.getPointerCount();
- for (int index = 0; index < pointerCount; index++) {
- final int id = me.getPointerId(index);
- final int x = (int)me.getX(index);
- final int y = (int)me.getY(index);
- final float size = me.getSize(index);
- final float pressure = me.getPressure(index);
-
- final String eventTag;
- switch (action) {
- case MotionEvent.ACTION_UP:
- eventTag = "[Up]";
- break;
- case MotionEvent.ACTION_DOWN:
- eventTag = "[Down]";
- break;
- case MotionEvent.ACTION_POINTER_UP:
- eventTag = "[PointerUp]";
- break;
- case MotionEvent.ACTION_POINTER_DOWN:
- eventTag = "[PointerDown]";
- break;
- case MotionEvent.ACTION_MOVE:
- eventTag = "[Move]";
- break;
- default:
- eventTag = "[Action" + action + "]";
- break;
- }
- getInstance().write(eventTag + eventTime + "," + id + "," + x + "," + y + "," + size
- + "," + pressure);
- }
- }
-
- public void write(final String log) {
- mLoggingHandler.post(new Runnable() {
- @Override
- public void run() {
- createLogFileIfNotExist();
- final long currentTime = System.currentTimeMillis();
- mDate.setTime(currentTime);
-
- final String printString = String.format(Locale.US, "%s\t%d\t%s\n",
- mDateFormat.format(mDate), currentTime, log);
- if (LatinImeLogger.sDBG) {
- Log.d(USABILITY_TAG, "Write: " + log);
- }
- mWriter.print(printString);
- }
- });
- }
-
- private synchronized String getBufferedLogs() {
- mWriter.flush();
- final StringBuilder sb = new StringBuilder();
- final BufferedReader br = getBufferedReader();
- String line;
- try {
- while ((line = br.readLine()) != null) {
- sb.append('\n');
- sb.append(line);
- }
- } catch (final IOException e) {
- Log.e(USABILITY_TAG, "Can't read log file.");
- } finally {
- if (LatinImeLogger.sDBG) {
- Log.d(USABILITY_TAG, "Got all buffered logs\n" + sb.toString());
- }
- try {
- br.close();
- } catch (final IOException e) {
- // ignore.
- }
- }
- return sb.toString();
- }
-
- public void emailResearcherLogsAll() {
- mLoggingHandler.post(new Runnable() {
- @Override
- public void run() {
- final Date date = new Date();
- date.setTime(System.currentTimeMillis());
- final String currentDateTimeString =
- new SimpleDateFormat("yyyyMMdd-HHmmssZ", Locale.US).format(date);
- if (mFile == null) {
- Log.w(USABILITY_TAG, "No internal log file found.");
- return;
- }
- if (mIms.checkCallingOrSelfPermission(
- android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
- != PackageManager.PERMISSION_GRANTED) {
- Log.w(USABILITY_TAG, "Doesn't have the permission WRITE_EXTERNAL_STORAGE");
- return;
- }
- mWriter.flush();
- final String destPath = Environment.getExternalStorageDirectory()
- + "/research-" + currentDateTimeString + ".log";
- final File destFile = new File(destPath);
- try {
- final FileInputStream srcStream = new FileInputStream(mFile);
- final FileOutputStream destStream = new FileOutputStream(destFile);
- final FileChannel src = srcStream.getChannel();
- final FileChannel dest = destStream.getChannel();
- src.transferTo(0, src.size(), dest);
- src.close();
- srcStream.close();
- dest.close();
- destStream.close();
- } catch (final FileNotFoundException e1) {
- Log.w(USABILITY_TAG, e1);
- return;
- } catch (final IOException e2) {
- Log.w(USABILITY_TAG, e2);
- return;
- }
- if (!destFile.exists()) {
- Log.w(USABILITY_TAG, "Dest file doesn't exist.");
- return;
- }
- final Intent intent = new Intent(Intent.ACTION_SEND);
- intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- if (LatinImeLogger.sDBG) {
- Log.d(USABILITY_TAG, "Destination file URI is " + destFile.toURI());
- }
- intent.setType("text/plain");
- intent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://" + destPath));
- intent.putExtra(Intent.EXTRA_SUBJECT,
- "[Research Logs] " + currentDateTimeString);
- mIms.startActivity(intent);
- }
- });
- }
-
- public void printAll() {
- mLoggingHandler.post(new Runnable() {
- @Override
- public void run() {
- mIms.getCurrentInputConnection().commitText(getBufferedLogs(), 0);
- }
- });
- }
-
- public void clearAll() {
- mLoggingHandler.post(new Runnable() {
- @Override
- public void run() {
- if (mFile != null && mFile.exists()) {
- if (LatinImeLogger.sDBG) {
- Log.d(USABILITY_TAG, "Delete log file.");
- }
- mFile.delete();
- mWriter.close();
- }
- }
- });
- }
-
- private BufferedReader getBufferedReader() {
- createLogFileIfNotExist();
- try {
- return new BufferedReader(new FileReader(mFile));
- } catch (final FileNotFoundException e) {
- return null;
- }
- }
-
- private PrintWriter getPrintWriter(final File dir, final String filename,
- final boolean renew) throws IOException {
- mFile = new File(dir, filename);
- if (mFile.exists()) {
- if (renew) {
- mFile.delete();
- }
- }
- return new PrintWriter(new FileOutputStream(mFile), true /* autoFlush */);
- }
-}
diff --git a/java/src/com/android/inputmethod/latin/utils/UserLogRingCharBuffer.java b/java/src/com/android/inputmethod/latin/utils/UserLogRingCharBuffer.java
deleted file mode 100644
index a75d353c9..000000000
--- a/java/src/com/android/inputmethod/latin/utils/UserLogRingCharBuffer.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.latin.utils;
-
-import android.inputmethodservice.InputMethodService;
-
-import com.android.inputmethod.annotations.UsedForTesting;
-import com.android.inputmethod.latin.LatinImeLogger;
-import com.android.inputmethod.latin.settings.Settings;
-
-public final class UserLogRingCharBuffer {
- public /* for test */ static final int BUFSIZE = 20;
- public /* for test */ int mLength = 0;
-
- private static UserLogRingCharBuffer sUserLogRingCharBuffer = new UserLogRingCharBuffer();
- private static final char PLACEHOLDER_DELIMITER_CHAR = '\uFFFC';
- private static final int INVALID_COORDINATE = -2;
- private boolean mEnabled = false;
- private int mEnd = 0;
- private char[] mCharBuf = new char[BUFSIZE];
- private int[] mXBuf = new int[BUFSIZE];
- private int[] mYBuf = new int[BUFSIZE];
-
- private UserLogRingCharBuffer() {
- // Intentional empty constructor for singleton.
- }
-
- @UsedForTesting
- public static UserLogRingCharBuffer getInstance() {
- return sUserLogRingCharBuffer;
- }
-
- public static UserLogRingCharBuffer init(final InputMethodService context,
- final boolean enabled, final boolean usabilityStudy) {
- if (!(enabled || usabilityStudy)) {
- return null;
- }
- sUserLogRingCharBuffer.mEnabled = true;
- UsabilityStudyLogUtils.getInstance().init(context);
- return sUserLogRingCharBuffer;
- }
-
- private static int normalize(final int in) {
- int ret = in % BUFSIZE;
- return ret < 0 ? ret + BUFSIZE : ret;
- }
-
- // TODO: accept code points
- @UsedForTesting
- public void push(final char c, final int x, final int y) {
- if (!mEnabled) {
- return;
- }
- if (LatinImeLogger.sUsabilityStudy) {
- UsabilityStudyLogUtils.getInstance().writeChar(c, x, y);
- }
- mCharBuf[mEnd] = c;
- mXBuf[mEnd] = x;
- mYBuf[mEnd] = y;
- mEnd = normalize(mEnd + 1);
- if (mLength < BUFSIZE) {
- ++mLength;
- }
- }
-
- public char pop() {
- if (mLength < 1) {
- return PLACEHOLDER_DELIMITER_CHAR;
- }
- mEnd = normalize(mEnd - 1);
- --mLength;
- return mCharBuf[mEnd];
- }
-
- public char getBackwardNthChar(final int n) {
- if (mLength <= n || n < 0) {
- return PLACEHOLDER_DELIMITER_CHAR;
- }
- return mCharBuf[normalize(mEnd - n - 1)];
- }
-
- public int getPreviousX(final char c, final int back) {
- final int index = normalize(mEnd - 2 - back);
- if (mLength <= back
- || Character.toLowerCase(c) != Character.toLowerCase(mCharBuf[index])) {
- return INVALID_COORDINATE;
- }
- return mXBuf[index];
- }
-
- public int getPreviousY(final char c, final int back) {
- int index = normalize(mEnd - 2 - back);
- if (mLength <= back
- || Character.toLowerCase(c) != Character.toLowerCase(mCharBuf[index])) {
- return INVALID_COORDINATE;
- }
- return mYBuf[index];
- }
-
- public String getLastWord(final int ignoreCharCount) {
- final StringBuilder sb = new StringBuilder();
- int i = ignoreCharCount;
- for (; i < mLength; ++i) {
- final char c = mCharBuf[normalize(mEnd - 1 - i)];
- if (!Settings.getInstance().isWordSeparator(c)) {
- break;
- }
- }
- for (; i < mLength; ++i) {
- char c = mCharBuf[normalize(mEnd - 1 - i)];
- if (!Settings.getInstance().isWordSeparator(c)) {
- sb.append(c);
- } else {
- break;
- }
- }
- return sb.reverse().toString();
- }
-
- public void reset() {
- mLength = 0;
- }
-}
diff --git a/java/src/com/android/inputmethod/research/BootBroadcastReceiver.java b/java/src/com/android/inputmethod/research/BootBroadcastReceiver.java
deleted file mode 100644
index 4f86526a7..000000000
--- a/java/src/com/android/inputmethod/research/BootBroadcastReceiver.java
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.research;
-
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-
-/**
- * Arrange for the uploading service to be run on regular intervals.
- */
-public final class BootBroadcastReceiver extends BroadcastReceiver {
- @Override
- public void onReceive(final Context context, final Intent intent) {
- if (intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
- UploaderService.cancelAndRescheduleUploadingService(context,
- true /* needsRescheduling */);
- }
- }
-}
diff --git a/java/src/com/android/inputmethod/research/FeedbackActivity.java b/java/src/com/android/inputmethod/research/FeedbackActivity.java
deleted file mode 100644
index 520b88d2f..000000000
--- a/java/src/com/android/inputmethod/research/FeedbackActivity.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.research;
-
-import android.app.Activity;
-import android.os.Bundle;
-
-import com.android.inputmethod.latin.R;
-
-public class FeedbackActivity extends Activity {
- @Override
- protected void onCreate(final Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.research_feedback_activity);
- final FeedbackLayout layout = (FeedbackLayout) findViewById(R.id.research_feedback_layout);
- layout.setActivity(this);
- }
-
- @Override
- public void onBackPressed() {
- ResearchLogger.getInstance().onLeavingSendFeedbackDialog();
- super.onBackPressed();
- }
-}
diff --git a/java/src/com/android/inputmethod/research/FeedbackFragment.java b/java/src/com/android/inputmethod/research/FeedbackFragment.java
deleted file mode 100644
index 75fbbf1ba..000000000
--- a/java/src/com/android/inputmethod/research/FeedbackFragment.java
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.research;
-
-import android.app.Fragment;
-import android.os.Bundle;
-import android.text.Editable;
-import android.text.TextUtils;
-import android.util.Log;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.view.ViewGroup;
-import android.widget.Button;
-import android.widget.CheckBox;
-import android.widget.EditText;
-import android.widget.Toast;
-
-import com.android.inputmethod.latin.R;
-
-public class FeedbackFragment extends Fragment implements OnClickListener {
- private static final String TAG = FeedbackFragment.class.getSimpleName();
-
- public static final String KEY_FEEDBACK_STRING = "FeedbackString";
- public static final String KEY_INCLUDE_ACCOUNT_NAME = "IncludeAccountName";
- public static final String KEY_HAS_USER_RECORDING = "HasRecording";
-
- private EditText mEditText;
- private CheckBox mIncludingAccountNameCheckBox;
- private CheckBox mIncludingUserRecordingCheckBox;
- private Button mSendButton;
- private Button mCancelButton;
-
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- final View view = inflater.inflate(R.layout.research_feedback_fragment_layout, container,
- false);
- mEditText = (EditText) view.findViewById(R.id.research_feedback_contents);
- mEditText.requestFocus();
- mIncludingAccountNameCheckBox = (CheckBox) view.findViewById(
- R.id.research_feedback_include_account_name);
- mIncludingUserRecordingCheckBox = (CheckBox) view.findViewById(
- R.id.research_feedback_include_recording_checkbox);
- mIncludingUserRecordingCheckBox.setOnClickListener(this);
-
- mSendButton = (Button) view.findViewById(R.id.research_feedback_send_button);
- mSendButton.setOnClickListener(this);
- mCancelButton = (Button) view.findViewById(R.id.research_feedback_cancel_button);
- mCancelButton.setOnClickListener(this);
-
- if (savedInstanceState != null) {
- restoreState(savedInstanceState);
- } else {
- final Bundle bundle = getActivity().getIntent().getExtras();
- if (bundle != null) {
- restoreState(bundle);
- }
- }
- return view;
- }
-
- @Override
- public void onClick(final View view) {
- final ResearchLogger researchLogger = ResearchLogger.getInstance();
- if (view == mIncludingUserRecordingCheckBox) {
- if (mIncludingUserRecordingCheckBox.isChecked()) {
- final Bundle bundle = new Bundle();
- onSaveInstanceState(bundle);
-
- // Let the user make a recording
- getActivity().finish();
-
- researchLogger.setFeedbackDialogBundle(bundle);
- researchLogger.onLeavingSendFeedbackDialog();
- researchLogger.startRecording();
- }
- } else if (view == mSendButton) {
- final Editable editable = mEditText.getText();
- final String feedbackContents = editable.toString();
- if (TextUtils.isEmpty(feedbackContents)) {
- Toast.makeText(getActivity(),
- R.string.research_feedback_empty_feedback_error_message,
- Toast.LENGTH_LONG).show();
- } else {
- final boolean isIncludingAccountName = mIncludingAccountNameCheckBox.isChecked();
- researchLogger.sendFeedback(feedbackContents, false /* isIncludingHistory */,
- isIncludingAccountName, mIncludingUserRecordingCheckBox.isChecked());
- getActivity().finish();
- researchLogger.setFeedbackDialogBundle(null);
- researchLogger.onLeavingSendFeedbackDialog();
- }
- } else if (view == mCancelButton) {
- Log.d(TAG, "Finishing");
- getActivity().finish();
- researchLogger.setFeedbackDialogBundle(null);
- researchLogger.onLeavingSendFeedbackDialog();
- } else {
- Log.e(TAG, "Unknown view passed to FeedbackFragment.onClick()");
- }
- }
-
- @Override
- public void onSaveInstanceState(final Bundle bundle) {
- final String savedFeedbackString = mEditText.getText().toString();
-
- bundle.putString(KEY_FEEDBACK_STRING, savedFeedbackString);
- bundle.putBoolean(KEY_INCLUDE_ACCOUNT_NAME, mIncludingAccountNameCheckBox.isChecked());
- bundle.putBoolean(KEY_HAS_USER_RECORDING, mIncludingUserRecordingCheckBox.isChecked());
- }
-
- private void restoreState(final Bundle bundle) {
- mEditText.setText(bundle.getString(KEY_FEEDBACK_STRING));
- mIncludingAccountNameCheckBox.setChecked(bundle.getBoolean(KEY_INCLUDE_ACCOUNT_NAME));
- mIncludingUserRecordingCheckBox.setChecked(bundle.getBoolean(KEY_HAS_USER_RECORDING));
- }
-}
diff --git a/java/src/com/android/inputmethod/research/FeedbackLayout.java b/java/src/com/android/inputmethod/research/FeedbackLayout.java
deleted file mode 100644
index d283d14b2..000000000
--- a/java/src/com/android/inputmethod/research/FeedbackLayout.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.research;
-
-import android.app.Activity;
-import android.content.Context;
-import android.util.AttributeSet;
-import android.view.KeyEvent;
-import android.widget.LinearLayout;
-
-public class FeedbackLayout extends LinearLayout {
- private Activity mActivity;
-
- public FeedbackLayout(Context context) {
- super(context);
- }
-
- public FeedbackLayout(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
-
- public FeedbackLayout(Context context, AttributeSet attrs, int defstyle) {
- super(context, attrs, defstyle);
- }
-
- public void setActivity(Activity activity) {
- mActivity = activity;
- }
-
- @Override
- public boolean dispatchKeyEventPreIme(KeyEvent event) {
- if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
- KeyEvent.DispatcherState state = getKeyDispatcherState();
- if (state != null) {
- if (event.getAction() == KeyEvent.ACTION_DOWN
- && event.getRepeatCount() == 0) {
- state.startTracking(event, this);
- return true;
- } else if (event.getAction() == KeyEvent.ACTION_UP
- && !event.isCanceled() && state.isTracking(event)) {
- mActivity.onBackPressed();
- return true;
- }
- }
- }
- return super.dispatchKeyEventPreIme(event);
- }
-}
diff --git a/java/src/com/android/inputmethod/research/FeedbackLog.java b/java/src/com/android/inputmethod/research/FeedbackLog.java
deleted file mode 100644
index 5af194c32..000000000
--- a/java/src/com/android/inputmethod/research/FeedbackLog.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.research;
-
-import android.content.Context;
-
-import java.io.File;
-
-public class FeedbackLog extends ResearchLog {
- public FeedbackLog(final File outputFile, final Context context) {
- super(outputFile, context);
- }
-
- @Override
- public boolean isFeedbackLog() {
- return true;
- }
-}
diff --git a/java/src/com/android/inputmethod/research/FixedLogBuffer.java b/java/src/com/android/inputmethod/research/FixedLogBuffer.java
deleted file mode 100644
index 8b64de8ae..000000000
--- a/java/src/com/android/inputmethod/research/FixedLogBuffer.java
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.research;
-
-import java.util.ArrayList;
-import java.util.LinkedList;
-
-/**
- * A buffer that holds a fixed number of LogUnits.
- *
- * LogUnits are added in and shifted out in temporal order. Only a subset of the LogUnits are
- * actual words; the other LogUnits do not count toward the word limit. Once the buffer reaches
- * capacity, adding another LogUnit that is a word evicts the oldest LogUnits out one at a time to
- * stay under the capacity limit.
- *
- * This variant of a LogBuffer has a limited memory footprint because of its limited size. This
- * makes it useful, for example, for recording a window of the user's most recent actions in case
- * they want to report an observed error that they do not know how to reproduce.
- */
-public class FixedLogBuffer extends LogBuffer {
- /* package for test */ int mWordCapacity;
- // The number of members of mLogUnits that are actual words.
- private int mNumActualWords;
-
- /**
- * Create a new LogBuffer that can hold a fixed number of LogUnits that are words (and
- * unlimited number of non-word LogUnits), and that outputs its result to a researchLog.
- *
- * @param wordCapacity maximum number of words
- */
- public FixedLogBuffer(final int wordCapacity) {
- super();
- if (wordCapacity <= 0) {
- throw new IllegalArgumentException("wordCapacity must be 1 or greater.");
- }
- mWordCapacity = wordCapacity;
- mNumActualWords = 0;
- }
-
- /**
- * Adds a new LogUnit to the front of the LIFO queue, evicting existing LogUnit's
- * (oldest first) if word capacity is reached.
- */
- @Override
- public void shiftIn(final LogUnit newLogUnit) {
- if (!newLogUnit.hasOneOrMoreWords()) {
- // This LogUnit doesn't contain any word, so it doesn't count toward the word-limit.
- super.shiftIn(newLogUnit);
- return;
- }
- final int numWordsIncoming = newLogUnit.getNumWords();
- if (mNumActualWords >= mWordCapacity) {
- // Give subclass a chance to handle the buffer full condition by shifting out logUnits.
- // TODO: Tell onBufferFull() how much space it needs to make to avoid forced eviction.
- onBufferFull();
- // If still full, evict.
- if (mNumActualWords >= mWordCapacity) {
- shiftOutWords(numWordsIncoming);
- }
- }
- super.shiftIn(newLogUnit);
- mNumActualWords += numWordsIncoming;
- }
-
- @Override
- public LogUnit unshiftIn() {
- final LogUnit logUnit = super.unshiftIn();
- if (logUnit != null && logUnit.hasOneOrMoreWords()) {
- mNumActualWords -= logUnit.getNumWords();
- }
- return logUnit;
- }
-
- public int getNumWords() {
- return mNumActualWords;
- }
-
- /**
- * Removes all LogUnits from the buffer without calling onShiftOut().
- */
- @Override
- public void clear() {
- super.clear();
- mNumActualWords = 0;
- }
-
- /**
- * Called when the buffer has just shifted in one more word than its maximum, and its about to
- * shift out LogUnits to bring it back down to the maximum.
- *
- * Base class does nothing; subclasses may override if they want to record non-privacy sensitive
- * events that fall off the end.
- */
- protected void onBufferFull() {
- }
-
- @Override
- public LogUnit shiftOut() {
- final LogUnit logUnit = super.shiftOut();
- if (logUnit != null && logUnit.hasOneOrMoreWords()) {
- mNumActualWords -= logUnit.getNumWords();
- }
- return logUnit;
- }
-
- /**
- * Remove LogUnits from the front of the LogBuffer until {@code numWords} have been removed.
- *
- * If there are less than {@code numWords} in the buffer, shifts out all {@code LogUnit}s.
- *
- * @param numWords the minimum number of words in {@link LogUnit}s to shift out
- * @return the number of actual words LogUnit}s shifted out
- */
- protected int shiftOutWords(final int numWords) {
- int numWordsShiftedOut = 0;
- do {
- final LogUnit logUnit = shiftOut();
- if (logUnit == null) break;
- numWordsShiftedOut += logUnit.getNumWords();
- } while (numWordsShiftedOut < numWords);
- return numWordsShiftedOut;
- }
-
- public void shiftOutAll() {
- final LinkedList<LogUnit> logUnits = getLogUnits();
- while (!logUnits.isEmpty()) {
- shiftOut();
- }
- mNumActualWords = 0;
- }
-
- /**
- * Returns a list of {@link LogUnit}s at the front of the buffer that have words associated with
- * them.
- *
- * There will be no more than {@code n} words in the returned list. So if 2 words are
- * requested, and the first LogUnit has 3 words, it is not returned. If 2 words are requested,
- * and the first LogUnit has only 1 word, and the next LogUnit 2 words, only the first LogUnit
- * is returned. If the first LogUnit has no words associated with it, and the second LogUnit
- * has three words, then only the first LogUnit (which has no associated words) is returned. If
- * there are not enough LogUnits in the buffer to meet the word requirement, then all LogUnits
- * will be returned.
- *
- * @param n The maximum number of {@link LogUnit}s with words to return.
- * @return The list of the {@link LogUnit}s containing the first n words
- */
- public ArrayList<LogUnit> peekAtFirstNWords(int n) {
- final LinkedList<LogUnit> logUnits = getLogUnits();
- // Allocate space for n*2 logUnits. There will be at least n, one for each word, and
- // there may be additional for punctuation, between-word commands, etc. This should be
- // enough that reallocation won't be necessary.
- final ArrayList<LogUnit> resultList = new ArrayList<LogUnit>(n * 2);
- for (final LogUnit logUnit : logUnits) {
- n -= logUnit.getNumWords();
- if (n < 0) break;
- resultList.add(logUnit);
- }
- return resultList;
- }
-}
diff --git a/java/src/com/android/inputmethod/research/JsonUtils.java b/java/src/com/android/inputmethod/research/JsonUtils.java
deleted file mode 100644
index 6170b4339..000000000
--- a/java/src/com/android/inputmethod/research/JsonUtils.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.research;
-
-import android.content.SharedPreferences;
-import android.util.JsonWriter;
-import android.view.MotionEvent;
-import android.view.inputmethod.CompletionInfo;
-
-import com.android.inputmethod.keyboard.Key;
-import com.android.inputmethod.latin.SuggestedWords;
-import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
-
-import java.io.IOException;
-import java.util.Map;
-
-/**
- * Routines for mapping classes and variables to JSON representations for logging.
- */
-/* package */ class JsonUtils {
- private JsonUtils() {
- // This utility class is not publicly instantiable.
- }
-
- /* package */ static void writeJson(final CompletionInfo[] ci, final JsonWriter jsonWriter)
- throws IOException {
- jsonWriter.beginArray();
- for (int j = 0; j < ci.length; j++) {
- jsonWriter.value(ci[j].toString());
- }
- jsonWriter.endArray();
- }
-
- /* package */ static void writeJson(final SharedPreferences prefs, final JsonWriter jsonWriter)
- throws IOException {
- jsonWriter.beginObject();
- for (Map.Entry<String,?> entry : prefs.getAll().entrySet()) {
- jsonWriter.name(entry.getKey());
- final Object innerValue = entry.getValue();
- if (innerValue == null) {
- jsonWriter.nullValue();
- } else if (innerValue instanceof Boolean) {
- jsonWriter.value((Boolean) innerValue);
- } else if (innerValue instanceof Number) {
- jsonWriter.value((Number) innerValue);
- } else {
- jsonWriter.value(innerValue.toString());
- }
- }
- jsonWriter.endObject();
- }
-
- /* package */ static void writeJson(final Key[] keys, final JsonWriter jsonWriter)
- throws IOException {
- jsonWriter.beginArray();
- for (Key key : keys) {
- writeJson(key, jsonWriter);
- }
- jsonWriter.endArray();
- }
-
- private static void writeJson(final Key key, final JsonWriter jsonWriter) throws IOException {
- jsonWriter.beginObject();
- jsonWriter.name("code").value(key.getCode());
- jsonWriter.name("altCode").value(key.getAltCode());
- jsonWriter.name("x").value(key.getX());
- jsonWriter.name("y").value(key.getY());
- jsonWriter.name("w").value(key.getWidth());
- jsonWriter.name("h").value(key.getHeight());
- jsonWriter.endObject();
- }
-
- /* package */ static void writeJson(final SuggestedWords words, final JsonWriter jsonWriter)
- throws IOException {
- jsonWriter.beginObject();
- jsonWriter.name("typedWordValid").value(words.mTypedWordValid);
- jsonWriter.name("willAutoCorrect")
- .value(words.mWillAutoCorrect);
- jsonWriter.name("isPunctuationSuggestions")
- .value(words.isPunctuationSuggestions());
- jsonWriter.name("isObsoleteSuggestions").value(words.mIsObsoleteSuggestions);
- jsonWriter.name("isPrediction").value(words.mIsPrediction);
- jsonWriter.name("suggestedWords");
- jsonWriter.beginArray();
- final int size = words.size();
- for (int j = 0; j < size; j++) {
- final SuggestedWordInfo wordInfo = words.getInfo(j);
- jsonWriter.beginObject();
- jsonWriter.name("word").value(wordInfo.toString());
- jsonWriter.name("score").value(wordInfo.mScore);
- jsonWriter.name("kind").value(wordInfo.mKind);
- jsonWriter.name("sourceDict").value(wordInfo.mSourceDict.mDictType);
- jsonWriter.endObject();
- }
- jsonWriter.endArray();
- jsonWriter.endObject();
- }
-
- /* package */ static void writeJson(final MotionEvent me, final JsonWriter jsonWriter)
- throws IOException {
- jsonWriter.beginObject();
- jsonWriter.name("pointerIds");
- jsonWriter.beginArray();
- final int pointerCount = me.getPointerCount();
- for (int index = 0; index < pointerCount; index++) {
- jsonWriter.value(me.getPointerId(index));
- }
- jsonWriter.endArray();
-
- jsonWriter.name("xyt");
- jsonWriter.beginArray();
- final int historicalSize = me.getHistorySize();
- for (int index = 0; index < historicalSize; index++) {
- jsonWriter.beginObject();
- jsonWriter.name("t");
- jsonWriter.value(me.getHistoricalEventTime(index));
- jsonWriter.name("d");
- jsonWriter.beginArray();
- for (int pointerIndex = 0; pointerIndex < pointerCount; pointerIndex++) {
- jsonWriter.beginObject();
- jsonWriter.name("x");
- jsonWriter.value(me.getHistoricalX(pointerIndex, index));
- jsonWriter.name("y");
- jsonWriter.value(me.getHistoricalY(pointerIndex, index));
- jsonWriter.endObject();
- }
- jsonWriter.endArray();
- jsonWriter.endObject();
- }
- jsonWriter.beginObject();
- jsonWriter.name("t");
- jsonWriter.value(me.getEventTime());
- jsonWriter.name("d");
- jsonWriter.beginArray();
- for (int pointerIndex = 0; pointerIndex < pointerCount; pointerIndex++) {
- jsonWriter.beginObject();
- jsonWriter.name("x");
- jsonWriter.value(me.getX(pointerIndex));
- jsonWriter.name("y");
- jsonWriter.value(me.getY(pointerIndex));
- jsonWriter.endObject();
- }
- jsonWriter.endArray();
- jsonWriter.endObject();
- jsonWriter.endArray();
- jsonWriter.endObject();
- }
-}
diff --git a/java/src/com/android/inputmethod/research/LogBuffer.java b/java/src/com/android/inputmethod/research/LogBuffer.java
deleted file mode 100644
index b07b761f0..000000000
--- a/java/src/com/android/inputmethod/research/LogBuffer.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.research;
-
-import java.util.LinkedList;
-
-/**
- * Maintain a FIFO queue of LogUnits.
- *
- * This class provides an unbounded queue. This is useful when the user is aware that their actions
- * are being recorded, such as when they are trying to reproduce a bug. In this case, there should
- * not be artificial restrictions on how many events that can be saved.
- */
-public class LogBuffer {
- // TODO: Gracefully handle situations in which this LogBuffer is consuming too much memory.
- // This may happen, for example, if the user has forgotten that data is being logged.
- private final LinkedList<LogUnit> mLogUnits;
-
- public LogBuffer() {
- mLogUnits = new LinkedList<LogUnit>();
- }
-
- protected LinkedList<LogUnit> getLogUnits() {
- return mLogUnits;
- }
-
- public void clear() {
- mLogUnits.clear();
- }
-
- public void shiftIn(final LogUnit logUnit) {
- mLogUnits.add(logUnit);
- }
-
- public LogUnit unshiftIn() {
- if (mLogUnits.isEmpty()) {
- return null;
- }
- return mLogUnits.removeLast();
- }
-
- public LogUnit peekLastLogUnit() {
- if (mLogUnits.isEmpty()) {
- return null;
- }
- return mLogUnits.peekLast();
- }
-
- public boolean isEmpty() {
- return mLogUnits.isEmpty();
- }
-
- public LogUnit shiftOut() {
- if (isEmpty()) {
- return null;
- }
- return mLogUnits.removeFirst();
- }
-}
diff --git a/java/src/com/android/inputmethod/research/LogStatement.java b/java/src/com/android/inputmethod/research/LogStatement.java
deleted file mode 100644
index 06b918af5..000000000
--- a/java/src/com/android/inputmethod/research/LogStatement.java
+++ /dev/null
@@ -1,225 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.research;
-
-import android.content.SharedPreferences;
-import android.util.JsonWriter;
-import android.util.Log;
-import android.view.MotionEvent;
-import android.view.inputmethod.CompletionInfo;
-
-import com.android.inputmethod.keyboard.Key;
-import com.android.inputmethod.latin.SuggestedWords;
-import com.android.inputmethod.latin.define.ProductionFlag;
-
-import java.io.IOException;
-
-/**
- * A template for typed information stored in the logs.
- *
- * A LogStatement contains a name, keys, and flags about whether the {@code Object[] values}
- * associated with the {@code String[] keys} are likely to reveal information about the user. The
- * actual values are stored separately.
- */
-public class LogStatement {
- private static final String TAG = LogStatement.class.getSimpleName();
- private static final boolean DEBUG = false
- && ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS_DEBUG;
-
- // Constants for particular statements
- public static final String TYPE_POINTER_TRACKER_CALL_LISTENER_ON_CODE_INPUT =
- "PointerTrackerCallListenerOnCodeInput";
- public static final String KEY_CODE = "code";
- public static final String VALUE_RESEARCH = "research";
- public static final String TYPE_MAIN_KEYBOARD_VIEW_ON_LONG_PRESS =
- "MainKeyboardViewOnLongPress";
- public static final String ACTION = "action";
- public static final String VALUE_DOWN = "DOWN";
- public static final String TYPE_MOTION_EVENT = "MotionEvent";
- public static final String KEY_IS_LOGGING_RELATED = "isLoggingRelated";
-
- // Keys for internal key/value pairs
- private static final String CURRENT_TIME_KEY = "_ct";
- private static final String UPTIME_KEY = "_ut";
- private static final String EVENT_TYPE_KEY = "_ty";
-
- // Name specifying the LogStatement type.
- private final String mType;
-
- // mIsPotentiallyPrivate indicates that event contains potentially private information. If
- // the word that this event is a part of is determined to be privacy-sensitive, then this
- // event should not be included in the output log. The system waits to output until the
- // containing word is known.
- private final boolean mIsPotentiallyPrivate;
-
- // mIsPotentiallyRevealing indicates that this statement may disclose details about other
- // words typed in other LogUnits. This can happen if the user is not inserting spaces, and
- // data from Suggestions and/or Composing text reveals the entire "megaword". For example,
- // say the user is typing "for the win", and the system wants to record the bigram "the
- // win". If the user types "forthe", omitting the space, the system will give "for the" as
- // a suggestion. If the user accepts the autocorrection, the suggestion for "for the" is
- // included in the log for the word "the", disclosing that the previous word had been "for".
- // For now, we simply do not include this data when logging part of a "megaword".
- private final boolean mIsPotentiallyRevealing;
-
- // mKeys stores the names that are the attributes in the output json objects
- private final String[] mKeys;
- private static final String[] NULL_KEYS = new String[0];
-
- LogStatement(final String name, final boolean isPotentiallyPrivate,
- final boolean isPotentiallyRevealing, final String... keys) {
- mType = name;
- mIsPotentiallyPrivate = isPotentiallyPrivate;
- mIsPotentiallyRevealing = isPotentiallyRevealing;
- mKeys = (keys == null) ? NULL_KEYS : keys;
- }
-
- public String getType() {
- return mType;
- }
-
- public boolean isPotentiallyPrivate() {
- return mIsPotentiallyPrivate;
- }
-
- public boolean isPotentiallyRevealing() {
- return mIsPotentiallyRevealing;
- }
-
- public String[] getKeys() {
- return mKeys;
- }
-
- /**
- * Utility function to test whether a key-value pair exists in a LogStatement.
- *
- * A LogStatement is really just a template -- it does not contain the values, only the
- * keys. So the values must be passed in as an argument.
- *
- * @param queryKey the String that is tested by {@code String.equals()} to the keys in the
- * LogStatement
- * @param queryValue an Object that must be {@code Object.equals()} to the key's corresponding
- * value in the {@code values} array
- * @param values the values corresponding to mKeys
- *
- * @returns {@true} if {@code queryKey} exists in the keys for this LogStatement, and {@code
- * queryValue} matches the corresponding value in {@code values}
- *
- * @throws IllegalArgumentException if {@code values.length} is not equal to keys().length()
- */
- public boolean containsKeyValuePair(final String queryKey, final Object queryValue,
- final Object[] values) {
- if (mKeys.length != values.length) {
- throw new IllegalArgumentException("Mismatched number of keys and values.");
- }
- final int length = mKeys.length;
- for (int i = 0; i < length; i++) {
- if (mKeys[i].equals(queryKey) && values[i].equals(queryValue)) {
- return true;
- }
- }
- return false;
- }
-
- /**
- * Utility function to set a value in a LogStatement.
- *
- * A LogStatement is really just a template -- it does not contain the values, only the
- * keys. So the values must be passed in as an argument.
- *
- * @param queryKey the String that is tested by {@code String.equals()} to the keys in the
- * LogStatement
- * @param values the array of values corresponding to mKeys
- * @param newValue the replacement value to go into the {@code values} array
- *
- * @returns {@true} if the key exists and the value was successfully set, {@false} otherwise
- *
- * @throws IllegalArgumentException if {@code values.length} is not equal to keys().length()
- */
- public boolean setValue(final String queryKey, final Object[] values, final Object newValue) {
- if (mKeys.length != values.length) {
- throw new IllegalArgumentException("Mismatched number of keys and values.");
- }
- final int length = mKeys.length;
- for (int i = 0; i < length; i++) {
- if (mKeys[i].equals(queryKey)) {
- values[i] = newValue;
- return true;
- }
- }
- return false;
- }
-
- /**
- * Write the contents out through jsonWriter.
- *
- * The JsonWriter class must have already had {@code JsonWriter.beginArray} called on it.
- *
- * Note that this method is not thread safe for the same jsonWriter. Callers must ensure
- * thread safety.
- */
- public boolean outputToLocked(final JsonWriter jsonWriter, final Long time,
- final Object... values) {
- if (DEBUG) {
- if (mKeys.length != values.length) {
- Log.d(TAG, "Key and Value list sizes do not match. " + mType);
- }
- }
- try {
- jsonWriter.beginObject();
- jsonWriter.name(CURRENT_TIME_KEY).value(System.currentTimeMillis());
- jsonWriter.name(UPTIME_KEY).value(time);
- jsonWriter.name(EVENT_TYPE_KEY).value(mType);
- final int length = values.length;
- for (int i = 0; i < length; i++) {
- jsonWriter.name(mKeys[i]);
- final Object value = values[i];
- if (value instanceof CharSequence) {
- jsonWriter.value(value.toString());
- } else if (value instanceof Number) {
- jsonWriter.value((Number) value);
- } else if (value instanceof Boolean) {
- jsonWriter.value((Boolean) value);
- } else if (value instanceof CompletionInfo[]) {
- JsonUtils.writeJson((CompletionInfo[]) value, jsonWriter);
- } else if (value instanceof SharedPreferences) {
- JsonUtils.writeJson((SharedPreferences) value, jsonWriter);
- } else if (value instanceof Key[]) {
- JsonUtils.writeJson((Key[]) value, jsonWriter);
- } else if (value instanceof SuggestedWords) {
- JsonUtils.writeJson((SuggestedWords) value, jsonWriter);
- } else if (value instanceof MotionEvent) {
- JsonUtils.writeJson((MotionEvent) value, jsonWriter);
- } else if (value == null) {
- jsonWriter.nullValue();
- } else {
- if (DEBUG) {
- Log.w(TAG, "Unrecognized type to be logged: "
- + (value == null ? "<null>" : value.getClass().getName()));
- }
- jsonWriter.nullValue();
- }
- }
- jsonWriter.endObject();
- } catch (IOException e) {
- e.printStackTrace();
- Log.w(TAG, "Error in JsonWriter; skipping LogStatement");
- return false;
- }
- return true;
- }
-}
diff --git a/java/src/com/android/inputmethod/research/LogUnit.java b/java/src/com/android/inputmethod/research/LogUnit.java
deleted file mode 100644
index 3366df12a..000000000
--- a/java/src/com/android/inputmethod/research/LogUnit.java
+++ /dev/null
@@ -1,496 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.research;
-
-import android.os.SystemClock;
-import android.text.TextUtils;
-import android.util.JsonWriter;
-import android.util.Log;
-
-import com.android.inputmethod.latin.SuggestedWords;
-import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
-import com.android.inputmethod.latin.define.ProductionFlag;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.regex.Pattern;
-
-/**
- * A group of log statements related to each other.
- *
- * A LogUnit is collection of LogStatements, each of which is generated by at a particular point
- * in the code. (There is no LogStatement class; the data is stored across the instance variables
- * here.) A single LogUnit's statements can correspond to all the calls made while in the same
- * composing region, or all the calls between committing the last composing region, and the first
- * character of the next composing region.
- *
- * Individual statements in a log may be marked as potentially private. If so, then they are only
- * published to a ResearchLog if the ResearchLogger determines that publishing the entire LogUnit
- * will not violate the user's privacy. Checks for this may include whether other LogUnits have
- * been published recently, or whether the LogUnit contains numbers, etc.
- */
-public class LogUnit {
- private static final String TAG = LogUnit.class.getSimpleName();
- private static final boolean DEBUG = false
- && ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS_DEBUG;
-
- private static final Pattern WHITESPACE_PATTERN = Pattern.compile("\\s+");
- private static final String[] EMPTY_STRING_ARRAY = new String[0];
-
- private final ArrayList<LogStatement> mLogStatementList;
- private final ArrayList<Object[]> mValuesList;
- // Assume that mTimeList is sorted in increasing order. Do not insert null values into
- // mTimeList.
- private final ArrayList<Long> mTimeList;
- // Words that this LogUnit generates. Should be null if the data in the LogUnit does not
- // generate a genuine word (i.e. separators alone do not count as a word). Should never be
- // empty. Note that if the user types spaces explicitly, then normally mWords should contain
- // only a single word; it will only contain space-separate multiple words if the user does not
- // enter a space, and the system enters one automatically.
- private String mWords;
- private String[] mWordArray = EMPTY_STRING_ARRAY;
- private boolean mMayContainDigit;
- private boolean mIsPartOfMegaword;
- private boolean mContainsUserDeletions;
-
- // mCorrectionType indicates whether the word was corrected at all, and if so, the nature of the
- // correction.
- private int mCorrectionType;
- // LogUnits start in this state. If a word is entered without being corrected, it will have
- // this CorrectiontType.
- public static final int CORRECTIONTYPE_NO_CORRECTION = 0;
- // The LogUnit was corrected manually by the user in an unspecified way.
- public static final int CORRECTIONTYPE_CORRECTION = 1;
- // The LogUnit was corrected manually by the user to a word not in the list of suggestions of
- // the first word typed here. (Note: this is a heuristic value, it may be incorrect, for
- // example, if the user repositions the cursor).
- public static final int CORRECTIONTYPE_DIFFERENT_WORD = 2;
- // The LogUnit was corrected manually by the user to a word that was in the list of suggestions
- // of the first word typed here. (Again, a heuristic). It is probably a typo correction.
- public static final int CORRECTIONTYPE_TYPO = 3;
- // TODO: Rather than just tracking the current state, keep a historical record of the LogUnit's
- // state and statistics. This should include how many times it has been corrected, whether
- // other LogUnit edits were done between edits to this LogUnit, etc. Also track when a LogUnit
- // previously contained a word, but was corrected to empty (because it was deleted, and there is
- // no known replacement).
-
- private SuggestedWords mSuggestedWords;
-
- public LogUnit() {
- mLogStatementList = new ArrayList<LogStatement>();
- mValuesList = new ArrayList<Object[]>();
- mTimeList = new ArrayList<Long>();
- mIsPartOfMegaword = false;
- mCorrectionType = CORRECTIONTYPE_NO_CORRECTION;
- mSuggestedWords = null;
- }
-
- private LogUnit(final ArrayList<LogStatement> logStatementList,
- final ArrayList<Object[]> valuesList,
- final ArrayList<Long> timeList,
- final boolean isPartOfMegaword) {
- mLogStatementList = logStatementList;
- mValuesList = valuesList;
- mTimeList = timeList;
- mIsPartOfMegaword = isPartOfMegaword;
- mCorrectionType = CORRECTIONTYPE_NO_CORRECTION;
- mSuggestedWords = null;
- }
-
- private static final Object[] NULL_VALUES = new Object[0];
- /**
- * Adds a new log statement. The time parameter in successive calls to this method must be
- * monotonically increasing, or splitByTime() will not work.
- */
- public void addLogStatement(final LogStatement logStatement, final long time,
- Object... values) {
- if (values == null) {
- values = NULL_VALUES;
- }
- mLogStatementList.add(logStatement);
- mValuesList.add(values);
- mTimeList.add(time);
- }
-
- /**
- * Publish the contents of this LogUnit to {@code researchLog}.
- *
- * For each publishable {@code LogStatement}, invoke {@link LogStatement#outputToLocked}.
- *
- * @param researchLog where to publish the contents of this {@code LogUnit}
- * @param canIncludePrivateData whether the private data in this {@code LogUnit} should be
- * included
- *
- * @throws IOException if publication to the log file is not possible
- */
- public synchronized void publishTo(final ResearchLog researchLog,
- final boolean canIncludePrivateData) throws IOException {
- // Write out any logStatement that passes the privacy filter.
- final int size = mLogStatementList.size();
- if (size != 0) {
- // Note that jsonWriter is only set to a non-null value if the logUnit start text is
- // output and at least one logStatement is output.
- JsonWriter jsonWriter = researchLog.getInitializedJsonWriterLocked();
- outputLogUnitStart(jsonWriter, canIncludePrivateData);
- for (int i = 0; i < size; i++) {
- final LogStatement logStatement = mLogStatementList.get(i);
- if (!canIncludePrivateData && logStatement.isPotentiallyPrivate()) {
- continue;
- }
- if (mIsPartOfMegaword && logStatement.isPotentiallyRevealing()) {
- continue;
- }
- logStatement.outputToLocked(jsonWriter, mTimeList.get(i), mValuesList.get(i));
- }
- outputLogUnitStop(jsonWriter);
- }
- }
-
- private static final String WORD_KEY = "_wo";
- private static final String NUM_WORDS_KEY = "_nw";
- private static final String CORRECTION_TYPE_KEY = "_corType";
- private static final String LOG_UNIT_BEGIN_KEY = "logUnitStart";
- private static final String LOG_UNIT_END_KEY = "logUnitEnd";
-
- final LogStatement LOGSTATEMENT_LOG_UNIT_BEGIN_WITH_PRIVATE_DATA =
- new LogStatement(LOG_UNIT_BEGIN_KEY, false /* isPotentiallyPrivate */,
- false /* isPotentiallyRevealing */, WORD_KEY, CORRECTION_TYPE_KEY,
- NUM_WORDS_KEY);
- final LogStatement LOGSTATEMENT_LOG_UNIT_BEGIN_WITHOUT_PRIVATE_DATA =
- new LogStatement(LOG_UNIT_BEGIN_KEY, false /* isPotentiallyPrivate */,
- false /* isPotentiallyRevealing */, NUM_WORDS_KEY);
- private void outputLogUnitStart(final JsonWriter jsonWriter,
- final boolean canIncludePrivateData) {
- final LogStatement logStatement;
- if (canIncludePrivateData) {
- LOGSTATEMENT_LOG_UNIT_BEGIN_WITH_PRIVATE_DATA.outputToLocked(jsonWriter,
- SystemClock.uptimeMillis(), getWordsAsString(), getCorrectionType(),
- getNumWords());
- } else {
- LOGSTATEMENT_LOG_UNIT_BEGIN_WITHOUT_PRIVATE_DATA.outputToLocked(jsonWriter,
- SystemClock.uptimeMillis(), getNumWords());
- }
- }
-
- final LogStatement LOGSTATEMENT_LOG_UNIT_END =
- new LogStatement(LOG_UNIT_END_KEY, false /* isPotentiallyPrivate */,
- false /* isPotentiallyRevealing */);
- private void outputLogUnitStop(final JsonWriter jsonWriter) {
- LOGSTATEMENT_LOG_UNIT_END.outputToLocked(jsonWriter, SystemClock.uptimeMillis());
- }
-
- /**
- * Mark the current logUnit as containing data to generate {@code newWords}.
- *
- * If {@code setWord()} was previously called for this LogUnit, then the method will try to
- * determine what kind of correction it is, and update its internal state of the correctionType
- * accordingly.
- *
- * @param newWords The words this LogUnit generates. Caller should not pass null or the empty
- * string.
- */
- public void setWords(final String newWords) {
- if (hasOneOrMoreWords()) {
- // The word was already set once, and it is now being changed. See if the new word
- // is close to the old word. If so, then the change is probably a typo correction.
- // If not, the user may have decided to enter a different word, so flag it.
- if (mSuggestedWords != null) {
- if (isInSuggestedWords(newWords, mSuggestedWords)) {
- mCorrectionType = CORRECTIONTYPE_TYPO;
- } else {
- mCorrectionType = CORRECTIONTYPE_DIFFERENT_WORD;
- }
- } else {
- // No suggested words, so it's not clear whether it's a typo or different word.
- // Mark it as a generic correction.
- mCorrectionType = CORRECTIONTYPE_CORRECTION;
- }
- } else {
- mCorrectionType = CORRECTIONTYPE_NO_CORRECTION;
- }
- mWords = newWords;
-
- // Update mWordArray
- mWordArray = (TextUtils.isEmpty(mWords)) ? EMPTY_STRING_ARRAY
- : WHITESPACE_PATTERN.split(mWords);
- if (mWordArray.length > 0 && TextUtils.isEmpty(mWordArray[0])) {
- // Empty string at beginning of array. Must have been whitespace at the start of the
- // word. Remove the empty string.
- mWordArray = Arrays.copyOfRange(mWordArray, 1, mWordArray.length);
- }
- }
-
- public String getWordsAsString() {
- return mWords;
- }
-
- /**
- * Retuns the words generated by the data in this LogUnit.
- *
- * The first word may be an empty string, if the data in the LogUnit started by generating
- * whitespace.
- *
- * @return the array of words. an empty list of there are no words associated with this LogUnit.
- */
- public String[] getWordsAsStringArray() {
- return mWordArray;
- }
-
- public boolean hasOneOrMoreWords() {
- return mWordArray.length >= 1;
- }
-
- public int getNumWords() {
- return mWordArray.length;
- }
-
- // TODO: Refactor to eliminate getter/setters
- public void setMayContainDigit() {
- mMayContainDigit = true;
- }
-
- // TODO: Refactor to eliminate getter/setters
- public boolean mayContainDigit() {
- return mMayContainDigit;
- }
-
- // TODO: Refactor to eliminate getter/setters
- public void setContainsUserDeletions() {
- mContainsUserDeletions = true;
- }
-
- // TODO: Refactor to eliminate getter/setters
- public boolean containsUserDeletions() {
- return mContainsUserDeletions;
- }
-
- // TODO: Refactor to eliminate getter/setters
- public void setCorrectionType(final int correctionType) {
- mCorrectionType = correctionType;
- }
-
- // TODO: Refactor to eliminate getter/setters
- public int getCorrectionType() {
- return mCorrectionType;
- }
-
- public boolean isEmpty() {
- return mLogStatementList.isEmpty();
- }
-
- /**
- * Split this logUnit, with all events before maxTime staying in the current logUnit, and all
- * events after maxTime going into a new LogUnit that is returned.
- */
- public LogUnit splitByTime(final long maxTime) {
- // Assume that mTimeList is in sorted order.
- final int length = mTimeList.size();
- // TODO: find time by binary search, e.g. using Collections#binarySearch()
- for (int index = 0; index < length; index++) {
- if (mTimeList.get(index) > maxTime) {
- final List<LogStatement> laterLogStatements =
- mLogStatementList.subList(index, length);
- final List<Object[]> laterValues = mValuesList.subList(index, length);
- final List<Long> laterTimes = mTimeList.subList(index, length);
-
- // Create the LogUnit containing the later logStatements and associated data.
- final LogUnit newLogUnit = new LogUnit(
- new ArrayList<LogStatement>(laterLogStatements),
- new ArrayList<Object[]>(laterValues),
- new ArrayList<Long>(laterTimes),
- true /* isPartOfMegaword */);
- newLogUnit.mWords = null;
- newLogUnit.mMayContainDigit = mMayContainDigit;
- newLogUnit.mContainsUserDeletions = mContainsUserDeletions;
-
- // Purge the logStatements and associated data from this LogUnit.
- laterLogStatements.clear();
- laterValues.clear();
- laterTimes.clear();
- mIsPartOfMegaword = true;
-
- return newLogUnit;
- }
- }
- return new LogUnit();
- }
-
- public void append(final LogUnit logUnit) {
- mLogStatementList.addAll(logUnit.mLogStatementList);
- mValuesList.addAll(logUnit.mValuesList);
- mTimeList.addAll(logUnit.mTimeList);
- mWords = null;
- if (logUnit.mWords != null) {
- setWords(logUnit.mWords);
- }
- mMayContainDigit = mMayContainDigit || logUnit.mMayContainDigit;
- mContainsUserDeletions = mContainsUserDeletions || logUnit.mContainsUserDeletions;
- mIsPartOfMegaword = false;
- }
-
- public SuggestedWords getSuggestions() {
- return mSuggestedWords;
- }
-
- /**
- * Initialize the suggestions.
- *
- * Once set to a non-null value, the suggestions may not be changed again. This is to keep
- * track of the list of words that are close to the user's initial effort to type the word.
- * Only words that are close to the initial effort are considered typo corrections.
- */
- public void initializeSuggestions(final SuggestedWords suggestedWords) {
- if (mSuggestedWords == null) {
- mSuggestedWords = suggestedWords;
- }
- }
-
- private static boolean isInSuggestedWords(final String queryWord,
- final SuggestedWords suggestedWords) {
- if (TextUtils.isEmpty(queryWord)) {
- return false;
- }
- final int size = suggestedWords.size();
- for (int i = 0; i < size; i++) {
- final SuggestedWordInfo wordInfo = suggestedWords.getInfo(i);
- if (queryWord.equals(wordInfo.mWord)) {
- return true;
- }
- }
- return false;
- }
-
- /**
- * Remove data associated with selecting the Research button.
- *
- * A LogUnit will capture all user interactions with the IME, including the "meta-interactions"
- * of using the Research button to control the logging (e.g. by starting and stopping recording
- * of a test case). Because meta-interactions should not be part of the normal log, calling
- * this method will set a field in the LogStatements of the motion events to indiciate that
- * they should be disregarded.
- *
- * This implementation assumes that the data recorded by the meta-interaction takes the
- * form of all events following the first MotionEvent.ACTION_DOWN before the first long-press
- * before the last onCodeEvent containing a code matching {@code LogStatement.VALUE_RESEARCH}.
- *
- * @returns true if data was removed
- */
- public boolean removeResearchButtonInvocation() {
- // This method is designed to be idempotent.
-
- // First, find last invocation of "research" key
- final int indexOfLastResearchKey = findLastIndexContainingKeyValue(
- LogStatement.TYPE_POINTER_TRACKER_CALL_LISTENER_ON_CODE_INPUT,
- LogStatement.KEY_CODE, LogStatement.VALUE_RESEARCH);
- if (indexOfLastResearchKey < 0) {
- // Could not find invocation of "research" key. Leave log as is.
- if (DEBUG) {
- Log.d(TAG, "Could not find research key");
- }
- return false;
- }
-
- // Look for the long press that started the invocation of the research key code input.
- final int indexOfLastLongPressBeforeResearchKey =
- findLastIndexBefore(LogStatement.TYPE_MAIN_KEYBOARD_VIEW_ON_LONG_PRESS,
- indexOfLastResearchKey);
-
- // Look for DOWN event preceding the long press
- final int indexOfLastDownEventBeforeLongPress =
- findLastIndexContainingKeyValueBefore(LogStatement.TYPE_MOTION_EVENT,
- LogStatement.ACTION, LogStatement.VALUE_DOWN,
- indexOfLastLongPressBeforeResearchKey);
-
- // Flag all LatinKeyboardViewProcessMotionEvents from the DOWN event to the research key as
- // logging-related
- final int startingIndex = indexOfLastDownEventBeforeLongPress == -1 ? 0
- : indexOfLastDownEventBeforeLongPress;
- for (int index = startingIndex; index < indexOfLastResearchKey; index++) {
- final LogStatement logStatement = mLogStatementList.get(index);
- final String type = logStatement.getType();
- final Object[] values = mValuesList.get(index);
- if (type.equals(LogStatement.TYPE_MOTION_EVENT)) {
- logStatement.setValue(LogStatement.KEY_IS_LOGGING_RELATED, values, true);
- }
- }
- return true;
- }
-
- /**
- * Find the index of the last LogStatement before {@code startingIndex} of type {@code type}.
- *
- * @param queryType a String that must be {@code String.equals()} to the LogStatement type
- * @param startingIndex the index to start the backward search from. Must be less than the
- * length of mLogStatementList, or an IndexOutOfBoundsException is thrown. Can be negative,
- * in which case -1 is returned.
- *
- * @return The index of the last LogStatement, -1 if none exists.
- */
- private int findLastIndexBefore(final String queryType, final int startingIndex) {
- return findLastIndexContainingKeyValueBefore(queryType, null, null, startingIndex);
- }
-
- /**
- * Find the index of the last LogStatement before {@code startingIndex} of type {@code type}
- * containing the given key-value pair.
- *
- * @param queryType a String that must be {@code String.equals()} to the LogStatement type
- * @param queryKey a String that must be {@code String.equals()} to a key in the LogStatement
- * @param queryValue an Object that must be {@code String.equals()} to the key's corresponding
- * value
- *
- * @return The index of the last LogStatement, -1 if none exists.
- */
- private int findLastIndexContainingKeyValue(final String queryType, final String queryKey,
- final Object queryValue) {
- return findLastIndexContainingKeyValueBefore(queryType, queryKey, queryValue,
- mLogStatementList.size() - 1);
- }
-
- /**
- * Find the index of the last LogStatement before {@code startingIndex} of type {@code type}
- * containing the given key-value pair.
- *
- * @param queryType a String that must be {@code String.equals()} to the LogStatement type
- * @param queryKey a String that must be {@code String.equals()} to a key in the LogStatement
- * @param queryValue an Object that must be {@code String.equals()} to the key's corresponding
- * value
- * @param startingIndex the index to start the backward search from. Must be less than the
- * length of mLogStatementList, or an IndexOutOfBoundsException is thrown. Can be negative,
- * in which case -1 is returned.
- *
- * @return The index of the last LogStatement, -1 if none exists.
- */
- private int findLastIndexContainingKeyValueBefore(final String queryType, final String queryKey,
- final Object queryValue, final int startingIndex) {
- if (startingIndex < 0) {
- return -1;
- }
- for (int index = startingIndex; index >= 0; index--) {
- final LogStatement logStatement = mLogStatementList.get(index);
- final String type = logStatement.getType();
- if (type.equals(queryType) && (queryKey == null
- || logStatement.containsKeyValuePair(queryKey, queryValue,
- mValuesList.get(index)))) {
- return index;
- }
- }
- return -1;
- }
-}
diff --git a/java/src/com/android/inputmethod/research/LoggingUtils.java b/java/src/com/android/inputmethod/research/LoggingUtils.java
deleted file mode 100644
index 1261d6780..000000000
--- a/java/src/com/android/inputmethod/research/LoggingUtils.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.research;
-
-import android.view.MotionEvent;
-
-/* package */ class LoggingUtils {
- private LoggingUtils() {
- // This utility class is not publicly instantiable.
- }
-
- /* package */ static String getMotionEventActionTypeString(final int actionType) {
- switch (actionType) {
- case MotionEvent.ACTION_CANCEL: return "CANCEL";
- case MotionEvent.ACTION_UP: return "UP";
- case MotionEvent.ACTION_DOWN: return "DOWN";
- case MotionEvent.ACTION_POINTER_UP: return "POINTER_UP";
- case MotionEvent.ACTION_POINTER_DOWN: return "POINTER_DOWN";
- case MotionEvent.ACTION_MOVE: return "MOVE";
- case MotionEvent.ACTION_OUTSIDE: return "OUTSIDE";
- default: return "ACTION_" + actionType;
- }
- }
-}
diff --git a/java/src/com/android/inputmethod/research/MainLogBuffer.java b/java/src/com/android/inputmethod/research/MainLogBuffer.java
deleted file mode 100644
index ffdb43c15..000000000
--- a/java/src/com/android/inputmethod/research/MainLogBuffer.java
+++ /dev/null
@@ -1,287 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.research;
-
-import android.util.Log;
-
-import com.android.inputmethod.annotations.UsedForTesting;
-import com.android.inputmethod.latin.Dictionary;
-import com.android.inputmethod.latin.DictionaryFacilitatorForSuggest;
-import com.android.inputmethod.latin.define.ProductionFlag;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.LinkedList;
-
-/**
- * MainLogBuffer is a FixedLogBuffer that tracks the state of LogUnits to make privacy guarantees.
- *
- * There are three forms of privacy protection: 1) only words in the main dictionary are allowed to
- * be logged in enough detail to determine their contents, 2) only a subset of words are logged
- * in detail, such as 10%, and 3) no numbers are logged.
- *
- * This class maintains a list of LogUnits, each corresponding to a word. As the user completes
- * words, they are added here. But if the user backs up over their current word to edit a word
- * entered earlier, then it is pulled out of this LogBuffer, changes are then added to the end of
- * the LogUnit, and it is pushed back in here when the user is done. Because words may be pulled
- * back out even after they are pushed in, we must not publish the contents of this LogBuffer too
- * quickly. However, we cannot let the contents pile up either, or it will limit the editing that
- * a user can perform.
- *
- * To balance these requirements (keep history so user can edit, flush history so it does not pile
- * up), the LogBuffer is considered "complete" when the user has entered enough words to form an
- * n-gram, followed by enough additional non-detailed words (that are in the 90%, as per above).
- * Once complete, the n-gram may be published to flash storage (via the ResearchLog class).
- * However, the additional non-detailed words are retained, in case the user backspaces to edit
- * them. The MainLogBuffer then continues to add words, publishing individual non-detailed words
- * as new words arrive. After enough non-detailed words have been pushed out to account for the
- * 90% between words, the words at the front of the LogBuffer can be published as an n-gram again.
- *
- * If the words that would form the valid n-gram are not in the dictionary, then words are pushed
- * through the LogBuffer one at a time until an n-gram is found that is entirely composed of
- * dictionary words.
- *
- * If the user closes a session, then the entire LogBuffer is flushed, publishing any embedded
- * n-gram containing dictionary words.
- */
-public abstract class MainLogBuffer extends FixedLogBuffer {
- private static final String TAG = MainLogBuffer.class.getSimpleName();
- private static final boolean DEBUG = false
- && ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS_DEBUG;
-
- // Keep consistent with switch statement in Statistics.recordPublishabilityResultCode()
- public static final int PUBLISHABILITY_PUBLISHABLE = 0;
- public static final int PUBLISHABILITY_UNPUBLISHABLE_STOPPING = 1;
- public static final int PUBLISHABILITY_UNPUBLISHABLE_INCORRECT_WORD_COUNT = 2;
- public static final int PUBLISHABILITY_UNPUBLISHABLE_SAMPLED_TOO_RECENTLY = 3;
- public static final int PUBLISHABILITY_UNPUBLISHABLE_DICTIONARY_UNAVAILABLE = 4;
- public static final int PUBLISHABILITY_UNPUBLISHABLE_MAY_CONTAIN_DIGIT = 5;
- public static final int PUBLISHABILITY_UNPUBLISHABLE_NOT_IN_DICTIONARY = 6;
-
- // The size of the n-grams logged. E.g. N_GRAM_SIZE = 2 means to sample bigrams.
- public static final int N_GRAM_SIZE = 2;
-
- private final DictionaryFacilitatorForSuggest mDictionaryFacilitator;
- @UsedForTesting
- private Dictionary mDictionaryForTesting;
- private boolean mIsStopping = false;
-
- /* package for test */ int mNumWordsBetweenNGrams;
-
- // Counter for words left to suppress before an n-gram can be sampled. Reset to mMinWordPeriod
- // after a sample is taken.
- /* package for test */ int mNumWordsUntilSafeToSample;
-
- public MainLogBuffer(final int wordsBetweenSamples, final int numInitialWordsToIgnore,
- final DictionaryFacilitatorForSuggest dictionaryFacilitator) {
- super(N_GRAM_SIZE + wordsBetweenSamples);
- mNumWordsBetweenNGrams = wordsBetweenSamples;
- mNumWordsUntilSafeToSample = DEBUG ? 0 : numInitialWordsToIgnore;
- mDictionaryFacilitator = dictionaryFacilitator;
- }
-
- @UsedForTesting
- /* package for test */ void setDictionaryForTesting(final Dictionary dictionary) {
- mDictionaryForTesting = dictionary;
- }
-
- private boolean isValidDictWord(final String word) {
- if (mDictionaryForTesting != null) {
- return mDictionaryForTesting.isValidWord(word);
- }
- if (mDictionaryFacilitator != null) {
- return mDictionaryFacilitator.isValidMainDictWord(word);
- }
- return false;
- }
-
- public void setIsStopping() {
- mIsStopping = true;
- }
-
- /**
- * Determines whether the string determined by a series of LogUnits will not violate user
- * privacy if published.
- *
- * @param logUnits a LogUnit list to check for publishability
- * @param nGramSize the smallest n-gram acceptable to be published. if
- * {@link ResearchLogger#IS_LOGGING_EVERYTHING} is true, then publish if there are more than
- * {@code minNGramSize} words in the logUnits, otherwise wait. if {@link
- * ResearchLogger#IS_LOGGING_EVERYTHING} is false, then ensure that there are exactly nGramSize
- * words in the LogUnits.
- *
- * @return one of the {@code PUBLISHABILITY_*} result codes defined in this class.
- */
- private int getPublishabilityResultCode(final ArrayList<LogUnit> logUnits,
- final int nGramSize) {
- // Bypass privacy checks when debugging.
- if (ResearchLogger.IS_LOGGING_EVERYTHING) {
- if (mIsStopping) {
- return PUBLISHABILITY_UNPUBLISHABLE_STOPPING;
- }
- // Only check that it is the right length. If not, wait for later words to make
- // complete n-grams.
- int numWordsInLogUnitList = 0;
- final int length = logUnits.size();
- for (int i = 0; i < length; i++) {
- final LogUnit logUnit = logUnits.get(i);
- numWordsInLogUnitList += logUnit.getNumWords();
- }
- if (numWordsInLogUnitList >= nGramSize) {
- return PUBLISHABILITY_PUBLISHABLE;
- } else {
- return PUBLISHABILITY_UNPUBLISHABLE_INCORRECT_WORD_COUNT;
- }
- }
-
- // Check that we are not sampling too frequently. Having sampled recently might disclose
- // too much of the user's intended meaning.
- if (mNumWordsUntilSafeToSample > 0) {
- return PUBLISHABILITY_UNPUBLISHABLE_SAMPLED_TOO_RECENTLY;
- }
- // Reload the dictionary in case it has changed (e.g., because the user has changed
- // languages).
- if ((mDictionaryFacilitator == null
- || !mDictionaryFacilitator.hasInitializedMainDictionary())
- && mDictionaryForTesting == null) {
- // Main dictionary is unavailable. Since we cannot check it, we cannot tell if a
- // word is out-of-vocabulary or not. Therefore, we must judge the entire buffer
- // contents to potentially pose a privacy risk.
- return PUBLISHABILITY_UNPUBLISHABLE_DICTIONARY_UNAVAILABLE;
- }
-
- // Check each word in the buffer. If any word poses a privacy threat, we cannot upload
- // the complete buffer contents in detail.
- int numWordsInLogUnitList = 0;
- for (final LogUnit logUnit : logUnits) {
- if (!logUnit.hasOneOrMoreWords()) {
- // Digits outside words are a privacy threat.
- if (logUnit.mayContainDigit()) {
- return PUBLISHABILITY_UNPUBLISHABLE_MAY_CONTAIN_DIGIT;
- }
- } else {
- numWordsInLogUnitList += logUnit.getNumWords();
- final String[] words = logUnit.getWordsAsStringArray();
- for (final String word : words) {
- // Words not in the dictionary are a privacy threat.
- if (ResearchLogger.hasLetters(word) && !isValidDictWord(word)) {
- if (DEBUG) {
- Log.d(TAG, "\"" + word + "\" NOT SAFE!: hasLetters: "
- + ResearchLogger.hasLetters(word)
- + ", isValid: " + isValidDictWord(word));
- }
- return PUBLISHABILITY_UNPUBLISHABLE_NOT_IN_DICTIONARY;
- }
- }
- }
- }
-
- // Finally, only return true if the ngram is the right size.
- if (numWordsInLogUnitList == nGramSize) {
- return PUBLISHABILITY_PUBLISHABLE;
- } else {
- return PUBLISHABILITY_UNPUBLISHABLE_INCORRECT_WORD_COUNT;
- }
- }
-
- public void shiftAndPublishAll() throws IOException {
- final LinkedList<LogUnit> logUnits = getLogUnits();
- while (!logUnits.isEmpty()) {
- publishLogUnitsAtFrontOfBuffer();
- }
- }
-
- @Override
- protected final void onBufferFull() {
- try {
- publishLogUnitsAtFrontOfBuffer();
- } catch (final IOException e) {
- if (DEBUG) {
- Log.w(TAG, "IOException when publishing front of LogBuffer", e);
- }
- }
- }
-
- /**
- * If there is a safe n-gram at the front of this log buffer, publish it with all details, and
- * remove the LogUnits that constitute it.
- *
- * An n-gram might not be "safe" if it violates privacy controls. E.g., it might contain
- * numbers, an out-of-vocabulary word, or another n-gram may have been published recently. If
- * there is no safe n-gram, then the LogUnits up through the first word-containing LogUnit are
- * published, but without disclosing any privacy-related details, such as the word the LogUnit
- * generated, motion data, etc.
- *
- * Note that a LogUnit can hold more than one word if the user types without explicit spaces.
- * In this case, the words may be grouped together in such a way that pulling an n-gram off the
- * front would require splitting a LogUnit. Splitting a LogUnit is not possible, so this case
- * is treated just as the unsafe n-gram case. This may cause n-grams to be sampled at slightly
- * less than the target frequency.
- */
- protected final void publishLogUnitsAtFrontOfBuffer() throws IOException {
- // TODO: Refactor this method to require fewer passes through the LogUnits. Should really
- // require only one pass.
- ArrayList<LogUnit> logUnits = peekAtFirstNWords(N_GRAM_SIZE);
- final int publishabilityResultCode = getPublishabilityResultCode(logUnits, N_GRAM_SIZE);
- ResearchLogger.recordPublishabilityResultCode(publishabilityResultCode);
- if (publishabilityResultCode == MainLogBuffer.PUBLISHABILITY_PUBLISHABLE) {
- // Good n-gram at the front of the buffer. Publish it, disclosing details.
- publish(logUnits, true /* canIncludePrivateData */);
- shiftOutWords(N_GRAM_SIZE);
- mNumWordsUntilSafeToSample = mNumWordsBetweenNGrams;
- return;
- }
- // No good n-gram at front, and buffer is full. Shift out up through the first logUnit
- // with associated words (or if there is none, all the existing logUnits).
- logUnits.clear();
- LogUnit logUnit = shiftOut();
- while (logUnit != null) {
- logUnits.add(logUnit);
- final int numWords = logUnit.getNumWords();
- if (numWords > 0) {
- mNumWordsUntilSafeToSample = Math.max(0, mNumWordsUntilSafeToSample - numWords);
- break;
- }
- logUnit = shiftOut();
- }
- publish(logUnits, false /* canIncludePrivateData */);
- }
-
- /**
- * Called when a list of logUnits should be published.
- *
- * It is the subclass's responsibility to implement the publication.
- *
- * @param logUnits The list of logUnits to be published.
- * @param canIncludePrivateData Whether the private data in the logUnits can be included in
- * publication.
- *
- * @throws IOException if publication to the log file is not possible
- */
- protected abstract void publish(final ArrayList<LogUnit> logUnits,
- final boolean canIncludePrivateData) throws IOException;
-
- @Override
- protected int shiftOutWords(final int numWords) {
- final int numWordsShiftedOut = super.shiftOutWords(numWords);
- mNumWordsUntilSafeToSample = Math.max(0, mNumWordsUntilSafeToSample - numWordsShiftedOut);
- if (DEBUG) {
- Log.d(TAG, "wordsUntilSafeToSample now at " + mNumWordsUntilSafeToSample);
- }
- return numWordsShiftedOut;
- }
-}
diff --git a/java/src/com/android/inputmethod/research/MotionEventReader.java b/java/src/com/android/inputmethod/research/MotionEventReader.java
deleted file mode 100644
index 3388645b7..000000000
--- a/java/src/com/android/inputmethod/research/MotionEventReader.java
+++ /dev/null
@@ -1,326 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-package com.android.inputmethod.research;
-
-import android.util.JsonReader;
-import android.util.Log;
-import android.view.MotionEvent;
-import android.view.MotionEvent.PointerCoords;
-import android.view.MotionEvent.PointerProperties;
-
-import com.android.inputmethod.annotations.UsedForTesting;
-import com.android.inputmethod.latin.define.ProductionFlag;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.util.ArrayList;
-
-public class MotionEventReader {
- private static final String TAG = MotionEventReader.class.getSimpleName();
- private static final boolean DEBUG = false
- && ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS_DEBUG;
- // Assumes that MotionEvent.ACTION_MASK does not have all bits set.`
- private static final int UNINITIALIZED_ACTION = ~MotionEvent.ACTION_MASK;
- // No legitimate int is negative
- private static final int UNINITIALIZED_INT = -1;
- // No legitimate long is negative
- private static final long UNINITIALIZED_LONG = -1L;
- // No legitimate float is negative
- private static final float UNINITIALIZED_FLOAT = -1.0f;
-
- public ReplayData readMotionEventData(final File file) {
- final ReplayData replayData = new ReplayData();
- try {
- // Read file
- final JsonReader jsonReader = new JsonReader(new BufferedReader(new InputStreamReader(
- new FileInputStream(file))));
- jsonReader.beginArray();
- while (jsonReader.hasNext()) {
- readLogStatement(jsonReader, replayData);
- }
- jsonReader.endArray();
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- return replayData;
- }
-
- @UsedForTesting
- static class ReplayData {
- final ArrayList<Integer> mActions = new ArrayList<Integer>();
- final ArrayList<PointerProperties[]> mPointerPropertiesArrays
- = new ArrayList<PointerProperties[]>();
- final ArrayList<PointerCoords[]> mPointerCoordsArrays = new ArrayList<PointerCoords[]>();
- final ArrayList<Long> mTimes = new ArrayList<Long>();
- }
-
- /**
- * Read motion data from a logStatement and store it in {@code replayData}.
- *
- * Two kinds of logStatements can be read. In the first variant, the MotionEvent data is
- * represented as attributes at the top level like so:
- *
- * <pre>
- * {
- * "_ct": 1359590400000,
- * "_ut": 4381933,
- * "_ty": "MotionEvent",
- * "action": "UP",
- * "isLoggingRelated": false,
- * "x": 100,
- * "y": 200
- * }
- * </pre>
- *
- * In the second variant, there is a separate attribute for the MotionEvent that includes
- * historical data if present:
- *
- * <pre>
- * {
- * "_ct": 135959040000,
- * "_ut": 4382702,
- * "_ty": "MotionEvent",
- * "action": "MOVE",
- * "isLoggingRelated": false,
- * "motionEvent": {
- * "pointerIds": [
- * 0
- * ],
- * "xyt": [
- * {
- * "t": 4382551,
- * "d": [
- * {
- * "x": 141.25,
- * "y": 151.8485107421875,
- * "toma": 101.82337188720703,
- * "tomi": 101.82337188720703,
- * "o": 0.0
- * }
- * ]
- * },
- * {
- * "t": 4382559,
- * "d": [
- * {
- * "x": 140.7266082763672,
- * "y": 151.8485107421875,
- * "toma": 101.82337188720703,
- * "tomi": 101.82337188720703,
- * "o": 0.0
- * }
- * ]
- * }
- * ]
- * }
- * },
- * </pre>
- */
- @UsedForTesting
- /* package for test */ void readLogStatement(final JsonReader jsonReader,
- final ReplayData replayData) throws IOException {
- String logStatementType = null;
- int actionType = UNINITIALIZED_ACTION;
- int x = UNINITIALIZED_INT;
- int y = UNINITIALIZED_INT;
- long time = UNINITIALIZED_LONG;
- boolean isLoggingRelated = false;
-
- jsonReader.beginObject();
- while (jsonReader.hasNext()) {
- final String key = jsonReader.nextName();
- if (key.equals("_ty")) {
- logStatementType = jsonReader.nextString();
- } else if (key.equals("_ut")) {
- time = jsonReader.nextLong();
- } else if (key.equals("x")) {
- x = jsonReader.nextInt();
- } else if (key.equals("y")) {
- y = jsonReader.nextInt();
- } else if (key.equals("action")) {
- final String s = jsonReader.nextString();
- if (s.equals("UP")) {
- actionType = MotionEvent.ACTION_UP;
- } else if (s.equals("DOWN")) {
- actionType = MotionEvent.ACTION_DOWN;
- } else if (s.equals("MOVE")) {
- actionType = MotionEvent.ACTION_MOVE;
- }
- } else if (key.equals("loggingRelated")) {
- isLoggingRelated = jsonReader.nextBoolean();
- } else if (logStatementType != null && logStatementType.equals("MotionEvent")
- && key.equals("motionEvent")) {
- if (actionType == UNINITIALIZED_ACTION) {
- Log.e(TAG, "no actionType assigned in MotionEvent json");
- }
- // Second variant of LogStatement.
- if (isLoggingRelated) {
- jsonReader.skipValue();
- } else {
- readEmbeddedMotionEvent(jsonReader, replayData, actionType);
- }
- } else {
- if (DEBUG) {
- Log.w(TAG, "Unknown JSON key in LogStatement: " + key);
- }
- jsonReader.skipValue();
- }
- }
- jsonReader.endObject();
-
- if (logStatementType != null && time != UNINITIALIZED_LONG && x != UNINITIALIZED_INT
- && y != UNINITIALIZED_INT && actionType != UNINITIALIZED_ACTION
- && logStatementType.equals("MotionEvent") && !isLoggingRelated) {
- // First variant of LogStatement.
- final PointerProperties pointerProperties = new PointerProperties();
- pointerProperties.id = 0;
- pointerProperties.toolType = MotionEvent.TOOL_TYPE_UNKNOWN;
- final PointerProperties[] pointerPropertiesArray = {
- pointerProperties
- };
- final PointerCoords pointerCoords = new PointerCoords();
- pointerCoords.x = x;
- pointerCoords.y = y;
- pointerCoords.pressure = 1.0f;
- pointerCoords.size = 1.0f;
- final PointerCoords[] pointerCoordsArray = {
- pointerCoords
- };
- addMotionEventData(replayData, actionType, time, pointerPropertiesArray,
- pointerCoordsArray);
- }
- }
-
- private void readEmbeddedMotionEvent(final JsonReader jsonReader, final ReplayData replayData,
- final int actionType) throws IOException {
- jsonReader.beginObject();
- PointerProperties[] pointerPropertiesArray = null;
- while (jsonReader.hasNext()) { // pointerIds/xyt
- final String name = jsonReader.nextName();
- if (name.equals("pointerIds")) {
- pointerPropertiesArray = readPointerProperties(jsonReader);
- } else if (name.equals("xyt")) {
- readPointerData(jsonReader, replayData, actionType, pointerPropertiesArray);
- }
- }
- jsonReader.endObject();
- }
-
- private PointerProperties[] readPointerProperties(final JsonReader jsonReader)
- throws IOException {
- final ArrayList<PointerProperties> pointerPropertiesArrayList =
- new ArrayList<PointerProperties>();
- jsonReader.beginArray();
- while (jsonReader.hasNext()) {
- final PointerProperties pointerProperties = new PointerProperties();
- pointerProperties.id = jsonReader.nextInt();
- pointerProperties.toolType = MotionEvent.TOOL_TYPE_UNKNOWN;
- pointerPropertiesArrayList.add(pointerProperties);
- }
- jsonReader.endArray();
- return pointerPropertiesArrayList.toArray(
- new PointerProperties[pointerPropertiesArrayList.size()]);
- }
-
- private void readPointerData(final JsonReader jsonReader, final ReplayData replayData,
- final int actionType, final PointerProperties[] pointerPropertiesArray)
- throws IOException {
- if (pointerPropertiesArray == null) {
- Log.e(TAG, "PointerIDs must be given before xyt data in json for MotionEvent");
- jsonReader.skipValue();
- return;
- }
- long time = UNINITIALIZED_LONG;
- jsonReader.beginArray();
- while (jsonReader.hasNext()) { // Array of historical data
- jsonReader.beginObject();
- final ArrayList<PointerCoords> pointerCoordsArrayList = new ArrayList<PointerCoords>();
- while (jsonReader.hasNext()) { // Time/data object
- final String name = jsonReader.nextName();
- if (name.equals("t")) {
- time = jsonReader.nextLong();
- } else if (name.equals("d")) {
- jsonReader.beginArray();
- while (jsonReader.hasNext()) { // array of data per pointer
- final PointerCoords pointerCoords = readPointerCoords(jsonReader);
- if (pointerCoords != null) {
- pointerCoordsArrayList.add(pointerCoords);
- }
- }
- jsonReader.endArray();
- } else {
- jsonReader.skipValue();
- }
- }
- jsonReader.endObject();
- // Data was recorded as historical events, but must be split apart into
- // separate MotionEvents for replaying
- if (time != UNINITIALIZED_LONG) {
- addMotionEventData(replayData, actionType, time, pointerPropertiesArray,
- pointerCoordsArrayList.toArray(
- new PointerCoords[pointerCoordsArrayList.size()]));
- } else {
- Log.e(TAG, "Time not assigned in json for MotionEvent");
- }
- }
- jsonReader.endArray();
- }
-
- private PointerCoords readPointerCoords(final JsonReader jsonReader) throws IOException {
- jsonReader.beginObject();
- float x = UNINITIALIZED_FLOAT;
- float y = UNINITIALIZED_FLOAT;
- while (jsonReader.hasNext()) { // x,y
- final String name = jsonReader.nextName();
- if (name.equals("x")) {
- x = (float) jsonReader.nextDouble();
- } else if (name.equals("y")) {
- y = (float) jsonReader.nextDouble();
- } else {
- jsonReader.skipValue();
- }
- }
- jsonReader.endObject();
-
- if (Float.compare(x, UNINITIALIZED_FLOAT) == 0
- || Float.compare(y, UNINITIALIZED_FLOAT) == 0) {
- Log.w(TAG, "missing x or y value in MotionEvent json");
- return null;
- }
- final PointerCoords pointerCoords = new PointerCoords();
- pointerCoords.x = x;
- pointerCoords.y = y;
- pointerCoords.pressure = 1.0f;
- pointerCoords.size = 1.0f;
- return pointerCoords;
- }
-
- private void addMotionEventData(final ReplayData replayData, final int actionType,
- final long time, final PointerProperties[] pointerProperties,
- final PointerCoords[] pointerCoords) {
- replayData.mActions.add(actionType);
- replayData.mTimes.add(time);
- replayData.mPointerPropertiesArrays.add(pointerProperties);
- replayData.mPointerCoordsArrays.add(pointerCoords);
- }
-}
diff --git a/java/src/com/android/inputmethod/research/Replayer.java b/java/src/com/android/inputmethod/research/Replayer.java
deleted file mode 100644
index 903875f3c..000000000
--- a/java/src/com/android/inputmethod/research/Replayer.java
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.research;
-
-import android.os.Handler;
-import android.os.Looper;
-import android.os.Message;
-import android.os.SystemClock;
-import android.util.Log;
-import android.view.MotionEvent;
-import android.view.MotionEvent.PointerCoords;
-import android.view.MotionEvent.PointerProperties;
-
-import com.android.inputmethod.keyboard.KeyboardSwitcher;
-import com.android.inputmethod.keyboard.MainKeyboardView;
-import com.android.inputmethod.latin.define.ProductionFlag;
-import com.android.inputmethod.research.MotionEventReader.ReplayData;
-
-/**
- * Replays a sequence of motion events in realtime on the screen.
- *
- * Useful for user inspection of logged data.
- */
-public class Replayer {
- private static final String TAG = Replayer.class.getSimpleName();
- private static final boolean DEBUG = false
- && ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS_DEBUG;
- private static final long START_TIME_DELAY_MS = 500;
-
- private boolean mIsReplaying = false;
- private KeyboardSwitcher mKeyboardSwitcher;
-
- private Replayer() {
- }
-
- private static final Replayer sInstance = new Replayer();
- public static Replayer getInstance() {
- return sInstance;
- }
-
- public void setKeyboardSwitcher(final KeyboardSwitcher keyboardSwitcher) {
- mKeyboardSwitcher = keyboardSwitcher;
- }
-
- private static final int MSG_MOTION_EVENT = 0;
- private static final int MSG_DONE = 1;
- private static final int COMPLETION_TIME_MS = 500;
-
- // TODO: Support historical events and multi-touch.
- public void replay(final ReplayData replayData, final Runnable callback) {
- if (mIsReplaying) {
- return;
- }
- mIsReplaying = true;
- final int numActions = replayData.mActions.size();
- if (DEBUG) {
- Log.d(TAG, "replaying " + numActions + " actions");
- }
- if (numActions == 0) {
- mIsReplaying = false;
- return;
- }
- final MainKeyboardView mainKeyboardView = mKeyboardSwitcher.getMainKeyboardView();
-
- // The reference time relative to the times stored in events.
- final long origStartTime = replayData.mTimes.get(0);
- // The reference time relative to which events are replayed in the present.
- final long currentStartTime = SystemClock.uptimeMillis() + START_TIME_DELAY_MS;
- // The adjustment needed to translate times from the original recorded time to the current
- // time.
- final long timeAdjustment = currentStartTime - origStartTime;
- final Handler handler = new Handler(Looper.getMainLooper()) {
- // Track the time of the most recent DOWN event, to be passed as a parameter when
- // constructing a MotionEvent. It's initialized here to the origStartTime, but this is
- // only a precaution. The value should be overwritten by the first ACTION_DOWN event
- // before the first use of the variable. Note that this may cause the first few events
- // to have incorrect {@code downTime}s.
- private long mOrigDownTime = origStartTime;
-
- @Override
- public void handleMessage(final Message msg) {
- switch (msg.what) {
- case MSG_MOTION_EVENT:
- final int index = msg.arg1;
- final int action = replayData.mActions.get(index);
- final PointerProperties[] pointerPropertiesArray =
- replayData.mPointerPropertiesArrays.get(index);
- final PointerCoords[] pointerCoordsArray =
- replayData.mPointerCoordsArrays.get(index);
- final long origTime = replayData.mTimes.get(index);
- if (action == MotionEvent.ACTION_DOWN) {
- mOrigDownTime = origTime;
- }
-
- final MotionEvent me = MotionEvent.obtain(mOrigDownTime + timeAdjustment,
- origTime + timeAdjustment, action,
- pointerPropertiesArray.length, pointerPropertiesArray,
- pointerCoordsArray, 0, 0, 1.0f, 1.0f, 0, 0, 0, 0);
- mainKeyboardView.processMotionEvent(me);
- me.recycle();
- break;
- case MSG_DONE:
- mIsReplaying = false;
- ResearchLogger.getInstance().requestIndicatorRedraw();
- break;
- }
- }
- };
-
- handler.post(new Runnable() {
- @Override
- public void run() {
- ResearchLogger.getInstance().requestIndicatorRedraw();
- }
- });
- for (int i = 0; i < numActions; i++) {
- final Message msg = Message.obtain(handler, MSG_MOTION_EVENT, i, 0);
- final long msgTime = replayData.mTimes.get(i) + timeAdjustment;
- handler.sendMessageAtTime(msg, msgTime);
- if (DEBUG) {
- Log.d(TAG, "queuing event at " + msgTime);
- }
- }
-
- final long presentDoneTime = replayData.mTimes.get(numActions - 1) + timeAdjustment
- + COMPLETION_TIME_MS;
- handler.sendMessageAtTime(Message.obtain(handler, MSG_DONE), presentDoneTime);
- if (callback != null) {
- handler.postAtTime(callback, presentDoneTime + 1);
- }
- }
-
- public boolean isReplaying() {
- return mIsReplaying;
- }
-}
diff --git a/java/src/com/android/inputmethod/research/ReplayerService.java b/java/src/com/android/inputmethod/research/ReplayerService.java
deleted file mode 100644
index 88d9033cf..000000000
--- a/java/src/com/android/inputmethod/research/ReplayerService.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License"); you may not
- * use this file except in compliance with the License. You may obtain a copy of
- * the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations under
- * the License.
- */
-
-package com.android.inputmethod.research;
-
-import android.app.IntentService;
-import android.content.Intent;
-import android.util.Log;
-
-import com.android.inputmethod.research.MotionEventReader.ReplayData;
-
-import java.io.File;
-import java.util.concurrent.TimeUnit;
-
-/**
- * Provide a mechanism to invoke the replayer from outside.
- *
- * In particular, makes access from a host possible through {@code adb am startservice}.
- */
-public class ReplayerService extends IntentService {
- private static final String TAG = ReplayerService.class.getSimpleName();
- private static final String EXTRA_FILENAME = "com.android.inputmethod.research.extra.FILENAME";
- private static final long MAX_REPLAY_TIME = TimeUnit.SECONDS.toMillis(60);
-
- public ReplayerService() {
- super(ReplayerService.class.getSimpleName());
- }
-
- @Override
- protected void onHandleIntent(final Intent intent) {
- final String filename = intent.getStringExtra(EXTRA_FILENAME);
- if (filename == null) return;
-
- final ReplayData replayData = new MotionEventReader().readMotionEventData(
- new File(filename));
- synchronized (this) {
- Replayer.getInstance().replay(replayData, new Runnable() {
- @Override
- public void run() {
- synchronized (ReplayerService.this) {
- ReplayerService.this.notify();
- }
- }
- });
- try {
- wait(MAX_REPLAY_TIME);
- } catch (InterruptedException e) {
- Log.e(TAG, "Timeout while replaying.", e);
- }
- }
- }
-}
diff --git a/java/src/com/android/inputmethod/research/ResearchLog.java b/java/src/com/android/inputmethod/research/ResearchLog.java
deleted file mode 100644
index 46e620ae5..000000000
--- a/java/src/com/android/inputmethod/research/ResearchLog.java
+++ /dev/null
@@ -1,298 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.research;
-
-import android.content.Context;
-import android.util.JsonWriter;
-import android.util.Log;
-
-import com.android.inputmethod.annotations.UsedForTesting;
-import com.android.inputmethod.latin.define.ProductionFlag;
-
-import java.io.BufferedWriter;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.OutputStreamWriter;
-import java.util.concurrent.Callable;
-import java.util.concurrent.Executors;
-import java.util.concurrent.RejectedExecutionException;
-import java.util.concurrent.ScheduledExecutorService;
-import java.util.concurrent.ScheduledFuture;
-import java.util.concurrent.TimeUnit;
-
-/**
- * Logs the use of the LatinIME keyboard.
- *
- * This class logs operations on the IME keyboard, including what the user has typed. Data is
- * written to a {@link JsonWriter}, which will write to a local file.
- *
- * The JsonWriter is created on-demand by calling {@link #getInitializedJsonWriterLocked}.
- *
- * This class uses an executor to perform file-writing operations on a separate thread. It also
- * tries to avoid creating unnecessary files if there is nothing to write. It also handles
- * flushing, making sure it happens, but not too frequently.
- *
- * This functionality is off by default. See
- * {@link ProductionFlag#USES_DEVELOPMENT_ONLY_DIAGNOSTICS}.
- */
-public class ResearchLog {
- // TODO: Automatically initialize the JsonWriter rather than requiring the caller to manage it.
- private static final String TAG = ResearchLog.class.getSimpleName();
- private static final boolean DEBUG = false
- && ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS_DEBUG;
- private static final long FLUSH_DELAY_IN_MS = TimeUnit.SECONDS.toMillis(5);
-
- /* package */ final ScheduledExecutorService mExecutor;
- /* package */ final File mFile;
- private final Context mContext;
-
- // Earlier implementations used a dummy JsonWriter that just swallowed what it was given, but
- // this was tricky to do well, because JsonWriter throws an exception if it is passed more than
- // one top-level object.
- private JsonWriter mJsonWriter = null;
-
- // true if at least one byte of data has been written out to the log file. This must be
- // remembered because JsonWriter requires that calls matching calls to beginObject and
- // endObject, as well as beginArray and endArray, and the file is opened lazily, only when
- // it is certain that data will be written. Alternatively, the matching call exceptions
- // could be caught, but this might suppress other errors.
- private boolean mHasWrittenData = false;
-
- public ResearchLog(final File outputFile, final Context context) {
- mExecutor = Executors.newSingleThreadScheduledExecutor();
- mFile = outputFile;
- mContext = context;
- }
-
- /**
- * Returns true if this is a FeedbackLog.
- *
- * FeedbackLogs record only the data associated with a Feedback dialog. Instead of normal
- * logging, they contain a LogStatement with the complete feedback string and optionally a
- * recording of the user's supplied demo of the problem.
- */
- public boolean isFeedbackLog() {
- return false;
- }
-
- /**
- * Waits for any publication requests to finish and closes the {@link JsonWriter} used for
- * output.
- *
- * See class comment for details about {@code JsonWriter} construction.
- *
- * @param onClosed run after the close() operation has completed asynchronously
- */
- private synchronized void close(final Runnable onClosed) {
- mExecutor.submit(new Callable<Object>() {
- @Override
- public Object call() throws Exception {
- try {
- if (mJsonWriter == null) return null;
- // TODO: This is necessary to avoid an exception. Better would be to not even
- // open the JsonWriter if the file is not even opened unless there is valid data
- // to write.
- if (!mHasWrittenData) {
- mJsonWriter.beginArray();
- }
- mJsonWriter.endArray();
- mHasWrittenData = false;
- mJsonWriter.flush();
- mJsonWriter.close();
- if (DEBUG) {
- Log.d(TAG, "closed " + mFile);
- }
- } catch (final Exception e) {
- Log.d(TAG, "error when closing ResearchLog:", e);
- } finally {
- // Marking the file as read-only signals that this log file is ready to be
- // uploaded.
- if (mFile != null && mFile.exists()) {
- mFile.setWritable(false, false);
- }
- if (onClosed != null) {
- onClosed.run();
- }
- }
- return null;
- }
- });
- removeAnyScheduledFlush();
- mExecutor.shutdown();
- }
-
- /**
- * Block until the research log has shut down and spooled out all output or {@code timeout}
- * occurs.
- *
- * @param timeout time to wait for close in milliseconds
- */
- public void blockingClose(final long timeout) {
- close(null);
- awaitTermination(timeout, TimeUnit.MILLISECONDS);
- }
-
- /**
- * Waits for publication requests to finish, closes the JsonWriter, but then deletes the backing
- * output file.
- *
- * @param onAbort run after the abort() operation has completed asynchronously
- */
- private synchronized void abort(final Runnable onAbort) {
- mExecutor.submit(new Callable<Object>() {
- @Override
- public Object call() throws Exception {
- try {
- if (mJsonWriter == null) return null;
- if (mHasWrittenData) {
- // TODO: This is necessary to avoid an exception. Better would be to not
- // even open the JsonWriter if the file is not even opened unless there is
- // valid data to write.
- if (!mHasWrittenData) {
- mJsonWriter.beginArray();
- }
- mJsonWriter.endArray();
- mJsonWriter.close();
- mHasWrittenData = false;
- }
- } finally {
- if (mFile != null) {
- mFile.delete();
- }
- if (onAbort != null) {
- onAbort.run();
- }
- }
- return null;
- }
- });
- removeAnyScheduledFlush();
- mExecutor.shutdown();
- }
-
- /**
- * Block until the research log has aborted or {@code timeout} occurs.
- *
- * @param timeout time to wait for close in milliseconds
- */
- public void blockingAbort(final long timeout) {
- abort(null);
- awaitTermination(timeout, TimeUnit.MILLISECONDS);
- }
-
- @UsedForTesting
- public void awaitTermination(final long delay, final TimeUnit timeUnit) {
- try {
- if (!mExecutor.awaitTermination(delay, timeUnit)) {
- Log.e(TAG, "ResearchLog executor timed out while awaiting terminaion");
- }
- } catch (final InterruptedException e) {
- Log.e(TAG, "ResearchLog executor interrupted while awaiting terminaion", e);
- }
- }
-
- /* package */ synchronized void flush() {
- removeAnyScheduledFlush();
- mExecutor.submit(mFlushCallable);
- }
-
- private final Callable<Object> mFlushCallable = new Callable<Object>() {
- @Override
- public Object call() throws Exception {
- if (mJsonWriter != null) mJsonWriter.flush();
- return null;
- }
- };
-
- private ScheduledFuture<Object> mFlushFuture;
-
- private void removeAnyScheduledFlush() {
- if (mFlushFuture != null) {
- mFlushFuture.cancel(false);
- mFlushFuture = null;
- }
- }
-
- private void scheduleFlush() {
- removeAnyScheduledFlush();
- mFlushFuture = mExecutor.schedule(mFlushCallable, FLUSH_DELAY_IN_MS, TimeUnit.MILLISECONDS);
- }
-
- /**
- * Queues up {@code logUnit} to be published in the background.
- *
- * @param logUnit the {@link LogUnit} to be published
- * @param canIncludePrivateData whether private data in the LogUnit should be included
- */
- public synchronized void publish(final LogUnit logUnit, final boolean canIncludePrivateData) {
- try {
- mExecutor.submit(new Callable<Object>() {
- @Override
- public Object call() throws Exception {
- logUnit.publishTo(ResearchLog.this, canIncludePrivateData);
- scheduleFlush();
- return null;
- }
- });
- } catch (final RejectedExecutionException e) {
- // TODO: Add code to record loss of data, and report.
- if (DEBUG) {
- Log.d(TAG, "ResearchLog.publish() rejecting scheduled execution", e);
- }
- }
- }
-
- /**
- * Return a JsonWriter for this ResearchLog. It is initialized the first time this method is
- * called. The cached value is returned in future calls.
- *
- * @throws IOException if opening the JsonWriter is not possible
- */
- public JsonWriter getInitializedJsonWriterLocked() throws IOException {
- if (mJsonWriter != null) return mJsonWriter;
- if (mFile == null) throw new FileNotFoundException();
- try {
- final JsonWriter jsonWriter = createJsonWriter(mContext, mFile);
- if (jsonWriter == null) throw new IOException("Could not create JsonWriter");
-
- jsonWriter.beginArray();
- mJsonWriter = jsonWriter;
- mHasWrittenData = true;
- return mJsonWriter;
- } catch (final IOException e) {
- if (DEBUG) {
- Log.w(TAG, "Exception when creating JsonWriter", e);
- Log.w(TAG, "Closing JsonWriter");
- }
- if (mJsonWriter != null) mJsonWriter.close();
- mJsonWriter = null;
- throw e;
- }
- }
-
- /**
- * Create the JsonWriter to write the ResearchLog to.
- *
- * This method may be overriden in testing to redirect the output.
- */
- /* package for test */ JsonWriter createJsonWriter(final Context context, final File file)
- throws IOException {
- return new JsonWriter(new BufferedWriter(new OutputStreamWriter(
- context.openFileOutput(file.getName(), Context.MODE_PRIVATE))));
- }
-}
diff --git a/java/src/com/android/inputmethod/research/ResearchLogDirectory.java b/java/src/com/android/inputmethod/research/ResearchLogDirectory.java
deleted file mode 100644
index d156068d6..000000000
--- a/java/src/com/android/inputmethod/research/ResearchLogDirectory.java
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.research;
-
-import android.content.Context;
-import android.util.Log;
-
-import java.io.File;
-import java.io.FileFilter;
-
-/**
- * Manages log files.
- *
- * This class handles all aspects where and how research log data is stored. This includes
- * generating log filenames in the correct place with the correct names, and cleaning up log files
- * under this directory.
- */
-public class ResearchLogDirectory {
- public static final String TAG = ResearchLogDirectory.class.getSimpleName();
- /* package */ static final String LOG_FILENAME_PREFIX = "researchLog";
- private static final String FILENAME_SUFFIX = ".txt";
- private static final String USER_RECORDING_FILENAME_PREFIX = "recording";
-
- private static final ReadOnlyLogFileFilter sUploadableLogFileFilter =
- new ReadOnlyLogFileFilter();
-
- private final File mFilesDir;
-
- static class ReadOnlyLogFileFilter implements FileFilter {
- @Override
- public boolean accept(final File pathname) {
- return pathname.getName().startsWith(ResearchLogDirectory.LOG_FILENAME_PREFIX)
- && !pathname.canWrite();
- }
- }
-
- /**
- * Creates a new ResearchLogDirectory, creating the storage directory if it does not exist.
- */
- public ResearchLogDirectory(final Context context) {
- mFilesDir = getLoggingDirectory(context);
- if (mFilesDir == null) {
- throw new NullPointerException("No files directory specified");
- }
- if (!mFilesDir.exists()) {
- mFilesDir.mkdirs();
- }
- }
-
- private File getLoggingDirectory(final Context context) {
- // TODO: Switch to using a subdirectory of getFilesDir().
- return context.getFilesDir();
- }
-
- /**
- * Get an array of log files that are ready for uploading.
- *
- * A file is ready for uploading if it is marked as read-only.
- *
- * @return the array of uploadable files
- */
- public File[] getUploadableLogFiles() {
- try {
- return mFilesDir.listFiles(sUploadableLogFileFilter);
- } catch (final SecurityException e) {
- Log.e(TAG, "Could not cleanup log directory, permission denied", e);
- return new File[0];
- }
- }
-
- public void cleanupLogFilesOlderThan(final long time) {
- try {
- for (final File file : mFilesDir.listFiles()) {
- final String filename = file.getName();
- if ((filename.startsWith(LOG_FILENAME_PREFIX)
- || filename.startsWith(USER_RECORDING_FILENAME_PREFIX))
- && (file.lastModified() < time)) {
- file.delete();
- }
- }
- } catch (final SecurityException e) {
- Log.e(TAG, "Could not cleanup log directory, permission denied", e);
- }
- }
-
- public File getLogFilePath(final long time, final long nanoTime) {
- return new File(mFilesDir, getUniqueFilename(LOG_FILENAME_PREFIX, time, nanoTime));
- }
-
- public File getUserRecordingFilePath(final long time, final long nanoTime) {
- return new File(mFilesDir, getUniqueFilename(USER_RECORDING_FILENAME_PREFIX, time,
- nanoTime));
- }
-
- private static String getUniqueFilename(final String prefix, final long time,
- final long nanoTime) {
- return prefix + "-" + time + "-" + nanoTime + FILENAME_SUFFIX;
- }
-}
diff --git a/java/src/com/android/inputmethod/research/ResearchLogger.java b/java/src/com/android/inputmethod/research/ResearchLogger.java
deleted file mode 100644
index d907dd1b0..000000000
--- a/java/src/com/android/inputmethod/research/ResearchLogger.java
+++ /dev/null
@@ -1,1885 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.research;
-
-import static com.android.inputmethod.latin.Constants.Subtype.ExtraValue.KEYBOARD_LAYOUT_SET;
-
-import android.accounts.Account;
-import android.accounts.AccountManager;
-import android.content.Context;
-import android.content.Intent;
-import android.content.SharedPreferences;
-import android.content.pm.PackageInfo;
-import android.content.pm.PackageManager.NameNotFoundException;
-import android.content.res.Resources;
-import android.graphics.Canvas;
-import android.graphics.Color;
-import android.graphics.Paint;
-import android.graphics.Paint.Style;
-import android.os.Build;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.IBinder;
-import android.os.SystemClock;
-import android.preference.PreferenceManager;
-import android.text.TextUtils;
-import android.util.Log;
-import android.view.KeyEvent;
-import android.view.MotionEvent;
-import android.view.inputmethod.CompletionInfo;
-import android.view.inputmethod.EditorInfo;
-import android.view.inputmethod.InputConnection;
-import android.widget.Toast;
-
-import com.android.inputmethod.keyboard.Key;
-import com.android.inputmethod.keyboard.Keyboard;
-import com.android.inputmethod.keyboard.KeyboardId;
-import com.android.inputmethod.keyboard.KeyboardSwitcher;
-import com.android.inputmethod.keyboard.KeyboardView;
-import com.android.inputmethod.keyboard.MainKeyboardView;
-import com.android.inputmethod.latin.Constants;
-import com.android.inputmethod.latin.DictionaryFacilitatorForSuggest;
-import com.android.inputmethod.latin.LatinIME;
-import com.android.inputmethod.latin.R;
-import com.android.inputmethod.latin.RichInputConnection;
-import com.android.inputmethod.latin.SuggestedWords;
-import com.android.inputmethod.latin.define.ProductionFlag;
-import com.android.inputmethod.latin.utils.InputTypeUtils;
-import com.android.inputmethod.latin.utils.StringUtils;
-import com.android.inputmethod.latin.utils.TextRange;
-import com.android.inputmethod.research.MotionEventReader.ReplayData;
-import com.android.inputmethod.research.ui.SplashScreen;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.nio.MappedByteBuffer;
-import java.nio.channels.FileChannel;
-import java.nio.charset.Charset;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Random;
-import java.util.concurrent.TimeUnit;
-import java.util.regex.Pattern;
-
-// TODO: Add a unit test for every "logging" method (i.e. that is called from the IME and calls
-// enqueueEvent to record a LogStatement).
-/**
- * Logs the use of the LatinIME keyboard.
- *
- * This class logs operations on the IME keyboard, including what the user has typed.
- * Data is stored locally in a file in app-specific storage.
- *
- * This functionality is off by default. See
- * {@link ProductionFlag#USES_DEVELOPMENT_ONLY_DIAGNOSTICS}.
- */
-public class ResearchLogger implements SharedPreferences.OnSharedPreferenceChangeListener,
- SplashScreen.UserConsentListener {
- // TODO: This class has grown quite large and combines several concerns that should be
- // separated. The following refactorings will be applied as soon as possible after adding
- // support for replaying historical events, fixing some replay bugs, adding some ui constraints
- // on the feedback dialog, and adding the survey dialog.
- // TODO: Refactor. Move feedback screen code into separate class.
- // TODO: Refactor. Move logging invocations into their own class.
- // TODO: Refactor. Move currentLogUnit management into separate class.
- private static final String TAG = ResearchLogger.class.getSimpleName();
- private static final boolean DEBUG = false
- && ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS_DEBUG;
- private static final boolean DEBUG_REPLAY_AFTER_FEEDBACK = false
- && ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS_DEBUG;
- // Whether the feedback dialog preserves the editable text across invocations. Should be false
- // for normal research builds so users do not have to delete the same feedback string they
- // entered earlier. Should be true for builds internal to a development team so when the text
- // field holds a channel name, the developer does not have to re-enter it when using the
- // feedback mechanism to generate multiple tests.
- private static final boolean FEEDBACK_DIALOG_SHOULD_PRESERVE_TEXT_FIELD = false;
- /* package */ static boolean sIsLogging = false;
- private static final int OUTPUT_FORMAT_VERSION = 6;
- // Whether all words should be recorded, leaving unsampled word between bigrams. Useful for
- // testing.
- /* package for test */ static final boolean IS_LOGGING_EVERYTHING = false
- && ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS_DEBUG;
- // The number of words between n-grams to omit from the log.
- private static final int NUMBER_OF_WORDS_BETWEEN_SAMPLES =
- IS_LOGGING_EVERYTHING ? 0 : (DEBUG ? 2 : 18);
-
- // Whether to show an indicator on the screen that logging is on. Currently a very small red
- // dot in the lower right hand corner. Most users should not notice it.
- private static final boolean IS_SHOWING_INDICATOR = true;
- // Change the default indicator to something very visible. Currently two red vertical bars on
- // either side of they keyboard.
- private static final boolean IS_SHOWING_INDICATOR_CLEARLY = false ||
- (IS_LOGGING_EVERYTHING && ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS_DEBUG);
- // FEEDBACK_WORD_BUFFER_SIZE should add 1 because it must also hold the feedback LogUnit itself.
- public static final int FEEDBACK_WORD_BUFFER_SIZE = (Integer.MAX_VALUE - 1) + 1;
-
- // The special output text to invoke a research feedback dialog.
- public static final String RESEARCH_KEY_OUTPUT_TEXT = ".research.";
-
- // constants related to specific log points
- private static final int[] WHITESPACE_SEPARATORS =
- StringUtils.toSortedCodePointArray(" \t\n\r");
- private static final int MAX_INPUTVIEW_LENGTH_TO_CAPTURE = 8192; // must be >=1
- private static final String PREF_RESEARCH_SAVED_CHANNEL = "pref_research_saved_channel";
-
- private static final long RESEARCHLOG_CLOSE_TIMEOUT_IN_MS = TimeUnit.SECONDS.toMillis(5);
- private static final long RESEARCHLOG_ABORT_TIMEOUT_IN_MS = TimeUnit.SECONDS.toMillis(5);
- private static final long DURATION_BETWEEN_DIR_CLEANUP_IN_MS = TimeUnit.DAYS.toMillis(1);
- private static final long MAX_LOGFILE_AGE_IN_MS = TimeUnit.DAYS.toMillis(4);
-
- private static final ResearchLogger sInstance = new ResearchLogger();
- private static String sAccountType = null;
- private static String sAllowedAccountDomain = null;
- private ResearchLog mMainResearchLog; // always non-null after init() is called
- // mFeedbackLog records all events for the session, private or not (excepting
- // passwords). It is written to permanent storage only if the user explicitly commands
- // the system to do so.
- // LogUnits are queued in the LogBuffers and published to the ResearchLogs when words are
- // complete.
- /* package for test */ MainLogBuffer mMainLogBuffer; // always non-null after init() is called
- /* package */ ResearchLog mUserRecordingLog;
- /* package */ LogBuffer mUserRecordingLogBuffer;
- private File mUserRecordingFile = null;
-
- private boolean mIsPasswordView = false;
- private SharedPreferences mPrefs;
-
- // digits entered by the user are replaced with this codepoint.
- /* package for test */ static final int DIGIT_REPLACEMENT_CODEPOINT =
- Character.codePointAt("\uE000", 0); // U+E000 is in the "private-use area"
- // U+E001 is in the "private-use area"
- /* package for test */ static final String WORD_REPLACEMENT_STRING = "\uE001";
- protected static final int SUSPEND_DURATION_IN_MINUTES = 1;
-
- // used to check whether words are not unique
- private DictionaryFacilitatorForSuggest mDictionaryFacilitator;
- private MainKeyboardView mMainKeyboardView;
- // TODO: Check whether a superclass can be used instead of LatinIME.
- /* package for test */ LatinIME mLatinIME;
- private final Statistics mStatistics;
- private final MotionEventReader mMotionEventReader = new MotionEventReader();
- private final Replayer mReplayer = Replayer.getInstance();
- private ResearchLogDirectory mResearchLogDirectory;
- private SplashScreen mSplashScreen;
-
- private Intent mUploadNowIntent;
-
- /* package for test */ LogUnit mCurrentLogUnit = new LogUnit();
-
- // Gestured or tapped words may be committed after the gesture of the next word has started.
- // To ensure that the gesture data of the next word is not associated with the previous word,
- // thereby leaking private data, we store the time of the down event that started the second
- // gesture, and when committing the earlier word, split the LogUnit.
- private long mSavedDownEventTime;
- private Bundle mFeedbackDialogBundle = null;
- // Whether the feedback dialog is visible, and the user is typing into it. Normal logging is
- // not performed on text that the user types into the feedback dialog.
- private boolean mInFeedbackDialog = false;
- private Handler mUserRecordingTimeoutHandler;
- private static final long USER_RECORDING_TIMEOUT_MS = TimeUnit.SECONDS.toMillis(30);
-
- // Stores a temporary LogUnit while generating a phantom space. Needed because phantom spaces
- // are issued out-of-order, immediately before the characters generated by other operations that
- // have already outputted LogStatements.
- private LogUnit mPhantomSpaceLogUnit = null;
-
- private ResearchLogger() {
- mStatistics = Statistics.getInstance();
- }
-
- public static ResearchLogger getInstance() {
- return sInstance;
- }
-
- public void init(final LatinIME latinIME, final KeyboardSwitcher keyboardSwitcher) {
- assert latinIME != null;
- mLatinIME = latinIME;
- mPrefs = PreferenceManager.getDefaultSharedPreferences(latinIME);
- mPrefs.registerOnSharedPreferenceChangeListener(this);
-
- // Initialize fields from preferences
- sIsLogging = ResearchSettings.readResearchLoggerEnabledFlag(mPrefs);
-
- // Initialize fields from resources
- final Resources res = latinIME.getResources();
- sAccountType = res.getString(R.string.research_account_type);
- sAllowedAccountDomain = res.getString(R.string.research_allowed_account_domain);
-
- // Initialize directory manager
- mResearchLogDirectory = new ResearchLogDirectory(mLatinIME);
- cleanLogDirectoryIfNeeded(mResearchLogDirectory, System.currentTimeMillis());
-
- // Initialize log buffers
- resetLogBuffers();
-
- // Initialize external services
- mUploadNowIntent = new Intent(mLatinIME, UploaderService.class);
- mUploadNowIntent.putExtra(UploaderService.EXTRA_UPLOAD_UNCONDITIONALLY, true);
- if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
- UploaderService.cancelAndRescheduleUploadingService(mLatinIME,
- true /* needsRescheduling */);
- }
- mReplayer.setKeyboardSwitcher(keyboardSwitcher);
- }
-
- private void resetLogBuffers() {
- mMainResearchLog = new ResearchLog(mResearchLogDirectory.getLogFilePath(
- System.currentTimeMillis(), System.nanoTime()), mLatinIME);
- final int numWordsToIgnore = new Random().nextInt(NUMBER_OF_WORDS_BETWEEN_SAMPLES + 1);
- mMainLogBuffer = new MainLogBuffer(NUMBER_OF_WORDS_BETWEEN_SAMPLES, numWordsToIgnore,
- mDictionaryFacilitator) {
- @Override
- protected void publish(final ArrayList<LogUnit> logUnits,
- boolean canIncludePrivateData) {
- canIncludePrivateData |= IS_LOGGING_EVERYTHING;
- for (final LogUnit logUnit : logUnits) {
- if (DEBUG) {
- final String wordsString = logUnit.getWordsAsString();
- Log.d(TAG, "onPublish: '" + wordsString
- + "', hc: " + logUnit.containsUserDeletions()
- + ", cipd: " + canIncludePrivateData);
- }
- for (final String word : logUnit.getWordsAsStringArray()) {
- final boolean isDictionaryWord = mDictionaryFacilitator != null
- && mDictionaryFacilitator.isValidMainDictWord(word);
- mStatistics.recordWordEntered(
- isDictionaryWord, logUnit.containsUserDeletions());
- }
- }
- publishLogUnits(logUnits, mMainResearchLog, canIncludePrivateData);
- }
- };
- }
-
- private void cleanLogDirectoryIfNeeded(final ResearchLogDirectory researchLogDirectory,
- final long now) {
- final long lastCleanupTime = ResearchSettings.readResearchLastDirCleanupTime(mPrefs);
- if (now - lastCleanupTime < DURATION_BETWEEN_DIR_CLEANUP_IN_MS) return;
- final long oldestAllowedFileTime = now - MAX_LOGFILE_AGE_IN_MS;
- mResearchLogDirectory.cleanupLogFilesOlderThan(oldestAllowedFileTime);
- ResearchSettings.writeResearchLastDirCleanupTime(mPrefs, now);
- }
-
- public void mainKeyboardView_onAttachedToWindow(final MainKeyboardView mainKeyboardView) {
- mMainKeyboardView = mainKeyboardView;
- maybeShowSplashScreen();
- }
-
- public void mainKeyboardView_onDetachedFromWindow() {
- mMainKeyboardView = null;
- }
-
- public void onDestroy() {
- if (mPrefs != null) {
- mPrefs.unregisterOnSharedPreferenceChangeListener(this);
- }
- }
-
- private void maybeShowSplashScreen() {
- if (ResearchSettings.readHasSeenSplash(mPrefs)) return;
- if (mSplashScreen != null && mSplashScreen.isShowing()) return;
- if (mMainKeyboardView == null) return;
- final IBinder windowToken = mMainKeyboardView.getWindowToken();
- if (windowToken == null) return;
-
- mSplashScreen = new SplashScreen(mLatinIME, this);
- mSplashScreen.showSplashScreen(windowToken);
- }
-
- @Override
- public void onSplashScreenUserClickedOk() {
- if (mPrefs == null) {
- mPrefs = PreferenceManager.getDefaultSharedPreferences(mLatinIME);
- if (mPrefs == null) return;
- }
- sIsLogging = true;
- ResearchSettings.writeResearchLoggerEnabledFlag(mPrefs, true);
- ResearchSettings.writeHasSeenSplash(mPrefs, true);
- restart();
- }
-
- private void checkForEmptyEditor() {
- if (mLatinIME == null) {
- return;
- }
- final InputConnection ic = mLatinIME.getCurrentInputConnection();
- if (ic == null) {
- return;
- }
- final CharSequence textBefore = ic.getTextBeforeCursor(1, 0);
- if (!TextUtils.isEmpty(textBefore)) {
- mStatistics.setIsEmptyUponStarting(false);
- return;
- }
- final CharSequence textAfter = ic.getTextAfterCursor(1, 0);
- if (!TextUtils.isEmpty(textAfter)) {
- mStatistics.setIsEmptyUponStarting(false);
- return;
- }
- if (textBefore != null && textAfter != null) {
- mStatistics.setIsEmptyUponStarting(true);
- }
- }
-
- private void start() {
- if (DEBUG) {
- Log.d(TAG, "start called");
- }
- maybeShowSplashScreen();
- requestIndicatorRedraw();
- mStatistics.reset();
- checkForEmptyEditor();
- }
-
- /* package */ void stop() {
- if (DEBUG) {
- Log.d(TAG, "stop called");
- }
- // Commit mCurrentLogUnit before closing.
- commitCurrentLogUnit();
-
- try {
- mMainLogBuffer.shiftAndPublishAll();
- } catch (final IOException e) {
- Log.w(TAG, "IOException when publishing LogBuffer", e);
- }
- logStatistics();
- commitCurrentLogUnit();
- mMainLogBuffer.setIsStopping();
- try {
- mMainLogBuffer.shiftAndPublishAll();
- } catch (final IOException e) {
- Log.w(TAG, "IOException when publishing LogBuffer", e);
- }
- mMainResearchLog.blockingClose(RESEARCHLOG_CLOSE_TIMEOUT_IN_MS);
-
- resetLogBuffers();
- cancelFeedbackDialog();
- }
-
- public void abort() {
- if (DEBUG) {
- Log.d(TAG, "abort called");
- }
- mMainLogBuffer.clear();
- mMainResearchLog.blockingAbort(RESEARCHLOG_ABORT_TIMEOUT_IN_MS);
-
- resetLogBuffers();
- }
-
- private void restart() {
- stop();
- start();
- }
-
- @Override
- public void onSharedPreferenceChanged(final SharedPreferences prefs, final String key) {
- if (key == null || prefs == null) {
- return;
- }
- requestIndicatorRedraw();
- mPrefs = prefs;
- prefsChanged(prefs);
- }
-
- public void onResearchKeySelected(final LatinIME latinIME) {
- mCurrentLogUnit.removeResearchButtonInvocation();
- if (mInFeedbackDialog) {
- Toast.makeText(latinIME, R.string.research_please_exit_feedback_form,
- Toast.LENGTH_LONG).show();
- return;
- }
- presentFeedbackDialog(latinIME);
- }
-
- public void presentFeedbackDialogFromSettings() {
- if (mLatinIME != null) {
- presentFeedbackDialog(mLatinIME);
- }
- }
-
- public void presentFeedbackDialog(final LatinIME latinIME) {
- if (isMakingUserRecording()) {
- saveRecording();
- }
- mInFeedbackDialog = true;
-
- final Intent intent = new Intent();
- intent.setClass(mLatinIME, FeedbackActivity.class);
- if (mFeedbackDialogBundle == null) {
- // Restore feedback field with channel name
- final Bundle bundle = new Bundle();
- bundle.putBoolean(FeedbackFragment.KEY_INCLUDE_ACCOUNT_NAME, true);
- bundle.putBoolean(FeedbackFragment.KEY_HAS_USER_RECORDING, false);
- if (FEEDBACK_DIALOG_SHOULD_PRESERVE_TEXT_FIELD) {
- final String savedChannelName = mPrefs.getString(PREF_RESEARCH_SAVED_CHANNEL, "");
- bundle.putString(FeedbackFragment.KEY_FEEDBACK_STRING, savedChannelName);
- }
- mFeedbackDialogBundle = bundle;
- }
- intent.putExtras(mFeedbackDialogBundle);
- intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- latinIME.startActivity(intent);
- }
-
- public void setFeedbackDialogBundle(final Bundle bundle) {
- mFeedbackDialogBundle = bundle;
- }
-
- public void startRecording() {
- final Resources res = mLatinIME.getResources();
- Toast.makeText(mLatinIME,
- res.getString(R.string.research_feedback_demonstration_instructions),
- Toast.LENGTH_LONG).show();
- startRecordingInternal();
- }
-
- private void startRecordingInternal() {
- if (mUserRecordingLog != null) {
- mUserRecordingLog.blockingAbort(RESEARCHLOG_ABORT_TIMEOUT_IN_MS);
- }
- mUserRecordingFile = mResearchLogDirectory.getUserRecordingFilePath(
- System.currentTimeMillis(), System.nanoTime());
- mUserRecordingLog = new ResearchLog(mUserRecordingFile, mLatinIME);
- mUserRecordingLogBuffer = new LogBuffer();
- resetRecordingTimer();
- }
-
- private boolean isMakingUserRecording() {
- return mUserRecordingLog != null;
- }
-
- private void resetRecordingTimer() {
- if (mUserRecordingTimeoutHandler == null) {
- mUserRecordingTimeoutHandler = new Handler();
- }
- clearRecordingTimer();
- mUserRecordingTimeoutHandler.postDelayed(mRecordingHandlerTimeoutRunnable,
- USER_RECORDING_TIMEOUT_MS);
- }
-
- private void clearRecordingTimer() {
- mUserRecordingTimeoutHandler.removeCallbacks(mRecordingHandlerTimeoutRunnable);
- }
-
- private Runnable mRecordingHandlerTimeoutRunnable = new Runnable() {
- @Override
- public void run() {
- cancelRecording();
- requestIndicatorRedraw();
- final Resources res = mLatinIME.getResources();
- Toast.makeText(mLatinIME, res.getString(R.string.research_feedback_recording_failure),
- Toast.LENGTH_LONG).show();
- }
- };
-
- private void cancelRecording() {
- if (mUserRecordingLog != null) {
- mUserRecordingLog.blockingAbort(RESEARCHLOG_ABORT_TIMEOUT_IN_MS);
- }
- mUserRecordingLog = null;
- mUserRecordingLogBuffer = null;
- if (mFeedbackDialogBundle != null) {
- mFeedbackDialogBundle.putBoolean("HasRecording", false);
- }
- }
-
- private void saveRecording() {
- commitCurrentLogUnit();
- publishLogBuffer(mUserRecordingLogBuffer, mUserRecordingLog, true);
- mUserRecordingLog.blockingClose(RESEARCHLOG_CLOSE_TIMEOUT_IN_MS);
- mUserRecordingLog = null;
- mUserRecordingLogBuffer = null;
-
- if (mFeedbackDialogBundle != null) {
- mFeedbackDialogBundle.putBoolean(FeedbackFragment.KEY_HAS_USER_RECORDING, true);
- }
- clearRecordingTimer();
- }
-
- // TODO: currently unreachable. Remove after being sure enable/disable is
- // not needed.
- /*
- public void enableOrDisable(final boolean showEnable, final LatinIME latinIME) {
- if (showEnable) {
- if (!sIsLogging) {
- setLoggingAllowed(true);
- }
- resumeLogging();
- Toast.makeText(latinIME,
- R.string.research_notify_session_logging_enabled,
- Toast.LENGTH_LONG).show();
- } else {
- Toast toast = Toast.makeText(latinIME,
- R.string.research_notify_session_log_deleting,
- Toast.LENGTH_LONG);
- toast.show();
- boolean isLogDeleted = abort();
- final long currentTime = System.currentTimeMillis();
- final long resumeTime = currentTime
- + TimeUnit.MINUTES.toMillis(SUSPEND_DURATION_IN_MINUTES);
- suspendLoggingUntil(resumeTime);
- toast.cancel();
- Toast.makeText(latinIME, R.string.research_notify_logging_suspended,
- Toast.LENGTH_LONG).show();
- }
- }
- */
-
- /**
- * Get the name of the first allowed account on the device.
- *
- * Allowed accounts must be in the domain given by ALLOWED_ACCOUNT_DOMAIN.
- *
- * @return The user's account name.
- */
- public String getAccountName() {
- if (sAccountType == null || sAccountType.isEmpty()) {
- return null;
- }
- if (sAllowedAccountDomain == null || sAllowedAccountDomain.isEmpty()) {
- return null;
- }
- final AccountManager manager = AccountManager.get(mLatinIME);
- // Filter first by account type.
- final Account[] accounts = manager.getAccountsByType(sAccountType);
-
- for (final Account account : accounts) {
- if (DEBUG) {
- Log.d(TAG, account.name);
- }
- final String[] parts = account.name.split("@");
- if (parts.length > 1 && parts[1].equals(sAllowedAccountDomain)) {
- return parts[0];
- }
- }
- return null;
- }
-
- private static final LogStatement LOGSTATEMENT_FEEDBACK =
- new LogStatement("UserFeedback", false, false, "contents", "accountName", "recording");
- public void sendFeedback(final String feedbackContents, final boolean includeHistory,
- final boolean isIncludingAccountName, final boolean isIncludingRecording) {
- String recording = "";
- if (isIncludingRecording) {
- // Try to read recording from recently written json file
- if (mUserRecordingFile != null) {
- FileChannel channel = null;
- try {
- channel = new FileInputStream(mUserRecordingFile).getChannel();
- final MappedByteBuffer buffer = channel.map(FileChannel.MapMode.READ_ONLY, 0,
- channel.size());
- // Android's openFileOutput() creates the file, so we use Android's default
- // Charset (UTF-8) here to read it.
- recording = Charset.defaultCharset().decode(buffer).toString();
- } catch (FileNotFoundException e) {
- Log.e(TAG, "Could not find recording file", e);
- } catch (IOException e) {
- Log.e(TAG, "Error reading recording file", e);
- } finally {
- if (channel != null) {
- try {
- channel.close();
- } catch (IOException e) {
- Log.e(TAG, "Error closing recording file", e);
- }
- }
- }
- }
- }
- final LogUnit feedbackLogUnit = new LogUnit();
- final String accountName = isIncludingAccountName ? getAccountName() : "";
- feedbackLogUnit.addLogStatement(LOGSTATEMENT_FEEDBACK, SystemClock.uptimeMillis(),
- feedbackContents, accountName, recording);
-
- final ResearchLog feedbackLog = new FeedbackLog(mResearchLogDirectory.getLogFilePath(
- System.currentTimeMillis(), System.nanoTime()), mLatinIME);
- final LogBuffer feedbackLogBuffer = new LogBuffer();
- feedbackLogBuffer.shiftIn(feedbackLogUnit);
- publishLogBuffer(feedbackLogBuffer, feedbackLog, true /* isIncludingPrivateData */);
- feedbackLog.blockingClose(RESEARCHLOG_CLOSE_TIMEOUT_IN_MS);
- uploadNow();
-
- if (isIncludingRecording && DEBUG_REPLAY_AFTER_FEEDBACK) {
- final Handler handler = new Handler();
- handler.postDelayed(new Runnable() {
- @Override
- public void run() {
- final ReplayData replayData =
- mMotionEventReader.readMotionEventData(mUserRecordingFile);
- mReplayer.replay(replayData, null);
- }
- }, TimeUnit.SECONDS.toMillis(1));
- }
-
- if (FEEDBACK_DIALOG_SHOULD_PRESERVE_TEXT_FIELD) {
- // Use feedback string as a channel name to label feedback strings. Here we record the
- // string for prepopulating the field next time.
- final String channelName = feedbackContents;
- if (mPrefs == null) {
- return;
- }
- mPrefs.edit().putString(PREF_RESEARCH_SAVED_CHANNEL, channelName).apply();
- }
- }
-
- public void uploadNow() {
- if (DEBUG) {
- Log.d(TAG, "calling uploadNow()");
- }
- mLatinIME.startService(mUploadNowIntent);
- }
-
- public void onLeavingSendFeedbackDialog() {
- mInFeedbackDialog = false;
- }
-
- private void cancelFeedbackDialog() {
- if (isMakingUserRecording()) {
- cancelRecording();
- }
- mInFeedbackDialog = false;
- }
-
- public void initDictionary(final DictionaryFacilitatorForSuggest dictionaryFacilitator) {
- mDictionaryFacilitator = dictionaryFacilitator;
- // MainLogBuffer now has an out-of-date Suggest object. Close down MainLogBuffer and create
- // a new one.
- if (mMainLogBuffer != null) {
- restart();
- }
- }
-
- private void setIsPasswordView(boolean isPasswordView) {
- mIsPasswordView = isPasswordView;
- }
-
- /**
- * Returns true if logging is permitted.
- *
- * This method is called when adding a LogStatement to a LogUnit, and when adding a LogUnit to a
- * ResearchLog. It is checked in both places in case conditions change between these times, and
- * as a defensive measure in case refactoring changes the logging pipeline.
- */
- private boolean isAllowedToLogTo(final ResearchLog researchLog) {
- // Logging is never allowed in these circumstances
- if (mIsPasswordView) return false;
- if (!sIsLogging) return false;
- if (mInFeedbackDialog) {
- // The FeedbackDialog is up. Normal logging should not happen (the user might be trying
- // out things while the dialog is up, and their reporting of an issue may not be
- // representative of what they normally type). However, after the user has finished
- // entering their feedback, the logger packs their comments and an encoded version of
- // any demonstration of the issue into a special "FeedbackLog". So if the FeedbackLog
- // is the destination, we do want to allow logging to it.
- return researchLog.isFeedbackLog();
- }
- // No other exclusions. Logging is permitted.
- return true;
- }
-
- public void requestIndicatorRedraw() {
- if (!IS_SHOWING_INDICATOR) {
- return;
- }
- if (mMainKeyboardView == null) {
- return;
- }
- mMainKeyboardView.invalidateAllKeys();
- }
-
- private boolean isReplaying() {
- return mReplayer.isReplaying();
- }
-
- private int getIndicatorColor() {
- if (isMakingUserRecording()) {
- return Color.YELLOW;
- }
- if (isReplaying()) {
- return Color.GREEN;
- }
- return Color.RED;
- }
-
- public void paintIndicator(KeyboardView view, Paint paint, Canvas canvas, int width,
- int height) {
- // TODO: Reimplement using a keyboard background image specific to the ResearchLogger
- // and remove this method.
- // The check for MainKeyboardView ensures that the indicator only decorates the main
- // keyboard, not every keyboard.
- if (IS_SHOWING_INDICATOR && (isAllowedToLogTo(mMainResearchLog) || isReplaying())
- && view instanceof MainKeyboardView) {
- final int savedColor = paint.getColor();
- paint.setColor(getIndicatorColor());
- final Style savedStyle = paint.getStyle();
- paint.setStyle(Style.STROKE);
- final float savedStrokeWidth = paint.getStrokeWidth();
- if (IS_SHOWING_INDICATOR_CLEARLY) {
- paint.setStrokeWidth(5);
- canvas.drawLine(0, 0, 0, height, paint);
- canvas.drawLine(width, 0, width, height, paint);
- } else {
- // Put a tiny dot on the screen so a knowledgeable user can check whether it is
- // enabled. The dot is actually a zero-width, zero-height rectangle, placed at the
- // lower-right corner of the canvas, painted with a non-zero border width.
- paint.setStrokeWidth(3);
- canvas.drawRect(width - 1, height - 1, width, height, paint);
- }
- paint.setColor(savedColor);
- paint.setStyle(savedStyle);
- paint.setStrokeWidth(savedStrokeWidth);
- }
- }
-
- /**
- * Buffer a research log event, flagging it as privacy-sensitive.
- */
- private synchronized void enqueueEvent(final LogStatement logStatement,
- final Object... values) {
- enqueueEvent(mCurrentLogUnit, logStatement, values);
- }
-
- private synchronized void enqueueEvent(final LogUnit logUnit, final LogStatement logStatement,
- final Object... values) {
- assert values.length == logStatement.getKeys().length;
- if (isAllowedToLogTo(mMainResearchLog) && logUnit != null) {
- final long time = SystemClock.uptimeMillis();
- logUnit.addLogStatement(logStatement, time, values);
- }
- }
-
- private void setCurrentLogUnitContainsDigitFlag() {
- mCurrentLogUnit.setMayContainDigit();
- }
-
- private void setCurrentLogUnitContainsUserDeletions() {
- mCurrentLogUnit.setContainsUserDeletions();
- }
-
- private void setCurrentLogUnitCorrectionType(final int correctionType) {
- mCurrentLogUnit.setCorrectionType(correctionType);
- }
-
- /* package for test */ void commitCurrentLogUnit() {
- if (DEBUG) {
- Log.d(TAG, "commitCurrentLogUnit" + (mCurrentLogUnit.hasOneOrMoreWords() ?
- ": " + mCurrentLogUnit.getWordsAsString() : ""));
- }
- if (!mCurrentLogUnit.isEmpty()) {
- mMainLogBuffer.shiftIn(mCurrentLogUnit);
- if (mUserRecordingLogBuffer != null) {
- mUserRecordingLogBuffer.shiftIn(mCurrentLogUnit);
- }
- mCurrentLogUnit = new LogUnit();
- } else {
- if (DEBUG) {
- Log.d(TAG, "Warning: tried to commit empty log unit.");
- }
- }
- }
-
- private static final LogStatement LOGSTATEMENT_UNCOMMIT_CURRENT_LOGUNIT =
- new LogStatement("UncommitCurrentLogUnit", false, false);
- public void uncommitCurrentLogUnit(final String expectedWord,
- final boolean dumpCurrentLogUnit) {
- // The user has deleted this word and returned to the previous. Check that the word in the
- // logUnit matches the expected word. If so, restore the last log unit committed to be the
- // current logUnit. I.e., pull out the last LogUnit from all the LogBuffers, and make
- // it the mCurrentLogUnit so the new edits are captured with the word. Optionally dump the
- // contents of mCurrentLogUnit (useful if they contain deletions of the next word that
- // should not be reported to protect user privacy)
- //
- // Note that we don't use mLastLogUnit here, because it only goes one word back and is only
- // needed for reverts, which only happen one back.
- final LogUnit oldLogUnit = mMainLogBuffer.peekLastLogUnit();
-
- // Check that expected word matches. It's ok if both strings are null, because this is the
- // case where the LogUnit is storing a non-word, e.g. a separator.
- if (oldLogUnit != null) {
- // Because the word is stored in the LogUnit with digits scrubbed, the comparison must
- // be made on a scrubbed version of the expectedWord as well.
- final String scrubbedExpectedWord = scrubDigitsFromString(expectedWord);
- final String oldLogUnitWords = oldLogUnit.getWordsAsString();
- if (!TextUtils.equals(scrubbedExpectedWord, oldLogUnitWords)) return;
- }
-
- // Uncommit, merging if necessary.
- mMainLogBuffer.unshiftIn();
- if (oldLogUnit != null && !dumpCurrentLogUnit) {
- oldLogUnit.append(mCurrentLogUnit);
- mSavedDownEventTime = Long.MAX_VALUE;
- }
- if (oldLogUnit == null) {
- mCurrentLogUnit = new LogUnit();
- } else {
- mCurrentLogUnit = oldLogUnit;
- }
- enqueueEvent(LOGSTATEMENT_UNCOMMIT_CURRENT_LOGUNIT);
- if (DEBUG) {
- Log.d(TAG, "uncommitCurrentLogUnit (dump=" + dumpCurrentLogUnit + ") back to "
- + (mCurrentLogUnit.hasOneOrMoreWords() ? ": '"
- + mCurrentLogUnit.getWordsAsString() + "'" : ""));
- }
- }
-
- /**
- * Publish all the logUnits in the logBuffer, without doing any privacy filtering.
- */
- /* package for test */ void publishLogBuffer(final LogBuffer logBuffer,
- final ResearchLog researchLog, final boolean canIncludePrivateData) {
- publishLogUnits(logBuffer.getLogUnits(), researchLog, canIncludePrivateData);
- }
-
- private static final LogStatement LOGSTATEMENT_LOG_SEGMENT_OPENING =
- new LogStatement("logSegmentStart", false, false, "isIncludingPrivateData");
- private static final LogStatement LOGSTATEMENT_LOG_SEGMENT_CLOSING =
- new LogStatement("logSegmentEnd", false, false);
- /**
- * Publish all LogUnits in a list.
- *
- * Any privacy checks should be performed before calling this method.
- */
- /* package for test */ void publishLogUnits(final List<LogUnit> logUnits,
- final ResearchLog researchLog, final boolean canIncludePrivateData) {
- final LogUnit openingLogUnit = new LogUnit();
- if (logUnits.isEmpty()) return;
- if (!isAllowedToLogTo(researchLog)) return;
- // LogUnits not containing private data, such as contextual data for the log, do not require
- // logSegment boundary statements.
- if (canIncludePrivateData) {
- openingLogUnit.addLogStatement(LOGSTATEMENT_LOG_SEGMENT_OPENING,
- SystemClock.uptimeMillis(), canIncludePrivateData);
- researchLog.publish(openingLogUnit, true /* isIncludingPrivateData */);
- }
- for (LogUnit logUnit : logUnits) {
- if (DEBUG) {
- Log.d(TAG, "publishLogBuffer: " + (logUnit.hasOneOrMoreWords()
- ? logUnit.getWordsAsString() : "<wordless>")
- + ", correction?: " + logUnit.containsUserDeletions());
- }
- researchLog.publish(logUnit, canIncludePrivateData);
- }
- if (canIncludePrivateData) {
- final LogUnit closingLogUnit = new LogUnit();
- closingLogUnit.addLogStatement(LOGSTATEMENT_LOG_SEGMENT_CLOSING,
- SystemClock.uptimeMillis());
- researchLog.publish(closingLogUnit, true /* isIncludingPrivateData */);
- }
- }
-
- public static boolean hasLetters(final String word) {
- final int length = word.length();
- for (int i = 0; i < length; i = word.offsetByCodePoints(i, 1)) {
- final int codePoint = word.codePointAt(i);
- if (Character.isLetter(codePoint)) {
- return true;
- }
- }
- return false;
- }
-
- /**
- * Commit the portion of mCurrentLogUnit before maxTime as a worded logUnit.
- *
- * After this operation completes, mCurrentLogUnit will hold any logStatements that happened
- * after maxTime.
- */
- /* package for test */ void commitCurrentLogUnitAsWord(final String word, final long maxTime,
- final boolean isBatchMode) {
- if (word == null) {
- return;
- }
- if (word.length() > 0 && hasLetters(word)) {
- mCurrentLogUnit.setWords(word);
- }
- final LogUnit newLogUnit = mCurrentLogUnit.splitByTime(maxTime);
- enqueueCommitText(word, isBatchMode);
- commitCurrentLogUnit();
- mCurrentLogUnit = newLogUnit;
- }
-
- /**
- * Record the time of a MotionEvent.ACTION_DOWN.
- *
- * Warning: Not thread safe. Only call from the main thread.
- */
- private void setSavedDownEventTime(final long time) {
- mSavedDownEventTime = time;
- }
-
- public void onWordFinished(final String word, final boolean isBatchMode) {
- commitCurrentLogUnitAsWord(word, mSavedDownEventTime, isBatchMode);
- mSavedDownEventTime = Long.MAX_VALUE;
- }
-
- private static int scrubDigitFromCodePoint(int codePoint) {
- return Character.isDigit(codePoint) ? DIGIT_REPLACEMENT_CODEPOINT : codePoint;
- }
-
- /* package for test */ static String scrubDigitsFromString(final String s) {
- if (s == null) return null;
- StringBuilder sb = null;
- final int length = s.length();
- for (int i = 0; i < length; i = s.offsetByCodePoints(i, 1)) {
- final int codePoint = Character.codePointAt(s, i);
- if (Character.isDigit(codePoint)) {
- if (sb == null) {
- sb = new StringBuilder(length);
- sb.append(s.substring(0, i));
- }
- sb.appendCodePoint(DIGIT_REPLACEMENT_CODEPOINT);
- } else {
- if (sb != null) {
- sb.appendCodePoint(codePoint);
- }
- }
- }
- if (sb == null) {
- return s;
- } else {
- return sb.toString();
- }
- }
-
- private String scrubWord(String word) {
- if (mDictionaryFacilitator != null && mDictionaryFacilitator.isValidMainDictWord(word)) {
- return word;
- }
- return WORD_REPLACEMENT_STRING;
- }
-
- // Specific logging methods follow below. The comments for each logging method should
- // indicate what specific method is logged, and how to trigger it from the user interface.
- //
- // Logging methods can be generally classified into two flavors, "UserAction", which should
- // correspond closely to an event that is sensed by the IME, and is usually generated
- // directly by the user, and "SystemResponse" which corresponds to an event that the IME
- // generates, often after much processing of user input. SystemResponses should correspond
- // closely to user-visible events.
- // TODO: Consider exposing the UserAction classification in the log output.
-
- /**
- * Log a call to LatinIME.onStartInputViewInternal().
- *
- * UserAction: called each time the keyboard is opened up.
- */
- private static final LogStatement LOGSTATEMENT_LATIN_IME_ON_START_INPUT_VIEW_INTERNAL =
- new LogStatement("LatinImeOnStartInputViewInternal", false, false, "uuid",
- "packageName", "inputType", "imeOptions", "fieldId", "display", "model",
- "prefs", "versionCode", "versionName", "outputFormatVersion", "logEverything",
- "isDevTeamBuild");
- public static void latinIME_onStartInputViewInternal(final EditorInfo editorInfo,
- final SharedPreferences prefs) {
- final ResearchLogger researchLogger = getInstance();
- if (editorInfo != null) {
- final boolean isPassword = InputTypeUtils.isPasswordInputType(editorInfo.inputType)
- || InputTypeUtils.isVisiblePasswordInputType(editorInfo.inputType);
- getInstance().setIsPasswordView(isPassword);
- researchLogger.start();
- final Context context = researchLogger.mLatinIME;
- try {
- final PackageInfo packageInfo;
- packageInfo = context.getPackageManager().getPackageInfo(context.getPackageName(),
- 0);
- final Integer versionCode = packageInfo.versionCode;
- final String versionName = packageInfo.versionName;
- final String uuid = ResearchSettings.readResearchLoggerUuid(researchLogger.mPrefs);
- researchLogger.enqueueEvent(LOGSTATEMENT_LATIN_IME_ON_START_INPUT_VIEW_INTERNAL,
- uuid, editorInfo.packageName, Integer.toHexString(editorInfo.inputType),
- Integer.toHexString(editorInfo.imeOptions), editorInfo.fieldId,
- Build.DISPLAY, Build.MODEL, prefs, versionCode, versionName,
- OUTPUT_FORMAT_VERSION, IS_LOGGING_EVERYTHING,
- researchLogger.isDevTeamBuild());
- // Commit the logUnit so the LatinImeOnStartInputViewInternal event is in its own
- // logUnit at the beginning of the log.
- researchLogger.commitCurrentLogUnit();
- } catch (final NameNotFoundException e) {
- Log.e(TAG, "NameNotFound", e);
- }
- }
- }
-
- // TODO: Update this heuristic pattern to something more reliable. Developer builds tend to
- // have the developer name and year embedded.
- private static final Pattern developerBuildRegex = Pattern.compile("[A-Za-z]\\.20[1-9]");
- private boolean isDevTeamBuild() {
- try {
- final PackageInfo packageInfo;
- packageInfo = mLatinIME.getPackageManager().getPackageInfo(mLatinIME.getPackageName(),
- 0);
- final String versionName = packageInfo.versionName;
- return developerBuildRegex.matcher(versionName).find();
- } catch (final NameNotFoundException e) {
- Log.e(TAG, "Could not determine package name", e);
- return false;
- }
- }
-
- /**
- * Log a change in preferences.
- *
- * UserAction: called when the user changes the settings.
- */
- private static final LogStatement LOGSTATEMENT_PREFS_CHANGED =
- new LogStatement("PrefsChanged", false, false, "prefs");
- public static void prefsChanged(final SharedPreferences prefs) {
- final ResearchLogger researchLogger = getInstance();
- researchLogger.enqueueEvent(LOGSTATEMENT_PREFS_CHANGED, prefs);
- }
-
- /**
- * Log a call to MainKeyboardView.processMotionEvent().
- *
- * UserAction: called when the user puts their finger onto the screen (ACTION_DOWN).
- *
- */
- private static final LogStatement LOGSTATEMENT_MAIN_KEYBOARD_VIEW_PROCESS_MOTION_EVENT =
- new LogStatement("MotionEvent", true, false, "action",
- LogStatement.KEY_IS_LOGGING_RELATED, "motionEvent");
- public static void mainKeyboardView_processMotionEvent(final MotionEvent me) {
- if (me == null) {
- return;
- }
- final int action = me.getActionMasked();
- final long eventTime = me.getEventTime();
- final String actionString = LoggingUtils.getMotionEventActionTypeString(action);
- final ResearchLogger researchLogger = getInstance();
- researchLogger.enqueueEvent(LOGSTATEMENT_MAIN_KEYBOARD_VIEW_PROCESS_MOTION_EVENT,
- actionString, false /* IS_LOGGING_RELATED */, MotionEvent.obtain(me));
- if (action == MotionEvent.ACTION_DOWN) {
- // Subtract 1 from eventTime so the down event is included in the later
- // LogUnit, not the earlier (the test is for inequality).
- researchLogger.setSavedDownEventTime(eventTime - 1);
- }
- // Refresh the timer in case we are capturing user feedback.
- if (researchLogger.isMakingUserRecording()) {
- researchLogger.resetRecordingTimer();
- }
- }
-
- /**
- * Log a call to LatinIME.onCodeInput().
- *
- * SystemResponse: The main processing step for entering text. Called when the user performs a
- * tap, a flick, a long press, releases a gesture, or taps a punctuation suggestion.
- */
- private static final LogStatement LOGSTATEMENT_LATIN_IME_ON_CODE_INPUT =
- new LogStatement("LatinImeOnCodeInput", true, false, "code", "x", "y");
- public static void latinIME_onCodeInput(final int code, final int x, final int y) {
- final long time = SystemClock.uptimeMillis();
- final ResearchLogger researchLogger = getInstance();
- researchLogger.enqueueEvent(LOGSTATEMENT_LATIN_IME_ON_CODE_INPUT,
- Constants.printableCode(scrubDigitFromCodePoint(code)), x, y);
- if (Character.isDigit(code)) {
- researchLogger.setCurrentLogUnitContainsDigitFlag();
- }
- researchLogger.mStatistics.recordChar(code, time);
- }
- /**
- * Log a call to LatinIME.onDisplayCompletions().
- *
- * SystemResponse: The IME has displayed application-specific completions. They may show up
- * in the suggestion strip, such as a landscape phone.
- */
- private static final LogStatement LOGSTATEMENT_LATINIME_ONDISPLAYCOMPLETIONS =
- new LogStatement("LatinIMEOnDisplayCompletions", true, true,
- "applicationSpecifiedCompletions");
- public static void latinIME_onDisplayCompletions(
- final CompletionInfo[] applicationSpecifiedCompletions) {
- // Note; passing an array as a single element in a vararg list. Must create a new
- // dummy array around it or it will get expanded.
- getInstance().enqueueEvent(LOGSTATEMENT_LATINIME_ONDISPLAYCOMPLETIONS,
- new Object[] { applicationSpecifiedCompletions });
- }
-
- /**
- * The IME is finishing; it is either being destroyed, or is about to be hidden.
- *
- * UserAction: The user has performed an action that has caused the IME to be closed. They may
- * have focused on something other than a text field, or explicitly closed it.
- */
- private static final LogStatement LOGSTATEMENT_LATINIME_ONFINISHINPUTVIEWINTERNAL =
- new LogStatement("LatinIMEOnFinishInputViewInternal", false, false, "isTextTruncated",
- "text");
- public static void latinIME_onFinishInputViewInternal(final boolean finishingInput) {
- // The finishingInput flag is set in InputMethodService. It is true if called from
- // doFinishInput(), which can be called as part of doStartInput(). This can happen at times
- // when the IME is not closing, such as when powering up. The finishinInput flag is false
- // if called from finishViews(), which is called from hideWindow() and onDestroy(). These
- // are the situations in which we want to finish up the researchLog.
- if (!finishingInput) {
- final ResearchLogger researchLogger = getInstance();
- // Assume that OUTPUT_ENTIRE_BUFFER is only true when we don't care about privacy (e.g.
- // during a live user test), so the normal isPotentiallyPrivate and
- // isPotentiallyRevealing flags do not apply
- researchLogger.enqueueEvent(LOGSTATEMENT_LATINIME_ONFINISHINPUTVIEWINTERNAL,
- true /* isTextTruncated */, "" /* text */);
- researchLogger.commitCurrentLogUnit();
- getInstance().stop();
- }
- }
-
- /**
- * Log a call to LatinIME.onUpdateSelection().
- *
- * UserAction/SystemResponse: The user has moved the cursor or selection. This function may
- * be called, however, when the system has moved the cursor, say by inserting a character.
- */
- private static final LogStatement LOGSTATEMENT_LATINIME_ONUPDATESELECTION =
- new LogStatement("LatinIMEOnUpdateSelection", true, false, "lastSelectionStart",
- "lastSelectionEnd", "oldSelStart", "oldSelEnd", "newSelStart", "newSelEnd",
- "composingSpanStart", "composingSpanEnd", "expectingUpdateSelection",
- "expectingUpdateSelectionFromLogger", "context");
- public static void latinIME_onUpdateSelection(final int lastSelectionStart,
- final int lastSelectionEnd, final int oldSelStart, final int oldSelEnd,
- final int newSelStart, final int newSelEnd, final int composingSpanStart,
- final int composingSpanEnd, final RichInputConnection connection) {
- String word = "";
- if (connection != null) {
- TextRange range = connection.getWordRangeAtCursor(WHITESPACE_SEPARATORS, 1);
- if (range != null) {
- word = range.mWord.toString();
- }
- }
- final ResearchLogger researchLogger = getInstance();
- final String scrubbedWord = researchLogger.scrubWord(word);
- researchLogger.enqueueEvent(LOGSTATEMENT_LATINIME_ONUPDATESELECTION, lastSelectionStart,
- lastSelectionEnd, oldSelStart, oldSelEnd, newSelStart, newSelEnd,
- composingSpanStart, composingSpanEnd, false /* expectingUpdateSelection */,
- false /* expectingUpdateSelectionFromLogger */, scrubbedWord);
- }
-
- /**
- * Log a call to LatinIME.onTextInput().
- *
- * SystemResponse: Raw text is added to the TextView.
- */
- public static void latinIME_onTextInput(final String text, final boolean isBatchMode) {
- final ResearchLogger researchLogger = getInstance();
- researchLogger.commitCurrentLogUnitAsWord(text, Long.MAX_VALUE, isBatchMode);
- }
-
- /**
- * Log a revert of onTextInput() (known in the IME as "EnteredText").
- *
- * SystemResponse: Remove the LogUnit recording the textInput
- */
- public static void latinIME_handleBackspace_cancelTextInput(final String text) {
- final ResearchLogger researchLogger = getInstance();
- researchLogger.uncommitCurrentLogUnit(text, true /* dumpCurrentLogUnit */);
- }
-
- /**
- * Log a call to LatinIME.pickSuggestionManually().
- *
- * UserAction: The user has chosen a specific word from the suggestion strip.
- */
- private static final LogStatement LOGSTATEMENT_LATINIME_PICKSUGGESTIONMANUALLY =
- new LogStatement("LatinIMEPickSuggestionManually", true, false, "replacedWord", "index",
- "suggestion", "x", "y", "isBatchMode", "score", "kind", "sourceDict");
- /**
- * Log a call to LatinIME.pickSuggestionManually().
- *
- * @param replacedWord the typed word that this manual suggestion replaces. May not be null.
- * @param index the index in the suggestion strip
- * @param suggestion the committed suggestion. May not be null.
- * @param isBatchMode whether this was input in batch mode, aka gesture.
- * @param score the internal score of the suggestion, as output by the dictionary
- * @param kind the kind of suggestion, as one of the SuggestedWordInfo#KIND_* constants
- * @param sourceDict the source origin of this word, as one of the Dictionary#TYPE_* constants.
- */
- public static void latinIME_pickSuggestionManually(final String replacedWord,
- final int index, final String suggestion, final boolean isBatchMode,
- final int score, final int kind, final String sourceDict) {
- final ResearchLogger researchLogger = getInstance();
- // Note : suggestion can't be null here, because it's only called in a place where it
- // can't be null.
- if (!replacedWord.equals(suggestion.toString())) {
- // The user chose something other than what was already there.
- researchLogger.setCurrentLogUnitContainsUserDeletions();
- researchLogger.setCurrentLogUnitCorrectionType(LogUnit.CORRECTIONTYPE_TYPO);
- }
- final String scrubbedWord = scrubDigitsFromString(suggestion);
- researchLogger.enqueueEvent(LOGSTATEMENT_LATINIME_PICKSUGGESTIONMANUALLY,
- scrubDigitsFromString(replacedWord), index,
- scrubbedWord, Constants.SUGGESTION_STRIP_COORDINATE,
- Constants.SUGGESTION_STRIP_COORDINATE, isBatchMode, score, kind, sourceDict);
- researchLogger.commitCurrentLogUnitAsWord(scrubbedWord, Long.MAX_VALUE, isBatchMode);
- researchLogger.mStatistics.recordManualSuggestion(SystemClock.uptimeMillis());
- }
-
- /**
- * Log a call to LatinIME.punctuationSuggestion().
- *
- * UserAction: The user has chosen punctuation from the punctuation suggestion strip.
- */
- private static final LogStatement LOGSTATEMENT_LATINIME_PUNCTUATIONSUGGESTION =
- new LogStatement("LatinIMEPunctuationSuggestion", false, false, "index", "suggestion",
- "x", "y", "isPrediction");
- public static void latinIME_punctuationSuggestion(final int index, final String suggestion,
- final boolean isBatchMode, final boolean isPrediction) {
- final ResearchLogger researchLogger = getInstance();
- researchLogger.enqueueEvent(LOGSTATEMENT_LATINIME_PUNCTUATIONSUGGESTION, index, suggestion,
- Constants.SUGGESTION_STRIP_COORDINATE, Constants.SUGGESTION_STRIP_COORDINATE,
- isPrediction);
- researchLogger.commitCurrentLogUnitAsWord(suggestion, Long.MAX_VALUE, isBatchMode);
- }
-
- /**
- * Log a call to LatinIME.sendKeyCodePoint().
- *
- * SystemResponse: The IME is inserting text into the TextView for non-word-constituent,
- * strings (separators, numbers, other symbols).
- */
- private static final LogStatement LOGSTATEMENT_LATINIME_SENDKEYCODEPOINT =
- new LogStatement("LatinIMESendKeyCodePoint", true, false, "code");
- public static void latinIME_sendKeyCodePoint(final int code) {
- final ResearchLogger researchLogger = getInstance();
- final LogUnit phantomSpaceLogUnit = researchLogger.mPhantomSpaceLogUnit;
- if (phantomSpaceLogUnit == null) {
- researchLogger.enqueueEvent(LOGSTATEMENT_LATINIME_SENDKEYCODEPOINT,
- Constants.printableCode(scrubDigitFromCodePoint(code)));
- if (Character.isDigit(code)) {
- researchLogger.setCurrentLogUnitContainsDigitFlag();
- }
- researchLogger.commitCurrentLogUnit();
- } else {
- researchLogger.enqueueEvent(phantomSpaceLogUnit, LOGSTATEMENT_LATINIME_SENDKEYCODEPOINT,
- Constants.printableCode(scrubDigitFromCodePoint(code)));
- if (Character.isDigit(code)) {
- phantomSpaceLogUnit.setMayContainDigit();
- }
- researchLogger.mMainLogBuffer.shiftIn(phantomSpaceLogUnit);
- if (researchLogger.mUserRecordingLogBuffer != null) {
- researchLogger.mUserRecordingLogBuffer.shiftIn(phantomSpaceLogUnit);
- }
- researchLogger.mPhantomSpaceLogUnit = null;
- }
- }
-
- /**
- * Log a call to LatinIME.promotePhantomSpace().
- *
- * SystemResponse: The IME is inserting a real space in place of a phantom space.
- */
- private static final LogStatement LOGSTATEMENT_LATINIME_PROMOTEPHANTOMSPACE =
- new LogStatement("LatinIMEPromotePhantomSpace", false, false);
- public static void latinIME_promotePhantomSpace() {
- // A phantom space is always added before the text that triggered it. The triggering text
- // and the events that created it will be in mCurrentLogUnit, but the phantom space should
- // be in its own LogUnit, committed before the triggering text. Although it is created
- // here, it is not added to the LogBuffer until the following call to
- // latinIME_sendKeyCodePoint, because SENDKEYCODEPOINT LogStatement also must go into that
- // LogUnit.
- final ResearchLogger researchLogger = getInstance();
- researchLogger.mPhantomSpaceLogUnit = new LogUnit();
- researchLogger.enqueueEvent(researchLogger.mPhantomSpaceLogUnit,
- LOGSTATEMENT_LATINIME_PROMOTEPHANTOMSPACE);
- }
-
- /**
- * Log a call to LatinIME.swapSwapperAndSpace().
- *
- * SystemResponse: A symbol has been swapped with a space character. E.g. punctuation may swap
- * if a soft space is inserted after a word.
- */
- private static final LogStatement LOGSTATEMENT_LATINIME_SWAPSWAPPERANDSPACE =
- new LogStatement("LatinIMESwapSwapperAndSpace", false, false, "originalCharacters",
- "charactersAfterSwap");
- public static void latinIME_swapSwapperAndSpace(final CharSequence originalCharacters,
- final String charactersAfterSwap) {
- final ResearchLogger researchLogger = getInstance();
- final LogUnit logUnit;
- logUnit = researchLogger.mMainLogBuffer.peekLastLogUnit();
- if (logUnit != null) {
- researchLogger.enqueueEvent(logUnit, LOGSTATEMENT_LATINIME_SWAPSWAPPERANDSPACE,
- originalCharacters, charactersAfterSwap);
- }
- }
-
- /**
- * Log a call to LatinIME.maybeDoubleSpacePeriod().
- *
- * SystemResponse: Two spaces have been replaced by period space.
- */
- public static void latinIME_maybeDoubleSpacePeriod(final String text,
- final boolean isBatchMode) {
- final ResearchLogger researchLogger = getInstance();
- researchLogger.commitCurrentLogUnitAsWord(text, Long.MAX_VALUE, isBatchMode);
- }
-
- /**
- * Log a call to MainKeyboardView.onLongPress().
- *
- * UserAction: The user has performed a long-press on a key.
- */
- private static final LogStatement LOGSTATEMENT_MAINKEYBOARDVIEW_ONLONGPRESS =
- new LogStatement("MainKeyboardViewOnLongPress", false, false);
- public static void mainKeyboardView_onLongPress() {
- getInstance().enqueueEvent(LOGSTATEMENT_MAINKEYBOARDVIEW_ONLONGPRESS);
- }
-
- /**
- * Log a call to MainKeyboardView.setKeyboard().
- *
- * SystemResponse: The IME has switched to a new keyboard (e.g. French, English).
- * This is typically called right after LatinIME.onStartInputViewInternal (when starting a new
- * IME), but may happen at other times if the user explicitly requests a keyboard change.
- */
- private static final LogStatement LOGSTATEMENT_MAINKEYBOARDVIEW_SETKEYBOARD =
- new LogStatement("MainKeyboardViewSetKeyboard", false, false, "elementId", "locale",
- "orientation", "width", "modeName", "action", "navigateNext",
- "navigatePrevious", "clobberSettingsKey", "passwordInput",
- "supportsSwitchingToShortcutIme", "hasShortcutKey", "languageSwitchKeyEnabled",
- "isMultiLine", "tw", "th",
- "keys");
- public static void mainKeyboardView_setKeyboard(final Keyboard keyboard,
- final int orientation) {
- final KeyboardId kid = keyboard.mId;
- final boolean isPasswordView = kid.passwordInput();
- final ResearchLogger researchLogger = getInstance();
- researchLogger.setIsPasswordView(isPasswordView);
- researchLogger.enqueueEvent(LOGSTATEMENT_MAINKEYBOARDVIEW_SETKEYBOARD,
- KeyboardId.elementIdToName(kid.mElementId),
- kid.mLocale + ":" + kid.mSubtype.getExtraValueOf(KEYBOARD_LAYOUT_SET),
- orientation, kid.mWidth, KeyboardId.modeName(kid.mMode), kid.imeAction(),
- kid.navigateNext(), kid.navigatePrevious(), kid.mClobberSettingsKey,
- isPasswordView, kid.mSupportsSwitchingToShortcutIme, kid.mHasShortcutKey,
- kid.mLanguageSwitchKeyEnabled, kid.isMultiLine(), keyboard.mOccupiedWidth,
- keyboard.mOccupiedHeight, keyboard.getSortedKeys());
- }
-
- /**
- * Log a call to LatinIME.revertCommit().
- *
- * SystemResponse: The IME has reverted commited text. This happens when the user enters
- * a word, commits it by pressing space or punctuation, and then reverts the commit by hitting
- * backspace.
- */
- private static final LogStatement LOGSTATEMENT_LATINIME_REVERTCOMMIT =
- new LogStatement("LatinIMERevertCommit", true, false, "committedWord",
- "originallyTypedWord", "separatorString");
- public static void latinIME_revertCommit(final String committedWord,
- final String originallyTypedWord, final boolean isBatchMode,
- final String separatorString) {
- // TODO: Prioritize adding a unit test for this method (as it is especially complex)
- // TODO: Update the UserRecording LogBuffer as well as the MainLogBuffer
- final ResearchLogger researchLogger = getInstance();
- //
- // 1. Remove separator LogUnit
- final LogUnit lastLogUnit = researchLogger.mMainLogBuffer.peekLastLogUnit();
- // Check that we're not at the beginning of input
- if (lastLogUnit == null) return;
- // Check that we're after a separator
- if (lastLogUnit.getWordsAsString() != null) return;
- // Remove separator
- final LogUnit separatorLogUnit = researchLogger.mMainLogBuffer.unshiftIn();
-
- // 2. Add revert LogStatement
- final LogUnit revertedLogUnit = researchLogger.mMainLogBuffer.peekLastLogUnit();
- if (revertedLogUnit == null) return;
- if (!revertedLogUnit.getWordsAsString().equals(scrubDigitsFromString(committedWord))) {
- // Any word associated with the reverted LogUnit has already had its digits scrubbed, so
- // any digits in the committedWord argument must also be scrubbed for an accurate
- // comparison.
- return;
- }
- researchLogger.enqueueEvent(revertedLogUnit, LOGSTATEMENT_LATINIME_REVERTCOMMIT,
- committedWord, originallyTypedWord, separatorString);
-
- // 3. Update the word associated with the LogUnit
- revertedLogUnit.setWords(originallyTypedWord);
- revertedLogUnit.setContainsUserDeletions();
-
- // 4. Re-add the separator LogUnit
- researchLogger.mMainLogBuffer.shiftIn(separatorLogUnit);
-
- // 5. Record stats
- researchLogger.mStatistics.recordRevertCommit(SystemClock.uptimeMillis());
- }
-
- /**
- * Log a call to PointerTracker.callListenerOnCancelInput().
- *
- * UserAction: The user has canceled the input, e.g., by pressing down, but then removing
- * outside the keyboard area.
- * TODO: Verify
- */
- private static final LogStatement LOGSTATEMENT_POINTERTRACKER_CALLLISTENERONCANCELINPUT =
- new LogStatement("PointerTrackerCallListenerOnCancelInput", false, false);
- public static void pointerTracker_callListenerOnCancelInput() {
- getInstance().enqueueEvent(LOGSTATEMENT_POINTERTRACKER_CALLLISTENERONCANCELINPUT);
- }
-
- /**
- * Log a call to PointerTracker.callListenerOnCodeInput().
- *
- * SystemResponse: The user has entered a key through the normal tapping mechanism.
- * LatinIME.onCodeInput will also be called.
- */
- private static final LogStatement LOGSTATEMENT_POINTERTRACKER_CALLLISTENERONCODEINPUT =
- new LogStatement("PointerTrackerCallListenerOnCodeInput", true, false, "code",
- "outputText", "x", "y", "ignoreModifierKey", "altersCode", "isEnabled");
- public static void pointerTracker_callListenerOnCodeInput(final Key key, final int x,
- final int y, final boolean ignoreModifierKey, final boolean altersCode,
- final int code) {
- if (key != null) {
- String outputText = key.getOutputText();
- final ResearchLogger researchLogger = getInstance();
- researchLogger.enqueueEvent(LOGSTATEMENT_POINTERTRACKER_CALLLISTENERONCODEINPUT,
- Constants.printableCode(scrubDigitFromCodePoint(code)),
- outputText == null ? null : scrubDigitsFromString(outputText.toString()),
- x, y, ignoreModifierKey, altersCode, key.isEnabled());
- }
- }
-
- /**
- * Log a call to PointerTracker.callListenerCallListenerOnRelease().
- *
- * UserAction: The user has released their finger or thumb from the screen.
- */
- private static final LogStatement LOGSTATEMENT_POINTERTRACKER_CALLLISTENERONRELEASE =
- new LogStatement("PointerTrackerCallListenerOnRelease", true, false, "code",
- "withSliding", "ignoreModifierKey", "isEnabled");
- public static void pointerTracker_callListenerOnRelease(final Key key, final int primaryCode,
- final boolean withSliding, final boolean ignoreModifierKey) {
- if (key != null) {
- getInstance().enqueueEvent(LOGSTATEMENT_POINTERTRACKER_CALLLISTENERONRELEASE,
- Constants.printableCode(scrubDigitFromCodePoint(primaryCode)), withSliding,
- ignoreModifierKey, key.isEnabled());
- }
- }
-
- /**
- * Log a call to PointerTracker.onDownEvent().
- *
- * UserAction: The user has pressed down on a key.
- * TODO: Differentiate with LatinIME.processMotionEvent.
- */
- private static final LogStatement LOGSTATEMENT_POINTERTRACKER_ONDOWNEVENT =
- new LogStatement("PointerTrackerOnDownEvent", true, false, "deltaT", "distanceSquared");
- public static void pointerTracker_onDownEvent(long deltaT, int distanceSquared) {
- getInstance().enqueueEvent(LOGSTATEMENT_POINTERTRACKER_ONDOWNEVENT, deltaT,
- distanceSquared);
- }
-
- /**
- * Log a call to PointerTracker.onMoveEvent().
- *
- * UserAction: The user has moved their finger while pressing on the screen.
- * TODO: Differentiate with LatinIME.processMotionEvent().
- */
- private static final LogStatement LOGSTATEMENT_POINTERTRACKER_ONMOVEEVENT =
- new LogStatement("PointerTrackerOnMoveEvent", true, false, "x", "y", "lastX", "lastY");
- public static void pointerTracker_onMoveEvent(final int x, final int y, final int lastX,
- final int lastY) {
- getInstance().enqueueEvent(LOGSTATEMENT_POINTERTRACKER_ONMOVEEVENT, x, y, lastX, lastY);
- }
-
- /**
- * Log a call to RichInputConnection.commitCompletion().
- *
- * SystemResponse: The IME has committed a completion. A completion is an application-
- * specific suggestion that is presented in a pop-up menu in the TextView.
- */
- private static final LogStatement LOGSTATEMENT_RICHINPUTCONNECTION_COMMITCOMPLETION =
- new LogStatement("RichInputConnectionCommitCompletion", true, false, "completionInfo");
- public static void richInputConnection_commitCompletion(final CompletionInfo completionInfo) {
- final ResearchLogger researchLogger = getInstance();
- researchLogger.enqueueEvent(LOGSTATEMENT_RICHINPUTCONNECTION_COMMITCOMPLETION,
- completionInfo);
- }
-
- /**
- * Log a call to RichInputConnection.revertDoubleSpacePeriod().
- *
- * SystemResponse: The IME has reverted ". ", which had previously replaced two typed spaces.
- */
- private static final LogStatement LOGSTATEMENT_RICHINPUTCONNECTION_REVERTDOUBLESPACEPERIOD =
- new LogStatement("RichInputConnectionRevertDoubleSpacePeriod", false, false);
- public static void richInputConnection_revertDoubleSpacePeriod() {
- final ResearchLogger researchLogger = getInstance();
- // An extra LogUnit is added for the period; this is removed here because of the revert.
- researchLogger.uncommitCurrentLogUnit(null, true /* dumpCurrentLogUnit */);
- // TODO: This will probably be lost as the user backspaces further. Figure out how to put
- // it into the right logUnit.
- researchLogger.enqueueEvent(LOGSTATEMENT_RICHINPUTCONNECTION_REVERTDOUBLESPACEPERIOD);
- }
-
- /**
- * Log a call to RichInputConnection.revertSwapPunctuation().
- *
- * SystemResponse: The IME has reverted a punctuation swap.
- */
- private static final LogStatement LOGSTATEMENT_RICHINPUTCONNECTION_REVERTSWAPPUNCTUATION =
- new LogStatement("RichInputConnectionRevertSwapPunctuation", false, false);
- public static void richInputConnection_revertSwapPunctuation() {
- getInstance().enqueueEvent(LOGSTATEMENT_RICHINPUTCONNECTION_REVERTSWAPPUNCTUATION);
- }
-
- /**
- * Log a call to LatinIME.commitCurrentAutoCorrection().
- *
- * SystemResponse: The IME has committed an auto-correction. An auto-correction changes the raw
- * text input to another word (or words) that the user more likely desired to type.
- */
- private static final LogStatement LOGSTATEMENT_LATINIME_COMMITCURRENTAUTOCORRECTION =
- new LogStatement("LatinIMECommitCurrentAutoCorrection", true, true, "typedWord",
- "autoCorrection", "separatorString");
- public static void latinIme_commitCurrentAutoCorrection(final String typedWord,
- final String autoCorrection, final String separatorString, final boolean isBatchMode,
- final SuggestedWords suggestedWords) {
- final String scrubbedTypedWord = scrubDigitsFromString(typedWord);
- final String scrubbedAutoCorrection = scrubDigitsFromString(autoCorrection);
- final ResearchLogger researchLogger = getInstance();
- researchLogger.mCurrentLogUnit.initializeSuggestions(suggestedWords);
- researchLogger.onWordFinished(scrubbedAutoCorrection, isBatchMode);
-
- // Add the autocorrection logStatement at the end of the logUnit for the committed word.
- // We have to do this after calling commitCurrentLogUnitAsWord, because it may split the
- // current logUnit, and then we have to peek to get the logUnit reference back.
- final LogUnit logUnit = researchLogger.mMainLogBuffer.peekLastLogUnit();
- // TODO: Add test to confirm that the commitCurrentAutoCorrection log statement should
- // always be added to logUnit (if non-null) and not mCurrentLogUnit.
- researchLogger.enqueueEvent(logUnit, LOGSTATEMENT_LATINIME_COMMITCURRENTAUTOCORRECTION,
- scrubbedTypedWord, scrubbedAutoCorrection, separatorString);
- }
-
- private boolean isExpectingCommitText = false;
-
- /**
- * Log a call to RichInputConnection.commitText().
- *
- * SystemResponse: The IME is committing text. This happens after the user has typed a word
- * and then a space or punctuation key.
- */
- private static final LogStatement LOGSTATEMENT_RICHINPUTCONNECTIONCOMMITTEXT =
- new LogStatement("RichInputConnectionCommitText", true, false, "newCursorPosition");
- public static void richInputConnection_commitText(final String committedWord,
- final int newCursorPosition, final boolean isBatchMode) {
- final ResearchLogger researchLogger = getInstance();
- // Only include opening and closing logSegments if private data is included
- final String scrubbedWord = scrubDigitsFromString(committedWord);
- if (!researchLogger.isExpectingCommitText) {
- researchLogger.enqueueEvent(LOGSTATEMENT_RICHINPUTCONNECTIONCOMMITTEXT,
- newCursorPosition);
- researchLogger.commitCurrentLogUnitAsWord(scrubbedWord, Long.MAX_VALUE, isBatchMode);
- }
- researchLogger.isExpectingCommitText = false;
- }
-
- /**
- * Shared events for logging committed text.
- *
- * The "CommitTextEventHappened" LogStatement is written to the log even if privacy rules
- * indicate that the word contents should not be logged. It has no contents, and only serves to
- * record the event and thereby make it easier to calculate word-level statistics even when the
- * word contents are unknown.
- */
- private static final LogStatement LOGSTATEMENT_COMMITTEXT =
- new LogStatement("CommitText", true /* isPotentiallyPrivate */,
- false /* isPotentiallyRevealing */, "committedText", "isBatchMode");
- private static final LogStatement LOGSTATEMENT_COMMITTEXT_EVENT_HAPPENED =
- new LogStatement("CommitTextEventHappened", false /* isPotentiallyPrivate */,
- false /* isPotentiallyRevealing */);
- private void enqueueCommitText(final String word, final boolean isBatchMode) {
- // Event containing the word; will be published only if privacy checks pass
- enqueueEvent(LOGSTATEMENT_COMMITTEXT, word, isBatchMode);
- // Event not containing the word; will always be published
- enqueueEvent(LOGSTATEMENT_COMMITTEXT_EVENT_HAPPENED);
- }
-
- /**
- * Log a call to RichInputConnection.deleteSurroundingText().
- *
- * SystemResponse: The IME has deleted text.
- */
- private static final LogStatement LOGSTATEMENT_RICHINPUTCONNECTION_DELETESURROUNDINGTEXT =
- new LogStatement("RichInputConnectionDeleteSurroundingText", true, false,
- "beforeLength", "afterLength");
- public static void richInputConnection_deleteSurroundingText(final int beforeLength,
- final int afterLength) {
- getInstance().enqueueEvent(LOGSTATEMENT_RICHINPUTCONNECTION_DELETESURROUNDINGTEXT,
- beforeLength, afterLength);
- }
-
- /**
- * Log a call to RichInputConnection.finishComposingText().
- *
- * SystemResponse: The IME has left the composing text as-is.
- */
- private static final LogStatement LOGSTATEMENT_RICHINPUTCONNECTION_FINISHCOMPOSINGTEXT =
- new LogStatement("RichInputConnectionFinishComposingText", false, false);
- public static void richInputConnection_finishComposingText() {
- getInstance().enqueueEvent(LOGSTATEMENT_RICHINPUTCONNECTION_FINISHCOMPOSINGTEXT);
- }
-
- /**
- * Log a call to RichInputConnection.performEditorAction().
- *
- * SystemResponse: The IME is invoking an action specific to the editor.
- */
- private static final LogStatement LOGSTATEMENT_RICHINPUTCONNECTION_PERFORMEDITORACTION =
- new LogStatement("RichInputConnectionPerformEditorAction", false, false,
- "imeActionId");
- public static void richInputConnection_performEditorAction(final int imeActionId) {
- getInstance().enqueueEvent(LOGSTATEMENT_RICHINPUTCONNECTION_PERFORMEDITORACTION,
- imeActionId);
- }
-
- /**
- * Log a call to RichInputConnection.sendKeyEvent().
- *
- * SystemResponse: The IME is telling the TextView that a key is being pressed through an
- * alternate channel.
- * TODO: only for hardware keys?
- */
- private static final LogStatement LOGSTATEMENT_RICHINPUTCONNECTION_SENDKEYEVENT =
- new LogStatement("RichInputConnectionSendKeyEvent", true, false, "eventTime", "action",
- "code");
- public static void richInputConnection_sendKeyEvent(final KeyEvent keyEvent) {
- getInstance().enqueueEvent(LOGSTATEMENT_RICHINPUTCONNECTION_SENDKEYEVENT,
- keyEvent.getEventTime(), keyEvent.getAction(), keyEvent.getKeyCode());
- }
-
- /**
- * Log a call to RichInputConnection.setComposingText().
- *
- * SystemResponse: The IME is setting the composing text. Happens each time a character is
- * entered.
- */
- private static final LogStatement LOGSTATEMENT_RICHINPUTCONNECTION_SETCOMPOSINGTEXT =
- new LogStatement("RichInputConnectionSetComposingText", true, true, "text",
- "newCursorPosition");
- public static void richInputConnection_setComposingText(final CharSequence text,
- final int newCursorPosition) {
- if (text == null) {
- throw new RuntimeException("setComposingText is null");
- }
- getInstance().enqueueEvent(LOGSTATEMENT_RICHINPUTCONNECTION_SETCOMPOSINGTEXT, text,
- newCursorPosition);
- }
-
- /**
- * Log a call to RichInputConnection.setSelection().
- *
- * SystemResponse: The IME is requesting that the selection change. User-initiated selection-
- * change requests do not go through this method -- it's only when the system wants to change
- * the selection.
- */
- private static final LogStatement LOGSTATEMENT_RICHINPUTCONNECTION_SETSELECTION =
- new LogStatement("RichInputConnectionSetSelection", true, false, "from", "to");
- public static void richInputConnection_setSelection(final int from, final int to) {
- getInstance().enqueueEvent(LOGSTATEMENT_RICHINPUTCONNECTION_SETSELECTION, from, to);
- }
-
- /**
- * Log a call to SuddenJumpingTouchEventHandler.onTouchEvent().
- *
- * SystemResponse: The IME has filtered input events in case of an erroneous sensor reading.
- */
- private static final LogStatement LOGSTATEMENT_SUDDENJUMPINGTOUCHEVENTHANDLER_ONTOUCHEVENT =
- new LogStatement("SuddenJumpingTouchEventHandlerOnTouchEvent", true, false,
- "motionEvent");
- public static void suddenJumpingTouchEventHandler_onTouchEvent(final MotionEvent me) {
- if (me != null) {
- getInstance().enqueueEvent(LOGSTATEMENT_SUDDENJUMPINGTOUCHEVENTHANDLER_ONTOUCHEVENT,
- MotionEvent.obtain(me));
- }
- }
-
- /**
- * Log a call to SuggestionsView.setSuggestions().
- *
- * SystemResponse: The IME is setting the suggestions in the suggestion strip.
- */
- private static final LogStatement LOGSTATEMENT_SUGGESTIONSTRIPVIEW_SETSUGGESTIONS =
- new LogStatement("SuggestionStripViewSetSuggestions", true, true, "suggestedWords");
- public static void suggestionStripView_setSuggestions(final SuggestedWords suggestedWords) {
- if (suggestedWords != null) {
- getInstance().enqueueEvent(LOGSTATEMENT_SUGGESTIONSTRIPVIEW_SETSUGGESTIONS,
- suggestedWords);
- }
- }
-
- /**
- * The user has indicated a particular point in the log that is of interest.
- *
- * UserAction: From direct menu invocation.
- */
- private static final LogStatement LOGSTATEMENT_USER_TIMESTAMP =
- new LogStatement("UserTimestamp", false, false);
- public void userTimestamp() {
- getInstance().enqueueEvent(LOGSTATEMENT_USER_TIMESTAMP);
- }
-
- /**
- * Log a call to LatinIME.onEndBatchInput().
- *
- * SystemResponse: The system has completed a gesture.
- */
- private static final LogStatement LOGSTATEMENT_LATINIME_ONENDBATCHINPUT =
- new LogStatement("LatinIMEOnEndBatchInput", true, false, "enteredText",
- "enteredWordPos", "suggestedWords");
- public static void latinIME_onEndBatchInput(final CharSequence enteredText,
- final int enteredWordPos, final SuggestedWords suggestedWords) {
- final ResearchLogger researchLogger = getInstance();
- if (!TextUtils.isEmpty(enteredText) && hasLetters(enteredText.toString())) {
- researchLogger.mCurrentLogUnit.setWords(enteredText.toString());
- }
- researchLogger.enqueueEvent(LOGSTATEMENT_LATINIME_ONENDBATCHINPUT, enteredText,
- enteredWordPos, suggestedWords);
- researchLogger.mCurrentLogUnit.initializeSuggestions(suggestedWords);
- researchLogger.mStatistics.recordGestureInput(enteredText.length(),
- SystemClock.uptimeMillis());
- }
-
- private static final LogStatement LOGSTATEMENT_LATINIME_HANDLEBACKSPACE =
- new LogStatement("LatinIMEHandleBackspace", true, false, "numCharacters");
- /**
- * Log a call to LatinIME.handleBackspace() that is not a batch delete.
- *
- * UserInput: The user is deleting one or more characters by hitting the backspace key once.
- * The covers single character deletes as well as deleting selections.
- *
- * @param numCharacters how many characters the backspace operation deleted
- * @param shouldUncommitLogUnit whether to uncommit the last {@code LogUnit} in the
- * {@code LogBuffer}
- */
- public static void latinIME_handleBackspace(final int numCharacters,
- final boolean shouldUncommitLogUnit) {
- final ResearchLogger researchLogger = getInstance();
- researchLogger.enqueueEvent(LOGSTATEMENT_LATINIME_HANDLEBACKSPACE, numCharacters);
- if (shouldUncommitLogUnit) {
- ResearchLogger.getInstance().uncommitCurrentLogUnit(
- null, true /* dumpCurrentLogUnit */);
- }
- }
-
- /**
- * Log a call to LatinIME.handleBackspace() that is a batch delete.
- *
- * UserInput: The user is deleting a gestured word by hitting the backspace key once.
- */
- private static final LogStatement LOGSTATEMENT_LATINIME_HANDLEBACKSPACE_BATCH =
- new LogStatement("LatinIMEHandleBackspaceBatch", true, false, "deletedText",
- "numCharacters");
- public static void latinIME_handleBackspace_batch(final CharSequence deletedText,
- final int numCharacters) {
- final ResearchLogger researchLogger = getInstance();
- researchLogger.enqueueEvent(LOGSTATEMENT_LATINIME_HANDLEBACKSPACE_BATCH, deletedText,
- numCharacters);
- researchLogger.mStatistics.recordGestureDelete(deletedText.length(),
- SystemClock.uptimeMillis());
- researchLogger.uncommitCurrentLogUnit(deletedText.toString(),
- false /* dumpCurrentLogUnit */);
- }
-
- /**
- * Log a long interval between user operation.
- *
- * UserInput: The user has not done anything for a while.
- */
- private static final LogStatement LOGSTATEMENT_ONUSERPAUSE = new LogStatement("OnUserPause",
- false, false, "intervalInMs");
- public static void onUserPause(final long interval) {
- final ResearchLogger researchLogger = getInstance();
- researchLogger.enqueueEvent(LOGSTATEMENT_ONUSERPAUSE, interval);
- }
-
- /**
- * Record the current time in case the LogUnit is later split.
- *
- * If the current logUnit is split, then tapping, motion events, etc. before this time should
- * be assigned to one LogUnit, and events after this time should go into the following LogUnit.
- */
- public static void recordTimeForLogUnitSplit() {
- final ResearchLogger researchLogger = getInstance();
- researchLogger.setSavedDownEventTime(SystemClock.uptimeMillis());
- researchLogger.mSavedDownEventTime = Long.MAX_VALUE;
- }
-
- /**
- * Log a call to LatinIME.handleSeparator()
- *
- * SystemResponse: The system is inserting a separator character, possibly performing auto-
- * correction or other actions appropriate at the end of a word.
- */
- private static final LogStatement LOGSTATEMENT_LATINIME_HANDLESEPARATOR =
- new LogStatement("LatinIMEHandleSeparator", false, false, "primaryCode",
- "isComposingWord");
- public static void latinIME_handleSeparator(final int primaryCode,
- final boolean isComposingWord) {
- final ResearchLogger researchLogger = getInstance();
- researchLogger.enqueueEvent(LOGSTATEMENT_LATINIME_HANDLESEPARATOR, primaryCode,
- isComposingWord);
- }
-
- /**
- * Call this method when the logging system has attempted publication of an n-gram.
- *
- * Statistics are gathered about the success or failure.
- *
- * @param publishabilityResultCode a result code as defined by
- * {@code MainLogBuffer.PUBLISHABILITY_*}
- */
- static void recordPublishabilityResultCode(final int publishabilityResultCode) {
- final ResearchLogger researchLogger = getInstance();
- final Statistics statistics = researchLogger.mStatistics;
- statistics.recordPublishabilityResultCode(publishabilityResultCode);
- }
-
- /**
- * Log statistics.
- *
- * ContextualData, recorded at the end of a session.
- */
- private static final LogStatement LOGSTATEMENT_STATISTICS =
- new LogStatement("Statistics", false, false, "charCount", "letterCount", "numberCount",
- "spaceCount", "deleteOpsCount", "wordCount", "isEmptyUponStarting",
- "isEmptinessStateKnown", "averageTimeBetweenKeys", "averageTimeBeforeDelete",
- "averageTimeDuringRepeatedDelete", "averageTimeAfterDelete",
- "dictionaryWordCount", "splitWordsCount", "gestureInputCount",
- "gestureCharsCount", "gesturesDeletedCount", "manualSuggestionsCount",
- "revertCommitsCount", "correctedWordsCount", "autoCorrectionsCount",
- "publishableCount", "unpublishableStoppingCount",
- "unpublishableIncorrectWordCount", "unpublishableSampledTooRecentlyCount",
- "unpublishableDictionaryUnavailableCount", "unpublishableMayContainDigitCount",
- "unpublishableNotInDictionaryCount");
- private static void logStatistics() {
- final ResearchLogger researchLogger = getInstance();
- final Statistics statistics = researchLogger.mStatistics;
- researchLogger.enqueueEvent(LOGSTATEMENT_STATISTICS, statistics.mCharCount,
- statistics.mLetterCount, statistics.mNumberCount, statistics.mSpaceCount,
- statistics.mDeleteKeyCount, statistics.mWordCount, statistics.mIsEmptyUponStarting,
- statistics.mIsEmptinessStateKnown, statistics.mKeyCounter.getAverageTime(),
- statistics.mBeforeDeleteKeyCounter.getAverageTime(),
- statistics.mDuringRepeatedDeleteKeysCounter.getAverageTime(),
- statistics.mAfterDeleteKeyCounter.getAverageTime(),
- statistics.mDictionaryWordCount, statistics.mSplitWordsCount,
- statistics.mGesturesInputCount, statistics.mGesturesCharsCount,
- statistics.mGesturesDeletedCount, statistics.mManualSuggestionsCount,
- statistics.mRevertCommitsCount, statistics.mCorrectedWordsCount,
- statistics.mAutoCorrectionsCount, statistics.mPublishableCount,
- statistics.mUnpublishableStoppingCount, statistics.mUnpublishableIncorrectWordCount,
- statistics.mUnpublishableSampledTooRecently,
- statistics.mUnpublishableDictionaryUnavailable,
- statistics.mUnpublishableMayContainDigit, statistics.mUnpublishableNotInDictionary);
- }
-}
diff --git a/java/src/com/android/inputmethod/research/ResearchSettings.java b/java/src/com/android/inputmethod/research/ResearchSettings.java
deleted file mode 100644
index c0bc03fde..000000000
--- a/java/src/com/android/inputmethod/research/ResearchSettings.java
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.research;
-
-import android.content.SharedPreferences;
-
-import java.util.UUID;
-
-public final class ResearchSettings {
- public static final String PREF_RESEARCH_LOGGER_UUID = "pref_research_logger_uuid";
- public static final String PREF_RESEARCH_LOGGER_ENABLED_FLAG =
- "pref_research_logger_enabled_flag";
- public static final String PREF_RESEARCH_LOGGER_HAS_SEEN_SPLASH =
- "pref_research_logger_has_seen_splash";
- public static final String PREF_RESEARCH_LAST_DIR_CLEANUP_TIME =
- "pref_research_last_dir_cleanup_time";
-
- private ResearchSettings() {
- // Intentional empty constructor for singleton.
- }
-
- public static String readResearchLoggerUuid(final SharedPreferences prefs) {
- if (prefs.contains(PREF_RESEARCH_LOGGER_UUID)) {
- return prefs.getString(PREF_RESEARCH_LOGGER_UUID, null);
- }
- // Generate a random string as uuid if not yet set
- final String newUuid = UUID.randomUUID().toString();
- prefs.edit().putString(PREF_RESEARCH_LOGGER_UUID, newUuid).apply();
- return newUuid;
- }
-
- public static boolean readResearchLoggerEnabledFlag(final SharedPreferences prefs) {
- return prefs.getBoolean(PREF_RESEARCH_LOGGER_ENABLED_FLAG, false);
- }
-
- public static void writeResearchLoggerEnabledFlag(final SharedPreferences prefs,
- final boolean isEnabled) {
- prefs.edit().putBoolean(PREF_RESEARCH_LOGGER_ENABLED_FLAG, isEnabled).apply();
- }
-
- public static boolean readHasSeenSplash(final SharedPreferences prefs) {
- return prefs.getBoolean(PREF_RESEARCH_LOGGER_HAS_SEEN_SPLASH, false);
- }
-
- public static void writeHasSeenSplash(final SharedPreferences prefs,
- final boolean hasSeenSplash) {
- prefs.edit().putBoolean(PREF_RESEARCH_LOGGER_HAS_SEEN_SPLASH, hasSeenSplash).apply();
- }
-
- public static long readResearchLastDirCleanupTime(final SharedPreferences prefs) {
- return prefs.getLong(PREF_RESEARCH_LAST_DIR_CLEANUP_TIME, 0L);
- }
-
- public static void writeResearchLastDirCleanupTime(final SharedPreferences prefs,
- final long lastDirCleanupTime) {
- prefs.edit().putLong(PREF_RESEARCH_LAST_DIR_CLEANUP_TIME, lastDirCleanupTime).apply();
- }
-}
diff --git a/java/src/com/android/inputmethod/research/Statistics.java b/java/src/com/android/inputmethod/research/Statistics.java
deleted file mode 100644
index fd323a104..000000000
--- a/java/src/com/android/inputmethod/research/Statistics.java
+++ /dev/null
@@ -1,279 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.research;
-
-import android.util.Log;
-
-import com.android.inputmethod.latin.Constants;
-import com.android.inputmethod.latin.define.ProductionFlag;
-
-import java.util.concurrent.TimeUnit;
-
-public class Statistics {
- private static final String TAG = Statistics.class.getSimpleName();
- private static final boolean DEBUG = false
- && ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS_DEBUG;
-
- // TODO: Cleanup comments to only including those giving meaningful information.
- // Number of characters entered during a typing session
- int mCharCount;
- // Number of letter characters entered during a typing session
- int mLetterCount;
- // Number of number characters entered
- int mNumberCount;
- // Number of space characters entered
- int mSpaceCount;
- // Number of delete operations entered (taps on the backspace key)
- int mDeleteKeyCount;
- // Number of words entered during a session.
- int mWordCount;
- // Number of words found in the dictionary.
- int mDictionaryWordCount;
- // Number of words split and spaces automatically entered.
- int mSplitWordsCount;
- // Number of words entered during a session.
- int mCorrectedWordsCount;
- // Number of gestures that were input.
- int mGesturesInputCount;
- // Number of gestures that were deleted.
- int mGesturesDeletedCount;
- // Total number of characters in words entered by gesture.
- int mGesturesCharsCount;
- // Number of manual suggestions chosen.
- int mManualSuggestionsCount;
- // Number of times that autocorrection was invoked.
- int mAutoCorrectionsCount;
- // Number of times a commit was reverted in this session.
- int mRevertCommitsCount;
- // Whether the text field was empty upon editing
- boolean mIsEmptyUponStarting;
- boolean mIsEmptinessStateKnown;
-
- // Counts of how often an n-gram is collected or not, and the reasons for the decision.
- // Keep consistent with publishability result code list in MainLogBuffer
- int mPublishableCount;
- int mUnpublishableStoppingCount;
- int mUnpublishableIncorrectWordCount;
- int mUnpublishableSampledTooRecently;
- int mUnpublishableDictionaryUnavailable;
- int mUnpublishableMayContainDigit;
- int mUnpublishableNotInDictionary;
-
- // Timers to count average time to enter a key, first press a delete key,
- // between delete keys, and then to return typing after a delete key.
- final AverageTimeCounter mKeyCounter = new AverageTimeCounter();
- final AverageTimeCounter mBeforeDeleteKeyCounter = new AverageTimeCounter();
- final AverageTimeCounter mDuringRepeatedDeleteKeysCounter = new AverageTimeCounter();
- final AverageTimeCounter mAfterDeleteKeyCounter = new AverageTimeCounter();
-
- static class AverageTimeCounter {
- int mCount;
- int mTotalTime;
-
- public void reset() {
- mCount = 0;
- mTotalTime = 0;
- }
-
- public void add(long deltaTime) {
- mCount++;
- mTotalTime += deltaTime;
- }
-
- public int getAverageTime() {
- if (mCount == 0) {
- return 0;
- }
- return mTotalTime / mCount;
- }
- }
-
- // To account for the interruptions when the user's attention is directed elsewhere, times
- // longer than MIN_TYPING_INTERMISSION are not counted when estimating this statistic.
- public static final long MIN_TYPING_INTERMISSION = TimeUnit.SECONDS.toMillis(2);
- public static final long MIN_DELETION_INTERMISSION = TimeUnit.SECONDS.toMillis(10);
-
- // The last time that a tap was performed
- private long mLastTapTime;
- // The type of the last keypress (delete key or not)
- boolean mIsLastKeyDeleteKey;
-
- private static final Statistics sInstance = new Statistics();
-
- public static Statistics getInstance() {
- return sInstance;
- }
-
- private Statistics() {
- reset();
- }
-
- public void reset() {
- mCharCount = 0;
- mLetterCount = 0;
- mNumberCount = 0;
- mSpaceCount = 0;
- mDeleteKeyCount = 0;
- mWordCount = 0;
- mDictionaryWordCount = 0;
- mSplitWordsCount = 0;
- mCorrectedWordsCount = 0;
- mGesturesInputCount = 0;
- mGesturesDeletedCount = 0;
- mManualSuggestionsCount = 0;
- mRevertCommitsCount = 0;
- mAutoCorrectionsCount = 0;
- mIsEmptyUponStarting = true;
- mIsEmptinessStateKnown = false;
- mKeyCounter.reset();
- mBeforeDeleteKeyCounter.reset();
- mDuringRepeatedDeleteKeysCounter.reset();
- mAfterDeleteKeyCounter.reset();
- mGesturesCharsCount = 0;
- mGesturesDeletedCount = 0;
- mPublishableCount = 0;
- mUnpublishableStoppingCount = 0;
- mUnpublishableIncorrectWordCount = 0;
- mUnpublishableSampledTooRecently = 0;
- mUnpublishableDictionaryUnavailable = 0;
- mUnpublishableMayContainDigit = 0;
- mUnpublishableNotInDictionary = 0;
-
- mLastTapTime = 0;
- mIsLastKeyDeleteKey = false;
- }
-
- public void recordChar(int codePoint, long time) {
- if (DEBUG) {
- Log.d(TAG, "recordChar() called");
- }
- if (codePoint == Constants.CODE_DELETE) {
- mDeleteKeyCount++;
- recordUserAction(time, true /* isDeletion */);
- } else {
- mCharCount++;
- if (Character.isDigit(codePoint)) {
- mNumberCount++;
- }
- if (Character.isLetter(codePoint)) {
- mLetterCount++;
- }
- if (Character.isSpaceChar(codePoint)) {
- mSpaceCount++;
- }
- recordUserAction(time, false /* isDeletion */);
- }
- }
-
- public void recordWordEntered(final boolean isDictionaryWord,
- final boolean containsCorrection) {
- mWordCount++;
- if (isDictionaryWord) {
- mDictionaryWordCount++;
- }
- if (containsCorrection) {
- mCorrectedWordsCount++;
- }
- }
-
- public void recordSplitWords() {
- mSplitWordsCount++;
- }
-
- public void recordGestureInput(final int numCharsEntered, final long time) {
- mGesturesInputCount++;
- mGesturesCharsCount += numCharsEntered;
- recordUserAction(time, false /* isDeletion */);
- }
-
- public void setIsEmptyUponStarting(final boolean isEmpty) {
- mIsEmptyUponStarting = isEmpty;
- mIsEmptinessStateKnown = true;
- }
-
- public void recordGestureDelete(final int length, final long time) {
- mGesturesDeletedCount++;
- recordUserAction(time, true /* isDeletion */);
- }
-
- public void recordManualSuggestion(final long time) {
- mManualSuggestionsCount++;
- recordUserAction(time, false /* isDeletion */);
- }
-
- public void recordAutoCorrection(final long time) {
- mAutoCorrectionsCount++;
- recordUserAction(time, false /* isDeletion */);
- }
-
- public void recordRevertCommit(final long time) {
- mRevertCommitsCount++;
- recordUserAction(time, true /* isDeletion */);
- }
-
- private void recordUserAction(final long time, final boolean isDeletion) {
- final long delta = time - mLastTapTime;
- if (isDeletion) {
- if (delta < MIN_DELETION_INTERMISSION) {
- if (mIsLastKeyDeleteKey) {
- mDuringRepeatedDeleteKeysCounter.add(delta);
- } else {
- mBeforeDeleteKeyCounter.add(delta);
- }
- } else {
- ResearchLogger.onUserPause(delta);
- }
- } else {
- if (mIsLastKeyDeleteKey && delta < MIN_DELETION_INTERMISSION) {
- mAfterDeleteKeyCounter.add(delta);
- } else if (!mIsLastKeyDeleteKey && delta < MIN_TYPING_INTERMISSION) {
- mKeyCounter.add(delta);
- } else {
- ResearchLogger.onUserPause(delta);
- }
- }
- mIsLastKeyDeleteKey = isDeletion;
- mLastTapTime = time;
- }
-
- public void recordPublishabilityResultCode(final int publishabilityResultCode) {
- // Keep consistent with publishability result code list in MainLogBuffer
- switch (publishabilityResultCode) {
- case MainLogBuffer.PUBLISHABILITY_PUBLISHABLE:
- mPublishableCount++;
- break;
- case MainLogBuffer.PUBLISHABILITY_UNPUBLISHABLE_STOPPING:
- mUnpublishableStoppingCount++;
- break;
- case MainLogBuffer.PUBLISHABILITY_UNPUBLISHABLE_INCORRECT_WORD_COUNT:
- mUnpublishableIncorrectWordCount++;
- break;
- case MainLogBuffer.PUBLISHABILITY_UNPUBLISHABLE_SAMPLED_TOO_RECENTLY:
- mUnpublishableSampledTooRecently++;
- break;
- case MainLogBuffer.PUBLISHABILITY_UNPUBLISHABLE_DICTIONARY_UNAVAILABLE:
- mUnpublishableDictionaryUnavailable++;
- break;
- case MainLogBuffer.PUBLISHABILITY_UNPUBLISHABLE_MAY_CONTAIN_DIGIT:
- mUnpublishableMayContainDigit++;
- break;
- case MainLogBuffer.PUBLISHABILITY_UNPUBLISHABLE_NOT_IN_DICTIONARY:
- mUnpublishableNotInDictionary++;
- break;
- }
- }
-}
diff --git a/java/src/com/android/inputmethod/research/Uploader.java b/java/src/com/android/inputmethod/research/Uploader.java
deleted file mode 100644
index c7ea3e69d..000000000
--- a/java/src/com/android/inputmethod/research/Uploader.java
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.research;
-
-import android.Manifest;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.content.pm.PackageManager;
-import android.net.ConnectivityManager;
-import android.net.NetworkInfo;
-import android.os.BatteryManager;
-import android.text.TextUtils;
-import android.util.Log;
-
-import com.android.inputmethod.latin.R;
-import com.android.inputmethod.latin.define.ProductionFlag;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.OutputStream;
-import java.net.HttpURLConnection;
-import java.net.MalformedURLException;
-import java.net.URL;
-
-/**
- * Manages the uploading of ResearchLog files.
- */
-public final class Uploader {
- private static final String TAG = Uploader.class.getSimpleName();
- private static final boolean DEBUG = false
- && ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS_DEBUG;
- // Set IS_INHIBITING_AUTO_UPLOAD to true for local testing
- private static final boolean IS_INHIBITING_UPLOAD = false
- && ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS_DEBUG;
- private static final int BUF_SIZE = 1024 * 8;
-
- private final Context mContext;
- private final ResearchLogDirectory mResearchLogDirectory;
- private final URL mUrl;
-
- public Uploader(final Context context) {
- mContext = context;
- mResearchLogDirectory = new ResearchLogDirectory(context);
-
- final String urlString = context.getString(R.string.research_logger_upload_url);
- if (TextUtils.isEmpty(urlString)) {
- mUrl = null;
- return;
- }
- URL url = null;
- try {
- url = new URL(urlString);
- } catch (final MalformedURLException e) {
- Log.e(TAG, "Bad URL for uploading", e);
- }
- mUrl = url;
- }
-
- public boolean isPossibleToUpload() {
- return hasUploadingPermission() && mUrl != null && !IS_INHIBITING_UPLOAD;
- }
-
- private boolean hasUploadingPermission() {
- final PackageManager packageManager = mContext.getPackageManager();
- return packageManager.checkPermission(Manifest.permission.INTERNET,
- mContext.getPackageName()) == PackageManager.PERMISSION_GRANTED;
- }
-
- public boolean isConvenientToUpload() {
- return isExternallyPowered() && hasWifiConnection();
- }
-
- private boolean isExternallyPowered() {
- final Intent intent = mContext.registerReceiver(null, new IntentFilter(
- Intent.ACTION_BATTERY_CHANGED));
- final int pluggedState = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
- return pluggedState == BatteryManager.BATTERY_PLUGGED_AC
- || pluggedState == BatteryManager.BATTERY_PLUGGED_USB;
- }
-
- private boolean hasWifiConnection() {
- final ConnectivityManager manager =
- (ConnectivityManager) mContext.getSystemService(Context.CONNECTIVITY_SERVICE);
- final NetworkInfo wifiInfo = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
- return wifiInfo.isConnected();
- }
-
- public void doUpload() {
- final File[] files = mResearchLogDirectory.getUploadableLogFiles();
- if (files == null) return;
- for (final File file : files) {
- uploadFile(file);
- }
- }
-
- private void uploadFile(final File file) {
- if (DEBUG) {
- Log.d(TAG, "attempting upload of " + file.getAbsolutePath());
- }
- final int contentLength = (int) file.length();
- HttpURLConnection connection = null;
- InputStream fileInputStream = null;
- try {
- fileInputStream = new FileInputStream(file);
- connection = (HttpURLConnection) mUrl.openConnection();
- connection.setRequestMethod("PUT");
- connection.setDoOutput(true);
- connection.setFixedLengthStreamingMode(contentLength);
- final OutputStream outputStream = connection.getOutputStream();
- uploadContents(fileInputStream, outputStream);
- if (connection.getResponseCode() != HttpURLConnection.HTTP_OK) {
- Log.d(TAG, "upload failed: " + connection.getResponseCode());
- final InputStream netInputStream = connection.getInputStream();
- final BufferedReader reader = new BufferedReader(new InputStreamReader(
- netInputStream));
- String line;
- while ((line = reader.readLine()) != null) {
- Log.d(TAG, "| " + reader.readLine());
- }
- reader.close();
- return;
- }
- file.delete();
- if (DEBUG) {
- Log.d(TAG, "upload successful");
- }
- } catch (final IOException e) {
- Log.e(TAG, "Exception uploading file", e);
- } finally {
- if (fileInputStream != null) {
- try {
- fileInputStream.close();
- } catch (final IOException e) {
- Log.e(TAG, "Exception closing uploaded file", e);
- }
- }
- if (connection != null) {
- connection.disconnect();
- }
- }
- }
-
- private static void uploadContents(final InputStream is, final OutputStream os)
- throws IOException {
- // TODO: Switch to NIO.
- final byte[] buf = new byte[BUF_SIZE];
- int numBytesRead;
- while ((numBytesRead = is.read(buf)) != -1) {
- os.write(buf, 0, numBytesRead);
- }
- }
-}
diff --git a/java/src/com/android/inputmethod/research/UploaderService.java b/java/src/com/android/inputmethod/research/UploaderService.java
deleted file mode 100644
index fd3f2f60e..000000000
--- a/java/src/com/android/inputmethod/research/UploaderService.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.research;
-
-import android.app.AlarmManager;
-import android.app.IntentService;
-import android.app.PendingIntent;
-import android.content.Context;
-import android.content.Intent;
-import android.os.Bundle;
-import android.os.SystemClock;
-
-/**
- * Service to invoke the uploader.
- *
- * Can be regularly invoked, invoked on boot, etc.
- */
-public final class UploaderService extends IntentService {
- private static final String TAG = UploaderService.class.getSimpleName();
- public static final long RUN_INTERVAL = AlarmManager.INTERVAL_HOUR;
- public static final String EXTRA_UPLOAD_UNCONDITIONALLY = UploaderService.class.getName()
- + ".extra.UPLOAD_UNCONDITIONALLY";
-
- public UploaderService() {
- super("Research Uploader Service");
- }
-
- @Override
- protected void onHandleIntent(final Intent intent) {
- // We may reach this point either because the alarm fired, or because the system explicitly
- // requested that an Upload occur. In the latter case, we want to cancel the alarm in case
- // it's about to fire.
- cancelAndRescheduleUploadingService(this, false /* needsRescheduling */);
-
- final Uploader uploader = new Uploader(this);
- if (!uploader.isPossibleToUpload()) return;
- if (isUploadingUnconditionally(intent.getExtras()) || uploader.isConvenientToUpload()) {
- uploader.doUpload();
- }
- cancelAndRescheduleUploadingService(this, true /* needsRescheduling */);
- }
-
- private boolean isUploadingUnconditionally(final Bundle bundle) {
- if (bundle == null) return false;
- if (bundle.containsKey(EXTRA_UPLOAD_UNCONDITIONALLY)) {
- return bundle.getBoolean(EXTRA_UPLOAD_UNCONDITIONALLY);
- }
- return false;
- }
-
- /**
- * Arrange for the UploaderService to be run on a regular basis.
- *
- * Any existing scheduled invocation of UploaderService is removed and optionally rescheduled.
- * This may cause problems if this method is called so often that no scheduled invocation is
- * ever run. But if the delay is short enough that it will go off when the user is sleeping,
- * then there should be no starvation.
- *
- * @param context {@link Context} object
- * @param needsRescheduling whether to schedule a future intent to be delivered to this service
- */
- public static void cancelAndRescheduleUploadingService(final Context context,
- final boolean needsRescheduling) {
- final Intent intent = new Intent(context, UploaderService.class);
- final PendingIntent pendingIntent = PendingIntent.getService(context, 0, intent, 0);
- final AlarmManager alarmManager = (AlarmManager) context.getSystemService(
- Context.ALARM_SERVICE);
- alarmManager.cancel(pendingIntent);
- if (needsRescheduling) {
- alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime()
- + UploaderService.RUN_INTERVAL, pendingIntent);
- }
- }
-}
diff --git a/java/src/com/android/inputmethod/research/ui/SplashScreen.java b/java/src/com/android/inputmethod/research/ui/SplashScreen.java
deleted file mode 100644
index 78ed668d1..000000000
--- a/java/src/com/android/inputmethod/research/ui/SplashScreen.java
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.inputmethod.research.ui;
-
-import android.app.AlertDialog.Builder;
-import android.app.Dialog;
-import android.content.DialogInterface;
-import android.content.DialogInterface.OnCancelListener;
-import android.content.Intent;
-import android.inputmethodservice.InputMethodService;
-import android.net.Uri;
-import android.os.IBinder;
-import android.view.Window;
-import android.view.WindowManager.LayoutParams;
-
-import com.android.inputmethod.latin.R.string;
-
-/**
- * Show a dialog when the user first opens the keyboard.
- *
- * The splash screen is a modal dialog box presented when the user opens this keyboard for the first
- * time. It is useful for giving specific warnings that must be shown to the user before use.
- *
- * While the splash screen does share with the setup wizard the common goal of presenting
- * information to the user before use, they are presented at different times and with different
- * capabilities. The setup wizard is launched by tapping on the icon, and walks the user through
- * the setup process. It can, however, be bypassed by enabling the keyboard from Settings directly.
- * The splash screen cannot be bypassed, and is therefore more appropriate for obtaining user
- * consent.
- */
-public class SplashScreen {
- public interface UserConsentListener {
- public void onSplashScreenUserClickedOk();
- }
-
- final UserConsentListener mListener;
- final Dialog mSplashDialog;
-
- public SplashScreen(final InputMethodService inputMethodService,
- final UserConsentListener listener) {
- mListener = listener;
- final Builder builder = new Builder(inputMethodService)
- .setTitle(string.research_splash_title)
- .setMessage(string.research_splash_content)
- .setPositiveButton(android.R.string.yes,
- new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- mListener.onSplashScreenUserClickedOk();
- mSplashDialog.dismiss();
- }
- })
- .setNegativeButton(android.R.string.no,
- new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- final String packageName = inputMethodService.getPackageName();
- final Uri packageUri = Uri.parse("package:" + packageName);
- final Intent intent = new Intent(Intent.ACTION_UNINSTALL_PACKAGE,
- packageUri);
- intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- inputMethodService.startActivity(intent);
- }
- })
- .setCancelable(true)
- .setOnCancelListener(
- new OnCancelListener() {
- @Override
- public void onCancel(DialogInterface dialog) {
- inputMethodService.requestHideSelf(0);
- }
- });
- mSplashDialog = builder.create();
- }
-
- /**
- * Show the splash screen.
- *
- * The user must consent to the terms presented in the SplashScreen before they can use the
- * keyboard. If they cancel instead, they are given the option to uninstall the keybard.
- *
- * @param windowToken {@link IBinder} to attach dialog to
- */
- public void showSplashScreen(final IBinder windowToken) {
- final Window window = mSplashDialog.getWindow();
- final LayoutParams lp = window.getAttributes();
- lp.token = windowToken;
- lp.type = LayoutParams.TYPE_APPLICATION_ATTACHED_DIALOG;
- window.setAttributes(lp);
- window.addFlags(LayoutParams.FLAG_ALT_FOCUSABLE_IM);
- mSplashDialog.show();
- }
-
- public boolean isShowing() {
- return mSplashDialog.isShowing();
- }
-}