From fad5d4ec387401fb62cfc272aff54d1b476baf38 Mon Sep 17 00:00:00 2001 From: Keisuke Kuroyanagi Date: Fri, 27 Sep 2013 21:44:26 +0900 Subject: [PATCH 01/21] Stop reading dictionary while regenerating. (DO NOT MERGE) Cherrypick of Iead7268a9371b48d729a5f65074ccbc05f3185db Bug: 10831272 Change-Id: Ib6f314ac68696616532ff9c05c7f35813137bf9f --- .../latin/ExpandableBinaryDictionary.java | 150 ++++++++++-------- 1 file changed, 88 insertions(+), 62 deletions(-) diff --git a/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java b/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java index 0774ce203..183f12ad9 100644 --- a/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java +++ b/java/src/com/android/inputmethod/latin/ExpandableBinaryDictionary.java @@ -39,6 +39,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicReference; /** @@ -72,14 +73,15 @@ abstract public class ExpandableBinaryDictionary extends Dictionary { new FormatSpec.FormatOptions(3 /* version */, true /* supportsDynamicUpdate */); /** - * A static map of time recorders, each of which records the time of accesses to a single binary - * dictionary file. The key for this map is the filename and the value is the shared dictionary - * time recorder associated with that filename. + * A static map of update controllers, each of which records the time of accesses to a single + * binary dictionary file and tracks whether the file is regenerating. The key for this map is + * the filename and the value is the shared dictionary time recorder associated with that + * filename. */ - private static volatile ConcurrentHashMap - sFilenameDictionaryTimeRecorderMap = CollectionUtils.newConcurrentHashMap(); + private static final ConcurrentHashMap + sFilenameDictionaryUpdateControllerMap = CollectionUtils.newConcurrentHashMap(); - private static volatile ConcurrentHashMap + private static final ConcurrentHashMap sFilenameExecutorMap = CollectionUtils.newConcurrentHashMap(); /** The application context. */ @@ -106,13 +108,13 @@ abstract public class ExpandableBinaryDictionary extends Dictionary { private final boolean mIsUpdatable; // TODO: remove, once dynamic operations is serialized - /** Records access to the shared binary dictionary file across multiple instances. */ - private final DictionaryTimeRecorder mFilenameDictionaryTimeRecorder; + /** Controls updating the shared binary dictionary file across multiple instances. */ + private final DictionaryUpdateController mFilenameDictionaryUpdateController; // TODO: remove, once dynamic operations is serialized - /** Records access to the local binary dictionary for this instance. */ - private final DictionaryTimeRecorder mPerInstanceDictionaryTimeRecorder = - new DictionaryTimeRecorder(); + /** Controls updating the local binary dictionary for this instance. */ + private final DictionaryUpdateController mPerInstanceDictionaryUpdateController = + new DictionaryUpdateController(); /* A extension for a binary dictionary file. */ public static final String DICT_FILE_EXTENSION = ".dict"; @@ -134,15 +136,15 @@ abstract public class ExpandableBinaryDictionary extends Dictionary { protected abstract boolean hasContentChanged(); /** - * Gets the dictionary time recorder for the given filename. + * Gets the dictionary update controller for the given filename. */ - private static DictionaryTimeRecorder getDictionaryTimeRecorder( + private static DictionaryUpdateController getDictionaryUpdateController( String filename) { - DictionaryTimeRecorder recorder = sFilenameDictionaryTimeRecorderMap.get(filename); + DictionaryUpdateController recorder = sFilenameDictionaryUpdateControllerMap.get(filename); if (recorder == null) { - synchronized(sFilenameDictionaryTimeRecorderMap) { - recorder = new DictionaryTimeRecorder(); - sFilenameDictionaryTimeRecorderMap.put(filename, recorder); + synchronized(sFilenameDictionaryUpdateControllerMap) { + recorder = new DictionaryUpdateController(); + sFilenameDictionaryUpdateControllerMap.put(filename, recorder); } } return recorder; @@ -192,7 +194,7 @@ abstract public class ExpandableBinaryDictionary extends Dictionary { mContext = context; mIsUpdatable = isUpdatable; mBinaryDictionary = null; - mFilenameDictionaryTimeRecorder = getDictionaryTimeRecorder(filename); + mFilenameDictionaryUpdateController = getDictionaryUpdateController(filename); // Currently, only dynamic personalization dictionary is updatable. mDictionaryWriter = getDictionaryWriter(context, dictType, isUpdatable); } @@ -352,6 +354,9 @@ abstract public class ExpandableBinaryDictionary extends Dictionary { final boolean blockOffensiveWords, final int[] additionalFeaturesOptions, final int sessionId) { reloadDictionaryIfRequired(); + if (isRegenerating()) { + return null; + } final ArrayList suggestions = CollectionUtils.newArrayList(); final AsyncResultHolder> holder = new AsyncResultHolder>(); @@ -412,6 +417,9 @@ abstract public class ExpandableBinaryDictionary extends Dictionary { } protected boolean isValidWordInner(final String word) { + if (isRegenerating()) { + return false; + } final AsyncResultHolder holder = new AsyncResultHolder(); getExecutor(mFilename).executePrioritized(new Runnable() { @Override @@ -437,7 +445,7 @@ abstract public class ExpandableBinaryDictionary extends Dictionary { * dictionary exists, this method will generate one. */ protected void loadDictionary() { - mPerInstanceDictionaryTimeRecorder.mLastUpdateRequestTime = SystemClock.uptimeMillis(); + mPerInstanceDictionaryUpdateController.mLastUpdateRequestTime = SystemClock.uptimeMillis(); reloadDictionaryIfRequired(); } @@ -448,8 +456,8 @@ abstract public class ExpandableBinaryDictionary extends Dictionary { private void loadBinaryDictionary() { if (DEBUG) { Log.d(TAG, "Loading binary dictionary: " + mFilename + " request=" - + mFilenameDictionaryTimeRecorder.mLastUpdateRequestTime + " update=" - + mFilenameDictionaryTimeRecorder.mLastUpdateTime); + + mFilenameDictionaryUpdateController.mLastUpdateRequestTime + " update=" + + mFilenameDictionaryUpdateController.mLastUpdateTime); } final File file = new File(mContext.getFilesDir(), mFilename); @@ -487,8 +495,8 @@ abstract public class ExpandableBinaryDictionary extends Dictionary { private void writeBinaryDictionary() { if (DEBUG) { Log.d(TAG, "Generating binary dictionary: " + mFilename + " request=" - + mFilenameDictionaryTimeRecorder.mLastUpdateRequestTime + " update=" - + mFilenameDictionaryTimeRecorder.mLastUpdateTime); + + mFilenameDictionaryUpdateController.mLastUpdateRequestTime + " update=" + + mFilenameDictionaryUpdateController.mLastUpdateTime); } if (needsToReloadBeforeWriting()) { mDictionaryWriter.clear(); @@ -531,11 +539,11 @@ abstract public class ExpandableBinaryDictionary extends Dictionary { */ protected void setRequiresReload(final boolean requiresRebuild) { final long time = SystemClock.uptimeMillis(); - mPerInstanceDictionaryTimeRecorder.mLastUpdateRequestTime = time; - mFilenameDictionaryTimeRecorder.mLastUpdateRequestTime = time; + mPerInstanceDictionaryUpdateController.mLastUpdateRequestTime = time; + mFilenameDictionaryUpdateController.mLastUpdateRequestTime = time; if (DEBUG) { Log.d(TAG, "Reload request: " + mFilename + ": request=" + time + " update=" - + mFilenameDictionaryTimeRecorder.mLastUpdateTime); + + mFilenameDictionaryUpdateController.mLastUpdateTime); } } @@ -544,14 +552,26 @@ abstract public class ExpandableBinaryDictionary extends Dictionary { */ public final void reloadDictionaryIfRequired() { if (!isReloadRequired()) return; - reloadDictionary(); + if (setIsRegeneratingIfNotRegenerating()) { + reloadDictionary(); + } } /** * Returns whether a dictionary reload is required. */ private boolean isReloadRequired() { - return mBinaryDictionary == null || mPerInstanceDictionaryTimeRecorder.isOutOfDate(); + return mBinaryDictionary == null || mPerInstanceDictionaryUpdateController.isOutOfDate(); + } + + private boolean isRegenerating() { + return mFilenameDictionaryUpdateController.mIsRegenerating.get(); + } + + // Returns whether the dictionary can be regenerated. + private boolean setIsRegeneratingIfNotRegenerating() { + return mFilenameDictionaryUpdateController.mIsRegenerating.compareAndSet( + false /* expect */ , true /* update */); } /** @@ -564,39 +584,44 @@ abstract public class ExpandableBinaryDictionary extends Dictionary { getExecutor(mFilename).execute(new Runnable() { @Override public void run() { - final long time = SystemClock.uptimeMillis(); - final boolean dictionaryFileExists = dictionaryFileExists(); - if (mFilenameDictionaryTimeRecorder.isOutOfDate() || !dictionaryFileExists) { - // If the shared dictionary file does not exist or is out of date, the first - // instance that acquires the lock will generate a new one. - if (hasContentChanged() || !dictionaryFileExists) { - // If the source content has changed or the dictionary does not exist, - // rebuild the binary dictionary. Empty dictionaries are supported (in the - // case where loadDictionaryAsync() adds nothing) in order to provide a - // uniform framework. - mFilenameDictionaryTimeRecorder.mLastUpdateTime = time; + try { + final long time = SystemClock.uptimeMillis(); + final boolean dictionaryFileExists = dictionaryFileExists(); + if (mFilenameDictionaryUpdateController.isOutOfDate() + || !dictionaryFileExists) { + // If the shared dictionary file does not exist or is out of date, the + // first instance that acquires the lock will generate a new one. + if (hasContentChanged() || !dictionaryFileExists) { + // If the source content has changed or the dictionary does not exist, + // rebuild the binary dictionary. Empty dictionaries are supported (in + // the case where loadDictionaryAsync() adds nothing) in order to + // provide a uniform framework. + mFilenameDictionaryUpdateController.mLastUpdateTime = time; + writeBinaryDictionary(); + loadBinaryDictionary(); + } else { + // If not, the reload request was unnecessary so revert + // LastUpdateRequestTime to LastUpdateTime. + mFilenameDictionaryUpdateController.mLastUpdateRequestTime = + mFilenameDictionaryUpdateController.mLastUpdateTime; + } + } else if (mBinaryDictionary == null || + mPerInstanceDictionaryUpdateController.mLastUpdateTime + < mFilenameDictionaryUpdateController.mLastUpdateTime) { + // Otherwise, if the local dictionary is older than the shared dictionary, + // load the shared dictionary. + loadBinaryDictionary(); + } + if (mBinaryDictionary != null && !mBinaryDictionary.isValidDictionary()) { + // Binary dictionary is not valid. Regenerate the dictionary file. + mFilenameDictionaryUpdateController.mLastUpdateTime = time; writeBinaryDictionary(); loadBinaryDictionary(); - } else { - // If not, the reload request was unnecessary so revert - // LastUpdateRequestTime to LastUpdateTime. - mFilenameDictionaryTimeRecorder.mLastUpdateRequestTime = - mFilenameDictionaryTimeRecorder.mLastUpdateTime; } - } else if (mBinaryDictionary == null || - mPerInstanceDictionaryTimeRecorder.mLastUpdateTime - < mFilenameDictionaryTimeRecorder.mLastUpdateTime) { - // Otherwise, if the local dictionary is older than the shared dictionary, load - // the shared dictionary. - loadBinaryDictionary(); + mPerInstanceDictionaryUpdateController.mLastUpdateTime = time; + } finally { + mFilenameDictionaryUpdateController.mIsRegenerating.set(false); } - if (mBinaryDictionary != null && !mBinaryDictionary.isValidDictionary()) { - // Binary dictionary is not valid. Regenerate the dictionary file. - mFilenameDictionaryTimeRecorder.mLastUpdateTime = time; - writeBinaryDictionary(); - loadBinaryDictionary(); - } - mPerInstanceDictionaryTimeRecorder.mLastUpdateTime = time; } }); } @@ -636,14 +661,15 @@ abstract public class ExpandableBinaryDictionary extends Dictionary { } /** - * Time recorder for tracking whether the dictionary is out of date. + * For tracking whether the dictionary is out of date and the dictionary is regenerating. * Can be shared across multiple dictionary instances that access the same filename. */ - private static class DictionaryTimeRecorder { - private volatile long mLastUpdateTime = 0; - private volatile long mLastUpdateRequestTime = 0; + private static class DictionaryUpdateController { + public volatile long mLastUpdateTime = 0; + public volatile long mLastUpdateRequestTime = 0; + public volatile AtomicBoolean mIsRegenerating = new AtomicBoolean(); - private boolean isOutOfDate() { + public boolean isOutOfDate() { return (mLastUpdateRequestTime > mLastUpdateTime); } } From 4eb9776da22aba0e4a88e354828d3ad7bf387650 Mon Sep 17 00:00:00 2001 From: Keisuke Kuroyanagi Date: Mon, 30 Sep 2013 18:16:29 +0900 Subject: [PATCH 02/21] Use reentrant lock for main dictionaries. DO NOT MERGE cherrypick of Iaa9b79fc770d8ae2ec9d7c362c90c28bc9f65ea8 Bug: 10964805 Change-Id: Id5e67b00bf9594be0591c87407a78146297e0e78 --- .../inputmethod/latin/DictionaryFactory.java | 31 +++-- .../latin/ReadOnlyBinaryDictionary.java | 120 ++++++++++++++++++ 2 files changed, 135 insertions(+), 16 deletions(-) create mode 100644 java/src/com/android/inputmethod/latin/ReadOnlyBinaryDictionary.java diff --git a/java/src/com/android/inputmethod/latin/DictionaryFactory.java b/java/src/com/android/inputmethod/latin/DictionaryFactory.java index 3721132c5..828e54f14 100644 --- a/java/src/com/android/inputmethod/latin/DictionaryFactory.java +++ b/java/src/com/android/inputmethod/latin/DictionaryFactory.java @@ -51,7 +51,7 @@ public final class DictionaryFactory { if (null == locale) { Log.e(TAG, "No locale defined for dictionary"); return new DictionaryCollection(Dictionary.TYPE_MAIN, - createBinaryDictionary(context, locale)); + createReadOnlyBinaryDictionary(context, locale)); } final LinkedList dictList = CollectionUtils.newLinkedList(); @@ -59,11 +59,11 @@ public final class DictionaryFactory { BinaryDictionaryGetter.getDictionaryFiles(locale, context); if (null != assetFileList) { for (final AssetFileAddress f : assetFileList) { - final BinaryDictionary binaryDictionary = new BinaryDictionary(f.mFilename, - f.mOffset, f.mLength, useFullEditDistance, locale, Dictionary.TYPE_MAIN, - false /* isUpdatable */); - if (binaryDictionary.isValidDictionary()) { - dictList.add(binaryDictionary); + final ReadOnlyBinaryDictionary readOnlyBinaryDictionary = + new ReadOnlyBinaryDictionary(f.mFilename, f.mOffset, f.mLength, + useFullEditDistance, locale, Dictionary.TYPE_MAIN); + if (readOnlyBinaryDictionary.isValidDictionary()) { + dictList.add(readOnlyBinaryDictionary); } } } @@ -89,12 +89,12 @@ public final class DictionaryFactory { } /** - * Initializes a dictionary from a raw resource file + * Initializes a read-only binary dictionary from a raw resource file * @param context application context for reading resources * @param locale the locale to use for the resource - * @return an initialized instance of BinaryDictionary + * @return an initialized instance of ReadOnlyBinaryDictionary */ - protected static BinaryDictionary createBinaryDictionary(final Context context, + protected static ReadOnlyBinaryDictionary createReadOnlyBinaryDictionary(final Context context, final Locale locale) { AssetFileDescriptor afd = null; try { @@ -113,9 +113,8 @@ public final class DictionaryFactory { Log.e(TAG, "sourceDir is not a file: " + sourceDir); return null; } - return new BinaryDictionary(sourceDir, afd.getStartOffset(), afd.getLength(), - false /* useFullEditDistance */, locale, Dictionary.TYPE_MAIN, - false /* isUpdatable */); + return new ReadOnlyBinaryDictionary(sourceDir, afd.getStartOffset(), afd.getLength(), + false /* useFullEditDistance */, locale, Dictionary.TYPE_MAIN); } catch (android.content.res.Resources.NotFoundException e) { Log.e(TAG, "Could not find the resource"); return null; @@ -142,10 +141,10 @@ public final class DictionaryFactory { final DictionaryCollection dictionaryCollection = new DictionaryCollection(Dictionary.TYPE_MAIN); for (final AssetFileAddress address : dictionaryList) { - final BinaryDictionary binaryDictionary = new BinaryDictionary(address.mFilename, - address.mOffset, address.mLength, useFullEditDistance, locale, - Dictionary.TYPE_MAIN, false /* isUpdatable */); - dictionaryCollection.addDictionary(binaryDictionary); + final ReadOnlyBinaryDictionary readOnlyBinaryDictionary = new ReadOnlyBinaryDictionary( + address.mFilename, address.mOffset, address.mLength, useFullEditDistance, + locale, Dictionary.TYPE_MAIN); + dictionaryCollection.addDictionary(readOnlyBinaryDictionary); } return dictionaryCollection; } diff --git a/java/src/com/android/inputmethod/latin/ReadOnlyBinaryDictionary.java b/java/src/com/android/inputmethod/latin/ReadOnlyBinaryDictionary.java new file mode 100644 index 000000000..68505ce38 --- /dev/null +++ b/java/src/com/android/inputmethod/latin/ReadOnlyBinaryDictionary.java @@ -0,0 +1,120 @@ +/* + * 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; + +import com.android.inputmethod.keyboard.ProximityInfo; +import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo; + +import java.util.ArrayList; +import java.util.Locale; +import java.util.concurrent.locks.ReentrantReadWriteLock; + +/** + * This class provides binary dictionary reading operations with locking. An instance of this class + * can be used by multiple threads. Note that different session IDs must be used when multiple + * threads get suggestions using this class. + */ +public final class ReadOnlyBinaryDictionary extends Dictionary { + /** + * A lock for accessing binary dictionary. Only closing binary dictionary is the operation + * that change the state of dictionary. + */ + private final ReentrantReadWriteLock mLock = new ReentrantReadWriteLock(); + + private final BinaryDictionary mBinaryDictionary; + + public ReadOnlyBinaryDictionary(final String filename, final long offset, final long length, + final boolean useFullEditDistance, final Locale locale, final String dictType) { + super(dictType); + mBinaryDictionary = new BinaryDictionary(filename, offset, length, useFullEditDistance, + locale, dictType, false /* isUpdatable */); + } + + public boolean isValidDictionary() { + return mBinaryDictionary.isValidDictionary(); + } + + @Override + public ArrayList getSuggestions(final WordComposer composer, + final String prevWord, final ProximityInfo proximityInfo, + final boolean blockOffensiveWords, final int[] additionalFeaturesOptions) { + return getSuggestionsWithSessionId(composer, prevWord, proximityInfo, blockOffensiveWords, + additionalFeaturesOptions, 0 /* sessionId */); + } + + @Override + public ArrayList getSuggestionsWithSessionId(final WordComposer composer, + final String prevWord, final ProximityInfo proximityInfo, + final boolean blockOffensiveWords, final int[] additionalFeaturesOptions, + final int sessionId) { + if (mLock.readLock().tryLock()) { + try { + return mBinaryDictionary.getSuggestions(composer, prevWord, proximityInfo, + blockOffensiveWords, additionalFeaturesOptions); + } finally { + mLock.readLock().unlock(); + } + } + return null; + } + + @Override + public boolean isValidWord(final String word) { + if (mLock.readLock().tryLock()) { + try { + return mBinaryDictionary.isValidWord(word); + } finally { + mLock.readLock().unlock(); + } + } + return false; + } + + @Override + public boolean shouldAutoCommit(final SuggestedWordInfo candidate) { + if (mLock.readLock().tryLock()) { + try { + return mBinaryDictionary.shouldAutoCommit(candidate); + } finally { + mLock.readLock().unlock(); + } + } + return false; + } + + @Override + public int getFrequency(final String word) { + if (mLock.readLock().tryLock()) { + try { + return mBinaryDictionary.getFrequency(word); + } finally { + mLock.readLock().unlock(); + } + } + return NOT_A_PROBABILITY; + } + + @Override + public void close() { + mLock.writeLock().lock(); + try { + mBinaryDictionary.close(); + } finally { + mLock.writeLock().unlock(); + } + } +} From 3cc0a1d2e0c5f82af561af8b51dfcaff9b2070af Mon Sep 17 00:00:00 2001 From: Keisuke Kuroyanagi Date: Thu, 3 Oct 2013 17:33:34 +0900 Subject: [PATCH 03/21] Fix: Native crash when an empty attribute is written. DO NOT MERGE Bug: 10964805 Change-Id: I862a6b920a7a09eac4e012bfe75f087b2d7b4fe6 --- .../policyimpl/dictionary/header/header_read_write_utils.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/native/jni/src/suggest/policyimpl/dictionary/header/header_read_write_utils.cpp b/native/jni/src/suggest/policyimpl/dictionary/header/header_read_write_utils.cpp index 2694ce8d5..5ded8f6a1 100644 --- a/native/jni/src/suggest/policyimpl/dictionary/header/header_read_write_utils.cpp +++ b/native/jni/src/suggest/policyimpl/dictionary/header/header_read_write_utils.cpp @@ -139,6 +139,9 @@ const char *const HeaderReadWriteUtils::REQUIRES_FRENCH_LIGATURE_PROCESSING_KEY int *const writingPos) { for (AttributeMap::const_iterator it = headerAttributes->begin(); it != headerAttributes->end(); ++it) { + if (it->first.empty() || it->second.empty()) { + continue; + } // Write a key. if (!buffer->writeCodePointsAndAdvancePosition(&(it->first.at(0)), it->first.size(), true /* writesTerminator */, writingPos)) { From 2215ce5811283c37f6af87367941f21bd05374bc Mon Sep 17 00:00:00 2001 From: Satoshi Kataoka Date: Thu, 3 Oct 2013 17:43:11 +0900 Subject: [PATCH 04/21] Do not merge. Revert emoji key position to JB-mr2 Cherry pick of Ie2033b2f5253b2e2 Bug: 10954182 Change-Id: I9cc61e27a207055d5a43fe3da6fd1ec63bae49fd --- java/res/xml-sw600dp/rows_symbols.xml | 2 ++ java/res/xml/key_styles_common.xml | 21 +++++++++++++++++++++ java/res/xml/row_symbols4.xml | 4 ---- java/res/xml/rows_symbols.xml | 3 +++ 4 files changed, 26 insertions(+), 4 deletions(-) diff --git a/java/res/xml-sw600dp/rows_symbols.xml b/java/res/xml-sw600dp/rows_symbols.xml index fbd8492cd..cf94b06ed 100644 --- a/java/res/xml-sw600dp/rows_symbols.xml +++ b/java/res/xml-sw600dp/rows_symbols.xml @@ -68,5 +68,7 @@ latin:keyWidth="10.0%p" /> + diff --git a/java/res/xml/key_styles_common.xml b/java/res/xml/key_styles_common.xml index 67ed9620d..c9d87bfd4 100644 --- a/java/res/xml/key_styles_common.xml +++ b/java/res/xml/key_styles_common.xml @@ -121,6 +121,27 @@ latin:keyIcon="!icon/emoji_key" latin:keyActionFlags="noKeyPreview" latin:backgroundType="functional" /> + + + + + + + + + + + - - diff --git a/java/res/xml/rows_symbols.xml b/java/res/xml/rows_symbols.xml index 3f102e277..d0606c63b 100644 --- a/java/res/xml/rows_symbols.xml +++ b/java/res/xml/rows_symbols.xml @@ -60,5 +60,8 @@ latin:keyWidth="15%p" /> + From 3dd33652e461344d4c8a2ca5069b832c47aacdfd Mon Sep 17 00:00:00 2001 From: Satoshi Kataoka Date: Wed, 16 Oct 2013 14:39:49 +0900 Subject: [PATCH 05/21] Do not merge. Remove Azerbaijani subtype The corresponding change is I0d2a98dffe03ebd Bug: 11244796 Change-Id: I0d2a98dffe03ebddf26fc3c2760061c39de4c57e --- java/res/xml/method.xml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/java/res/xml/method.xml b/java/res/xml/method.xml index f0e04c220..cef2451e2 100644 --- a/java/res/xml/method.xml +++ b/java/res/xml/method.xml @@ -24,7 +24,7 @@ keyboard_locale: script_name/keyboard_layout_set af: Afrikaans/qwerty ar: Arabic/arabic - az: Azerbaijani/qwerty + (az: Azerbaijani/qwerty) # disabled temporarily. waiting for string resources. be: Belarusian/east_slavic bg: Bulgarian/bulgarian bg: Bulgarian/bulgarian_bds @@ -53,7 +53,7 @@ it: Italian/qwerty iw: Hebrew/hebrew # "he" is official language code of Hebrew. ka: Georgian/georgian - (kk: Kazakh/east_slavic) # disabled temporarily. waiting for strnig resources. + (kk: Kazakh/east_slavic) # disabled temporarily. waiting for string resources. km: Khmer/khmer ky: Kyrgyz/east_slavic lo: Lao/lao @@ -63,8 +63,8 @@ mn: Mongolian/mongolian ms: Malay/qwerty nb: Norwegian Bokmål/nordic - ne: Nepali Romanized/nepali_romanized # disabled temporarily - ne: Nepali Traditional/nepali_traditional # disabled temporarily + (ne: Nepali Romanized/nepali_romanized) # disabled temporarily + (ne: Nepali Traditional/nepali_traditional) # disabled temporarily nl: Dutch/qwerty nl_BE: Dutch Belgium/azerty pl: Polish/qwerty @@ -123,6 +123,7 @@ android:imeSubtypeMode="keyboard" android:imeSubtypeExtraValue="SupportTouchPositionCorrection,EmojiCapable" /> + Date: Thu, 17 Oct 2013 16:30:15 +0900 Subject: [PATCH 06/21] Do not merge. Fix keyboard layout - Show "..." on enter key if it has long-pressing emoji key - Show enter key on symbols shift keyboard Bug: 11262889 Bug: 11263464 Change-Id: I3797fe2ef8c1e4cbba3298475f01f90c98e3335f --- java/res/xml-sw600dp/rows_symbols_shift.xml | 2 ++ java/res/xml/key_styles_enter.xml | 3 +++ java/res/xml/row_symbols_shift4.xml | 4 ---- java/res/xml/rows_symbols_shift.xml | 3 +++ 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/java/res/xml-sw600dp/rows_symbols_shift.xml b/java/res/xml-sw600dp/rows_symbols_shift.xml index aad047ff6..92299f65d 100644 --- a/java/res/xml-sw600dp/rows_symbols_shift.xml +++ b/java/res/xml-sw600dp/rows_symbols_shift.xml @@ -70,5 +70,7 @@ latin:keyWidth="10%p" /> + diff --git a/java/res/xml/key_styles_enter.xml b/java/res/xml/key_styles_enter.xml index 568c60270..083e6a67d 100644 --- a/java/res/xml/key_styles_enter.xml +++ b/java/res/xml/key_styles_enter.xml @@ -190,6 +190,7 @@ > diff --git a/java/res/xml/row_symbols_shift4.xml b/java/res/xml/row_symbols_shift4.xml index 72d24a321..0909374f4 100644 --- a/java/res/xml/row_symbols_shift4.xml +++ b/java/res/xml/row_symbols_shift4.xml @@ -23,8 +23,4 @@ - - - diff --git a/java/res/xml/rows_symbols_shift.xml b/java/res/xml/rows_symbols_shift.xml index 45ada2a61..c4bdb9f38 100644 --- a/java/res/xml/rows_symbols_shift.xml +++ b/java/res/xml/rows_symbols_shift.xml @@ -60,5 +60,8 @@ latin:keyWidth="15%p" /> + From 329fd2d8324933824a87499a8bf006b3b4690ac9 Mon Sep 17 00:00:00 2001 From: Satoshi Kataoka Date: Thu, 17 Oct 2013 17:53:33 +0900 Subject: [PATCH 07/21] Do not merge. Don't show long-pressing emoji key on tablet Bug: 11264603 Change-Id: Ic46086e9f1b223e26586e0611d14a7d14b561100 --- java/res/xml-sw600dp/key_styles_enter.xml | 191 ++++++++++++++++++++++ 1 file changed, 191 insertions(+) create mode 100644 java/res/xml-sw600dp/key_styles_enter.xml diff --git a/java/res/xml-sw600dp/key_styles_enter.xml b/java/res/xml-sw600dp/key_styles_enter.xml new file mode 100644 index 000000000..1d8ccfae3 --- /dev/null +++ b/java/res/xml-sw600dp/key_styles_enter.xml @@ -0,0 +1,191 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From a3c285e876268a79b4c971b8aa11d430d2addce6 Mon Sep 17 00:00:00 2001 From: Jean Chalard Date: Fri, 11 Oct 2013 19:33:59 +0900 Subject: [PATCH 08/21] [DO NOT MERGE] Fix a bug where autoshift would be ignored coming from emoji Bug: 11123691 Change-Id: I36474e12e34af95051129840865015f85595411b --- .../android/inputmethod/keyboard/internal/KeyboardState.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java index 9f9fdaa6f..dd98c1703 100644 --- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java +++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java @@ -327,6 +327,9 @@ public final class KeyboardState { } mIsAlphabetMode = false; mIsEmojiMode = true; + // Remember caps lock mode and reset alphabet shift state. + mPrevMainKeyboardWasShiftLocked = mAlphabetShiftState.isShiftLocked(); + mAlphabetShiftState.setShiftLocked(false); mSwitchActions.setEmojiKeyboard(); } From 9fa7efb0c52594a7c03c3c861094629f8d5cf499 Mon Sep 17 00:00:00 2001 From: Baligh Uddin Date: Thu, 17 Oct 2013 08:40:51 -0700 Subject: [PATCH 09/21] Import translations. DO NOT MERGE Change-Id: Ia2590927c02e8e64506e746650d318c1d84ae7c2 Auto-generated-cl: translation import --- java/res/values-da/strings.xml | 2 +- java/res/values-ja/strings.xml | 2 +- java/res/values-nb/strings.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/java/res/values-da/strings.xml b/java/res/values-da/strings.xml index cebe8d341..93d5c4e9b 100644 --- a/java/res/values-da/strings.xml +++ b/java/res/values-da/strings.xml @@ -192,7 +192,7 @@ "Konfigurer flere sprog" "Afslut" "Vis appikon" - "Vis appikon på applikationsliste" + "Vis appikon på applisten" "Dictionary Provider" "Dictionary Provider" "Ordbogstjeneste" diff --git a/java/res/values-ja/strings.xml b/java/res/values-ja/strings.xml index a8229c0d7..fd546d9da 100644 --- a/java/res/values-ja/strings.xml +++ b/java/res/values-ja/strings.xml @@ -50,7 +50,7 @@ "スペースバーをダブルタップするとピリオドとスペースを挿入できます" "自動大文字変換" "英字入力で各文の最初の単語を大文字にします" - "ユーザー辞書" + "単語リスト" "アドオン辞書" "メイン辞書" "修正候補を表示する" diff --git a/java/res/values-nb/strings.xml b/java/res/values-nb/strings.xml index 0a2def8b2..a473cce71 100644 --- a/java/res/values-nb/strings.xml +++ b/java/res/values-nb/strings.xml @@ -222,7 +222,7 @@ "Last ned via Wi-Fi" "En ordliste er tilgjengelig for %1$s" "Trykk for å se gjennom og laste ned" - "Laster ned: forslag blir snart tilgjengelige for %1$s." + "Laster ned: Forslag blir snart tilgjengelige for %1$s." "Versjon %1$s" "Legg til" "Legg til i ordlisten" From 486c5896102cccfaa79d2109272ab7235dcacf38 Mon Sep 17 00:00:00 2001 From: Baligh Uddin Date: Thu, 17 Oct 2013 11:15:33 -0700 Subject: [PATCH 10/21] Remove obsolete locale directories. Bug: 11244796 --- java/res/values-et/bools.xml | 24 --- java/res/values-et/strings-appname.xml | 27 --- java/res/values-et/strings.xml | 242 ------------------------- java/res/values-hy/donottranslate.xml | 32 ---- java/res/values-ka/bools.xml | 24 --- java/res/values-ka/strings.xml | 242 ------------------------- java/res/values-km/donottranslate.xml | 23 --- java/res/values-lo/donottranslate.xml | 23 --- java/res/values-mn/strings-appname.xml | 27 --- java/res/values-mn/strings.xml | 242 ------------------------- java/res/values-ms/bools.xml | 24 --- java/res/values-ms/strings-appname.xml | 27 --- java/res/values-ms/strings.xml | 242 ------------------------- 13 files changed, 1199 deletions(-) delete mode 100644 java/res/values-et/bools.xml delete mode 100644 java/res/values-et/strings-appname.xml delete mode 100644 java/res/values-et/strings.xml delete mode 100644 java/res/values-hy/donottranslate.xml delete mode 100644 java/res/values-ka/bools.xml delete mode 100644 java/res/values-ka/strings.xml delete mode 100644 java/res/values-km/donottranslate.xml delete mode 100644 java/res/values-lo/donottranslate.xml delete mode 100644 java/res/values-mn/strings-appname.xml delete mode 100644 java/res/values-mn/strings.xml delete mode 100644 java/res/values-ms/bools.xml delete mode 100644 java/res/values-ms/strings-appname.xml delete mode 100644 java/res/values-ms/strings.xml diff --git a/java/res/values-et/bools.xml b/java/res/values-et/bools.xml deleted file mode 100644 index 840d20c21..000000000 --- a/java/res/values-et/bools.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - true - diff --git a/java/res/values-et/strings-appname.xml b/java/res/values-et/strings-appname.xml deleted file mode 100644 index bbc13d293..000000000 --- a/java/res/values-et/strings-appname.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - "Androidi klaviatuur (AOSP)" - "Androidi õigekirjakontroll (AOSP)" - "Androidi klaviatuuri seaded (AOSP)" - "Androidi õigekirjakontrolli seaded (AOSP)" - diff --git a/java/res/values-et/strings.xml b/java/res/values-et/strings.xml deleted file mode 100644 index 9b9c93a7b..000000000 --- a/java/res/values-et/strings.xml +++ /dev/null @@ -1,242 +0,0 @@ - - - - - "Sisestusvalikud" - "Uuringulogi käsud" - "Kontakti nimede kontroll." - "Õigekirjakontroll kasutab teie kontaktisikute loendi sissekandeid" - "Vibreeri klahvivajutusel" - "Heli klahvivajutusel" - "Klahvivajutusel kuva hüpik" - "Üldine" - "Teksti parandamine" - "Joonistusega sisestamine" - "Muud valikud" - "Täpsemad seaded" - "Valikud ekspertidele" - "Vaheta sisestusmeetodit" - "Keelevahetuse võti hõlmab ka muid sisestusmeetodeid" - "Keelevahetuse nupp" - "Kuva, kui lubatud on mitu sisendkeelt" - "Kuva lohistamisnäidik" - "Tõstu- või sümboliklahvidelt lohistades anna visuaalselt märku" - "Hüpiku loobumisviivitus" - "Viivituseta" - "Vaikeseade" - "%s ms" - "Süsteemi vaikeväärt." - "Soovita kontaktkirjeid" - "Kasuta soovitusteks ja parandusteks nimesid kontaktiloendist" - "Punkt tühikuklahviga" - "Tühikuklahvi kaks korda puudutades sisestatakse punkt ja tühik" - "Automaatne suurtähtede kasutamine" - "Iga lause esimese sõna kirjutamine suure algustähega" - "Isiklik sõnastik" - "Pistiksõnaraamatud" - "Peamine sõnaraamat" - "Kuva parandussoovitusi" - "Kuva sisestamise ajal sõnasoovitusi" - "Kuva alati" - "Kuva vertikaalrežiimis" - "Peida alati" - "Blokeeri solvavad sõnad" - "Ära soovita potentsiaals. solvavaid sõnu" - "Automaatparandus" - "Tühik ja kirjavahemärgid parand. autom. kirjavigadega sõnad" - "Väljas" - "Mõõdukas" - "Agressiivne" - "Väga agressiivne" - "Järgmise sõna soovitused" - "Soovituste tegemisel eelmise sõna kasutamine" - "Luba joonistusega sisestamine" - "Sõna sisestamine tähtede lohistamisega" - "Näita liigutuse jälge" - "Dünaamiline ujuv eelvaade" - "Soovitatud sõna vaatamine joonistusega sisestamise ajal" - "%s : salvestatud" - "Mine" - "Edasi" - "Eelm." - "Valmis" - "Saada" - "Peata" - "Oota" - "Ühendage peakomplekt, et kuulata paroole." - "Praegune tekst on %s" - "Teksti ei ole sisestatud" - "Klahvi kood: %d" - "Tõstuklahv" - "Tõstuklahv sees (puudutage keelamiseks)" - "Suurtähelukk on sees (puudutage keelamiseks)" - "Kustuta" - "Sümbolid" - "Tähed" - "Numbrid" - "Seaded" - "Tabulaator" - "Tühik" - "Kõnesisend" - "Naerunägu" - "Tagasi" - "Otsing" - "Punkt" - "Keele vahetamine" - "Järgmine" - "Eelmine" - "Tõstuklahv on lubatud" - "Suurtähelukk on lubatud" - "Tõstuklahv on keelatud" - "Sümbolite režiim" - "Tähtede režiim" - "Telefonirežiim" - "Telefoni sümbolite režiim" - "Klaviatuur on peidetud" - "Näitab klaviatuuri režiimil %s" - "kuupäev" - "kuupäev ja kellaaeg" - "e-post" - "sõnumiside" - "number" - "telefon" - "tekst" - "aeg" - "URL" - "Häälesisendi klahv" - "Peamisel klaviatuuril" - "Sümbol. klaviatuuril" - "Väljas" - "Mikr. peam. klaviat." - "Mikr. sümb. klaviat." - "Kõnesisend on keelatud" - "Sisestusmeetodite seadistamine" - "Sisestuskeeled" - "Saatke tagasisidet" - "Sisestuskeeled" - "Salvestamiseks puudutage uuesti" - "Sõnastik saadaval" - "Luba kasutaja tagasiside" - "Aidake seda sisestusmeetodi redigeerijat parandada, saates automaatselt kasutusstatistikat ja krahhiaruandeid." - "Klaviatuuri teema" - "Inglise (UK)" - "Inglise (USA)" - "hispaania (USA)" - "Inglise (UK) (%s)" - "Inglise (USA) (%s)" - "hispaania (USA) (%s)" - "Keel puudub (tähestik)" - "Tähestik (QWERTY)" - "Tähestik (QWERTZ)" - "Tähestik (AZERTY)" - "Tähestik (Dvorak)" - "Tähestik (Colemak)" - "Tähestik (PC)" - "Kohandage sisendlaadid" - "Lisage laad" - "Lisa" - "Eemalda" - "Salvesta" - "Keel" - "Paigutus" - "Kohandatud sisendi laad tuleb enne kasutamist lubada. Lubada?" - "Luba" - "Mitte kohe" - "Sama sisendstiil on juba olemas: %s" - "Kasutatavuse uurimisrežiim" - "Pika klahvivajutuse viide" - "Klahvivajutuse vibreerimise kestus" - "Klahvivajutuse helitugevus" - "Välise sõnastikufaili lugemine" - "Kaustas Allalaadimised pole ühtegi sõnastikufaili" - "Installitava sõnastikufaili valimine" - "Kas soovite tõesti installida faili lokaadile %s?" - "Ilmnes viga" - "Vaikeväärtus" - "Tere tulemast rakendusse %s" - "joonistusega sisestamisega" - "Alustamine" - "Järgmine toiming" - "Rakenduse %s seadistamine" - "Lubage %s" - "Märkige oma keele ja sisestamise seadetes rakendus „%s”. See lubab rakenduse käitamise teie seadmes." - "%s on teie keele- ja sisestusseadetes juba lubatud, seega on see toiming tehtud. Asuge järgmise toimingu juurde." - "Luba seadetes" - "Minge üle rakendusele %s" - "Järgmisena valige aktiivseks tekstisisestusmeetodiks rakendus „%s”." - "Vaheta sisestusmeetodeid" - "Õnnitleme. Kõik on valmis!" - "Nüüd saate rakendusega %s sisestada kõikides oma lemmikrakendustes." - "Seadista lisakeeled" - "Lõpetatud" - "Kuva rakenduse ikoon" - "Rakenduse ikooni kuvamine käivitajas" - "Sõnastikupakkuja" - "Sõnastikupakkuja" - "Sõnastikuteenus" - "Sõnastiku värskendamisteave" - "Pistiksõnastikud" - "Sõnastik on saadaval" - "Sõnastike seaded" - "Kasutaja sõnastikud" - "Kasutaja sõnastik" - "Sõnastik on saadaval" - "Praegu allalaadimisel" - "Installitud" - "Installitud, keelatud" - "Probleem sõnastikuga ühendumisel" - "Sõnastikke pole" - "Värskenda" - "Viimati värskendatud" - "Värskenduste otsimine" - "Laadimine ..." - "Peamine sõnastik" - "Tühista" - "Installi" - "Tühista" - "Kustuta" - "Mobiilseadmes valitud keelele on saadaval sõnastik.<br/> Teksti mugavamaks sisestamiseks soovitame <b>alla laadida</b> %1$s keele sõnastiku.<br/> <br/> 3G kaudu allalaadimisele võib kuluda minut või paar. Kehtida võivad tasud, kui te ei kasuta <b>piiramatut andmepaketti</b>.<br/> Kui te ei tea, millist andmepaketti kasutate, soovitame allalaadimise automaatseks käivitamiseks leida WiFi-ühenduse.<br/> <br/> Nõuanne: sõnastikke saate alla laadida ja eemaldada, tehes valiku <b>Keel ja sisestamine</b> mobiilseadme menüüs <b>Seaded</b>." - "Laadi kohe alla (%1$.1f MB)" - "Laadi alla WiFi kaudu" - "Sõnastik on %1$s keele jaoks saadaval" - "Vajutage ülevaatamiseks ja allalaadimiseks" - "Allalaadimine: %1$s keele soovitused on varsti saadaval." - "Versioon %1$s" - "Lisa" - "Sõnaraamatusse lisamine" - "Fraas" - "Rohkem valikuid" - "Vähem valikuid" - "OK" - "Sõna:" - "Otsetee:" - "Keel:" - "Sisestage sõna" - "Valikuline otsetee" - "Sõna muutmine" - "Muuda" - "Kustuta" - "Teie kasutaja sõnaraamatus ei ole ühtegi sõna. Sõna saate lisada, puudutades nuppu Lisa (+)." - "Kõikides keeltes" - "Rohkem keeli ..." - "Kustuta" - " ABCDEFGHIJKLMNOPQRSŠZŽTUVWÕÄÖÜXY" - diff --git a/java/res/values-hy/donottranslate.xml b/java/res/values-hy/donottranslate.xml deleted file mode 100644 index 7b0c56655..000000000 --- a/java/res/values-hy/donottranslate.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - .,;:!?)]}&։՝ - - - " \n"()[]{}*&<>+=|.,;:!?/_\"։՝ - - - 1417 - diff --git a/java/res/values-ka/bools.xml b/java/res/values-ka/bools.xml deleted file mode 100644 index 840d20c21..000000000 --- a/java/res/values-ka/bools.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - true - diff --git a/java/res/values-ka/strings.xml b/java/res/values-ka/strings.xml deleted file mode 100644 index 211e92328..000000000 --- a/java/res/values-ka/strings.xml +++ /dev/null @@ -1,242 +0,0 @@ - - - - - "შეყვანის მეთოდები" - "კვლევის აღრიცხვის ბრძანებები" - "კონტაქტების სახელების მოძიება" - "მართლწერის შემმოწმებელი ერთეულებს თქვენი კონტაქტების სიიდან იყენებს" - "ვიბრაცია კლავიშზე დაჭერისას" - "ხმაური კლავიშზე დაჭერისას" - "გადიდება ღილაკზე დაჭერისას" - "ზოგადი" - "ტექსტის კორექცია" - "ჟესტებით წერა" - "სხვა პარამეტრები" - "გაფართუებული პარამეტრები" - "პარამეტრები ექსპერტთათვის" - "შეყვანის სხვა მეთოდებზე გადართვა" - "ენის გადართვის ღილაკს შეყვანის სხვა მეთოდებსაც შეიცავს" - "ენის გადართვის კლავიში" - "აჩვენე, როდესაც ჩართულია სხვადასხვა შეყვანის ენა" - "გასრიალების ინდიკატ. ჩვენება" - "Shift ან Symbol კლავიშებიდან გასრიალებისას ვიზუალური მინიშნების ჩვენება" - "ამომხტ.კლავიშის დაყოვნება" - "არ დაყოვნდეს" - "ნაგულისხმევი" - "%sმწმ" - "სისტემის ნაგულისხმევი" - "კონტაქტის სახელების შეთავაზება" - "კონტაქტებიდან სახელების გამოყენება შეთავაზებებისთვის და კორექციისთვის" - "წერტილი ორმაგი შორისით" - "შორისზე ორჯერ შეხება დაწერს წერტილს და შორისის სიმბოლოს" - "ავტო-კაპიტალიზაცია" - "ყოველი წინადადების პირველი სიტყვის კაპიტალიზაცია" - "პერსონალური ლექსიკონი" - "დამატებითი ლექსიკონები" - "მთავარი ლექსიკონი" - "კორექციის შეთავაზებების ჩვენება" - "წერისას შეთავაზებული სიტყვების ჩვენება" - "ყოველთვის ჩვენება" - "პორტრეტის რეჟიმში ჩვენება" - "ყოველთვის დამალვა" - "შეურაცხმყოფელი სიტყვების დაბლოკვა" - "არ მოხდეს პოტენციურად შეურაცხმყოფელი სიტყვების შეთავაზება" - "ავტოკორექცია" - "შორისი და პუნქტუაცია ავტომატურად ასწორებს არასწორად აკრეფილ სიტყვებს" - "გამორთულია" - "მოკრძალებული" - "აგრესიული" - "ძალიან აგრესიული" - "შემდეგი სიტყვის შეთავაზებები" - "შეთავაზებებისას წინა სიტყვის გამოყენება" - "ჟესტებით წერის ჩართვა" - "სიტყვის შეყვანა ასო-ნიშებზე გასრიალებით" - "ჟესტიკულაციის კუდის ჩვენება" - "დინამიურად მოლივლივე გადახედვა" - "ჟესტიკულაციისას შეთავაზებული სიტყვის ნახვა" - "%s : შეინახა" - "წასვლ" - "შემდ." - "წინა" - "დასრულდა" - "გაგზ." - "პაუზა" - "მოცდა" - "შეაერთეთ ყურსაცვამი, რათა მოისმინოთ აკრეფილი პაროლის კლავიშების სახელები." - "მიმდინარე ტექსტი არის %s" - "ტექსტ არ შეყვანილა" - "კლავიატურის კოდი %d" - "Shift-" - "Shift ჩართულია (შეეხეთ გამოსართავად)" - "ჩართულია Caps (შეეხეთ გამოსართავად)" - "Delete" - "სიმბოლოები" - "ასოები" - "ნომრები" - "პარამეტრები" - "Tab" - "შორისი" - "ხმოვანი შეყვანა" - "მომღიმარი სახე" - "Return" - "ძიება" - "წერტილი" - "ენის გადართვა" - "შემდეგი" - "წინა" - "Shift ჩართულია" - "Caps lock ჩართულია" - "Shift გამორთულია" - "სიმბოლოების რეჟიმი" - "ასოების რეჟიმი" - "ტელეფონის რეჟიმი" - "ტელეფონის სიმბოლოების რეჟიმი" - "კლავიატურა დამალულია" - "ნაჩვენებია %s კლავიატურა" - "თარიღი" - "თარიღი და დრო" - "ელფოსტა" - "შეტყობინებები" - "რიცხვები" - "ტელეფონი" - "ტექსტი" - "დრო" - "URL" - "ხმოვანი შეყვანის კლავიში" - "მთავარ კლავიატურაზე" - "სიმბოლოთა კლავიატურაზე" - "გამორთულია" - "მიკროფონი მთავარ კლავიატურაზე" - "მიკროფონი სიმბოლოთა კლავიატურაზე" - "ხმოვანი შეყვანა გამორთულია" - "შეყვანის მეთოდების კონფიგურაცია" - "შეყვანის ენები" - "უკუკავშირი" - "შეყვანის ენები" - "შეეხეთ ისევ შესანახად" - "ხელმისაწვდომია ლექსიკონი" - "მომხმარებლის უკუკავშირის ჩართვა" - "შეიტანეთ წვლილი შეყვანის ამ მეთოდის გაუმჯობესებაში და გააგზავნეთ მოხმარების სტატისტიკა ავარიული გათიშვების ანგარიშები" - "კლავიატურის თემა" - "ინგლისური (გართ. სამ.)" - "ინგლისური (აშშ)" - "ესპანური (აშშ)" - "ინგლისური (გაერთ. სამ.) (%s)" - "ინგლისური (აშშ) (%s)" - "ესპანური (აშშ) (%s)" - "ენის გარეშე (ანბანი)" - "ანბანი (QWERTY)" - "ანბანი (QWERTZ)" - "ანბანი (AZERTY)" - "ანბანი (Dvorak)" - "ანბანი (Colemak)" - "ანბანი (PC)" - "შეყვანის სტილების კონფიგურაცია" - "სტილის დამატება" - "დამატება" - "ამოშლა" - "შენახვა" - "ენა" - "განლაგება" - "თქვენი მორგებული შეყვანის სტილი გამოყენებამდე უნდა გაააქტიუროთ. გსურთ მისი აქტივაცია ახლა?" - "ჩართვა" - "ახლა არა" - "შეყვანის იგივე სტილი უკე არსებობს: %s" - "გამოყენებადობის კვლევის რეჟიმი" - "კლავიშზე გრძელი დაჭერის დაყოვნება" - "კლავიშზე დაჭერის ვიბრაციის ხანგრძლივობა" - "კლავიშზე დაჭერის ხმა" - "გარე ლექსიკონის ფაილის წაკითხვა" - "ჩამოტვირთვების საქაღალდეში ლექსიკონის ფაილები არ არის" - "ინსტალაციისათვის აირჩიეთ ლექსიკონის ფაილი" - "ნამდვილად გსურთ ამ ფაილის %s-ისთვის ინსტალაცია?" - "წარმოიშვა შეცდომა" - "ნაგულისხმევი" - "კეთილი იყოს თქვენი მობრძანება %s-ში" - "ჟესტებით წერით" - "დაწყება" - "შემდეგი საფეხური" - "მიმდინარეობს %s-ის დაყენება" - "%s-ის ჩართვა" - "გთხოვთ მონიშნოთ „%s“ თქვენი ენის და შეყვანის პარამეტრებში. ეს უფლებას მიცემს მას გაეშვას თქვენს მოწყობილობაზე." - "%s უკვე გააქტიურებულია თქვენი ენის შეყვანის პარამეტრებში, ასე რომ ეს საფეხური დასრულებულია. გადადით შემდეგ საფეხურზე!" - "პარამეტრებში გააქტიურება" - "გადართეთ %s-ზე" - "შემდეგ, აირჩიეთ „%s“ თქვენს აქტიურ შეყვანის მეთოდად." - "შეყვანის მეთოდების გადართვა" - "გილოცავთ, პრცესი დასრულდა!" - "ამიერიდან შეძლებთ ყველა სასურველ აპში %s-ით წერას." - "დამატებითი ენების კონფიგურაცია" - "დასრულებული" - "აპის ხატულის ჩვენება" - "გაშვების ხატულის ჩვენება გამშვებში" - "ლექსიკონის პროვაიდერი" - "ლექსიკონის პროვაიდერი" - "ლექსიკონს სერვისი" - "ლექსიკონის განახლების მონაცემები" - "დამატებითი ლექსიკონები" - "ხელმისაწვდომია ლექსიკონი" - "ლექსიკონების პარამეტრები" - "მომხმარებლის ლექსიკონები" - "მომხარებლის ლექსიკონი" - "ხელმისაწვდომია ლექსიკონი" - "მიმდინარეობს ჩამოტვირთვა" - "დაყენებულია" - "დაყენებულია, გაუქმებულია" - "ლექსიკონის სერვისთან დაკავშირებით პრობლემა წარმოიშვა" - "ლექსიკონები მიუწვდომელია" - "განახლება" - "ბოლო განახლება" - "მიმდინარეობს განახლებების შემოწმება" - "იტვირთება..." - "მთავარი ლექსიკონი" - "გაუქმება" - "ინსტალაცია" - "გაუქმება" - "წაშლა" - "თქვენს მიერ მობილურ მოწყობილობაზე არჩეული ენისათვის ხელმისაწვდომია ლექსიკონი.<br/> გირჩევთ, <b>ჩამოტვირთოთ</b> %1$s ლექსიკონი, რათა გაიმარტივოთ ტექსტის შეყვანა.<br/> <br/> ჩამოტვირთვას შესაძლოა დაჭირდეს ერთი ან ორი წუთი 3G სისწრაფეზე. თუ ულიმიტო არ გაგაჩნიათ <b> მობილური ინტერნეტის ტარიფი</b>.<br/&gt, შესაძლოა ჩამოტვირთვა დამატებით გადასახადებთან იყოს დაკავშირებული; თუ არ ხართ დარწმუნებული მობილური ინტერნეტის აქტიური ტარიფის შესახებ, გირჩევთ იპოვოთ Wi-Fi კავშირი და ავტომატურად დაიწყოთ ჩამოტვირთვა.<br/> <br/> რჩევა: ლექსიკონების ჩამოტვირთვა და ამოშლა შესაძლებელია სექციიდან <b>ენა და შეყვანა</b> სექციიდან, თქვენი მობილური მოწყობილობის <b>პარამეტრების</b> მენიუში." - "ახლა ჩამოტვირთვა (%1$.1fმბაიტი)" - "Wi-Fi კავშირზე ჩამოტვირთვა" - "%1$s-ისთვის ხელმისაწვდომია ლექსიკონი" - "დააჭირეთ განხილვას და ჩამოტვირთეთ" - "ჩამოტვირთვა: %1$s-ის შემოთავაზებები მალე მომზადდება." - "ვერსია %1$s" - "დამატება" - "ლექსიკონში დამატება" - "ფრაზა" - "მეტი ვარიანტები" - "ნაკლები ვარიანტები" - "კარგი" - "სიტყვა:" - "მალსახმობი:" - "ენა:" - "შიყვანეთ სიტყვა" - "არასავალდებულო მალსახმობი" - "სიტყვის შესწორება" - "რედაქტირება" - "წაშლა" - "თქვენ არ გაქვთ სიტყვები მომხმარებლის ლექსიკონში. დაამატეთ სიტყვები ღილაკ Add (+) შეხებით." - "ყველა ენისთვის" - "სხვა ენები…" - "წაშლა" - " ABCDEFGHIJKLMNOPQRSTUVWXYZ" - diff --git a/java/res/values-km/donottranslate.xml b/java/res/values-km/donottranslate.xml deleted file mode 100644 index a9893feec..000000000 --- a/java/res/values-km/donottranslate.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - false - diff --git a/java/res/values-lo/donottranslate.xml b/java/res/values-lo/donottranslate.xml deleted file mode 100644 index a9893feec..000000000 --- a/java/res/values-lo/donottranslate.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - false - diff --git a/java/res/values-mn/strings-appname.xml b/java/res/values-mn/strings-appname.xml deleted file mode 100644 index 6c27e3d34..000000000 --- a/java/res/values-mn/strings-appname.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - "Андройд Гар (AOSP)" - "Андройд Алдаа Шалгагч (AOSP)" - "Андройд Гарын Тохиргоо (AOSP)" - "Андройд Алдаа Шалгагчийн Тохиргоо (AOSP)" - diff --git a/java/res/values-mn/strings.xml b/java/res/values-mn/strings.xml deleted file mode 100644 index 4a612040e..000000000 --- a/java/res/values-mn/strings.xml +++ /dev/null @@ -1,242 +0,0 @@ - - - - - "Оруулах сонголтууд" - "Судалгааны протоколын командууд" - "Харилцагчийн нэр хайх" - "Алдаа шалгагч нь таны харилцагчдын жагсаалтаас ашиглана" - "Товч дарахад чичрэх" - "Товч дарахад дуу гаргах" - "Товч дарахад попап гарна" - "Ерөнхий" - "Текст залруулалт" - "Зангаагаар бичих" - "Бусад сонголтууд" - "Дэлгэрэнгүй тохиргоо" - "Экспертүүдэд зориулсан тохиргоо" - "Оруулах өөр арга руу шилжүүлэх" - "Хэл солих түлхүүрт өөр оруулах аргууд мөн багтсан байгаа" - "Хэл солих товч" - "Оруулах хэл олныг идэвхжүүлсэн үед харуулах" - "Гулсалт заагчийг харуулах" - "Сэлгэх буюу Симбол товчуудаас гулсах үед нүдэнд харагдуулах" - "Товчны попап арилах хугацаа" - "Хүлээхгүй" - "Үндсэн" - "%sмс" - "Системийн үндсэн утга" - "Харилцагчдын нэрс санал болгох" - "Санал болгох, залруулахда Харилцагчдын нэрсээс ашиглах" - "Давхар зайтай цэг" - "Ардаа зайтай цэг оруулахын тулд Зай авах дээр давхар товшино уу" - "Автоматаар томруулах" - "Өгүүлбэр бүрийн эхний үгийн эхний үсгийг томруулах" - "Хувийн толь бичиг" - "Нэмэлт толь бичгүүд" - "Үндсэн толь бичиг" - "Залруулах санал болголтуудыг харуулах" - "Бичих явцад санал болгосон үгсийг харуулах" - "Байнга харуулах" - "Босоо горимд харуулах" - "Байнга нуух" - "Доромжилсон үгсийг хаах" - "Доромжилсон үгсийг санал болгохгүй байх" - "Авто-залруулга" - "Хоосон зай болон цэг таслал нь буруу бичсэн үгсийг автоматаар залруулна" - "Идэвхгүй" - "Хүлээцтэй" - "Хүчтэй" - "Маш хүчтэй" - "Дараагийн-үг санал болгох" - "Өмнөх үгийг үг санал болгоход ашиглах" - "Зангаагаар бичихийг идэвхжүүлэх" - "Үсгүүд дээр гулсуулах замаар үг оруулах" - "Зангасан мөрийг харуулах" - "Динамик хөвөгчөөр урьдчилан харах" - "Зангах явцад санал болгож буй үгийг харах" - "%s : Хадгалагдсан" - "Явах" - "Дараах" - "Өмнөх" - "Дууссан" - "Илгээх" - "Пауз" - "Хүлээх" - "Нууц үгний товчнуудыг чангаар уншихыг сонсохын тулд чихэвчээ залгана уу." - "Одоогийн текст %s" - "Текст оруулаагүй" - "Товчийн код %d" - "Сэлгэх" - "Сэлгэхийг идэвхжүүлсэн (товшиж идэвхгүйжүүлнэ үү)" - "Томоор бичихийг асаасан (товшиж идэвхгүйжүүлнэ үү)" - "Устгах" - "Симбол" - "Үсэгнүүд" - "Тоонууд" - "Тохиргоо" - "Таб" - "Хоосон зай" - "Дуугаар оруулах" - "Инээсэн царай" - "Буцах" - "Хайх" - "Цэг" - "Хэл солих" - "Дараах" - "Өмнөх" - "Сэлгэхийг идэвхжүүлсэн" - "Томоор бичихийг идэвхжүүлсэн" - "Сэлгэхийг идэвхжүүлээгүй" - "Симбол төлөв" - "Үсэгнүүд төлөв" - "Утасны төлөв" - "Утасны символ төлөв" - "Гарыг нуусан" - "%s гарыг харуулж байна" - "огноо" - "огноо болон цаг" - "имэйл" - "зурвас" - "дугаар" - "утас" - "текст" - "цаг" - "URL" - "Дуун оруулгын товч" - "Үндсэн гар дээр" - "Симбол гар дээр" - "Хаах" - "Мик үндсэн гар дээр" - "Мик симбол гар дээр" - "Дуун оруулах идэвхгүйжсэн" - "Оруулах аргуудын тохиргоо" - "Оруулах хэл" - "Санал хүсэл илгээх" - "Оруулах хэл" - "Хадгалахын тулд дахин хүрнэ үү" - "Толь бичиг байна" - "Хэрэглэгчийн санал хүсэлтийг идэвхжүүлэх" - "Ашиглалтын статистик болон гацалтын репортуудыг автоматаар илгээснээр энэ оруулах арга засагчийг сайжруулахад туслаарай" - "Гарын загвар" - "Англи (ИБ)" - "Англи (АНУ)" - "Испани (АНУ)" - "Англи (ИБ) (%s)" - "Англи (АНУ) (%s)" - "Испани (АНУ) (%s)" - "Хэл байхгүй (Цагаан толгой)" - "Цагаан толгой (QWERTY)" - "Цагаан толгой (QWERTZ)" - "Цагаан толгой (AZERTY)" - "Цагаан толгой (Dvorak)" - "Цагаан толгой (Colemak)" - "Цагаан толгой (PC)" - "Өөрийн оруулах загвар" - "Загвар нэмэх" - "Нэмэх" - "Устгах" - "Хадгалах" - "Хэл" - "Байршил" - "Та өөрийн оруулах загварыг ашиглахаас өмнө идэвхжүүлэх шаардлагатай. Одоо идэвхжүүлэх үү?" - "Идэвхжүүлэх" - "Одоо биш" - "Ижилхэн оруулах загвар байна: %s" - "Ашиглалтын судалгааны горим" - "Товч удаан дарах хугацааны тохиргоо" - "Товч дарах чичиргээний хугацаа" - "Товчны дууны хэмжээ" - "Толь бичгийн гадны файлыг унших" - "Татаж авсан фолдерт толь бичгийн файл байхгүй байна" - "Суулгах толь бичгийн файлыг сонгоно уу" - "%s-д зориулсан энэ файлыг үнэхээр суулгах уу?" - "Алдаа гарсан" - "Үндсэн" - "Та %s-д тавтай морилно уу" - "Зангаагаар бичихээр" - "Эхлүүлэх" - "Дараагийн алхам" - "%s-г тохируулж байна" - "%s-г идэвхжүүлэх" - "Өөрийн Хэл & оруулах тохиргоон дотроос \"%s\"-г сонгоно уу. Ингэснээр таны төхөөрөмж дээр ажиллах зөвшөөрлийг өгөх болно." - "%s таны Хэл &amp оруулах тохиргоонд аль хэдийн идэвхжүүлсэн байгаа учир энэ алхам хийгдсэн. Дараагийн алхам руу!" - "Тохиргоо дотроос идэвхжүүлэх" - "%s рүү шилжих" - "Дараа нь \"%s\"-г өөрийн идэвхтэй текст-оруулах аргаар сонгоно уу." - "Оруулах аргыг солих" - "Баяр хүргэе, та бүгдийг нь тохируулчихлаа!" - "Та одоо өөрийн дуртай апп-ууд дотроо %s ашиглан бичих болохоор боллоо." - "Нэмэлт хэлнүүдийг тохируулах" - "Дууссан" - "Апп дүрсийг харуулах" - "Эхлүүлэгч дээр аппликешний дүрсийг харуулах" - "Толь бичгээг хангагч" - "Толь бичгээг хангагч" - "Толь бичгийн үйлчилгээ" - "Толь бичгийн шинэчлэлтийн мэдээлэл" - "Нэмэлт толь бичгүүд" - "Толь бичиг байна" - "Толь бичгийн тохиргоо" - "Хэрэглэгчийн толь бичиг" - "Хэрэглэгчийн толь" - "Толь бичиг байна" - "Одоо татаж байна" - "Суулгасан" - "Суулгасан, идэвхгүйжүүлсэн" - "Толь бичгийн үйлчилгээнд холбогдоход алдаа гарлаа" - "Толь бичиг байхгүй" - "Дахин ачаалах" - "Сүүлд шинэчлэгдсэн" - "Шинэчлэлтийг шалгаж байна" - "Ачаалж байна..." - "Үндсэн толь бичиг" - "Цуцлах" - "Суулгах" - "Цуцлах" - "Устгах" - "Таны мобайль төхөөрөмж дээр сонгосон хэлэнд толь бичиг байна.<br/> Тус  %1$s толь бичгийг <b>татаж аван</b> зөв бичилтээ сайжруулахыг бид зөвлөж байна.<br/> <br/> Татаж авахад 3G сүлжээгээр нэг хоёр минут болно. Танд <b>хязгааргүй дата эрх</b> байхгүй бол нэмэлт төлбөр гарч болно.<br/> Та дата эрхийнхээ талаар сайн мэдэхгүй байгаа бол Wi-Fi холболттой газар очин автоматаар татаж авахыг зөвлөж байна.<br/> <br/> Зөвлөмж: Та өөрийн мобайль төхөөрөмжийн <b>Тохиргоо</b> цэсний <b>Хэл & оруулах</b> руу очиж толь бичиг татаж авах буюу устгаж болно." - "Одоо татах (%1$.1fMB)" - "Wi-Fi-р татаж авах" - "%1$s хэлний толь бичигтэй" - "Шалгах болон татаж авахын тулд дарна уу" - "Татаж байна: %1$s хэлний санал болгох үгс удахгүй бэлэн болно." - "Хувилбар %1$s" - "Нэмэх" - "Толь бичигт нэмэх" - "Хэллэг" - "Илүү сонголтууд" - "Цөөн сонголт" - "Тийм" - "Үг:" - "Товчилбор:" - "Хэл:" - "Үг оруулна уу" - "Зайлшгүй биш товчилбор" - "Үг засах" - "Засах" - "Устгах" - "Таны хэрэглэгчийн толинд ямар ч үг алга байна. Нэмэх (+) товчинд хүрэн үг нэмнэ үү." - "Бүх хэлэнд" - "Өөр хэлүүд…" - "Устгах" - " ABCDEFGHIJKLMNOPQRSTUVWXYZ" - diff --git a/java/res/values-ms/bools.xml b/java/res/values-ms/bools.xml deleted file mode 100644 index 840d20c21..000000000 --- a/java/res/values-ms/bools.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - true - diff --git a/java/res/values-ms/strings-appname.xml b/java/res/values-ms/strings-appname.xml deleted file mode 100644 index 76d1d294c..000000000 --- a/java/res/values-ms/strings-appname.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - - "Papan Kekunci Android (AOSP)" - "Penyemak Ejaan Android (AOSP)" - "Tetapan Papan Kekunci Android (AOSP)" - "Tetapan Penyemak Ejaan Android (AOSP)" - diff --git a/java/res/values-ms/strings.xml b/java/res/values-ms/strings.xml deleted file mode 100644 index df30627aa..000000000 --- a/java/res/values-ms/strings.xml +++ /dev/null @@ -1,242 +0,0 @@ - - - - - "Pilihan input" - "Arahan Log Penyelidikan" - "Cari nama kenalan" - "Penyemak ejaan menggunakan entri dari senarai kenalan anda" - "Getar pada tekanan kekunci" - "Bunyi pada tekanan kekunci" - "Pop timbul pada tekanan kunci" - "Umum" - "Pembetulan teks" - "Taipan gerak isyarat" - "Pilihan lain" - "Tetapan terperinci" - "Pilihan untuk pakar" - "Tukar ke kaedah input lain" - "Kunci pertukaran bahasa meliputi kaedah masukan lain juga" - "Kekunci tukar bahasa" - "Tunjukkan apabila berbilang bahasa input didayakan" - "Tunjukkan penunjuk slaid" - "Paparkan petunjuk visual semasa meluncur daripada kekunci Shift atau Simbol" - "Pop tmbl knci ketpkn lengah" - "Tiada lengah" - "Lalai" - "%sms" - "Tetapan asal sistem" - "Cadangkan nama Kenalan" - "Menggunakan nama daripada Kenalan untuk cadangan dan pembetulan" - "Titik ruang berganda" - "Mengetik 2X pada bar ruang memasukkan titik diikuti dengan ruang" - "Huruf besar auto" - "Besarkan perkataan pertama setiap ayat" - "Kamus peribadi" - "Kamus tambahan" - "Kamus utama" - "Tunjukkan cadangan pembetulan" - "Paparkan cadangan perkataan semasa menaip" - "Sentiasa tunjukkan" - "Tunjukkan dalam mod potret" - "Sentiasa sembunyikan" - "Sekat perkataan yg menyinggung" - "Jangan cadangkan perkataan yang boleh menyinggung" - "Auto pembetulan" - "Bar ruang dan tanda baca secara automatik membetulkan perkataan yang ditaip salah" - "Matikan" - "Sederhana" - "Agresif" - "Sangat agresif" - "Cadangan perkataan seterusnya" - "Gunakan perkataan sebelumnya dalam membuat cadangan" - "Dayakan taipan gerak isyarat" - "Input perkataan dengan meluncur melalui huruf" - "Tunjukkan jejak gerak isyarat" - "Pratonton terapung dinamik" - "Lihat perkataan yang dicadangkan semasa membuat gerak isyarat" - "%s : Disimpan" - "Pergi" - "Seterusnya" - "Sblm" - "Selesai" - "Hantar" - "Jeda" - "Tnggu" - "Pasangkan set kepala untuk mendengar kekunci kata laluan disebut dengan kuat." - "Teks semasa adalah %s" - "Tiada teks dimasukkan" - "Kod kunci %d" - "Shift" - "Kunci anjak dihidupkan (ketik untuk melumpuhkan)" - "Kunci huruf besar dihidupkan (ketik untuk melumpuhkan)" - "Padam" - "Simbol" - "Huruf" - "Nombor" - "Tetapan" - "Tab" - "Space" - "Input suara" - "Muka senyum" - "Return" - "Carian" - "Titik" - "Tukar bahasa" - "Seterusnya" - "Sebelumnya" - "Kunci anjak didayakan" - "Kunci huruf besar didayakan" - "Kunci anjak dilumpuhkan" - "Mod simbol" - "Mod huruf" - "Mod telefon" - "Mod simbol telefon" - "Papan kekunci tersembunyi" - "Menunjukkan %s papan kekunci" - "tarikh" - "tarikh dan masa" - "e-mel" - "pemesejan" - "nombor" - "telefon" - "teks" - "masa" - "URL" - "Kunci input suara" - "Hidpkn kekunci utama" - "Pd ppn k’unci simbol" - "Matikan" - "Mik. pd kekunci utma" - "Mik. pd kekunci smbl" - "Input suara dilmphkn" - "Konfigurasikan kaedah input" - "Bahasa input" - "Hantar maklum balas" - "Bahasa input" - "Sentuh lagi untuk menyimpan" - "Kamus tersedia" - "Dayakan maklum balas pengguna" - "Bantu memperbaik editor kaedah input ini dengan menghantar statistik penggunaan dan laporan ranap secara automatik" - "Tema papan kekunci" - "Bahasa Inggeris (UK)" - "Bahasa Inggeris (AS)" - "Bahasa Sepanyol (AS)" - "Bahasa Inggeris (UK) (%s)" - "Bahasa Inggeris (AS) (%s)" - "Bahasa Sepanyol (AS) (%s)" - "Tiada bahasa (Abjad)" - "Abjad (QWERTY)" - "Abjad (QWERTZ)" - "Abjad (AZERTY)" - "Abjad (Dvorak)" - "Abjad (Colemak)" - "Abjad (PC)" - "Gaya input peribadi" - "Tambah gaya" - "Tambah" - "Alih keluar" - "Simpan" - "Bahasa" - "Reka Letak" - "Gaya input tersuai anda perlu didayakan sebelum anda mula menggunakannya. Adakah anda ingin mendayakannya sekarang?" - "Dayakan" - "Bukan sekarang" - "Gaya input yang sama sudah wujud: %s" - "Mod kajian kebolehgunaan" - "Kelewatan tekan lama kekunci" - "Tempoh getaran tekan kekunci" - "Kelantangan bunyi tekan kekunci" - "Baca fail kamus luaran" - "Tiada fail kamus dalam folder Muat Turun" - "Pilih fail kamus untuk dipasang" - "Betul-betul pasang fail ini untuk %s?" - "Berlaku ralat" - "Lalai" - "Selamat datang ke %s" - "dengan Taipan Gerak Isyarat" - "Bermula" - "Langkah seterusnya" - "Menyediakan %s" - "Dayakan %s" - "Sila semak \"%s\" dlm ttpn Bhs & input. Ini mbnarkn apl djlnkn pd pranti anda." - "%s sudah didayakan dalam tetapan Bahasa & input anda, jadi langkah ini telah selesai. Beralih ke langkah seterusnya!" - "Dayakan dalam Tetapan" - "Beralih ke %s" - "Seterusnya, pilih \"%s\" sebagai kaedah input teks aktif anda." - "Tukar kaedah input" - "Tahniah, anda sudah sedia!" - "Kini anda boleh menaip dalam semua apl kegemaran anda dengan %s." - "Konfigurasikan bahasa tambahan" - "Selesai" - "Tunjukkan ikon apl" - "Paparkan ikon apl dalam pelancar" - "Pembekal Kamus" - "Pembekal Kamus" - "Perkhidmatan Kamus" - "Maklumat kemas kini kamus" - "Kamus tambahan" - "Kamus tersedia" - "Tetapan untuk kamus" - "Kamus pengguna" - "Kamus pengguna" - "Kamus tersedia" - "Sedang memuat turun" - "Dipasang" - "Dipasang, dilumpuhkan" - "Masalah menyambung kepada perkhidmatan kamus" - "Tiada kamus tersedia" - "Muatkan semula" - "Kali terakhir dikemas kini" - "Menyemak kemas kini" - "Memuatkan..." - "Kamus utama" - "Batal" - "Pasang" - "Batal" - "Padam" - "Bahasa pilihan pada peranti mudah alih anda mempunyai kamus tersedia.<br/> Kami mengesyorkan <b>memuat turun</b> kamus %1$s untuk memperbaik pengalaman menaip anda.<br/> <br/> Muat turun boleh mengambil masa seminit atau dua melalui 3G. Caj mungkin dikenakan jika anda tidak mempunyai <b>pelan data tanpa had</b>.<br/> Jika anda tidak pasti jenis pelan data yang anda miliki, kami mengesyorkan agar anda mencari sambungan Wi-Fi untuk mula memuat turun secara automatik.<br/> <br/> Petua: Anda boleh memuat turun dan mengalih keluar kamus dengan pergi ke menu <b>Bahasa & input</b> dalam <b>Tetapan</b> peranti mudah alih anda." - "Muat turun sekarang (%1$.1fMB)" - "Muat turun melalui Wi-Fi" - "Kamus tersedia untuk %1$s" - "Tekan untuk mengulas dan memuat turun" - "Memuat turun: cadangan untuk %1$s akan sedia tidak lama lagi." - "Versi %1$s" - "Tambah" - "Tambah ke kamus" - "Frasa" - "Lagi pilihan" - "Kurang pilihan" - "OK" - "Perkataan:" - "Pintasan:" - "Bahasa:" - "Taip perkataan" - "Pintasan pilihan" - "Edit perkataan" - "Edit" - "Padam" - "Anda tidak mempunyai sebarang perkataan dalam kamus pengguna. Tambahkan perkataan dengan menyentuh butang Tambah (+)." - "Untuk semua bahasa" - "Lebih banyak bahasa..." - "Padam" - " ABCDEFGHIJKLMNOPQRSTUVWXYZ" - From e47f7332f9bb94905015061dd9791f43763ccab8 Mon Sep 17 00:00:00 2001 From: Baligh Uddin Date: Thu, 17 Oct 2013 11:22:07 -0700 Subject: [PATCH 11/21] These files were in the obsoleted locale directories and are not processed by the translation pipeline. Moving them to their new locale directory. Example: values-et/bools.xml moved to values-et-rEE/bools.xml Bug: 11244796 --- java/res/values-et-rEE/bools.xml | 24 +++++++++++++++++ java/res/values-hy-rAM/donottranslate.xml | 32 +++++++++++++++++++++++ java/res/values-ka-rGE/bools.xml | 24 +++++++++++++++++ java/res/values-km-rKH/donottranslate.xml | 23 ++++++++++++++++ java/res/values-lo-rLA/donottranslate.xml | 23 ++++++++++++++++ java/res/values-ms-rMY/bools.xml | 24 +++++++++++++++++ 6 files changed, 150 insertions(+) create mode 100644 java/res/values-et-rEE/bools.xml create mode 100644 java/res/values-hy-rAM/donottranslate.xml create mode 100644 java/res/values-ka-rGE/bools.xml create mode 100644 java/res/values-km-rKH/donottranslate.xml create mode 100644 java/res/values-lo-rLA/donottranslate.xml create mode 100644 java/res/values-ms-rMY/bools.xml diff --git a/java/res/values-et-rEE/bools.xml b/java/res/values-et-rEE/bools.xml new file mode 100644 index 000000000..840d20c21 --- /dev/null +++ b/java/res/values-et-rEE/bools.xml @@ -0,0 +1,24 @@ + + + + + true + diff --git a/java/res/values-hy-rAM/donottranslate.xml b/java/res/values-hy-rAM/donottranslate.xml new file mode 100644 index 000000000..7b0c56655 --- /dev/null +++ b/java/res/values-hy-rAM/donottranslate.xml @@ -0,0 +1,32 @@ + + + + + + + + .,;:!?)]}&։՝ + + + " \n"()[]{}*&<>+=|.,;:!?/_\"։՝ + + + 1417 + diff --git a/java/res/values-ka-rGE/bools.xml b/java/res/values-ka-rGE/bools.xml new file mode 100644 index 000000000..840d20c21 --- /dev/null +++ b/java/res/values-ka-rGE/bools.xml @@ -0,0 +1,24 @@ + + + + + true + diff --git a/java/res/values-km-rKH/donottranslate.xml b/java/res/values-km-rKH/donottranslate.xml new file mode 100644 index 000000000..a9893feec --- /dev/null +++ b/java/res/values-km-rKH/donottranslate.xml @@ -0,0 +1,23 @@ + + + + + false + diff --git a/java/res/values-lo-rLA/donottranslate.xml b/java/res/values-lo-rLA/donottranslate.xml new file mode 100644 index 000000000..a9893feec --- /dev/null +++ b/java/res/values-lo-rLA/donottranslate.xml @@ -0,0 +1,23 @@ + + + + + false + diff --git a/java/res/values-ms-rMY/bools.xml b/java/res/values-ms-rMY/bools.xml new file mode 100644 index 000000000..840d20c21 --- /dev/null +++ b/java/res/values-ms-rMY/bools.xml @@ -0,0 +1,24 @@ + + + + + true + From 146cf238792c4748aa726a440fb96a33b4260fa5 Mon Sep 17 00:00:00 2001 From: Ken Wakasa Date: Fri, 18 Oct 2013 16:40:12 +0900 Subject: [PATCH 12/21] DO NOT MERGE: Update input method subtype locales. To match up with the removal of obsolete locales. cherrypick of I27098bfa26b66631ef412f8f0f72e0273a0161bc bug: 11244796 Change-Id: I6e93513978ac657c859391d0431f90143d855e5f --- java/res/xml/method.xml | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/java/res/xml/method.xml b/java/res/xml/method.xml index cef2451e2..0a27da93f 100644 --- a/java/res/xml/method.xml +++ b/java/res/xml/method.xml @@ -39,7 +39,7 @@ es: Spanish/spanish es_US: Spanish United States/spanish (es_419: Spanish Latin America/qwerty) - et: Estonian/nordic + et_EE: Estonian/nordic fa: Persian/arabic fi: Finnish/nordic fr: French/azerty @@ -47,21 +47,21 @@ hi: Hindi/hindi hr: Croatian/qwertz hu: Hungarian/qwertz - hy: Armenian Phonetic/armenian_phonetic + hy_AM: Armenian Phonetic/armenian_phonetic in: Indonesian/qwerty # "id" is official language code of Indonesian. is: Icelandic/qwerty it: Italian/qwerty iw: Hebrew/hebrew # "he" is official language code of Hebrew. - ka: Georgian/georgian + ka_GE: Georgian/georgian (kk: Kazakh/east_slavic) # disabled temporarily. waiting for string resources. - km: Khmer/khmer + km_KH: Khmer/khmer ky: Kyrgyz/east_slavic - lo: Lao/lao + lo_LA: Lao/lao lt: Lithuanian/qwerty lv: Latvian/qwerty mk: Macedonian/south_slavic - mn: Mongolian/mongolian - ms: Malay/qwerty + mn_MN: Mongolian/mongolian + ms_MY: Malay/qwerty nb: Norwegian Bokmål/nordic (ne: Nepali Romanized/nepali_romanized) # disabled temporarily (ne: Nepali Traditional/nepali_traditional) # disabled temporarily @@ -221,7 +221,7 @@ @@ -277,7 +277,7 @@ @@ -314,7 +314,7 @@ @@ -330,11 +330,10 @@ - @@ -373,14 +372,14 @@ From 029d9eeb385dccdea0f6a76987b857f2b8f7d815 Mon Sep 17 00:00:00 2001 From: Keisuke Kuroyanagi Date: Fri, 18 Oct 2013 20:13:40 +0900 Subject: [PATCH 13/21] Fix: Suggested words from user history are invalid. DO NOT MERGE. - Suggestions form user history can contain invalid words. - isValidWord always returns false. Bug: 11139426 Change-Id: I6075b275603332ddb00f4a9284afcaa82d824270 --- .../DecayingExpandableBinaryDictionaryBase.java | 9 --------- .../dictionary/dynamic_patricia_trie_policy.cpp | 11 +++++++++-- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/java/src/com/android/inputmethod/latin/personalization/DecayingExpandableBinaryDictionaryBase.java b/java/src/com/android/inputmethod/latin/personalization/DecayingExpandableBinaryDictionaryBase.java index a1e36006b..1de15a333 100644 --- a/java/src/com/android/inputmethod/latin/personalization/DecayingExpandableBinaryDictionaryBase.java +++ b/java/src/com/android/inputmethod/latin/personalization/DecayingExpandableBinaryDictionaryBase.java @@ -113,15 +113,6 @@ public abstract class DecayingExpandableBinaryDictionaryBase extends ExpandableB return false; } - /** - * Return whether the passed charsequence is in the dictionary. - */ - @Override - public boolean isValidWord(final String word) { - // Words included only in the user history should be treated as not in dictionary words. - return false; - } - /** * Pair will be added to the decaying dictionary. * diff --git a/native/jni/src/suggest/policyimpl/dictionary/dynamic_patricia_trie_policy.cpp b/native/jni/src/suggest/policyimpl/dictionary/dynamic_patricia_trie_policy.cpp index a8ea69f3c..495b146c2 100644 --- a/native/jni/src/suggest/policyimpl/dictionary/dynamic_patricia_trie_policy.cpp +++ b/native/jni/src/suggest/policyimpl/dictionary/dynamic_patricia_trie_policy.cpp @@ -55,9 +55,16 @@ void DynamicPatriciaTriePolicy::createAndGetAllChildNodes(const DicNode *const d readingHelper.initWithPtNodeArrayPos(dicNode->getChildrenPos()); const DynamicPatriciaTrieNodeReader *const nodeReader = readingHelper.getNodeReader(); while (!readingHelper.isEnd()) { + bool isTerminal = nodeReader->isTerminal() && !nodeReader->isDeleted(); + if (isTerminal && mHeaderPolicy.isDecayingDict()) { + // A DecayingDict may have a terminal PtNode that has a terminal DicNode whose + // probability is NOT_A_PROBABILITY. In such case, we don't want to treat it as a + // valid terminal DicNode. + isTerminal = getProbability(nodeReader->getProbability(), NOT_A_PROBABILITY) + != NOT_A_PROBABILITY; + } childDicNodes->pushLeavingChild(dicNode, nodeReader->getHeadPos(), - nodeReader->getChildrenPos(), nodeReader->getProbability(), - nodeReader->isTerminal() && !nodeReader->isDeleted(), + nodeReader->getChildrenPos(), nodeReader->getProbability(), isTerminal, nodeReader->hasChildren(), nodeReader->isBlacklisted() || nodeReader->isNotAWord(), nodeReader->getCodePointCount(), readingHelper.getMergedNodeCodePoints()); readingHelper.readNextSiblingNode(); From f356a25f36952f59e9918daa35f7ff6e5235a37d Mon Sep 17 00:00:00 2001 From: Jean Chalard Date: Mon, 21 Oct 2013 14:40:32 +0900 Subject: [PATCH 14/21] [DO NOT MERGE] Fix a bug where autocaps would jam auto-commit Cherry-pick of I62955e36 Bug: 11311002 Change-Id: I5b11cb48e6dd0563fc29566fe0d27864be2beb0a --- java/src/com/android/inputmethod/latin/Suggest.java | 2 +- .../android/inputmethod/latin/SuggestedWordsTests.java | 10 ++++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/java/src/com/android/inputmethod/latin/Suggest.java b/java/src/com/android/inputmethod/latin/Suggest.java index c270d47d0..88c83fc1f 100644 --- a/java/src/com/android/inputmethod/latin/Suggest.java +++ b/java/src/com/android/inputmethod/latin/Suggest.java @@ -475,7 +475,7 @@ public final class Suggest { } return new SuggestedWordInfo(sb.toString(), wordInfo.mScore, wordInfo.mKind, wordInfo.mSourceDict, wordInfo.mIndexOfTouchPointOfSecondWord, - SuggestedWordInfo.NOT_A_CONFIDENCE /* autoCommitFirstWordConfidence */); + wordInfo.mAutoCommitFirstWordConfidence); } public void close() { diff --git a/tests/src/com/android/inputmethod/latin/SuggestedWordsTests.java b/tests/src/com/android/inputmethod/latin/SuggestedWordsTests.java index a594baf0b..375352067 100644 --- a/tests/src/com/android/inputmethod/latin/SuggestedWordsTests.java +++ b/tests/src/com/android/inputmethod/latin/SuggestedWordsTests.java @@ -25,6 +25,7 @@ import com.android.inputmethod.latin.utils.CollectionUtils; import java.util.ArrayList; import java.util.Locale; +import java.util.Random; @SmallTest public class SuggestedWordsTests extends AndroidTestCase { @@ -72,15 +73,20 @@ public class SuggestedWordsTests extends AndroidTestCase { return new SuggestedWordInfo(s, 100, SuggestedWordInfo.KIND_TYPED, null /* sourceDict */, SuggestedWordInfo.NOT_AN_INDEX /* indexOfTouchPointOfSecondWord */, - SuggestedWordInfo.NOT_A_CONFIDENCE /* autoCommitFirstWordConfidence */); + new Random().nextInt(1000000) /* autoCommitFirstWordConfidence */); } // Helper for testGetTransformedWordInfo private SuggestedWordInfo transformWordInfo(final String info, final int trailingSingleQuotesCount) { - return Suggest.getTransformedSuggestedWordInfo(createWordInfo(info), + final SuggestedWordInfo suggestedWordInfo = createWordInfo(info); + final SuggestedWordInfo returnedWordInfo = + Suggest.getTransformedSuggestedWordInfo(suggestedWordInfo, Locale.ENGLISH, false /* isAllUpperCase */, false /* isFirstCharCapitalized */, trailingSingleQuotesCount); + assertEquals(suggestedWordInfo.mAutoCommitFirstWordConfidence, + returnedWordInfo.mAutoCommitFirstWordConfidence); + return returnedWordInfo; } public void testGetTransformedSuggestedWordInfo() { From 6b8d2d31f90ea5ce1528e49fadc8d4ca4b08b57e Mon Sep 17 00:00:00 2001 From: Jean Chalard Date: Tue, 22 Oct 2013 10:51:11 +0900 Subject: [PATCH 15/21] [DO NOT MERGE] Add a sequence number to SuggestedWords. This allows testing for suggestion freshness in an asynchronous suggestions world. Cherry-pick of Ic76cd175 Bug: 11301597 Change-Id: I45a84de0632062475eebe30234b3147f1c680359 --- .../android/inputmethod/latin/LatinIME.java | 125 +++++++++++------- .../android/inputmethod/latin/Suggest.java | 18 ++- .../inputmethod/latin/SuggestedWords.java | 14 ++ 3 files changed, 100 insertions(+), 57 deletions(-) diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java index 10f643c49..608bb3cea 100644 --- a/java/src/com/android/inputmethod/latin/LatinIME.java +++ b/java/src/com/android/inputmethod/latin/LatinIME.java @@ -1835,12 +1835,15 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen @Override public boolean handleMessage(final Message msg) { + // TODO: straighten message passing - we don't need two kinds of messages calling + // each other. switch (msg.what) { case MSG_UPDATE_GESTURE_PREVIEW_AND_SUGGESTION_STRIP: - updateBatchInput((InputPointers)msg.obj); + updateBatchInput((InputPointers)msg.obj, msg.arg2 /* sequenceNumber */); break; case MSG_GET_SUGGESTED_WORDS: - mLatinIme.getSuggestedWords(msg.arg1, (OnGetSuggestedWordsCallback) msg.obj); + mLatinIme.getSuggestedWords(msg.arg1 /* sessionId */, + msg.arg2 /* sequenceNumber */, (OnGetSuggestedWordsCallback) msg.obj); break; } return true; @@ -1857,14 +1860,15 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen } // Run in the Handler thread. - private void updateBatchInput(final InputPointers batchPointers) { + private void updateBatchInput(final InputPointers batchPointers, final int sequenceNumber) { synchronized (mLock) { if (!mInBatchInput) { // Batch input has ended or canceled while the message was being delivered. return; } - getSuggestedWordsGestureLocked(batchPointers, new OnGetSuggestedWordsCallback() { + getSuggestedWordsGestureLocked(batchPointers, sequenceNumber, + new OnGetSuggestedWordsCallback() { @Override public void onGetSuggestedWords(final SuggestedWords suggestedWords) { mLatinIme.mHandler.showGesturePreviewAndSuggestionStrip( @@ -1875,13 +1879,13 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen } // Run in the UI thread. - public void onUpdateBatchInput(final InputPointers batchPointers) { + public void onUpdateBatchInput(final InputPointers batchPointers, + final int sequenceNumber) { if (mHandler.hasMessages(MSG_UPDATE_GESTURE_PREVIEW_AND_SUGGESTION_STRIP)) { return; } - mHandler.obtainMessage( - MSG_UPDATE_GESTURE_PREVIEW_AND_SUGGESTION_STRIP, batchPointers) - .sendToTarget(); + mHandler.obtainMessage(MSG_UPDATE_GESTURE_PREVIEW_AND_SUGGESTION_STRIP, 0 /* arg1 */, + sequenceNumber /* arg2 */, batchPointers /* obj */).sendToTarget(); } public void onCancelBatchInput() { @@ -1895,7 +1899,8 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen // Run in the UI thread. public void onEndBatchInput(final InputPointers batchPointers) { synchronized(mLock) { - getSuggestedWordsGestureLocked(batchPointers, new OnGetSuggestedWordsCallback() { + getSuggestedWordsGestureLocked(batchPointers, SuggestedWords.NOT_A_SEQUENCE_NUMBER, + new OnGetSuggestedWordsCallback() { @Override public void onGetSuggestedWords(final SuggestedWords suggestedWords) { mInBatchInput = false; @@ -1910,10 +1915,10 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen // {@link LatinIME#getSuggestedWords(int)} method calls with same session id have to // be synchronized. private void getSuggestedWordsGestureLocked(final InputPointers batchPointers, - final OnGetSuggestedWordsCallback callback) { + final int sequenceNumber, final OnGetSuggestedWordsCallback callback) { mLatinIme.mWordComposer.setBatchInputPointers(batchPointers); mLatinIme.getSuggestedWordsOrOlderSuggestionsAsync(Suggest.SESSION_GESTURE, - new OnGetSuggestedWordsCallback() { + sequenceNumber, new OnGetSuggestedWordsCallback() { @Override public void onGetSuggestedWords(SuggestedWords suggestedWords) { final int suggestionCount = suggestedWords.size(); @@ -1928,9 +1933,10 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen }); } - public void getSuggestedWords(final int sessionId, + public void getSuggestedWords(final int sessionId, final int sequenceNumber, final OnGetSuggestedWordsCallback callback) { - mHandler.obtainMessage(MSG_GET_SUGGESTED_WORDS, sessionId, 0, callback).sendToTarget(); + mHandler.obtainMessage(MSG_GET_SUGGESTED_WORDS, sessionId, sequenceNumber, callback) + .sendToTarget(); } private void onDestroy() { @@ -1951,11 +1957,28 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen } } + /* The sequence number member is only used in onUpdateBatchInput. It is increased each time + * auto-commit happens. The reason we need this is, when auto-commit happens we trim the + * input pointers that are held in a singleton, and to know how much to trim we rely on the + * results of the suggestion process that is held in mSuggestedWords. + * However, the suggestion process is asynchronous, and sometimes we may enter the + * onUpdateBatchInput method twice without having recomputed suggestions yet, or having + * received new suggestions generated from not-yet-trimmed input pointers. In this case, the + * mIndexOfTouchPointOfSecondWords member will be out of date, and we must not use it lest we + * remove an unrelated number of pointers (possibly even more than are left in the input + * pointers, leading to a crash). + * To avoid that, we increase the sequence number each time we auto-commit and trim the + * input pointers, and we do not use any suggested words that have been generated with an + * earlier sequence number. + */ + private int mAutoCommitSequenceNumber = 1; @Override public void onUpdateBatchInput(final InputPointers batchPointers) { if (mSettings.getCurrent().mPhraseGestureEnabled) { final SuggestedWordInfo candidate = mSuggestedWords.getAutoCommitCandidate(); - if (null != candidate) { + // If these suggested words have been generated with out of date input pointers, then + // we skip auto-commit (see comments above on the mSequenceNumber member). + if (null != candidate && mSuggestedWords.mSequenceNumber >= mAutoCommitSequenceNumber) { if (candidate.mSourceDict.shouldAutoCommit(candidate)) { final String[] commitParts = candidate.mWord.split(" ", 2); batchPointers.shift(candidate.mIndexOfTouchPointOfSecondWord); @@ -1964,10 +1987,11 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen mSpaceState = SPACE_STATE_PHANTOM; mKeyboardSwitcher.updateShiftState(); mWordComposer.setCapitalizedModeAtStartComposingTime(getActualCapsMode()); + ++mAutoCommitSequenceNumber; } } } - mInputUpdater.onUpdateBatchInput(batchPointers); + mInputUpdater.onUpdateBatchInput(batchPointers, mAutoCommitSequenceNumber); } // This method must run in UI Thread. @@ -2502,7 +2526,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen final AsyncResultHolder holder = new AsyncResultHolder(); getSuggestedWordsOrOlderSuggestionsAsync(Suggest.SESSION_TYPING, - new OnGetSuggestedWordsCallback() { + SuggestedWords.NOT_A_SEQUENCE_NUMBER, new OnGetSuggestedWordsCallback() { @Override public void onGetSuggestedWords(final SuggestedWords suggestedWords) { holder.set(suggestedWords); @@ -2517,7 +2541,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen } } - private void getSuggestedWords(final int sessionId, + private void getSuggestedWords(final int sessionId, final int sequenceNumber, final OnGetSuggestedWordsCallback callback) { final Keyboard keyboard = mKeyboardSwitcher.getKeyboard(); final Suggest suggest = mSuggest; @@ -2542,18 +2566,19 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen } suggest.getSuggestedWords(mWordComposer, prevWord, keyboard.getProximityInfo(), currentSettings.mBlockPotentiallyOffensive, currentSettings.mCorrectionEnabled, - additionalFeaturesOptions, sessionId, callback); + additionalFeaturesOptions, sessionId, sequenceNumber, callback); } private void getSuggestedWordsOrOlderSuggestionsAsync(final int sessionId, - final OnGetSuggestedWordsCallback callback) { - mInputUpdater.getSuggestedWords(sessionId, new OnGetSuggestedWordsCallback() { - @Override - public void onGetSuggestedWords(SuggestedWords suggestedWords) { - callback.onGetSuggestedWords(maybeRetrieveOlderSuggestions( - mWordComposer.getTypedWord(), suggestedWords)); - } - }); + final int sequenceNumber, final OnGetSuggestedWordsCallback callback) { + mInputUpdater.getSuggestedWords(sessionId, sequenceNumber, + new OnGetSuggestedWordsCallback() { + @Override + public void onGetSuggestedWords(SuggestedWords suggestedWords) { + callback.onGetSuggestedWords(maybeRetrieveOlderSuggestions( + mWordComposer.getTypedWord(), suggestedWords)); + } + }); } private SuggestedWords maybeRetrieveOlderSuggestions(final String typedWord, @@ -2888,30 +2913,30 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen // We come here if there weren't any suggestion spans on this word. We will try to // compute suggestions for it instead. mInputUpdater.getSuggestedWords(Suggest.SESSION_TYPING, - new OnGetSuggestedWordsCallback() { - @Override - public void onGetSuggestedWords( - final SuggestedWords suggestedWordsIncludingTypedWord) { - final SuggestedWords suggestedWords; - if (suggestedWordsIncludingTypedWord.size() > 1) { - // We were able to compute new suggestions for this word. - // Remove the typed word, since we don't want to display it in this case. - // The #getSuggestedWordsExcludingTypedWord() method sets willAutoCorrect to - // false. - suggestedWords = suggestedWordsIncludingTypedWord - .getSuggestedWordsExcludingTypedWord(); - } else { - // No saved suggestions, and we were unable to compute any good one either. - // Rather than displaying an empty suggestion strip, we'll display the - // original word alone in the middle. - // Since there is only one word, willAutoCorrect is false. - suggestedWords = suggestedWordsIncludingTypedWord; - } - // We need to pass typedWord because mWordComposer.mTypedWord may differ from - // typedWord. - unsetIsAutoCorrectionIndicatorOnAndCallShowSuggestionStrip(suggestedWords, - typedWord); - }}); + SuggestedWords.NOT_A_SEQUENCE_NUMBER, new OnGetSuggestedWordsCallback() { + @Override + public void onGetSuggestedWords( + final SuggestedWords suggestedWordsIncludingTypedWord) { + final SuggestedWords suggestedWords; + if (suggestedWordsIncludingTypedWord.size() > 1) { + // We were able to compute new suggestions for this word. + // Remove the typed word, since we don't want to display it in this + // case. The #getSuggestedWordsExcludingTypedWord() method sets + // willAutoCorrect to false. + suggestedWords = suggestedWordsIncludingTypedWord + .getSuggestedWordsExcludingTypedWord(); + } else { + // No saved suggestions, and we were unable to compute any good one + // either. Rather than displaying an empty suggestion strip, we'll + // display the original word alone in the middle. + // Since there is only one word, willAutoCorrect is false. + suggestedWords = suggestedWordsIncludingTypedWord; + } + // We need to pass typedWord because mWordComposer.mTypedWord may + // differ from typedWord. + unsetIsAutoCorrectionIndicatorOnAndCallShowSuggestionStrip( + suggestedWords, typedWord); + }}); } else { // We found suggestion spans in the word. We'll create the SuggestedWords out of // them, and make willAutoCorrect false. diff --git a/java/src/com/android/inputmethod/latin/Suggest.java b/java/src/com/android/inputmethod/latin/Suggest.java index c270d47d0..72b9c417c 100644 --- a/java/src/com/android/inputmethod/latin/Suggest.java +++ b/java/src/com/android/inputmethod/latin/Suggest.java @@ -217,15 +217,17 @@ public final class Suggest { public void getSuggestedWords(final WordComposer wordComposer, final String prevWordForBigram, final ProximityInfo proximityInfo, final boolean blockOffensiveWords, final boolean isCorrectionEnabled, - final int[] additionalFeaturesOptions, final int sessionId, + final int[] additionalFeaturesOptions, final int sessionId, final int sequenceNumber, final OnGetSuggestedWordsCallback callback) { LatinImeLogger.onStartSuggestion(prevWordForBigram); if (wordComposer.isBatchMode()) { getSuggestedWordsForBatchInput(wordComposer, prevWordForBigram, proximityInfo, - blockOffensiveWords, additionalFeaturesOptions, sessionId, callback); + blockOffensiveWords, additionalFeaturesOptions, sessionId, sequenceNumber, + callback); } else { getSuggestedWordsForTypingInput(wordComposer, prevWordForBigram, proximityInfo, - blockOffensiveWords, isCorrectionEnabled, additionalFeaturesOptions, callback); + blockOffensiveWords, isCorrectionEnabled, additionalFeaturesOptions, + sequenceNumber, callback); } } @@ -234,7 +236,8 @@ public final class Suggest { private void getSuggestedWordsForTypingInput(final WordComposer wordComposer, final String prevWordForBigram, final ProximityInfo proximityInfo, final boolean blockOffensiveWords, final boolean isCorrectionEnabled, - final int[] additionalFeaturesOptions, final OnGetSuggestedWordsCallback callback) { + final int[] additionalFeaturesOptions, final int sequenceNumber, + final OnGetSuggestedWordsCallback callback) { final int trailingSingleQuotesCount = wordComposer.trailingSingleQuotesCount(); final BoundedTreeSet suggestionsSet = new BoundedTreeSet(sSuggestedWordInfoComparator, MAX_SUGGESTIONS); @@ -347,7 +350,7 @@ public final class Suggest { hasAutoCorrection, /* willAutoCorrect */ false /* isPunctuationSuggestions */, false /* isObsoleteSuggestions */, - !wordComposer.isComposingWord() /* isPrediction */)); + !wordComposer.isComposingWord() /* isPrediction */, sequenceNumber)); } // Retrieves suggestions for the batch input @@ -355,7 +358,8 @@ public final class Suggest { private void getSuggestedWordsForBatchInput(final WordComposer wordComposer, final String prevWordForBigram, final ProximityInfo proximityInfo, final boolean blockOffensiveWords, final int[] additionalFeaturesOptions, - final int sessionId, final OnGetSuggestedWordsCallback callback) { + final int sessionId, final int sequenceNumber, + final OnGetSuggestedWordsCallback callback) { final BoundedTreeSet suggestionsSet = new BoundedTreeSet(sSuggestedWordInfoComparator, MAX_SUGGESTIONS); @@ -408,7 +412,7 @@ public final class Suggest { false /* willAutoCorrect */, false /* isPunctuationSuggestions */, false /* isObsoleteSuggestions */, - false /* isPrediction */)); + false /* isPrediction */, sequenceNumber)); } private static ArrayList getSuggestionsInfoListWithDebugInfo( diff --git a/java/src/com/android/inputmethod/latin/SuggestedWords.java b/java/src/com/android/inputmethod/latin/SuggestedWords.java index fed4cdbbb..97c89dd4e 100644 --- a/java/src/com/android/inputmethod/latin/SuggestedWords.java +++ b/java/src/com/android/inputmethod/latin/SuggestedWords.java @@ -29,6 +29,7 @@ import java.util.HashSet; public final class SuggestedWords { public static final int INDEX_OF_TYPED_WORD = 0; public static final int INDEX_OF_AUTO_CORRECTION = 1; + public static final int NOT_A_SEQUENCE_NUMBER = -1; private static final ArrayList EMPTY_WORD_INFO_LIST = CollectionUtils.newArrayList(0); @@ -43,6 +44,7 @@ public final class SuggestedWords { public final boolean mIsPunctuationSuggestions; public final boolean mIsObsoleteSuggestions; public final boolean mIsPrediction; + public final int mSequenceNumber; // Sequence number for auto-commit. private final ArrayList mSuggestedWordInfoList; public SuggestedWords(final ArrayList suggestedWordInfoList, @@ -51,12 +53,24 @@ public final class SuggestedWords { final boolean isPunctuationSuggestions, final boolean isObsoleteSuggestions, final boolean isPrediction) { + this(suggestedWordInfoList, typedWordValid, willAutoCorrect, isPunctuationSuggestions, + isObsoleteSuggestions, isPrediction, NOT_A_SEQUENCE_NUMBER); + } + + public SuggestedWords(final ArrayList suggestedWordInfoList, + final boolean typedWordValid, + final boolean willAutoCorrect, + final boolean isPunctuationSuggestions, + final boolean isObsoleteSuggestions, + final boolean isPrediction, + final int sequenceNumber) { mSuggestedWordInfoList = suggestedWordInfoList; mTypedWordValid = typedWordValid; mWillAutoCorrect = willAutoCorrect; mIsPunctuationSuggestions = isPunctuationSuggestions; mIsObsoleteSuggestions = isObsoleteSuggestions; mIsPrediction = isPrediction; + mSequenceNumber = sequenceNumber; } public boolean isEmpty() { From 1875860d2606eff269381ef0bb68db549ab4819d Mon Sep 17 00:00:00 2001 From: Jean Chalard Date: Tue, 22 Oct 2013 19:22:57 +0900 Subject: [PATCH 16/21] Stopgap solution for a crash. This returns the wrong string, but since it's used for getting the previous word for bigrams, it only results in slightly worse suggestions quality. Cherry-pick of I6ce5de2f Bug: 11273655 Change-Id: I17fb6d74f18fb31bd8f8518f80456d74ae30a2c3 --- .../android/inputmethod/latin/RichInputConnection.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/java/src/com/android/inputmethod/latin/RichInputConnection.java b/java/src/com/android/inputmethod/latin/RichInputConnection.java index e43cab5ca..c212f9c81 100644 --- a/java/src/com/android/inputmethod/latin/RichInputConnection.java +++ b/java/src/com/android/inputmethod/latin/RichInputConnection.java @@ -294,7 +294,14 @@ public final class RichInputConnection { // the text field, then we can return the cached version right away. if (cachedLength >= n || cachedLength >= mExpectedCursorPosition) { final StringBuilder s = new StringBuilder(mCommittedTextBeforeComposingText); - s.append(mComposingText); + // We call #toString() here to create a temporary object. + // In some situations, this method is called on a worker thread, and it's possible + // the main thread touches the contents of mComposingText while this worker thread + // is suspended, because mComposingText is a StringBuilder. This may lead to crashes, + // so we call #toString() on it. That will result in the return value being strictly + // speaking wrong, but since this is used for basing bigram probability off, and + // it's only going to matter for one getSuggestions call, it's fine in the practice. + s.append(mComposingText.toString()); if (s.length() > n) { s.delete(0, s.length() - n); } From c9dea6d6c23f6bb01b0d2baed302b03956253ec8 Mon Sep 17 00:00:00 2001 From: Baligh Uddin Date: Fri, 25 Oct 2013 14:39:08 -0700 Subject: [PATCH 17/21] Import translations. DO NOT MERGE Change-Id: I9c4542106d4660da3b67907afa5696e91f537dd6 Auto-generated-cl: translation import --- java/res/values-zh-rTW/strings.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/java/res/values-zh-rTW/strings.xml b/java/res/values-zh-rTW/strings.xml index 27749497c..4d39050f7 100644 --- a/java/res/values-zh-rTW/strings.xml +++ b/java/res/values-zh-rTW/strings.xml @@ -29,7 +29,7 @@ "按鍵時彈出" "一般" "文字修正" - "手勢輸入" + "滑行輸入" "其他選項" "進階設定" "進階選項" @@ -68,11 +68,11 @@ "極大幅度更正" "建議下一個字詞" "根據前一個字詞提供建議" - "啟用手勢輸入" + "啟用滑行輸入" "以滑動方式寫出字詞中字母來輸入字詞" "顯示手勢軌跡" "動態浮動預覽" - "使用手勢輸入時顯示建議字詞" + "使用滑行輸入時顯示建議字詞" "%s:已儲存" "前往" "下一頁" @@ -176,7 +176,7 @@ "發生錯誤" "預設" "歡迎使用 %s" - "含手勢輸入功能" + "含滑行輸入功能" "開始設定" "下一步" "正在設定「%s」" From ea596c4f7c2136f1b9dc24057505e33043374888 Mon Sep 17 00:00:00 2001 From: Baligh Uddin Date: Mon, 28 Oct 2013 23:45:03 -0700 Subject: [PATCH 18/21] Import translations. DO NOT MERGE Change-Id: Ib8c870d0c974eb3b49ae29141aaa53e5f6a2cac9 Auto-generated-cl: translation import --- java/res/values-ar/strings-appname.xml | 8 +++--- java/res/values-ar/strings.xml | 34 +++++++++++++------------- java/res/values-fa/strings-appname.xml | 8 +++--- java/res/values-fa/strings.xml | 28 ++++++++++----------- java/res/values-iw/strings-appname.xml | 8 +++--- java/res/values-iw/strings.xml | 34 +++++++++++++------------- 6 files changed, 60 insertions(+), 60 deletions(-) diff --git a/java/res/values-ar/strings-appname.xml b/java/res/values-ar/strings-appname.xml index d5176d022..35387cb86 100644 --- a/java/res/values-ar/strings-appname.xml +++ b/java/res/values-ar/strings-appname.xml @@ -20,8 +20,8 @@ - "لوحة مفاتيح Android ‏(AOSP)" - "المدقق الإملائي في Android‏ (AOSP)" - "إعدادات لوحة مفاتيح Android‏ (AOSP)" - "إعدادات المدقق الإملائي في Android‏ (AOSP)" + "‏لوحة مفاتيح Android ‏(AOSP)" + "‏المدقق الإملائي في Android‏ (AOSP)" + "‏إعدادات لوحة مفاتيح Android‏ (AOSP)" + "‏إعدادات المدقق الإملائي في Android‏ (AOSP)" diff --git a/java/res/values-ar/strings.xml b/java/res/values-ar/strings.xml index 1d58832f4..201976a5a 100644 --- a/java/res/values-ar/strings.xml +++ b/java/res/values-ar/strings.xml @@ -38,7 +38,7 @@ "مفتاح تبديل اللغة" "يظهر عندما يتم تمكين لغات الإدخال متعددة" "إظهار مؤشر التمرير" - "عرض تلميح مرئي أثناء التمرير من مفتاح Shift أو Symbol" + "‏عرض تلميح مرئي أثناء التمرير من مفتاح Shift أو Symbol" "تأخير إزالة النافذة المنبثقة الأساسية" "بلا تأخير" "افتراضي" @@ -82,14 +82,14 @@ "توقف مؤقت" "انتظار" "يمكنك توصيل سماعة رأس لسماع مفاتيح كلمة المرور منطوقة بصوت عالٍ." - "النص الحالي هو %s" + "‏النص الحالي هو %s" "لم يتم إدخال نص" "%1$s لتصحيح %2$s إلى %3$s" "%1$s للتصحيح التلقائي" - "رمز المفتاح %d" + "‏رمز المفتاح %d" "العالي" - "Shift يعمل (انقر للتعطيل)" - "Caps lock يعمل (انقر للتعطيل)" + "‏Shift يعمل (انقر للتعطيل)" + "‏Caps lock يعمل (انقر للتعطيل)" "حذف" "الرموز" "أحرف" @@ -105,9 +105,9 @@ "تبديل اللغة" "التالي" "السابق" - "تم تمكين Shift" - "تم تمكين Caps lock" - "تم تعطيل Shift" + "‏تم تمكين Shift" + "‏تم تمكين Caps lock" + "‏تم تعطيل Shift" "وضع الرموز" "وضع الأحرف" "وضع الهاتف" @@ -122,7 +122,7 @@ "الهاتف" "النص" "الوقت" - "عنوان URL" + "‏عنوان URL" "مفتاح الإدخال الصوتي" "لوحة مفاتيح رئيسية" "لوحة مفاتيح الرموز" @@ -147,12 +147,12 @@ "الإسبانية (الأمريكية) (%s)" "%s (التقليدية)" "بدون لغة (أبجدية)" - "الأبجدية (QWERTY)" - "الأبجدية (QWERTZ)" - "الأبجدية (AZERTY)" - "الأبجدية (Dvorak)" - "الأبجدية (Colemak)" - "الأبجدية (PC)" + "‏الأبجدية (QWERTY)" + "‏الأبجدية (QWERTZ)" + "‏الأبجدية (AZERTY)" + "‏الأبجدية (Dvorak)" + "‏الأبجدية (Colemak)" + "‏الأبجدية (PC)" "الرموز التعبيرية" "أنماط الإدخال المخصصة" "إضافة نمط" @@ -217,9 +217,9 @@ "تثبيت" "إلغاء" "حذف" - "اللغة المحددة على جهازك الجوال تشتمل على قاموس متوفر.<br/> نوصي <b>بتنزيل</b> قاموس %1$s لتحسين تجربة الكتابة.<br/> <br/> قد يستغرق التنزيل دقيقة أو دقيقتين أكثر من المدة التي يستغرقها التنزيل عبر شبكة الجيل الثالث. قد تنطبق الرسوم إذا لم تكن مشتركًا في <b>خطة البيانات غير المحدودة</b>.<br/> إذا لم تكن متأكدًا من خطة البيانات المتوفرة لديك، فنحن نوصي بالبحث عن اتصال Wi-Fi لبدء عملية التنزيل تلقائيًا.<br/> <br/> نصيحة: يمكنك تنزيل القواميس وإزالتها عن طريق الانتقال إلى <b>اللغة والإدخال</b> في قائمة <b>إعدادات</b> في جهازك الجوَّال." + "‏اللغة المحددة على جهازك الجوال تشتمل على قاموس متوفر.<br/> نوصي <b>بتنزيل</b> قاموس %1$s لتحسين تجربة الكتابة.<br/> <br/> قد يستغرق التنزيل دقيقة أو دقيقتين أكثر من المدة التي يستغرقها التنزيل عبر شبكة الجيل الثالث. قد تنطبق الرسوم إذا لم تكن مشتركًا في <b>خطة البيانات غير المحدودة</b>.<br/> إذا لم تكن متأكدًا من خطة البيانات المتوفرة لديك، فنحن نوصي بالبحث عن اتصال Wi-Fi لبدء عملية التنزيل تلقائيًا.<br/> <br/> نصيحة: يمكنك تنزيل القواميس وإزالتها عن طريق الانتقال إلى <b>اللغة والإدخال</b> في قائمة <b>إعدادات</b> في جهازك الجوَّال." "التنزيل الآن (%1$.1f ميغابايت)" - "التنزيل عبر شبكة Wi-Fi" + "‏التنزيل عبر شبكة Wi-Fi" "هناك قاموس متوفر للغة %1$s" "اضغط للمراجعة والتنزيل" "جارٍ التنزيل: ستتوفر اقتراحات للغة %1$s بعد قليل." diff --git a/java/res/values-fa/strings-appname.xml b/java/res/values-fa/strings-appname.xml index 38234c241..f6c9f545e 100644 --- a/java/res/values-fa/strings-appname.xml +++ b/java/res/values-fa/strings-appname.xml @@ -20,8 +20,8 @@ - "صفحه کلید Android ‏(AOSP)" - "غلط‌گیر Android ‏(AOSP)" - "تنظیمات صفحه کلید Android ‏(AOSP)" - "تنظیمات غلط‌گیر Android ‏(AOSP)" + "‏صفحه کلید Android ‏(AOSP)" + "‏غلط‌گیر Android ‏(AOSP)" + "‏تنظیمات صفحه کلید Android ‏(AOSP)" + "‏تنظیمات غلط‌گیر Android ‏(AOSP)" diff --git a/java/res/values-fa/strings.xml b/java/res/values-fa/strings.xml index a6d9bbafd..0c194f795 100644 --- a/java/res/values-fa/strings.xml +++ b/java/res/values-fa/strings.xml @@ -38,7 +38,7 @@ "کلید تغییر زبان" "وقتی چند زبان ورودی فعال است نشان داده شود" "نمایش نشانگر لغزاندن" - "نمایش نشان بصری، هنگام لغزاندن کلیدهای Shift یا نماد" + "‏نمایش نشان بصری، هنگام لغزاندن کلیدهای Shift یا نماد" "تأخیر در رد کردن کلید نمایشی" "بدون تأخیر" "پیش‌فرض" @@ -92,8 +92,8 @@ "Shift" - "Shift فعال است (برای غیرفعال کردن ضربه بزنید)" - "Caps Lock روشن است (برای غیرفعال کردن ضربه بزنید)" + "‏Shift فعال است (برای غیرفعال کردن ضربه بزنید)" + "‏Caps Lock روشن است (برای غیرفعال کردن ضربه بزنید)" "Delete" "نمادها" "حروف" @@ -109,9 +109,9 @@ "تغییر زبان" "بعدی" "قبلی" - "Shift فعال است" - "Caps lock فعال شد" - "Shift غیرفعال است" + "‏Shift فعال است" + "‏Caps lock فعال شد" + "‏Shift غیرفعال است" "حالت نمادها" "حالت حروف" "حالت تلفن" @@ -151,12 +151,12 @@ "اسپانیایی (آمریکا) (%s)" "%s (سنتی)" "بدون زبان (حروف الفبا)" - "حروف الفبا (QWERTY)" - "حروف الفبا (QWERTZ)" - "حروف الفبا (AZERTY)" - "حروف الفبا (Dvorak)" - "حروف الفبا (Colemak)" - "حروف الفبا (PC)" + "‏حروف الفبا (QWERTY)" + "‏حروف الفبا (QWERTZ)" + "‏حروف الفبا (AZERTY)" + "‏حروف الفبا (Dvorak)" + "‏حروف الفبا (Colemak)" + "‏حروف الفبا (PC)" "Emoji" "سبک‌های ورودی سفارشی" "افزودن سبک" @@ -221,9 +221,9 @@ "نصب" "لغو" "حذف" - "برای زبان انتخاب شده در دستگاه همراه شما فرهنگ لغتی موجود است.<br/> توصیه می‌کنیم فرهنگ لغت %1$s را <b>دانلود کنید</b> تا بهتر تایپ کنید.<br/> <br/> دانلود از طریق 3G ممکن است چند لحظه طول بکشد. اگر <b>طرح داده نامحدود</b> نداشته باشید ممکن است برایتان هزینه داشته باشد.<br/> اگر مطمئن نیستید طرح داده شما چیست٬ توصیه می‌کنیم یک اتصال Wi-Fi پیدا کنید تا دانلود بطور خودکار شروع شود.<br/> <br/> نکته: می‌توانید فرهنگ لغت را با رفتن به منوی <b>زبان و ورودی</b> در <b>تنظیمات</b> در دستگاه همراه خود دانلود و حذف کنید." + "‏برای زبان انتخاب شده در دستگاه همراه شما فرهنگ لغتی موجود است.<br/> توصیه می‌کنیم فرهنگ لغت %1$s را <b>دانلود کنید</b> تا بهتر تایپ کنید.<br/> <br/> دانلود از طریق 3G ممکن است چند لحظه طول بکشد. اگر <b>طرح داده نامحدود</b> نداشته باشید ممکن است برایتان هزینه داشته باشد.<br/> اگر مطمئن نیستید طرح داده شما چیست٬ توصیه می‌کنیم یک اتصال Wi-Fi پیدا کنید تا دانلود بطور خودکار شروع شود.<br/> <br/> نکته: می‌توانید فرهنگ لغت را با رفتن به منوی <b>زبان و ورودی</b> در <b>تنظیمات</b> در دستگاه همراه خود دانلود و حذف کنید." "هم‌اکنون بارگیری شود (%1$.1f مگابایت)" - "دانلود ازطریق Wi-Fi" + "‏دانلود ازطریق Wi-Fi" "یک فرهنگ لغت برای %1$s موجود است" "برای مرور و دانلود فشار دهید" "دانلود لغات پیشنهادی برای %1$s به زودی شروع می‌شود." diff --git a/java/res/values-iw/strings-appname.xml b/java/res/values-iw/strings-appname.xml index 1a07c5492..fc040f9ff 100644 --- a/java/res/values-iw/strings-appname.xml +++ b/java/res/values-iw/strings-appname.xml @@ -20,8 +20,8 @@ - "מקלדת Android‏ (AOSP)" - "בודק האיות של Android‏ (AOSP)" - "הגדרות מקלדת Android‏ (AOSP)" - "הגדרות בודק האיות של Android‏ (AOSP)" + "‏מקלדת Android‏ (AOSP)" + "‏בודק האיות של Android‏ (AOSP)" + "‏הגדרות מקלדת Android‏ (AOSP)" + "‏הגדרות בודק האיות של Android‏ (AOSP)" diff --git a/java/res/values-iw/strings.xml b/java/res/values-iw/strings.xml index 81d2e406d..664bfcf30 100644 --- a/java/res/values-iw/strings.xml +++ b/java/res/values-iw/strings.xml @@ -38,7 +38,7 @@ "מתג החלפת שפה" "הצג כאשר ניתן להשתמש בשפות קלט מרובות" "הצג את סמן ההסטה" - "הצג סימון ויזואלי בעת הסטה מ-Shift או ממקשי סמלים" + "‏הצג סימון ויזואלי בעת הסטה מ-Shift או ממקשי סמלים" "עיכוב בסגירת חלון קופץ של מקש" "ללא עיכוב" "ברירת מחדל" @@ -82,14 +82,14 @@ "השהה" "המתן" "חבר אוזניות כדי לשמוע הקראה של מפתחות סיסמה." - "הטקסט הנוכחי הוא %s" + "‏הטקסט הנוכחי הוא %s" "לא הוזן טקסט" "%1$s מתקן את %2$s ל-%3$s" "%1$s מבצע תיקון אוטומטי" - "קוד מקש %d" + "‏קוד מקש %d" "Shift" - "Shift פועל (הקש כדי להשבית)" - "Caps Lock פועל (הקש כדי להשבית)" + "‏Shift פועל (הקש כדי להשבית)" + "‏Caps Lock פועל (הקש כדי להשבית)" "מחק" "סמלים" "אותיות" @@ -105,9 +105,9 @@ "החלף שפה" "הבא" "הקודם" - "Shift פועל" - "Caps Lock פועל" - "Shift מושבת" + "‏Shift פועל" + "‏Caps Lock פועל" + "‏Shift מושבת" "מצב סמלים" "מצב אותיות" "מצב טלפון" @@ -147,12 +147,12 @@ "ספרדית (ארצות הברית) (%s)" "%s (מסורתית)" "ללא שפה (אלף-בית)" - "אלף-בית (QWERTY)" - "אלף-בית (QWERTZ)" - "אלף-בית (AZERTY)" - "אלף-בית (Dvorak)" - "אלף-בית (Colemak)" - "אלף-בית (PC)" + "‏אלף-בית (QWERTY)" + "‏אלף-בית (QWERTZ)" + "‏אלף-בית (AZERTY)" + "‏אלף-בית (Dvorak)" + "‏אלף-בית (Colemak)" + "‏אלף-בית (PC)" "אמוג\'י" "סגנונות קלט מותאמים אישית" "הוסף סגנון" @@ -217,9 +217,9 @@ "התקן" "בטל" "מחק" - "לשפה הנבחרת במכשיר הנייד שלך יש מילון זמין.<br/> אנו ממליצים <b>להוריד</b> את המילון ב%1$s כדי לשפר את חוויית ההקלדה.<br/> <br/> ההורדה עשויה לארוך דקה או שתיים ב-3G. ייתכן שתחויב אם אין לך <b>תוכנית נתונים בלתי מוגבלת</b>.<br/> אם אינך בטוח איזו תוכנית נתונים יש לך, אנו ממליצים לחפש חיבור Wi-Fi כדי להתחיל בהורדה באופן אוטומטי.<br/> <br/> טיפ: ניתן להוריד ולהסיר מילונים ב<b>שפה וקלט</b> בתפריט <b>הגדרות</b> של המכשיר הנייד שלך." - "הורד עכשיו (%1$.1fMB)" - "הורד באמצעות Wi-Fi" + "‏לשפה הנבחרת במכשיר הנייד שלך יש מילון זמין.<br/> אנו ממליצים <b>להוריד</b> את המילון ב%1$s כדי לשפר את חוויית ההקלדה.<br/> <br/> ההורדה עשויה לארוך דקה או שתיים ב-3G. ייתכן שתחויב אם אין לך <b>תוכנית נתונים בלתי מוגבלת</b>.<br/> אם אינך בטוח איזו תוכנית נתונים יש לך, אנו ממליצים לחפש חיבור Wi-Fi כדי להתחיל בהורדה באופן אוטומטי.<br/> <br/> טיפ: ניתן להוריד ולהסיר מילונים ב<b>שפה וקלט</b> בתפריט <b>הגדרות</b> של המכשיר הנייד שלך." + "‏הורד עכשיו (%1$.1fMB)" + "‏הורד באמצעות Wi-Fi" "יש מילון זמין עבור %1$s" "לחץ כדי לעיין ולהוריד" "מוריד: הצעות ב%1$s יהיו מוכנות בקרוב." From d075a7af4103173186048c78522b99fcc30e99ec Mon Sep 17 00:00:00 2001 From: Baligh Uddin Date: Mon, 4 Nov 2013 23:29:12 -0800 Subject: [PATCH 19/21] Import translations. DO NOT MERGE Change-Id: I103b96a481208d2d3525dd57df2387e9c61b84a3 Auto-generated-cl: translation import --- java/res/values-hi/strings.xml | 6 +++--- java/res/values-iw/strings.xml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/java/res/values-hi/strings.xml b/java/res/values-hi/strings.xml index 6d2d5d2fe..ef8b5d296 100644 --- a/java/res/values-hi/strings.xml +++ b/java/res/values-hi/strings.xml @@ -188,11 +188,11 @@ "इसके बाद, \"%s\" को अपनी सक्रिय पाठ-इनपुट पद्धति के रूप में चुनें." "इनपुट पद्धतियां स्विच करें" "बधाई हो, आप बिल्कुल तैयार हैं!" - "अब आप %s के साथ अपने सभी पसंदीदा एप्स में लिख सकते हैं." + "अब आप %s के साथ अपने सभी पसंदीदा ऐप्स में लिख सकते हैं." "अतिरिक्त भाषाएं कॉन्फ़िगर करना" "समाप्त" - "एप्स आइकन दिखाएं" - "लॉन्चर में एप्स आइकन प्रदर्शित करें" + "ऐप्स आइकन दिखाएं" + "लॉन्चर में ऐप्स आइकन प्रदर्शित करें" "डिक्‍शनरी प्रदाता" "डिक्‍शनरी प्रदाता" "डिक्‍शनरी सेवा" diff --git a/java/res/values-iw/strings.xml b/java/res/values-iw/strings.xml index 664bfcf30..37b055658 100644 --- a/java/res/values-iw/strings.xml +++ b/java/res/values-iw/strings.xml @@ -217,7 +217,7 @@ "התקן" "בטל" "מחק" - "‏לשפה הנבחרת במכשיר הנייד שלך יש מילון זמין.<br/> אנו ממליצים <b>להוריד</b> את המילון ב%1$s כדי לשפר את חוויית ההקלדה.<br/> <br/> ההורדה עשויה לארוך דקה או שתיים ב-3G. ייתכן שתחויב אם אין לך <b>תוכנית נתונים בלתי מוגבלת</b>.<br/> אם אינך בטוח איזו תוכנית נתונים יש לך, אנו ממליצים לחפש חיבור Wi-Fi כדי להתחיל בהורדה באופן אוטומטי.<br/> <br/> טיפ: ניתן להוריד ולהסיר מילונים ב<b>שפה וקלט</b> בתפריט <b>הגדרות</b> של המכשיר הנייד שלך." + "‏לשפה הנבחרת במכשיר הנייד שלך יש מילון זמין.<br/> אנו ממליצים <b>להוריד</b> את המילון ב%1$s כדי לשפר את חוויית ההקלדה.<br/> <br/> ההורדה עשויה לארוך דקה או שתיים ב-3G. ייתכן שתחויב אם אין לך <b>תכנית נתונים בלתי מוגבלת</b>.<br/> אם אינך בטוח איזו תכנית נתונים יש לך, אנו ממליצים לחפש חיבור Wi-Fi כדי להתחיל בהורדה באופן אוטומטי.<br/> <br/> טיפ: ניתן להוריד ולהסיר מילונים ב<b>שפה וקלט</b> בתפריט <b>הגדרות</b> של המכשיר הנייד שלך." "‏הורד עכשיו (%1$.1fMB)" "‏הורד באמצעות Wi-Fi" "יש מילון זמין עבור %1$s" From 5707b21647630dde1f5890804908582218e67f51 Mon Sep 17 00:00:00 2001 From: Satoshi Kataoka Date: Mon, 18 Nov 2013 12:49:16 +0900 Subject: [PATCH 20/21] Show mic key option on sw540 device Bug: 11737760 Change-Id: Id50a7d393acf755cb04d3f8dc60327abeee5a671 --- java/res/values-sw540dp/config.xml | 1 - java/res/values-sw600dp/config.xml | 23 +++++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 java/res/values-sw600dp/config.xml diff --git a/java/res/values-sw540dp/config.xml b/java/res/values-sw540dp/config.xml index 93862a767..027780ce3 100644 --- a/java/res/values-sw540dp/config.xml +++ b/java/res/values-sw540dp/config.xml @@ -19,7 +19,6 @@ --> - false false false diff --git a/java/res/values-sw600dp/config.xml b/java/res/values-sw600dp/config.xml new file mode 100644 index 000000000..e72e4941e --- /dev/null +++ b/java/res/values-sw600dp/config.xml @@ -0,0 +1,23 @@ + + + + + false + From 96c86af0b5d79cc3ebaf139b7877377c3dca32dd Mon Sep 17 00:00:00 2001 From: Baligh Uddin Date: Thu, 12 Dec 2013 04:40:19 -0800 Subject: [PATCH 21/21] Import translations. DO NOT MERGE Change-Id: Ib2de3eec303a80b4cae3599c61740db23370dd03 Auto-generated-cl: translation import --- java/res/values-da/strings.xml | 16 ++++++++-------- java/res/values-hi/strings.xml | 2 +- java/res/values-nb/strings.xml | 2 +- java/res/values-sw/strings.xml | 6 +++--- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/java/res/values-da/strings.xml b/java/res/values-da/strings.xml index 93d5c4e9b..c1c85384c 100644 --- a/java/res/values-da/strings.xml +++ b/java/res/values-da/strings.xml @@ -29,10 +29,10 @@ "Pop op ved tastetryk" "Generelt" "Tekstkorrigering" - "Skrivning med berøring" + "Glidende indtastning" "Andre valgmuligheder" "Avancerede indstillinger" - "Muligheder for eksperter" + "Indstillinger for øvede" "Skift inputmetode" "Tasten til sprogskift gælder også for andre inputmetoder" "Tast til sprogskift" @@ -68,11 +68,11 @@ "Meget aggressiv" "Forslag til næste ord" "Brug det forrige ord til at give forslag" - "Aktivér skrivning med berøring" + "Aktivér glidende indtastning" "Skriv et ord ved at glide mellem bogstaverne" - "Vis spor af berøring" - "Dynamisk flydende eks.visning" - "Se det foreslåede ord, mens berøringer udføres" + "Vis glidende trykspor" + "Dynamiske ordeksempler" + "Se ordforslag ved glidende indtastning" "%s: Gemt" "Gå" "Næste" @@ -166,7 +166,7 @@ "Ikke nu" "Denne inputstil findes allerede: %s" "Tilstand for brugsstudie" - "For sene lange tastetryk" + "Forsinket langt tastetryk" "Vibrationstid ved tastetryk" "Lydstyrke ved tastetryk" "Læs ekstern ordbogsfil" @@ -176,7 +176,7 @@ "Der opstod en fejl" "Standard" "Velkommen til %s" - "med Berøringsinput" + "med glidende indtastning" "Kom godt i gang" "Næste trin" "%s konfigureres" diff --git a/java/res/values-hi/strings.xml b/java/res/values-hi/strings.xml index ef8b5d296..4205d6b76 100644 --- a/java/res/values-hi/strings.xml +++ b/java/res/values-hi/strings.xml @@ -225,7 +225,7 @@ "डाउनलोड हो रहा है: %1$s के लिए सुझाव जल्दी ही तैयार हो जाएंगे." "संस्करण %1$s" "जोड़ें" - "शब्दकोष में जोड़ें" + "शब्दकोश में जोड़ें" "वाक्यांश" "अधिक विकल्प" "कम विकल्‍प" diff --git a/java/res/values-nb/strings.xml b/java/res/values-nb/strings.xml index a473cce71..40b13ce92 100644 --- a/java/res/values-nb/strings.xml +++ b/java/res/values-nb/strings.xml @@ -190,7 +190,7 @@ "Gratulerer, du er klar!" "Nå kan du skrive inn alle favorittappene dine med %s." "Konfigurer flere språk" - "Fullført" + "Ferdig" "Vis app-ikonet" "Vis app-ikonet i appvelgeren" "Ordlisteleverandør" diff --git a/java/res/values-sw/strings.xml b/java/res/values-sw/strings.xml index 9a22d20c5..b3470e45b 100644 --- a/java/res/values-sw/strings.xml +++ b/java/res/values-sw/strings.xml @@ -97,7 +97,7 @@ "Mipangilio" "Kichupo" "Nafasi" - "Uingizaji sauti" + "Kuweka data kwa kutamka" "Uso wenye tabasamu" "Rudi" "Tafuta" @@ -123,13 +123,13 @@ "maandishi" "wakati" "URL" - "Kibao cha kuingizia sauti" + "Kibao cha kuweka data kwa kutamka" "Kwenye kibodi kuu" "Kwenye kibodi ya ishara" "Zima" "Maikrofoni kwenye kibodi kuu" "Maikrofoni kwenye kibodi ya ishara" - "Uingizaji sauti umelemazwa" + "Kipengele cha kuweka data kwa kutamka kimezimwa" "Sanidi mbinu za uingizaji" "Lugha za uingizaji" "Tuma maoni"