aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Android.bp39
-rw-r--r--Android.mk16
-rw-r--r--MODULE_LICENSE_APACHE2 (renamed from java/MODULE_LICENSE_APACHE2)0
-rw-r--r--NOTICE192
-rw-r--r--OWNERS6
-rw-r--r--common/Android.bp21
-rw-r--r--common/Android.mk28
-rw-r--r--java-overridable/Android.bp18
-rw-r--r--java/Android.bp46
-rw-r--r--java/Android.mk46
-rw-r--r--java/res/values-as/strings-action-keys.xml31
-rw-r--r--java/res/values-as/strings-appname.xml27
-rw-r--r--java/res/values-as/strings-config-important-notice.xml24
-rw-r--r--java/res/values-as/strings-emoji-descriptions.xml1756
-rw-r--r--java/res/values-as/strings-letter-descriptions.xml208
-rw-r--r--java/res/values-as/strings-talkback-descriptions.xml102
-rw-r--r--java/res/values-as/strings.xml219
-rw-r--r--java/res/values-da/strings.xml2
-rw-r--r--java/res/values-en-rCA/strings-emoji-descriptions.xml4
-rw-r--r--java/res/values-fa/strings-emoji-descriptions.xml2
-rw-r--r--java/res/values-fa/strings-talkback-descriptions.xml2
-rw-r--r--java/res/values-it/strings.xml2
-rw-r--r--java/res/values-ja/strings.xml4
-rw-r--r--java/res/values-my/strings.xml4
-rw-r--r--java/res/values-nl/strings.xml2
-rw-r--r--java/res/values-pl/strings.xml2
-rw-r--r--java/res/values-pt/strings.xml4
-rw-r--r--java/res/values-th/strings.xml2
-rw-r--r--java/res/values-tl/strings-emoji-descriptions.xml6
-rw-r--r--java/res/values-tr/strings.xml6
-rw-r--r--java/src/com/android/inputmethod/latin/makedict/FormatSpec.java3
-rw-r--r--native/Android.mk1
-rw-r--r--native/dicttoolkit/Android.bp94
-rw-r--r--native/dicttoolkit/Android.mk66
-rw-r--r--native/dicttoolkit/CleanupNativeFileList.mk17
-rw-r--r--native/dicttoolkit/NativeFileList.mk44
-rw-r--r--native/dicttoolkit/UnitTests.mk65
-rw-r--r--native/dicttoolkit/src/offdevice_intermediate_dict/offdevice_intermediate_dict.h2
-rw-r--r--native/dicttoolkit/src/offdevice_intermediate_dict/offdevice_intermediate_dict_pt_node.h2
-rw-r--r--native/dicttoolkit/tests/offdevice_intermediate_dict/offdevice_intermediate_dict_test.cpp2
-rw-r--r--native/jni/Android.bp213
-rw-r--r--native/jni/Android.mk103
-rw-r--r--native/jni/Application.mk1
-rw-r--r--native/jni/CleanupNativeFileList.mk19
-rw-r--r--native/jni/HostUnitTests.mk63
-rw-r--r--native/jni/NativeFileList.mk146
-rw-r--r--native/jni/TargetUnitTests.mk50
-rw-r--r--native/jni/src/dictionary/utils/binary_dictionary_bigrams_iterator.h2
-rw-r--r--native/jni/src/dictionary/utils/binary_dictionary_shortcut_iterator.h2
-rw-r--r--tests/Android.bp44
-rw-r--r--tests/Android.mk46
-rw-r--r--tests/src/com/android/inputmethod/latin/makedict/BinaryDictDecoderEncoderTests.java677
-rw-r--r--tests/src/com/android/inputmethod/latin/makedict/BinaryDictUtils.java80
-rw-r--r--tests/src/com/android/inputmethod/latin/makedict/Ver2DictEncoder.java279
-rw-r--r--tests/src/com/android/inputmethod/latin/makedict/Ver4DictEncoder.java133
-rw-r--r--tools/Android.mk15
-rw-r--r--tools/dicttool/Android.bp32
-rw-r--r--tools/dicttool/Android.mk87
-rw-r--r--tools/dicttool/NativeLib.mk46
-rw-r--r--tools/dicttool/compat/com/android/inputmethod/latin/define/JniLibName.java2
-rw-r--r--tools/dicttool/etc/Android.mk19
-rwxr-xr-xtools/dicttool/etc/dicttool_aosp67
-rwxr-xr-xtools/dicttool/etc/makedict_aosp18
-rw-r--r--tools/dicttool/etc/manifest.txt1
-rw-r--r--tools/dicttool/src/com/android/inputmethod/latin/dicttool/CombinedInputOutput.java25
-rw-r--r--tools/dicttool/src/com/android/inputmethod/latin/dicttool/Diff.java3
-rw-r--r--tools/dicttool/src/com/android/inputmethod/latin/dicttool/Info.java20
-rw-r--r--tools/dicttool/tests/com/android/inputmethod/latin/dicttool/BinaryDictOffdeviceUtilsTests.java14
-rw-r--r--tools/dicttool/tests/com/android/inputmethod/latin/makedict/BinaryDictEncoderFlattenTreeTests.java10
-rw-r--r--tools/dicttool/tests/com/android/inputmethod/latin/makedict/FusionDictionaryTest.java2
-rw-r--r--tools/make-keyboard-text/Android.bp22
-rw-r--r--tools/make-keyboard-text/Android.mk25
-rw-r--r--tools/make-keyboard-text/etc/Android.mk20
-rwxr-xr-xtools/make-keyboard-text/etc/make-keyboard-text63
-rw-r--r--tools/make-keyboard-text/etc/manifest.txt1
75 files changed, 1941 insertions, 3526 deletions
diff --git a/Android.bp b/Android.bp
new file mode 100644
index 000000000..05598467c
--- /dev/null
+++ b/Android.bp
@@ -0,0 +1,39 @@
+// Copyright (C) 2018 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.
+
+filegroup {
+ name: "dicttool_deps",
+ srcs: [
+ "java/src/com/android/inputmethod/latin/makedict/**/*.java",
+
+ // Dependencies for Dicttool. Most of these files are needed by BinaryDictionary.java. Note that
+ // a significant part of the dependencies are mocked in the compat/ directory, with empty or
+ // nearly-empty implementations, for parts that we don't use in Dicttool.
+ "java/src/com/android/inputmethod/latin/BinaryDictionary.java",
+ "java/src/com/android/inputmethod/latin/DicTraverseSession.java",
+ "java/src/com/android/inputmethod/latin/Dictionary.java",
+ "java/src/com/android/inputmethod/latin/NgramContext.java",
+ "java/src/com/android/inputmethod/latin/SuggestedWords.java",
+ "java/src/com/android/inputmethod/latin/settings/SettingsValuesForSuggestion.java",
+ "java/src/com/android/inputmethod/latin/utils/BinaryDictionaryUtils.java",
+ "java/src/com/android/inputmethod/latin/utils/CombinedFormatUtils.java",
+ "java/src/com/android/inputmethod/latin/utils/JniUtils.java",
+
+ "java-overridable/src/com/android/inputmethod/latin/define/DebugFlags.java",
+ "java-overridable/src/com/android/inputmethod/latin/define/DecoderSpecificConstants.java",
+
+ "tests/src/com/android/inputmethod/latin/utils/ByteArrayDictBuffer.java",
+ "tests/src/com/android/inputmethod/latin/makedict/**/*.java",
+ ],
+}
diff --git a/Android.mk b/Android.mk
deleted file mode 100644
index 17eeba8f0..000000000
--- a/Android.mk
+++ /dev/null
@@ -1,16 +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.
-
-subdirs := common native java tests tools
-include $(call all-named-subdir-makefiles, $(subdirs))
diff --git a/java/MODULE_LICENSE_APACHE2 b/MODULE_LICENSE_APACHE2
index e69de29bb..e69de29bb 100644
--- a/java/MODULE_LICENSE_APACHE2
+++ b/MODULE_LICENSE_APACHE2
diff --git a/NOTICE b/NOTICE
new file mode 100644
index 000000000..aa325547e
--- /dev/null
+++ b/NOTICE
@@ -0,0 +1,192 @@
+
+ Copyright (c) 2008, The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+
+ 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.
+
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+
+Includes Dictionaries © Lexiteria LLC. Used by permission.
diff --git a/OWNERS b/OWNERS
new file mode 100644
index 000000000..3d485186b
--- /dev/null
+++ b/OWNERS
@@ -0,0 +1,6 @@
+# Recommended reviewers for general changes.
+# takaoka@google.com
+# yukawa@google.com
+#
+# Recommended reviewers for non-trivial build rule changes.
+# dwillemsen@google.com
diff --git a/common/Android.bp b/common/Android.bp
new file mode 100644
index 000000000..925eef7fd
--- /dev/null
+++ b/common/Android.bp
@@ -0,0 +1,21 @@
+// 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.
+
+java_library {
+ name: "latinime-common",
+ host_supported: true,
+ srcs: ["src/**/*.java"],
+ static_libs: ["jsr305"],
+ sdk_version: "21",
+}
diff --git a/common/Android.mk b/common/Android.mk
deleted file mode 100644
index 132a22358..000000000
--- a/common/Android.mk
+++ /dev/null
@@ -1,28 +0,0 @@
-# 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.
-
-LOCAL_PATH := $(call my-dir)
-include $(CLEAR_VARS)
-LOCAL_MODULE := latinime-common
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-LOCAL_STATIC_JAVA_LIBRARIES := jsr305
-LOCAL_SDK_VERSION := 21
-include $(BUILD_STATIC_JAVA_LIBRARY)
-
-# Also build a host side library
-include $(CLEAR_VARS)
-LOCAL_MODULE := latinime-common-host
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-LOCAL_STATIC_JAVA_LIBRARIES := jsr305lib
-include $(BUILD_HOST_JAVA_LIBRARY)
diff --git a/java-overridable/Android.bp b/java-overridable/Android.bp
new file mode 100644
index 000000000..88de2446d
--- /dev/null
+++ b/java-overridable/Android.bp
@@ -0,0 +1,18 @@
+// Copyright (C) 2018 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.
+
+filegroup {
+ name: "LatinIME_java-overridable",
+ srcs: ["src/**/*.java"],
+}
diff --git a/java/Android.bp b/java/Android.bp
new file mode 100644
index 000000000..8681c8414
--- /dev/null
+++ b/java/Android.bp
@@ -0,0 +1,46 @@
+// Copyright (C) 2011 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.
+
+android_app {
+ name: "LatinIME",
+
+ srcs: [
+ "src/**/*.java",
+ ":LatinIME_java-overridable",
+ ],
+
+ certificate: "shared",
+
+ jni_libs: ["libjni_latinime"],
+
+ static_libs: [
+ "android-common",
+ "inputmethod-common",
+ "jsr305",
+ "latinime-common",
+ "android-support-v4",
+ ],
+
+ // Do not compress dictionary files to mmap dict data runtime
+ aaptflags: ["-0 .dict"],
+
+ // Include all the resources regardless of system supported locales
+ aapt_include_all_resources: true,
+
+ sdk_version: "current",
+
+ optimize: {
+ proguard_flags_files: ["proguard.flags"],
+ },
+}
diff --git a/java/Android.mk b/java/Android.mk
deleted file mode 100644
index 154f3a20c..000000000
--- a/java/Android.mk
+++ /dev/null
@@ -1,46 +0,0 @@
-# Copyright (C) 2011 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.
-
-LOCAL_PATH := $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_MODULE_TAGS := optional
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src ../java-overridable/src)
-
-LOCAL_PACKAGE_NAME := LatinIME
-
-LOCAL_CERTIFICATE := shared
-
-LOCAL_JNI_SHARED_LIBRARIES := libjni_latinime
-
-LOCAL_STATIC_JAVA_LIBRARIES := \
- android-common inputmethod-common jsr305 latinime-common
-
-LOCAL_STATIC_ANDROID_LIBRARIES := \
- android-support-v4
-
-LOCAL_USE_AAPT2 := true
-
-# Do not compress dictionary files to mmap dict data runtime
-LOCAL_AAPT_FLAGS := -0 .dict
-
-# Include all the resources regardless of system supported locales
-LOCAL_AAPT_INCLUDE_ALL_RESOURCES := true
-
-LOCAL_SDK_VERSION := current
-
-LOCAL_PROGUARD_FLAG_FILES := proguard.flags
-
-include $(BUILD_PACKAGE)
diff --git a/java/res/values-as/strings-action-keys.xml b/java/res/values-as/strings-action-keys.xml
deleted file mode 100644
index af96ea8e6..000000000
--- a/java/res/values-as/strings-action-keys.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/*
-**
-** Copyright 2013, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="label_go_key" msgid="4033615332628671065">"যাওক"</string>
- <string name="label_next_key" msgid="5586407279258592635">"পৰৱৰ্তী"</string>
- <string name="label_previous_key" msgid="1421141755779895275">"আগৰ"</string>
- <string name="label_done_key" msgid="7564866296502630852">"হ\'ল"</string>
- <string name="label_send_key" msgid="482252074224462163">"পঠিয়াওক"</string>
- <string name="label_search_key" msgid="7965186050435796642">"সন্ধান"</string>
- <string name="label_pause_key" msgid="2225922926459730642">"পজ কৰক"</string>
- <string name="label_wait_key" msgid="5891247853595466039">"ৰ\'ব"</string>
-</resources>
diff --git a/java/res/values-as/strings-appname.xml b/java/res/values-as/strings-appname.xml
deleted file mode 100644
index 8874600db..000000000
--- a/java/res/values-as/strings-appname.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/*
-**
-** Copyright 2013, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="english_ime_name" msgid="5940510615957428904">"Android কীব\'ৰ্ড (AOSP)"</string>
- <string name="spell_checker_service_name" msgid="1254221805440242662">"Android বানান পৰীক্ষক (AOSP)"</string>
- <string name="english_ime_settings" msgid="5760361067176802794">"Android কীব\'ৰ্ডৰ ছেটিংসমূহ (AOSP)"</string>
- <string name="android_spell_checker_settings" msgid="6123949487832861885">"Android বানান পৰীক্ষকৰ ছেটিংসমূহ (AOSP)"</string>
-</resources>
diff --git a/java/res/values-as/strings-config-important-notice.xml b/java/res/values-as/strings-config-important-notice.xml
deleted file mode 100644
index 3af48f311..000000000
--- a/java/res/values-as/strings-config-important-notice.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?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="use_personalized_dicts_summary" msgid="590432261305469627">"পৰামৰ্শাৱলী উন্নত কৰিবলৈ যোগাযোগ পদ্ধতিসমূহৰ পৰা আৰু টাইপ কৰা ডেটাৰ পৰা শিকক"</string>
-</resources>
diff --git a/java/res/values-as/strings-emoji-descriptions.xml b/java/res/values-as/strings-emoji-descriptions.xml
deleted file mode 100644
index a844c46e3..000000000
--- a/java/res/values-as/strings-emoji-descriptions.xml
+++ /dev/null
@@ -1,1756 +0,0 @@
-<?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.
-*/
- -->
-
-<!--
- These Emoji symbols are unsupported by TTS.
- TODO: Remove this file when TTS/TalkBack support these Emoji symbols.
- -->
-
-<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>
- <!-- no translation found for spoken_emoji_2328 (8004906090359197446) -->
- <skip />
- <!-- no translation found for spoken_emoji_23CF (8619437871899719070) -->
- <skip />
- <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>
- <!-- no translation found for spoken_emoji_23ED (4064850193044573080) -->
- <skip />
- <!-- no translation found for spoken_emoji_23EE (9014449600450857793) -->
- <skip />
- <!-- no translation found for spoken_emoji_23EF (3823680845887006998) -->
- <skip />
- <string name="spoken_emoji_23F0" msgid="8474219588750627870">"এলাৰ্ম ঘড়ী"</string>
- <!-- no translation found for spoken_emoji_23F1 (2303619241672210658) -->
- <skip />
- <!-- no translation found for spoken_emoji_23F2 (2178084138229786936) -->
- <skip />
- <string name="spoken_emoji_23F3" msgid="166900119581024371">"সৰি পৰি থকা বালিৰে বালি-ঘড়ী"</string>
- <!-- no translation found for spoken_emoji_23F8 (1924914079210161141) -->
- <skip />
- <!-- no translation found for spoken_emoji_23F9 (1268967989320035023) -->
- <skip />
- <!-- no translation found for spoken_emoji_23FA (3359902126862990795) -->
- <skip />
- <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>
- <!-- no translation found for spoken_emoji_2602 (6293136501817877234) -->
- <skip />
- <!-- no translation found for spoken_emoji_2603 (7285313121103197207) -->
- <skip />
- <string name="spoken_emoji_2604" msgid="8632808648689048735">"ধূমকেতু"</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>
- <!-- no translation found for spoken_emoji_2618 (5581533965699965354) -->
- <skip />
- <string name="spoken_emoji_261D" msgid="4690554173549768467">"ওপৰলৈ নির্দেশ কৰি থকা তর্জনী আঙুলিৰ চিহ্ন"</string>
- <!-- no translation found for spoken_emoji_2620 (4434290857196023657) -->
- <skip />
- <!-- no translation found for spoken_emoji_2622 (2534880989000210921) -->
- <skip />
- <!-- no translation found for spoken_emoji_2623 (141484483765762677) -->
- <skip />
- <!-- no translation found for spoken_emoji_2626 (2857954123507187408) -->
- <skip />
- <!-- no translation found for spoken_emoji_262A (6726891928565290372) -->
- <skip />
- <!-- no translation found for spoken_emoji_262E (3189887039765290178) -->
- <skip />
- <!-- no translation found for spoken_emoji_262F (7138150472623738307) -->
- <skip />
- <!-- no translation found for spoken_emoji_2638 (9073003565602256277) -->
- <skip />
- <string name="spoken_emoji_2639" msgid="6128305824180156835">"খঙাল মুখমণ্ডল"</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>
- <!-- no translation found for spoken_emoji_2692 (633276166375803852) -->
- <skip />
- <string name="spoken_emoji_2693" msgid="7443148847598433088">"লংগৰ"</string>
- <!-- no translation found for spoken_emoji_2694 (4114117110598973648) -->
- <skip />
- <!-- no translation found for spoken_emoji_2696 (7920282042498350920) -->
- <skip />
- <!-- no translation found for spoken_emoji_2697 (7576307101162421601) -->
- <skip />
- <!-- no translation found for spoken_emoji_2699 (8525225054232323125) -->
- <skip />
- <!-- no translation found for spoken_emoji_269B (9146644473418235977) -->
- <skip />
- <string name="spoken_emoji_269C" msgid="1883421369883009835">"ফ্লাৰ-দ্য-লি"</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>
- <!-- no translation found for spoken_emoji_26B0 (5742048235215593821) -->
- <skip />
- <!-- no translation found for spoken_emoji_26B1 (2096529437455909562) -->
- <skip />
- <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>
- <!-- no translation found for spoken_emoji_26C8 (4641925705576445058) -->
- <skip />
- <string name="spoken_emoji_26CE" msgid="8963656417276062998">"অ\'ফিউচাছ"</string>
- <!-- no translation found for spoken_emoji_26CF (1048987245528185548) -->
- <skip />
- <!-- no translation found for spoken_emoji_26D1 (5122253261153603676) -->
- <skip />
- <!-- no translation found for spoken_emoji_26D3 (7567590167882104907) -->
- <skip />
- <string name="spoken_emoji_26D4" msgid="2231451988209604130">"প্ৰৱেশ নিষেধ"</string>
- <!-- no translation found for spoken_emoji_26E9 (5219739268764945756) -->
- <skip />
- <string name="spoken_emoji_26EA" msgid="7513319636103804907">"গীৰ্জা"</string>
- <!-- no translation found for spoken_emoji_26F0 (8690606275240650121) -->
- <skip />
- <!-- no translation found for spoken_emoji_26F1 (7617840615623596077) -->
- <skip />
- <string name="spoken_emoji_26F2" msgid="7134115206158891037">"পানীৰ ফোৱাৰা"</string>
- <string name="spoken_emoji_26F3" msgid="4912302210162075465">"গ\'ল্ফ খেলৰ গাঁতত পুতি ৰখা পতাকা"</string>
- <!-- no translation found for spoken_emoji_26F4 (8296597141413923967) -->
- <skip />
- <string name="spoken_emoji_26F5" msgid="4766328116769075217">"ডিঙা"</string>
- <!-- no translation found for spoken_emoji_26F7 (5002838791562917075) -->
- <skip />
- <!-- no translation found for spoken_emoji_26F8 (2326041972852924376) -->
- <skip />
- <!-- no translation found for spoken_emoji_26F9 (1588803158145064802) -->
- <skip />
- <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>
- <!-- no translation found for spoken_emoji_270D (8850355355131892496) -->
- <skip />
- <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>
- <!-- no translation found for spoken_emoji_271D (2367275551961395862) -->
- <skip />
- <!-- no translation found for spoken_emoji_2721 (4150694777322944905) -->
- <skip />
- <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>
- <!-- no translation found for spoken_emoji_2763 (3255858123691890971) -->
- <skip />
- <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">"\'কুল\' লিখা থকা বর্গ"</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">"\'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>
- <!-- no translation found for spoken_emoji_1F321 (581288529301493075) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F324 (2930891297836314896) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F325 (5282092301688177705) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F326 (165046788529872891) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F327 (4384791469343260600) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F328 (1991614733939171872) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F329 (6016235695016510649) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F32A (5889026615334911758) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F32B (3223192457131343118) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F32C (3479270390051226956) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F32D (8869598854109228966) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F32E (6077879860650582531) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F32F (6730078269862769637) -->
- <skip />
- <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>
- <!-- no translation found for spoken_emoji_1F336 (5912660172314184275) -->
- <skip />
- <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>
- <!-- no translation found for spoken_emoji_1F37D (8887228479219886429) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F37E (37593222775513943) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F37F (4196704853559909123) -->
- <skip />
- <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>
- <!-- no translation found for spoken_emoji_1F396 (8356140738000265647) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F397 (5249863289838097468) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F399 (6087019010423147017) -->
- <skip />
- <string name="spoken_emoji_1F39A" msgid="1627914548345466924">"লেভেল শ্লাইডাৰ"</string>
- <!-- no translation found for spoken_emoji_1F39B (648039433701743585) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F39E (2918731924907952534) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F39F (2427606024950432412) -->
- <skip />
- <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>
- <!-- no translation found for spoken_emoji_1F3C5 (3256434181486954695) -->
- <skip />
- <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>
- <!-- no translation found for spoken_emoji_1F3CB (6201404884476413631) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3CC (5773930948380166403) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3CD (3174865701360723287) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3CE (298990178863007728) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3CF (220014996836173720) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3D0 (1515966148588308407) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3D1 (9065400886436849028) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3D2 (9113415091165206322) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3D3 (5392602379011857837) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3D4 (5682806162641888464) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3D5 (485622019934191893) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3D6 (8056487018845189239) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3D7 (9200931466909972688) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3D8 (4060224387880105443) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3D9 (5239036983837296458) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3DA (4479002058414881869) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3DB (5481092245291634716) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3DC (7540751465637885253) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3DD (2957722522033693226) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3DE (8767730963119889199) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3DF (360348087882746758) -->
- <skip />
- <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>
- <!-- no translation found for spoken_emoji_1F3F3 (6471977885401554862) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3F4 (6634164537580574234) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3F5 (5247950040998935573) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3F7 (5140855387008703511) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3F8 (7061216387824058281) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3F9 (1287386031701875351) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3FA (972388608151034163) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3FB (2482905976407635663) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3FC (2438230702000819552) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3FD (8205610118230779658) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3FE (2707903021796601195) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F3FF (12056714027518795) -->
- <skip />
- <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_1F405 (4304847753343143926) -->
- <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>
- <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>
- <!-- no translation found for spoken_emoji_1F43F (84025195766364970) -->
- <skip />
- <string name="spoken_emoji_1F440" msgid="7144338258163384433">"চকু"</string>
- <!-- no translation found for spoken_emoji_1F441 (5716781405495001412) -->
- <skip />
- <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>
- <!-- no translation found for spoken_emoji_1F4F8 (6874216216317936645) -->
- <skip />
- <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>
- <!-- no translation found for spoken_emoji_1F4FD (992184090920043081) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F4FF (6566102135671766103) -->
- <skip />
- <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">"বাওঁফালে নির্দেশ কৰা কাঁড়ৰ চিহ্নৰ তলত \'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">"লেটিন বৰফলা আখৰৰ বাবে ইনপুট চিহ্ন"</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>
- <!-- no translation found for spoken_emoji_1F549 (4488493812823912137) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F54A (6329445861053369293) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F54B (1632185618342057203) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F54C (2444758230008443504) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F54D (8871149889908118955) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F54E (2602602033588655819) -->
- <skip />
- <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>
- <!-- no translation found for spoken_emoji_1F56F (2425394083258103670) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F570 (2611444774363424788) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F573 (1039753319384915644) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F574 (1370973157808858727) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F575 (3393287560881832534) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F576 (6510040886626337527) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F577 (1745605672232546738) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F578 (5843261607004481128) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F579 (356353388497335187) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F587 (1529578701645787678) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F58A (5535685878758638056) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F58B (8383182102775796958) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F58C (3645908884921776727) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F58D (8498569396909368249) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F590 (1764003432828568259) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F595 (2331418391124951688) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F596 (1326418921526428839) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F5A5 (5652785146334053695) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F5A8 (1431495880490623659) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F5B1 (5175363198176970281) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F5B2 (638466571223781802) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F5BC (2406817930103032256) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F5C2 (5722791826015378721) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F5C3 (2361411623100608566) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F5C4 (5699005642361736394) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F5D1 (8837990226577655561) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F5D2 (875563245704330618) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F5D3 (5759637997516385074) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F5DC (2134509111665528807) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F5DD (2537536524658220506) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F5DE (369717954301912562) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F5E1 (4756313645316161687) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F5E3 (725415936980269374) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F5EF (6775383222346053007) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F5F3 (5365297662012404100) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F5FA (4806783543043181633) -->
- <skip />
- <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>
- <!-- no translation found for spoken_emoji_1F641 (2580807588556383139) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F642 (1150197386159721331) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F643 (7631520433919530552) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F644 (446284817942609022) -->
- <skip />
- <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>
- <!-- no translation found for spoken_emoji_1F6CB (3573872215992460856) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6CC (5533098630848925915) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6CD (4591419999684883647) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6CE (3747424887764059629) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6CF (4913111315645834484) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6D0 (7538197710400229967) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6E0 (3263282970310123206) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6E1 (6426910766335807918) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6E2 (5167605828052365314) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6E3 (1107731664336606313) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6E4 (5902467073917590761) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6E5 (5188878074701467086) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6E9 (5852950271931619238) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6EB (2733806707250741222) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6EC (4869529552294301253) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6F0 (3448012994947964984) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F6F3 (1127894976097893258) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F910 (4360725090163247960) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F911 (8595715714642200771) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F912 (6361337370946123054) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F913 (3175822147540114526) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F914 (3784454242803834936) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F915 (8277232429785015709) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F916 (4717142652070467513) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F917 (5434814678071084726) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F918 (6065030046434546286) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F980 (7396183110343909685) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F981 (1201691097417167784) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F982 (7295087763708065402) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F983 (9086413570044829984) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F984 (5757150507762082864) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F9C0 (3346738126264740148) -->
- <skip />
- <!-- no translation found for spoken_emoji_0023_20E3 (3693649188523505503) -->
- <skip />
- <!-- no translation found for spoken_emoji_002A_20E3 (6500437684406442358) -->
- <skip />
- <!-- no translation found for spoken_emoji_0030_20E3 (6312420508970951699) -->
- <skip />
- <!-- no translation found for spoken_emoji_0031_20E3 (5101790681679370329) -->
- <skip />
- <!-- no translation found for spoken_emoji_0032_20E3 (6852105251673250734) -->
- <skip />
- <!-- no translation found for spoken_emoji_0033_20E3 (6436737625517381721) -->
- <skip />
- <!-- no translation found for spoken_emoji_0034_20E3 (7652958059237626893) -->
- <skip />
- <!-- no translation found for spoken_emoji_0035_20E3 (1222504383755215423) -->
- <skip />
- <!-- no translation found for spoken_emoji_0036_20E3 (7251599202525740371) -->
- <skip />
- <!-- no translation found for spoken_emoji_0037_20E3 (7717155024038170161) -->
- <skip />
- <!-- no translation found for spoken_emoji_0038_20E3 (744556233370117245) -->
- <skip />
- <!-- no translation found for spoken_emoji_0039_20E3 (1891172571916106023) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1E6_1F1E8 (515584542061392145) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1E6_1F1E9 (9021988927513031086) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1E6_1F1EA (4856101611523027311) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1E6_1F1EB (3716145572492094038) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1E6_1F1EC (7286661601747455727) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1E6_1F1EE (94989132936786231) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1E6_1F1F1 (182374112533705554) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1E6_1F1F2 (8083744008211394946) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1E6_1F1F4 (1162797094210816783) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1E6_1F1F6 (8423968169207301745) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1E6_1F1F7 (6876638422035482357) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1E6_1F1F8 (8277196879892990334) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1E6_1F1F9 (2248522124836544558) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1E6_1F1FA (4458840480641529325) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1E6_1F1FC (1163927173985102777) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1E6_1F1FD (3030463315371570615) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1E6_1F1FF (612355136879823825) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1E7_1F1E6 (8760838318301758538) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1E7_1F1E7 (3157629488105877061) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1E7_1F1E9 (3576256753416957572) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1E7_1F1EA (664083045789831960) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1E7_1F1EB (1288425089161930952) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1E7_1F1EC (7159669370784906474) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1E7_1F1ED (6171060568325681800) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1E7_1F1EE (8825724034337572789) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1E7_1F1EF (481381108368354037) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1E7_1F1F1 (323880581960666092) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1E7_1F1F2 (6865529687293471865) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1E7_1F1F3 (6196184089269330603) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1E7_1F1F4 (7901700697723663375) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1E7_1F1F6 (3206988419974375148) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1E7_1F1F7 (3483402348221577606) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1E7_1F1F8 (3399891901314769071) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1E7_1F1F9 (8985883748925470425) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1E7_1F1FB (3357087874695825993) -->
- <skip />
- <string name="spoken_emoji_1F1E7_1F1FC" msgid="2010150990697392924">"ব\'টছোৱানাৰ পতাকা"</string>
- <!-- no translation found for spoken_emoji_1F1E7_1F1FE (7660069185149104762) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1E7_1F1FF (4808586235664381640) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1E8_1F1E6 (1994799795544707087) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1E8_1F1E8 (4545193589020675153) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1E8_1F1E9 (971846413301682398) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1E8_1F1EB (7040500840320409927) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1E8_1F1EC (7814411108372534362) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1E8_1F1ED (7525661715353339833) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1E8_1F1EE (918386022730555752) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1E8_1F1F0 (1272608483604229355) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1E8_1F1F1 (4368512465692540121) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1E8_1F1F2 (1029570029642994892) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1E8_1F1F3 (1409448857910840128) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1E8_1F1F4 (6875493644298026833) -->
- <skip />
- <string name="spoken_emoji_1F1E8_1F1F5" msgid="2538762550371590224">"ক্লীপার্টন দ্বীপৰ পতাকা"</string>
- <!-- no translation found for spoken_emoji_1F1E8_1F1F7 (888554264338218550) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1E8_1F1FA (4443590407200355667) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1E8_1F1FB (5581596688027484825) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1E8_1F1FC (7291024802305602214) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1E8_1F1FD (2788698554656649228) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1E8_1F1FE (5037633794290940318) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1E8_1F1FF (5384200881950442912) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1E9_1F1EA (4047812762841623779) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1E9_1F1EC (3569858113686878222) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1E9_1F1EF (5200510107957246395) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1E9_1F1F0 (8230065040498090250) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1E9_1F1F2 (6971088854496559333) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1E9_1F1F4 (2684281180913271831) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1E9_1F1FF (5134944828411359548) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1EA_1F1E6 (5992703503107448385) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1EA_1F1E8 (7604769613933532639) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1EA_1F1EA (780881058311953116) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1EA_1F1EC (5379955220214737541) -->
- <skip />
- <string name="spoken_emoji_1F1EA_1F1ED" msgid="608191363783136124">"দক্ষিণ ছাহাৰাৰ পতাকা"</string>
- <!-- no translation found for spoken_emoji_1F1EA_1F1F7 (1974034165386559979) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1EA_1F1F8 (7667964716717428380) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1EA_1F1F9 (4028236645746627833) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1EA_1F1FA (2605433302354957477) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1EB_1F1EE (825447084506872225) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1EB_1F1EF (1029994540873767904) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1EB_1F1F0 (2992979756365410511) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1EB_1F1F2 (1986035899283103062) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1EB_1F1F4 (2441016703335601117) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1EB_1F1F7 (6052493581307010327) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1EC_1F1E6 (8950853954004506523) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1EC_1F1E7 (8888357158195515349) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1EC_1F1E9 (3463286702486956748) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1EC_1F1EA (1180536780790586881) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1EC_1F1EB (1203001730316543314) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1EC_1F1EC (1840977808701617077) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1EC_1F1ED (8783297421754572238) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1EC_1F1EE (2567172982673015319) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1EC_1F1F1 (8178317151097107486) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1EC_1F1F2 (8595547572836079090) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1EC_1F1F3 (3646326386653741855) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1EC_1F1F5 (6864411408511905871) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1EC_1F1F6 (2059115105795502868) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1EC_1F1F7 (6459258808903505755) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1EC_1F1F8 (5458754397575470944) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1EC_1F1F9 (1467915615110741560) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1EC_1F1FA (4393335139566648919) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1EC_1F1FC (3425188247186220041) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1EC_1F1FE (1021690400460955309) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1ED_1F1F0 (3761740442568650190) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1ED_1F1F2 (6910358977247451757) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1ED_1F1F3 (1646439132096214446) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1ED_1F1F7 (1052046916656026391) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1ED_1F1F9 (8078385390509081446) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1ED_1F1FA (8804528562628572718) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1EE_1F1E8 (3140919483825058219) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1EE_1F1E9 (5502581798727777828) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1EE_1F1EA (644825647040215471) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1EE_1F1F1 (5743874630545163729) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1EE_1F1F2 (3120136719636059223) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1EE_1F1F3 (7645444982385343194) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1EE_1F1F4 (9194565409945825135) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1EE_1F1F6 (8988731584319817673) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1EE_1F1F7 (2725630029704415631) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1EE_1F1F8 (1010746786020461229) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1EE_1F1F9 (9197939415727389837) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1EF_1F1EA (2768571528360031663) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1EF_1F1F2 (5221399784104523954) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1EF_1F1F4 (5417778604376647557) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1EF_1F1F5 (6507273654908139469) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F0_1F1EA (21237090866742866) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F0_1F1EC (8276011655824240009) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F0_1F1ED (6083653169314926215) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F0_1F1EE (9065926492362391494) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F0_1F1F2 (3247483394872878766) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F0_1F1F3 (5367548209741205839) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F0_1F1F5 (8936494847635883781) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F0_1F1F7 (6083499745947821288) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F0_1F1FC (1379041347924516759) -->
- <skip />
- <string name="spoken_emoji_1F1F0_1F1FE" msgid="4109777537443572630">"কে\'মেন দ্বীপপুঞ্জৰ পতাকা"</string>
- <!-- no translation found for spoken_emoji_1F1F0_1F1FF (552222434607517957) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F1_1F1E6 (5166202354177379139) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F1_1F1E7 (5664910004482751646) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F1_1F1E8 (4030901907323824445) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F1_1F1EE (1173785145388735876) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F1_1F1F0 (3577045271636841729) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F1_1F1F7 (7993304871488957893) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F1_1F1F8 (5224840012819747543) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F1_1F1F9 (3594812865734584207) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F1_1F1FA (224221840159454205) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F1_1F1FB (7718987237653945359) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F1_1F1FE (5998022588266933168) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F2_1F1E6 (8965537225940059216) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F2_1F1E8 (5827062380829465964) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F2_1F1E9 (1226461313141287009) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F2_1F1EA (559788800834584573) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F2_1F1EB (5222394276026013118) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F2_1F1EC (7183384701516848699) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F2_1F1ED (6898522028833048325) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F2_1F1F0 (7068152815895976960) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F2_1F1F1 (7611046424376988616) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F2_1F1F2 (491461913101284240) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F2_1F1F3 (1450454181585256539) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F2_1F1F4 (3352572139711280528) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F2_1F1F5 (7536142087380383112) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F2_1F1F6 (5424070233210033210) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F2_1F1F7 (108173332528207905) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F2_1F1F8 (4922582142276070473) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F2_1F1F9 (3215356274998633531) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F2_1F1FA (7064984448662302120) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F2_1F1FB (7349657291755821742) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F2_1F1FC (2970112458704297219) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F2_1F1FD (6249447018233900361) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F2_1F1FE (2415463066267602417) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F2_1F1FF (5374300224943425292) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F3_1F1E6 (7995033472926590061) -->
- <skip />
- <string name="spoken_emoji_1F1F3_1F1E8" msgid="6673558559311734824">"নিউ কেলেড\'নিয়াৰ পতাকা"</string>
- <!-- no translation found for spoken_emoji_1F1F3_1F1EA (5248874974108203948) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F3_1F1EB (8586671186548769011) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F3_1F1EC (3610271061141196804) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F3_1F1EE (3793576318302879471) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F3_1F1F1 (7394150679646822106) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F3_1F1F4 (4823752697520630443) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F3_1F1F5 (8143013034442974213) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F3_1F1F7 (2718588476956930593) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F3_1F1FA (2136206841853719289) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F3_1F1FF (7114679379862776721) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F4_1F1F2 (1366056698822189642) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F5_1F1E6 (2318048598212415394) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F5_1F1EA (3843366473938653876) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F5_1F1EB (5842604724881232116) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F5_1F1EC (1527509030357350666) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F5_1F1ED (4519745708610996392) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F5_1F1F0 (6461277576429215252) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F5_1F1F1 (8076361813157658785) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F5_1F1F2 (2895871984922747795) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F5_1F1F3 (3351998070564812928) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F5_1F1F7 (2273664192514768865) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F5_1F1F8 (4184730889323208578) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F5_1F1F9 (6088372177025496872) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F5_1F1FC (6503480614531765009) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F5_1F1FE (8948077259790298897) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F6_1F1E6 (5941022501487103264) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F7_1F1EA (6520393107511408733) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F7_1F1F4 (24771949751001440) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F7_1F1F8 (3958542649861771783) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F7_1F1FA (1079726084663529719) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F7_1F1FC (3705031663938652819) -->
- <skip />
- <string name="spoken_emoji_1F1F8_1F1E6" msgid="2776179858340260230">"ছৌদী আৰবৰ পতাকা"</string>
- <!-- no translation found for spoken_emoji_1F1F8_1F1E7 (3665472085378450456) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F8_1F1E8 (4466400506433158307) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F8_1F1E9 (5614788248607521243) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F8_1F1EA (2665982185283861392) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F8_1F1EC (1054034328208566506) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F8_1F1ED (4263061939910522547) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F8_1F1EE (6565744105871887098) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F8_1F1EF (3016523221609614043) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F8_1F1F0 (5390016769601791982) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F8_1F1F1 (6403850165793367854) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F8_1F1F2 (4310711409277111575) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F8_1F1F3 (6489885135970927076) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F8_1F1F4 (5341079828952201668) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F8_1F1F7 (8817875467979840211) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F8_1F1F8 (2660263148212045846) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F8_1F1F9 (8238122890022856070) -->
- <skip />
- <string name="spoken_emoji_1F1F8_1F1FB" msgid="4615906903576645230">"এল ছালভাড\'ৰৰ পতাকা"</string>
- <!-- no translation found for spoken_emoji_1F1F8_1F1FD (4404781163148659815) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F8_1F1FE (7179176431724187154) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F8_1F1FF (8456502038439909076) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F9_1F1E6 (7462600413724750923) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F9_1F1E8 (8714687302692115701) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F9_1F1E9 (4271932459960645451) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F9_1F1EB (8824845043239747091) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F9_1F1EC (6378688671192754868) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F9_1F1ED (3342706257317087047) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F9_1F1EF (1902800890327368738) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F9_1F1F0 (5328199482828913429) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F9_1F1F1 (8753850591122992884) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F9_1F1F2 (5491037548857189992) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F9_1F1F3 (7278463413655866267) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F9_1F1F4 (7624316225889181844) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F9_1F1F7 (5932331866489640094) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F9_1F1F9 (4042249888728442471) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F9_1F1FB (4705386325884538832) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F9_1F1FC (9106106156487112003) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1F9_1F1FF (6594567669471176195) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1FA_1F1E6 (7516283481055191487) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1FA_1F1EC (7713151466830788434) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1FA_1F1F2 (169503347987231777) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1FA_1F1F8 (3794069376561841694) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1FA_1F1FE (7768717385050492537) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1FA_1F1FF (1957036711159158590) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1FB_1F1E6 (6686626035855100794) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1FB_1F1E8 (958901562721846738) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1FB_1F1EA (8171514854370897858) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1FB_1F1EC (7825072244650491600) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1FB_1F1EE (8177320330941963456) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1FB_1F1F3 (6211275163002022414) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1FB_1F1FA (7638199094441690866) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1FC_1F1EB (2750545602487865333) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1FC_1F1F8 (1717055707936794276) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1FD_1F1F0 (8924460310127605012) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1FE_1F1EA (5020385658435288646) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1FE_1F1F9 (5627032701159894458) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1FF_1F1E6 (3518155724469542909) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1FF_1F1F2 (1316086892525163001) -->
- <skip />
- <!-- no translation found for spoken_emoji_1F1FF_1F1FC (7229025296887296741) -->
- <skip />
-</resources>
diff --git a/java/res/values-as/strings-letter-descriptions.xml b/java/res/values-as/strings-letter-descriptions.xml
deleted file mode 100644
index 7cedd40eb..000000000
--- a/java/res/values-as/strings-letter-descriptions.xml
+++ /dev/null
@@ -1,208 +0,0 @@
-<?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.
-*/
- -->
-
-<!--
- These accented letters (spoken_accented_letter_*) are unsupported by TTS.
- These symbols (spoken_symbol_*) are also unsupported by TTS.
- TODO: Remove these string resources when TTS/TalkBack support these letters.
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="spoken_accented_letter_00AA" msgid="4374325261868451570">"অন্য বর্ণৰ সোঁফালে ওপৰত লিখা \'a\' সূচক"</string>
- <string name="spoken_accented_letter_00B5" msgid="9031387673828823891">"মিউ বর্ণৰ চিহ্ন"</string>
- <string name="spoken_accented_letter_00BA" msgid="5045198452071207437">"অন্য বর্ণৰ সোঁফালে ওপৰত লিখা \'o\' সূচক"</string>
- <string name="spoken_accented_letter_00DF" msgid="2260098367028134281">"বিটা বর্ণৰ প্ৰতীক"</string>
- <string name="spoken_accented_letter_00E0" msgid="2234515772182387086">"Aৰ ওপৰত গ্ৰেভ একচেণ্ট"</string>
- <string name="spoken_accented_letter_00E1" msgid="7780174500802535063">"Aৰ ওপৰত একিউট একচেণ্ট"</string>
- <string name="spoken_accented_letter_00E2" msgid="7054108480488102631">"Aৰ ওপৰত চাৰকামফ্লেক্স একচেণ্ট"</string>
- <string name="spoken_accented_letter_00E3" msgid="8252569677935693343">"Aৰ ওপৰত টিলডা একচেণ্ট"</string>
- <string name="spoken_accented_letter_00E4" msgid="6610118430986969466">"Aৰ ওপৰত ডায়েৰেচিছ একচেণ্ট"</string>
- <string name="spoken_accented_letter_00E5" msgid="7630449270070348394">"ওপৰত সৰু বৃত্ত থকা \'a\' আখৰ"</string>
- <string name="spoken_accented_letter_00E6" msgid="701838036007000032">"\'A, E\' আখৰৰ যুক্তাক্ষৰ"</string>
- <string name="spoken_accented_letter_00E7" msgid="2991289211702135310">"Cৰ তলত চেডিলা একচেণ্ট"</string>
- <string name="spoken_accented_letter_00E8" msgid="2080035251848179782">"Eৰ ওপৰত গ্ৰেভ একচেণ্ট"</string>
- <string name="spoken_accented_letter_00E9" msgid="2708473976407506968">"Eৰ ওপৰত একিউট একচেণ্ট"</string>
- <string name="spoken_accented_letter_00EA" msgid="1898848081635119449">"Eৰ ওপৰত চাৰকামফ্লেক্স একচেণ্ট"</string>
- <string name="spoken_accented_letter_00EB" msgid="8318942663983499634">"Eৰ ওপৰত ডায়েৰেচিছ একচেণ্ট"</string>
- <string name="spoken_accented_letter_00EC" msgid="7643810590358306098">"Iৰ ওপৰত গ্ৰেভ একচেণ্ট"</string>
- <string name="spoken_accented_letter_00ED" msgid="8288035355103120759">"Iৰ ওপৰত একিউট একচেণ্ট"</string>
- <string name="spoken_accented_letter_00EE" msgid="1137417730211688894">"Iৰ ওপৰত চাৰকামফ্লেক্স একচেণ্ট"</string>
- <string name="spoken_accented_letter_00EF" msgid="8993714322731956785">"Iৰ ওপৰত ডায়েৰেচিছ একচেণ্ট"</string>
- <string name="spoken_accented_letter_00F0" msgid="3427567511221967857">"লেটিন বর্ণমালাৰ আখৰ \'Eth\' ৰ প্ৰতীক"</string>
- <string name="spoken_accented_letter_00F1" msgid="6983294908255378605">"Nৰ ওপৰত টিলডা একচেণ্ট"</string>
- <string name="spoken_accented_letter_00F2" msgid="2623804069332183695">"Oৰ ওপৰত গ্ৰেভ একচেণ্ট"</string>
- <string name="spoken_accented_letter_00F3" msgid="8945987631729216917">"Oৰ ওপৰত একিউট একচেণ্ট"</string>
- <string name="spoken_accented_letter_00F4" msgid="2415494299699717276">"Oৰ ওপৰত চাৰকামফ্লেক্স একচেণ্ট"</string>
- <string name="spoken_accented_letter_00F5" msgid="7320512716652765243">"Oৰ ওপৰত টিলডা একচেণ্ট"</string>
- <string name="spoken_accented_letter_00F6" msgid="9101179351242478555">"Oৰ ওপৰত ডায়েৰেচিছ একচেণ্ট"</string>
- <string name="spoken_accented_letter_00F8" msgid="1488324280918884122">"Oত ষ্ট্ৰ\'ক একচেণ্ট"</string>
- <string name="spoken_accented_letter_00F9" msgid="2823570256527173278">"Uৰ ওপৰত গ্ৰেভ একচেণ্ট"</string>
- <string name="spoken_accented_letter_00FA" msgid="6883092085077298608">"Uৰ ওপৰত একিউট একচেণ্ট"</string>
- <string name="spoken_accented_letter_00FB" msgid="4948239400399514418">"Uৰ ওপৰত চাৰকামফ্লেক্স একচেণ্ট"</string>
- <string name="spoken_accented_letter_00FC" msgid="2496066211694000442">"Uৰ ওপৰত ডায়েৰেচিছ একচেণ্ট"</string>
- <string name="spoken_accented_letter_00FD" msgid="2400529610834233890">"Yৰ ওপৰত একিউট একচেণ্ট"</string>
- <string name="spoken_accented_letter_00FE" msgid="8788160115017853040">"লেটিন বর্ণমালাৰ সৰুফলাৰ থৰ্ণ বৰ্ণ"</string>
- <string name="spoken_accented_letter_00FF" msgid="5225610161025124830">"Yৰ ওপৰত ডায়েৰেচিছ একচেণ্ট"</string>
- <string name="spoken_accented_letter_0101" msgid="5573209280917268157">"Aৰ ওপৰত মেক্ৰন একচেণ্ট"</string>
- <string name="spoken_accented_letter_0103" msgid="2469151120095164730">"Aৰ ওপৰত ব্ৰীভ একচেণ্ট"</string>
- <string name="spoken_accented_letter_0105" msgid="8312689789855786427">"Aৰ তলত অগ\'নেক একচেণ্ট"</string>
- <string name="spoken_accented_letter_0107" msgid="5708507895287798642">"Cৰ ওপৰত একিউট একচেণ্ট"</string>
- <string name="spoken_accented_letter_0109" msgid="7008112603489583335">"Cৰ ওপৰত চাৰকামফ্লেক্স একচেণ্ট"</string>
- <string name="spoken_accented_letter_010B" msgid="5641359473019753216">"Cৰ ওপৰত এটা বিন্দু"</string>
- <string name="spoken_accented_letter_010D" msgid="1048661826408437168">"Cৰ ওপৰত কেৰণ একচেণ্ট"</string>
- <string name="spoken_accented_letter_010F" msgid="603374318657992205">"Dৰ ওপৰত কেৰণ একচেণ্ট"</string>
- <string name="spoken_accented_letter_0111" msgid="5517997642285938260">"Dৰ ওপৰত ষ্ট্ৰ\'ক একচেণ্ট"</string>
- <string name="spoken_accented_letter_0113" msgid="2326009009311798997">"Eৰ ওপৰত মেক্ৰন একচেণ্ট"</string>
- <string name="spoken_accented_letter_0115" msgid="3964545407091037747">"Eৰ ওপৰত ব্ৰীভ একচেণ্ট"</string>
- <string name="spoken_accented_letter_0117" msgid="8799753183781089777">"Eৰ ওপৰত এটা বিন্দু"</string>
- <string name="spoken_accented_letter_0119" msgid="3772451226935709136">"Eৰ তলত অগ\'নেক একচেণ্ট"</string>
- <string name="spoken_accented_letter_011B" msgid="7663481332351461288">"Eৰ ওপৰত কেৰণ একচেণ্ট"</string>
- <string name="spoken_accented_letter_011D" msgid="1181326600595482369">"Gৰ ওপৰত চাৰকামফ্লেক্স একচেণ্ট"</string>
- <string name="spoken_accented_letter_011F" msgid="6843415389823096647">"Gৰ ওপৰত ব্ৰীভ একচেণ্ট"</string>
- <string name="spoken_accented_letter_0121" msgid="6205288708713306903">"Gৰ ওপৰত এটা বিন্দু"</string>
- <string name="spoken_accented_letter_0123" msgid="2394277128105386261">"Gৰ ওপৰত চেডিলা একচেণ্ট"</string>
- <string name="spoken_accented_letter_0125" msgid="6575866461277751345">"Hৰ ওপৰত চাৰকামফ্লেক্স একচেণ্ট"</string>
- <string name="spoken_accented_letter_0127" msgid="1316971762214091641">"Hৰ ওপৰত ষ্ট্ৰ\'ক একচেণ্ট"</string>
- <string name="spoken_accented_letter_0129" msgid="7824912405885325754">"Iৰ ওপৰত টিলডা একচেণ্ট"</string>
- <string name="spoken_accented_letter_012B" msgid="6772690258769905270">"Iৰ ওপৰত মেক্ৰন একচেণ্ট"</string>
- <string name="spoken_accented_letter_012D" msgid="2933871131556503448">"Iৰ ওপৰত ব্ৰীভ একচেণ্ট"</string>
- <string name="spoken_accented_letter_012F" msgid="1340511254985181663">"Iৰ তলত অগ\'নেক একচেণ্ট"</string>
- <string name="spoken_accented_letter_0131" msgid="5635600720566083969">"ওপৰত বিন্দু নথকা \'I\'"</string>
- <string name="spoken_accented_letter_0133" msgid="7593704176516791941">"I, J আখৰৰ যুক্তাক্ষৰ"</string>
- <string name="spoken_accented_letter_0135" msgid="4521109674238248436">"Jৰ ওপৰত চাৰকামফ্লেক্স একচেণ্ট"</string>
- <string name="spoken_accented_letter_0137" msgid="5886444641003852175">"Kৰ তলত চেডিলা একচেণ্ট"</string>
- <string name="spoken_accented_letter_0138" msgid="4200294389170924853">"লেটিন ভাষাৰ \'Kra\' বর্ণৰ প্ৰতীক"</string>
- <string name="spoken_accented_letter_013A" msgid="3558015385412543517">"Lৰ ওপৰত একিউট একচেণ্ট"</string>
- <string name="spoken_accented_letter_013C" msgid="1853639924813858734">"lৰ তলত চেডিলা একচেণ্ট"</string>
- <string name="spoken_accented_letter_013E" msgid="7489345561739421886">"Lৰ ওপৰত কেৰণ একচেণ্ট"</string>
- <string name="spoken_accented_letter_0140" msgid="7946718707268270589">"সোঁফালে মধ্য অংশত বিন্দু থকা \'L\'"</string>
- <string name="spoken_accented_letter_0142" msgid="752931798111122240">"Lত ষ্ট্ৰ\'ক একচেণ্ট"</string>
- <string name="spoken_accented_letter_0144" msgid="201843550323875352">"Nৰ ওপৰত একিউট একচেণ্ট"</string>
- <string name="spoken_accented_letter_0146" msgid="3403847152606051818">"Nৰ ওপৰত চেডিলা একচেণ্ট"</string>
- <string name="spoken_accented_letter_0148" msgid="9215300786722209338">"Nৰ ওপৰত কেৰণ একচেণ্ট"</string>
- <string name="spoken_accented_letter_0149" msgid="3191850286630154063">"ঊর্ধ্বকমাৰ পাছত থকা \'N\'"</string>
- <string name="spoken_accented_letter_014B" msgid="8503022408522837410">"লেটিন বর্ণমালাৰ সৰুফলা \'Eng\' বুজোৱা প্ৰতীক"</string>
- <string name="spoken_accented_letter_014D" msgid="4452323602550610641">"Oৰ ওপৰত মেক্ৰন একচেণ্ট"</string>
- <string name="spoken_accented_letter_014F" msgid="2795957717094385336">"Oৰ ওপৰত ব্ৰীভ একচেণ্ট"</string>
- <string name="spoken_accented_letter_0151" msgid="8013704745216410244">"Oৰ ওপৰত দুডাল একিউটৰ একচেণ্ট"</string>
- <string name="spoken_accented_letter_0153" msgid="8410582495993285221">"\'oe\' আখৰৰ যুক্তাক্ষৰ"</string>
- <string name="spoken_accented_letter_0155" msgid="7601517174689798560">"Rৰ ওপৰত একিউট একচেণ্ট"</string>
- <string name="spoken_accented_letter_0157" msgid="9071455715455643810">"Rৰ তলত চেডিলা একচেণ্ট"</string>
- <string name="spoken_accented_letter_0159" msgid="7726911392381543439">"Rৰ ওপৰত কেৰণ একচেণ্ট"</string>
- <string name="spoken_accented_letter_015B" msgid="1854129531164494117">"Sৰ ওপৰত একিউট একচেণ্ট"</string>
- <string name="spoken_accented_letter_015D" msgid="4743571603550582530">"Sৰ ওপৰত চাৰকামফ্লেক্স একচেণ্ট"</string>
- <string name="spoken_accented_letter_015F" msgid="1519945638631588761">"Sৰ তলত চেডিলা একচেণ্ট"</string>
- <string name="spoken_accented_letter_0161" msgid="7493478552029144246">"Sৰ ওপৰত কেৰণ একচেণ্ট"</string>
- <string name="spoken_accented_letter_0163" msgid="9103547637928833069">"Tৰ তলত চেডিলা একচেণ্ট"</string>
- <string name="spoken_accented_letter_0165" msgid="7306159398214872062">"Tৰ ওপৰত কেৰণ একচেণ্ট"</string>
- <string name="spoken_accented_letter_0167" msgid="5578767705098672443">"Tত ষ্ট্ৰ\'ক একচেণ্ট"</string>
- <string name="spoken_accented_letter_0169" msgid="413046581387735371">"Uৰ ওপৰত টিলডা একচেণ্ট"</string>
- <string name="spoken_accented_letter_016B" msgid="3209778874978859441">"Uৰ ওপৰত মেক্ৰনএকচেণ্ট"</string>
- <string name="spoken_accented_letter_016D" msgid="2983326533258602840">"Uৰ ওপৰত ব্ৰীভ একচেণ্ট"</string>
- <string name="spoken_accented_letter_016F" msgid="4416532499516387231">"ওপৰত সৰু বৃত্ত থকা \'U\' আখৰ"</string>
- <string name="spoken_accented_letter_0171" msgid="3435171971353200807">"Uৰ ওপৰত দুডাল একিউটৰ একচেণ্ট"</string>
- <string name="spoken_accented_letter_0173" msgid="4494154432483553480">"Uৰ তলত অগ\'নেক একচেণ্ট"</string>
- <string name="spoken_accented_letter_0175" msgid="2154545579611918513">"Wৰ ওপৰত চাৰকামফ্লেক্স একচেণ্ট"</string>
- <string name="spoken_accented_letter_0177" msgid="4034463827306904781">"yৰ ওপৰত চাৰকামফ্লেক্স একচেণ্ট"</string>
- <string name="spoken_accented_letter_017A" msgid="3368292232292925369">"zৰ ওপৰত একিউট একচেণ্ট"</string>
- <string name="spoken_accented_letter_017C" msgid="2834484584505860430">"Zৰ ওপৰত এটা বিন্দু"</string>
- <string name="spoken_accented_letter_017E" msgid="1209240442434887098">"zৰ ওপৰত কেৰণ একচেণ্ট"</string>
- <string name="spoken_accented_letter_017F" msgid="317501463253362415">"দীঘল \'s\' আকৃতিৰ লেটিন বর্ণৰ প্ৰতীক"</string>
- <string name="spoken_accented_letter_01A1" msgid="630186564859044196">"Oৰ ওপৰত হৰ্ণ"</string>
- <string name="spoken_accented_letter_01B0" msgid="8544012177684640443">"uৰ ওপৰত হর্ণ একচেণ্ট"</string>
- <string name="spoken_accented_letter_0219" msgid="1960371842020076066">"তলত কমা থকা \'s\'"</string>
- <string name="spoken_accented_letter_021B" msgid="1398418662032919032">"তলত কমা থকা \'t\'"</string>
- <string name="spoken_accented_letter_0259" msgid="2464085263158415898">"লেটিন ভাষাৰ সৰুফলা আখৰ স্বা"</string>
- <string name="spoken_accented_letter_1EA1" msgid="688124877202887630">"Aৰ তলত বিন্দু"</string>
- <string name="spoken_accented_letter_1EA3" msgid="327960130366386256">"\'a\'ৰ ওপৰত হুক একচেণ্ট"</string>
- <string name="spoken_accented_letter_1EA5" msgid="637406363453769610">"aৰ ওপৰত চাৰকামফ্লেক্স আৰু একিউট একচেণ্ট"</string>
- <string name="spoken_accented_letter_1EA7" msgid="1419591804181615409">"aৰ ওপৰত চাৰকামফ্লেক্স আৰু গ্ৰেভ একচেণ্ট"</string>
- <string name="spoken_accented_letter_1EA9" msgid="6068887382734896756">"aৰ ওপৰত চাৰকামফ্লেক্স আৰু হুক একচেণ্ট"</string>
- <string name="spoken_accented_letter_1EAB" msgid="7236523151662538333">"aৰ ওপৰত চাৰকামফ্লেক্স আৰু টিলডা একচেণ্ট"</string>
- <string name="spoken_accented_letter_1EAD" msgid="2363364864106332076">"aৰ ওপৰত চাৰকামফ্লেক্সৰ একচেণ্ট আৰু তলত বিন্দু"</string>
- <string name="spoken_accented_letter_1EAF" msgid="1576329511464272935">"Aৰ ওপৰত ব্ৰীভ আৰু একিউট একচেণ্ট"</string>
- <string name="spoken_accented_letter_1EB1" msgid="4634735072816076592">"aৰ ওপৰত ব্ৰীভ আৰু গ্ৰেভ একচেণ্ট"</string>
- <string name="spoken_accented_letter_1EB3" msgid="2325245849038771534">"aৰ ওপৰত ব্ৰীভ আৰু হুক একচেণ্ট"</string>
- <string name="spoken_accented_letter_1EB5" msgid="3720427596242746295">"aৰ ওপৰত ব্ৰীভ আৰু টিলডা একচেণ্ট"</string>
- <string name="spoken_accented_letter_1EB7" msgid="700415535653646695">"aৰ ওপৰত ব্ৰীভ একচেণ্ট আৰু তলত বিন্দু"</string>
- <string name="spoken_accented_letter_1EB9" msgid="3901338692305890487">"Eৰ তলত বিন্দু"</string>
- <string name="spoken_accented_letter_1EBB" msgid="4028688699415417302">"eৰ ওপৰত গ্ৰেভ একচেণ্ট"</string>
- <string name="spoken_accented_letter_1EBD" msgid="181253633045931897">"eৰ ওপৰত টিলডা একচেণ্ট"</string>
- <string name="spoken_accented_letter_1EBF" msgid="3309618845007944963">"eৰ ওপৰত চাৰকামফ্লেক্স আৰু একিউট একচেণ্ট"</string>
- <string name="spoken_accented_letter_1EC1" msgid="8139046749226332542">"eৰ ওপৰত চাৰকামফ্লেক্স আৰু গ্ৰেভ একচেণ্ট"</string>
- <string name="spoken_accented_letter_1EC3" msgid="3239674223053133383">"Eৰ ওপৰত চাৰকামফ্লেক্স আৰু হুক একচেণ্ট"</string>
- <string name="spoken_accented_letter_1EC5" msgid="2216559244705714587">"Eৰ ওপৰত চাৰকামফ্লেক্স আৰু টিলডা একচেণ্ট"</string>
- <string name="spoken_accented_letter_1EC7" msgid="9012731468253986792">"eৰ ওপৰত চাৰকামফ্লেক্স একচেণ্ট আৰু তলত বিন্দু"</string>
- <string name="spoken_accented_letter_1EC9" msgid="2901917620195717034">"iৰ ওপৰত হুক একচেণ্ট"</string>
- <string name="spoken_accented_letter_1ECB" msgid="5470387489820034621">"iৰ তলত বিন্দু"</string>
- <string name="spoken_accented_letter_1ECD" msgid="1340122876914839806">"Oৰ তলত বিন্দু"</string>
- <string name="spoken_accented_letter_1ECF" msgid="2326921263882559755">"oৰ ওপৰত হুক একচেণ্ট"</string>
- <string name="spoken_accented_letter_1ED1" msgid="2885683296042774958">"Oৰ ওপৰত চাৰকামফ্লেক্স আৰু একিউট একচেণ্ট"</string>
- <string name="spoken_accented_letter_1ED3" msgid="6857664926477376178">"oৰ ওপৰত চাৰকামফ্লেক্স আৰু গ্ৰেভ একচেণ্ট"</string>
- <string name="spoken_accented_letter_1ED5" msgid="2015209467290624062">"oৰ ওপৰত চাৰকামফ্লেক্স আৰু হুক একচেণ্ট"</string>
- <string name="spoken_accented_letter_1ED7" msgid="7924481354960306389">"oৰ ওপৰত চাৰকামফ্লেক্স আৰু টিলডা একচেণ্ট"</string>
- <string name="spoken_accented_letter_1ED9" msgid="7023315590332365554">"Oৰ ওপৰত চাৰকামফ্লেক্সৰ একচেণ্ট আৰু তলত বিন্দু"</string>
- <string name="spoken_accented_letter_1EDB" msgid="2379438944917634496">"Oৰ ওপৰত হর্ণ আৰু একিউট একচেণ্ট"</string>
- <string name="spoken_accented_letter_1EDD" msgid="8107077534204404085">"oৰ ওপৰত হ\'র্ণ আৰু গ্ৰেভ একচেণ্ট"</string>
- <string name="spoken_accented_letter_1EDF" msgid="1846880105528347966">"oৰ ওপৰত হর্ণ আৰু হুক একচেণ্ট"</string>
- <string name="spoken_accented_letter_1EE1" msgid="1520037313389776718">"oৰ ওপৰত হর্ণ আৰু টিলডা একচেণ্ট"</string>
- <string name="spoken_accented_letter_1EE3" msgid="907964027171008963">"oৰ ওপৰত হ\'র্ণ একচেণ্ট আৰু তলত বিন্দু"</string>
- <string name="spoken_accented_letter_1EE5" msgid="1522024630360038700">"Uৰ তলত বিন্দু"</string>
- <string name="spoken_accented_letter_1EE7" msgid="7815412228302952637">"Uৰ ওপৰত হুক একচেণ্ট"</string>
- <string name="spoken_accented_letter_1EE9" msgid="4219119671251485651">"Uৰ ওপৰত হর্ণ আৰু একিউট একচেণ্ট"</string>
- <string name="spoken_accented_letter_1EEB" msgid="4086009841269002231">"Uৰ ওপৰত হর্ণ আৰু গ্ৰেভ একচেণ্ট"</string>
- <string name="spoken_accented_letter_1EED" msgid="3528151733528719847">"Uৰ ওপৰত হর্ণ আৰু হুক একচেণ্ট"</string>
- <string name="spoken_accented_letter_1EEF" msgid="3508548229409072119">"Uৰ ওপৰত হর্ণ আৰু টিলডা একচেণ্ট"</string>
- <string name="spoken_accented_letter_1EF1" msgid="1912816350401931115">"Uৰ ওপৰত হ\'র্ণ একচেণ্ট আৰু তলত বিন্দু"</string>
- <string name="spoken_accented_letter_1EF3" msgid="7211760439435946494">"Yৰ ওপৰত গ্ৰেভ একচেণ্ট"</string>
- <string name="spoken_accented_letter_1EF5" msgid="8998864482764007384">"yৰ তলত বিন্দু"</string>
- <string name="spoken_accented_letter_1EF7" msgid="922043627252869200">"yৰ ওপৰত হুক একচেণ্ট"</string>
- <string name="spoken_accented_letter_1EF9" msgid="6213977100552260366">"yৰ ওপৰত টিলডা একচেণ্ট"</string>
- <string name="spoken_symbol_00A1" msgid="4281758332905123408">"ওলোটা ভাববোধক চিহ্ন"</string>
- <string name="spoken_symbol_00AB" msgid="4093069643313064892">"বাওঁফালে নির্দেশ কৰা দুটা কোণৰ প্ৰতীক"</string>
- <string name="spoken_symbol_00B7" msgid="2447718728927874920">"মধ্য বিন্দু"</string>
- <string name="spoken_symbol_00B9" msgid="8026257165451461231">"সোঁফালে ওপৰৰ অংশত লিখা সৰু \'1\'"</string>
- <string name="spoken_symbol_00BB" msgid="1102740075655373928">"সোঁফালে নির্দেশ কৰা দুটা কোণৰ প্ৰতীক"</string>
- <string name="spoken_symbol_00BF" msgid="6233794752573788098">"ওলোটা প্ৰশ্নবোধক চিহ্ন"</string>
- <string name="spoken_symbol_2018" msgid="4886476295598930225">"বাওঁফালৰ ঊৰ্ধ্বকমা"</string>
- <string name="spoken_symbol_2019" msgid="8892530161598134083">"সোঁফালৰ এডাল ঊৰ্ধ্বকমা"</string>
- <string name="spoken_symbol_201A" msgid="2072987157683446644">"তলত লিখা সোঁফালৰ ঊৰ্ধ্বকমা"</string>
- <string name="spoken_symbol_201C" msgid="4588048378803665427">"বাওঁ দ্বৈত ঊৰ্ধ্বকমা"</string>
- <string name="spoken_symbol_201D" msgid="1642776849495925895">"সোঁ দ্বৈত ঊৰ্ধ্বকমা"</string>
- <string name="spoken_symbol_2020" msgid="9084628638189344431">"ডেগাৰ চিহ্ন"</string>
- <string name="spoken_symbol_2021" msgid="5081396468559426475">"দ্বৈত্ব ডেগাৰ চিহ্ন"</string>
- <string name="spoken_symbol_2030" msgid="9068837172419431755">"প্ৰতি মাইলত বুজোৱা প্ৰতীক"</string>
- <string name="spoken_symbol_2032" msgid="3014506329156664396">"প্ৰাইম"</string>
- <string name="spoken_symbol_2033" msgid="1251022699713475088">"দৈর্ঘ্য জোখা একক ইঞ্চিৰ প্ৰতীক"</string>
- <string name="spoken_symbol_2039" msgid="6989616457213775957">"বাওঁফালে নির্দেশ কৰা এটা কোণৰ প্ৰতীক"</string>
- <string name="spoken_symbol_203A" msgid="31245095449823701">"সোঁফালে নির্দেশ কৰা এটা কোণৰ প্ৰতীক"</string>
- <string name="spoken_symbol_2074" msgid="2116717717093306894">"সোঁফালে ওপৰত লিখা সৰু \'4\'"</string>
- <string name="spoken_symbol_207F" msgid="1706731172134246659">"সোঁফালে ওপৰত লিখা সৰু \'n\'"</string>
- <string name="spoken_symbol_20B1" msgid="2159994270622444689">"পেছ\' মুদ্ৰাৰ প্ৰতীক"</string>
- <string name="spoken_symbol_2105" msgid="7289404939366976829">"প্ৰযত্নে"</string>
- <string name="spoken_symbol_2192" msgid="827804523596125414">"সোঁফালে নির্দেশ কৰা কাঁড়চিহ্ন"</string>
- <string name="spoken_symbol_2193" msgid="2659541693445985717">"অধোমুখী কাঁড় চিহ্ন"</string>
- <string name="spoken_symbol_2205" msgid="4457188084269117343">"ৰিক্ত সংহতি"</string>
- <string name="spoken_symbol_2206" msgid="4856786565708380687">"বৃদ্ধি"</string>
- <string name="spoken_symbol_2264" msgid="5092061257745123554">"ইয়াতকৈ কম বা ইয়াৰ সমান বুজোৱা প্ৰতীক"</string>
- <string name="spoken_symbol_2265" msgid="1907966479878036357">"ইয়াতকৈ বেছি বা ইয়াৰ সমান বুজোৱা প্ৰতীক"</string>
- <string name="spoken_symbol_2605" msgid="5202920479405857753">"ক\'লা তৰা প্ৰতীক"</string>
-</resources>
diff --git a/java/res/values-as/strings-talkback-descriptions.xml b/java/res/values-as/strings-talkback-descriptions.xml
deleted file mode 100644
index c122b956d..000000000
--- a/java/res/values-as/strings-talkback-descriptions.xml
+++ /dev/null
@@ -1,102 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/*
-**
-** Copyright 2015, 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_use_headphones" msgid="4313642710742229868">"পাছৱৰ্ড কীবোৰ উচ্চাৰণ কৰা শুনিবলৈ হেডছেট এটা লগাওক৷"</string>
- <string name="spoken_current_text_is" msgid="4240549866156675799">"বৰ্তমানৰ পাঠ হৈছে %s"</string>
- <string name="spoken_no_text_entered" msgid="1711276837961785646">"কোনো পাঠ লিখা হোৱা নাই"</string>
- <string name="spoken_auto_correct" msgid="8989324692167993804">"<xliff:g id="KEY_NAME">%1$s</xliff:g>এ <xliff:g id="ORIGINAL_WORD">%2$s</xliff:g>ৰ পৰা <xliff:g id="CORRECTED_WORD">%3$s</xliff:g>লৈ শুদ্ধ কৰে"</string>
- <string name="spoken_auto_correct_obscured" msgid="7769449372355268412">"<xliff:g id="KEY_NAME">%1$s</xliff:g>এ স্বয়ংক্ৰিয়ভাৱে শুদ্ধ কৰে"</string>
- <string name="spoken_empty_suggestion" msgid="4250215619373459752">"কোনো পৰামর্শ নাই"</string>
- <string name="spoken_description_unknown" msgid="5139930082759824442">"অজ্ঞাত বর্ণ"</string>
- <string name="spoken_description_shift" msgid="7209798151676638728">"শ্বিফ্ট"</string>
- <string name="spoken_description_symbols_shift" msgid="3483198879916435717">"অধিক চিহ্ন"</string>
- <string name="spoken_description_shift_shifted" msgid="3122704922642232605">"শ্বিফ্ট"</string>
- <string name="spoken_description_symbols_shift_shifted" msgid="5179175466878186081">"প্ৰতীকসমূহ"</string>
- <string name="spoken_description_caps_lock" msgid="1224851412185975036">"শ্বিফ্ট"</string>
- <string name="spoken_description_delete" msgid="3878902286264983302">"মচক"</string>
- <string name="spoken_description_to_symbol" msgid="8244903740201126590">"প্ৰতীকসমূ্হ"</string>
- <string name="spoken_description_to_alpha" msgid="4081215210530031950">"বৰ্ণসমূহ"</string>
- <string name="spoken_description_to_numeric" msgid="4560261331530795682">"সংখ্যাসমূহ"</string>
- <string name="spoken_description_settings" msgid="7281251004003143204">"ছেটিংসমূহ"</string>
- <string name="spoken_description_tab" msgid="8210782459446866716">"টেব"</string>
- <string name="spoken_description_space" msgid="5908716896642059145">"স্পেচ"</string>
- <string name="spoken_description_mic" msgid="6153138783813452464">"ধ্বনি ইনপুট"</string>
- <string name="spoken_description_emoji" msgid="7990051553008088470">"ইম\'জি"</string>
- <string name="spoken_description_return" msgid="3183692287397645708">"উভতি যাওক"</string>
- <string name="spoken_description_search" msgid="5099937658231911288">"সন্ধান কৰক"</string>
- <string name="spoken_description_dot" msgid="5644176501632325560">"বিন্দু"</string>
- <string name="spoken_description_language_switch" msgid="6818666779313544553">"ভাষা সলনি কৰক"</string>
- <string name="spoken_description_action_next" msgid="431761808119616962">"পৰৱৰ্তী"</string>
- <string name="spoken_description_action_previous" msgid="2919072174697865110">"পূৰ্বৱৰ্তী"</string>
- <string name="spoken_description_shiftmode_on" msgid="5107180516341258979">"শ্বিফ্ট সক্ষম কৰা হ\'ল"</string>
- <string name="spoken_description_shiftmode_locked" msgid="7307477738053606881">"কেপছ্ লক সক্ষম কৰা হ\'ল"</string>
- <string name="spoken_description_mode_symbol" msgid="111186851131446691">"চিহ্ন ম\'ড"</string>
- <string name="spoken_description_mode_symbol_shift" msgid="4305607977537665389">"অধিক প্ৰতীক ম\'ড"</string>
- <string name="spoken_description_mode_alpha" msgid="4676004119618778911">"বৰ্ণ ম\'ড"</string>
- <string name="spoken_description_mode_phone" msgid="2061220553756692903">"ফ\'ন ম\'ড"</string>
- <string name="spoken_description_mode_phone_shift" msgid="7879963803547701090">"ফ\'নৰ চিহ্নৰ ম\'ড"</string>
- <string name="announce_keyboard_hidden" msgid="2313574218950517779">"কীব\'ৰ্ড লুকুওৱা হ\'ল"</string>
- <string name="announce_keyboard_mode" msgid="6698257917367823205">"<xliff:g id="KEYBOARD_MODE">%s</xliff:g> কীব\'ৰ্ড দেখুওৱা হৈছে"</string>
- <string name="keyboard_mode_date" msgid="6597407244976713364">"তাৰিখ"</string>
- <string name="keyboard_mode_date_time" msgid="3642804408726668808">"তাৰিখ আৰু সময়"</string>
- <string name="keyboard_mode_email" msgid="1239682082047693644">"ই-মেইল"</string>
- <string name="keyboard_mode_im" msgid="3812086215529493501">"বাৰ্তা লিখন"</string>
- <string name="keyboard_mode_number" msgid="5395042245837996809">"সংখ্যা"</string>
- <string name="keyboard_mode_phone" msgid="2486230278064523665">"ফ’ন"</string>
- <string name="keyboard_mode_text" msgid="9138789594969187494">"পাঠ"</string>
- <string name="keyboard_mode_time" msgid="8558297845514402675">"সময়"</string>
- <string name="keyboard_mode_url" msgid="8072011652949962550">"URL"</string>
- <string name="spoken_descrption_emoji_category_recents" msgid="4185344945205590692">"শেহতীয়া সমলসমূহ"</string>
- <string name="spoken_descrption_emoji_category_people" msgid="8414196269847492817">"সম্পৰ্ক ব্যক্তিসকল"</string>
- <string name="spoken_descrption_emoji_category_objects" msgid="6116297906606195278">"বস্তুসমূহ"</string>
- <string name="spoken_descrption_emoji_category_nature" msgid="5018340512472354640">"প্ৰকৃতি"</string>
- <string name="spoken_descrption_emoji_category_places" msgid="1163315840948545317">"ঠাইসমূহ"</string>
- <string name="spoken_descrption_emoji_category_symbols" msgid="474680659024880601">"প্ৰতীকসমূহ"</string>
- <!-- no translation found for spoken_descrption_emoji_category_flags (5971573825866381472) -->
- <skip />
- <!-- no translation found for spoken_descrption_emoji_category_eight_smiley_people (5682663819532433464) -->
- <skip />
- <!-- no translation found for spoken_descrption_emoji_category_eight_animals_nature (5844950234883716704) -->
- <skip />
- <!-- no translation found for spoken_descrption_emoji_category_eight_food_drink (6196944764485349650) -->
- <skip />
- <!-- no translation found for spoken_descrption_emoji_category_eight_travel_places (3834085499381434611) -->
- <skip />
- <!-- no translation found for spoken_descrption_emoji_category_eight_activity (4795281669042975993) -->
- <skip />
- <string name="spoken_descrption_emoji_category_emoticons" msgid="456737544787823539">"ইম\'টিকন"</string>
- <string name="spoken_description_upper_case" msgid="4904835255229433916">"বৰফলা <xliff:g id="LOWER_LETTER">%s</xliff:g>"</string>
- <string name="spoken_letter_0049" msgid="4743162182646977944">"বৰফলা l"</string>
- <string name="spoken_letter_0130" msgid="4766619646231612274">"ওপৰত বিন্দুৰ সৈতে লেটিন বৰফলা I"</string>
- <string name="spoken_symbol_unknown" msgid="717298227061173706">"অজ্ঞাত চিহ্ন"</string>
- <string name="spoken_emoji_unknown" msgid="5981009928135394306">"অজ্ঞাত ইম\'জি"</string>
- <string name="spoken_emoticon_3A_2D_21_20" msgid="2410905667389534573">"আমনি পোৱা ভংগীৰ মুখমণ্ডল"</string>
- <string name="spoken_emoticon_3A_2D_24_20" msgid="2481260475945560438">"লজ্জিত ভংগীৰ মুখমণ্ডল"</string>
- <string name="spoken_emoticon_42_2D_29_20" msgid="1063205250387128068">"ছানগ্লাছ পৰিহিত মুখমণ্ডল"</string>
- <string name="spoken_emoticon_3A_4F_20" msgid="532695091593447238">"আচৰিত হোৱা ভংগীৰ মুখমণ্ডল"</string>
- <string name="spoken_emoticon_3A_2D_2A_20" msgid="5612342617244114291">"চুমা খোৱা ভংগীৰ মুখমণ্ডল"</string>
- <string name="spoken_emoticon_3A_2D_5B_20" msgid="2223507987759905920">"দুখী মুখমণ্ডল"</string>
- <string name="spoken_open_more_keys_keyboard" msgid="6832897688371903747">"বিকল্প বৰ্ণ আছে"</string>
- <string name="spoken_close_more_keys_keyboard" msgid="3524914657934712026">"বিকল্প বৰ্ণবোৰ অগ্ৰাহ্য কৰা হৈছে"</string>
- <string name="spoken_open_more_suggestions" msgid="4231720702882969760">"বিকল্প পৰামর্শ আছে"</string>
- <string name="spoken_close_more_suggestions" msgid="9118455416075032839">"বিকল্প পৰামর্শবোৰ অগ্ৰাহ্য কৰা হৈছে"</string>
-</resources>
diff --git a/java/res/values-as/strings.xml b/java/res/values-as/strings.xml
deleted file mode 100644
index 795f29a57..000000000
--- a/java/res/values-as/strings.xml
+++ /dev/null
@@ -1,219 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-/*
-**
-** Copyright 2008, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="english_ime_input_options" msgid="3909945612939668554">"ইনপুট বিকল্পসমূহ"</string>
- <string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"সম্পৰ্কসূচীৰ নামবোৰত চাওক"</string>
- <string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"বানান পৰীক্ষকে আপোনাৰ সম্পৰ্কসূচীৰ নামবোৰ ব্যৱহাৰ কৰে"</string>
- <string name="vibrate_on_keypress" msgid="5258079494276955460">"কী টিপিলে কম্পন কৰক"</string>
- <string name="sound_on_keypress" msgid="6093592297198243644">"কী টিপিলে শব্দ হ\'ব"</string>
- <string name="popup_on_keypress" msgid="123894815723512944">"কী টিপিলে প\'পআপ ওলাব"</string>
- <string name="settings_screen_preferences" msgid="2696713156722014624">"অগ্ৰাধিকাৰসমূহ"</string>
- <string name="settings_screen_accounts" msgid="2786418968536696670">"একাউণ্ট আৰু গোপনীয়তা"</string>
- <string name="settings_screen_appearance" msgid="7358046399111611615">"বাহ্যিক ৰূপ আৰু চানেকিসমূহ"</string>
- <string name="settings_screen_gesture" msgid="8826372746901183556">"আঙুলি পিছলাই টাইপ কৰাৰ সুবিধা"</string>
- <string name="settings_screen_correction" msgid="1616818407747682955">"পাঠ শুধৰণি"</string>
- <string name="settings_screen_advanced" msgid="7472408607625972994">"উচ্চখাপৰ"</string>
- <string name="settings_screen_theme" msgid="2137262503543943871">"থীম"</string>
- <string name="enable_split_keyboard" msgid="4177264923999493614">"বিভক্ত কীবর্ড সক্ষম কৰক"</string>
- <string name="cloud_sync_title" msgid="8579271074443847055">"Google কীব\'ৰ্ড ছিংক"</string>
- <string name="cloud_sync_summary" msgid="7684887161145650857">"ছিংক হৈ আছে"</string>
- <string name="cloud_sync_summary_disabled" msgid="4553338970382825796">"সকলো ডিভাইচত আপোনাৰ ব্যক্তিগত অভিধান ছিংক কৰক"</string>
- <string name="sync_now_title" msgid="3088838136743277721">"এতিয়া ছিংক কৰক"</string>
- <string name="clear_sync_data_title" msgid="8582001557037069154">"ক্লাউড ডেটা মচক"</string>
- <string name="clear_sync_data_summary" msgid="993477139012576584">"আপোনাৰ ছিংক কৰা ডেটাসমূহ Googleৰ পৰা মচে"</string>
- <string name="clear_sync_data_confirmation" msgid="2811931135574727678">"আপোনাৰ ক্লাউডৰ পৰা ছিংক কৰা ডেটাসমূহ মচা হ\'ব। আপুনি নিশ্চিতনে?"</string>
- <string name="clear_sync_data_ok" msgid="613104067705915132">"মচক"</string>
- <string name="cloud_sync_cancel" msgid="5877481252150919037">"বাতিল কৰক"</string>
- <string name="cloud_sync_opt_in_text" msgid="9176039655776298248">"আপোনাৰ ব্যক্তিগত অভিধান ছিংক কৰা হ\'ব আৰু Google ছার্ভাৰত বেক আপ লোৱা হ\'ব।শব্দৰ সঘনতা পৰিসংখ্যাৰ তথ্য আমাৰ সামগ্ৰীসমূহ উন্নত কৰাত সহায় কৰিবলৈ সংগ্ৰহ কৰা হ\'ব পাৰে। সংগ্ৰহ আৰু ব্যৱহাৰ কৰা সকলো তথ্যৰ বাবে "<a href="https://www.google.com/policies/privacy">"Googleৰ ব্যক্তিগত নীতি"</a>" মনা হ\'ব।"</string>
- <string name="add_account_to_enable_sync" msgid="7836932571852055265">"এই সুবিধা সক্ষম কৰিবলৈ ডিভাইচত এটা Google একাউণ্ট যোগ কৰক"</string>
- <string name="cloud_sync_summary_disabled_work_profile" msgid="1381770407303129164">"ব্যৱসায় একাউণ্টসমূহৰ বাবে ব্যৱহাৰ কৰা Google এপসমূহৰ ডিভাইচবোৰৰ বাবে ছিংক উপলব্ধ নহয়"</string>
- <string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"আন ইনপুট পদ্ধতিলৈ সলনি কৰক"</string>
- <string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"ভাষা সলনি কৰা কীটোৱে আন ইনপুট পদ্ধতিসমূহকো সামৰি লয়"</string>
- <string name="show_language_switch_key" msgid="5915478828318774384">"ভাষা সলনি কৰা কী"</string>
- <string name="show_language_switch_key_summary" msgid="7343403647474265713">"যেতিয়া একাধিক ইনপুট ভাষা সক্ষম কৰি থোৱা থাকে তেতিয়া দেখুৱাওক"</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>
- <string name="settings_system_default" msgid="6268225104743331821">"ছিষ্টেম ডিফ\'ল্ট"</string>
- <string name="use_contacts_dict" msgid="4435317977804180815">"সম্পৰ্ক নামৰ পৰামৰ্শ দিয়ক"</string>
- <string name="use_contacts_dict_summary" msgid="6599983334507879959">"পৰামৰ্শ আৰু শুধৰণিৰ বাবে সম্পৰ্কসূচীৰ পৰা নামবোৰ ব্যৱহাৰ কৰক"</string>
- <string name="use_personalized_dicts" msgid="5167396352105467626">"ব্যক্তিগতকৰণ কৰা পৰামর্শসমূহ"</string>
- <string name="enable_metrics_logging" msgid="5506372337118822837">"উন্নত কৰক <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</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_summary" msgid="7934452761022946874">"প্ৰতিটো বাক্যৰ প্ৰথমটো শব্দৰ প্ৰথম আখৰটো বৰফলাৰ কৰক"</string>
- <string name="edit_personal_dictionary" msgid="3996910038952940420">"ব্যক্তিগত অভিধান"</string>
- <string name="configure_dictionaries_title" msgid="4238652338556902049">"অতিৰিক্ত অভিধান"</string>
- <string name="main_dictionary" msgid="4798763781818361168">"মুখ্য অভিধান"</string>
- <string name="prefs_show_suggestions" msgid="8026799663445531637">"শুধৰণিৰ পৰামৰ্শবোৰ দেখুৱাওক"</string>
- <string name="prefs_show_suggestions_summary" msgid="1583132279498502825">"টাইপ কৰি থাকোঁতে পৰামৰ্শৰ শব্দবোৰ দেখুৱাওক"</string>
- <string name="prefs_block_potentially_offensive_title" msgid="5078480071057408934">"আপত্তিজনক শব্দবোৰ অৱৰোধ কৰক"</string>
- <string name="prefs_block_potentially_offensive_summary" msgid="2371835479734991364">"সাম্ভাব্য আপত্তিজনক শব্দবোৰৰ পৰামৰ্শ নিদিব"</string>
- <string name="auto_correction" msgid="7630720885194996950">"স্বয়ং-সংশোধন"</string>
- <string name="auto_correction_summary" msgid="5625751551134658006">"স্পেচবাৰ আৰু যতিচিহ্নই ভুলকৈ টাইপ কৰা শব্দবোৰ স্বয়ংক্ৰিয়ভাৱে শুদ্ধ কৰে"</string>
- <string name="auto_correction_threshold_mode_off" msgid="8470882665417944026">"অফ কৰক"</string>
- <string name="auto_correction_threshold_mode_modest" msgid="8788366690620799097">"পৰিমিত"</string>
- <string name="auto_correction_threshold_mode_aggressive" msgid="7319007299148899623">"আগ্ৰাসী"</string>
- <string name="auto_correction_threshold_mode_very_aggressive" msgid="1853309024129480416">"অতি আগ্ৰাসী"</string>
- <string name="bigram_prediction" msgid="1084449187723948550">"পৰৱৰ্তী শব্দৰ পৰামৰ্শসমূহ"</string>
- <string name="bigram_prediction_summary" msgid="3896362682751109677">"পৰামৰ্শ প্ৰদান কৰিবলৈ পূৰ্বৱৰ্তী শব্দটো ব্যৱহাৰ কৰক"</string>
- <string name="gesture_input" msgid="826951152254563827">"স্পৰ্শ লিখন সক্ষম কৰক"</string>
- <string name="gesture_input_summary" msgid="9180350639305731231">"আখৰৰ ওপৰেৰে আঙুলি পিছলাই শব্দ লিখক"</string>
- <string name="gesture_preview_trail" msgid="3802333369335722221">"আঙুলি পিছলাই দিয়া নিৰ্দেশসমূহৰ গতিপথৰ চিহ্ন দেখুৱাওক"</string>
- <string name="gesture_floating_preview_text" msgid="4443240334739381053">"গতিশীল প্ৰবাহিত পূৰ্বদৰ্শন"</string>
- <string name="gesture_floating_preview_text_summary" msgid="4472696213996203533">"আঙুলিৰে নিৰ্দেশ দিয়াৰ সময়ত পৰামৰ্শ দিয়া শব্দটো চাওক"</string>
- <string name="gesture_space_aware" msgid="2078291600664682496">"আঙুলি পিছলাই দিয়া নিৰ্দেশেৰে বাক্যাংশ লিখক"</string>
- <string name="gesture_space_aware_summary" msgid="4371385818348528538">"আঙুলি পিছলাই দিয়া নিৰ্দেশ দিওঁতে স্পেচ কীটোৰ ওপৰেৰে আঙুলি পিছলাই স্পেচ দিয়ক"</string>
- <string name="voice_input" msgid="3583258583521397548">"কথনৰ দ্বাৰা লিখন কী"</string>
- <!-- no translation found for voice_input_disabled_summary (6323489602945135165) -->
- <skip />
- <string name="configure_input_method" msgid="373356270290742459">"ইনপুট পদ্ধতিসমূহ কনফিগাৰ কৰক"</string>
- <string name="language_selection_title" msgid="3666971864764478269">"ভাষা"</string>
- <string name="help_and_feedback" msgid="5328219371839879161">"সহায় আৰু মতামত"</string>
- <string name="select_language" msgid="5709487854987078367">"ভাষা"</string>
- <!-- no translation found for hint_add_to_dictionary (2645988432867033007) -->
- <skip />
- <!-- no translation found for hint_add_to_dictionary_without_word (6710206006427574423) -->
- <skip />
- <string name="has_dictionary" msgid="6071847973466625007">"অভিধান উপলব্ধ"</string>
- <string name="keyboard_layout" msgid="8451164783510487501">"কীব\'ৰ্ড থীম"</string>
- <string name="switch_accounts" msgid="3321216593719006162">"একাউণ্ট সলনি কৰক"</string>
- <string name="no_accounts_selected" msgid="2073821619103904330">"কোনো একাউণ্ট বাছনি কৰা হোৱা নাই"</string>
- <string name="account_selected" msgid="2846876462199625974">"<xliff:g id="EMAIL_ADDRESS">%1$s</xliff:g> বর্তমান ব্যৱহাৰ কৰি থকা হৈছে"</string>
- <string name="account_select_ok" msgid="9141195141763227797">"ঠিক আছে"</string>
- <string name="account_select_cancel" msgid="5181012062618504340">"বাতিল কৰক"</string>
- <string name="account_select_sign_out" msgid="3299651159390187933">"ছাইন আউট কৰক"</string>
- <string name="account_select_title" msgid="6279711684772922649">"ব্যৱহাৰ কৰিবৰ বাবে এটা একাউণ্ট বাছনি কৰক"</string>
- <string name="subtype_en_GB" msgid="88170601942311355">"ইংৰাজী (ইউ. কে.)"</string>
- <string name="subtype_en_US" msgid="6160452336634534239">"ইংৰাজী (ইউ. এছ.)"</string>
- <string name="subtype_es_US" msgid="5583145191430180200">"স্পেনিশ্ব (ইউ. এছ.)"</string>
- <string name="subtype_hi_ZZ" msgid="8860448146262798623">"হিংলিশ্ব"</string>
- <string name="subtype_sr_ZZ" msgid="9059219552986034343">"ছাৰ্বিয়ান (লেটিন)"</string>
- <string name="subtype_with_layout_en_GB" msgid="1931018968641592304">"ইংৰাজী (ইউ. কে.) (<xliff:g id="KEYBOARD_LAYOUT">%s</xliff:g>)"</string>
- <string name="subtype_with_layout_en_US" msgid="8809311287529805422">"ইংৰাজী (ইউ. এছ.) (<xliff:g id="KEYBOARD_LAYOUT">%s</xliff:g>)"</string>
- <string name="subtype_with_layout_es_US" msgid="510930471167541338">"স্পেনিশ্ব (ইউ. এছ.) (<xliff:g id="KEYBOARD_LAYOUT">%s</xliff:g>)"</string>
- <string name="subtype_with_layout_hi_ZZ" msgid="6827402953860547044">"হিংলিশ্ব (<xliff:g id="KEYBOARD_LAYOUT">%s</xliff:g>)"</string>
- <string name="subtype_with_layout_sr_ZZ" msgid="2859024772719772407">"ছাৰ্বিয়ান (<xliff:g id="KEYBOARD_LAYOUT">%s</xliff:g>)"</string>
- <string name="subtype_generic_traditional" msgid="8584594350973800586">"<xliff:g id="LANGUAGE_NAME">%s</xliff:g> (পৰম্পৰাগত)"</string>
- <string name="subtype_generic_compact" msgid="3353673321203202922">"<xliff:g id="LANGUAGE_NAME">%s</xliff:g> (চমু)"</string>
- <string name="subtype_no_language" msgid="7137390094240139495">"কোনো ভাষা নাই (বৰ্ণমালা)"</string>
- <string name="subtype_no_language_qwerty" msgid="244337630616742604">"বৰ্ণমালা (QWERTY)"</string>
- <string name="subtype_no_language_qwertz" msgid="443066912507547976">"বৰ্ণমালা (QWERTZ)"</string>
- <string name="subtype_no_language_azerty" msgid="8144348527575640087">"বৰ্ণমালা (AZERTY)"</string>
- <string name="subtype_no_language_dvorak" msgid="1564494667584718094">"বৰ্ণমালা (Dvorak)"</string>
- <string name="subtype_no_language_colemak" msgid="5837418400010302623">"বৰ্ণমালা (Colemak)"</string>
- <string name="subtype_no_language_pcqwerty" msgid="5354918232046200018">"বৰ্ণমালা (পি. চি.)"</string>
- <string name="subtype_emoji" msgid="7483586578074549196">"ইম\'জি"</string>
- <string name="keyboard_theme" msgid="4909551808526178852">"কীব\'ৰ্ড থীম"</string>
- <string name="custom_input_styles_title" msgid="8429952441821251512">"কাষ্টম ইনপুট শৈলী"</string>
- <string name="add_style" msgid="6163126614514489951">"শৈলী যোগ কৰক"</string>
- <string name="add" msgid="8299699805688017798">"যোগ কৰক"</string>
- <string name="remove" msgid="4486081658752944606">"আঁতৰাওক"</string>
- <string name="save" msgid="7646738597196767214">"ছেভ কৰক"</string>
- <string name="subtype_locale" msgid="8576443440738143764">"ভাষা"</string>
- <string name="keyboard_layout_set" msgid="4309233698194565609">"চানেকি"</string>
- <string name="custom_input_style_note_message" msgid="8826731320846363423">"আপুনি কাষ্টম ইনপুট শৈলীটো ব্যৱহাৰ কৰাৰ আগেয়ে তাক সক্ষম কৰিব লাগিব৷ আপুনি এতিয়াই তাক সক্ষম কৰিবলৈ বিচাৰেনে?"</string>
- <string name="enable" msgid="5031294444630523247">"সক্ষম কৰক"</string>
- <string name="not_now" msgid="6172462888202790482">"এতিয়া নহয়"</string>
- <string name="custom_input_style_already_exists" msgid="8008728952215449707">"একে ইনপুট শৈলী ইতিমধ্যে মজুত আছে: <xliff:g id="INPUT_STYLE_NAME">%s</xliff:g>"</string>
- <string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"কী টিপিলে হোৱা কম্পনৰ কাল-দৈৰ্ঘ্য"</string>
- <string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"কী টিপিলে হোৱা ধ্বনিৰ মাত্ৰা"</string>
- <string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"কী দীঘলীয়াকৈ টিপি ৰখাৰ সময়"</string>
- <string name="prefs_enable_emoji_alt_physical_key" msgid="5963640002335470112">"কায়িক কীব\'ৰ্ডৰ বাবে ইম\'জী"</string>
- <string name="prefs_enable_emoji_alt_physical_key_summary" msgid="5259484820941627827">"কায়িক Alt কীয়ে ইম\'জী পেলেট দেখুৱায়"</string>
- <string name="button_default" msgid="3988017840431881491">"ডিফ\'ল্ট"</string>
- <string name="setup_welcome_title" msgid="6112821709832031715">"<xliff:g id="APPLICATION_NAME">%s</xliff:g>লৈ স্বাগতম জনাইছোঁ"</string>
- <string name="setup_welcome_additional_description" msgid="8150252008545768953">"আঙুলি পিছলাই দিয়া নিৰ্দেশেৰে টাইপ কৰাৰ সুবিধাৰ সৈতে"</string>
- <string name="setup_start_action" msgid="8936036460897347708">"আৰম্ভ কৰক"</string>
- <string name="setup_next_action" msgid="371821437915144603">"পৰৱৰ্তী পদক্ষেপ"</string>
- <string name="setup_steps_title" msgid="6400373034871816182">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> ছেট আপ কৰি থকা হৈছে"</string>
- <string name="setup_step1_title" msgid="3147967630253462315">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> সক্ষম কৰক"</string>
- <!-- no translation found for setup_step1_instruction (4295448056733329661) -->
- <skip />
- <!-- no translation found for setup_step1_finished_instruction (8701441895377434947) -->
- <skip />
- <string name="setup_step1_action" msgid="4366513534999901728">"ছেটিংসমূহলৈ গৈ সক্ষম কৰক"</string>
- <string name="setup_step2_title" msgid="6860725447906690594">"<xliff:g id="APPLICATION_NAME">%s</xliff:g> লৈ সলনি কৰক"</string>
- <string name="setup_step2_instruction" msgid="9141481964870023336">"ইয়াৰ পিছত, আপোনাৰ সক্ৰিয় পাঠ ইনপুট পদ্ধতি হিচাপে \"<xliff:g id="APPLICATION_NAME">%s</xliff:g>\" বাছনি কৰক৷"</string>
- <string name="setup_step2_action" msgid="1660330307159824337">"ইনপুট পদ্ধতিসমূহ সলনি কৰক"</string>
- <string name="setup_step3_title" msgid="3154757183631490281">"আপোনাক অভিনন্দন জনাইছোঁ, আপুনি এতিয়া সাজু!"</string>
- <string name="setup_step3_instruction" msgid="8025981829605426000">"আপুনি এতিয়া আপোনাৰ প্ৰিয় এপসমূহত <xliff:g id="APPLICATION_NAME">%s</xliff:g>ৰ সৈতে লিখিব পাৰিব৷"</string>
- <string name="setup_step3_action" msgid="600879797256942259">"অতিৰিক্ত ভাষা কনফিগাৰ কৰক"</string>
- <string name="setup_finish_action" msgid="276559243409465389">"সম্পূৰ্ণ হ\'ল"</string>
- <string name="show_setup_wizard_icon" msgid="5008028590593710830">"এপৰ আইকন দেখুৱাওক"</string>
- <string name="show_setup_wizard_icon_summary" msgid="4119998322536880213">"লঞ্চাৰত এপ্লিকেশ্বন আইকন দেখুৱাওক"</string>
- <string name="app_name" msgid="6320102637491234792">"অভিধান প্ৰদানকাৰী"</string>
- <string name="dictionary_provider_name" msgid="3027315045397363079">"অভিধান প্ৰদানকাৰী"</string>
- <string name="dictionary_service_name" msgid="6237472350693511448">"অভিধান সেৱা"</string>
- <string name="download_description" msgid="6014835283119198591">"অভিধান আপডেট কৰাৰ তথ্য"</string>
- <string name="dictionary_settings_title" msgid="8091417676045693313">"অতিৰিক্ত অভিধান"</string>
- <string name="dictionary_install_over_metered_network_prompt" msgid="3587517870006332980">"অভিধান উপলব্ধ"</string>
- <string name="dictionary_settings_summary" msgid="5305694987799824349">"অভিধানসমূহৰ বাবে ছেটিংসমূহ"</string>
- <string name="user_dictionaries" msgid="3582332055892252845">"ব্যৱহাৰকাৰীৰ অভিধানসমূহ"</string>
- <string name="default_user_dict_pref_name" msgid="1625055720489280530">"ব্যৱহাৰকাৰীৰ অভিধান"</string>
- <string name="dictionary_available" msgid="4728975345815214218">"অভিধান উপলব্ধ"</string>
- <string name="dictionary_downloading" msgid="2982650524622620983">"বৰ্তমান ডাউনল\'ড হৈ আছে"</string>
- <string name="dictionary_installed" msgid="8081558343559342962">"ইনষ্টল কৰা হ’ল"</string>
- <string name="dictionary_disabled" msgid="8950383219564621762">"ফাইল ইনষ্টল হৈছে কিন্তু অভিধান অক্ষম হৈ আছে"</string>
- <string name="cannot_connect_to_dict_service" msgid="9216933695765732398">"অভিধান সেৱাৰ লগত সংযোগ কৰোঁতে সমস্যাৰ সৃষ্টি হৈছে"</string>
- <string name="no_dictionaries_available" msgid="8039920716566132611">"কোনো অভিধান নাই"</string>
- <string name="check_for_updates_now" msgid="8087688440916388581">"ৰিফ্ৰেশ্ব কৰক"</string>
- <string name="last_update" msgid="730467549913588780">"অন্তিমবাৰ আপডেট কৰা হৈছিল"</string>
- <string name="message_updating" msgid="4457761393932375219">"আপডেট আছে নেকি পৰীক্ষা কৰি থকা হৈছে"</string>
- <string name="message_loading" msgid="5638680861387748936">"ল\'ড হৈ আছে…"</string>
- <string name="main_dict_description" msgid="3072821352793492143">"মুখ্য অভিধান"</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="delete_dict" msgid="756853268088330054">"মচক"</string>
- <!-- no translation found for should_download_over_metered_prompt (6737084685073734292) -->
- <skip />
- <string name="download_over_metered" msgid="1643065851159409546">"এতিয়াই ডাউনল\'ড কৰক (<xliff:g id="SIZE_IN_MEGABYTES">%1$.1f</xliff:g>এম. বি.)"</string>
- <string name="do_not_download_over_metered" msgid="2176209579313941583">"ৱাই-ফাইৰ যোগেৰে ডাউনল\'ড কৰক"</string>
- <string name="dict_available_notification_title" msgid="4583842811218581658">"<xliff:g id="LANGUAGE_NAME">%1$s</xliff:g>ৰ বাবে এখন অভিধান উপলব্ধ"</string>
- <string name="dict_available_notification_description" msgid="1075194169443163487">"সমীক্ষা আৰু ডাউনল\'ড কৰিবলৈ হেঁচক"</string>
- <string name="toast_downloading_suggestions" msgid="6128155879830851739">"ডাউনল\'ড কৰি থকা হৈছে: <xliff:g id="LANGUAGE_NAME">%1$s</xliff:g>ৰ বাবে পৰামৰ্শবোৰ সোনকালে সাজু হ\'ব।"</string>
- <string name="version_text" msgid="2715354215568469385">"সংস্কৰণ <xliff:g id="VERSION_NUMBER">%1$s</xliff:g>"</string>
- <string name="user_dict_settings_add_menu_title" msgid="1254195365689387076">"যোগ কৰক"</string>
- <string name="user_dict_settings_add_dialog_title" msgid="4096700390211748168">"অভিধানত যোগ কৰক"</string>
- <string name="user_dict_settings_add_screen_title" msgid="5818914331629278758">"বাক্যাংশ"</string>
- <string name="user_dict_settings_add_dialog_more_options" msgid="5671682004887093112">"অধিক বিকল্প"</string>
- <string name="user_dict_settings_add_dialog_less_options" msgid="2716586567241724126">"কম বিকল্প"</string>
- <string name="user_dict_settings_add_dialog_confirm" msgid="4703129507388332950">"ঠিক আছে"</string>
- <string name="user_dict_settings_add_word_option_name" msgid="6665558053408962865">"শব্দ:"</string>
- <string name="user_dict_settings_add_shortcut_option_name" msgid="3094731590655523777">"শ্বৰ্টকাট:"</string>
- <string name="user_dict_settings_add_locale_option_name" msgid="4738643440987277705">"ভাষা:"</string>
- <string name="user_dict_settings_add_word_hint" msgid="4902434148985906707">"কোনো শব্দ লিখক"</string>
- <string name="user_dict_settings_add_shortcut_hint" msgid="2265453012555060178">"ঐচ্ছিক শ্বৰ্টকাট"</string>
- <string name="user_dict_settings_edit_dialog_title" msgid="3765774633869590352">"শব্দ সম্পাদনা কৰক"</string>
- <string name="user_dict_settings_context_menu_edit_title" msgid="6812255903472456302">"সম্পাদনা কৰক"</string>
- <string name="user_dict_settings_context_menu_delete_title" msgid="8142932447689461181">"মচক"</string>
- <!-- no translation found for user_dict_settings_empty_text (6889278304342592383) -->
- <skip />
- <string name="user_dict_settings_all_languages" msgid="8276126583216298886">"সকলো ভাষাৰ বাবে"</string>
- <string name="user_dict_settings_more_languages" msgid="7131268499685180461">"অধিক ভাষা…"</string>
- <string name="user_dict_settings_delete" msgid="110413335187193859">"মচক"</string>
- <string name="user_dict_fast_scroll_alphabet" msgid="5431919401558285473">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
-</resources>
diff --git a/java/res/values-da/strings.xml b/java/res/values-da/strings.xml
index 2c3546cfa..5471ea019 100644
--- a/java/res/values-da/strings.xml
+++ b/java/res/values-da/strings.xml
@@ -56,7 +56,7 @@
<string name="abbreviation_unit_milliseconds" msgid="8700286094028323363">"<xliff:g id="MILLISECONDS">%s</xliff:g> ms"</string>
<string name="settings_system_default" msgid="6268225104743331821">"Systemstandard"</string>
<string name="use_contacts_dict" msgid="4435317977804180815">"Foreslå navne på kontakter"</string>
- <string name="use_contacts_dict_summary" msgid="6599983334507879959">"Brug navne fra Kontaktpersoner til forslag og rettelser"</string>
+ <string name="use_contacts_dict_summary" msgid="6599983334507879959">"Brug navne fra Kontakter til forslag og rettelser"</string>
<string name="use_personalized_dicts" msgid="5167396352105467626">"Tilpassede forslag"</string>
<string name="enable_metrics_logging" msgid="5506372337118822837">"Gør <xliff:g id="APPLICATION_NAME">%s</xliff:g> bedre"</string>
<string name="use_double_space_period" msgid="8781529969425082860">"To mellemrum for punktum"</string>
diff --git a/java/res/values-en-rCA/strings-emoji-descriptions.xml b/java/res/values-en-rCA/strings-emoji-descriptions.xml
index 952c27be6..b3eb4cc17 100644
--- a/java/res/values-en-rCA/strings-emoji-descriptions.xml
+++ b/java/res/values-en-rCA/strings-emoji-descriptions.xml
@@ -188,7 +188,7 @@
<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 tick"</string>
- <string name="spoken_emoji_2708" msgid="7153840886849268988">"Airplane"</string>
+ <string name="spoken_emoji_2708" msgid="7153840886849268988">"Aeroplane"</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>
@@ -1151,7 +1151,7 @@
<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">"Toilet"</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>
diff --git a/java/res/values-fa/strings-emoji-descriptions.xml b/java/res/values-fa/strings-emoji-descriptions.xml
index 747bf1a97..35139efb7 100644
--- a/java/res/values-fa/strings-emoji-descriptions.xml
+++ b/java/res/values-fa/strings-emoji-descriptions.xml
@@ -806,7 +806,7 @@
<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_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>
diff --git a/java/res/values-fa/strings-talkback-descriptions.xml b/java/res/values-fa/strings-talkback-descriptions.xml
index 12b55be65..4613d32fd 100644
--- a/java/res/values-fa/strings-talkback-descriptions.xml
+++ b/java/res/values-fa/strings-talkback-descriptions.xml
@@ -58,7 +58,7 @@
<string name="announce_keyboard_mode" msgid="6698257917367823205">"در حال نمایش صفحه‌کلید <xliff:g id="KEYBOARD_MODE">%s</xliff:g>"</string>
<string name="keyboard_mode_date" msgid="6597407244976713364">"تاریخ"</string>
<string name="keyboard_mode_date_time" msgid="3642804408726668808">"تاریخ و زمان"</string>
- <string name="keyboard_mode_email" msgid="1239682082047693644">"رایانامه"</string>
+ <string name="keyboard_mode_email" msgid="1239682082047693644">"ایمیل"</string>
<string name="keyboard_mode_im" msgid="3812086215529493501">"پیام‌رسانی"</string>
<string name="keyboard_mode_number" msgid="5395042245837996809">"عدد"</string>
<string name="keyboard_mode_phone" msgid="2486230278064523665">"تلفن"</string>
diff --git a/java/res/values-it/strings.xml b/java/res/values-it/strings.xml
index 11af2b8c3..a44b2fb36 100644
--- a/java/res/values-it/strings.xml
+++ b/java/res/values-it/strings.xml
@@ -44,7 +44,7 @@
<string name="clear_sync_data_ok" msgid="613104067705915132">"Elimina"</string>
<string name="cloud_sync_cancel" msgid="5877481252150919037">"Annulla"</string>
<string name="cloud_sync_opt_in_text" msgid="9176039655776298248">"Il tuo dizionario personale verrà sincronizzato sui server di Google e ne verrà effettuato il backup. Potrebbero essere raccolte informazioni statistiche relative alla frequenza delle parole per migliorare i nostri prodotti. La raccolta e l\'utilizzo di tutte le informazioni saranno conformi alle "<a href="https://www.google.com/policies/privacy">"Norme sulla privacy di Google"</a>"."</string>
- <string name="add_account_to_enable_sync" msgid="7836932571852055265">"Per attivare la funzione, aggiungi un account Google al dispositivo"</string>
+ <string name="add_account_to_enable_sync" msgid="7836932571852055265">"Per attivare la funzione, aggiungi un Account Google al dispositivo"</string>
<string name="cloud_sync_summary_disabled_work_profile" msgid="1381770407303129164">"La sincronizzazione non è disponibile per i dispositivi con account Google Apps for Business"</string>
<string name="include_other_imes_in_language_switch_list" msgid="4533689960308565519">"Altri metodi immissione"</string>
<string name="include_other_imes_in_language_switch_list_summary" msgid="840637129103317635">"Il tasto per cambiare lingua offre altri metodi di immissione"</string>
diff --git a/java/res/values-ja/strings.xml b/java/res/values-ja/strings.xml
index bce66c0be..2fc113333 100644
--- a/java/res/values-ja/strings.xml
+++ b/java/res/values-ja/strings.xml
@@ -23,7 +23,7 @@
<string name="english_ime_input_options" msgid="3909945612939668554">"入力オプション"</string>
<string name="use_contacts_for_spellchecking_option_title" msgid="5374120998125353898">"連絡先名の検索"</string>
<string name="use_contacts_for_spellchecking_option_summary" msgid="8754413382543307713">"スペルチェッカーでは連絡先リストのエントリを使用します"</string>
- <string name="vibrate_on_keypress" msgid="5258079494276955460">"キー操作バイブ"</string>
+ <string name="vibrate_on_keypress" msgid="5258079494276955460">"キー操作バイブレーション"</string>
<string name="sound_on_keypress" msgid="6093592297198243644">"キー操作音"</string>
<string name="popup_on_keypress" msgid="123894815723512944">"キー押下時ポップアップ"</string>
<string name="settings_screen_preferences" msgid="2696713156722014624">"設定"</string>
@@ -134,7 +134,7 @@
<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_keypress_vibration_duration_settings" msgid="7918341459947439226">"キー操作バイブの振動時間"</string>
+ <string name="prefs_keypress_vibration_duration_settings" msgid="7918341459947439226">"キー操作バイブレーションの振動時間"</string>
<string name="prefs_keypress_sound_volume_settings" msgid="6027007337036891623">"キー操作音の音量"</string>
<string name="prefs_key_longpress_timeout_settings" msgid="6102240298932897873">"キーの長押し時間"</string>
<string name="prefs_enable_emoji_alt_physical_key" msgid="5963640002335470112">"物理キーボードの絵文字"</string>
diff --git a/java/res/values-my/strings.xml b/java/res/values-my/strings.xml
index a7b7f2432..10709bba7 100644
--- a/java/res/values-my/strings.xml
+++ b/java/res/values-my/strings.xml
@@ -91,8 +91,8 @@
<string name="language_selection_title" msgid="3666971864764478269">"ဘာသာစကားများ"</string>
<string name="help_and_feedback" msgid="5328219371839879161">"အကူအညီနှင့် အကြံပြုချက်"</string>
<string name="select_language" msgid="5709487854987078367">"ဘာသာစကားများ"</string>
- <string name="hint_add_to_dictionary" msgid="2645988432867033007">"သိမ်းဆည်းရန် နောက်တစ်ကြိမ် တို့ပါ"</string>
- <string name="hint_add_to_dictionary_without_word" msgid="6710206006427574423">"သိမ်းဆည်းရန် ဤနေရာတွင် တို့ပါ"</string>
+ <string name="hint_add_to_dictionary" msgid="2645988432867033007">"သိမ်းရန် နောက်တစ်ကြိမ် တို့ပါ"</string>
+ <string name="hint_add_to_dictionary_without_word" msgid="6710206006427574423">"သိမ်းရန် ဤနေရာတွင် တို့ပါ"</string>
<string name="has_dictionary" msgid="6071847973466625007">"အဘိဓါန်ရနိုင်"</string>
<string name="keyboard_layout" msgid="8451164783510487501">"ကီးဘုတ်အရောင်"</string>
<string name="switch_accounts" msgid="3321216593719006162">"အကောင့်များကို ပြောင်းရန်"</string>
diff --git a/java/res/values-nl/strings.xml b/java/res/values-nl/strings.xml
index 195821b3c..4951f97ac 100644
--- a/java/res/values-nl/strings.xml
+++ b/java/res/values-nl/strings.xml
@@ -89,7 +89,7 @@
<string name="voice_input_disabled_summary" msgid="6323489602945135165">"Geen spraakinvoermethoden ingeschakeld. Bekijk de instellingen bij \'Talen en invoer\'."</string>
<string name="configure_input_method" msgid="373356270290742459">"Invoermethoden configureren"</string>
<string name="language_selection_title" msgid="3666971864764478269">"Talen"</string>
- <string name="help_and_feedback" msgid="5328219371839879161">"Help en feedback"</string>
+ <string name="help_and_feedback" msgid="5328219371839879161">"Hulp en feedback"</string>
<string name="select_language" msgid="5709487854987078367">"Talen"</string>
<string name="hint_add_to_dictionary" msgid="2645988432867033007">"Tik nogmaals om op te slaan"</string>
<string name="hint_add_to_dictionary_without_word" msgid="6710206006427574423">"Tik hier om op te slaan"</string>
diff --git a/java/res/values-pl/strings.xml b/java/res/values-pl/strings.xml
index 81b40f0c1..3912782e8 100644
--- a/java/res/values-pl/strings.xml
+++ b/java/res/values-pl/strings.xml
@@ -57,7 +57,7 @@
<string name="settings_system_default" msgid="6268225104743331821">"Ustawienie domyślne"</string>
<string name="use_contacts_dict" msgid="4435317977804180815">"Proponuj osoby z kontaktów"</string>
<string name="use_contacts_dict_summary" msgid="6599983334507879959">"W podpowiedziach i poprawkach używaj nazwisk z kontaktów"</string>
- <string name="use_personalized_dicts" msgid="5167396352105467626">"Spersonalizowane sugestie"</string>
+ <string name="use_personalized_dicts" msgid="5167396352105467626">"Dostosowane sugestie"</string>
<string name="enable_metrics_logging" msgid="5506372337118822837">"Popraw aplikację <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string>
<string name="use_double_space_period" msgid="8781529969425082860">"Szybka kropka ze spacją"</string>
<string name="use_double_space_period_summary" msgid="6532892187247952799">"Dwukrotne kliknięcie spacji wstawia kropkę ze spacją"</string>
diff --git a/java/res/values-pt/strings.xml b/java/res/values-pt/strings.xml
index f633374d5..24a015411 100644
--- a/java/res/values-pt/strings.xml
+++ b/java/res/values-pt/strings.xml
@@ -23,9 +23,9 @@
<string name="english_ime_input_options" msgid="3909945612939668554">"Opções de entrada"</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>
+ <string name="vibrate_on_keypress" msgid="5258079494276955460">"Vibrar ao digitar"</string>
<string name="sound_on_keypress" msgid="6093592297198243644">"Som ao tocar a tecla"</string>
- <string name="popup_on_keypress" msgid="123894815723512944">"Exibir pop-up ao digitar"</string>
+ <string name="popup_on_keypress" msgid="123894815723512944">"Mostrar letra em pop-up ao digitar"</string>
<string name="settings_screen_preferences" msgid="2696713156722014624">"Preferências"</string>
<string name="settings_screen_accounts" msgid="2786418968536696670">"Contas e privacidade"</string>
<string name="settings_screen_appearance" msgid="7358046399111611615">"Aparência e layouts"</string>
diff --git a/java/res/values-th/strings.xml b/java/res/values-th/strings.xml
index cf2833fa7..885b633f3 100644
--- a/java/res/values-th/strings.xml
+++ b/java/res/values-th/strings.xml
@@ -70,7 +70,7 @@
<string name="prefs_show_suggestions_summary" msgid="1583132279498502825">"แสดงคำที่แนะนำขณะพิมพ์"</string>
<string name="prefs_block_potentially_offensive_title" msgid="5078480071057408934">"บล็อกคำที่ไม่เหมาะสม"</string>
<string name="prefs_block_potentially_offensive_summary" msgid="2371835479734991364">"ไม่แนะนำคำที่อาจไม่เหมาะสม"</string>
- <string name="auto_correction" msgid="7630720885194996950">"การแก้ไขอัตโนมัติ"</string>
+ <string name="auto_correction" msgid="7630720885194996950">"การแก้ไขคำผิดอัตโนมัติ"</string>
<string name="auto_correction_summary" msgid="5625751551134658006">"กดเว้นวรรคและเครื่องหมายจะแก้คำผิดอัตโนมัติ"</string>
<string name="auto_correction_threshold_mode_off" msgid="8470882665417944026">"ปิด"</string>
<string name="auto_correction_threshold_mode_modest" msgid="8788366690620799097">"ปานกลาง"</string>
diff --git a/java/res/values-tl/strings-emoji-descriptions.xml b/java/res/values-tl/strings-emoji-descriptions.xml
index 20279206a..c3645875f 100644
--- a/java/res/values-tl/strings-emoji-descriptions.xml
+++ b/java/res/values-tl/strings-emoji-descriptions.xml
@@ -272,10 +272,10 @@
<string name="spoken_emoji_1F301" msgid="3601962477653752974">"Mahamog"</string>
<string name="spoken_emoji_1F302" msgid="3404357123421753593">"Nakasarang payong"</string>
<string name="spoken_emoji_1F303" msgid="3899301321538188206">"Gabi na may mga bituin"</string>
- <string name="spoken_emoji_1F304" msgid="2767148930689050040">"Pagsikat ng araw sa mga bundok"</string>
- <string name="spoken_emoji_1F305" msgid="9165812924292061196">"Pagsikat ng araw"</string>
+ <string name="spoken_emoji_1F304" msgid="2767148930689050040">"Sunrise sa mga bundok"</string>
+ <string name="spoken_emoji_1F305" msgid="9165812924292061196">"Sunrise"</string>
<string name="spoken_emoji_1F306" msgid="5889294736109193104">"Lungsod sa dapit-hapon"</string>
- <string name="spoken_emoji_1F307" msgid="2714290867291163713">"Paglubog ng araw sa mga gusali"</string>
+ <string name="spoken_emoji_1F307" msgid="2714290867291163713">"Sunset sa mga gusali"</string>
<string name="spoken_emoji_1F308" msgid="688704703985173377">"Bahaghari"</string>
<string name="spoken_emoji_1F309" msgid="6217981957992313528">"Tulay sa gabi"</string>
<string name="spoken_emoji_1F30A" msgid="4329309263152110893">"Alon ng tubig"</string>
diff --git a/java/res/values-tr/strings.xml b/java/res/values-tr/strings.xml
index d41ea6902..bfebd9789 100644
--- a/java/res/values-tr/strings.xml
+++ b/java/res/values-tr/strings.xml
@@ -62,14 +62,14 @@
<string name="use_double_space_period" msgid="8781529969425082860">"Çift boşlukla nokta ekle"</string>
<string name="use_double_space_period_summary" msgid="6532892187247952799">"Boşluk çubuğuna iki kez dokunmak nokta ve ardından bir boşluk ekler"</string>
<string name="auto_cap" msgid="1719746674854628252">"Otomatik büyük harf yap"</string>
- <string name="auto_cap_summary" msgid="7934452761022946874">"Her cümlenin ilk harfini büyük harf yap"</string>
+ <string name="auto_cap_summary" msgid="7934452761022946874">"Her cümlenin ilk harfini büyük harf yapar"</string>
<string name="edit_personal_dictionary" msgid="3996910038952940420">"Kişisel sözlük"</string>
<string name="configure_dictionaries_title" msgid="4238652338556902049">"Ek sözlükler"</string>
<string name="main_dictionary" msgid="4798763781818361168">"Ana sözlük"</string>
<string name="prefs_show_suggestions" msgid="8026799663445531637">"Düzeltme önerilerini göster"</string>
<string name="prefs_show_suggestions_summary" msgid="1583132279498502825">"Yazarken, önerilen kelimeleri görüntüle"</string>
<string name="prefs_block_potentially_offensive_title" msgid="5078480071057408934">"Rahatsız edici kelimeleri engelle"</string>
- <string name="prefs_block_potentially_offensive_summary" msgid="2371835479734991364">"Rahatsız edici olabilecek kelimeleri önerme"</string>
+ <string name="prefs_block_potentially_offensive_summary" msgid="2371835479734991364">"Rahatsız edici olabilecek kelimeleri önermez"</string>
<string name="auto_correction" msgid="7630720885194996950">"Otomatik düzelt"</string>
<string name="auto_correction_summary" msgid="5625751551134658006">"Boşluk tuşu ve noktalama işaretleri yanlış yazılan kelimeleri otomatikman düzeltir"</string>
<string name="auto_correction_threshold_mode_off" msgid="8470882665417944026">"Kapalı"</string>
@@ -77,7 +77,7 @@
<string name="auto_correction_threshold_mode_aggressive" msgid="7319007299148899623">"Geniş ölçekte"</string>
<string name="auto_correction_threshold_mode_very_aggressive" msgid="1853309024129480416">"Çok geniş ölçekte"</string>
<string name="bigram_prediction" msgid="1084449187723948550">"Sonraki kelime önerileri"</string>
- <string name="bigram_prediction_summary" msgid="3896362682751109677">"Öneride bulunurken önceki kelimeyi kullan"</string>
+ <string name="bigram_prediction_summary" msgid="3896362682751109677">"Öneride bulunurken önceki kelimeyi kullanır"</string>
<string name="gesture_input" msgid="826951152254563827">"Hareketle yazmayı etkinleştir"</string>
<string name="gesture_input_summary" msgid="9180350639305731231">"Kelime girmek için parmağınızı harflerin üzerinde kaydırın"</string>
<string name="gesture_preview_trail" msgid="3802333369335722221">"Hareket izini göster"</string>
diff --git a/java/src/com/android/inputmethod/latin/makedict/FormatSpec.java b/java/src/com/android/inputmethod/latin/makedict/FormatSpec.java
index e422c4cd2..288261bf0 100644
--- a/java/src/com/android/inputmethod/latin/makedict/FormatSpec.java
+++ b/java/src/com/android/inputmethod/latin/makedict/FormatSpec.java
@@ -174,6 +174,9 @@ public final class FormatSpec {
public static final int VERSION202 = 202;
// format version for Fava Dictionaries.
public static final int VERSION_DELIGHT3 = 86736212;
+ public static final int MINIMUM_SUPPORTED_VERSION_OF_CODE_POINT_TABLE = VERSION201;
+ // Dictionary version used for testing.
+ public static final int VERSION4_ONLY_FOR_TESTING = 399;
public static final int VERSION402 = 402;
public static final int VERSION403 = 403;
public static final int VERSION4 = VERSION403;
diff --git a/native/Android.mk b/native/Android.mk
deleted file mode 100644
index 5053e7d64..000000000
--- a/native/Android.mk
+++ /dev/null
@@ -1 +0,0 @@
-include $(call all-subdir-makefiles)
diff --git a/native/dicttoolkit/Android.bp b/native/dicttoolkit/Android.bp
new file mode 100644
index 000000000..b214ff984
--- /dev/null
+++ b/native/dicttoolkit/Android.bp
@@ -0,0 +1,94 @@
+// 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.
+
+cc_defaults {
+ name: "dicttoolkit_defaults",
+
+ cflags: [
+ "-Werror",
+ "-Wall",
+ "-Wextra",
+ "-Weffc++",
+ "-Wformat=2",
+ "-Wcast-qual",
+ "-Wcast-align",
+ "-Wwrite-strings",
+ "-Wfloat-equal",
+ "-Wpointer-arith",
+ "-Winit-self",
+ "-Wredundant-decls",
+ "-Woverloaded-virtual",
+ "-Wsign-promo",
+ "-Wno-system-headers",
+
+ // To suppress compiler warnings for unused variables/functions used for debug features etc.
+ "-Wno-unused-parameter",
+ "-Wno-unused-function",
+ ],
+
+ local_include_dirs: ["src"],
+ // TODO
+ include_dirs: ["packages/inputmethods/LatinIME/native/jni/src"],
+
+ product_variables: {
+ unbundled_build: {
+ enabled: false,
+ },
+ },
+}
+
+cc_library_host_static {
+ name: "liblatinime_dicttoolkit",
+ defaults: ["dicttoolkit_defaults"],
+
+ srcs: [
+ "src/command_executors/diff_executor.cpp",
+ "src/command_executors/header_executor.cpp",
+ "src/command_executors/help_executor.cpp",
+ "src/command_executors/info_executor.cpp",
+ "src/command_executors/makedict_executor.cpp",
+ "src/offdevice_intermediate_dict/offdevice_intermediate_dict.cpp",
+ "src/utils/arguments_parser.cpp",
+ "src/utils/command_utils.cpp",
+ "src/utils/utf8_utils.cpp",
+
+ ":LATIN_IME_CORE_SRC_FILES",
+ ],
+}
+
+cc_binary_host {
+ name: "dicttoolkit",
+ defaults: ["dicttoolkit_defaults"],
+
+ srcs: ["dict_toolkit_main.cpp"],
+ static_libs: ["liblatinime_dicttoolkit"],
+}
+
+cc_test_host {
+ name: "dicttoolkit_unittests",
+ defaults: ["dicttoolkit_defaults"],
+
+ srcs: [
+ "tests/command_executors/diff_executor_test.cpp",
+ "tests/command_executors/header_executor_test.cpp",
+ "tests/command_executors/info_executor_test.cpp",
+ "tests/command_executors/makedict_executor_test.cpp",
+ "tests/dict_toolkit_defines_test.cpp",
+ "tests/offdevice_intermediate_dict/offdevice_intermediate_dict_test.cpp",
+ "tests/utils/arguments_parser_test.cpp",
+ "tests/utils/command_utils_test.cpp",
+ "tests/utils/utf8_utils_test.cpp",
+ ],
+ static_libs: ["liblatinime_dicttoolkit"],
+}
diff --git a/native/dicttoolkit/Android.mk b/native/dicttoolkit/Android.mk
deleted file mode 100644
index 7a446860c..000000000
--- a/native/dicttoolkit/Android.mk
+++ /dev/null
@@ -1,66 +0,0 @@
-# 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.
-
-ifeq (,$(TARGET_BUILD_APPS))
-
-# Only build if it's explicitly requested, or running mm/mmm.
-ifneq ($(ONE_SHOT_MAKEFILE)$(filter $(MAKECMDGOALS),dicttoolkit),)
-
-# HACK: Temporarily disable host tool build on Mac until the build system is ready for C++11.
-LATINIME_HOST_OSNAME := $(shell uname -s)
-ifneq ($(LATINIME_HOST_OSNAME), Darwin) # TODO: Remove this
-
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LATIN_IME_CORE_PATH := $(LOCAL_PATH)/../jni
-
-LATIN_IME_DICT_TOOLKIT_SRC_DIR := src
-LATIN_IME_CORE_SRC_DIR := ../jni/src
-
-LOCAL_CFLAGS += -Werror -Wall -Wextra -Weffc++ -Wformat=2 -Wcast-qual -Wcast-align \
- -Wwrite-strings -Wfloat-equal -Wpointer-arith -Winit-self -Wredundant-decls \
- -Woverloaded-virtual -Wsign-promo -Wno-system-headers
-
-# To suppress compiler warnings for unused variables/functions used for debug features etc.
-LOCAL_CFLAGS += -Wno-unused-parameter -Wno-unused-function
-LOCAL_CFLAGS += -Wno-unused-parameter -Wno-unused-function
-
-include $(LOCAL_PATH)/NativeFileList.mk
-include $(LATIN_IME_CORE_PATH)/NativeFileList.mk
-
-LOCAL_C_INCLUDES += $(LOCAL_PATH)/$(LATIN_IME_DICT_TOOLKIT_SRC_DIR) \
- $(LATIN_IME_CORE_PATH)/$(LATIN_IME_CORE_SRC_DIR)
-
-LOCAL_SRC_FILES := $(LATIN_IME_DICT_TOOLKIT_MAIN_SRC_FILES) \
- $(addprefix $(LATIN_IME_DICT_TOOLKIT_SRC_DIR)/, $(LATIN_IME_DICT_TOOLKIT_SRC_FILES)) \
- $(addprefix $(LATIN_IME_CORE_SRC_DIR)/, $(LATIN_IME_CORE_SRC_FILES))
-
-LOCAL_MODULE := dicttoolkit
-LOCAL_MODULE_TAGS := optional
-
-LOCAL_CXX_STL := libc++
-
-include $(BUILD_HOST_EXECUTABLE)
-#################### Clean up the tmp vars
-include $(LOCAL_PATH)/CleanupNativeFileList.mk
-#################### Unit test
-include $(LOCAL_PATH)/UnitTests.mk
-
-endif # Darwin - TODO: Remove this
-
-endif
-
-endif # TARGET_BUILD_APPS
diff --git a/native/dicttoolkit/CleanupNativeFileList.mk b/native/dicttoolkit/CleanupNativeFileList.mk
deleted file mode 100644
index b804b41ed..000000000
--- a/native/dicttoolkit/CleanupNativeFileList.mk
+++ /dev/null
@@ -1,17 +0,0 @@
-# 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.
-
-LATIN_IME_DICT_TOOLKIT_MAIN_SRC_FILES :=
-LATIN_IME_DICT_TOOLKIT_SRC_FILES :=
-LATIN_IME_DICT_TOOLKIT_TEST_FILES :=
diff --git a/native/dicttoolkit/NativeFileList.mk b/native/dicttoolkit/NativeFileList.mk
deleted file mode 100644
index 9a547b054..000000000
--- a/native/dicttoolkit/NativeFileList.mk
+++ /dev/null
@@ -1,44 +0,0 @@
-# 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.
-
-LATIN_IME_DICT_TOOLKIT_MAIN_SRC_FILES := \
- dict_toolkit_main.cpp
-
-LATIN_IME_DICT_TOOLKIT_SRC_FILES := \
- $(addprefix command_executors/, \
- diff_executor.cpp \
- header_executor.cpp \
- help_executor.cpp \
- info_executor.cpp \
- makedict_executor.cpp) \
- $(addprefix offdevice_intermediate_dict/, \
- offdevice_intermediate_dict.cpp) \
- $(addprefix utils/, \
- arguments_parser.cpp \
- command_utils.cpp \
- utf8_utils.cpp)
-
-LATIN_IME_DICT_TOOLKIT_TEST_FILES := \
- $(addprefix command_executors/, \
- diff_executor_test.cpp \
- header_executor_test.cpp \
- info_executor_test.cpp \
- makedict_executor_test.cpp) \
- dict_toolkit_defines_test.cpp \
- $(addprefix offdevice_intermediate_dict/, \
- offdevice_intermediate_dict_test.cpp) \
- $(addprefix utils/, \
- arguments_parser_test.cpp \
- command_utils_test.cpp \
- utf8_utils_test.cpp)
diff --git a/native/dicttoolkit/UnitTests.mk b/native/dicttoolkit/UnitTests.mk
deleted file mode 100644
index 55177c084..000000000
--- a/native/dicttoolkit/UnitTests.mk
+++ /dev/null
@@ -1,65 +0,0 @@
-# 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.
-
-ifeq (,$(TARGET_BUILD_APPS))
-
-LOCAL_PATH := $(call my-dir)
-
-######################################
-include $(CLEAR_VARS)
-
-LATIN_IME_CORE_PATH := $(LOCAL_PATH)/../jni
-
-LATIN_IME_DICT_TOOLKIT_SRC_DIR := src
-LATIN_IME_CORE_SRC_DIR := ../jni/src
-LATIN_DICT_TOOLKIT_TEST_SRC_DIR := tests
-
-include $(LOCAL_PATH)/NativeFileList.mk
-include $(LATIN_IME_CORE_PATH)/NativeFileList.mk
-
-LATIN_IME_SRC_DIR := src
-LOCAL_ADDRESS_SANITIZER := true
-LOCAL_CFLAGS += -Wno-unused-parameter -Wno-unused-function
-LOCAL_CXX_STL := libc++
-LOCAL_C_INCLUDES += $(LOCAL_PATH)/$(LATIN_IME_DICT_TOOLKIT_SRC_DIR) \
- $(LATIN_IME_CORE_PATH)/$(LATIN_IME_CORE_SRC_DIR)
-LOCAL_MODULE := liblatinime_dicttoolkit_host_static_for_unittests
-LOCAL_MODULE_TAGS := optional
-LOCAL_SRC_FILES := \
- $(addprefix $(LATIN_IME_DICT_TOOLKIT_SRC_DIR)/, $(LATIN_IME_DICT_TOOLKIT_SRC_FILES)) \
- $(addprefix $(LATIN_IME_CORE_SRC_DIR)/, $(LATIN_IME_CORE_SRC_FILES))
-include $(BUILD_HOST_STATIC_LIBRARY)
-
-include $(CLEAR_VARS)
-
-LOCAL_ADDRESS_SANITIZER := true
-LOCAL_CFLAGS += -Wno-unused-parameter -Wno-unused-function
-LOCAL_CXX_STL := libc++
-LOCAL_C_INCLUDES += $(LOCAL_PATH)/$(LATIN_IME_DICT_TOOLKIT_SRC_DIR) \
- $(LATIN_IME_CORE_PATH)/$(LATIN_IME_CORE_SRC_DIR)
-LOCAL_MODULE := dicttoolkit_unittests
-LOCAL_MODULE_TAGS := tests
-LOCAL_SRC_FILES := \
- $(addprefix $(LATIN_DICT_TOOLKIT_TEST_SRC_DIR)/, $(LATIN_IME_DICT_TOOLKIT_TEST_FILES))
-LOCAL_STATIC_LIBRARIES += liblatinime_dicttoolkit_host_static_for_unittests
-include $(BUILD_HOST_NATIVE_TEST)
-
-include $(LOCAL_PATH)/CleanupNativeFileList.mk
-
-#################### Clean up the tmp vars
-LATINIME_HOST_OSNAME :=
-LATIN_IME_SRC_DIR :=
-LATIN_IME_TEST_SRC_DIR :=
-
-endif # TARGET_BUILD_APPS
diff --git a/native/dicttoolkit/src/offdevice_intermediate_dict/offdevice_intermediate_dict.h b/native/dicttoolkit/src/offdevice_intermediate_dict/offdevice_intermediate_dict.h
index 13d26ba91..ea17a31d3 100644
--- a/native/dicttoolkit/src/offdevice_intermediate_dict/offdevice_intermediate_dict.h
+++ b/native/dicttoolkit/src/offdevice_intermediate_dict/offdevice_intermediate_dict.h
@@ -20,7 +20,7 @@
#include "dict_toolkit_defines.h"
#include "offdevice_intermediate_dict/offdevice_intermediate_dict_header.h"
#include "offdevice_intermediate_dict/offdevice_intermediate_dict_pt_node_array.h"
-#include "suggest/core/dictionary/property/word_property.h"
+#include "dictionary/property/word_property.h"
#include "utils/int_array_view.h"
namespace latinime {
diff --git a/native/dicttoolkit/src/offdevice_intermediate_dict/offdevice_intermediate_dict_pt_node.h b/native/dicttoolkit/src/offdevice_intermediate_dict/offdevice_intermediate_dict_pt_node.h
index 721ccd778..e7d7e13eb 100644
--- a/native/dicttoolkit/src/offdevice_intermediate_dict/offdevice_intermediate_dict_pt_node.h
+++ b/native/dicttoolkit/src/offdevice_intermediate_dict/offdevice_intermediate_dict_pt_node.h
@@ -21,7 +21,7 @@
#include "dict_toolkit_defines.h"
#include "offdevice_intermediate_dict/offdevice_intermediate_dict_pt_node_array.h"
-#include "suggest/core/dictionary/property/word_property.h"
+#include "dictionary/property/word_property.h"
#include "utils/int_array_view.h"
namespace latinime {
diff --git a/native/dicttoolkit/tests/offdevice_intermediate_dict/offdevice_intermediate_dict_test.cpp b/native/dicttoolkit/tests/offdevice_intermediate_dict/offdevice_intermediate_dict_test.cpp
index f2e24ab5f..89598de60 100644
--- a/native/dicttoolkit/tests/offdevice_intermediate_dict/offdevice_intermediate_dict_test.cpp
+++ b/native/dicttoolkit/tests/offdevice_intermediate_dict/offdevice_intermediate_dict_test.cpp
@@ -20,7 +20,7 @@
#include <vector>
-#include "suggest/core/dictionary/property/word_property.h"
+#include "dictionary/property/word_property.h"
#include "utils/int_array_view.h"
namespace latinime {
diff --git a/native/jni/Android.bp b/native/jni/Android.bp
new file mode 100644
index 000000000..3bf70ad49
--- /dev/null
+++ b/native/jni/Android.bp
@@ -0,0 +1,213 @@
+// 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.
+
+filegroup {
+ name: "LATIN_IME_CORE_SRC_FILES",
+ srcs: [
+ "src/dictionary/header/header_policy.cpp",
+ "src/dictionary/header/header_read_write_utils.cpp",
+ "src/dictionary/property/ngram_context.cpp",
+ "src/dictionary/structure/dictionary_structure_with_buffer_policy_factory.cpp",
+ "src/dictionary/structure/pt_common/bigram/bigram_list_read_write_utils.cpp",
+ "src/dictionary/structure/pt_common/dynamic_pt_gc_event_listeners.cpp",
+ "src/dictionary/structure/pt_common/dynamic_pt_reading_helper.cpp",
+ "src/dictionary/structure/pt_common/dynamic_pt_reading_utils.cpp",
+ "src/dictionary/structure/pt_common/dynamic_pt_updating_helper.cpp",
+ "src/dictionary/structure/pt_common/dynamic_pt_writing_utils.cpp",
+ "src/dictionary/structure/pt_common/patricia_trie_reading_utils.cpp",
+ "src/dictionary/structure/pt_common/shortcut/shortcut_list_reading_utils.cpp",
+ "src/dictionary/structure/v2/patricia_trie_policy.cpp",
+ "src/dictionary/structure/v2/ver2_patricia_trie_node_reader.cpp",
+ "src/dictionary/structure/v2/ver2_pt_node_array_reader.cpp",
+ "src/dictionary/structure/v4/ver4_dict_buffers.cpp",
+ "src/dictionary/structure/v4/ver4_dict_constants.cpp",
+ "src/dictionary/structure/v4/ver4_patricia_trie_node_reader.cpp",
+ "src/dictionary/structure/v4/ver4_patricia_trie_node_writer.cpp",
+ "src/dictionary/structure/v4/ver4_patricia_trie_policy.cpp",
+ "src/dictionary/structure/v4/ver4_patricia_trie_reading_utils.cpp",
+ "src/dictionary/structure/v4/ver4_patricia_trie_writing_helper.cpp",
+ "src/dictionary/structure/v4/ver4_pt_node_array_reader.cpp",
+ "src/dictionary/structure/v4/content/dynamic_language_model_probability_utils.cpp",
+ "src/dictionary/structure/v4/content/language_model_dict_content.cpp",
+ "src/dictionary/structure/v4/content/language_model_dict_content_global_counters.cpp",
+ "src/dictionary/structure/v4/content/shortcut_dict_content.cpp",
+ "src/dictionary/structure/v4/content/sparse_table_dict_content.cpp",
+ "src/dictionary/structure/v4/content/terminal_position_lookup_table.cpp",
+ "src/dictionary/utils/buffer_with_extendable_buffer.cpp",
+ "src/dictionary/utils/byte_array_utils.cpp",
+ "src/dictionary/utils/dict_file_writing_utils.cpp",
+ "src/dictionary/utils/file_utils.cpp",
+ "src/dictionary/utils/forgetting_curve_utils.cpp",
+ "src/dictionary/utils/format_utils.cpp",
+ "src/dictionary/utils/mmapped_buffer.cpp",
+ "src/dictionary/utils/multi_bigram_map.cpp",
+ "src/dictionary/utils/probability_utils.cpp",
+ "src/dictionary/utils/sparse_table.cpp",
+ "src/dictionary/utils/trie_map.cpp",
+ "src/suggest/core/suggest.cpp",
+ "src/suggest/core/dicnode/dic_node.cpp",
+ "src/suggest/core/dicnode/dic_node_utils.cpp",
+ "src/suggest/core/dicnode/dic_nodes_cache.cpp",
+ "src/suggest/core/dictionary/dictionary.cpp",
+ "src/suggest/core/dictionary/dictionary_utils.cpp",
+ "src/suggest/core/dictionary/digraph_utils.cpp",
+ "src/suggest/core/dictionary/error_type_utils.cpp",
+ "src/suggest/core/layout/additional_proximity_chars.cpp",
+ "src/suggest/core/layout/proximity_info.cpp",
+ "src/suggest/core/layout/proximity_info_params.cpp",
+ "src/suggest/core/layout/proximity_info_state.cpp",
+ "src/suggest/core/layout/proximity_info_state_utils.cpp",
+ "src/suggest/core/policy/weighting.cpp",
+ "src/suggest/core/session/dic_traverse_session.cpp",
+ "src/suggest/core/result/suggestion_results.cpp",
+ "src/suggest/core/result/suggestions_output_utils.cpp",
+ "src/suggest/policyimpl/gesture/gesture_suggest_policy_factory.cpp",
+ "src/suggest/policyimpl/typing/scoring_params.cpp",
+ "src/suggest/policyimpl/typing/typing_scoring.cpp",
+ "src/suggest/policyimpl/typing/typing_suggest_policy.cpp",
+ "src/suggest/policyimpl/typing/typing_traversal.cpp",
+ "src/suggest/policyimpl/typing/typing_weighting.cpp",
+ "src/utils/autocorrection_threshold_utils.cpp",
+ "src/utils/char_utils.cpp",
+ "src/utils/jni_data_utils.cpp",
+ "src/utils/log_utils.cpp",
+ "src/utils/time_keeper.cpp",
+
+ // BACKWARD_V402
+ "src/dictionary/structure/backward/v402/ver4_dict_buffers.cpp",
+ "src/dictionary/structure/backward/v402/ver4_dict_constants.cpp",
+ "src/dictionary/structure/backward/v402/ver4_patricia_trie_node_reader.cpp",
+ "src/dictionary/structure/backward/v402/ver4_patricia_trie_node_writer.cpp",
+ "src/dictionary/structure/backward/v402/ver4_patricia_trie_policy.cpp",
+ "src/dictionary/structure/backward/v402/ver4_patricia_trie_reading_utils.cpp",
+ "src/dictionary/structure/backward/v402/ver4_patricia_trie_writing_helper.cpp",
+ "src/dictionary/structure/backward/v402/ver4_pt_node_array_reader.cpp",
+ "src/dictionary/structure/backward/v402/content/bigram_dict_content.cpp",
+ "src/dictionary/structure/backward/v402/content/probability_dict_content.cpp",
+ "src/dictionary/structure/backward/v402/content/shortcut_dict_content.cpp",
+ "src/dictionary/structure/backward/v402/content/sparse_table_dict_content.cpp",
+ "src/dictionary/structure/backward/v402/content/terminal_position_lookup_table.cpp",
+ "src/dictionary/structure/backward/v402/bigram/ver4_bigram_list_policy.cpp",
+ ],
+}
+
+cc_library {
+ name: "libjni_latinime",
+ host_supported: true,
+
+ sdk_version: "14",
+ cflags: [
+ "-Werror",
+ "-Wall",
+ "-Wextra",
+ "-Weffc++",
+ "-Wformat=2",
+ "-Wcast-qual",
+ "-Wcast-align",
+ "-Wwrite-strings",
+ "-Wfloat-equal",
+ "-Wpointer-arith",
+ "-Winit-self",
+ "-Wredundant-decls",
+ "-Woverloaded-virtual",
+ "-Wsign-promo",
+ "-Wno-system-headers",
+
+ // To suppress compiler warnings for unused variables/functions used for debug features etc.
+ "-Wno-unused-parameter",
+ "-Wno-unused-function",
+ ],
+ local_include_dirs: ["src"],
+
+ srcs: [
+ "com_android_inputmethod_keyboard_ProximityInfo.cpp",
+ "com_android_inputmethod_latin_BinaryDictionary.cpp",
+ "com_android_inputmethod_latin_BinaryDictionaryUtils.cpp",
+ "com_android_inputmethod_latin_DicTraverseSession.cpp",
+ "jni_common.cpp",
+
+ ":LATIN_IME_CORE_SRC_FILES",
+ ],
+
+ target: {
+ android_x86: {
+ // HACK: -mstackrealign is required for x86 builds running on pre-KitKat devices to avoid crashes
+ // with SSE instructions.
+ cflags: ["-mstackrealign"],
+ },
+ android: {
+ stl: "libc++_static",
+ },
+ host: {
+ cflags: ["-DHOST_TOOL"],
+ },
+ },
+}
+
+cc_library_static {
+ name: "liblatinime_static_for_unittests",
+ host_supported: true,
+
+ cflags: [
+ "-Wno-unused-parameter",
+ "-Wno-unused-function",
+ "-Wall",
+ "-Werror",
+ ],
+ local_include_dirs: ["src"],
+ sdk_version: "14",
+ stl: "libc++_static",
+
+ srcs: [":LATIN_IME_CORE_SRC_FILES"],
+}
+
+cc_test {
+ name: "liblatinime_unittests",
+ host_supported: true,
+
+ cflags: [
+ "-Wno-unused-parameter",
+ "-Wno-unused-function",
+ "-Wall",
+ "-Werror",
+ ],
+ local_include_dirs: ["src"],
+ sdk_version: "14",
+ stl: "libc++_static",
+
+ srcs: [
+ "tests/defines_test.cpp",
+ "tests/dictionary/header/header_read_write_utils_test.cpp",
+ "tests/dictionary/structure/v4/content/language_model_dict_content_test.cpp",
+ "tests/dictionary/structure/v4/content/language_model_dict_content_global_counters_test.cpp",
+ "tests/dictionary/structure/v4/content/probability_entry_test.cpp",
+ "tests/dictionary/structure/v4/content/terminal_position_lookup_table_test.cpp",
+ "tests/dictionary/utils/bloom_filter_test.cpp",
+ "tests/dictionary/utils/buffer_with_extendable_buffer_test.cpp",
+ "tests/dictionary/utils/byte_array_utils_test.cpp",
+ "tests/dictionary/utils/format_utils_test.cpp",
+ "tests/dictionary/utils/probability_utils_test.cpp",
+ "tests/dictionary/utils/sparse_table_test.cpp",
+ "tests/dictionary/utils/trie_map_test.cpp",
+ "tests/suggest/core/dicnode/dic_node_pool_test.cpp",
+ "tests/suggest/core/layout/geometry_utils_test.cpp",
+ "tests/suggest/core/layout/normal_distribution_2d_test.cpp",
+ "tests/suggest/policyimpl/utils/damerau_levenshtein_edit_distance_policy_test.cpp",
+ "tests/utils/autocorrection_threshold_utils_test.cpp",
+ "tests/utils/char_utils_test.cpp",
+ "tests/utils/int_array_view_test.cpp",
+ "tests/utils/time_keeper_test.cpp",
+ ],
+ static_libs: ["liblatinime_static_for_unittests"],
+}
diff --git a/native/jni/Android.mk b/native/jni/Android.mk
deleted file mode 100644
index 53846485f..000000000
--- a/native/jni/Android.mk
+++ /dev/null
@@ -1,103 +0,0 @@
-# Copyright (C) 2011 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.
-
-LOCAL_PATH := $(call my-dir)
-
-############ some local flags
-# If you change any of those flags, you need to rebuild both libjni_latinime_common_static
-# and the shared library that uses libjni_latinime_common_static.
-FLAG_DBG ?= false
-FLAG_DO_PROFILE ?= false
-
-######################################
-include $(CLEAR_VARS)
-
-LATIN_IME_SRC_DIR := src
-
-LOCAL_C_INCLUDES += $(LOCAL_PATH)/$(LATIN_IME_SRC_DIR)
-
-LOCAL_CFLAGS += -Werror -Wall -Wextra -Weffc++ -Wformat=2 -Wcast-qual -Wcast-align \
- -Wwrite-strings -Wfloat-equal -Wpointer-arith -Winit-self -Wredundant-decls \
- -Woverloaded-virtual -Wsign-promo -Wno-system-headers
-
-# To suppress compiler warnings for unused variables/functions used for debug features etc.
-LOCAL_CFLAGS += -Wno-unused-parameter -Wno-unused-function
-
-# HACK: -mstackrealign is required for x86 builds running on pre-KitKat devices to avoid crashes
-# with SSE instructions.
-ifeq ($(TARGET_ARCH), x86)
- LOCAL_CFLAGS += -mstackrealign
-endif # x86
-
-include $(LOCAL_PATH)/NativeFileList.mk
-
-LOCAL_SRC_FILES := \
- $(LATIN_IME_JNI_SRC_FILES) \
- $(addprefix $(LATIN_IME_SRC_DIR)/, $(LATIN_IME_CORE_SRC_FILES))
-
-ifeq ($(FLAG_DO_PROFILE), true)
- $(warning Making profiling version of native library)
- LOCAL_CFLAGS += -DFLAG_DO_PROFILE -funwind-tables
-else # FLAG_DO_PROFILE
-ifeq ($(FLAG_DBG), true)
- $(warning Making debug version of native library)
- LOCAL_CFLAGS += -DFLAG_DBG -funwind-tables -fno-inline
-ifeq ($(FLAG_FULL_DBG), true)
- $(warning Making full debug version of native library)
- LOCAL_CFLAGS += -DFLAG_FULL_DBG
-endif # FLAG_FULL_DBG
-endif # FLAG_DBG
-endif # FLAG_DO_PROFILE
-
-LOCAL_MODULE := libjni_latinime_common_static
-LOCAL_MODULE_TAGS := optional
-
-LOCAL_SDK_VERSION := 14
-LOCAL_NDK_STL_VARIANT := c++_static
-
-include $(BUILD_STATIC_LIBRARY)
-######################################
-include $(CLEAR_VARS)
-
-# All code in LOCAL_WHOLE_STATIC_LIBRARIES will be built into this shared library.
-LOCAL_WHOLE_STATIC_LIBRARIES := libjni_latinime_common_static
-
-ifeq ($(FLAG_DO_PROFILE), true)
- $(warning Making profiling version of native library)
- LOCAL_LDFLAGS += -llog
-else # FLAG_DO_PROFILE
-ifeq ($(FLAG_DBG), true)
- $(warning Making debug version of native library)
- LOCAL_LDFLAGS += -llog
-endif # FLAG_DBG
-endif # FLAG_DO_PROFILE
-
-LOCAL_MODULE := libjni_latinime
-LOCAL_MODULE_TAGS := optional
-
-LOCAL_SDK_VERSION := 14
-LOCAL_NDK_STL_VARIANT := c++_static
-LOCAL_CFLAGS := -Wall -Werror
-LOCAL_LDFLAGS += -ldl
-
-include $(BUILD_SHARED_LIBRARY)
-#################### Clean up the tmp vars
-include $(LOCAL_PATH)/CleanupNativeFileList.mk
-
-#################### Unit test on host environment
-include $(LOCAL_PATH)/HostUnitTests.mk
-
-#################### Unit test on target environment
-include $(LOCAL_PATH)/TargetUnitTests.mk
-//LOCAL_CFLAGS += -Wall -Werror
diff --git a/native/jni/Application.mk b/native/jni/Application.mk
deleted file mode 100644
index ce095350e..000000000
--- a/native/jni/Application.mk
+++ /dev/null
@@ -1 +0,0 @@
-APP_STL := c++_static
diff --git a/native/jni/CleanupNativeFileList.mk b/native/jni/CleanupNativeFileList.mk
deleted file mode 100644
index eed6f1e63..000000000
--- a/native/jni/CleanupNativeFileList.mk
+++ /dev/null
@@ -1,19 +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.
-
-LATIN_IME_CORE_SRC_FILES :=
-LATIN_IME_CORE_SRC_FILES_BACKWARD_V401 :=
-LATIN_IME_CORE_TEST_FILES :=
-LATIN_IME_JNI_SRC_FILES :=
-LATIN_IME_SRC_DIR :=
diff --git a/native/jni/HostUnitTests.mk b/native/jni/HostUnitTests.mk
deleted file mode 100644
index 94cd764b4..000000000
--- a/native/jni/HostUnitTests.mk
+++ /dev/null
@@ -1,63 +0,0 @@
-# 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.
-
-# Host build is never supported in unbundled (NDK/tapas) build
-ifeq (,$(TARGET_BUILD_APPS))
-
-# HACK: Temporarily disable host tool build on Mac until the build system is ready for C++11.
-LATINIME_HOST_OSNAME := $(shell uname -s)
-ifneq ($(LATINIME_HOST_OSNAME), Darwin) # TODO: Remove this
-
-LOCAL_PATH := $(call my-dir)
-
-######################################
-include $(CLEAR_VARS)
-
-include $(LOCAL_PATH)/NativeFileList.mk
-
-#################### Host library for unit test
-LATIN_IME_SRC_DIR := src
-LOCAL_ADDRESS_SANITIZER := true
-LOCAL_CFLAGS += -Wno-unused-parameter -Wno-unused-function -Wall -Werror
-LOCAL_CXX_STL := libc++
-LOCAL_C_INCLUDES += $(LOCAL_PATH)/$(LATIN_IME_SRC_DIR)
-LOCAL_MODULE := liblatinime_host_static_for_unittests
-LOCAL_MODULE_TAGS := optional
-LOCAL_SRC_FILES := $(addprefix $(LATIN_IME_SRC_DIR)/, $(LATIN_IME_CORE_SRC_FILES))
-include $(BUILD_HOST_STATIC_LIBRARY)
-
-#################### Host native tests
-include $(CLEAR_VARS)
-LATIN_IME_TEST_SRC_DIR := tests
-LOCAL_ADDRESS_SANITIZER := true
-LOCAL_CFLAGS += -Wno-unused-parameter -Wno-unused-function
-LOCAL_CFLAGS += -Wall -Werror
-LOCAL_CXX_STL := libc++
-LOCAL_C_INCLUDES += $(LOCAL_PATH)/$(LATIN_IME_SRC_DIR)
-LOCAL_MODULE := liblatinime_host_unittests
-LOCAL_MODULE_TAGS := tests
-LOCAL_SRC_FILES := $(addprefix $(LATIN_IME_TEST_SRC_DIR)/, $(LATIN_IME_CORE_TEST_FILES))
-LOCAL_STATIC_LIBRARIES += liblatinime_host_static_for_unittests
-include $(BUILD_HOST_NATIVE_TEST)
-
-include $(LOCAL_PATH)/CleanupNativeFileList.mk
-
-endif # Darwin - TODO: Remove this
-
-endif # TARGET_BUILD_APPS
-
-#################### Clean up the tmp vars
-LATINIME_HOST_OSNAME :=
-LATIN_IME_SRC_DIR :=
-LATIN_IME_TEST_SRC_DIR :=
diff --git a/native/jni/NativeFileList.mk b/native/jni/NativeFileList.mk
deleted file mode 100644
index d8b69bfd7..000000000
--- a/native/jni/NativeFileList.mk
+++ /dev/null
@@ -1,146 +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.
-
-LATIN_IME_JNI_SRC_FILES := \
- com_android_inputmethod_keyboard_ProximityInfo.cpp \
- com_android_inputmethod_latin_BinaryDictionary.cpp \
- com_android_inputmethod_latin_BinaryDictionaryUtils.cpp \
- com_android_inputmethod_latin_DicTraverseSession.cpp \
- jni_common.cpp
-
-LATIN_IME_CORE_SRC_FILES := \
- $(addprefix dictionary/header/, \
- header_policy.cpp \
- header_read_write_utils.cpp) \
- dictionary/property/ngram_context.cpp \
- dictionary/structure/dictionary_structure_with_buffer_policy_factory.cpp \
- $(addprefix dictionary/structure/pt_common/, \
- bigram/bigram_list_read_write_utils.cpp \
- dynamic_pt_gc_event_listeners.cpp \
- dynamic_pt_reading_helper.cpp \
- dynamic_pt_reading_utils.cpp \
- dynamic_pt_updating_helper.cpp \
- dynamic_pt_writing_utils.cpp \
- patricia_trie_reading_utils.cpp \
- shortcut/shortcut_list_reading_utils.cpp) \
- $(addprefix dictionary/structure/v2/, \
- patricia_trie_policy.cpp \
- ver2_patricia_trie_node_reader.cpp \
- ver2_pt_node_array_reader.cpp) \
- $(addprefix dictionary/structure/v4/, \
- ver4_dict_buffers.cpp \
- ver4_dict_constants.cpp \
- ver4_patricia_trie_node_reader.cpp \
- ver4_patricia_trie_node_writer.cpp \
- ver4_patricia_trie_policy.cpp \
- ver4_patricia_trie_reading_utils.cpp \
- ver4_patricia_trie_writing_helper.cpp \
- ver4_pt_node_array_reader.cpp) \
- $(addprefix dictionary/structure/v4/content/, \
- dynamic_language_model_probability_utils.cpp \
- language_model_dict_content.cpp \
- language_model_dict_content_global_counters.cpp \
- shortcut_dict_content.cpp \
- sparse_table_dict_content.cpp \
- terminal_position_lookup_table.cpp) \
- $(addprefix dictionary/utils/, \
- buffer_with_extendable_buffer.cpp \
- byte_array_utils.cpp \
- dict_file_writing_utils.cpp \
- file_utils.cpp \
- forgetting_curve_utils.cpp \
- format_utils.cpp \
- mmapped_buffer.cpp \
- multi_bigram_map.cpp \
- probability_utils.cpp \
- sparse_table.cpp \
- trie_map.cpp ) \
- suggest/core/suggest.cpp \
- $(addprefix suggest/core/dicnode/, \
- dic_node.cpp \
- dic_node_utils.cpp \
- dic_nodes_cache.cpp) \
- $(addprefix suggest/core/dictionary/, \
- dictionary.cpp \
- dictionary_utils.cpp \
- digraph_utils.cpp \
- error_type_utils.cpp ) \
- $(addprefix suggest/core/layout/, \
- additional_proximity_chars.cpp \
- proximity_info.cpp \
- proximity_info_params.cpp \
- proximity_info_state.cpp \
- proximity_info_state_utils.cpp) \
- suggest/core/policy/weighting.cpp \
- suggest/core/session/dic_traverse_session.cpp \
- $(addprefix suggest/core/result/, \
- suggestion_results.cpp \
- suggestions_output_utils.cpp) \
- suggest/policyimpl/gesture/gesture_suggest_policy_factory.cpp \
- $(addprefix suggest/policyimpl/typing/, \
- scoring_params.cpp \
- typing_scoring.cpp \
- typing_suggest_policy.cpp \
- typing_traversal.cpp \
- typing_weighting.cpp) \
- $(addprefix utils/, \
- autocorrection_threshold_utils.cpp \
- char_utils.cpp \
- jni_data_utils.cpp \
- log_utils.cpp \
- time_keeper.cpp)
-
-LATIN_IME_CORE_SRC_FILES_BACKWARD_V402 := \
- $(addprefix dictionary/structure/backward/v402/, \
- ver4_dict_buffers.cpp \
- ver4_dict_constants.cpp \
- ver4_patricia_trie_node_reader.cpp \
- ver4_patricia_trie_node_writer.cpp \
- ver4_patricia_trie_policy.cpp \
- ver4_patricia_trie_reading_utils.cpp \
- ver4_patricia_trie_writing_helper.cpp \
- ver4_pt_node_array_reader.cpp) \
- $(addprefix dictionary/structure/backward/v402/content/, \
- bigram_dict_content.cpp \
- probability_dict_content.cpp \
- shortcut_dict_content.cpp \
- sparse_table_dict_content.cpp \
- terminal_position_lookup_table.cpp) \
- $(addprefix dictionary/structure/backward/v402/bigram/, \
- ver4_bigram_list_policy.cpp)
-
-LATIN_IME_CORE_SRC_FILES += $(LATIN_IME_CORE_SRC_FILES_BACKWARD_V402)
-
-LATIN_IME_CORE_TEST_FILES := \
- defines_test.cpp \
- dictionary/header/header_read_write_utils_test.cpp \
- dictionary/structure/v4/content/language_model_dict_content_test.cpp \
- dictionary/structure/v4/content/language_model_dict_content_global_counters_test.cpp \
- dictionary/structure/v4/content/probability_entry_test.cpp \
- dictionary/structure/v4/content/terminal_position_lookup_table_test.cpp \
- dictionary/utils/bloom_filter_test.cpp \
- dictionary/utils/buffer_with_extendable_buffer_test.cpp \
- dictionary/utils/byte_array_utils_test.cpp \
- dictionary/utils/format_utils_test.cpp \
- dictionary/utils/probability_utils_test.cpp \
- dictionary/utils/sparse_table_test.cpp \
- dictionary/utils/trie_map_test.cpp \
- suggest/core/dicnode/dic_node_pool_test.cpp \
- suggest/core/layout/geometry_utils_test.cpp \
- suggest/core/layout/normal_distribution_2d_test.cpp \
- suggest/policyimpl/utils/damerau_levenshtein_edit_distance_policy_test.cpp \
- utils/autocorrection_threshold_utils_test.cpp \
- utils/char_utils_test.cpp \
- utils/int_array_view_test.cpp \
- utils/time_keeper_test.cpp
diff --git a/native/jni/TargetUnitTests.mk b/native/jni/TargetUnitTests.mk
deleted file mode 100644
index 32aada057..000000000
--- a/native/jni/TargetUnitTests.mk
+++ /dev/null
@@ -1,50 +0,0 @@
-# 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.
-
-LOCAL_PATH := $(call my-dir)
-
-######################################
-include $(CLEAR_VARS)
-
-include $(LOCAL_PATH)/NativeFileList.mk
-
-#################### Target library for unit test
-LATIN_IME_SRC_DIR := src
-LOCAL_CFLAGS += -Wno-unused-parameter -Wno-unused-function -Wall -Werror
-LOCAL_C_INCLUDES += $(LOCAL_PATH)/$(LATIN_IME_SRC_DIR)
-LOCAL_MODULE := liblatinime_target_static_for_unittests
-LOCAL_MODULE_TAGS := optional
-LOCAL_SRC_FILES := $(addprefix $(LATIN_IME_SRC_DIR)/, $(LATIN_IME_CORE_SRC_FILES))
-LOCAL_SDK_VERSION := 14
-LOCAL_NDK_STL_VARIANT := c++_static
-include $(BUILD_STATIC_LIBRARY)
-
-#################### Target native tests
-include $(CLEAR_VARS)
-LATIN_IME_TEST_SRC_DIR := tests
-LOCAL_CFLAGS += -Wno-unused-parameter -Wno-unused-function -Wall -Werror
-LOCAL_C_INCLUDES += $(LOCAL_PATH)/$(LATIN_IME_SRC_DIR)
-LOCAL_MODULE := liblatinime_target_unittests
-LOCAL_MODULE_TAGS := tests
-LOCAL_SRC_FILES := \
- $(addprefix $(LATIN_IME_TEST_SRC_DIR)/, $(LATIN_IME_CORE_TEST_FILES))
-LOCAL_STATIC_LIBRARIES += liblatinime_target_static_for_unittests
-LOCAL_SDK_VERSION := 14
-LOCAL_NDK_STL_VARIANT := c++_static
-include $(BUILD_NATIVE_TEST)
-
-#################### Clean up the tmp vars
-LATIN_IME_SRC_DIR :=
-LATIN_IME_TEST_SRC_DIR :=
-include $(LOCAL_PATH)/CleanupNativeFileList.mk
diff --git a/native/jni/src/dictionary/utils/binary_dictionary_bigrams_iterator.h b/native/jni/src/dictionary/utils/binary_dictionary_bigrams_iterator.h
index 8a614730b..a30336475 100644
--- a/native/jni/src/dictionary/utils/binary_dictionary_bigrams_iterator.h
+++ b/native/jni/src/dictionary/utils/binary_dictionary_bigrams_iterator.h
@@ -35,7 +35,7 @@ class BinaryDictionaryBigramsIterator {
mBigramPos(NOT_A_DICT_POS), mProbability(NOT_A_PROBABILITY),
mHasNext(pos != NOT_A_DICT_POS) {}
- BinaryDictionaryBigramsIterator(BinaryDictionaryBigramsIterator &&bigramsIterator)
+ BinaryDictionaryBigramsIterator(BinaryDictionaryBigramsIterator &&bigramsIterator) noexcept
: mBigramsStructurePolicy(bigramsIterator.mBigramsStructurePolicy),
mPos(bigramsIterator.mPos), mBigramPos(bigramsIterator.mBigramPos),
mProbability(bigramsIterator.mProbability), mHasNext(bigramsIterator.mHasNext) {}
diff --git a/native/jni/src/dictionary/utils/binary_dictionary_shortcut_iterator.h b/native/jni/src/dictionary/utils/binary_dictionary_shortcut_iterator.h
index a4ddd58c2..e14805e37 100644
--- a/native/jni/src/dictionary/utils/binary_dictionary_shortcut_iterator.h
+++ b/native/jni/src/dictionary/utils/binary_dictionary_shortcut_iterator.h
@@ -31,7 +31,7 @@ class BinaryDictionaryShortcutIterator {
mPos(shortcutStructurePolicy->getStartPos(shortcutPos)),
mHasNextShortcutTarget(shortcutPos != NOT_A_DICT_POS) {}
- BinaryDictionaryShortcutIterator(const BinaryDictionaryShortcutIterator &&shortcutIterator)
+ BinaryDictionaryShortcutIterator(const BinaryDictionaryShortcutIterator &&shortcutIterator) noexcept
: mShortcutStructurePolicy(shortcutIterator.mShortcutStructurePolicy),
mPos(shortcutIterator.mPos),
mHasNextShortcutTarget(shortcutIterator.mHasNextShortcutTarget) {}
diff --git a/tests/Android.bp b/tests/Android.bp
new file mode 100644
index 000000000..a99cc5b41
--- /dev/null
+++ b/tests/Android.bp
@@ -0,0 +1,44 @@
+// Copyright (C) 2011 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.
+
+android_test {
+ name: "LatinIMETests",
+
+ certificate: "shared",
+
+ aaptflags: [
+ // Do not compress dictionary files to mmap dict data runtime
+ "-0 .dict",
+
+ // Do not compress test data file
+ "-0 .txt",
+ ],
+
+ static_libs: [
+ "android-support-test",
+ "mockito-target-minus-junit4",
+ ],
+ libs: [
+ "android.test.mock.stubs",
+ "android.test.runner.stubs",
+ "android.test.base.stubs",
+ ],
+
+ // Include all test java files.
+ srcs: ["src/**/*.java"],
+
+ instrumentation_for: "LatinIME",
+
+ sdk_version: "current",
+}
diff --git a/tests/Android.mk b/tests/Android.mk
deleted file mode 100644
index 7c0bb4f71..000000000
--- a/tests/Android.mk
+++ /dev/null
@@ -1,46 +0,0 @@
-# Copyright (C) 2011 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.
-
-LOCAL_PATH := $(call my-dir)
-include $(CLEAR_VARS)
-
-# We only want this apk build for tests.
-LOCAL_MODULE_TAGS := tests
-LOCAL_CERTIFICATE := shared
-
-# Do not compress dictionary files to mmap dict data runtime
-LOCAL_AAPT_FLAGS += -0 .dict
-# Do not compress test data file
-LOCAL_AAPT_FLAGS += -0 .txt
-
-LOCAL_STATIC_JAVA_LIBRARIES := \
- android-support-test \
- mockito-target-minus-junit4
-
-LOCAL_JAVA_LIBRARIES := \
- android.test.mock.stubs \
- android.test.runner.stubs \
- android.test.base.stubs \
-
-
-# Include all test java files.
-LOCAL_SRC_FILES := $(call all-java-files-under, src)
-
-LOCAL_PACKAGE_NAME := LatinIMETests
-
-LOCAL_INSTRUMENTATION_FOR := LatinIME
-
-LOCAL_SDK_VERSION := current
-
-include $(BUILD_PACKAGE)
diff --git a/tests/src/com/android/inputmethod/latin/makedict/BinaryDictDecoderEncoderTests.java b/tests/src/com/android/inputmethod/latin/makedict/BinaryDictDecoderEncoderTests.java
new file mode 100644
index 000000000..39da9fcd6
--- /dev/null
+++ b/tests/src/com/android/inputmethod/latin/makedict/BinaryDictDecoderEncoderTests.java
@@ -0,0 +1,677 @@
+/*
+ * 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.latin.makedict;
+
+import android.test.AndroidTestCase;
+import android.test.suitebuilder.annotation.LargeTest;
+import android.util.Log;
+import android.util.Pair;
+import android.util.SparseArray;
+
+import com.android.inputmethod.latin.BinaryDictionary;
+import com.android.inputmethod.latin.common.CodePointUtils;
+import com.android.inputmethod.latin.makedict.BinaryDictDecoderUtils.CharEncoding;
+import com.android.inputmethod.latin.makedict.BinaryDictDecoderUtils.DictBuffer;
+import com.android.inputmethod.latin.makedict.FormatSpec.FormatOptions;
+import com.android.inputmethod.latin.makedict.FusionDictionary.PtNode;
+import com.android.inputmethod.latin.makedict.FusionDictionary.PtNodeArray;
+import com.android.inputmethod.latin.utils.BinaryDictionaryUtils;
+import com.android.inputmethod.latin.utils.ByteArrayDictBuffer;
+
+import java.io.File;
+import java.io.IOException;
+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.Entry;
+import java.util.Random;
+import java.util.Set;
+import java.util.TreeMap;
+
+/**
+ * Unit tests for BinaryDictDecoderUtils and BinaryDictEncoderUtils.
+ */
+@LargeTest
+public class BinaryDictDecoderEncoderTests extends AndroidTestCase {
+ private static final String TAG = BinaryDictDecoderEncoderTests.class.getSimpleName();
+ private static final int DEFAULT_MAX_UNIGRAMS = 300;
+ private static final int DEFAULT_CODE_POINT_SET_SIZE = 50;
+ private static final int LARGE_CODE_POINT_SET_SIZE = 300;
+ private static final int UNIGRAM_FREQ = 10;
+ private static final int BIGRAM_FREQ = 50;
+ private static final int TOLERANCE_OF_BIGRAM_FREQ = 5;
+
+ private static final ArrayList<String> sWords = new ArrayList<>();
+ private static final ArrayList<String> sWordsWithVariousCodePoints = new ArrayList<>();
+ private static final SparseArray<List<Integer>> sEmptyBigrams = new SparseArray<>();
+ private static final SparseArray<List<Integer>> sStarBigrams = new SparseArray<>();
+ private static final SparseArray<List<Integer>> sChainBigrams = new SparseArray<>();
+
+ final Random mRandom;
+
+ public BinaryDictDecoderEncoderTests() {
+ this(System.currentTimeMillis(), DEFAULT_MAX_UNIGRAMS);
+ }
+
+ public BinaryDictDecoderEncoderTests(final long seed, final int maxUnigrams) {
+ super();
+ BinaryDictionaryUtils.setCurrentTimeForTest(0);
+ Log.e(TAG, "Testing dictionary: seed is " + seed);
+ mRandom = new Random(seed);
+ sWords.clear();
+ sWordsWithVariousCodePoints.clear();
+ generateWords(maxUnigrams, mRandom);
+
+ for (int i = 0; i < sWords.size(); ++i) {
+ sChainBigrams.put(i, new ArrayList<Integer>());
+ if (i > 0) {
+ sChainBigrams.get(i - 1).add(i);
+ }
+ }
+
+ sStarBigrams.put(0, new ArrayList<Integer>());
+ // MAX - 1 because we added one above already
+ final int maxBigrams = Math.min(sWords.size(), FormatSpec.MAX_BIGRAMS_IN_A_PTNODE - 1);
+ for (int i = 1; i < maxBigrams; ++i) {
+ sStarBigrams.get(0).add(i);
+ }
+ }
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ BinaryDictionaryUtils.setCurrentTimeForTest(0);
+ }
+
+ @Override
+ protected void tearDown() throws Exception {
+ // Quit test mode.
+ BinaryDictionaryUtils.setCurrentTimeForTest(-1);
+ super.tearDown();
+ }
+
+ private static void generateWords(final int number, final Random random) {
+ final int[] codePointSet = CodePointUtils.generateCodePointSet(DEFAULT_CODE_POINT_SET_SIZE,
+ random);
+ final Set<String> wordSet = new HashSet<>();
+ while (wordSet.size() < number) {
+ wordSet.add(CodePointUtils.generateWord(random, codePointSet));
+ }
+ sWords.addAll(wordSet);
+
+ final int[] largeCodePointSet = CodePointUtils.generateCodePointSet(
+ LARGE_CODE_POINT_SET_SIZE, random);
+ wordSet.clear();
+ while (wordSet.size() < number) {
+ wordSet.add(CodePointUtils.generateWord(random, largeCodePointSet));
+ }
+ sWordsWithVariousCodePoints.addAll(wordSet);
+ }
+
+ /**
+ * Adds unigrams to the dictionary.
+ */
+ private static void addUnigrams(final int number, final FusionDictionary dict,
+ final List<String> words) {
+ for (int i = 0; i < number; ++i) {
+ final String word = words.get(i);
+ final ArrayList<WeightedString> shortcuts = new ArrayList<>();
+ dict.add(word, new ProbabilityInfo(UNIGRAM_FREQ), false /* isNotAWord */,
+ false /* isPossiblyOffensive */);
+ }
+ }
+
+ private static void addBigrams(final FusionDictionary dict,
+ final List<String> words,
+ final SparseArray<List<Integer>> bigrams) {
+ for (int i = 0; i < bigrams.size(); ++i) {
+ final int w1 = bigrams.keyAt(i);
+ for (int w2 : bigrams.valueAt(i)) {
+ dict.setBigram(words.get(w1), words.get(w2), new ProbabilityInfo(BIGRAM_FREQ));
+ }
+ }
+ }
+
+// The following is useful to dump the dictionary into a textual file, but it can't compile
+// on-device, so it's commented out.
+// private void dumpToCombinedFileForDebug(final FusionDictionary dict, final String filename)
+// throws IOException {
+// com.android.inputmethod.latin.dicttool.CombinedInputOutput.writeDictionaryCombined(
+// new java.io.FileWriter(new File(filename)), dict);
+// }
+
+ private static long timeWritingDictToFile(final File file, final FusionDictionary dict,
+ final FormatSpec.FormatOptions formatOptions) {
+
+ long now = -1, diff = -1;
+
+ try {
+ final DictEncoder dictEncoder = BinaryDictUtils.getDictEncoder(file, formatOptions);
+
+ now = System.currentTimeMillis();
+ // If you need to dump the dict to a textual file, uncomment the line below and the
+ // function above
+ // dumpToCombinedFileForDebug(file, "/tmp/foo");
+ dictEncoder.writeDictionary(dict, formatOptions);
+ diff = System.currentTimeMillis() - now;
+ } catch (IOException e) {
+ Log.e(TAG, "IO exception while writing file", e);
+ } catch (UnsupportedFormatException e) {
+ Log.e(TAG, "UnsupportedFormatException", e);
+ }
+
+ return diff;
+ }
+
+ private static void checkDictionary(final FusionDictionary dict, final List<String> words,
+ final SparseArray<List<Integer>> bigrams) {
+ assertNotNull(dict);
+
+ // check unigram
+ for (final String word : words) {
+ final PtNode ptNode = FusionDictionary.findWordInTree(dict.mRootNodeArray, word);
+ assertNotNull(ptNode);
+ }
+
+ // check bigram
+ for (int i = 0; i < bigrams.size(); ++i) {
+ final int w1 = bigrams.keyAt(i);
+ for (final int w2 : bigrams.valueAt(i)) {
+ final PtNode ptNode = FusionDictionary.findWordInTree(dict.mRootNodeArray,
+ words.get(w1));
+ assertNotNull(words.get(w1) + "," + words.get(w2), ptNode.getBigram(words.get(w2)));
+ }
+ }
+ }
+
+ private static String outputOptions(final int bufferType,
+ final FormatSpec.FormatOptions formatOptions) {
+ final String result = " : buffer type = "
+ + ((bufferType == BinaryDictUtils.USE_BYTE_BUFFER) ? "byte buffer" : "byte array");
+ return result + " : version = " + formatOptions.mVersion;
+ }
+
+ // Tests for readDictionaryBinary and writeDictionaryBinary
+
+ private static long timeReadingAndCheckDict(final File file, final List<String> words,
+ final SparseArray<List<Integer>> bigrams, final int bufferType) {
+ long now, diff = -1;
+
+ FusionDictionary dict = null;
+ try {
+ final DictDecoder dictDecoder = BinaryDictIOUtils.getDictDecoder(file, 0, file.length(),
+ bufferType);
+ now = System.currentTimeMillis();
+ dict = dictDecoder.readDictionaryBinary(false /* deleteDictIfBroken */);
+ diff = System.currentTimeMillis() - now;
+ } catch (IOException e) {
+ Log.e(TAG, "IOException while reading dictionary", e);
+ } catch (UnsupportedFormatException e) {
+ Log.e(TAG, "Unsupported format", e);
+ }
+
+ checkDictionary(dict, words, bigrams);
+ return diff;
+ }
+
+ // Tests for readDictionaryBinary and writeDictionaryBinary
+ private String runReadAndWrite(final List<String> words,
+ final SparseArray<List<Integer>> bigrams,
+ final int bufferType, final FormatSpec.FormatOptions formatOptions,
+ final String message) {
+
+ final String dictName = "runReadAndWrite";
+ final String dictVersion = Long.toString(System.currentTimeMillis());
+ final File file = BinaryDictUtils.getDictFile(dictName, dictVersion, formatOptions,
+ getContext().getCacheDir());
+
+ final FusionDictionary dict = new FusionDictionary(new PtNodeArray(),
+ BinaryDictUtils.makeDictionaryOptions(dictName, dictVersion, formatOptions));
+ addUnigrams(words.size(), dict, words);
+ addBigrams(dict, words, bigrams);
+ checkDictionary(dict, words, bigrams);
+
+ final long write = timeWritingDictToFile(file, dict, formatOptions);
+ final long read = timeReadingAndCheckDict(file, words, bigrams, bufferType);
+
+ return "PROF: read=" + read + "ms, write=" + write + "ms :" + message
+ + " : " + outputOptions(bufferType, formatOptions);
+ }
+
+ private void runReadAndWriteTests(final List<String> results, final int bufferType,
+ final FormatSpec.FormatOptions formatOptions) {
+ results.add(runReadAndWrite(sWords, sEmptyBigrams, bufferType,
+ formatOptions, "unigram"));
+ results.add(runReadAndWrite(sWords, sChainBigrams, bufferType,
+ formatOptions, "chain"));
+ results.add(runReadAndWrite(sWords, sStarBigrams, bufferType,
+ formatOptions, "star"));
+ results.add(runReadAndWrite(sWords, sEmptyBigrams, bufferType, formatOptions,
+ "unigram with shortcuts"));
+ results.add(runReadAndWrite(sWords, sChainBigrams, bufferType, formatOptions,
+ "chain with shortcuts"));
+ results.add(runReadAndWrite(sWords, sStarBigrams, bufferType, formatOptions,
+ "star with shortcuts"));
+ results.add(runReadAndWrite(sWordsWithVariousCodePoints, sEmptyBigrams,
+ bufferType, formatOptions,
+ "unigram with various code points"));
+ }
+
+ public void testCharacterTableIsPresent() throws IOException, UnsupportedFormatException {
+ final String[] wordSource = {"words", "used", "for", "testing", "a", "code point", "table"};
+ final List<String> words = Arrays.asList(wordSource);
+ final String correctCodePointTable = "toesdrniawuplgfcb ";
+ final String dictName = "codePointTableTest";
+ final String dictVersion = Long.toString(System.currentTimeMillis());
+ final String codePointTableAttribute = DictionaryHeader.CODE_POINT_TABLE_KEY;
+ final File file = BinaryDictUtils.getDictFile(dictName, dictVersion,
+ BinaryDictUtils.STATIC_OPTIONS, getContext().getCacheDir());
+
+ // Write a test dictionary
+ final DictEncoder dictEncoder = new Ver2DictEncoder(file,
+ Ver2DictEncoder.CODE_POINT_TABLE_ON);
+ final FormatSpec.FormatOptions formatOptions =
+ new FormatSpec.FormatOptions(
+ FormatSpec.MINIMUM_SUPPORTED_STATIC_VERSION);
+ final FusionDictionary sourcedict = new FusionDictionary(new PtNodeArray(),
+ BinaryDictUtils.makeDictionaryOptions(dictName, dictVersion, formatOptions));
+ addUnigrams(words.size(), sourcedict, words);
+ dictEncoder.writeDictionary(sourcedict, formatOptions);
+
+ // Read the dictionary
+ final DictDecoder dictDecoder = BinaryDictIOUtils.getDictDecoder(file, 0, file.length(),
+ DictDecoder.USE_BYTEARRAY);
+ final DictionaryHeader fileHeader = dictDecoder.readHeader();
+ // Check if codePointTable is present
+ assertTrue("codePointTable is not present",
+ fileHeader.mDictionaryOptions.mAttributes.containsKey(codePointTableAttribute));
+ final String codePointTable =
+ fileHeader.mDictionaryOptions.mAttributes.get(codePointTableAttribute);
+ // Check if codePointTable is correct
+ assertEquals("codePointTable is incorrect", codePointTable, correctCodePointTable);
+ }
+
+ // Unit test for CharEncoding.readString and CharEncoding.writeString.
+ public void testCharEncoding() {
+ // the max length of a word in sWords is less than 50.
+ // See generateWords.
+ final byte[] buffer = new byte[50 * 3];
+ final DictBuffer dictBuffer = new ByteArrayDictBuffer(buffer);
+ for (final String word : sWords) {
+ Arrays.fill(buffer, (byte) 0);
+ CharEncoding.writeString(buffer, 0, word, null);
+ dictBuffer.position(0);
+ final String str = CharEncoding.readString(dictBuffer);
+ assertEquals(word, str);
+ }
+ }
+
+ public void testReadAndWriteWithByteBuffer() {
+ final List<String> results = new ArrayList<>();
+
+ runReadAndWriteTests(results, BinaryDictUtils.USE_BYTE_BUFFER,
+ BinaryDictUtils.STATIC_OPTIONS);
+ runReadAndWriteTests(results, BinaryDictUtils.USE_BYTE_BUFFER,
+ BinaryDictUtils.DYNAMIC_OPTIONS_WITHOUT_TIMESTAMP);
+ runReadAndWriteTests(results, BinaryDictUtils.USE_BYTE_BUFFER,
+ BinaryDictUtils.DYNAMIC_OPTIONS_WITH_TIMESTAMP);
+ for (final String result : results) {
+ Log.d(TAG, result);
+ }
+ }
+
+ public void testReadAndWriteWithByteArray() {
+ final List<String> results = new ArrayList<>();
+
+ runReadAndWriteTests(results, BinaryDictUtils.USE_BYTE_ARRAY,
+ BinaryDictUtils.STATIC_OPTIONS);
+ runReadAndWriteTests(results, BinaryDictUtils.USE_BYTE_ARRAY,
+ BinaryDictUtils.DYNAMIC_OPTIONS_WITHOUT_TIMESTAMP);
+ runReadAndWriteTests(results, BinaryDictUtils.USE_BYTE_ARRAY,
+ BinaryDictUtils.DYNAMIC_OPTIONS_WITH_TIMESTAMP);
+
+ for (final String result : results) {
+ Log.d(TAG, result);
+ }
+ }
+
+ // Tests for readUnigramsAndBigramsBinary
+
+ private static void checkWordMap(final List<String> expectedWords,
+ final SparseArray<List<Integer>> expectedBigrams,
+ final TreeMap<Integer, String> resultWords,
+ final TreeMap<Integer, Integer> resultFrequencies,
+ final TreeMap<Integer, ArrayList<PendingAttribute>> resultBigrams,
+ final boolean checkProbability) {
+ // check unigrams
+ final Set<String> actualWordsSet = new HashSet<>(resultWords.values());
+ final Set<String> expectedWordsSet = new HashSet<>(expectedWords);
+ assertEquals(actualWordsSet, expectedWordsSet);
+ if (checkProbability) {
+ for (int freq : resultFrequencies.values()) {
+ assertEquals(freq, UNIGRAM_FREQ);
+ }
+ }
+
+ // check bigrams
+ final HashMap<String, Set<String>> expBigrams = new HashMap<>();
+ for (int i = 0; i < expectedBigrams.size(); ++i) {
+ final String word1 = expectedWords.get(expectedBigrams.keyAt(i));
+ for (int w2 : expectedBigrams.valueAt(i)) {
+ if (expBigrams.get(word1) == null) {
+ expBigrams.put(word1, new HashSet<String>());
+ }
+ expBigrams.get(word1).add(expectedWords.get(w2));
+ }
+ }
+
+ final HashMap<String, Set<String>> actBigrams = new HashMap<>();
+ for (Entry<Integer, ArrayList<PendingAttribute>> entry : resultBigrams.entrySet()) {
+ final String word1 = resultWords.get(entry.getKey());
+ final int unigramFreq = resultFrequencies.get(entry.getKey());
+ for (PendingAttribute attr : entry.getValue()) {
+ final String word2 = resultWords.get(attr.mAddress);
+ if (actBigrams.get(word1) == null) {
+ actBigrams.put(word1, new HashSet<String>());
+ }
+ actBigrams.get(word1).add(word2);
+
+ if (checkProbability) {
+ final int bigramFreq = BinaryDictIOUtils.reconstructBigramFrequency(
+ unigramFreq, attr.mFrequency);
+ assertTrue(Math.abs(bigramFreq - BIGRAM_FREQ) < TOLERANCE_OF_BIGRAM_FREQ);
+ }
+ }
+ }
+ assertEquals(actBigrams, expBigrams);
+ }
+
+ private static long timeAndCheckReadUnigramsAndBigramsBinary(final File file,
+ final List<String> words, final SparseArray<List<Integer>> bigrams,
+ final int bufferType, final boolean checkProbability) {
+ final TreeMap<Integer, String> resultWords = new TreeMap<>();
+ final TreeMap<Integer, ArrayList<PendingAttribute>> resultBigrams = new TreeMap<>();
+ final TreeMap<Integer, Integer> resultFreqs = new TreeMap<>();
+
+ long now = -1, diff = -1;
+ try {
+ final DictDecoder dictDecoder = BinaryDictIOUtils.getDictDecoder(file, 0, file.length(),
+ bufferType);
+ now = System.currentTimeMillis();
+ dictDecoder.readUnigramsAndBigramsBinary(resultWords, resultFreqs, resultBigrams);
+ diff = System.currentTimeMillis() - now;
+ } catch (IOException e) {
+ Log.e(TAG, "IOException", e);
+ } catch (UnsupportedFormatException e) {
+ Log.e(TAG, "UnsupportedFormatException", e);
+ }
+
+ checkWordMap(words, bigrams, resultWords, resultFreqs, resultBigrams, checkProbability);
+ return diff;
+ }
+
+ private String runReadUnigramsAndBigramsBinary(final ArrayList<String> words,
+ final SparseArray<List<Integer>> bigrams, final int bufferType,
+ final FormatSpec.FormatOptions formatOptions, final String message) {
+ final String dictName = "runReadUnigrams";
+ final String dictVersion = Long.toString(System.currentTimeMillis());
+ final File file = BinaryDictUtils.getDictFile(dictName, dictVersion, formatOptions,
+ getContext().getCacheDir());
+
+ // making the dictionary from lists of words.
+ final FusionDictionary dict = new FusionDictionary(new PtNodeArray(),
+ BinaryDictUtils.makeDictionaryOptions(dictName, dictVersion, formatOptions));
+ addUnigrams(words.size(), dict, words);
+ addBigrams(dict, words, bigrams);
+
+ timeWritingDictToFile(file, dict, formatOptions);
+
+ // Caveat: Currently, the Java code to read a v4 dictionary doesn't calculate the
+ // probability when there's a timestamp for the entry.
+ // TODO: Abandon the Java code, and implement the v4 dictionary reading code in native.
+ long wordMap = timeAndCheckReadUnigramsAndBigramsBinary(file, words, bigrams, bufferType,
+ !formatOptions.mHasTimestamp /* checkProbability */);
+ long fullReading = timeReadingAndCheckDict(file, words, bigrams,
+ bufferType);
+
+ return "readDictionaryBinary=" + fullReading + ", readUnigramsAndBigramsBinary=" + wordMap
+ + " : " + message + " : " + outputOptions(bufferType, formatOptions);
+ }
+
+ private void runReadUnigramsAndBigramsTests(final ArrayList<String> results,
+ final int bufferType, final FormatSpec.FormatOptions formatOptions) {
+ results.add(runReadUnigramsAndBigramsBinary(sWords, sEmptyBigrams, bufferType,
+ formatOptions, "unigram"));
+ results.add(runReadUnigramsAndBigramsBinary(sWords, sChainBigrams, bufferType,
+ formatOptions, "chain"));
+ results.add(runReadUnigramsAndBigramsBinary(sWords, sStarBigrams, bufferType,
+ formatOptions, "star"));
+ }
+
+ public void testReadUnigramsAndBigramsBinaryWithByteBuffer() {
+ final ArrayList<String> results = new ArrayList<>();
+
+ runReadUnigramsAndBigramsTests(results, BinaryDictUtils.USE_BYTE_BUFFER,
+ BinaryDictUtils.STATIC_OPTIONS);
+
+ for (final String result : results) {
+ Log.d(TAG, result);
+ }
+ }
+
+ public void testReadUnigramsAndBigramsBinaryWithByteArray() {
+ final ArrayList<String> results = new ArrayList<>();
+
+ runReadUnigramsAndBigramsTests(results, BinaryDictUtils.USE_BYTE_ARRAY,
+ BinaryDictUtils.STATIC_OPTIONS);
+
+ for (final String result : results) {
+ Log.d(TAG, result);
+ }
+ }
+
+ // Tests for getTerminalPosition
+ private static String getWordFromBinary(final DictDecoder dictDecoder, final int address) {
+ if (dictDecoder.getPosition() != 0) dictDecoder.setPosition(0);
+
+ DictionaryHeader fileHeader = null;
+ try {
+ fileHeader = dictDecoder.readHeader();
+ } catch (IOException e) {
+ return null;
+ } catch (UnsupportedFormatException e) {
+ return null;
+ }
+ if (fileHeader == null) return null;
+ return BinaryDictDecoderUtils.getWordAtPosition(dictDecoder, fileHeader.mBodyOffset,
+ address).mWord;
+ }
+
+ private static long checkGetTerminalPosition(final DictDecoder dictDecoder, final String word,
+ final boolean contained) {
+ long diff = -1;
+ int position = -1;
+ try {
+ final long now = System.nanoTime();
+ position = dictDecoder.getTerminalPosition(word);
+ diff = System.nanoTime() - now;
+ } catch (IOException e) {
+ Log.e(TAG, "IOException while getTerminalPosition", e);
+ } catch (UnsupportedFormatException e) {
+ Log.e(TAG, "UnsupportedFormatException while getTerminalPosition", e);
+ }
+
+ assertEquals(FormatSpec.NOT_VALID_WORD != position, contained);
+ if (contained) assertEquals(getWordFromBinary(dictDecoder, position), word);
+ return diff;
+ }
+
+ private void runGetTerminalPosition(final ArrayList<String> words,
+ final SparseArray<List<Integer>> bigrams, final int bufferType,
+ final FormatOptions formatOptions, final String message) {
+ final String dictName = "testGetTerminalPosition";
+ final String dictVersion = Long.toString(System.currentTimeMillis());
+ final File file = BinaryDictUtils.getDictFile(dictName, dictVersion, formatOptions,
+ getContext().getCacheDir());
+
+ final FusionDictionary dict = new FusionDictionary(new PtNodeArray(),
+ BinaryDictUtils.makeDictionaryOptions(dictName, dictVersion, formatOptions));
+ addUnigrams(sWords.size(), dict, sWords);
+ addBigrams(dict, words, bigrams);
+ timeWritingDictToFile(file, dict, formatOptions);
+
+ final DictDecoder dictDecoder = BinaryDictIOUtils.getDictDecoder(file, 0, file.length(),
+ DictDecoder.USE_BYTEARRAY);
+ try {
+ dictDecoder.openDictBuffer();
+ } catch (IOException e) {
+ Log.e(TAG, "IOException while opening the buffer", e);
+ } catch (UnsupportedFormatException e) {
+ Log.e(TAG, "IOException while opening the buffer", e);
+ }
+ assertTrue("Can't get the buffer", dictDecoder.isDictBufferOpen());
+
+ try {
+ // too long word
+ final String longWord = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz";
+ assertEquals(FormatSpec.NOT_VALID_WORD, dictDecoder.getTerminalPosition(longWord));
+
+ // null
+ assertEquals(FormatSpec.NOT_VALID_WORD, dictDecoder.getTerminalPosition(null));
+
+ // empty string
+ assertEquals(FormatSpec.NOT_VALID_WORD, dictDecoder.getTerminalPosition(""));
+ } catch (IOException e) {
+ } catch (UnsupportedFormatException e) {
+ }
+
+ // Test a word that is contained within the dictionary.
+ long sum = 0;
+ for (int i = 0; i < sWords.size(); ++i) {
+ final long time = checkGetTerminalPosition(dictDecoder, sWords.get(i), true);
+ sum += time == -1 ? 0 : time;
+ }
+ Log.d(TAG, "per search : " + (((double)sum) / sWords.size() / 1000000) + " : " + message
+ + " : " + outputOptions(bufferType, formatOptions));
+
+ // Test a word that isn't contained within the dictionary.
+ final int[] codePointSet = CodePointUtils.generateCodePointSet(DEFAULT_CODE_POINT_SET_SIZE,
+ mRandom);
+ for (int i = 0; i < 1000; ++i) {
+ final String word = CodePointUtils.generateWord(mRandom, codePointSet);
+ if (sWords.indexOf(word) != -1) continue;
+ checkGetTerminalPosition(dictDecoder, word, false);
+ }
+ }
+
+ private void runGetTerminalPositionTests(final int bufferType,
+ final FormatOptions formatOptions) {
+ runGetTerminalPosition(sWords, sEmptyBigrams, bufferType, formatOptions, "unigram");
+ }
+
+ public void testGetTerminalPosition() {
+ final ArrayList<String> results = new ArrayList<>();
+
+ runGetTerminalPositionTests(BinaryDictUtils.USE_BYTE_ARRAY,
+ BinaryDictUtils.STATIC_OPTIONS);
+ runGetTerminalPositionTests(BinaryDictUtils.USE_BYTE_BUFFER,
+ BinaryDictUtils.STATIC_OPTIONS);
+
+ for (final String result : results) {
+ Log.d(TAG, result);
+ }
+ }
+
+ public void testVer2DictGetWordProperty() {
+ final FormatOptions formatOptions = BinaryDictUtils.STATIC_OPTIONS;
+ final ArrayList<String> words = sWords;
+ final String dictName = "testGetWordProperty";
+ final String dictVersion = Long.toString(System.currentTimeMillis());
+ final FusionDictionary dict = new FusionDictionary(new PtNodeArray(),
+ BinaryDictUtils.makeDictionaryOptions(dictName, dictVersion, formatOptions));
+ addUnigrams(words.size(), dict, words);
+ addBigrams(dict, words, sEmptyBigrams);
+ final File file = BinaryDictUtils.getDictFile(dictName, dictVersion, formatOptions,
+ getContext().getCacheDir());
+ file.delete();
+ timeWritingDictToFile(file, dict, formatOptions);
+ final BinaryDictionary binaryDictionary = new BinaryDictionary(file.getAbsolutePath(),
+ 0 /* offset */, file.length(), true /* useFullEditDistance */,
+ Locale.ENGLISH, dictName, false /* isUpdatable */);
+ for (final String word : words) {
+ final WordProperty wordProperty = binaryDictionary.getWordProperty(word,
+ false /* isBeginningOfSentence */);
+ assertEquals(word, wordProperty.mWord);
+ assertEquals(UNIGRAM_FREQ, wordProperty.getProbability());
+ }
+ }
+
+ public void testVer2DictIteration() {
+ final FormatOptions formatOptions = BinaryDictUtils.STATIC_OPTIONS;
+ final ArrayList<String> words = sWords;
+ final SparseArray<List<Integer>> bigrams = sEmptyBigrams;
+ final String dictName = "testGetWordProperty";
+ final String dictVersion = Long.toString(System.currentTimeMillis());
+ final FusionDictionary dict = new FusionDictionary(new PtNodeArray(),
+ BinaryDictUtils.makeDictionaryOptions(dictName, dictVersion, formatOptions));
+ addUnigrams(words.size(), dict, words);
+ addBigrams(dict, words, bigrams);
+ final File file = BinaryDictUtils.getDictFile(dictName, dictVersion, formatOptions,
+ getContext().getCacheDir());
+ timeWritingDictToFile(file, dict, formatOptions);
+ Log.d(TAG, file.getAbsolutePath());
+ final BinaryDictionary binaryDictionary = new BinaryDictionary(file.getAbsolutePath(),
+ 0 /* offset */, file.length(), true /* useFullEditDistance */,
+ Locale.ENGLISH, dictName, false /* isUpdatable */);
+
+ final HashSet<String> wordSet = new HashSet<>(words);
+ final HashSet<Pair<String, String>> bigramSet = new HashSet<>();
+
+ for (int i = 0; i < words.size(); i++) {
+ final List<Integer> bigramList = bigrams.get(i);
+ if (bigramList != null) {
+ for (final Integer word1Index : bigramList) {
+ final String word1 = words.get(word1Index);
+ bigramSet.add(new Pair<>(words.get(i), word1));
+ }
+ }
+ }
+ int token = 0;
+ do {
+ final BinaryDictionary.GetNextWordPropertyResult result =
+ binaryDictionary.getNextWordProperty(token);
+ final WordProperty wordProperty = result.mWordProperty;
+ final String word0 = wordProperty.mWord;
+ assertEquals(UNIGRAM_FREQ, wordProperty.mProbabilityInfo.mProbability);
+ wordSet.remove(word0);
+ if (wordProperty.mHasNgrams) {
+ for (final WeightedString bigramTarget : wordProperty.getBigrams()) {
+ final String word1 = bigramTarget.mWord;
+ final Pair<String, String> bigram = new Pair<>(word0, word1);
+ assertTrue(bigramSet.contains(bigram));
+ bigramSet.remove(bigram);
+ }
+ }
+ token = result.mNextToken;
+ } while (token != 0);
+ assertTrue(wordSet.isEmpty());
+ assertTrue(bigramSet.isEmpty());
+ }
+}
diff --git a/tests/src/com/android/inputmethod/latin/makedict/BinaryDictUtils.java b/tests/src/com/android/inputmethod/latin/makedict/BinaryDictUtils.java
new file mode 100644
index 000000000..9c1e4cf84
--- /dev/null
+++ b/tests/src/com/android/inputmethod/latin/makedict/BinaryDictUtils.java
@@ -0,0 +1,80 @@
+/*
+ * 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.makedict;
+
+import com.android.inputmethod.latin.makedict.FormatSpec.DictionaryOptions;
+import com.android.inputmethod.latin.makedict.FormatSpec.FormatOptions;
+
+import java.io.File;
+import java.util.HashMap;
+
+public class BinaryDictUtils {
+ public static final int USE_BYTE_ARRAY = 1;
+ public static final int USE_BYTE_BUFFER = 2;
+
+ public static final String TEST_DICT_FILE_EXTENSION = ".testDict";
+
+ public static final FormatSpec.FormatOptions STATIC_OPTIONS =
+ new FormatSpec.FormatOptions(FormatSpec.VERSION202);
+ public static final FormatSpec.FormatOptions DYNAMIC_OPTIONS_WITHOUT_TIMESTAMP =
+ new FormatSpec.FormatOptions(FormatSpec.VERSION4, false /* hasTimestamp */);
+ public static final FormatSpec.FormatOptions DYNAMIC_OPTIONS_WITH_TIMESTAMP =
+ new FormatSpec.FormatOptions(FormatSpec.VERSION4, true /* hasTimestamp */);
+
+ public static DictionaryOptions makeDictionaryOptions(final String id, final String version,
+ final FormatSpec.FormatOptions formatOptions) {
+ final DictionaryOptions options = new DictionaryOptions(new HashMap<String, String>());
+ options.mAttributes.put(DictionaryHeader.DICTIONARY_LOCALE_KEY, "en_US");
+ options.mAttributes.put(DictionaryHeader.DICTIONARY_ID_KEY, id);
+ options.mAttributes.put(DictionaryHeader.DICTIONARY_VERSION_KEY, version);
+ if (formatOptions.mHasTimestamp) {
+ options.mAttributes.put(DictionaryHeader.HAS_HISTORICAL_INFO_KEY,
+ DictionaryHeader.ATTRIBUTE_VALUE_TRUE);
+ options.mAttributes.put(DictionaryHeader.USES_FORGETTING_CURVE_KEY,
+ DictionaryHeader.ATTRIBUTE_VALUE_TRUE);
+ }
+ return options;
+ }
+
+ public static File getDictFile(final String name, final String version,
+ final FormatOptions formatOptions, final File directory) {
+ if (formatOptions.mVersion == FormatSpec.VERSION2
+ || formatOptions.mVersion == FormatSpec.VERSION201
+ || formatOptions.mVersion == FormatSpec.VERSION202) {
+ return new File(directory, name + "." + version + TEST_DICT_FILE_EXTENSION);
+ } else if (formatOptions.mVersion == FormatSpec.VERSION4) {
+ return new File(directory, name + "." + version);
+ } else {
+ throw new RuntimeException("the format option has a wrong version : "
+ + formatOptions.mVersion);
+ }
+ }
+
+ public static DictEncoder getDictEncoder(final File file, final FormatOptions formatOptions) {
+ if (formatOptions.mVersion == FormatSpec.VERSION4) {
+ if (!file.isDirectory()) {
+ file.mkdir();
+ }
+ return new Ver4DictEncoder(file);
+ } else if (formatOptions.mVersion == FormatSpec.VERSION202) {
+ return new Ver2DictEncoder(file, Ver2DictEncoder.CODE_POINT_TABLE_OFF);
+ } else {
+ throw new RuntimeException("The format option has a wrong version : "
+ + formatOptions.mVersion);
+ }
+ }
+}
diff --git a/tests/src/com/android/inputmethod/latin/makedict/Ver2DictEncoder.java b/tests/src/com/android/inputmethod/latin/makedict/Ver2DictEncoder.java
new file mode 100644
index 000000000..c63b972eb
--- /dev/null
+++ b/tests/src/com/android/inputmethod/latin/makedict/Ver2DictEncoder.java
@@ -0,0 +1,279 @@
+/*
+ * 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.makedict;
+
+import com.android.inputmethod.annotations.UsedForTesting;
+import com.android.inputmethod.latin.makedict.BinaryDictDecoderUtils.CharEncoding;
+import com.android.inputmethod.latin.makedict.BinaryDictEncoderUtils.CodePointTable;
+import com.android.inputmethod.latin.makedict.FormatSpec.FormatOptions;
+import com.android.inputmethod.latin.makedict.FusionDictionary.PtNode;
+import com.android.inputmethod.latin.makedict.FusionDictionary.PtNodeArray;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map.Entry;
+
+/**
+ * An implementation of DictEncoder for version 2 binary dictionary.
+ */
+@UsedForTesting
+public class Ver2DictEncoder implements DictEncoder {
+
+ private final File mDictFile;
+ private OutputStream mOutStream;
+ private byte[] mBuffer;
+ private int mPosition;
+ private final int mCodePointTableMode;
+ public static final int CODE_POINT_TABLE_OFF = 0;
+ public static final int CODE_POINT_TABLE_ON = 1;
+
+ @UsedForTesting
+ public Ver2DictEncoder(final File dictFile, final int codePointTableMode) {
+ mDictFile = dictFile;
+ mOutStream = null;
+ mBuffer = null;
+ mCodePointTableMode = codePointTableMode;
+ }
+
+ // This constructor is used only by BinaryDictOffdeviceUtilsTests.
+ // If you want to use this in the production code, you should consider keeping consistency of
+ // the interface of Ver3DictDecoder by using factory.
+ @UsedForTesting
+ public Ver2DictEncoder(final OutputStream outStream) {
+ mDictFile = null;
+ mOutStream = outStream;
+ mCodePointTableMode = CODE_POINT_TABLE_OFF;
+ }
+
+ private void openStream() throws FileNotFoundException {
+ mOutStream = new FileOutputStream(mDictFile);
+ }
+
+ private void close() throws IOException {
+ if (mOutStream != null) {
+ mOutStream.close();
+ mOutStream = null;
+ }
+ }
+
+ // Package for testing
+ static CodePointTable makeCodePointTable(final FusionDictionary dict) {
+ final HashMap<Integer, Integer> codePointOccurrenceCounts = new HashMap<>();
+ for (final WordProperty word : dict) {
+ // Store per code point occurrence
+ final String wordString = word.mWord;
+ for (int i = 0; i < wordString.length(); ++i) {
+ final int codePoint = Character.codePointAt(wordString, i);
+ if (codePointOccurrenceCounts.containsKey(codePoint)) {
+ codePointOccurrenceCounts.put(codePoint,
+ codePointOccurrenceCounts.get(codePoint) + 1);
+ } else {
+ codePointOccurrenceCounts.put(codePoint, 1);
+ }
+ }
+ }
+ final ArrayList<Entry<Integer, Integer>> codePointOccurrenceArray =
+ new ArrayList<>(codePointOccurrenceCounts.entrySet());
+ // Descending order sort by occurrence (value side)
+ Collections.sort(codePointOccurrenceArray, new Comparator<Entry<Integer, Integer>>() {
+ @Override
+ public int compare(final Entry<Integer, Integer> a, final Entry<Integer, Integer> b) {
+ if (a.getValue() != b.getValue()) {
+ return b.getValue().compareTo(a.getValue());
+ }
+ return b.getKey().compareTo(a.getKey());
+ }
+ });
+ int currentCodePointTableIndex = FormatSpec.MINIMAL_ONE_BYTE_CHARACTER_VALUE;
+ // Temporary map for writing of nodes
+ final HashMap<Integer, Integer> codePointToOneByteCodeMap = new HashMap<>();
+ for (final Entry<Integer, Integer> entry : codePointOccurrenceArray) {
+ // Put a relation from the original code point to the one byte code.
+ codePointToOneByteCodeMap.put(entry.getKey(), currentCodePointTableIndex);
+ if (FormatSpec.MAXIMAL_ONE_BYTE_CHARACTER_VALUE < ++currentCodePointTableIndex) {
+ break;
+ }
+ }
+ // codePointToOneByteCodeMap for writing the trie
+ // codePointOccurrenceArray for writing the header
+ return new CodePointTable(codePointToOneByteCodeMap, codePointOccurrenceArray);
+ }
+
+ @Override
+ public void writeDictionary(final FusionDictionary dict, final FormatOptions formatOptions)
+ throws IOException, UnsupportedFormatException {
+ // We no longer support anything but the latest version of v2.
+ if (formatOptions.mVersion != FormatSpec.VERSION202) {
+ throw new UnsupportedFormatException(
+ "The given format options has wrong version number : "
+ + formatOptions.mVersion);
+ }
+
+ if (mOutStream == null) {
+ openStream();
+ }
+
+ // Make code point conversion table ordered by occurrence of code points
+ // Version 201 or later have codePointTable
+ final CodePointTable codePointTable;
+ if (mCodePointTableMode == CODE_POINT_TABLE_OFF || formatOptions.mVersion
+ < FormatSpec.MINIMUM_SUPPORTED_VERSION_OF_CODE_POINT_TABLE) {
+ codePointTable = new CodePointTable();
+ } else {
+ codePointTable = makeCodePointTable(dict);
+ }
+
+ BinaryDictEncoderUtils.writeDictionaryHeader(mOutStream, dict, formatOptions,
+ codePointTable.mCodePointOccurrenceArray);
+
+ // Addresses are limited to 3 bytes, but since addresses can be relative to each node
+ // array, the structure itself is not limited to 16MB. However, if it is over 16MB deciding
+ // the order of the PtNode arrays becomes a quite complicated problem, because though the
+ // dictionary itself does not have a size limit, each node array must still be within 16MB
+ // of all its children and parents. As long as this is ensured, the dictionary file may
+ // grow to any size.
+
+ // Leave the choice of the optimal node order to the flattenTree function.
+ MakedictLog.i("Flattening the tree...");
+ ArrayList<PtNodeArray> flatNodes = BinaryDictEncoderUtils.flattenTree(dict.mRootNodeArray);
+
+ MakedictLog.i("Computing addresses...");
+ BinaryDictEncoderUtils.computeAddresses(dict, flatNodes,
+ codePointTable.mCodePointToOneByteCodeMap);
+ MakedictLog.i("Checking PtNode array...");
+ if (MakedictLog.DBG) BinaryDictEncoderUtils.checkFlatPtNodeArrayList(flatNodes);
+
+ // Create a buffer that matches the final dictionary size.
+ final PtNodeArray lastNodeArray = flatNodes.get(flatNodes.size() - 1);
+ final int bufferSize = lastNodeArray.mCachedAddressAfterUpdate + lastNodeArray.mCachedSize;
+ mBuffer = new byte[bufferSize];
+
+ MakedictLog.i("Writing file...");
+
+ for (PtNodeArray nodeArray : flatNodes) {
+ BinaryDictEncoderUtils.writePlacedPtNodeArray(dict, this, nodeArray,
+ codePointTable.mCodePointToOneByteCodeMap);
+ }
+ if (MakedictLog.DBG) BinaryDictEncoderUtils.showStatistics(flatNodes);
+ mOutStream.write(mBuffer, 0, mPosition);
+
+ MakedictLog.i("Done");
+ close();
+ }
+
+ @Override
+ public void setPosition(final int position) {
+ if (mBuffer == null || position < 0 || position >= mBuffer.length) return;
+ mPosition = position;
+ }
+
+ @Override
+ public int getPosition() {
+ return mPosition;
+ }
+
+ @Override
+ public void writePtNodeCount(final int ptNodeCount) {
+ final int countSize = BinaryDictIOUtils.getPtNodeCountSize(ptNodeCount);
+ if (countSize != 1 && countSize != 2) {
+ throw new RuntimeException("Strange size from getGroupCountSize : " + countSize);
+ }
+ final int encodedPtNodeCount = (countSize == 2) ?
+ (ptNodeCount | FormatSpec.LARGE_PTNODE_ARRAY_SIZE_FIELD_SIZE_FLAG) : ptNodeCount;
+ mPosition = BinaryDictEncoderUtils.writeUIntToBuffer(mBuffer, mPosition, encodedPtNodeCount,
+ countSize);
+ }
+
+ private void writePtNodeFlags(final PtNode ptNode,
+ final HashMap<Integer, Integer> codePointToOneByteCodeMap) {
+ final int childrenPos = BinaryDictEncoderUtils.getChildrenPosition(ptNode,
+ codePointToOneByteCodeMap);
+ mPosition = BinaryDictEncoderUtils.writeUIntToBuffer(mBuffer, mPosition,
+ BinaryDictEncoderUtils.makePtNodeFlags(ptNode, childrenPos),
+ FormatSpec.PTNODE_FLAGS_SIZE);
+ }
+
+ private void writeCharacters(final int[] codePoints, final boolean hasSeveralChars,
+ final HashMap<Integer, Integer> codePointToOneByteCodeMap) {
+ mPosition = CharEncoding.writeCharArray(codePoints, mBuffer, mPosition,
+ codePointToOneByteCodeMap);
+ if (hasSeveralChars) {
+ mBuffer[mPosition++] = FormatSpec.PTNODE_CHARACTERS_TERMINATOR;
+ }
+ }
+
+ private void writeFrequency(final int frequency) {
+ if (frequency >= 0) {
+ mPosition = BinaryDictEncoderUtils.writeUIntToBuffer(mBuffer, mPosition, frequency,
+ FormatSpec.PTNODE_FREQUENCY_SIZE);
+ }
+ }
+
+ private void writeChildrenPosition(final PtNode ptNode,
+ final HashMap<Integer, Integer> codePointToOneByteCodeMap) {
+ final int childrenPos = BinaryDictEncoderUtils.getChildrenPosition(ptNode,
+ codePointToOneByteCodeMap);
+ mPosition += BinaryDictEncoderUtils.writeChildrenPosition(mBuffer, mPosition,
+ childrenPos);
+ }
+
+ /**
+ * Write a bigram attributes list to mBuffer.
+ *
+ * @param bigrams the bigram attributes list.
+ * @param dict the dictionary the node array is a part of (for relative offsets).
+ */
+ private void writeBigrams(final ArrayList<WeightedString> bigrams,
+ final FusionDictionary dict) {
+ if (bigrams == null) return;
+
+ final Iterator<WeightedString> bigramIterator = bigrams.iterator();
+ while (bigramIterator.hasNext()) {
+ final WeightedString bigram = bigramIterator.next();
+ final PtNode target =
+ FusionDictionary.findWordInTree(dict.mRootNodeArray, bigram.mWord);
+ final int addressOfBigram = target.mCachedAddressAfterUpdate;
+ final int unigramFrequencyForThisWord = target.getProbability();
+ final int offset = addressOfBigram
+ - (mPosition + FormatSpec.PTNODE_ATTRIBUTE_FLAGS_SIZE);
+ final int bigramFlags = BinaryDictEncoderUtils.makeBigramFlags(bigramIterator.hasNext(),
+ offset, bigram.getProbability(), unigramFrequencyForThisWord, bigram.mWord);
+ mPosition = BinaryDictEncoderUtils.writeUIntToBuffer(mBuffer, mPosition, bigramFlags,
+ FormatSpec.PTNODE_ATTRIBUTE_FLAGS_SIZE);
+ mPosition += BinaryDictEncoderUtils.writeChildrenPosition(mBuffer, mPosition,
+ Math.abs(offset));
+ }
+ }
+
+ @Override
+ public void writePtNode(final PtNode ptNode, final FusionDictionary dict,
+ final HashMap<Integer, Integer> codePointToOneByteCodeMap) {
+ writePtNodeFlags(ptNode, codePointToOneByteCodeMap);
+ writeCharacters(ptNode.mChars, ptNode.hasSeveralChars(), codePointToOneByteCodeMap);
+ writeFrequency(ptNode.getProbability());
+ writeChildrenPosition(ptNode, codePointToOneByteCodeMap);
+ writeBigrams(ptNode.mBigrams, dict);
+ }
+}
diff --git a/tests/src/com/android/inputmethod/latin/makedict/Ver4DictEncoder.java b/tests/src/com/android/inputmethod/latin/makedict/Ver4DictEncoder.java
new file mode 100644
index 000000000..6e7b37d54
--- /dev/null
+++ b/tests/src/com/android/inputmethod/latin/makedict/Ver4DictEncoder.java
@@ -0,0 +1,133 @@
+/*
+ * 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.makedict;
+
+import com.android.inputmethod.annotations.UsedForTesting;
+import com.android.inputmethod.latin.BinaryDictionary;
+import com.android.inputmethod.latin.Dictionary;
+import com.android.inputmethod.latin.NgramContext;
+import com.android.inputmethod.latin.common.LocaleUtils;
+import com.android.inputmethod.latin.makedict.FormatSpec.FormatOptions;
+import com.android.inputmethod.latin.makedict.FusionDictionary.PtNode;
+import com.android.inputmethod.latin.utils.BinaryDictionaryUtils;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.HashMap;
+
+/**
+ * An implementation of DictEncoder for version 4 binary dictionary.
+ */
+@UsedForTesting
+public class Ver4DictEncoder implements DictEncoder {
+ private final File mDictPlacedDir;
+
+ @UsedForTesting
+ public Ver4DictEncoder(final File dictPlacedDir) {
+ mDictPlacedDir = dictPlacedDir;
+ }
+
+ // TODO: This builds a FusionDictionary first and iterates it to add words to the binary
+ // dictionary. However, it is possible to just add words directly to the binary dictionary
+ // instead.
+ // In the long run, when we stop supporting version 2, FusionDictionary will become deprecated
+ // and we can remove it. Then we'll be able to just call BinaryDictionary directly.
+ @Override
+ public void writeDictionary(FusionDictionary dict, FormatOptions formatOptions)
+ throws IOException, UnsupportedFormatException {
+ if (formatOptions.mVersion != FormatSpec.VERSION4) {
+ throw new UnsupportedFormatException("File header has a wrong version number : "
+ + formatOptions.mVersion);
+ }
+ if (!mDictPlacedDir.isDirectory()) {
+ throw new UnsupportedFormatException("Given path is not a directory.");
+ }
+ if (!BinaryDictionaryUtils.createEmptyDictFile(mDictPlacedDir.getAbsolutePath(),
+ FormatSpec.VERSION4, LocaleUtils.constructLocaleFromString(
+ dict.mOptions.mAttributes.get(DictionaryHeader.DICTIONARY_LOCALE_KEY)),
+ dict.mOptions.mAttributes)) {
+ throw new IOException("Cannot create dictionary file : "
+ + mDictPlacedDir.getAbsolutePath());
+ }
+ final BinaryDictionary binaryDict = new BinaryDictionary(mDictPlacedDir.getAbsolutePath(),
+ 0l, mDictPlacedDir.length(), true /* useFullEditDistance */,
+ LocaleUtils.constructLocaleFromString(dict.mOptions.mAttributes.get(
+ DictionaryHeader.DICTIONARY_LOCALE_KEY)),
+ Dictionary.TYPE_USER /* Dictionary type. Does not matter for us */,
+ true /* isUpdatable */);
+ if (!binaryDict.isValidDictionary()) {
+ // Somehow createEmptyDictFile returned true, but the file was not created correctly
+ throw new IOException("Cannot create dictionary file");
+ }
+ for (final WordProperty wordProperty : dict) {
+ if (!binaryDict.addUnigramEntry(wordProperty.mWord, wordProperty.getProbability(),
+ wordProperty.mIsBeginningOfSentence, wordProperty.mIsNotAWord,
+ wordProperty.mIsPossiblyOffensive, 0 /* timestamp */)) {
+ MakedictLog.e("Cannot add unigram entry for " + wordProperty.mWord);
+ }
+ if (binaryDict.needsToRunGC(true /* mindsBlockByGC */)) {
+ if (!binaryDict.flushWithGC()) {
+ MakedictLog.e("Cannot flush dict with GC.");
+ return;
+ }
+ }
+ }
+ for (final WordProperty word0Property : dict) {
+ if (!word0Property.mHasNgrams) continue;
+ // TODO: Support ngram.
+ for (final WeightedString word1 : word0Property.getBigrams()) {
+ final NgramContext ngramContext =
+ new NgramContext(new NgramContext.WordInfo(word0Property.mWord));
+ if (!binaryDict.addNgramEntry(ngramContext, word1.mWord,
+ word1.getProbability(), 0 /* timestamp */)) {
+ MakedictLog.e("Cannot add n-gram entry for "
+ + ngramContext + " -> " + word1.mWord);
+ return;
+ }
+ if (binaryDict.needsToRunGC(true /* mindsBlockByGC */)) {
+ if (!binaryDict.flushWithGC()) {
+ MakedictLog.e("Cannot flush dict with GC.");
+ return;
+ }
+ }
+ }
+ }
+ if (!binaryDict.flushWithGC()) {
+ MakedictLog.e("Cannot flush dict with GC.");
+ return;
+ }
+ binaryDict.close();
+ }
+
+ @Override
+ public void setPosition(int position) {
+ }
+
+ @Override
+ public int getPosition() {
+ return 0;
+ }
+
+ @Override
+ public void writePtNodeCount(int ptNodeCount) {
+ }
+
+ @Override
+ public void writePtNode(PtNode ptNode, FusionDictionary dict,
+ HashMap<Integer, Integer> codePointToOneByteCodeMap) {
+ }
+}
diff --git a/tools/Android.mk b/tools/Android.mk
deleted file mode 100644
index 91b2fbbb0..000000000
--- a/tools/Android.mk
+++ /dev/null
@@ -1,15 +0,0 @@
-# Copyright (C) 2010 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.
-
-include $(call all-subdir-makefiles)
diff --git a/tools/dicttool/Android.bp b/tools/dicttool/Android.bp
new file mode 100644
index 000000000..83b4ed32c
--- /dev/null
+++ b/tools/dicttool/Android.bp
@@ -0,0 +1,32 @@
+// 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.
+
+java_binary_host {
+ name: "dicttool_aosp",
+
+ srcs: [
+ "src/**/*.java",
+ "tests/**/*.java",
+ "compat/**/*.java",
+ ":dicttool_deps",
+ ],
+
+ libs: ["junit"],
+ static_libs: [
+ "jsr305",
+ "latinime-common",
+ ],
+ required: ["libjni_latinime"],
+ main_class: "com.android.inputmethod.latin.dicttool.Dicttool",
+}
diff --git a/tools/dicttool/Android.mk b/tools/dicttool/Android.mk
deleted file mode 100644
index 49816294f..000000000
--- a/tools/dicttool/Android.mk
+++ /dev/null
@@ -1,87 +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.
-
-# Only build if it's explicitly requested, or running mm/mmm.
-ifneq ($(ONE_SHOT_MAKEFILE)$(filter $(MAKECMDGOALS),dicttool_aosp),)
-
-LATINIME_DICTTOOL_AOSP_LOCAL_PATH := $(call my-dir)
-LOCAL_PATH := $(LATINIME_DICTTOOL_AOSP_LOCAL_PATH)
-LATINIME_HOST_NATIVE_LIBNAME := liblatinime-aosp-dicttool-host
-include $(LOCAL_PATH)/NativeLib.mk
-
-######################################
-LOCAL_PATH := $(LATINIME_DICTTOOL_AOSP_LOCAL_PATH)
-include $(CLEAR_VARS)
-
-LATINIME_LOCAL_DIR := ../..
-LATINIME_BASE_SRC_DIR := $(LATINIME_LOCAL_DIR)/java/src/com/android/inputmethod
-LATINIME_BASE_OVERRIDABLE_SRC_DIR := \
- $(LATINIME_LOCAL_DIR)/java-overridable/src/com/android/inputmethod
-MAKEDICT_CORE_SRC_DIR := $(LATINIME_BASE_SRC_DIR)/latin/makedict
-LATINIME_TESTS_SRC_DIR := $(LATINIME_LOCAL_DIR)/tests/src/com/android/inputmethod/latin
-
-# Dependencies for Dicttool. Most of these files are needed by BinaryDictionary.java. Note that
-# a significant part of the dependencies are mocked in the compat/ directory, with empty or
-# nearly-empty implementations, for parts that we don't use in Dicttool.
-LATINIME_SRC_FILES_FOR_DICTTOOL := \
- latin/BinaryDictionary.java \
- latin/DicTraverseSession.java \
- latin/Dictionary.java \
- latin/NgramContext.java \
- latin/SuggestedWords.java \
- latin/settings/SettingsValuesForSuggestion.java \
- latin/utils/BinaryDictionaryUtils.java \
- latin/utils/CombinedFormatUtils.java \
- latin/utils/JniUtils.java
-
-LATINIME_OVERRIDABLE_SRC_FILES_FOR_DICTTOOL := \
- latin/define/DebugFlags.java
-
-LATINIME_TEST_SRC_FILES_FOR_DICTTOOL := \
- utils/ByteArrayDictBuffer.java
-
-USED_TARGETED_SRC_FILES := \
- $(addprefix $(LATINIME_BASE_SRC_DIR)/, $(LATINIME_SRC_FILES_FOR_DICTTOOL)) \
- $(addprefix $(LATINIME_BASE_OVERRIDABLE_SRC_DIR)/, \
- $(LATINIME_OVERRIDABLE_SRC_FILES_FOR_DICTTOOL)) \
- $(addprefix $(LATINIME_TESTS_SRC_DIR)/, $(LATINIME_TEST_SRC_FILES_FOR_DICTTOOL))
-
-DICTTOOL_ONDEVICE_TESTS_DIR := \
- $(LATINIME_LOCAL_DIR)/tests/src/com/android/inputmethod/latin/makedict/
-DICTTOOL_COMPAT_TESTS_DIR := compat
-
-LOCAL_MAIN_SRC_FILES := $(call all-java-files-under, $(MAKEDICT_CORE_SRC_DIR))
-LOCAL_TOOL_SRC_FILES := $(call all-java-files-under, src)
-
-LOCAL_SRC_FILES := $(LOCAL_TOOL_SRC_FILES) \
- $(filter-out $(addprefix %/, $(notdir $(LOCAL_TOOL_SRC_FILES))), $(LOCAL_MAIN_SRC_FILES)) \
- $(USED_TARGETED_SRC_FILES) \
- $(call all-java-files-under, \
- tests $(DICTTOOL_COMPAT_TESTS_DIR) $(DICTTOOL_ONDEVICE_TESTS_DIR))
-
-LOCAL_JAVA_LIBRARIES := junit-host
-LOCAL_STATIC_JAVA_LIBRARIES := jsr305lib latinime-common-host
-LOCAL_REQUIRED_MODULES := $(LATINIME_HOST_NATIVE_LIBNAME)
-LOCAL_JAR_MANIFEST := etc/manifest.txt
-LOCAL_MODULE := dicttool_aosp
-
-include $(BUILD_HOST_JAVA_LIBRARY)
-include $(LOCAL_PATH)/etc/Android.mk
-
-# Clear our private variables
-LATINIME_DICTTOOL_AOSP_LOCAL_PATH :=
-LATINIME_LOCAL_DIR :=
-
-endif
diff --git a/tools/dicttool/NativeLib.mk b/tools/dicttool/NativeLib.mk
deleted file mode 100644
index 510f18c4e..000000000
--- a/tools/dicttool/NativeLib.mk
+++ /dev/null
@@ -1,46 +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.
-
-LOCAL_PATH := $(call my-dir)
-include $(CLEAR_VARS)
-
-# Need to define the name of the library in the caller in LATINIME_HOST_NATIVE_LIBNAME
-
-LATINIME_DIR_RELATIVE_TO_DICTTOOL := ../..
-
-ifeq ($(FLAG_DBG), true)
- $(warning Making debug version of native library)
- LOCAL_CFLAGS += -DFLAG_DBG -funwind-tables -fno-inline
-endif #FLAG_DBG
-
-LOCAL_CFLAGS += -DHOST_TOOL -fPIC -Wno-deprecated -Wno-unused-parameter -Wno-unused-function
-
-LATINIME_NATIVE_JNI_DIR := $(LATINIME_DIR_RELATIVE_TO_DICTTOOL)/native/jni
-LATINIME_NATIVE_SRC_DIR := $(LATINIME_DIR_RELATIVE_TO_DICTTOOL)/native/jni/src
-LOCAL_C_INCLUDES := $(LOCAL_PATH)/$(LATINIME_NATIVE_SRC_DIR)
-
-include $(LOCAL_PATH)/$(LATINIME_NATIVE_JNI_DIR)/NativeFileList.mk
-
-LOCAL_SRC_FILES := \
- $(addprefix $(LATINIME_NATIVE_JNI_DIR)/, $(LATIN_IME_JNI_SRC_FILES)) \
- $(addprefix $(LATINIME_NATIVE_SRC_DIR)/, $(LATIN_IME_CORE_SRC_FILES))
-
-LOCAL_MODULE := $(LATINIME_HOST_NATIVE_LIBNAME)
-
-include $(BUILD_HOST_SHARED_LIBRARY)
-
-# Clear our private variables
-include $(LOCAL_PATH)/$(LATINIME_NATIVE_JNI_DIR)/CleanupNativeFileList.mk
-LATINIME_DIR_RELATIVE_TO_DICTTOOL := ../..
diff --git a/tools/dicttool/compat/com/android/inputmethod/latin/define/JniLibName.java b/tools/dicttool/compat/com/android/inputmethod/latin/define/JniLibName.java
index d6d5e2d61..93ac1980a 100644
--- a/tools/dicttool/compat/com/android/inputmethod/latin/define/JniLibName.java
+++ b/tools/dicttool/compat/com/android/inputmethod/latin/define/JniLibName.java
@@ -21,5 +21,5 @@ public final class JniLibName {
// This class is not publicly instantiable.
}
- public static final String JNI_LIB_NAME = "latinime-aosp-dicttool-host";
+ public static final String JNI_LIB_NAME = "jni_latinime";
}
diff --git a/tools/dicttool/etc/Android.mk b/tools/dicttool/etc/Android.mk
deleted file mode 100644
index 0c611b7e9..000000000
--- a/tools/dicttool/etc/Android.mk
+++ /dev/null
@@ -1,19 +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.
-
-LOCAL_PATH := $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_PREBUILT_EXECUTABLES := dicttool_aosp makedict_aosp
-include $(BUILD_HOST_PREBUILT)
diff --git a/tools/dicttool/etc/dicttool_aosp b/tools/dicttool/etc/dicttool_aosp
deleted file mode 100755
index fc918f0f8..000000000
--- a/tools/dicttool/etc/dicttool_aosp
+++ /dev/null
@@ -1,67 +0,0 @@
-#!/bin/sh
-# Copyright 2011, 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.
-
-# Set up prog to be the path of this script, including following symlinks,
-# and set up progdir to be the fully-qualified pathname of its directory.
-prog="$0"
-while [ -h "${prog}" ]; do
- newProg=`/bin/ls -ld "${prog}"`
- newProg=`expr "${newProg}" : ".* -> \(.*\)$"`
- if expr "x${newProg}" : 'x/' >/dev/null; then
- prog="${newProg}"
- else
- progdir=`dirname "${prog}"`
- prog="${progdir}/${newProg}"
- fi
-done
-oldwd=`pwd`
-progdir=`dirname "${prog}"`
-cd "${progdir}"
-progdir=`pwd`
-prog="${progdir}"/`basename "${prog}"`
-cd "${oldwd}"
-
-classname=com.android.inputmethod.latin.dicttool.Dicttool
-jarfile=dicttool_aosp.jar
-frameworkdir="$progdir"
-if [ ! -r "$frameworkdir/$jarfile" ]
-then
- frameworkdir=`dirname "$progdir"`/framework
- libdir=`dirname "$progdir"`/lib64
-fi
-if [ ! -r "$frameworkdir/$jarfile" ]
-then
- echo `basename "$prog"`": can't find $jarfile"
- exit 1
-fi
-
-lib=junit.jar
-if [ ! -r "$frameworkdir/$lib" ]
-then
- echo `basename "$prog"`": can't find lib $lib"
- exit 1
-fi
-
-if [ "$OSTYPE" = "cygwin" ] ; then
- jarpath=`cygpath -w "$frameworkdir/$jarfile"`
- libpath=`cygpath -w "$frameworkdir/$lib"`
- progdir=`cygpath -w "$progdir"`
-else
- jarpath="$frameworkdir/$jarfile"
- libpath="$frameworkdir/$lib"
-fi
-
-# might need more memory, e.g. -Xmx128M
-exec java -ea -classpath "$libpath":"$jarpath" -Djava.library.path="$libdir" "$classname" "$@"
diff --git a/tools/dicttool/etc/makedict_aosp b/tools/dicttool/etc/makedict_aosp
deleted file mode 100755
index 095c50538..000000000
--- a/tools/dicttool/etc/makedict_aosp
+++ /dev/null
@@ -1,18 +0,0 @@
-#!/bin/sh
-# 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.
-
-# Dicttool supports making the dictionary using the 'makedict' command and
-# the same arguments that the old 'makedict' command used to accept.
-dicttool_aosp makedict $@
diff --git a/tools/dicttool/etc/manifest.txt b/tools/dicttool/etc/manifest.txt
deleted file mode 100644
index 67c85214c..000000000
--- a/tools/dicttool/etc/manifest.txt
+++ /dev/null
@@ -1 +0,0 @@
-Main-Class: com.android.inputmethod.latin.dicttool.Dicttool
diff --git a/tools/dicttool/src/com/android/inputmethod/latin/dicttool/CombinedInputOutput.java b/tools/dicttool/src/com/android/inputmethod/latin/dicttool/CombinedInputOutput.java
index 955c5728c..5e7aca5bb 100644
--- a/tools/dicttool/src/com/android/inputmethod/latin/dicttool/CombinedInputOutput.java
+++ b/tools/dicttool/src/com/android/inputmethod/latin/dicttool/CombinedInputOutput.java
@@ -106,8 +106,7 @@ public class CombinedInputOutput {
final String args[] = line.trim().split(",");
if (args[0].matches(CombinedFormatUtils.WORD_TAG + "=.*")) {
if (null != word) {
- dict.add(word, probabilityInfo, shortcuts.isEmpty() ? null : shortcuts,
- isNotAWord, isPossiblyOffensive);
+ dict.add(word, probabilityInfo, isNotAWord, isPossiblyOffensive);
for (WeightedString s : bigrams) {
dict.setBigram(word, s.mWord, s.mProbabilityInfo);
}
@@ -148,25 +147,6 @@ public class CombinedInputOutput {
break;
}
}
- } else if (args[0].matches(CombinedFormatUtils.SHORTCUT_TAG + "=.*")) {
- String shortcut = null;
- int shortcutFreq = 0;
- for (String param : args) {
- final String params[] = param.split("=", 2);
- if (2 != params.length) throw new RuntimeException("Wrong format : " + line);
- if (CombinedFormatUtils.SHORTCUT_TAG.equals(params[0])) {
- shortcut = params[1];
- } else if (CombinedFormatUtils.PROBABILITY_TAG.equals(params[0])) {
- shortcutFreq = WHITELIST_TAG.equals(params[1])
- ? FormatSpec.SHORTCUT_WHITELIST_FREQUENCY
- : Integer.parseInt(params[1]);
- }
- }
- if (null != shortcut) {
- shortcuts.add(new WeightedString(shortcut, shortcutFreq));
- } else {
- throw new RuntimeException("Wrong format : " + line);
- }
} else if (args[0].matches(CombinedFormatUtils.BIGRAM_TAG + "=.*")) {
String secondWordOfBigram = null;
ProbabilityInfo bigramProbabilityInfo = new ProbabilityInfo(0);
@@ -200,8 +180,7 @@ public class CombinedInputOutput {
}
}
if (null != word) {
- dict.add(word, probabilityInfo, shortcuts.isEmpty() ? null : shortcuts, isNotAWord,
- isPossiblyOffensive);
+ dict.add(word, probabilityInfo, isNotAWord, isPossiblyOffensive);
for (WeightedString s : bigrams) {
dict.setBigram(word, s.mWord, s.mProbabilityInfo);
}
diff --git a/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Diff.java b/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Diff.java
index f97fbef2c..4ba7e1309 100644
--- a/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Diff.java
+++ b/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Diff.java
@@ -136,9 +136,6 @@ public class Diff extends Dicttool.Command {
}
hasDifferences |= hasAttributesDifferencesAndPrintThemIfAny(word0Property.mWord,
"Bigram", word0Property.getBigrams(), word1PtNode.getBigrams());
- hasDifferences |= hasAttributesDifferencesAndPrintThemIfAny(word0Property.mWord,
- "Shortcut", word0Property.mShortcutTargets,
- word1PtNode.getShortcutTargets());
}
}
for (final WordProperty word1Property : dict1) {
diff --git a/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Info.java b/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Info.java
index b8a64e31a..d516d60c3 100644
--- a/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Info.java
+++ b/tools/dicttool/src/com/android/inputmethod/latin/dicttool/Info.java
@@ -48,15 +48,6 @@ public class Info extends Dicttool.Command {
if (wordProperty.mHasNgrams) {
bigramCount += wordProperty.mNgrams.size();
}
- if (null != wordProperty.mShortcutTargets) {
- shortcutCount += wordProperty.mShortcutTargets.size();
- for (WeightedString shortcutTarget : wordProperty.mShortcutTargets) {
- if (FormatSpec.SHORTCUT_WHITELIST_FREQUENCY
- == shortcutTarget.getProbability()) {
- ++whitelistCount;
- }
- }
- }
}
System.out.println("Words in the dictionary : " + wordCount);
System.out.println("Bigram count : " + bigramCount);
@@ -78,17 +69,6 @@ public class Info extends Dicttool.Command {
if (ptNode.getIsPossiblyOffensive()) {
System.out.println(" Is possibly offensive");
}
- final ArrayList<WeightedString> shortcutTargets = ptNode.getShortcutTargets();
- if (null == shortcutTargets || shortcutTargets.isEmpty()) {
- System.out.println(" No shortcuts");
- } else {
- for (final WeightedString shortcutTarget : shortcutTargets) {
- System.out.println(" Shortcut target: " + shortcutTarget.mWord + " ("
- + (FormatSpec.SHORTCUT_WHITELIST_FREQUENCY
- == shortcutTarget.getProbability() ?
- "whitelist" : shortcutTarget.getProbability()) + ")");
- }
- }
final ArrayList<WeightedString> bigrams = ptNode.getBigrams();
if (null == bigrams || bigrams.isEmpty()) {
System.out.println(" No bigrams");
diff --git a/tools/dicttool/tests/com/android/inputmethod/latin/dicttool/BinaryDictOffdeviceUtilsTests.java b/tools/dicttool/tests/com/android/inputmethod/latin/dicttool/BinaryDictOffdeviceUtilsTests.java
index e68aeb0eb..84d36a0c3 100644
--- a/tools/dicttool/tests/com/android/inputmethod/latin/dicttool/BinaryDictOffdeviceUtilsTests.java
+++ b/tools/dicttool/tests/com/android/inputmethod/latin/dicttool/BinaryDictOffdeviceUtilsTests.java
@@ -85,15 +85,15 @@ public class BinaryDictOffdeviceUtilsTests extends TestCase {
testOptions.mAttributes.put(DictionaryHeader.DICTIONARY_LOCALE_KEY, LOCALE);
testOptions.mAttributes.put(DictionaryHeader.DICTIONARY_ID_KEY, ID);
final FusionDictionary dict = new FusionDictionary(new PtNodeArray(), testOptions);
- dict.add("foo", new ProbabilityInfo(TEST_FREQ), null, false /* isNotAWord */,
+ dict.add("foo", new ProbabilityInfo(TEST_FREQ), false /* isNotAWord */,
false /* isPossiblyOffensive */);
- dict.add("fta", new ProbabilityInfo(1), null, false /* isNotAWord */,
+ dict.add("fta", new ProbabilityInfo(1), false /* isNotAWord */,
false /* isPossiblyOffensive */);
- dict.add("ftb", new ProbabilityInfo(1), null, false /* isNotAWord */,
+ dict.add("ftb", new ProbabilityInfo(1), false /* isNotAWord */,
false /* isPossiblyOffensive */);
- dict.add("bar", new ProbabilityInfo(1), null, false /* isNotAWord */,
+ dict.add("bar", new ProbabilityInfo(1), false /* isNotAWord */,
false /* isPossiblyOffensive */);
- dict.add("fool", new ProbabilityInfo(1), null, false /* isNotAWord */,
+ dict.add("fool", new ProbabilityInfo(1), false /* isNotAWord */,
false /* isPossiblyOffensive */);
final File dst = File.createTempFile("testGetRawDict", ".tmp");
@@ -171,8 +171,8 @@ public class BinaryDictOffdeviceUtilsTests extends TestCase {
for (int i = 0; i < sWords.size(); ++i) {
final String word = sWords.get(i);
- dict.add(word, new ProbabilityInfo(TEST_FREQ), null /* shortcuts */,
- false /* isNotAWord */, false /* isPossiblyOffensive */);
+ dict.add(word, new ProbabilityInfo(TEST_FREQ), false /* isNotAWord */,
+ false /* isPossiblyOffensive */);
}
File file = File.createTempFile(dictName, ".tmp");
diff --git a/tools/dicttool/tests/com/android/inputmethod/latin/makedict/BinaryDictEncoderFlattenTreeTests.java b/tools/dicttool/tests/com/android/inputmethod/latin/makedict/BinaryDictEncoderFlattenTreeTests.java
index dc9981d1a..178fc41e2 100644
--- a/tools/dicttool/tests/com/android/inputmethod/latin/makedict/BinaryDictEncoderFlattenTreeTests.java
+++ b/tools/dicttool/tests/com/android/inputmethod/latin/makedict/BinaryDictEncoderFlattenTreeTests.java
@@ -33,15 +33,15 @@ public class BinaryDictEncoderFlattenTreeTests extends TestCase {
public void testFlattenNodes() {
final FusionDictionary dict = new FusionDictionary(new PtNodeArray(),
new DictionaryOptions(new HashMap<String, String>()));
- dict.add("foo", new ProbabilityInfo(1), null, false /* isNotAWord */,
+ dict.add("foo", new ProbabilityInfo(1), false /* isNotAWord */,
false /* isPossiblyOffensive */);
- dict.add("fta", new ProbabilityInfo(1), null, false /* isNotAWord */,
+ dict.add("fta", new ProbabilityInfo(1), false /* isNotAWord */,
false /* isPossiblyOffensive */);
- dict.add("ftb", new ProbabilityInfo(1), null, false /* isNotAWord */,
+ dict.add("ftb", new ProbabilityInfo(1), false /* isNotAWord */,
false /* isPossiblyOffensive */);
- dict.add("bar", new ProbabilityInfo(1), null, false /* isNotAWord */,
+ dict.add("bar", new ProbabilityInfo(1), false /* isNotAWord */,
false /* isPossiblyOffensive */);
- dict.add("fool", new ProbabilityInfo(1), null, false /* isNotAWord */,
+ dict.add("fool", new ProbabilityInfo(1), false /* isNotAWord */,
false /* isPossiblyOffensive */);
final ArrayList<PtNodeArray> result =
BinaryDictEncoderUtils.flattenTree(dict.mRootNodeArray);
diff --git a/tools/dicttool/tests/com/android/inputmethod/latin/makedict/FusionDictionaryTest.java b/tools/dicttool/tests/com/android/inputmethod/latin/makedict/FusionDictionaryTest.java
index 1a4f096e4..626023920 100644
--- a/tools/dicttool/tests/com/android/inputmethod/latin/makedict/FusionDictionaryTest.java
+++ b/tools/dicttool/tests/com/android/inputmethod/latin/makedict/FusionDictionaryTest.java
@@ -102,7 +102,7 @@ public class FusionDictionaryTest extends TestCase {
prepare(time);
for (int i = 0; i < sWords.size(); ++i) {
System.out.println("Adding in pos " + i + " : " + dumpWord(sWords.get(i)));
- dict.add(sWords.get(i), new ProbabilityInfo(180), null, false,
+ dict.add(sWords.get(i), new ProbabilityInfo(180), false,
false /* isPossiblyOffensive */);
dumpDict(dict);
checkDictionary(dict, sWords, i);
diff --git a/tools/make-keyboard-text/Android.bp b/tools/make-keyboard-text/Android.bp
new file mode 100644
index 000000000..4976051da
--- /dev/null
+++ b/tools/make-keyboard-text/Android.bp
@@ -0,0 +1,22 @@
+//
+// 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.
+
+java_binary_host {
+ name: "make-keyboard-text",
+
+ srcs: ["src/**/*.java"],
+ main_class: "com.android.inputmethod.keyboard.tools.MakeKeyboardText",
+ java_resource_dirs: ["res"],
+}
diff --git a/tools/make-keyboard-text/Android.mk b/tools/make-keyboard-text/Android.mk
deleted file mode 100644
index 87601489e..000000000
--- a/tools/make-keyboard-text/Android.mk
+++ /dev/null
@@ -1,25 +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.
-
-LOCAL_PATH := $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES += $(call all-java-files-under,src)
-LOCAL_JAR_MANIFEST := etc/manifest.txt
-LOCAL_JAVA_RESOURCE_DIRS := res
-LOCAL_MODULE := make-keyboard-text
-
-include $(BUILD_HOST_JAVA_LIBRARY)
-include $(LOCAL_PATH)/etc/Android.mk
diff --git a/tools/make-keyboard-text/etc/Android.mk b/tools/make-keyboard-text/etc/Android.mk
deleted file mode 100644
index 0fbf4ffe9..000000000
--- a/tools/make-keyboard-text/etc/Android.mk
+++ /dev/null
@@ -1,20 +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.
-
-LOCAL_PATH := $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_PREBUILT_EXECUTABLES := make-keyboard-text
-
-include $(BUILD_HOST_PREBUILT)
diff --git a/tools/make-keyboard-text/etc/make-keyboard-text b/tools/make-keyboard-text/etc/make-keyboard-text
deleted file mode 100755
index 156f9ec5f..000000000
--- a/tools/make-keyboard-text/etc/make-keyboard-text
+++ /dev/null
@@ -1,63 +0,0 @@
-#!/bin/sh
-# 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.
-
-# Set up prog to be the path of this script, including following symlinks,
-# and set up progdir to be the fully-qualified pathname of its directory.
-prog="$0"
-while [ -h "${prog}" ]; do
- newProg=`/bin/ls -ld "${prog}"`
- newProg=`expr "${newProg}" : ".* -> \(.*\)$"`
- if expr "x${newProg}" : 'x/' >/dev/null; then
- prog="${newProg}"
- else
- progdir=`dirname "${prog}"`
- prog="${progdir}/${newProg}"
- fi
-done
-oldwd=`pwd`
-progdir=`dirname "${prog}"`
-cd "${progdir}"
-progdir=`pwd`
-prog="${progdir}"/`basename "${prog}"`
-cd "${oldwd}"
-
-jarfile=make-keyboard-text.jar
-frameworkdir="$progdir"
-if [ ! -r "$frameworkdir/$jarfile" ]
-then
- frameworkdir=`dirname "$progdir"`/tools/lib
- libdir=`dirname "$progdir"`/tools/lib
-fi
-if [ ! -r "$frameworkdir/$jarfile" ]
-then
- frameworkdir=`dirname "$progdir"`/framework
- libdir=`dirname "$progdir"`/lib
-fi
-if [ ! -r "$frameworkdir/$jarfile" ]
-then
- echo `basename "$prog"`": can't find $jarfile"
- exit 1
-fi
-
-if [ "$OSTYPE" = "cygwin" ] ; then
- jarpath=`cygpath -w "$frameworkdir/$jarfile"`
- progdir=`cygpath -w "$progdir"`
-else
- jarpath="$frameworkdir/$jarfile"
-fi
-
-# need to use "java.ext.dirs" because "-jar" causes classpath to be ignored
-# might need more memory, e.g. -Xmx128M
-exec java -ea -jar "$jarpath" "$@"
diff --git a/tools/make-keyboard-text/etc/manifest.txt b/tools/make-keyboard-text/etc/manifest.txt
deleted file mode 100644
index 8ad4db059..000000000
--- a/tools/make-keyboard-text/etc/manifest.txt
+++ /dev/null
@@ -1 +0,0 @@
-Main-Class: com.android.inputmethod.keyboard.tools.MakeKeyboardText