mirror of
https://github.com/Helium314/HeliBoard.git
synced 2025-05-19 00:10:20 +00:00
Switch to new language settings (#89)
* add language settings * move to settings instead of language selection at end of setup wizard * allow storing enabled subtypes in preferences * make language selection and input method picker work with new system * deal with weird issue of getSystemLocales returning inconsistent locales * add details text to language settings * make usused settings inaccessible * better deal with "zz" subtypes, move hungarian (qwerty) from method.xml so a separate aditional subtype * scrape some strings+translations from android system + latinime * rename strings, add comment for unused string
This commit is contained in:
parent
e0c054ce09
commit
f32395366d
129 changed files with 1816 additions and 207 deletions
|
@ -59,7 +59,7 @@
|
|||
<intent-filter>
|
||||
<action android:name="android.view.InputMethod" />
|
||||
</intent-filter>
|
||||
<meta-data android:name="android.view.im" android:resource="@xml/method" />
|
||||
<meta-data android:name="android.view.im" android:resource="@xml/method_dummy" />
|
||||
</service>
|
||||
|
||||
<service android:name=".spellcheck.AndroidSpellCheckerService"
|
||||
|
|
|
@ -24,6 +24,7 @@ import android.view.ContextThemeWrapper;
|
|||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.inputmethod.EditorInfo;
|
||||
import android.view.inputmethod.InputMethodSubtype;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
|
||||
|
@ -593,4 +594,9 @@ public final class KeyboardSwitcher implements KeyboardState.SwitchActions {
|
|||
}
|
||||
return mKeyboardLayoutSet.getScriptId();
|
||||
}
|
||||
|
||||
public void switchToSubtype(InputMethodSubtype subtype) {
|
||||
Log.i("test1", "switch to "+subtype.getLocale());
|
||||
mLatinIME.switchToSubtype(subtype);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -45,6 +45,7 @@ import android.view.Window;
|
|||
import android.view.WindowManager;
|
||||
import android.view.inputmethod.CompletionInfo;
|
||||
import android.view.inputmethod.EditorInfo;
|
||||
import android.view.inputmethod.InputMethodInfo;
|
||||
import android.view.inputmethod.InputMethodSubtype;
|
||||
|
||||
import org.dslul.openboard.inputmethod.accessibility.AccessibilityUtils;
|
||||
|
@ -75,6 +76,7 @@ import org.dslul.openboard.inputmethod.latin.permissions.PermissionsManager;
|
|||
import org.dslul.openboard.inputmethod.latin.personalization.PersonalizationHelper;
|
||||
import org.dslul.openboard.inputmethod.latin.settings.Settings;
|
||||
import org.dslul.openboard.inputmethod.latin.settings.SettingsActivity;
|
||||
import org.dslul.openboard.inputmethod.latin.settings.SubtypeSettingsKt;
|
||||
import org.dslul.openboard.inputmethod.latin.settings.SettingsValues;
|
||||
import org.dslul.openboard.inputmethod.latin.suggestions.SuggestionStripView;
|
||||
import org.dslul.openboard.inputmethod.latin.suggestions.SuggestionStripViewAccessor;
|
||||
|
@ -82,6 +84,7 @@ import org.dslul.openboard.inputmethod.latin.touchinputconsumer.GestureConsumer;
|
|||
import org.dslul.openboard.inputmethod.latin.utils.ApplicationUtils;
|
||||
import org.dslul.openboard.inputmethod.latin.utils.DeviceProtectedUtils;
|
||||
import org.dslul.openboard.inputmethod.latin.utils.DialogUtils;
|
||||
import org.dslul.openboard.inputmethod.latin.utils.InputMethodPickerKt;
|
||||
import org.dslul.openboard.inputmethod.latin.utils.IntentUtils;
|
||||
import org.dslul.openboard.inputmethod.latin.utils.JniUtils;
|
||||
import org.dslul.openboard.inputmethod.latin.utils.LeakGuardHandlerWrapper;
|
||||
|
@ -578,7 +581,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
|
|||
}
|
||||
}
|
||||
|
||||
static final class SubtypeState {
|
||||
final class SubtypeState {
|
||||
private InputMethodSubtype mLastActiveSubtype;
|
||||
private boolean mCurrentSubtypeHasBeenUsed;
|
||||
|
||||
|
@ -586,9 +589,8 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
|
|||
mCurrentSubtypeHasBeenUsed = true;
|
||||
}
|
||||
|
||||
public void switchSubtype(final IBinder token, final RichInputMethodManager richImm) {
|
||||
final InputMethodSubtype currentSubtype = richImm.getInputMethodManager()
|
||||
.getCurrentInputMethodSubtype();
|
||||
public void switchSubtype(final RichInputMethodManager richImm) {
|
||||
final InputMethodSubtype currentSubtype = richImm.getCurrentSubtype().getRawSubtype();
|
||||
final InputMethodSubtype lastActiveSubtype = mLastActiveSubtype;
|
||||
final boolean currentSubtypeHasBeenUsed = mCurrentSubtypeHasBeenUsed;
|
||||
if (currentSubtypeHasBeenUsed) {
|
||||
|
@ -598,10 +600,11 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
|
|||
if (currentSubtypeHasBeenUsed
|
||||
&& richImm.checkIfSubtypeBelongsToThisImeAndEnabled(lastActiveSubtype)
|
||||
&& !currentSubtype.equals(lastActiveSubtype)) {
|
||||
richImm.setInputMethodAndSubtype(token, lastActiveSubtype);
|
||||
switchToSubtype(lastActiveSubtype);
|
||||
return;
|
||||
}
|
||||
richImm.switchToNextInputMethod(token, true /* onlyCurrentIme */);
|
||||
// switchSubtype is called only for internal switching, so let's just switch to the next subtype
|
||||
switchToSubtype(richImm.getNextSubtypeInThisIme(true));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -624,6 +627,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
|
|||
public void onCreate() {
|
||||
Settings.init(this);
|
||||
DebugFlags.init(DeviceProtectedUtils.getSharedPreferences(this));
|
||||
SubtypeSettingsKt.init(this);
|
||||
RichInputMethodManager.init(this);
|
||||
mRichImm = RichInputMethodManager.getInstance();
|
||||
AudioAndHapticFeedbackManager.init(this);
|
||||
|
@ -802,6 +806,7 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
|
|||
@Override
|
||||
public void onConfigurationChanged(final Configuration conf) {
|
||||
SettingsValues settingsValues = mSettings.getCurrent();
|
||||
SubtypeSettingsKt.reloadSystemLocales(this);
|
||||
if (settingsValues.mDisplayOrientation != conf.orientation) {
|
||||
mHandler.startOrientationChanging();
|
||||
mInputLogic.onOrientationChange(mSettings.getCurrent());
|
||||
|
@ -918,6 +923,11 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
|
|||
loadKeyboard();
|
||||
}
|
||||
|
||||
/** alias to onCurrentInputMethodSubtypeChanged with a better name, as it's also used for internal switching */
|
||||
public void switchToSubtype(final InputMethodSubtype subtype) {
|
||||
onCurrentInputMethodSubtypeChanged(subtype);
|
||||
}
|
||||
|
||||
void onStartInputInternal(final EditorInfo editorInfo, final boolean restarting) {
|
||||
super.onStartInput(editorInfo, restarting);
|
||||
|
||||
|
@ -1425,8 +1435,8 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
|
|||
switch (requestCode) {
|
||||
case Constants.CUSTOM_CODE_SHOW_INPUT_METHOD_PICKER:
|
||||
if (mRichImm.hasMultipleEnabledIMEsOrSubtypes(true /* include aux subtypes */)) {
|
||||
mRichImm.getInputMethodManager().showInputMethodPicker();
|
||||
return true;
|
||||
InputMethodPickerKt.showInputMethodPicker(this, mRichImm, mKeyboardSwitcher.getMainKeyboardView().getWindowToken());
|
||||
return true; // todo: don't show and return if dialog already shown? but how can this happen?
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
@ -1478,19 +1488,42 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
|
|||
return mOptionsDialog != null && mOptionsDialog.isShowing();
|
||||
}
|
||||
|
||||
// todo: remove, this is really not necessary
|
||||
public void switchLanguage(final InputMethodSubtype subtype) {
|
||||
final IBinder token = getWindow().getWindow().getAttributes().token;
|
||||
mRichImm.setInputMethodAndSubtype(token, subtype);
|
||||
switchToSubtype(subtype);
|
||||
}
|
||||
|
||||
// TODO: Revise the language switch key behavior to make it much smarter and more reasonable.
|
||||
public void switchToNextSubtype() {
|
||||
final IBinder token = getWindow().getWindow().getAttributes().token;
|
||||
if (shouldSwitchToOtherInputMethods()) {
|
||||
mRichImm.switchToNextInputMethod(token, true /* onlyCurrentIme */);
|
||||
// todo: this is the old behavior, is this actually wanted?
|
||||
// maybe make the language switch key more configurable
|
||||
boolean moreThanOneSubtype = mRichImm.getMyEnabledInputMethodSubtypeList(false).size() > 1;
|
||||
final InputMethodSubtype nextSubtype = mRichImm.getNextSubtypeInThisIme(moreThanOneSubtype);
|
||||
if (nextSubtype != null) {
|
||||
switchToSubtype(nextSubtype);
|
||||
} else {
|
||||
// we are at end of the internal subtype list, switch to next input method
|
||||
// (for now) don't care about which input method and subtype exactly, let the system choose
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
|
||||
switchToNextInputMethod(false);
|
||||
} else {
|
||||
final IBinder token = getWindow().getWindow().getAttributes().token;
|
||||
mRichImm.getInputMethodManager().switchToNextInputMethod(token, false);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
mSubtypeState.switchSubtype(token, mRichImm);
|
||||
mSubtypeState.switchSubtype(mRichImm);
|
||||
}
|
||||
|
||||
public void switchInputMethodAndSubtype(final InputMethodInfo imi, final InputMethodSubtype subtype) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
|
||||
switchInputMethod(imi.getId(), subtype);
|
||||
} else {
|
||||
final IBinder token = getWindow().getWindow().getAttributes().token;
|
||||
mRichImm.getInputMethodManager().setInputMethodAndSubtype(token, imi.getId(), subtype);
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: Instead of checking for alphabetic keyboard here, separate keycodes for
|
||||
|
@ -2038,15 +2071,16 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
|
|||
}
|
||||
|
||||
public boolean shouldSwitchToOtherInputMethods() {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P)
|
||||
return shouldOfferSwitchingToNextInputMethod();
|
||||
// TODO: Revisit here to reorganize the settings. Probably we can/should use different
|
||||
// strategy once the implementation of
|
||||
// {@link InputMethodManager#shouldOfferSwitchingToNextInputMethod} is defined well.
|
||||
final boolean fallbackValue = mSettings.getCurrent().mIncludesOtherImesInLanguageSwitchList;
|
||||
final IBinder token = getWindow().getWindow().getAttributes().token;
|
||||
if (token == null) {
|
||||
return fallbackValue;
|
||||
return mSettings.getCurrent().mIncludesOtherImesInLanguageSwitchList;
|
||||
}
|
||||
return mRichImm.shouldOfferSwitchingToNextInputMethod(token, fallbackValue);
|
||||
return mRichImm.getInputMethodManager().shouldOfferSwitchingToNextInputMethod(token);
|
||||
}
|
||||
|
||||
public boolean shouldShowLanguageSwitchKey() {
|
||||
|
|
|
@ -31,6 +31,7 @@ import org.dslul.openboard.inputmethod.annotations.UsedForTesting;
|
|||
import org.dslul.openboard.inputmethod.compat.InputMethodManagerCompatWrapper;
|
||||
import org.dslul.openboard.inputmethod.compat.InputMethodSubtypeCompatUtils;
|
||||
import org.dslul.openboard.inputmethod.latin.settings.Settings;
|
||||
import org.dslul.openboard.inputmethod.latin.settings.SubtypeSettingsKt;
|
||||
import org.dslul.openboard.inputmethod.latin.utils.AdditionalSubtypeUtils;
|
||||
import org.dslul.openboard.inputmethod.latin.utils.DeviceProtectedUtils;
|
||||
import org.dslul.openboard.inputmethod.latin.utils.LanguageOnSpacebarUtils;
|
||||
|
@ -100,17 +101,16 @@ public class RichInputMethodManager {
|
|||
mInputMethodInfoCache = new InputMethodInfoCache(
|
||||
mImmWrapper.mImm, context.getPackageName());
|
||||
|
||||
// Initialize additional subtypes.
|
||||
// Initialize subtype utils.
|
||||
SubtypeLocaleUtils.init(context);
|
||||
final InputMethodSubtype[] additionalSubtypes = getAdditionalSubtypes();
|
||||
mImmWrapper.mImm.setAdditionalInputMethodSubtypes(
|
||||
getInputMethodIdOfThisIme(), additionalSubtypes);
|
||||
|
||||
// Initialize the current input method subtype and the shortcut IME.
|
||||
refreshSubtypeCaches();
|
||||
}
|
||||
|
||||
public InputMethodSubtype[] getAdditionalSubtypes() {
|
||||
public InputMethodSubtype[] getAdditionalSubtypes() { // todo: can be removed
|
||||
// todo: this should read the enabled subtypes setting
|
||||
// either use or remove the default additional subtypes
|
||||
final SharedPreferences prefs = DeviceProtectedUtils.getSharedPreferences(mContext);
|
||||
final String prefAdditionalSubtypes = Settings.readPrefAdditionalSubtypes(
|
||||
prefs, mContext.getResources());
|
||||
|
@ -129,7 +129,8 @@ public class RichInputMethodManager {
|
|||
}
|
||||
|
||||
public boolean switchToNextInputMethod(final IBinder token, final boolean onlyCurrentIme) {
|
||||
if (mImmWrapper.switchToNextInputMethod(token, onlyCurrentIme)) {
|
||||
// todo: don't want this any more, and actually mImmWrapper.switchToNextInputMethod can be removed
|
||||
if (false && mImmWrapper.switchToNextInputMethod(token, onlyCurrentIme)) {
|
||||
return true;
|
||||
}
|
||||
// Was not able to call {@link InputMethodManager#switchToNextInputMethodIBinder,boolean)}
|
||||
|
@ -140,10 +141,27 @@ public class RichInputMethodManager {
|
|||
return switchToNextInputMethodAndSubtype(token);
|
||||
}
|
||||
|
||||
public @Nullable InputMethodSubtype getNextSubtypeInThisIme(final boolean onlyCurrentIme) {
|
||||
final InputMethodSubtype currentSubtype = getCurrentSubtype().getRawSubtype();
|
||||
final List<InputMethodSubtype> enabledSubtypes = getMyEnabledInputMethodSubtypeList(true);
|
||||
final int currentIndex = getSubtypeIndexInList(currentSubtype, enabledSubtypes);
|
||||
if (currentIndex == INDEX_NOT_FOUND) {
|
||||
Log.w(TAG, "Can't find current subtype in enabled subtypes: subtype="
|
||||
+ SubtypeLocaleUtils.getSubtypeNameForLogging(currentSubtype));
|
||||
if (onlyCurrentIme) return enabledSubtypes.get(0); // just return first enabled subtype
|
||||
else return null;
|
||||
}
|
||||
final int nextIndex = (currentIndex + 1) % enabledSubtypes.size();
|
||||
if (nextIndex <= currentIndex && !onlyCurrentIme) {
|
||||
// The current subtype is the last or only enabled one and it needs to switch to next IME.
|
||||
return null;
|
||||
}
|
||||
return enabledSubtypes.get(nextIndex);
|
||||
}
|
||||
|
||||
private boolean switchToNextInputSubtypeInThisIme(final IBinder token,
|
||||
final boolean onlyCurrentIme) {
|
||||
final InputMethodManager imm = mImmWrapper.mImm;
|
||||
final InputMethodSubtype currentSubtype = imm.getCurrentInputMethodSubtype();
|
||||
final InputMethodSubtype currentSubtype = getCurrentSubtype().getRawSubtype();
|
||||
final List<InputMethodSubtype> enabledSubtypes = getMyEnabledInputMethodSubtypeList(
|
||||
true /* allowsImplicitlySelectedSubtypes */);
|
||||
final int currentIndex = getSubtypeIndexInList(currentSubtype, enabledSubtypes);
|
||||
|
@ -159,7 +177,7 @@ public class RichInputMethodManager {
|
|||
return false;
|
||||
}
|
||||
final InputMethodSubtype nextSubtype = enabledSubtypes.get(nextIndex);
|
||||
setInputMethodAndSubtype(token, nextSubtype);
|
||||
setInputMethodAndSubtype(token, nextSubtype); // todo: not working any more, but switchToNextInputSubtypeInThisIme isn't called anyway...
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -266,8 +284,14 @@ public class RichInputMethodManager {
|
|||
if (cachedList != null) {
|
||||
return cachedList;
|
||||
}
|
||||
final List<InputMethodSubtype> result = mImm.getEnabledInputMethodSubtypeList(
|
||||
imi, allowsImplicitlySelectedSubtypes);
|
||||
final List<InputMethodSubtype> result;
|
||||
if (imi == getInputMethodOfThisIme()) {
|
||||
// allowsImplicitlySelectedSubtypes means system should choose if nothing is enabled,
|
||||
// use it to fall back to system locales or en_US to avoid returning an empty list
|
||||
result = SubtypeSettingsKt.getEnabledSubtypes(DeviceProtectedUtils.getSharedPreferences(sInstance.mContext), allowsImplicitlySelectedSubtypes);
|
||||
} else {
|
||||
result = mImm.getEnabledInputMethodSubtypeList(imi, allowsImplicitlySelectedSubtypes);
|
||||
}
|
||||
cache.put(imi, result);
|
||||
return result;
|
||||
}
|
||||
|
@ -309,6 +333,7 @@ public class RichInputMethodManager {
|
|||
|
||||
private static int getSubtypeIndexInList(final InputMethodSubtype subtype,
|
||||
final List<InputMethodSubtype> subtypes) {
|
||||
// todo: why not simply subtypes.indexOf(subtype)? should do exactly the same, even return the same value -1 if not found
|
||||
final int count = subtypes.size();
|
||||
for (int index = 0; index < count; index++) {
|
||||
final InputMethodSubtype ims = subtypes.get(index);
|
||||
|
@ -470,10 +495,13 @@ public class RichInputMethodManager {
|
|||
}
|
||||
|
||||
public void setInputMethodAndSubtype(final IBinder token, final InputMethodSubtype subtype) {
|
||||
mImmWrapper.mImm.setInputMethodAndSubtype(
|
||||
token, getInputMethodIdOfThisIme(), subtype);
|
||||
// todo: mImm stuff doesn't work any more, need sth like notifySubtypeChanged to actually trigger a reload
|
||||
// try calling this instead, probably best before loading keyboard
|
||||
// essentially it should do that update thing?
|
||||
onSubtypeChanged(subtype);
|
||||
}
|
||||
|
||||
// todo: remove together with additional subtype settings
|
||||
public void setAdditionalInputMethodSubtypes(final InputMethodSubtype[] subtypes) {
|
||||
mImmWrapper.mImm.setAdditionalInputMethodSubtypes(
|
||||
getInputMethodIdOfThisIme(), subtypes);
|
||||
|
@ -482,7 +510,7 @@ public class RichInputMethodManager {
|
|||
refreshSubtypeCaches();
|
||||
}
|
||||
|
||||
private List<InputMethodSubtype> getEnabledInputMethodSubtypeList(final InputMethodInfo imi,
|
||||
public List<InputMethodSubtype> getEnabledInputMethodSubtypeList(final InputMethodInfo imi,
|
||||
final boolean allowsImplicitlySelectedSubtypes) {
|
||||
return mInputMethodInfoCache.getEnabledInputMethodSubtypeList(
|
||||
imi, allowsImplicitlySelectedSubtypes);
|
||||
|
@ -490,10 +518,12 @@ public class RichInputMethodManager {
|
|||
|
||||
public void refreshSubtypeCaches() {
|
||||
mInputMethodInfoCache.clear();
|
||||
updateCurrentSubtype(mImmWrapper.mImm.getCurrentInputMethodSubtype());
|
||||
SharedPreferences prefs = DeviceProtectedUtils.getSharedPreferences(mContext);
|
||||
updateCurrentSubtype(SubtypeSettingsKt.getSelectedSubtype(prefs));
|
||||
updateShortcutIme();
|
||||
}
|
||||
|
||||
// todo: remove
|
||||
public boolean shouldOfferSwitchingToNextInputMethod(final IBinder binder,
|
||||
boolean defaultValue) {
|
||||
// Use the default value instead on Jelly Bean MR2 and previous where
|
||||
|
@ -505,6 +535,7 @@ public class RichInputMethodManager {
|
|||
return mImmWrapper.shouldOfferSwitchingToNextInputMethod(binder);
|
||||
}
|
||||
|
||||
// todo: remove?
|
||||
public boolean isSystemLocaleSameAsLocaleOfAllEnabledSubtypesOfEnabledImes() {
|
||||
final Locale systemLocale = mContext.getResources().getConfiguration().locale;
|
||||
final Set<InputMethodSubtype> enabledSubtypesOfEnabledImes = new HashSet<>();
|
||||
|
@ -530,10 +561,12 @@ public class RichInputMethodManager {
|
|||
return true;
|
||||
}
|
||||
|
||||
private void updateCurrentSubtype(@Nullable final InputMethodSubtype subtype) {
|
||||
private void updateCurrentSubtype(final InputMethodSubtype subtype) {
|
||||
SubtypeSettingsKt.setSelectedSubtype(DeviceProtectedUtils.getSharedPreferences(mContext), subtype);
|
||||
mCurrentRichInputMethodSubtype = RichInputMethodSubtype.getRichInputMethodSubtype(subtype);
|
||||
}
|
||||
|
||||
// todo: what is shortcutIme? the voice input? if yes, rename it and other things like mHasShortcutKey
|
||||
private void updateShortcutIme() {
|
||||
if (DEBUG) {
|
||||
Log.d(TAG, "Update shortcut IME from : "
|
||||
|
|
|
@ -26,7 +26,6 @@ import android.content.pm.PackageManager;
|
|||
import android.os.Process;
|
||||
import android.util.Log;
|
||||
import android.view.inputmethod.InputMethodManager;
|
||||
import android.view.inputmethod.InputMethodSubtype;
|
||||
|
||||
import org.dslul.openboard.inputmethod.keyboard.KeyboardLayoutSet;
|
||||
import org.dslul.openboard.inputmethod.latin.settings.Settings;
|
||||
|
@ -66,12 +65,6 @@ public final class SystemBroadcastReceiver extends BroadcastReceiver {
|
|||
final String intentAction = intent.getAction();
|
||||
if (Intent.ACTION_MY_PACKAGE_REPLACED.equals(intentAction)) {
|
||||
Log.i(TAG, "Package has been replaced: " + context.getPackageName());
|
||||
// Need to restore additional subtypes because system always clears additional
|
||||
// subtypes when the package is replaced.
|
||||
RichInputMethodManager.init(context);
|
||||
final RichInputMethodManager richImm = RichInputMethodManager.getInstance();
|
||||
final InputMethodSubtype[] additionalSubtypes = richImm.getAdditionalSubtypes();
|
||||
richImm.setAdditionalInputMethodSubtypes(additionalSubtypes);
|
||||
toggleAppIcon(context);
|
||||
} else if (Intent.ACTION_BOOT_COMPLETED.equals(intentAction)) {
|
||||
Log.i(TAG, "Boot has been completed");
|
||||
|
|
|
@ -101,8 +101,6 @@ class AppearanceSettingsFragment : SubScreenFragment(), Preference.OnPreferenceC
|
|||
super.onResume()
|
||||
updateThemePreferencesState()
|
||||
updateAfterPreferenceChanged()
|
||||
CustomInputStyleSettingsFragment.updateCustomInputStylesSummary(
|
||||
findPreference(Settings.PREF_CUSTOM_INPUT_STYLES))
|
||||
}
|
||||
|
||||
override fun onPause() {
|
||||
|
|
|
@ -29,6 +29,7 @@ import java.io.File
|
|||
import java.io.IOException
|
||||
import java.util.*
|
||||
|
||||
@Suppress("deprecation")
|
||||
class DictionarySettingsFragment : SubScreenFragment() {
|
||||
|
||||
// dict for which dialog is currently open (if any)
|
||||
|
@ -348,7 +349,7 @@ class DictionarySettingsFragment : SubScreenFragment() {
|
|||
private const val DICTIONARY_REQUEST_CODE = 96834
|
||||
private const val DICTIONARY_URL =
|
||||
"https://codeberg.org/Helium314/aosp-dictionaries"
|
||||
private const val USER_DICTIONARY_SUFFIX = "user.dict"
|
||||
const val USER_DICTIONARY_SUFFIX = "user.dict"
|
||||
|
||||
private const val DICT_INTERNAL_AND_USER = 2
|
||||
private const val DICT_INTERNAL_ONLY = 1
|
||||
|
|
|
@ -0,0 +1,146 @@
|
|||
package org.dslul.openboard.inputmethod.latin.settings
|
||||
|
||||
import android.content.Context
|
||||
import android.graphics.Rect
|
||||
import android.preference.Preference
|
||||
import android.util.AttributeSet
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.widget.*
|
||||
import androidx.core.view.doOnLayout
|
||||
import androidx.core.view.isGone
|
||||
import androidx.core.view.isVisible
|
||||
import androidx.core.widget.doAfterTextChanged
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import org.dslul.openboard.inputmethod.latin.R
|
||||
import org.dslul.openboard.inputmethod.latin.utils.*
|
||||
|
||||
class LanguageFilterListPreference(context: Context, attrs: AttributeSet) : Preference(context, attrs) {
|
||||
|
||||
private var preferenceView: View? = null
|
||||
private val adapter = LanguageAdapter(emptyList(), context)
|
||||
private val sortedSubtypes = mutableListOf<MutableList<SubtypeInfo>>()
|
||||
|
||||
fun setSettingsFragment(newFragment: LanguageSettingsFragment?) {
|
||||
adapter.fragment = newFragment
|
||||
}
|
||||
|
||||
override fun onBindView(view: View?) {
|
||||
super.onBindView(view)
|
||||
preferenceView = view
|
||||
preferenceView?.findViewById<RecyclerView>(R.id.language_list)?.adapter = adapter
|
||||
val searchField = preferenceView?.findViewById<EditText>(R.id.search_field)!!
|
||||
searchField.doAfterTextChanged { text ->
|
||||
adapter.list = sortedSubtypes.filter { it.first().displayName.startsWith(text.toString(), ignoreCase = true) }
|
||||
}
|
||||
view?.doOnLayout {
|
||||
// set correct height for recycler view, so there is no scrolling of the outside view happening
|
||||
// not sure how, but probably this can be achieved in xml...
|
||||
val windowFrame = Rect()
|
||||
it.getWindowVisibleDisplayFrame(windowFrame) // rect the app has, we want the bottom (above screen bottom/navbar/keyboard)
|
||||
val globalRect = Rect()
|
||||
it.getGlobalVisibleRect(globalRect) // rect the view takes, we want the top (below the system language preference)
|
||||
val recycler = it.findViewById<RecyclerView>(R.id.language_list)
|
||||
|
||||
val newHeight = windowFrame.bottom - globalRect.top - it.findViewById<View>(R.id.search_container).height
|
||||
recycler.layoutParams = recycler.layoutParams.apply { height = newHeight }
|
||||
}
|
||||
}
|
||||
|
||||
fun setLanguages(list: Collection<MutableList<SubtypeInfo>>, disableSwitches: Boolean) {
|
||||
sortedSubtypes.clear()
|
||||
sortedSubtypes.addAll(list)
|
||||
adapter.disableSwitches = disableSwitches
|
||||
adapter.list = sortedSubtypes
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class LanguageAdapter(list: List<MutableList<SubtypeInfo>> = listOf(), context: Context) :
|
||||
RecyclerView.Adapter<LanguageAdapter.ViewHolder>() {
|
||||
var disableSwitches = false
|
||||
private val prefs = DeviceProtectedUtils.getSharedPreferences(context)
|
||||
var fragment: LanguageSettingsFragment? = null
|
||||
|
||||
var list: List<MutableList<SubtypeInfo>> = list
|
||||
set(value) {
|
||||
field = value
|
||||
notifyDataSetChanged()
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
|
||||
holder.onBind(list[position])
|
||||
}
|
||||
|
||||
override fun getItemCount() = list.size
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): LanguageAdapter.ViewHolder {
|
||||
val v = LayoutInflater.from(parent.context).inflate(R.layout.language_list_item, parent, false)
|
||||
return ViewHolder(v)
|
||||
}
|
||||
|
||||
inner class ViewHolder(val view: View) : RecyclerView.ViewHolder(view) {
|
||||
|
||||
fun onBind(infos: MutableList<SubtypeInfo>) {
|
||||
fun setupDetailsTextAndSwitch() {
|
||||
// this is unrelated -> rename it
|
||||
view.findViewById<TextView>(R.id.language_details).apply {
|
||||
// input styles if more than one in infos
|
||||
val sb = StringBuilder()
|
||||
if (infos.size > 1) {
|
||||
sb.append(infos.joinToString(", ") {// separator ok? because for some languages it might not be...
|
||||
SubtypeLocaleUtils.getKeyboardLayoutSetDisplayName(it.subtype)
|
||||
?: SubtypeLocaleUtils.getSubtypeDisplayNameInSystemLocale(it.subtype)
|
||||
})
|
||||
}
|
||||
val secondaryLocales = Settings.getSecondaryLocales(prefs, infos.first().subtype.locale)
|
||||
if (secondaryLocales.isNotEmpty()) {
|
||||
if (sb.isNotEmpty())
|
||||
sb.append("\n")
|
||||
sb.append(Settings.getSecondaryLocales(prefs, infos.first().subtype.locale)
|
||||
.joinToString(", ") {
|
||||
it.getDisplayName(context.resources.configuration.locale)
|
||||
})
|
||||
}
|
||||
text = sb.toString()
|
||||
if (text.isBlank()) isGone = true
|
||||
else isVisible = true
|
||||
}
|
||||
|
||||
view.findViewById<Switch>(R.id.language_switch).apply {
|
||||
isEnabled = !disableSwitches && infos.size == 1
|
||||
// take care: isChecked changes if the language is scrolled out of view and comes back!
|
||||
// disable the change listener when setting the checked status on scroll
|
||||
// so it's only triggered on user interactions
|
||||
setOnCheckedChangeListener(null)
|
||||
isChecked = disableSwitches || infos.any { it.isEnabled }
|
||||
setOnCheckedChangeListener { _, b ->
|
||||
if (b) {
|
||||
if (infos.size == 1) {
|
||||
addEnabledSubtype(prefs, infos.first().subtype)
|
||||
infos.single().isEnabled = true
|
||||
} else {
|
||||
LanguageSettingsDialog(view.context, infos, fragment, disableSwitches, { setupDetailsTextAndSwitch() }).show()
|
||||
}
|
||||
} else {
|
||||
if (infos.size == 1) {
|
||||
removeEnabledSubtype(prefs, infos.first().subtype)
|
||||
infos.single().isEnabled = false
|
||||
} else {
|
||||
LanguageSettingsDialog(view.context, infos, fragment, disableSwitches, { setupDetailsTextAndSwitch() }).show()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
view.findViewById<TextView>(R.id.language_name).text = infos.first().displayName
|
||||
view.findViewById<LinearLayout>(R.id.language_text).setOnClickListener {
|
||||
LanguageSettingsDialog(view.context, infos, fragment, disableSwitches, { setupDetailsTextAndSwitch() }).show()
|
||||
}
|
||||
setupDetailsTextAndSwitch()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,401 @@
|
|||
package org.dslul.openboard.inputmethod.latin.settings
|
||||
|
||||
import android.app.AlertDialog
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import android.text.Html
|
||||
import android.text.method.LinkMovementMethod
|
||||
import android.view.ContextThemeWrapper
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.widget.*
|
||||
import androidx.core.view.isGone
|
||||
import androidx.core.view.isVisible
|
||||
import org.dslul.openboard.inputmethod.dictionarypack.DictionaryPackConstants
|
||||
import org.dslul.openboard.inputmethod.latin.BinaryDictionaryGetter
|
||||
import org.dslul.openboard.inputmethod.latin.R
|
||||
import org.dslul.openboard.inputmethod.latin.common.FileUtils
|
||||
import org.dslul.openboard.inputmethod.latin.common.LocaleUtils
|
||||
import org.dslul.openboard.inputmethod.latin.makedict.DictionaryHeader
|
||||
import org.dslul.openboard.inputmethod.latin.utils.*
|
||||
import java.io.File
|
||||
import java.io.IOException
|
||||
import java.util.*
|
||||
import kotlin.collections.HashSet
|
||||
|
||||
@Suppress("deprecation")
|
||||
class LanguageSettingsDialog(
|
||||
context: Context,
|
||||
private val subtypes: MutableList<SubtypeInfo>,
|
||||
private val fragment: LanguageSettingsFragment?,
|
||||
private val disableSwitches: Boolean,
|
||||
private val onSubtypesChanged: () -> Unit
|
||||
) : AlertDialog(ContextThemeWrapper(context, R.style.platformDialogTheme)), LanguageSettingsFragment.Listener {
|
||||
private val context = ContextThemeWrapper(context, R.style.platformDialogTheme)
|
||||
private val prefs = DeviceProtectedUtils.getSharedPreferences(context)!!
|
||||
private val view = LayoutInflater.from(context).inflate(R.layout.locale_settings_dialog, null)
|
||||
private val mainLocaleString = subtypes.first().subtype.locale
|
||||
private val mainLocale = mainLocaleString.toLocale()
|
||||
private val cachedDictionaryFile by lazy { File(context.cacheDir.path + File.separator + "temp_dict") }
|
||||
|
||||
init {
|
||||
setTitle(subtypes.first().displayName)
|
||||
setView(ScrollView(context).apply { addView(view) })
|
||||
setButton(BUTTON_NEGATIVE, context.getString(R.string.dialog_close)) { _, _ ->
|
||||
dismiss()
|
||||
}
|
||||
|
||||
fillSubtypesView(view.findViewById(R.id.subtypes))
|
||||
fillSecondaryLocaleView(view.findViewById(R.id.secondary_languages))
|
||||
fillDictionariesView(view.findViewById(R.id.dictionaries))
|
||||
}
|
||||
|
||||
override fun onStart() {
|
||||
super.onStart()
|
||||
fragment?.setListener(this)
|
||||
}
|
||||
|
||||
override fun onStop() {
|
||||
super.onStop()
|
||||
fragment?.setListener(null)
|
||||
}
|
||||
|
||||
private fun fillSubtypesView(subtypesView: LinearLayout) {
|
||||
if (subtypes.any { it.subtype.isAsciiCapable }) { // currently can only add subtypes for latin keyboards
|
||||
subtypesView.findViewById<ImageView>(R.id.add_subtype).setOnClickListener {
|
||||
val layouts = context.resources.getStringArray(R.array.predefined_layouts)
|
||||
.filterNot { layoutName -> subtypes.any { SubtypeLocaleUtils.getKeyboardLayoutSetName(it.subtype) == layoutName } }
|
||||
val displayNames = layouts.map { SubtypeLocaleUtils.getKeyboardLayoutSetDisplayName(it) }
|
||||
Builder(context)
|
||||
.setTitle(R.string.keyboard_layout_set)
|
||||
.setItems(displayNames.toTypedArray()) { di, i ->
|
||||
di.dismiss()
|
||||
val newSubtype = AdditionalSubtypeUtils.createAsciiEmojiCapableAdditionalSubtype(mainLocaleString, layouts[i])
|
||||
val newSubtypeInfo = newSubtype.toSubtypeInfo(mainLocale, context.resources, true) // enabled by default, because why else add them
|
||||
addSubtypeToView(newSubtypeInfo, subtypesView)
|
||||
val oldAdditionalSubtypesString = Settings.readPrefAdditionalSubtypes(prefs, context.resources)
|
||||
val oldAdditionalSubtypes = AdditionalSubtypeUtils.createAdditionalSubtypesArray(oldAdditionalSubtypesString).toHashSet()
|
||||
val newAdditionalSubtypesString = AdditionalSubtypeUtils.createPrefSubtypes((oldAdditionalSubtypes + newSubtype).toTypedArray())
|
||||
Settings.writePrefAdditionalSubtypes(prefs, newAdditionalSubtypesString)
|
||||
addEnabledSubtype(prefs, newSubtype)
|
||||
subtypes.add(newSubtypeInfo)
|
||||
onSubtypesChanged()
|
||||
}
|
||||
.setNegativeButton(android.R.string.cancel, null)
|
||||
.show()
|
||||
}
|
||||
} else
|
||||
subtypesView.findViewById<View>(R.id.add_subtype).isGone = true
|
||||
|
||||
// add subtypes
|
||||
subtypes.sortedBy { it.displayName }.forEach {
|
||||
addSubtypeToView(it, subtypesView)
|
||||
}
|
||||
}
|
||||
|
||||
private fun addSubtypeToView(subtype: SubtypeInfo, subtypesView: LinearLayout) {
|
||||
val row = LayoutInflater.from(context).inflate(R.layout.language_list_item, listView)
|
||||
row.findViewById<TextView>(R.id.language_name).text =
|
||||
SubtypeLocaleUtils.getKeyboardLayoutSetDisplayName(subtype.subtype)
|
||||
?: SubtypeLocaleUtils.getSubtypeDisplayNameInSystemLocale(subtype.subtype)
|
||||
row.findViewById<View>(R.id.language_details).isGone = true
|
||||
row.findViewById<Switch>(R.id.language_switch).apply {
|
||||
isChecked = subtype.isEnabled
|
||||
isEnabled = !disableSwitches
|
||||
setOnCheckedChangeListener { _, b ->
|
||||
if (b)
|
||||
addEnabledSubtype(prefs, subtype.subtype)
|
||||
else
|
||||
removeEnabledSubtype(prefs, subtype.subtype)
|
||||
subtype.isEnabled = b
|
||||
onSubtypesChanged()
|
||||
}
|
||||
}
|
||||
if (isAdditionalSubtype(subtype.subtype)) {
|
||||
row.findViewById<Switch>(R.id.language_switch).isEnabled = true
|
||||
row.findViewById<ImageView>(R.id.delete_button).apply {
|
||||
isVisible = true
|
||||
setOnClickListener {
|
||||
// can be re-added easily, no need for confirmation dialog
|
||||
subtypesView.removeView(row)
|
||||
subtypes.remove(subtype)
|
||||
|
||||
val oldAdditionalSubtypesString = Settings.readPrefAdditionalSubtypes(prefs, context.resources)
|
||||
val oldAdditionalSubtypes = AdditionalSubtypeUtils.createAdditionalSubtypesArray(oldAdditionalSubtypesString)
|
||||
val newAdditionalSubtypes = oldAdditionalSubtypes.filter { it != subtype.subtype }
|
||||
val newAdditionalSubtypesString = AdditionalSubtypeUtils.createPrefSubtypes(newAdditionalSubtypes.toTypedArray())
|
||||
Settings.writePrefAdditionalSubtypes(prefs, newAdditionalSubtypesString)
|
||||
removeEnabledSubtype(prefs, subtype.subtype)
|
||||
onSubtypesChanged()
|
||||
}
|
||||
}
|
||||
}
|
||||
subtypesView.addView(row)
|
||||
}
|
||||
|
||||
private fun fillSecondaryLocaleView(secondaryLocalesView: LinearLayout) {
|
||||
// can only use multilingual typing if there is more than one dictionary available
|
||||
val availableSecondaryLocales = getAvailableDictionaryLocales(
|
||||
context,
|
||||
mainLocaleString,
|
||||
subtypes.first().subtype.isAsciiCapable
|
||||
)
|
||||
val selectedSecondaryLocales = Settings.getSecondaryLocales(prefs, mainLocaleString)
|
||||
selectedSecondaryLocales.forEach {
|
||||
addSecondaryLocaleView(it, secondaryLocalesView)
|
||||
}
|
||||
if (availableSecondaryLocales.isNotEmpty()) {
|
||||
secondaryLocalesView.findViewById<ImageView>(R.id.add_secondary_language).apply {
|
||||
isVisible = true
|
||||
setOnClickListener {
|
||||
val locales = (availableSecondaryLocales - Settings.getSecondaryLocales(prefs, mainLocaleString).map { it.toString() }).sorted()
|
||||
val localeNames = locales.map { it.toLocale().getDisplayName(context.resources.configuration.locale) }.toTypedArray()
|
||||
Builder(context)
|
||||
.setTitle(R.string.language_selection_title)
|
||||
.setItems(localeNames) { di, i ->
|
||||
val locale = locales[i]
|
||||
val localeStrings = Settings.getSecondaryLocales(prefs, mainLocaleString).map { it.toString() }
|
||||
Settings.setSecondaryLocales(prefs, mainLocaleString, localeStrings + locale)
|
||||
addSecondaryLocaleView(locale.toLocale(), secondaryLocalesView)
|
||||
di.dismiss()
|
||||
}
|
||||
.show()
|
||||
}
|
||||
}
|
||||
} else if (selectedSecondaryLocales.isEmpty())
|
||||
secondaryLocalesView.isGone = true
|
||||
}
|
||||
|
||||
private fun addSecondaryLocaleView(locale: Locale, secondaryLocalesView: LinearLayout) {
|
||||
val row = LayoutInflater.from(context).inflate(R.layout.language_list_item, listView)
|
||||
row.findViewById<Switch>(R.id.language_switch).isGone = true
|
||||
row.findViewById<Switch>(R.id.language_details).isGone = true
|
||||
row.findViewById<TextView>(R.id.language_name).text = locale.displayName
|
||||
row.findViewById<ImageView>(R.id.delete_button).apply {
|
||||
isVisible = true
|
||||
setOnClickListener {
|
||||
val localeStrings = Settings.getSecondaryLocales(prefs, mainLocaleString).map { it.toString() }
|
||||
Settings.setSecondaryLocales(prefs, mainLocaleString, localeStrings - locale.toString())
|
||||
secondaryLocalesView.removeView(row)
|
||||
}
|
||||
}
|
||||
secondaryLocalesView.addView(row)
|
||||
}
|
||||
|
||||
private fun fillDictionariesView(dictionariesView: LinearLayout) {
|
||||
dictionariesView.findViewById<ImageView>(R.id.add_dictionary).setOnClickListener {
|
||||
val link = "<a href='$DICTIONARY_URL'>" + context.getString(R.string.dictionary_link_text) + "</a>"
|
||||
val message = Html.fromHtml(context.getString(R.string.add_dictionary, link))
|
||||
val dialog = Builder(context)
|
||||
.setTitle(R.string.add_new_dictionary_title)
|
||||
.setMessage(message)
|
||||
.setPositiveButton(R.string.user_dict_settings_add_menu_title) { _, _ -> fragment?.requestDictionary() }
|
||||
.setNegativeButton(android.R.string.cancel, null)
|
||||
.create()
|
||||
dialog.show()
|
||||
(dialog.findViewById<View>(android.R.id.message) as? TextView)?.movementMethod = LinkMovementMethod.getInstance()
|
||||
}
|
||||
val (userDicts, hasInternalDict) = getUserAndInternalDictionaries(context, mainLocaleString)
|
||||
if (hasInternalDict) {
|
||||
dictionariesView.addView(TextView(context, null, R.style.PreferenceCategoryTitleText).apply {
|
||||
setText(R.string.internal_dictionary_summary)
|
||||
textSize *= 0.8f
|
||||
setPadding((context.resources.displayMetrics.scaledDensity * 16).toInt(), 0, 0, 0)
|
||||
isEnabled = userDicts.none { it.name == "${DictionaryInfoUtils.MAIN_DICT_PREFIX}${DictionarySettingsFragment.USER_DICTIONARY_SUFFIX}" }
|
||||
})
|
||||
}
|
||||
userDicts.sorted().forEach {
|
||||
addDictionaryToView(it, dictionariesView)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onNewDictionary(uri: Uri?) {
|
||||
if (uri == null)
|
||||
return onDictionaryLoadingError(R.string.dictionary_load_error)
|
||||
|
||||
cachedDictionaryFile.delete()
|
||||
try {
|
||||
FileUtils.copyStreamToNewFile(
|
||||
context.contentResolver.openInputStream(uri),
|
||||
cachedDictionaryFile
|
||||
)
|
||||
} catch (e: IOException) {
|
||||
return onDictionaryLoadingError(R.string.dictionary_load_error)
|
||||
}
|
||||
val newHeader = DictionaryInfoUtils.getDictionaryFileHeaderOrNull(cachedDictionaryFile, 0, cachedDictionaryFile.length())
|
||||
?: return onDictionaryLoadingError(R.string.dictionary_file_error)
|
||||
|
||||
val locale = newHeader.mLocaleString.toLocale()
|
||||
// ScriptUtils.getScriptFromSpellCheckerLocale may return latin when it should not,
|
||||
// e.g. for Persian or Chinese. But at least fail when dictionary certainly is incompatible
|
||||
if (ScriptUtils.getScriptFromSpellCheckerLocale(locale) != ScriptUtils.getScriptFromSpellCheckerLocale(mainLocale))
|
||||
return onDictionaryLoadingError(R.string.dictionary_file_wrong_script)
|
||||
|
||||
if (locale != mainLocale) {
|
||||
val message = context.resources.getString(
|
||||
R.string.dictionary_file_wrong_locale,
|
||||
locale.getDisplayName(context.resources.configuration.locale),
|
||||
mainLocale.getDisplayName(context.resources.configuration.locale)
|
||||
)
|
||||
Builder(context)
|
||||
.setMessage(message)
|
||||
.setNegativeButton(android.R.string.cancel) { _, _ -> cachedDictionaryFile.delete() }
|
||||
.setPositiveButton(R.string.dictionary_file_wrong_locale_ok) { _, _ ->
|
||||
addDictAndAskToReplace(newHeader)
|
||||
}
|
||||
.show()
|
||||
return
|
||||
}
|
||||
addDictAndAskToReplace(newHeader)
|
||||
}
|
||||
|
||||
private fun addDictAndAskToReplace(header: DictionaryHeader) {
|
||||
val dictionaryType = header.mIdString.substringBefore(":")
|
||||
val dictFilename = DictionaryInfoUtils.getCacheDirectoryForLocale(mainLocaleString, context) +
|
||||
File.separator + dictionaryType + "_" + DictionarySettingsFragment.USER_DICTIONARY_SUFFIX
|
||||
val dictFile = File(dictFilename)
|
||||
|
||||
fun moveDict(replaced: Boolean) {
|
||||
if (!cachedDictionaryFile.renameTo(dictFile)) {
|
||||
return onDictionaryLoadingError(R.string.dictionary_load_error)
|
||||
}
|
||||
if (dictionaryType == DictionaryInfoUtils.DEFAULT_MAIN_DICT) {
|
||||
// replaced main dict, remove the one created from internal data
|
||||
val internalMainDictFilename = DictionaryInfoUtils.getCacheDirectoryForLocale(this.toString(), context) +
|
||||
File.separator + DictionaryInfoUtils.getMainDictFilename(this.toString())
|
||||
File(internalMainDictFilename).delete()
|
||||
}
|
||||
val newDictBroadcast = Intent(DictionaryPackConstants.NEW_DICTIONARY_INTENT_ACTION)
|
||||
fragment?.activity?.sendBroadcast(newDictBroadcast)
|
||||
if (!replaced)
|
||||
addDictionaryToView(dictFile, view.findViewById(R.id.dictionaries))
|
||||
}
|
||||
|
||||
if (!dictFile.exists()) {
|
||||
return moveDict(false)
|
||||
}
|
||||
confirmDialog(context, context.getString(R.string.replace_dictionary_message2, dictionaryType), context.getString(
|
||||
R.string.replace_dictionary)) {
|
||||
moveDict(true)
|
||||
}
|
||||
}
|
||||
|
||||
private fun onDictionaryLoadingError(messageId: Int) = onDictionaryLoadingError(context.getString(messageId))
|
||||
|
||||
private fun onDictionaryLoadingError(message: String) {
|
||||
cachedDictionaryFile.delete()
|
||||
Toast.makeText(context, message, Toast.LENGTH_LONG).show()
|
||||
}
|
||||
|
||||
private fun addDictionaryToView(dictFile: File, dictionariesView: LinearLayout) {
|
||||
val dictType = dictFile.name.substringBefore("_${DictionarySettingsFragment.USER_DICTIONARY_SUFFIX}")
|
||||
val row = LayoutInflater.from(context).inflate(R.layout.language_list_item, listView)
|
||||
row.findViewById<TextView>(R.id.language_name).text = dictType
|
||||
row.findViewById<TextView>(R.id.language_details).apply {
|
||||
val header = DictionaryInfoUtils.getDictionaryFileHeaderOrNull(dictFile, 0, dictFile.length())
|
||||
if (header?.description == null) {
|
||||
isGone = true
|
||||
} else {
|
||||
// what would potentially be interesting? locale? description? version? timestamp?
|
||||
text = header.description
|
||||
}
|
||||
}
|
||||
row.findViewById<Switch>(R.id.language_switch).isGone = true
|
||||
row.findViewById<ImageView>(R.id.delete_button).apply {
|
||||
isVisible = true
|
||||
setOnClickListener {
|
||||
confirmDialog(context, context.getString(R.string.remove_dictionary_message2, dictType), context.getString(
|
||||
R.string.delete_dict)) {
|
||||
val parent = dictFile.parentFile
|
||||
dictFile.delete()
|
||||
if (parent?.list()?.isEmpty() == true)
|
||||
parent.delete()
|
||||
val newDictBroadcast = Intent(DictionaryPackConstants.NEW_DICTIONARY_INTENT_ACTION)
|
||||
fragment?.activity?.sendBroadcast(newDictBroadcast)
|
||||
dictionariesView.removeView(row)
|
||||
}
|
||||
}
|
||||
}
|
||||
dictionariesView.addView(row)
|
||||
}
|
||||
}
|
||||
|
||||
fun confirmDialog(context: Context, message: String, confirmButton: String, onConfirmed: (() -> Unit)) {
|
||||
AlertDialog.Builder(context)
|
||||
.setMessage(message)
|
||||
.setNegativeButton(android.R.string.cancel, null)
|
||||
.setPositiveButton(confirmButton) { _, _ -> onConfirmed() }
|
||||
.show()
|
||||
}
|
||||
|
||||
/** @return list of user dictionary files and whether an internal dictionary exists */
|
||||
fun getUserAndInternalDictionaries(context: Context, locale: String): Pair<List<File>, Boolean> {
|
||||
val localeString = locale.lowercase() // internal files and folders always use lowercase
|
||||
val userDicts = mutableListOf<File>()
|
||||
var hasInternalDict = false
|
||||
val userLocaleDir = File(DictionaryInfoUtils.getWordListCacheDirectory(context), localeString)
|
||||
if (userLocaleDir.exists() && userLocaleDir.isDirectory) {
|
||||
userLocaleDir.listFiles()?.forEach {
|
||||
if (it.name.endsWith(DictionarySettingsFragment.USER_DICTIONARY_SUFFIX))
|
||||
userDicts.add(it)
|
||||
else if (it.name.startsWith(DictionaryInfoUtils.MAIN_DICT_PREFIX))
|
||||
hasInternalDict = true
|
||||
}
|
||||
}
|
||||
if (hasInternalDict)
|
||||
return userDicts to true
|
||||
BinaryDictionaryGetter.getAssetsDictionaryList(context)?.forEach { dictFile ->
|
||||
BinaryDictionaryGetter.extractLocaleFromAssetsDictionaryFile(dictFile)?.let {
|
||||
if (it == localeString)
|
||||
return userDicts to true
|
||||
}
|
||||
}
|
||||
return userDicts to false
|
||||
}
|
||||
|
||||
// get locales with same script as main locale, but different language
|
||||
private fun getAvailableDictionaryLocales(context: Context, mainLocaleString: String, asciiCapable: Boolean): Set<String> {
|
||||
val mainLocale = mainLocaleString.toLocale()
|
||||
val locales = HashSet<String>()
|
||||
val mainScript = if (asciiCapable) ScriptUtils.SCRIPT_LATIN
|
||||
else ScriptUtils.getScriptFromSpellCheckerLocale(mainLocale)
|
||||
// ScriptUtils.getScriptFromSpellCheckerLocale may return latin when it should not
|
||||
// e.g. for persian or chinese
|
||||
// workaround: don't allow secondary locales for these locales
|
||||
if (!asciiCapable && mainScript == ScriptUtils.SCRIPT_LATIN) return locales
|
||||
|
||||
// get cached dictionaries: extracted or user-added dictionaries
|
||||
val cachedDirectoryList = DictionaryInfoUtils.getCachedDirectoryList(context)
|
||||
if (cachedDirectoryList != null) {
|
||||
for (directory in cachedDirectoryList) {
|
||||
if (!directory.isDirectory) continue
|
||||
val dirLocale = DictionaryInfoUtils.getWordListIdFromFileName(directory.name)
|
||||
if (dirLocale == mainLocaleString) continue
|
||||
val locale = dirLocale.toLocale()
|
||||
if (locale.language == mainLocale.language) continue
|
||||
val localeScript = ScriptUtils.getScriptFromSpellCheckerLocale(locale)
|
||||
if (localeScript != mainScript) continue
|
||||
locales.add(locale.toString())
|
||||
}
|
||||
}
|
||||
// get assets dictionaries
|
||||
val assetsDictionaryList = BinaryDictionaryGetter.getAssetsDictionaryList(context)
|
||||
if (assetsDictionaryList != null) {
|
||||
for (dictionary in assetsDictionaryList) {
|
||||
val dictLocale =
|
||||
BinaryDictionaryGetter.extractLocaleFromAssetsDictionaryFile(dictionary)
|
||||
?: continue
|
||||
if (dictLocale == mainLocaleString) continue
|
||||
val locale = dictLocale.toLocale()
|
||||
if (locale.language == mainLocale.language) continue
|
||||
val localeScript = ScriptUtils.getScriptFromSpellCheckerLocale(locale)
|
||||
if (localeScript != mainScript) continue
|
||||
locales.add(locale.toString())
|
||||
}
|
||||
}
|
||||
return locales
|
||||
}
|
||||
|
||||
private fun String.toLocale() = LocaleUtils.constructLocaleFromString(this)
|
||||
private const val DICTIONARY_URL = "https://codeberg.org/Helium314/aosp-dictionaries"
|
|
@ -0,0 +1,188 @@
|
|||
package org.dslul.openboard.inputmethod.latin.settings
|
||||
|
||||
import android.app.Activity
|
||||
import android.content.Intent
|
||||
import android.content.res.Resources
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.preference.TwoStatePreference
|
||||
import android.view.inputmethod.InputMethodSubtype
|
||||
import org.dslul.openboard.inputmethod.latin.R
|
||||
import org.dslul.openboard.inputmethod.latin.common.LocaleUtils
|
||||
import org.dslul.openboard.inputmethod.latin.utils.DictionaryInfoUtils
|
||||
import org.dslul.openboard.inputmethod.latin.utils.SubtypeLocaleUtils
|
||||
import java.util.Locale
|
||||
|
||||
|
||||
@Suppress("Deprecation") // yes everything here is deprecated, but only work on this if really necessary
|
||||
class LanguageSettingsFragment : SubScreenFragment() {
|
||||
|
||||
private val sortedSubtypes = LinkedHashMap<String, MutableList<SubtypeInfo>>()
|
||||
private val enabledSubtypes = mutableListOf<InputMethodSubtype>()
|
||||
private val systemLocales = mutableListOf<Locale>()
|
||||
private val languageFilterListPreference by lazy { findPreference("pref_language_filter") as LanguageFilterListPreference }
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
addPreferencesFromResource(R.xml.prefs_screen_languages);
|
||||
SubtypeLocaleUtils.init(activity)
|
||||
|
||||
enabledSubtypes.addAll(getExplicitlyEnabledSubtypes())
|
||||
systemLocales.addAll(getSystemLocales())
|
||||
val systemLocalesSwitch = findPreference(Settings.PREF_USE_SYSTEM_LOCALES) as TwoStatePreference
|
||||
systemLocalesSwitch.setOnPreferenceChangeListener { _, b ->
|
||||
loadSubtypes(b as Boolean)
|
||||
true
|
||||
}
|
||||
loadSubtypes(systemLocalesSwitch.isChecked)
|
||||
}
|
||||
|
||||
override fun onResume() {
|
||||
super.onResume()
|
||||
languageFilterListPreference.setSettingsFragment(this)
|
||||
}
|
||||
|
||||
override fun onPause() {
|
||||
super.onPause()
|
||||
languageFilterListPreference.setSettingsFragment(null)
|
||||
}
|
||||
|
||||
private fun loadSubtypes(systemOnly: Boolean) {
|
||||
sortedSubtypes.clear()
|
||||
val allSubtypes = getAllAvailableSubtypes().toMutableList()
|
||||
// maybe make use of the map used by SubtypeSettings for performance reasons?
|
||||
fun List<Locale>.sortedAddToSubtypesAndRemoveFromAllSubtypes() {
|
||||
val subtypesToAdd = mutableListOf<SubtypeInfo>()
|
||||
forEach { locale ->
|
||||
val localeString = locale.toString()
|
||||
val iter = allSubtypes.iterator()
|
||||
var added = false
|
||||
while (iter.hasNext()) {
|
||||
val subtype = iter.next()
|
||||
if (subtype.locale == localeString) {
|
||||
subtypesToAdd.add(subtype.toSubtypeInfo(locale))
|
||||
iter.remove()
|
||||
added = true
|
||||
}
|
||||
}
|
||||
if (!added && locale.country.isNotEmpty()) {
|
||||
// try again, but with language only
|
||||
val languageString = locale.language
|
||||
val iter = allSubtypes.iterator()
|
||||
while (iter.hasNext()) {
|
||||
val subtype = iter.next()
|
||||
if (subtype.locale == languageString) {
|
||||
subtypesToAdd.add(subtype.toSubtypeInfo(LocaleUtils.constructLocaleFromString(languageString)))
|
||||
iter.remove()
|
||||
added = true
|
||||
}
|
||||
}
|
||||
}
|
||||
// special treatment for the known languages with _ZZ types
|
||||
// todo: later: make it a bit less weird... and probably faster
|
||||
// consider that more _ZZ languages might be added (e.g. hinglish)
|
||||
if (!added && locale.language == "sr") {
|
||||
val languageString = locale.language
|
||||
val iter = allSubtypes.iterator()
|
||||
while (iter.hasNext()) {
|
||||
val subtype = iter.next()
|
||||
if (subtype.locale.substringBefore("_") == languageString) {
|
||||
subtypesToAdd.add(subtype.toSubtypeInfo(LocaleUtils.constructLocaleFromString(subtype.locale)))
|
||||
iter.remove()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
subtypesToAdd.sortedBy { it.displayName }.addToSortedSubtypes()
|
||||
}
|
||||
|
||||
if (systemOnly) {
|
||||
systemLocales.sortedAddToSubtypesAndRemoveFromAllSubtypes()
|
||||
languageFilterListPreference.setLanguages(sortedSubtypes.values, systemOnly)
|
||||
return
|
||||
}
|
||||
|
||||
// add enabled subtypes
|
||||
enabledSubtypes.map { it.toSubtypeInfo(LocaleUtils.constructLocaleFromString(it.locale), true) }
|
||||
.sortedBy { it.displayName }.addToSortedSubtypes()
|
||||
allSubtypes.removeAll(enabledSubtypes)
|
||||
|
||||
// add subtypes that have a dictionary
|
||||
val localesWithDictionary = DictionaryInfoUtils.getCachedDirectoryList(activity)?.mapNotNull { dir ->
|
||||
if (!dir.isDirectory)
|
||||
return@mapNotNull null
|
||||
if (dir.list()?.any { it.endsWith(DictionarySettingsFragment.USER_DICTIONARY_SUFFIX) } == true)
|
||||
LocaleUtils.constructLocaleFromString(dir.name)
|
||||
else null
|
||||
}
|
||||
localesWithDictionary?.sortedAddToSubtypesAndRemoveFromAllSubtypes()
|
||||
|
||||
// add subtypes for device locales
|
||||
systemLocales.sortedAddToSubtypesAndRemoveFromAllSubtypes()
|
||||
|
||||
// add the remaining ones
|
||||
allSubtypes.map { it.toSubtypeInfo(LocaleUtils.constructLocaleFromString(it.locale)) }
|
||||
.sortedBy { if (it.subtype.locale.equals("zz", true))
|
||||
"zz" // "No language (Alphabet)" should be last
|
||||
else it.displayName
|
||||
}.addToSortedSubtypes()
|
||||
|
||||
// set languages
|
||||
languageFilterListPreference.setLanguages(sortedSubtypes.values, systemOnly)
|
||||
}
|
||||
|
||||
private fun InputMethodSubtype.toSubtypeInfo(locale: Locale, isEnabled: Boolean = false) =
|
||||
toSubtypeInfo(locale, resources, isEnabled)
|
||||
|
||||
private fun List<SubtypeInfo>.addToSortedSubtypes() {
|
||||
forEach {
|
||||
sortedSubtypes.getOrPut(it.displayName) { mutableListOf() }.add(it)
|
||||
}
|
||||
}
|
||||
|
||||
interface Listener {
|
||||
fun onNewDictionary(uri: Uri?)
|
||||
}
|
||||
|
||||
private var listener: Listener? = null
|
||||
|
||||
fun setListener(newListener: Listener?) {
|
||||
listener = newListener
|
||||
}
|
||||
|
||||
fun requestDictionary() {
|
||||
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT)
|
||||
.addCategory(Intent.CATEGORY_OPENABLE)
|
||||
.setType("application/octet-stream")
|
||||
startActivityForResult(intent, DICTIONARY_REQUEST_CODE)
|
||||
}
|
||||
|
||||
override fun onActivityResult(requestCode: Int, resultCode: Int, resultData: Intent?) {
|
||||
if (resultCode == Activity.RESULT_OK && requestCode == DICTIONARY_REQUEST_CODE)
|
||||
listener?.onNewDictionary(resultData?.data)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
class SubtypeInfo(val displayName: String, val subtype: InputMethodSubtype, var isEnabled: Boolean) {
|
||||
override fun equals(other: Any?): Boolean {
|
||||
if (other !is SubtypeInfo) return false
|
||||
return subtype == other.subtype
|
||||
}
|
||||
|
||||
override fun hashCode(): Int {
|
||||
return subtype.hashCode()
|
||||
}
|
||||
}
|
||||
|
||||
fun InputMethodSubtype.toSubtypeInfo(locale: Locale, resources: Resources, isEnabled: Boolean): SubtypeInfo {
|
||||
val displayName = if (locale.toString().equals("zz", true)) // no language
|
||||
SubtypeLocaleUtils.getSubtypeLocaleDisplayNameInSystemLocale(locale.toString())
|
||||
else if (locale.toString().endsWith("zz", true)) // serbian (latin), maybe others in the future
|
||||
SubtypeLocaleUtils.getSubtypeDisplayNameInSystemLocale(this)
|
||||
else
|
||||
locale.getDisplayName(resources.configuration.locale)
|
||||
return SubtypeInfo(displayName, this, isEnabled)
|
||||
}
|
||||
|
||||
private const val DICTIONARY_REQUEST_CODE = 96834
|
|
@ -109,7 +109,7 @@ public final class SecondaryLocaleSettingsFragment extends SubScreenFragment {
|
|||
locale = "";
|
||||
final Set<String> encodedLocales = new HashSet<>();
|
||||
boolean updated = false;
|
||||
for (String encodedLocale : getSharedPreferences().getStringSet(Settings.PREF_SECONDARY_LOCALES, new HashSet<>())) {
|
||||
for (String encodedLocale : getSharedPreferences().getStringSet(Settings.PREF_SECONDARY_LOCALES_PREFIX, new HashSet<>())) {
|
||||
String[] locs = encodedLocale.split("§");
|
||||
if (locs.length == 2 && locs[0].equals(mainLocale)) {
|
||||
if (!locale.isEmpty())
|
||||
|
@ -121,7 +121,7 @@ public final class SecondaryLocaleSettingsFragment extends SubScreenFragment {
|
|||
}
|
||||
if (!updated)
|
||||
encodedLocales.add(mainLocale + "§" + locale);
|
||||
getSharedPreferences().edit().putStringSet(Settings.PREF_SECONDARY_LOCALES, encodedLocales).apply();
|
||||
getSharedPreferences().edit().putStringSet(Settings.PREF_SECONDARY_LOCALES_PREFIX, encodedLocales).apply();
|
||||
final Intent newDictBroadcast = new Intent(DictionaryPackConstants.NEW_DICTIONARY_INTENT_ACTION);
|
||||
getActivity().sendBroadcast(newDictBroadcast);
|
||||
resetKeyboardLocales();
|
||||
|
|
|
@ -43,7 +43,6 @@ import org.dslul.openboard.inputmethod.latin.utils.StatsUtils;
|
|||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Locale;
|
||||
import java.util.Set;
|
||||
|
@ -146,11 +145,13 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang
|
|||
public static final String PREF_ENABLE_CLIPBOARD_HISTORY = "pref_enable_clipboard_history";
|
||||
public static final String PREF_CLIPBOARD_HISTORY_RETENTION_TIME = "pref_clipboard_history_retention_time";
|
||||
|
||||
public static final String PREF_SECONDARY_LOCALES = "pref_secondary_locales";
|
||||
public static final String PREF_SECONDARY_LOCALES_PREFIX = "pref_secondary_locales_";
|
||||
public static final String PREF_ADD_TO_PERSONAL_DICTIONARY = "pref_add_to_personal_dictionary";
|
||||
public static final String PREF_NAVBAR_COLOR = "pref_navbar_color";
|
||||
|
||||
public static final String PREF_NARROW_KEY_GAPS = "pref_narrow_key_gaps";
|
||||
public static final String PREF_ENABLED_INPUT_STYLES = "pref_enabled_input_styles";
|
||||
public static final String PREF_SELECTED_INPUT_STYLE = "pref_selected_input_style";
|
||||
public static final String PREF_USE_SYSTEM_LOCALES = "pref_use_system_locales";
|
||||
|
||||
// This preference key is deprecated. Use {@link #PREF_SHOW_LANGUAGE_SWITCH_KEY} instead.
|
||||
// This is being used only for the backward compatibility.
|
||||
|
@ -219,6 +220,10 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang
|
|||
} finally {
|
||||
mSettingsValuesLock.unlock();
|
||||
}
|
||||
if (key.equals(PREF_CUSTOM_INPUT_STYLES)) {
|
||||
final String additionalSubtypes = readPrefAdditionalSubtypes(prefs, mContext.getResources());
|
||||
SubtypeSettingsKt.updateAdditionalSubtypes(AdditionalSubtypeUtils.createAdditionalSubtypesArray(additionalSubtypes));
|
||||
}
|
||||
}
|
||||
|
||||
public void loadSettings(final Context context, final Locale locale,
|
||||
|
@ -544,15 +549,27 @@ public final class Settings implements SharedPreferences.OnSharedPreferenceChang
|
|||
return prefs.getInt(PREF_LAST_SHOWN_EMOJI_CATEGORY_PAGE_ID, defValue);
|
||||
}
|
||||
|
||||
// todo: adjust for multiple secondary locales
|
||||
public static List<Locale> getSecondaryLocales(final SharedPreferences prefs, final String mainLocaleString) {
|
||||
final Set<String> encodedLocales = prefs.getStringSet(PREF_SECONDARY_LOCALES, new HashSet<>());
|
||||
for (String loc : encodedLocales) {
|
||||
String[] locales = loc.split("§");
|
||||
if (locales.length == 2 && locales[0].equals(mainLocaleString.toLowerCase(Locale.ENGLISH)))
|
||||
return new ArrayList<Locale>() {{ add(LocaleUtils.constructLocaleFromString(locales[1])); }};
|
||||
final String localesString = prefs.getString(PREF_SECONDARY_LOCALES_PREFIX + mainLocaleString.toLowerCase(Locale.ROOT), "");
|
||||
|
||||
final ArrayList<Locale> locales = new ArrayList<>();
|
||||
for (String locale : localesString.split(";")) {
|
||||
if (locale.isEmpty()) continue;
|
||||
locales.add(LocaleUtils.constructLocaleFromString(locale));
|
||||
}
|
||||
return new ArrayList<>();
|
||||
return locales;
|
||||
}
|
||||
|
||||
public static void setSecondaryLocales(final SharedPreferences prefs, final String mainLocaleString, final List<String> locales) {
|
||||
if (locales.isEmpty()) {
|
||||
prefs.edit().putString(PREF_SECONDARY_LOCALES_PREFIX + mainLocaleString.toLowerCase(Locale.ROOT), "").apply();
|
||||
return;
|
||||
}
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
for (String locale : locales) {
|
||||
sb.append(";").append(locale);
|
||||
}
|
||||
prefs.edit().putString(PREF_SECONDARY_LOCALES_PREFIX + mainLocaleString.toLowerCase(Locale.ROOT), sb.toString()).apply();
|
||||
}
|
||||
|
||||
public static Colors getColors(final Context context, final SharedPreferences prefs) {
|
||||
|
|
|
@ -29,15 +29,18 @@ import android.provider.Settings.Secure;
|
|||
import android.view.Menu;
|
||||
import android.view.MenuInflater;
|
||||
import android.view.MenuItem;
|
||||
import android.view.inputmethod.InputMethodSubtype;
|
||||
|
||||
import org.dslul.openboard.inputmethod.latin.BuildConfig;
|
||||
import org.dslul.openboard.inputmethod.latin.R;
|
||||
import org.dslul.openboard.inputmethod.latin.common.FileUtils;
|
||||
import org.dslul.openboard.inputmethod.latin.utils.ApplicationUtils;
|
||||
import org.dslul.openboard.inputmethod.latin.utils.DeviceProtectedUtils;
|
||||
import org.dslul.openboard.inputmethod.latin.utils.FeedbackUtils;
|
||||
import org.dslul.openboard.inputmethod.latin.utils.JniUtils;
|
||||
import org.dslul.openboard.inputmethodcommon.InputMethodSettingsFragment;
|
||||
|
||||
import java.util.List;
|
||||
import java.io.BufferedOutputStream;
|
||||
import java.io.File;
|
||||
import java.io.FileInputStream;
|
||||
|
@ -83,6 +86,7 @@ public final class SettingsFragment extends InputMethodSettingsFragment {
|
|||
if (actionBar != null && screenTitle != null) {
|
||||
actionBar.setTitle(screenTitle);
|
||||
}
|
||||
findPreference("screen_languages").setSummary(getEnabledSubtypesLabel());
|
||||
if (BuildConfig.DEBUG)
|
||||
askAboutCrashReports();
|
||||
}
|
||||
|
@ -129,11 +133,20 @@ public final class SettingsFragment extends InputMethodSettingsFragment {
|
|||
return Secure.getInt(activity.getContentResolver(), "user_setup_complete", 0) != 0;
|
||||
}
|
||||
|
||||
private String getEnabledSubtypesLabel() {
|
||||
final List<InputMethodSubtype> subtypes = SubtypeSettingsKt.getEnabledSubtypes(DeviceProtectedUtils.getSharedPreferences(getActivity()), true);
|
||||
final StringBuilder sb = new StringBuilder();
|
||||
for (final InputMethodSubtype subtype : subtypes) {
|
||||
if (sb.length() > 0)
|
||||
sb.append(", ");
|
||||
sb.append(subtype.getDisplayName(getActivity(), getActivity().getPackageName(), getActivity().getApplicationInfo()));
|
||||
}
|
||||
return sb.toString();
|
||||
|
||||
private void askAboutCrashReports() {
|
||||
// find crash report files
|
||||
final File dir = getActivity().getExternalFilesDir(null);
|
||||
if (dir == null) return;
|
||||
// final File[] files = dir.listFiles((file, s) -> file.getName().startsWith("crash_report"));
|
||||
final File[] allFiles = dir.listFiles();
|
||||
if (allFiles == null) return;
|
||||
crashReportFiles.clear();
|
||||
|
|
|
@ -252,7 +252,7 @@ public class SettingsValues {
|
|||
mClipboardHistoryRetentionTime = Settings.readClipboardHistoryRetentionTime(prefs, res);
|
||||
mOneHandedModeEnabled = Settings.readOneHandedModeEnabled(prefs);
|
||||
mOneHandedModeGravity = Settings.readOneHandedModeGravity(prefs);
|
||||
mSecondaryLocales = Settings.getSecondaryLocales(prefs, RichInputMethodManager.getInstance().getCurrentSubtypeLocale().toString());
|
||||
mSecondaryLocales = Settings.getSecondaryLocales(prefs, SubtypeSettingsKt.getSelectedSubtype(prefs).getLocale());
|
||||
|
||||
mColors = Settings.getColors(context, prefs);
|
||||
mColors.createColorFilters(prefs.getBoolean(Settings.PREF_THEME_KEY_BORDERS, false));
|
||||
|
|
|
@ -0,0 +1,221 @@
|
|||
package org.dslul.openboard.inputmethod.latin.settings
|
||||
|
||||
import android.content.Context
|
||||
import android.content.SharedPreferences
|
||||
import android.content.res.Resources
|
||||
import android.os.Build
|
||||
import android.view.inputmethod.InputMethodSubtype
|
||||
import androidx.core.app.LocaleManagerCompat
|
||||
import androidx.core.content.edit
|
||||
import org.dslul.openboard.inputmethod.keyboard.KeyboardSwitcher
|
||||
import org.dslul.openboard.inputmethod.latin.BuildConfig
|
||||
import org.dslul.openboard.inputmethod.latin.R
|
||||
import org.dslul.openboard.inputmethod.latin.RichInputMethodManager
|
||||
import org.dslul.openboard.inputmethod.latin.utils.AdditionalSubtypeUtils
|
||||
import org.dslul.openboard.inputmethod.latin.utils.DeviceProtectedUtils
|
||||
import org.dslul.openboard.inputmethod.latin.utils.SubtypeLocaleUtils
|
||||
import org.xmlpull.v1.XmlPullParser
|
||||
import java.util.*
|
||||
import kotlin.collections.ArrayList
|
||||
import kotlin.collections.LinkedHashMap
|
||||
|
||||
/** @return enabled subtypes. If no subtypes are enabled, but a contextForFallback is provided,
|
||||
* subtypes for system locales will be returned, or en_US if none found. */
|
||||
fun getEnabledSubtypes(prefs: SharedPreferences, fallback: Boolean = false): List<InputMethodSubtype> {
|
||||
require(initialized)
|
||||
if (prefs.getBoolean(Settings.PREF_USE_SYSTEM_LOCALES, true))
|
||||
return getDefaultEnabledSubtypes()
|
||||
return getExplicitlyEnabledSubtypes(fallback)
|
||||
}
|
||||
|
||||
fun getExplicitlyEnabledSubtypes(fallback: Boolean = false): List<InputMethodSubtype> {
|
||||
require(initialized)
|
||||
if (fallback && enabledSubtypes.isEmpty())
|
||||
return getDefaultEnabledSubtypes()
|
||||
return enabledSubtypes
|
||||
}
|
||||
|
||||
fun getAllAvailableSubtypes(): List<InputMethodSubtype> {
|
||||
require(initialized)
|
||||
return resourceSubtypesByLocale.values.flatten() + additionalSubtypes
|
||||
}
|
||||
|
||||
fun addEnabledSubtype(prefs: SharedPreferences, subtype: InputMethodSubtype) {
|
||||
require(initialized)
|
||||
val subtypeString = subtype.prefString()
|
||||
val oldSubtypeStrings = prefs.getString(Settings.PREF_ENABLED_INPUT_STYLES, "")!!.split(SUBTYPE_SEPARATOR)
|
||||
val newString = (oldSubtypeStrings + subtypeString).filter { it.isNotBlank() }.toSortedSet().joinToString(SUBTYPE_SEPARATOR)
|
||||
prefs.edit { putString(Settings.PREF_ENABLED_INPUT_STYLES, newString) }
|
||||
|
||||
if (subtype !in enabledSubtypes) {
|
||||
enabledSubtypes.add(subtype)
|
||||
enabledSubtypes.sortBy { it.locale } // for consistent order
|
||||
}
|
||||
}
|
||||
|
||||
/** returns whether subtype was actually removed, does not remove last subtype */
|
||||
fun removeEnabledSubtype(prefs: SharedPreferences, subtype: InputMethodSubtype) {
|
||||
require(initialized)
|
||||
val subtypeString = subtype.prefString()
|
||||
val oldSubtypeString = prefs.getString(Settings.PREF_ENABLED_INPUT_STYLES, "")!!
|
||||
val newString = (oldSubtypeString.split(SUBTYPE_SEPARATOR) - subtypeString).joinToString(SUBTYPE_SEPARATOR)
|
||||
if (newString == oldSubtypeString)
|
||||
return // already removed
|
||||
prefs.edit { putString(Settings.PREF_ENABLED_INPUT_STYLES, newString) }
|
||||
if (subtypeString == prefs.getString(Settings.PREF_SELECTED_INPUT_STYLE, "")) {
|
||||
// switch subtype if the currently used one has been disabled
|
||||
val nextSubtype = RichInputMethodManager.getInstance().getNextSubtypeInThisIme(true)
|
||||
if (subtypeString == nextSubtype?.prefString())
|
||||
KeyboardSwitcher.getInstance().switchToSubtype(getDefaultEnabledSubtypes().first())
|
||||
else
|
||||
KeyboardSwitcher.getInstance().switchToSubtype(nextSubtype)
|
||||
}
|
||||
enabledSubtypes.remove(subtype)
|
||||
}
|
||||
|
||||
fun getSelectedSubtype(prefs: SharedPreferences): InputMethodSubtype {
|
||||
require(initialized)
|
||||
val subtypeString = prefs.getString(Settings.PREF_SELECTED_INPUT_STYLE, "")!!.split(LOCALE_LAYOUT_SEPARATOR)
|
||||
val subtype = enabledSubtypes.firstOrNull { subtypeString.first() == it.locale && subtypeString.last() == SubtypeLocaleUtils.getKeyboardLayoutSetName(it) }
|
||||
?: enabledSubtypes.firstOrNull()
|
||||
if (subtype == null) {
|
||||
val defaultSubtypes = getDefaultEnabledSubtypes()
|
||||
return defaultSubtypes.firstOrNull { subtypeString.first() == it.locale && subtypeString.last() == SubtypeLocaleUtils.getKeyboardLayoutSetName(it) }
|
||||
?: defaultSubtypes.firstOrNull { subtypeString.first().substringBefore("_") == it.locale.substringBefore("_") && subtypeString.last() == SubtypeLocaleUtils.getKeyboardLayoutSetName(it) }
|
||||
?: defaultSubtypes.first()
|
||||
}
|
||||
return subtype
|
||||
}
|
||||
|
||||
fun setSelectedSubtype(prefs: SharedPreferences, subtype: InputMethodSubtype) {
|
||||
val subtypeString = subtype.prefString()
|
||||
if (subtype.locale.isEmpty() || prefs.getString(Settings.PREF_SELECTED_INPUT_STYLE, "") == subtypeString)
|
||||
return
|
||||
prefs.edit { putString(Settings.PREF_SELECTED_INPUT_STYLE, subtypeString) }
|
||||
}
|
||||
|
||||
fun isAdditionalSubtype(subtype: InputMethodSubtype): Boolean {
|
||||
return subtype in additionalSubtypes
|
||||
}
|
||||
|
||||
fun updateAdditionalSubtypes(subtypes: Array<InputMethodSubtype>) {
|
||||
additionalSubtypes.clear()
|
||||
additionalSubtypes.addAll(subtypes)
|
||||
}
|
||||
|
||||
fun reloadSystemLocales(context: Context) {
|
||||
systemLocales.clear()
|
||||
val localeList = LocaleManagerCompat.getSystemLocales(context)
|
||||
(0 until localeList.size()).forEach {
|
||||
val locale = localeList[it]
|
||||
if (locale != null) systemLocales.add(locale)
|
||||
}
|
||||
}
|
||||
|
||||
fun getSystemLocales(): List<Locale> {
|
||||
require(initialized)
|
||||
return systemLocales
|
||||
}
|
||||
|
||||
fun init(context: Context) {
|
||||
if (initialized) return
|
||||
SubtypeLocaleUtils.init(context) // necessary to get the correct getKeyboardLayoutSetName
|
||||
|
||||
// necessary to set system locales at start, because for some weird reason (bug?)
|
||||
// LocaleManagerCompat.getSystemLocales(context) sometimes doesn't return all system locales
|
||||
reloadSystemLocales(context)
|
||||
|
||||
loadResourceSubtypes(context.resources)
|
||||
loadAdditionalSubtypes(context)
|
||||
loadEnabledSubtypes(context)
|
||||
initialized = true
|
||||
}
|
||||
|
||||
private fun getDefaultEnabledSubtypes(): List<InputMethodSubtype> {
|
||||
val inputMethodSubtypes = systemLocales.mapNotNull { locale ->
|
||||
val localeString = locale.toString()
|
||||
val subtypes = resourceSubtypesByLocale[localeString]
|
||||
?: resourceSubtypesByLocale[localeString.substringBefore("_")] // fall back to language match
|
||||
subtypes?.firstOrNull() // todo: maybe set default for some languages with multiple resource subtypes?
|
||||
}
|
||||
if (inputMethodSubtypes.isEmpty())
|
||||
// hardcoded fallback for weird cases
|
||||
return listOf(resourceSubtypesByLocale["en_US"]!!.first())
|
||||
return inputMethodSubtypes
|
||||
}
|
||||
|
||||
private fun InputMethodSubtype.prefString() =
|
||||
locale + LOCALE_LAYOUT_SEPARATOR + SubtypeLocaleUtils.getKeyboardLayoutSetName(this)
|
||||
|
||||
private fun loadResourceSubtypes(resources: Resources) {
|
||||
val xml = resources.getXml(R.xml.method)
|
||||
xml.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, true)
|
||||
val namespace = "http://schemas.android.com/apk/res/android"
|
||||
var eventType = xml.eventType
|
||||
while (eventType != XmlPullParser.END_DOCUMENT) {
|
||||
if (eventType == XmlPullParser.START_TAG && xml.name == "subtype") {
|
||||
val icon = xml.getAttributeResourceValue(namespace, "icon", 0)
|
||||
val label = xml.getAttributeResourceValue(namespace, "label", 0)
|
||||
val subtypeId = xml.getAttributeIntValue(namespace, "subtypeId", 0)
|
||||
val locale = xml.getAttributeValue(namespace, "imeSubtypeLocale").intern()
|
||||
val languageTag = xml.getAttributeValue(namespace, "languageTag")
|
||||
val imeSubtypeMode = xml.getAttributeValue(namespace, "imeSubtypeMode")
|
||||
val imeSubtypeExtraValue = xml.getAttributeValue(namespace, "imeSubtypeExtraValue").intern()
|
||||
val isAsciiCapable = xml.getAttributeBooleanValue(namespace, "isAsciiCapable", false)
|
||||
val b = InputMethodSubtype.InputMethodSubtypeBuilder()
|
||||
b.setSubtypeIconResId(icon)
|
||||
b.setSubtypeNameResId(label)
|
||||
if (subtypeId != 0)
|
||||
b.setSubtypeId(subtypeId)
|
||||
b.setSubtypeLocale(locale)
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N && languageTag != null)
|
||||
b.setLanguageTag(languageTag)
|
||||
b.setSubtypeMode(imeSubtypeMode)
|
||||
b.setSubtypeExtraValue(imeSubtypeExtraValue)
|
||||
b.setIsAsciiCapable(isAsciiCapable)
|
||||
resourceSubtypesByLocale.getOrPut(locale) { ArrayList(2) }.add(b.build())
|
||||
}
|
||||
eventType = xml.next()
|
||||
}
|
||||
}
|
||||
|
||||
private fun loadAdditionalSubtypes(context: Context) {
|
||||
val prefs = DeviceProtectedUtils.getSharedPreferences(context)
|
||||
val additionalSubtypeString = Settings.readPrefAdditionalSubtypes(prefs, context.resources)
|
||||
val subtypes = AdditionalSubtypeUtils.createAdditionalSubtypesArray(additionalSubtypeString)
|
||||
additionalSubtypes.addAll(subtypes)
|
||||
}
|
||||
|
||||
// requires loadResourceSubtypes to be called before
|
||||
private fun loadEnabledSubtypes(context: Context) {
|
||||
val prefs = DeviceProtectedUtils.getSharedPreferences(context)
|
||||
val subtypeStrings = prefs.getString(Settings.PREF_ENABLED_INPUT_STYLES, "")!!
|
||||
.split(SUBTYPE_SEPARATOR).filter { it.isNotEmpty() }.map { it.split(LOCALE_LAYOUT_SEPARATOR) }
|
||||
|
||||
for (localeAndLayout in subtypeStrings) {
|
||||
require(localeAndLayout.size == 2)
|
||||
val subtypesForLocale = resourceSubtypesByLocale[localeAndLayout.first()]
|
||||
if (BuildConfig.DEBUG) // should not happen, but should not crash for normal user
|
||||
require(subtypesForLocale != null)
|
||||
else if (subtypesForLocale == null)
|
||||
continue
|
||||
|
||||
val subtype = subtypesForLocale.firstOrNull { SubtypeLocaleUtils.getKeyboardLayoutSetName(it) == localeAndLayout.last() }
|
||||
?: additionalSubtypes.firstOrNull { it.locale == localeAndLayout.first() && SubtypeLocaleUtils.getKeyboardLayoutSetName(it) == localeAndLayout.last() }
|
||||
if (BuildConfig.DEBUG) // should not happen, but should not crash for normal user
|
||||
require(subtype != null)
|
||||
else if (subtype == null)
|
||||
continue
|
||||
|
||||
enabledSubtypes.add(subtype)
|
||||
}
|
||||
}
|
||||
|
||||
private var initialized = false
|
||||
private val enabledSubtypes = mutableListOf<InputMethodSubtype>()
|
||||
private val resourceSubtypesByLocale = LinkedHashMap<String, MutableList<InputMethodSubtype>>(100)
|
||||
private val additionalSubtypes = mutableListOf<InputMethodSubtype>()
|
||||
private val systemLocales = mutableListOf<Locale>()
|
||||
|
||||
private const val SUBTYPE_SEPARATOR = ";"
|
||||
private const val LOCALE_LAYOUT_SEPARATOR = ":"
|
|
@ -180,11 +180,14 @@ public final class SetupWizardActivity extends Activity implements View.OnClickL
|
|||
(TextView)findViewById(R.id.setup_step3_bullet), findViewById(R.id.setup_step3),
|
||||
R.string.setup_step3_title, R.string.setup_step3_instruction,
|
||||
0 /* finishedInstruction */, R.drawable.ic_setup_step3,
|
||||
R.string.setup_step3_action);
|
||||
R.string.setup_step3_action_new);
|
||||
step3.setAction(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
invokeSubtypeEnablerOfThisIme();
|
||||
final Intent intent = new Intent(getApplicationContext(), SettingsActivity.class);
|
||||
intent.setAction(Intent.ACTION_VIEW);
|
||||
startActivity(intent);
|
||||
finish();
|
||||
}
|
||||
});
|
||||
mSetupStepGroup.addStep(step3);
|
||||
|
@ -282,19 +285,6 @@ public final class SetupWizardActivity extends Activity implements View.OnClickL
|
|||
mNeedsToAdjustStepNumberToSystemState = true;
|
||||
}
|
||||
|
||||
void invokeSubtypeEnablerOfThisIme() {
|
||||
final InputMethodInfo imi =
|
||||
UncachedInputMethodManagerUtils.getInputMethodInfoOf(getPackageName(), mImm);
|
||||
if (imi == null) {
|
||||
return;
|
||||
}
|
||||
final Intent intent = new Intent();
|
||||
intent.setAction(Settings.ACTION_INPUT_METHOD_SUBTYPE_SETTINGS);
|
||||
intent.addCategory(Intent.CATEGORY_DEFAULT);
|
||||
intent.putExtra(Settings.EXTRA_INPUT_METHOD_ID, imi.getId());
|
||||
startActivity(intent);
|
||||
}
|
||||
|
||||
private int determineSetupStepNumberFromLauncher() {
|
||||
final int stepNumber = determineSetupStepNumber();
|
||||
if (stepNumber == STEP_1) {
|
||||
|
|
|
@ -107,29 +107,35 @@ public final class AdditionalSubtypeUtils {
|
|||
final String[] prefSubtypeArray = prefSubtypes.split(PREF_SUBTYPE_SEPARATOR);
|
||||
final ArrayList<InputMethodSubtype> subtypesList = new ArrayList<>(prefSubtypeArray.length);
|
||||
for (final String prefSubtype : prefSubtypeArray) {
|
||||
final String[] elems = prefSubtype.split(LOCALE_AND_LAYOUT_SEPARATOR);
|
||||
if (elems.length != LENGTH_WITHOUT_EXTRA_VALUE
|
||||
&& elems.length != LENGTH_WITH_EXTRA_VALUE) {
|
||||
Log.w(TAG, "Unknown additional subtype specified: " + prefSubtype + " in "
|
||||
+ prefSubtypes);
|
||||
continue;
|
||||
}
|
||||
final String localeString = elems[INDEX_OF_LOCALE];
|
||||
final String keyboardLayoutSetName = elems[INDEX_OF_KEYBOARD_LAYOUT];
|
||||
// Here we assume that all the additional subtypes have AsciiCapable and EmojiCapable.
|
||||
// This is actually what the setting dialog for additional subtype is doing.
|
||||
final InputMethodSubtype subtype = createAsciiEmojiCapableAdditionalSubtype(
|
||||
localeString, keyboardLayoutSetName);
|
||||
if (subtype.getNameResId() == SubtypeLocaleUtils.UNKNOWN_KEYBOARD_LAYOUT) {
|
||||
// Skip unknown keyboard layout subtype. This may happen when predefined keyboard
|
||||
// layout has been removed.
|
||||
continue;
|
||||
}
|
||||
subtypesList.add(subtype);
|
||||
final InputMethodSubtype subtype = createSubtypeFromString(prefSubtype);
|
||||
if (subtype != null)
|
||||
subtypesList.add(subtype);
|
||||
}
|
||||
return subtypesList.toArray(new InputMethodSubtype[subtypesList.size()]);
|
||||
}
|
||||
|
||||
// use string created with getPrefSubtype
|
||||
public static InputMethodSubtype createSubtypeFromString(final String prefSubtype) {
|
||||
final String[] elems = prefSubtype.split(LOCALE_AND_LAYOUT_SEPARATOR);
|
||||
if (elems.length != LENGTH_WITHOUT_EXTRA_VALUE
|
||||
&& elems.length != LENGTH_WITH_EXTRA_VALUE) {
|
||||
Log.w(TAG, "Unknown additional subtype specified: " + prefSubtype);
|
||||
return null;
|
||||
}
|
||||
final String localeString = elems[INDEX_OF_LOCALE];
|
||||
final String keyboardLayoutSetName = elems[INDEX_OF_KEYBOARD_LAYOUT];
|
||||
// Here we assume that all the additional subtypes have AsciiCapable and EmojiCapable.
|
||||
// This is actually what the setting dialog for additional subtype is doing.
|
||||
final InputMethodSubtype subtype = createAsciiEmojiCapableAdditionalSubtype(
|
||||
localeString, keyboardLayoutSetName);
|
||||
if (subtype.getNameResId() == SubtypeLocaleUtils.UNKNOWN_KEYBOARD_LAYOUT) {
|
||||
// Skip unknown keyboard layout subtype. This may happen when predefined keyboard
|
||||
// layout has been removed.
|
||||
return null;
|
||||
}
|
||||
return subtype;
|
||||
}
|
||||
|
||||
public static String createPrefSubtypes(final InputMethodSubtype[] subtypes) {
|
||||
if (subtypes == null || subtypes.length == 0) {
|
||||
return "";
|
||||
|
|
|
@ -329,6 +329,7 @@ public class DictionaryInfoUtils {
|
|||
return MAIN_DICT_PREFIX + locale.toLowerCase(Locale.ENGLISH) + ".dict";
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static DictionaryHeader getDictionaryFileHeaderOrNull(final File file,
|
||||
final long offset, final long length) {
|
||||
try {
|
||||
|
|
|
@ -0,0 +1,80 @@
|
|||
package org.dslul.openboard.inputmethod.latin.utils
|
||||
|
||||
import android.app.AlertDialog
|
||||
import android.os.IBinder
|
||||
import android.text.Spannable
|
||||
import android.text.SpannableString
|
||||
import android.text.SpannableStringBuilder
|
||||
import android.text.style.RelativeSizeSpan
|
||||
import android.view.WindowManager
|
||||
import android.view.inputmethod.InputMethodInfo
|
||||
import android.view.inputmethod.InputMethodSubtype
|
||||
import org.dslul.openboard.inputmethod.latin.LatinIME
|
||||
import org.dslul.openboard.inputmethod.latin.R
|
||||
import org.dslul.openboard.inputmethod.latin.RichInputMethodManager
|
||||
|
||||
// similar to what showSubtypePicker does in https://github.com/rkkr/simple-keyboard/blob/master/app/src/main/java/rkr/simplekeyboard/inputmethod/latin/RichInputMethodManager.java
|
||||
fun showInputMethodPicker(latinIme: LatinIME, richImm: RichInputMethodManager, windowToken: IBinder) {
|
||||
val pm = latinIme.packageManager
|
||||
val thisImi = richImm.inputMethodInfoOfThisIme
|
||||
val currentSubtype = richImm.currentSubtype.rawSubtype
|
||||
val enabledImis = richImm.inputMethodManager.enabledInputMethodList
|
||||
.sortedBy { it.hashCode() }.sortedBy { it.loadLabel(pm).toString() } // first label, then hashCode
|
||||
val enabledSubtypes = mutableListOf<Pair<InputMethodInfo, InputMethodSubtype?>>()
|
||||
var currentSubtypeIndex = 0
|
||||
enabledImis.forEach { imi ->
|
||||
val subtypes = richImm.getEnabledInputMethodSubtypeList(imi, true)
|
||||
if (subtypes.isEmpty()) {
|
||||
enabledSubtypes.add(imi to null)
|
||||
} else {
|
||||
subtypes.forEach {
|
||||
if (!it.isAuxiliary) {
|
||||
enabledSubtypes.add(imi to it)
|
||||
if (imi == thisImi && it == currentSubtype)
|
||||
currentSubtypeIndex = enabledSubtypes.lastIndex
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
val items = mutableListOf<SpannableStringBuilder>()
|
||||
for (imiAndSubtype in enabledSubtypes) {
|
||||
val (imi, subtype) = imiAndSubtype
|
||||
|
||||
val title = SpannableString(subtype?.getDisplayName(latinIme, imi.packageName, imi.serviceInfo.applicationInfo)
|
||||
?.ifBlank { imi.loadLabel(pm) }
|
||||
?: imi.loadLabel(pm))
|
||||
val subtitle = SpannableString(if (subtype == null) "" else "\n${imi.loadLabel(pm)}")
|
||||
title.setSpan(
|
||||
RelativeSizeSpan(0.9f), 0, title.length,
|
||||
Spannable.SPAN_INCLUSIVE_INCLUSIVE
|
||||
)
|
||||
subtitle.setSpan(
|
||||
RelativeSizeSpan(0.85f), 0, subtitle.length,
|
||||
Spannable.SPAN_EXCLUSIVE_INCLUSIVE
|
||||
)
|
||||
items.add(SpannableStringBuilder().append(title).append(subtitle))
|
||||
}
|
||||
|
||||
val dialog = AlertDialog.Builder(DialogUtils.getPlatformDialogThemeContext(latinIme))
|
||||
.setTitle(R.string.select_input_method)
|
||||
.setSingleChoiceItems(items.toTypedArray(), currentSubtypeIndex) { di, i ->
|
||||
di.dismiss()
|
||||
val (imi, subtype) = enabledSubtypes[i]
|
||||
if (imi == thisImi)
|
||||
latinIme.switchToSubtype(subtype)
|
||||
else if (subtype != null)
|
||||
latinIme.switchInputMethodAndSubtype(imi, subtype)
|
||||
else
|
||||
latinIme.switchInputMethod(imi.id)
|
||||
}
|
||||
.create()
|
||||
|
||||
val window = dialog.window
|
||||
val layoutParams = window?.attributes
|
||||
layoutParams?.token = windowToken
|
||||
layoutParams?.type = WindowManager.LayoutParams.TYPE_APPLICATION_ATTACHED_DIALOG
|
||||
window?.attributes = layoutParams
|
||||
window?.addFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM)
|
||||
dialog.show()
|
||||
}
|
|
@ -313,14 +313,14 @@ public final class SubtypeLocaleUtils {
|
|||
return LocaleUtils.constructLocaleFromString(localeString);
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Nullable
|
||||
public static String getKeyboardLayoutSetDisplayName(
|
||||
@Nonnull final InputMethodSubtype subtype) {
|
||||
final String layoutName = getKeyboardLayoutSetName(subtype);
|
||||
return getKeyboardLayoutSetDisplayName(layoutName);
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Nullable
|
||||
public static String getKeyboardLayoutSetDisplayName(@Nonnull final String layoutName) {
|
||||
return sKeyboardLayoutToDisplayNameMap.get(layoutName);
|
||||
}
|
||||
|
|
12
app/src/main/res/drawable/ic_delete.xml
Normal file
12
app/src/main/res/drawable/ic_delete.xml
Normal file
|
@ -0,0 +1,12 @@
|
|||
<!--
|
||||
taken from https://github.com/streetcomplete/StreetComplete/blob/v53.3/app/src/main/res/drawable/ic_delete_24dp.xml
|
||||
-->
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="32dp"
|
||||
android:height="32dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24">
|
||||
<path
|
||||
android:fillColor="@color/foreground_weak"
|
||||
android:pathData="M6,19c0,1.1 0.9,2 2,2h8c1.1,0 2,-0.9 2,-2V7H6v12zM19,4h-3.5l-1,-1h-5l-1,1H5v2h14V4z"/>
|
||||
</vector>
|
16
app/src/main/res/drawable/ic_divider.xml
Normal file
16
app/src/main/res/drawable/ic_divider.xml
Normal file
|
@ -0,0 +1,16 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<item
|
||||
android:left="8dp"
|
||||
android:right="8dp"
|
||||
android:top="12dp"
|
||||
android:bottom="12dp">
|
||||
|
||||
<shape android:shape="rectangle">
|
||||
<solid android:color="@color/almost_background"/>
|
||||
<size
|
||||
android:width="256dp"
|
||||
android:height="1.5dp"/>
|
||||
</shape>
|
||||
</item>
|
||||
</layer-list>
|
12
app/src/main/res/drawable/ic_plus.xml
Normal file
12
app/src/main/res/drawable/ic_plus.xml
Normal file
|
@ -0,0 +1,12 @@
|
|||
<!--
|
||||
taken from https://github.com/streetcomplete/StreetComplete/blob/v53.3/app/src/main/res/drawable/ic_add_48dp.xml
|
||||
-->
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="40dp"
|
||||
android:height="40dp"
|
||||
android:viewportWidth="24.0"
|
||||
android:viewportHeight="24.0">
|
||||
<path
|
||||
android:fillColor="@color/foreground_weak"
|
||||
android:pathData="M19,13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"/>
|
||||
</vector>
|
43
app/src/main/res/layout/language_list_item.xml
Normal file
43
app/src/main/res/layout/language_list_item.xml
Normal file
|
@ -0,0 +1,43 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:paddingHorizontal="16dp"
|
||||
android:paddingVertical="4dp"
|
||||
android:minHeight="48dp"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" >
|
||||
<LinearLayout
|
||||
android:id="@+id/language_text"
|
||||
android:orientation="vertical"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_weight="1"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content" >
|
||||
<TextView
|
||||
android:id="@+id/language_name"
|
||||
style="@style/PreferenceTitleText"
|
||||
android:layout_gravity="center"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
<TextView
|
||||
android:id="@+id/language_details"
|
||||
style="@style/PreferenceSubtitleText"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
</LinearLayout>
|
||||
<ImageView
|
||||
android:id="@+id/delete_button"
|
||||
android:paddingEnd="10dp"
|
||||
android:src="@drawable/ic_delete"
|
||||
android:visibility="gone"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content" />
|
||||
<Switch
|
||||
android:id="@+id/language_switch"
|
||||
android:padding="6dp"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content" />
|
||||
|
||||
</LinearLayout>
|
30
app/src/main/res/layout/language_search_filter.xml
Normal file
30
app/src/main/res/layout/language_search_filter.xml
Normal file
|
@ -0,0 +1,30 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
<LinearLayout
|
||||
android:id="@+id/search_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:padding="16dip">
|
||||
<ImageView
|
||||
android:src="@drawable/sym_keyboard_search_lxx_light"
|
||||
android:tint="@color/foreground"
|
||||
android:layout_gravity="center_vertical"
|
||||
android:layout_width="40dp"
|
||||
android:layout_height="40dp" />
|
||||
<EditText
|
||||
android:id="@+id/search_field"
|
||||
android:layout_marginHorizontal="6dp"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
</LinearLayout>
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/language_list"
|
||||
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"/>
|
||||
</LinearLayout>
|
86
app/src/main/res/layout/locale_settings_dialog.xml
Normal file
86
app/src/main/res/layout/locale_settings_dialog.xml
Normal file
|
@ -0,0 +1,86 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:orientation="vertical"
|
||||
android:showDividers="middle"
|
||||
android:divider="@drawable/ic_divider"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:padding="10dp">
|
||||
<LinearLayout
|
||||
android:id="@+id/subtypes"
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingHorizontal="16dp"
|
||||
android:orientation="horizontal">
|
||||
<TextView
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:layout_gravity="center_vertical"
|
||||
style="@style/PreferenceCategoryTitleText"
|
||||
android:text="@string/keyboard_layout_set"/>
|
||||
<ImageView
|
||||
android:id="@+id/add_subtype"
|
||||
android:padding="6dp"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:src="@drawable/ic_plus" />
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
<LinearLayout
|
||||
android:id="@+id/secondary_languages"
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingHorizontal="16dp"
|
||||
android:orientation="horizontal">
|
||||
<TextView
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:layout_gravity="center_vertical"
|
||||
style="@style/PreferenceCategoryTitleText"
|
||||
android:text="@string/secondary_locale"/>
|
||||
<ImageView
|
||||
android:id="@+id/add_secondary_language"
|
||||
android:padding="6dp"
|
||||
android:visibility="gone"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:src="@drawable/ic_plus" />
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
<LinearLayout
|
||||
android:id="@+id/dictionaries"
|
||||
android:orientation="vertical"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingHorizontal="16dp"
|
||||
android:orientation="horizontal">
|
||||
<TextView
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:layout_gravity="center_vertical"
|
||||
style="@style/PreferenceCategoryTitleText"
|
||||
android:text="@string/dictionary_settings_category"/>
|
||||
<ImageView
|
||||
android:id="@+id/add_dictionary"
|
||||
android:padding="6dp"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:src="@drawable/ic_plus" />
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
|
@ -25,7 +25,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">"Opspring met sleuteldruk"</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"Voorkeure"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"Rekeninge en privaatheid"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">"Voorkoms en uitlegte"</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"Voorkoms en uitlegte"</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">"Gebaarinvoer"</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"Tekskorrigering"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">"Gevorderd"</string>
|
||||
|
@ -231,4 +231,6 @@
|
|||
<string name="day_night_mode_summary">Voorkoms sal sisteem verstellings naboots</string>
|
||||
<string name="amoled_mode">Diep swart agtergronde</string>
|
||||
<string name="amoled_mode_summary">Kan kragverbruik verminder, afhangende van die toestel se skermtegnologie</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"Gebruik stelseltale"</string>
|
||||
<string name="select_input_method">"Verander sleutelbord"</string>
|
||||
</resources>
|
|
@ -28,7 +28,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">"ቁልፍ ጫን ላይ ብቅ ባይ"</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"ምርጫዎች"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"መለያዎች እና ግላዊነት"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">"መልክ እና አቀማመጦች"</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"መልክ እና አቀማመጦች"</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">"በጣት ምልክት መተየብ"</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"ፅሁፍ ማስተካከያ"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">"የላቀ"</string>
|
||||
|
@ -190,4 +190,6 @@
|
|||
<string name="user_dict_settings_more_languages" msgid="7131268499685180461">"ተጨማሪ ቋንቋዎች…"</string>
|
||||
<string name="user_dict_settings_delete" msgid="110413335187193859">"ሰርዝ"</string>
|
||||
<string name="user_dict_fast_scroll_alphabet" msgid="5431919401558285473">" ሀለሐመሠረሰሸቀበቨተቸኀነኘአከኸወዐዘዠየደጀገጠጨጰጸፀፈፐ"</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"የሥርዓት ቋንቋዎችን ይጠቀሙ"</string>
|
||||
<string name="select_input_method">"ቁልፍ ሰሌዳ ይቀይሩ"</string>
|
||||
</resources>
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">نافذة منبثقة عند الضغط على المفاتيح</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"الإعدادات المفضّلة"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"الحسابات والخصوصية"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">"المظهر والتنسيقات"</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"المظهر والتنسيقات"</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">"الكتابة بالإشارة"</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"تصحيح النص"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">"الإعدادات المتقدمة"</string>
|
||||
|
@ -218,4 +218,6 @@
|
|||
<string name="theme_family">سمة العائلة</string>
|
||||
<string name="theme_variant">متغير السمة</string>
|
||||
<string name="key_borders">الحدود الرئيسية</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"استخدام لغات النظام"</string>
|
||||
<string name="select_input_method">"تغيير لوحة المفاتيح"</string>
|
||||
</resources>
|
5
app/src/main/res/values-as/strings.xml
Normal file
5
app/src/main/res/values-as/strings.xml
Normal file
|
@ -0,0 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"ছিষ্টেমৰ ভাষা ব্যৱহাৰ কৰক"</string>
|
||||
<string name="select_input_method">"কীব\'ৰ্ড সলনি কৰক"</string>
|
||||
</resources>
|
5
app/src/main/res/values-ast-rES/strings.xml
Normal file
5
app/src/main/res/values-ast-rES/strings.xml
Normal file
|
@ -0,0 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">Usar les llingües del sistema</string>
|
||||
<string name="select_input_method">Cambéu de tecláu</string>
|
||||
</resources>
|
|
@ -28,7 +28,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">"Klikləmədə popup"</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"Seçimlər"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"Hesablar & Məxfilik"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">"Görünüş & Düzümlər"</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"Görünüş & Düzümlər"</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">"Jest ilə yazma"</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"Mətn korreksiyası"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">"Qabaqcıl"</string>
|
||||
|
@ -190,4 +190,7 @@
|
|||
<string name="user_dict_settings_more_languages" msgid="7131268499685180461">"Digər dillər..."</string>
|
||||
<string name="user_dict_settings_delete" msgid="110413335187193859">"Silin"</string>
|
||||
<string name="user_dict_fast_scroll_alphabet" msgid="5431919401558285473">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"Sistem dillərini istifadə edin"</string>
|
||||
<string name="select_input_method">"Klaviaturanı dəyişin"</string>
|
||||
<string name="settings_screen_appearance">"Görünüş"</string>
|
||||
</resources>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">"Iskačući prozor prilikom pritiska tastera"</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"Podešavanja"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"Nalozi i privatnost"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">"Izgled i rasporedi"</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"Izgled i rasporedi"</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">"Kucanje pokretima"</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"Ispravljanje teksta"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">"Napredno"</string>
|
||||
|
@ -190,4 +190,6 @@
|
|||
<string name="user_dict_settings_more_languages" msgid="7131268499685180461">"Još jezika..."</string>
|
||||
<string name="user_dict_settings_delete" msgid="110413335187193859">"Izbriši"</string>
|
||||
<string name="user_dict_fast_scroll_alphabet" msgid="5431919401558285473">" ABVGDĐEŽZIJKLLJMNNJOPRSTĆUFHCČDŽŠ"</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"Koristi jezike sistema"</string>
|
||||
<string name="select_input_method">"Promenite tastaturu"</string>
|
||||
</resources>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">"Па націску на клавішы ўсплывае акно"</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"Параметры"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"Улік. запісы і прыватнасць"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">"Знешні выгляд і раскладкі"</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"Знешні выгляд і раскладкі"</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">"Жэставы набор"</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"Выпраўленне тэксту"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">"Дадатковыя"</string>
|
||||
|
@ -209,4 +209,6 @@
|
|||
<string name="about_github_link" >Паглядзець на GitHub</string>
|
||||
<string name="license" >Ліцэнзія з адкрытым зыходным кодам</string>
|
||||
<string name="gnu_gpl" >GNU General Public License v3.0</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"Выкарыстоўваць мовы сістэмы"</string>
|
||||
<string name="select_input_method">"Змяніць клавіятуру"</string>
|
||||
</resources>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">"Изск. прозорец при натискане на клавиш"</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"Предпочитания"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"Профили и поверителност"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">"Облик и оформления"</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"Облик и оформления"</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">"Въвеждане чрез жест"</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"Коригиране на текст"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">"Разширени"</string>
|
||||
|
@ -190,4 +190,6 @@
|
|||
<string name="user_dict_settings_more_languages" msgid="7131268499685180461">"Още езици…"</string>
|
||||
<string name="user_dict_settings_delete" msgid="110413335187193859">"Изтриване"</string>
|
||||
<string name="user_dict_fast_scroll_alphabet" msgid="5431919401558285473">" АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЪЮЯ"</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"Използване на системните езици"</string>
|
||||
<string name="select_input_method">"Промяна на клавиатурата"</string>
|
||||
</resources>
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
<string name="popup_on_keypress">কিপ্রেস পপআপ</string>
|
||||
<string name="settings_screen_preferences">পছন্দসমূহ</string>
|
||||
<string name="settings_screen_accounts">অ্যাকাউন্ট ও গোপনীয়তা</string>
|
||||
<string name="settings_screen_appearance">অবয়ব ও লেআউট</string>
|
||||
<string name="settings_screen_appearance_and_layouts">অবয়ব ও লেআউট</string>
|
||||
<string name="settings_screen_gesture">অঙ্গুলিহেলন টাইপিং</string>
|
||||
<string name="settings_screen_correction">পাঠ্য সংশোধন</string>
|
||||
<string name="settings_screen_advanced">উন্নত</string>
|
||||
|
@ -285,4 +285,7 @@
|
|||
<string name="license">ওপেন-সোর্স লাইসেন্স</string>
|
||||
<string name="gnu_gpl">জিএনইউ জেনারেল পাবলিক লাইসেন্স তৃতীয় সংস্করণ</string>
|
||||
<string name="prefs_narrow_key_gaps">বোতামের বিভাজন সংকীর্ণকরণ</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"সিস্টেমের ভাষাগুলি ব্যবহার করুন"</string>
|
||||
<string name="select_input_method">"কীবোর্ড পরিবর্তন করুন"</string>
|
||||
<string name="settings_screen_appearance">"উপস্থিতি"</string>
|
||||
</resources>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">"Iskačuči prozor pri pritisku na tipku"</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"Postavke"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"Računi i privatnost"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">"Izgled i rasporedi tipki"</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"Izgled i rasporedi tipki"</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">"Pisanje pokretima"</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"Ispravka teksta"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">"Napredno"</string>
|
||||
|
@ -190,4 +190,6 @@
|
|||
<string name="user_dict_settings_more_languages" msgid="7131268499685180461">"Više jezika…"</string>
|
||||
<string name="user_dict_settings_delete" msgid="110413335187193859">"Izbriši"</string>
|
||||
<string name="user_dict_fast_scroll_alphabet" msgid="5431919401558285473">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"Koristi jezik sistema"</string>
|
||||
<string name="select_input_method">"Promijeni tastaturu"</string>
|
||||
</resources>
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">"Amplia en prémer tecles"</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"Preferències"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"Comptes i privadesa"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">"Aparença i disposició"</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"Aparença i disposició"</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">"Escriptura gestual"</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"Correcció de textos"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">"Avançada"</string>
|
||||
|
@ -231,4 +231,6 @@
|
|||
<string name="prefs_resize_keyboard">Activa la redimensió del teclat</string>
|
||||
<string name="day_night_mode_summary">L\'aspecte seguirà la configuració del sistema.</string>
|
||||
<string name="subtype_no_language_colemak_dh">Alfabètic (Colemak Mod-DH)</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"Utilitza els idiomes del sistema"</string>
|
||||
<string name="select_input_method">"Canvia el teclat"</string>
|
||||
</resources>
|
|
@ -28,7 +28,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">"Detail znaku při stisku klávesy"</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"Předvolby"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"Účty a ochrana soukromí"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">"Vzhled a rozvržení"</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"Vzhled a rozvržení"</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">"Psaní gesty"</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"Oprava textu"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">"Rozšířená nastavení"</string>
|
||||
|
@ -190,4 +190,6 @@
|
|||
<string name="user_dict_settings_more_languages" msgid="7131268499685180461">"Další jazyky…"</string>
|
||||
<string name="user_dict_settings_delete" msgid="110413335187193859">"Smazat"</string>
|
||||
<string name="user_dict_fast_scroll_alphabet" msgid="5431919401558285473">" ABCČDEFGHChIJKLMNOPQRŘSŠTUVWXYZŽ"</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"Použít systémové jazyky"</string>
|
||||
<string name="select_input_method">"Změna klávesnice"</string>
|
||||
</resources>
|
||||
|
|
5
app/src/main/res/values-cy/strings.xml
Normal file
5
app/src/main/res/values-cy/strings.xml
Normal file
|
@ -0,0 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">Defnyddio ieithoedd y system</string>
|
||||
<string name="select_input_method">Newid bysellfwrdd</string>
|
||||
</resources>
|
|
@ -25,7 +25,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">"Pop op ved tastetryk"</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"Præferencer"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"Konti og privatliv"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">"Udseende og layouts"</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"Udseende og layouts"</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">"Glidende indtastning"</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"Tekstkorrigering"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">"Avanceret"</string>
|
||||
|
@ -231,4 +231,6 @@
|
|||
<string name="prefs_force_incognito_mode_summary">Deaktiver indlæring af nye ord</string>
|
||||
<string name="more_keys_strip_description">Flere taster</string>
|
||||
<string name="show_hints_summary">Vis tips med lange tryk</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"Brug systemsprogene"</string>
|
||||
<string name="select_input_method">"Skift tastatur"</string>
|
||||
</resources>
|
|
@ -28,7 +28,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">"Bei Tastendruck Pop-up"</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"Einstellungen"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"Konten & Datenschutz"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">"Darstellung & Layouts"</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"Darstellung & Layouts"</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">"Bewegungseingabe"</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"Textkorrektur"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">"Erweitert"</string>
|
||||
|
@ -190,4 +190,6 @@
|
|||
<string name="user_dict_settings_more_languages" msgid="7131268499685180461">"Weitere Sprachen..."</string>
|
||||
<string name="user_dict_settings_delete" msgid="110413335187193859">"Löschen"</string>
|
||||
<string name="user_dict_fast_scroll_alphabet" msgid="5431919401558285473">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"Systemsprache verwenden"</string>
|
||||
<string name="select_input_method">"Tastatur ändern"</string>
|
||||
</resources>
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">"Εμφάνιση με το πάτημα πλήκτρου"</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"Προτιμήσεις"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"Λογαριασμοί και απόρρητο"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">"Εμφάνιση και διάταξη"</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"Εμφάνιση και διάταξη"</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">"Πληκτρολόγηση με κίνηση"</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"Διόρθωση κειμένου"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">"Σύνθετες"</string>
|
||||
|
@ -231,4 +231,6 @@
|
|||
<string name="show_hints_summary">Εμφάνιση υποδείξεων με παρατεταμένο πάτημα</string>
|
||||
<string name="show_clipboard_key">Πλήκτρο προχείρου</string>
|
||||
<string name="theme_family">Θέμα οικογένεια</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"Χρήση γλωσσών συστήματος"</string>
|
||||
<string name="select_input_method">"Αλλαγή πληκτρολογίου"</string>
|
||||
</resources>
|
|
@ -28,7 +28,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">"Pop-up on key press"</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"Preferences"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"Accounts & Privacy"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">"Appearance & Layouts"</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"Appearance & Layouts"</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">"Gesture Typing"</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"Text correction"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">"Advanced"</string>
|
||||
|
@ -190,4 +190,6 @@
|
|||
<string name="user_dict_settings_more_languages" msgid="7131268499685180461">"More languages…"</string>
|
||||
<string name="user_dict_settings_delete" msgid="110413335187193859">"Delete"</string>
|
||||
<string name="user_dict_fast_scroll_alphabet" msgid="5431919401558285473">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"Use system languages"</string>
|
||||
<string name="select_input_method">"Change keyboard"</string>
|
||||
</resources>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">"Pop-up on key press"</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"Preferences"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"Accounts & Privacy"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">"Appearance & Layouts"</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"Appearance & Layouts"</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">"Gesture Typing"</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"Text correction"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">"Advanced"</string>
|
||||
|
@ -190,4 +190,6 @@
|
|||
<string name="user_dict_settings_more_languages" msgid="7131268499685180461">"More languages…"</string>
|
||||
<string name="user_dict_settings_delete" msgid="110413335187193859">"Delete"</string>
|
||||
<string name="user_dict_fast_scroll_alphabet" msgid="5431919401558285473">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"Use system languages"</string>
|
||||
<string name="select_input_method">"Change keyboard"</string>
|
||||
</resources>
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">"Pop-up on key press"</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"Preferences"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"Accounts & Privacy"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">"Appearance & Layouts"</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"Appearance & Layouts"</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">"Gesture Typing"</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"Text correction"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">"Advanced"</string>
|
||||
|
@ -231,4 +231,7 @@
|
|||
<string name="subtype_with_layout_bn_BD"><xliff:g id="LANGUAGE_NAME" example="Bangla">%s</xliff:g> (Akkhor)</string>
|
||||
<string name="autospace_after_punctuation">Autospace after punctuation</string>
|
||||
<string name="autospace_after_punctuation_summary">Automatically insert space after punctuation when typing a new word</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"Use system languages"</string>
|
||||
<string name="select_input_method">"Change keyboard"</string>
|
||||
<string name="settings_screen_appearance">"Appearance"</string>
|
||||
</resources>
|
|
@ -28,7 +28,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">"Pop-up on key press"</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"Preferences"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"Accounts & Privacy"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">"Appearance & Layouts"</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"Appearance & Layouts"</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">"Gesture Typing"</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"Text correction"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">"Advanced"</string>
|
||||
|
@ -190,4 +190,7 @@
|
|||
<string name="user_dict_settings_more_languages" msgid="7131268499685180461">"More languages…"</string>
|
||||
<string name="user_dict_settings_delete" msgid="110413335187193859">"Delete"</string>
|
||||
<string name="user_dict_fast_scroll_alphabet" msgid="5431919401558285473">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"Use system languages"</string>
|
||||
<string name="select_input_method">"Change keyboard"</string>
|
||||
<string name="settings_screen_appearance">"Appearance"</string>
|
||||
</resources>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">"Popup on keypress"</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"Preferences"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"Accounts & Privacy"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">"Appearance & Layouts"</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"Appearance & Layouts"</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">"Gesture Typing"</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"Text correction"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">"Advanced"</string>
|
||||
|
@ -190,4 +190,6 @@
|
|||
<string name="user_dict_settings_more_languages" msgid="7131268499685180461">"More languages…"</string>
|
||||
<string name="user_dict_settings_delete" msgid="110413335187193859">"Delete"</string>
|
||||
<string name="user_dict_fast_scroll_alphabet" msgid="5431919401558285473">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"Use system languages"</string>
|
||||
<string name="select_input_method">"Change keyboard"</string>
|
||||
</resources>
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">"Ampliar al presionar teclas"</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"Preferencias"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"Cuentas y privacidad"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">"Apariencia y diseños"</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"Apariencia y diseños"</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">"Escritura gestual"</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"Corrección ortográfica"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">"Avanzada"</string>
|
||||
|
@ -228,4 +228,6 @@
|
|||
<string name="settings_category_input">Entrada</string>
|
||||
<string name="settings_category_additional_keys">Teclas adicionales</string>
|
||||
<string name="settings_category_correction">Correcciones</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"Usar idiomas del sistema"</string>
|
||||
<string name="select_input_method">"Cambiar el teclado"</string>
|
||||
</resources>
|
|
@ -25,7 +25,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">"Ampliar al pulsar tecla"</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"Preferencias"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"Cuentas y privacidad"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">"Aspecto y diseño"</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"Aspecto y diseño"</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">"Escritura gestual"</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">Corrección de texto</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">"Ajustes avanzados"</string>
|
||||
|
@ -231,4 +231,6 @@
|
|||
<string name="enable_clipboard_history_summary">Si está deshabilitada, la tecla del portapapeles pegará el contenido del portapapeles, si lo hay</string>
|
||||
<string name="autospace_after_punctuation">Espacio automático después del punto</string>
|
||||
<string name="autospace_after_punctuation_summary">Insertar un espacio automático después del punto cuando se escriba una nueva palabra</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"Usar idiomas del sistema"</string>
|
||||
<string name="select_input_method">"Cambiar teclado"</string>
|
||||
</resources>
|
|
@ -28,7 +28,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">"Klahvivajutusel kuva hüpik"</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"Eelistused"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"Kontod ja privaatsus"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">"Välimus ja paigutused"</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"Välimus ja paigutused"</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">"Joonistusega sisestamine"</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"Teksti korrigeerimine"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">"Täpsemad"</string>
|
||||
|
@ -190,4 +190,6 @@
|
|||
<string name="user_dict_settings_more_languages" msgid="7131268499685180461">"Rohkem keeli ..."</string>
|
||||
<string name="user_dict_settings_delete" msgid="110413335187193859">"Kustuta"</string>
|
||||
<string name="user_dict_fast_scroll_alphabet" msgid="5431919401558285473">" ABCDEFGHIJKLMNOPQRSŠZŽTUVWÕÄÖÜXY"</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"Kasuta süsteemi keeli"</string>
|
||||
<string name="select_input_method">"Klaviatuuri muutmine"</string>
|
||||
</resources>
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">"Handitu teklak, sakatzean"</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"Hobespenak"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"Kontuak eta pribatutasuna"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">"Itxura eta diseinuak"</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"Itxura eta diseinuak"</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">"Idazketa lerrakorra"</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"Testu-zuzenketa"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">"Ezarpen aurreratuak"</string>
|
||||
|
@ -231,4 +231,6 @@
|
|||
<string name="theme_family">Gaien familia</string>
|
||||
<string name="subtype_no_language_colemak_dh">Alfabeto (Colemak Mod-DH)</string>
|
||||
<string name="subtype_no_language_workman">Alfabeto (Workman)</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"Erabili sistemaren hizkuntzak"</string>
|
||||
<string name="select_input_method">"Aldatu teklatua"</string>
|
||||
</resources>
|
|
@ -28,7 +28,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">"بازشدن با فشار کلید"</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"تنظیمات برگزیده"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"حسابها و حریم خصوصی"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">"شکل ظاهری و چیدمان"</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"شکل ظاهری و چیدمان"</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">"ورودی اشارهای"</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"اصلاح نوشتار"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">"پیشرفته"</string>
|
||||
|
@ -190,4 +190,6 @@
|
|||
<string name="user_dict_settings_more_languages" msgid="7131268499685180461">"زبانهای بیشتر…"</string>
|
||||
<string name="user_dict_settings_delete" msgid="110413335187193859">"حذف"</string>
|
||||
<string name="user_dict_fast_scroll_alphabet" msgid="5431919401558285473">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"استفاده از زبانهای سیستم"</string>
|
||||
<string name="select_input_method">"تغییر صفحهکلید"</string>
|
||||
</resources>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">"Ponnahdusikkuna painalluksella"</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"Asetukset"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"Tilit ja tietosuoja"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">"Ulkoasu ja asettelut"</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"Ulkoasu ja asettelut"</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">"Piirtokirjoitus"</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"Tekstin korjaus"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">"Lisäasetukset"</string>
|
||||
|
@ -190,4 +190,7 @@
|
|||
<string name="user_dict_settings_more_languages" msgid="7131268499685180461">"Lisää kieliä…"</string>
|
||||
<string name="user_dict_settings_delete" msgid="110413335187193859">"Poista"</string>
|
||||
<string name="user_dict_fast_scroll_alphabet" msgid="5431919401558285473">" ABCDEFGHIJKLMNOPQRSTUVWXYZÅÄÖ"</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"Käytä järjestelmän kieliä"</string>
|
||||
<string name="select_input_method">"Vaihda näppäimistö"</string>
|
||||
<string name="settings_screen_appearance">"Ulkonäkö"</string>
|
||||
</resources>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">"Agrandir les caractères"</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"Préférences"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"Comptes et confidentialité"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">"Apparence et dispositions"</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"Apparence et dispositions"</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">"Entrée gestuelle"</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"Correction du texte"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">"Avancés"</string>
|
||||
|
@ -190,4 +190,6 @@
|
|||
<string name="user_dict_settings_more_languages" msgid="7131268499685180461">"Plus de langues…"</string>
|
||||
<string name="user_dict_settings_delete" msgid="110413335187193859">"Supprimer"</string>
|
||||
<string name="user_dict_fast_scroll_alphabet" msgid="5431919401558285473">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"Utiliser les langues du système"</string>
|
||||
<string name="select_input_method">"Changer de clavier"</string>
|
||||
</resources>
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">"Agrandir les caractères"</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"Préférences"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"Comptes et confidentialité"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">"Apparence et dispositions"</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"Apparence et dispositions"</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">"Saisie gestuelle"</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"Correction du texte"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">"Paramètres avancés"</string>
|
||||
|
@ -231,4 +231,6 @@
|
|||
<string name="subtype_with_layout_bn_BD"><xliff:g id="LANGUAGE_NAME" example="Bangla">%s</xliff:g> (Akkhor)</string>
|
||||
<string name="autospace_after_punctuation">Espace auto après la ponctuation</string>
|
||||
<string name="autospace_after_punctuation_summary">Insertion automatique d\'un espace après la ponctuation lors de la saisie d\'un nouveau mot</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"Utiliser les langues du système"</string>
|
||||
<string name="select_input_method">"Changer de clavier"</string>
|
||||
</resources>
|
5
app/src/main/res/values-gd/strings.xml
Normal file
5
app/src/main/res/values-gd/strings.xml
Normal file
|
@ -0,0 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">Cleachd cànain an t-siostaim</string>
|
||||
<string name="select_input_method">Atharraich am meur-chlàr</string>
|
||||
</resources>
|
|
@ -28,7 +28,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">"Ventás emerxentes ao premer as teclas"</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"Preferencias"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"Contas e privacidade"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">"Aparencia e deseños"</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"Aparencia e deseños"</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">"Escritura por xestos"</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"Corrección ortográfica"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">"Configuración avanzada"</string>
|
||||
|
@ -190,4 +190,6 @@
|
|||
<string name="user_dict_settings_more_languages" msgid="7131268499685180461">"Máis idiomas..."</string>
|
||||
<string name="user_dict_settings_delete" msgid="110413335187193859">"Eliminar"</string>
|
||||
<string name="user_dict_fast_scroll_alphabet" msgid="5431919401558285473">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"Usar idiomas do sistema"</string>
|
||||
<string name="select_input_method">"Cambiar teclado"</string>
|
||||
</resources>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">"કીપ્રેસ પર પોપઅપ"</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"પસંદગી"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"એકાઉન્ટ્સ અને ગોપનીયતા"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">"દેખાવ અને લેઆઉટ્સ"</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"દેખાવ અને લેઆઉટ્સ"</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">"સાંકેતિક ટાઇપિંગ"</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"ટેક્સ્ટ સુધારણા"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">"વિગતવાર"</string>
|
||||
|
@ -190,4 +190,6 @@
|
|||
<string name="user_dict_settings_more_languages" msgid="7131268499685180461">"વધુ ભાષાઓ…"</string>
|
||||
<string name="user_dict_settings_delete" msgid="110413335187193859">"કાઢી નાખો"</string>
|
||||
<string name="user_dict_fast_scroll_alphabet" msgid="5431919401558285473">" [અ આ ઇ ઈ ઉ ઊ ઋ એ ઐ ઓ ઔ ક ખ ગ ઘ ઙ ચ છ જ ઝ ઞ ટ ઠ ડ ઢ ણ ત થ દ ધ ન પ ફ બ ભ મ ય ર લ વ શ ષ સ હ ળ]"</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"સિસ્ટમ ભાષાઓનો ઉપયોગ કરો"</string>
|
||||
<string name="select_input_method">"કીબોર્ડ બદલો"</string>
|
||||
</resources>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">"बटन दबाने पर पॉपअप दिखाएं"</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"प्राथमिकताएं"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"खाते और निजता"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">"दिखावट और सज्जा"</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"दिखावट और सज्जा"</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">"संकेतोें द्वारा टाइपिंग"</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"लेख सुधार"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">"बेहतर सेटिंग"</string>
|
||||
|
@ -190,4 +190,6 @@
|
|||
<string name="user_dict_settings_more_languages" msgid="7131268499685180461">"ज़्यादा भाषाएं…"</string>
|
||||
<string name="user_dict_settings_delete" msgid="110413335187193859">"मिटाएं"</string>
|
||||
<string name="user_dict_fast_scroll_alphabet" msgid="5431919401558285473">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"सिस्टम की भाषाओं का उपयोग करें"</string>
|
||||
<string name="select_input_method">"कीबोर्ड बदलें"</string>
|
||||
</resources>
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">Povećana tipka pri pritisku tipke</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">Osobitosti</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"Računi i privatnost"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">"Izgled i rasporedi"</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"Izgled i rasporedi"</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">Tipkanje gestama</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"Ispravljanje teksta"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">Napredno</string>
|
||||
|
@ -231,4 +231,6 @@
|
|||
<string name="amoled_mode">Tamnocrne pozadine</string>
|
||||
<string name="show_clipboard_key">Tipka međuspremnika</string>
|
||||
<string name="number_row">Broj retka</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"Upotrijebi jezike sustava"</string>
|
||||
<string name="select_input_method">"Promjena tipkovnice"</string>
|
||||
</resources>
|
|
@ -28,7 +28,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">"Nagyobb billentyű gombnyomásra"</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"Beállítások"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"Fiókok és adatvédelem"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">"Megjelenés és elrendezés"</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"Megjelenés és elrendezés"</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">"Kézmozdulatokkal történő gépelés"</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"Szövegjavítás"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">"Speciális"</string>
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">"Nagyobb billentyű gombnyomásra"</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"Beállítások"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"Fiókok és adatvédelem"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">"Megjelenés és elrendezés"</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"Megjelenés és elrendezés"</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">"Kézmozdulatokkal történő gépelés"</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"Szövegjavítás"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">"Speciális"</string>
|
||||
|
@ -193,4 +193,6 @@
|
|||
<string name="subtype_no_language_colemak_dh">Ábécé (Colemak Mod-DH)</string>
|
||||
<string name="subtype_no_language_workman">Ábécé (Workman)</string>
|
||||
<string name="day_night_mode_summary">A kinézet követi a rendszerbeállítást</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"Rendszernyelvek használata"</string>
|
||||
<string name="select_input_method">"Billentyűzet megváltoztatása"</string>
|
||||
</resources>
|
|
@ -28,7 +28,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">"Ելնող պատուհան՝ ստեղնի հպման դեպքում"</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"Նախընտրանքներ"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"Հաշիվներ և գաղտնիություն"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">"Արտաքին տեսք և դասավորություն"</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"Արտաքին տեսք և դասավորություն"</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">"Ժեստերով մուտքագրում"</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"Տեքստի ուղղում"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">"Հավելյալ"</string>
|
||||
|
@ -190,4 +190,7 @@
|
|||
<string name="user_dict_settings_more_languages" msgid="7131268499685180461">"Ավելի շատ լեզուներով..."</string>
|
||||
<string name="user_dict_settings_delete" msgid="110413335187193859">"Ջնջել"</string>
|
||||
<string name="user_dict_fast_scroll_alphabet" msgid="5431919401558285473">" ԱԲԳԴԵԶԷԸԹԺԻԼԽԾԿՀՁՂՃՄՅՆՇՈՉՊՋՌՍՎՏՐՑՈՒՓՔԵւՕՖ"</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"Օգտագործել համակարգի լեզուները"</string>
|
||||
<string name="select_input_method">"Փոխել ստեղնաշարը"</string>
|
||||
<string name="settings_screen_appearance">"Արտաքին տեսք"</string>
|
||||
</resources>
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">"Muncul saat tombol ditekan"</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"Preferensi"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"Akun & Privasi"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">"Tampilan & Tata Letak"</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"Tampilan & Tata Letak"</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">"Ketikan Gestur"</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"Koreksi teks"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">"Lanjutan"</string>
|
||||
|
@ -231,4 +231,6 @@
|
|||
<string name="subtype_with_layout_bn_BD"><xliff:g id="LANGUAGE_NAME" example="Bangla">%s</xliff:g> (Akkhor)</string>
|
||||
<string name="autospace_after_punctuation">Spasi otomatis setelah tanda baca</string>
|
||||
<string name="autospace_after_punctuation_summary">Otomatis sisipkan spasi setelah tanda baca saat mengetik kata baru</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"Gunakan bahasa sistem"</string>
|
||||
<string name="select_input_method">"Ubah keyboard"</string>
|
||||
</resources>
|
|
@ -28,7 +28,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">"Stækkaðir stafir við innslátt"</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"Kjörstillingar"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"Reikningar og persónuvernd"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">"Útlit og uppsetning"</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"Útlit og uppsetning"</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">"Bendingainnsláttur"</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"Textaleiðrétting"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">"Ítarlegt"</string>
|
||||
|
@ -190,4 +190,7 @@
|
|||
<string name="user_dict_settings_more_languages" msgid="7131268499685180461">"Fleiri tungumál…"</string>
|
||||
<string name="user_dict_settings_delete" msgid="110413335187193859">"Eyða"</string>
|
||||
<string name="user_dict_fast_scroll_alphabet" msgid="5431919401558285473">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"Nota kerfistungumál"</string>
|
||||
<string name="select_input_method">"Skipta um lyklaborð"</string>
|
||||
<string name="settings_screen_appearance">"Útlit"</string>
|
||||
</resources>
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">"Popup tasti"</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"Preferenze"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"Account e privacy"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">"Aspetto e layout"</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"Aspetto e layout"</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">"Digitazione gestuale"</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"Correzione testo"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">"Avanzate"</string>
|
||||
|
@ -231,4 +231,6 @@
|
|||
<string name="theme_variant">Variante tema</string>
|
||||
<string name="key_borders">Bordi tasto</string>
|
||||
<string name="day_night_mode">Modalità giorno/notte automatica</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"Utilizza le lingue di sistema"</string>
|
||||
<string name="select_input_method">"Cambia tastiera"</string>
|
||||
</resources>
|
|
@ -25,7 +25,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">"חלון קופץ בלחיצה על מקש"</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"העדפות"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"חשבונות ופרטיות"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">"מראה ופריסות"</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"מראה ופריסות"</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">"הקלדה רציפה"</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"תיקון טקסט"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">"אפשרויות מתקדמות"</string>
|
||||
|
@ -231,4 +231,7 @@
|
|||
<string name="prefs_force_incognito_mode_summary">השבת למידה של מילים חדשות</string>
|
||||
<string name="more_keys_strip_description">עוד מפתחות</string>
|
||||
<string name="amoled_mode">רקע שחור עמוק</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"שימוש בשפות מערכת"</string>
|
||||
<string name="select_input_method">"שינוי מקלדת"</string>
|
||||
<string name="settings_screen_appearance">"מראה"</string>
|
||||
</resources>
|
|
@ -28,7 +28,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">"キー押下時ポップアップ"</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"設定"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"アカウントとプライバシー"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">"外観とレイアウト"</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"外観とレイアウト"</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">"ジェスチャー入力"</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"テキストの修正"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">"詳細設定"</string>
|
||||
|
@ -190,4 +190,6 @@
|
|||
<string name="user_dict_settings_more_languages" msgid="7131268499685180461">"その他の言語…"</string>
|
||||
<string name="user_dict_settings_delete" msgid="110413335187193859">"削除"</string>
|
||||
<string name="user_dict_fast_scroll_alphabet" msgid="5431919401558285473">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"システム言語を使用"</string>
|
||||
<string name="select_input_method">"キーボードの変更"</string>
|
||||
</resources>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">"გადიდება ღილაკზე დაჭერისას"</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"პარამეტრები"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"ანგარიშები & კონფიდენციალურობა"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">"იერსახე & განლაგებები"</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"იერსახე & განლაგებები"</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">"ჟესტებით წერა"</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"ტექსტის კორექცია"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">"გაფართოებული"</string>
|
||||
|
@ -190,4 +190,7 @@
|
|||
<string name="user_dict_settings_more_languages" msgid="7131268499685180461">"სხვა ენები…"</string>
|
||||
<string name="user_dict_settings_delete" msgid="110413335187193859">"წაშლა"</string>
|
||||
<string name="user_dict_fast_scroll_alphabet" msgid="5431919401558285473">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"სისტემის ენების გამოყენება"</string>
|
||||
<string name="select_input_method">"კლავიატურის შეცვლა"</string>
|
||||
<string name="settings_screen_appearance">"იერსახე"</string>
|
||||
</resources>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">"Басылған пернені үлкейтіп көрсету"</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"Қалауларыңыз"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"Есептік жазбалар және құпиялылық"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">"Сыртқы түр және орналасулар"</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"Сыртқы түр және орналасулар"</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">"Қимыл арқылы теру"</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"Мәтінді түзету"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">"Қосымша"</string>
|
||||
|
@ -190,4 +190,6 @@
|
|||
<string name="user_dict_settings_more_languages" msgid="7131268499685180461">"Қосымша тілдер…"</string>
|
||||
<string name="user_dict_settings_delete" msgid="110413335187193859">"Жою"</string>
|
||||
<string name="user_dict_fast_scroll_alphabet" msgid="5431919401558285473">" АӘБВГҒДЕЁЖЗИЙКҚЛМНҢОӨПРСТУҰҮФХҺЦЧШЩЪЫІЬЭЮЯ"</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"Жүйелік тілдерді пайдалану"</string>
|
||||
<string name="select_input_method">"Пернетақтаны өзгерту"</string>
|
||||
</resources>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">"លេចឡើងនៅពេលចុចគ្រាប់ចុច"</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"ចំណូលចិត្ត"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"គណនី &amp ភាពឯកជន"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">"រូបរាង &amp ប្លង់"</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"រូបរាង &amp ប្លង់"</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">"កាយវិការបញ្ចូល"</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"ការកែអត្ថបទ"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">"កម្រិតខ្ពស់"</string>
|
||||
|
@ -190,4 +190,7 @@
|
|||
<string name="user_dict_settings_more_languages" msgid="7131268499685180461">"ភាសាច្រើនទៀត…"</string>
|
||||
<string name="user_dict_settings_delete" msgid="110413335187193859">"លុប"</string>
|
||||
<string name="user_dict_fast_scroll_alphabet" msgid="5431919401558285473">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"ប្រើភាសាប្រព័ន្ធ"</string>
|
||||
<string name="select_input_method">"ប្ដូរក្ដារចុច"</string>
|
||||
<string name="settings_screen_appearance">"រូបរាង"</string>
|
||||
</resources>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">"ಕೀಪ್ರೆಸ್ನಲ್ಲಿ ಪಾಪ್ಅಪ್"</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"ಪ್ರಾಶಸ್ತ್ಯಗಳು"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"ಖಾತೆಗಳು ಮತ್ತು ಗೌಪ್ಯತೆ"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">"ಗೋಚರತೆ ಮತ್ತು ಲೇಔಟ್ಗಳು"</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"ಗೋಚರತೆ ಮತ್ತು ಲೇಔಟ್ಗಳು"</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">"ಗೆಸ್ಚರ್ ಟೈಪಿಂಗ್"</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"ಪಠ್ಯ ತಿದ್ದುಪಡಿ"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">"ಸುಧಾರಿತ"</string>
|
||||
|
@ -190,4 +190,6 @@
|
|||
<string name="user_dict_settings_more_languages" msgid="7131268499685180461">"ಇನ್ನಷ್ಟು ಭಾಷೆಗಳು…"</string>
|
||||
<string name="user_dict_settings_delete" msgid="110413335187193859">"ಅಳಿಸಿ"</string>
|
||||
<string name="user_dict_fast_scroll_alphabet" msgid="5431919401558285473">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"ಸಿಸ್ಟಂ ಭಾಷೆಗಳನ್ನು ಬಳಸಿ"</string>
|
||||
<string name="select_input_method">"ಕೀಬೋರ್ಡ್ ಬದಲಿಸಿ"</string>
|
||||
</resources>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">"키를 누를 때 팝업"</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"환경설정"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"계정 및 개인정보 보호"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">"모양 및 레이아웃"</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"모양 및 레이아웃"</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">"제스처 타이핑"</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"텍스트 수정"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">"고급"</string>
|
||||
|
@ -190,4 +190,6 @@
|
|||
<string name="user_dict_settings_more_languages" msgid="7131268499685180461">"더보기…"</string>
|
||||
<string name="user_dict_settings_delete" msgid="110413335187193859">"삭제"</string>
|
||||
<string name="user_dict_fast_scroll_alphabet" msgid="5431919401558285473">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"시스템 언어 사용"</string>
|
||||
<string name="select_input_method">"키보드 변경"</string>
|
||||
</resources>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">"Баскыч басылганда калкып чыкма"</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"Мүмкүнчүлүктөрдү тандоо"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"Аккаунттар"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">"Көрүнүш жана жайгашуулар"</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"Көрүнүш жана жайгашуулар"</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">"Жаңсап терүү"</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"Текстти оңдоо"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">"Өркүндөтүлгөн"</string>
|
||||
|
@ -190,4 +190,6 @@
|
|||
<string name="user_dict_settings_more_languages" msgid="7131268499685180461">"Дагы тилдер…"</string>
|
||||
<string name="user_dict_settings_delete" msgid="110413335187193859">"Жок кылуу"</string>
|
||||
<string name="user_dict_fast_scroll_alphabet" msgid="5431919401558285473">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"Тутум тилдерин колдонуу"</string>
|
||||
<string name="select_input_method">"Баскычтопту өзгөртүү"</string>
|
||||
</resources>
|
||||
|
|
4
app/src/main/res/values-lb/strings.xml
Normal file
4
app/src/main/res/values-lb/strings.xml
Normal file
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="select_input_method">Tastatur wiesselen</string>
|
||||
</resources>
|
|
@ -28,7 +28,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">"ໂຕອັກສອນເວລາພິມ"</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"ການຕັ້ງຄ່າ"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"ບັນຊີ ແລະ ຄວາມເປັນສ່ວນຕົວ"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">"ລັກສະນະ & ໂຄງຮ່າງ"</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"ລັກສະນະ & ໂຄງຮ່າງ"</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">"ການພິມແບບລາກນິ້ວ"</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"ການແປງຄຳໃຫ້ຖືກຕ້ອງ"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">"ຂັ້ນສູງ"</string>
|
||||
|
@ -190,4 +190,7 @@
|
|||
<string name="user_dict_settings_more_languages" msgid="7131268499685180461">"ພາສາອື່ນໆ..."</string>
|
||||
<string name="user_dict_settings_delete" msgid="110413335187193859">"ລຶບ"</string>
|
||||
<string name="user_dict_fast_scroll_alphabet" msgid="5431919401558285473">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"ໃຊ້ພາສາຂອງລະບົບ"</string>
|
||||
<string name="select_input_method">"ປ່ຽນແປ້ນພິມ"</string>
|
||||
<string name="settings_screen_appearance">"ຮູບແບບໜ້າຕາ"</string>
|
||||
</resources>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">"Iššoka paspaudus klavišą"</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"Nuostatos"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"Paskyros ir privatumas"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">"Išvaizda ir išdėstymai"</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"Išvaizda ir išdėstymai"</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">"Įvestis gestais"</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"Teksto taisymas"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">"Išplėstiniai"</string>
|
||||
|
@ -192,4 +192,6 @@
|
|||
<string name="user_dict_settings_more_languages" msgid="7131268499685180461">"Daugiau kalbų..."</string>
|
||||
<string name="user_dict_settings_delete" msgid="110413335187193859">"Ištrinti"</string>
|
||||
<string name="user_dict_fast_scroll_alphabet" msgid="5431919401558285473">" AĄBCČDEĘĖFGHIĮYJKLMNOPRSŠTUŲŪVZŽ"</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"Sistemos kalbų naudojimas"</string>
|
||||
<string name="select_input_method">"Klaviatūros keitimas"</string>
|
||||
</resources>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">"Parādās, nospiežot taustiņu"</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"Preferences"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"Konti un konfidencialitāte"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">"Izskats un izkārtojumi"</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"Izskats un izkārtojumi"</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">"Ievadīt ar žestiem"</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"Teksta korekcija"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">"Papildu"</string>
|
||||
|
@ -190,4 +190,6 @@
|
|||
<string name="user_dict_settings_more_languages" msgid="7131268499685180461">"Citas valodas..."</string>
|
||||
<string name="user_dict_settings_delete" msgid="110413335187193859">"Dzēst"</string>
|
||||
<string name="user_dict_fast_scroll_alphabet" msgid="5431919401558285473">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"Sistēmas valodu izmantošana"</string>
|
||||
<string name="select_input_method">"Tastatūras maiņa"</string>
|
||||
</resources>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">"Појавен прозорец на притискање копче"</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"Претпочитани поставки"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"Сметки и приватност"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">"Изглед и распоред"</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"Изглед и распоред"</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">"Пишување со движење"</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"Корекција на текст"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">"Напредни"</string>
|
||||
|
@ -190,4 +190,6 @@
|
|||
<string name="user_dict_settings_more_languages" msgid="7131268499685180461">"Повеќе јазици..."</string>
|
||||
<string name="user_dict_settings_delete" msgid="110413335187193859">"Избриши"</string>
|
||||
<string name="user_dict_fast_scroll_alphabet" msgid="5431919401558285473">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"Користи ги системските јазици"</string>
|
||||
<string name="select_input_method">"Измени тастатура"</string>
|
||||
</resources>
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">"കീ അമർത്തുമ്പോൾ പോപ്പപ്പ്"</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"മുൻഗണനകൾ"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"അക്കൗണ്ടുകളും സമന്വയവും"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">"രൂപഭാവവും ലേഔട്ടുകളും"</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"രൂപഭാവവും ലേഔട്ടുകളും"</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">"ഗെസ്ചർ ടൈപ്പിംഗ്"</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"ടെക്സ്റ്റ് തിരുത്തൽ"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">"വിപുലം"</string>
|
||||
|
@ -231,4 +231,6 @@
|
|||
<string name="settings_category_input">ഇൻപുട്ട്</string>
|
||||
<string name="settings_category_additional_keys">അധിക കീകൾ</string>
|
||||
<string name="settings_category_correction">തിരുത്തലുകൾ</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"സിസ്റ്റം ഭാഷകൾ ഉപയോഗിക്കുക"</string>
|
||||
<string name="select_input_method">"കീബോഡ് മാറ്റുക"</string>
|
||||
</resources>
|
|
@ -28,7 +28,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">"Товч дарахад попап гарна"</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"Тохируулга"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"Хаяг & Нууцлал"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">"Харагдах байдал & Зураглал"</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"Харагдах байдал & Зураглал"</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">"Зангаагаар бичих"</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"Текст засварлах"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">"Дэлгэрэнгүй"</string>
|
||||
|
@ -190,4 +190,7 @@
|
|||
<string name="user_dict_settings_more_languages" msgid="7131268499685180461">"Өөр хэлүүд…"</string>
|
||||
<string name="user_dict_settings_delete" msgid="110413335187193859">"Устгах"</string>
|
||||
<string name="user_dict_fast_scroll_alphabet" msgid="5431919401558285473">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"Системийн хэлүүдийг ашиглах"</string>
|
||||
<string name="select_input_method">"Гарыг өөрчлөх"</string>
|
||||
<string name="settings_screen_appearance">"Харагдац"</string>
|
||||
</resources>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">"की दाबताना पॉपअप"</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"प्राधान्ये"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"खाती आणि गोपनीयता"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">"स्वरूप आणि लेआउट"</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"स्वरूप आणि लेआउट"</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">"जेश्चर टायपिंग"</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"मजकूर दुरुस्ती"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">"प्रगत"</string>
|
||||
|
@ -190,4 +190,6 @@
|
|||
<string name="user_dict_settings_more_languages" msgid="7131268499685180461">"अधिक भाषा..."</string>
|
||||
<string name="user_dict_settings_delete" msgid="110413335187193859">"हटवा"</string>
|
||||
<string name="user_dict_fast_scroll_alphabet" msgid="5431919401558285473">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"सिस्टम भाषा वापरा"</string>
|
||||
<string name="select_input_method">"कीबोर्ड बदला"</string>
|
||||
</resources>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">"Pop timbul pada tekanan kunci"</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"Pilihan"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"Akaun & Privasi"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">"Penampilan & Bentangan"</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"Penampilan & Bentangan"</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">"Taipan Gerak Isyarat"</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"Pembetulan teks"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">"Lanjutan"</string>
|
||||
|
@ -190,4 +190,7 @@
|
|||
<string name="user_dict_settings_more_languages" msgid="7131268499685180461">"Lebih banyak bahasa..."</string>
|
||||
<string name="user_dict_settings_delete" msgid="110413335187193859">"Padam"</string>
|
||||
<string name="user_dict_fast_scroll_alphabet" msgid="5431919401558285473">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"Gunakan bahasa sistem"</string>
|
||||
<string name="select_input_method">"Tukar papan kekunci"</string>
|
||||
<string name="settings_screen_appearance">"Tampilan"</string>
|
||||
</resources>
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">"ခလုတ်နှိပ်လိုက်သည်နှင့် ပေါ်လာရန်"</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"ရွေးချယ်စရာများ"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"အကောင့်များ & ကိုယ်ပိုင်ကိစ္စ"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">"ပုံပန်းသွင်ပြင် & အပြင်အဆင်များ"</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"ပုံပန်းသွင်ပြင် & အပြင်အဆင်များ"</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">"လှုပ်ရှားမှုဖြင့်စာရိုက်ခြင်း"</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"စာအမှားပြပြင်ခြင်း"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">"အဆင့်မြင့်"</string>
|
||||
|
@ -190,4 +190,6 @@
|
|||
<string name="user_dict_settings_more_languages" msgid="7131268499685180461">"ဘာသာစကားပိုများများ…"</string>
|
||||
<string name="user_dict_settings_delete" msgid="110413335187193859">"ဖျက်ရန်"</string>
|
||||
<string name="user_dict_fast_scroll_alphabet" msgid="5431919401558285473">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"သတ်မှတ် ဘာသာစကားများကို သုံးပါ"</string>
|
||||
<string name="select_input_method">"ကီးဘုတ် ပြောင်းလဲရန်"</string>
|
||||
</resources>
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">"Forgrunnsvindu ved tastetrykk"</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"Innstillinger"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"Kontoer og personvern"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">"Utseende og utforming"</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"Utseende og utforming"</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">Håndvendingsskriving</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"Tekstkorrigering"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">"Avansert"</string>
|
||||
|
@ -222,4 +222,6 @@
|
|||
<string name="key_borders">Tastekanter</string>
|
||||
<string name="theme_family">Draktfamilie</string>
|
||||
<string name="amoled_mode">Svarte bakgrunner</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"Bruk systemspråk"</string>
|
||||
<string name="select_input_method">"Endre tastatur"</string>
|
||||
</resources>
|
|
@ -28,7 +28,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">"कुञ्जी दबाउँदा पपअप"</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"प्राथमिकताहरू"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"खाताहरू तथा गोपनीयता"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">"आवरण तथा लेआउटहरू"</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"आवरण तथा लेआउटहरू"</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">"इशारा टाइपिङ"</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"पाठ सुधार"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">"उन्नत"</string>
|
||||
|
@ -190,4 +190,7 @@
|
|||
<string name="user_dict_settings_more_languages" msgid="7131268499685180461">"थप भाषाहरू..."</string>
|
||||
<string name="user_dict_settings_delete" msgid="110413335187193859">"मेट्नुहोस्"</string>
|
||||
<string name="user_dict_fast_scroll_alphabet" msgid="5431919401558285473">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"प्रणालीका भाषाहरू प्रयोग गर्नुहोस्"</string>
|
||||
<string name="select_input_method">"कुञ्जीपाटी परिवर्तन गर्नुहोस्"</string>
|
||||
<string name="settings_screen_appearance">"उपस्थिति"</string>
|
||||
</resources>
|
||||
|
|
8
app/src/main/res/values-night/colors.xml
Normal file
8
app/src/main/res/values-night/colors.xml
Normal file
|
@ -0,0 +1,8 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<resources xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<!-- Colors for preferences_styles -->
|
||||
<color name="foreground">#FFF</color>
|
||||
<color name="foreground_weak">#BBB</color>
|
||||
<color name="almost_background">#666</color>
|
||||
</resources>
|
|
@ -28,7 +28,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">"Pop-up bij toetsaanslag"</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"Voorkeuren"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"Accounts en privacy"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">"Uiterlijk en lay-out"</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"Uiterlijk en lay-out"</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">"Invoer met bewegingen"</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"Tekstcorrectie"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">"Geavanceerd"</string>
|
||||
|
@ -190,4 +190,6 @@
|
|||
<string name="user_dict_settings_more_languages" msgid="7131268499685180461">"Meer talen…"</string>
|
||||
<string name="user_dict_settings_delete" msgid="110413335187193859">"Verwijderen"</string>
|
||||
<string name="user_dict_fast_scroll_alphabet" msgid="5431919401558285473">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"Systeemtalen gebruiken"</string>
|
||||
<string name="select_input_method">"Toetsenbord wijzigen"</string>
|
||||
</resources>
|
||||
|
|
5
app/src/main/res/values-or/strings.xml
Normal file
5
app/src/main/res/values-or/strings.xml
Normal file
|
@ -0,0 +1,5 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"ସିଷ୍ଟମ୍ ଭାଷା ବ୍ୟବହାର କରନ୍ତୁ"</string>
|
||||
<string name="select_input_method">"କୀ’ବୋର୍ଡ ପରିବର୍ତ୍ତନ କରନ୍ତୁ"</string>
|
||||
</resources>
|
|
@ -28,7 +28,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">"ਕੁੰਜੀ ਦਬਾਉਣ ’ਤੇ ਪੌਪਅੱਪ ਕਰੋ"</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"ਤਰਜੀਹਾਂ"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"ਖਾਤੇ & ਪ੍ਰਾਈਵੇਸੀ"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">"ਪ੍ਰਗਟਾਅ & ਲੇਆਉਟਸ"</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"ਪ੍ਰਗਟਾਅ & ਲੇਆਉਟਸ"</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">"ਸੰਕੇਤ ਟਾਈਪਿੰਗ"</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"ਟੈਕਸਟ ਸੁਧਾਈ"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">"ਵਿਕਸਿਤ"</string>
|
||||
|
@ -190,4 +190,6 @@
|
|||
<string name="user_dict_settings_more_languages" msgid="7131268499685180461">"ਹੋਰ ਭਾਸ਼ਾਵਾਂ…"</string>
|
||||
<string name="user_dict_settings_delete" msgid="110413335187193859">"ਮਿਟਾਓ"</string>
|
||||
<string name="user_dict_fast_scroll_alphabet" msgid="5431919401558285473">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"ਸਿਸਟਮ ਭਾਸ਼ਾਵਾਂ ਦੀ ਵਰਤੋਂ ਕਰੋ"</string>
|
||||
<string name="select_input_method">"ਕੀ-ਬੋਰਡ ਬਦਲੋ"</string>
|
||||
</resources>
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">"Powiększ po naciśnięciu"</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"Ustawienia"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"Konta i prywatność"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">"Wygląd i układy"</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"Wygląd i układy"</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">"Pisanie gestami"</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"Korekta tekstu"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">"Zaawansowane"</string>
|
||||
|
@ -231,4 +231,6 @@
|
|||
<string name="amoled_mode_summary">Może zmniejszyć zużycie energii w zależności od technologii ekranu urządzenia</string>
|
||||
<string name="autospace_after_punctuation_summary">Automatyczne wstawianie spacji po znaku interpunkcyjnym podczas wpisywania nowego słowa</string>
|
||||
<string name="autospace_after_punctuation">Automatyczne wstawianie spacji po znaku interpunkcyjnym</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"Użyj języków systemu"</string>
|
||||
<string name="select_input_method">"Zmień klawiaturę"</string>
|
||||
</resources>
|
|
@ -5,7 +5,7 @@
|
|||
<string name="vibrate_on_keypress">Vibrar ao tocar nas teclas</string>
|
||||
<string name="sound_on_keypress">Som ao tocar nas teclas</string>
|
||||
<string name="use_contacts_for_spellchecking_option_summary">O corretor ortográfico usa entradas da sua lista de contatos</string>
|
||||
<string name="settings_screen_appearance">Aparência e Layouts</string>
|
||||
<string name="settings_screen_appearance_and_layouts">Aparência e Layouts</string>
|
||||
<string name="settings_screen_gesture">Escrita por Gestos</string>
|
||||
<string name="settings_screen_correction">Correção de Texto</string>
|
||||
<string name="settings_screen_advanced">Avançado</string>
|
||||
|
@ -214,4 +214,6 @@
|
|||
<string name="hint_add_to_dictionary_without_word">Toque novamente para salvar</string>
|
||||
<string name="autospace_after_punctuation">Espaço automático após pontuação</string>
|
||||
<string name="autospace_after_punctuation_summary">Inserir automaticamente espaço após pontuação ao digitar uma nova palavra</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"Usar idiomas do sistema"</string>
|
||||
<string name="select_input_method">"Alterar teclado"</string>
|
||||
</resources>
|
|
@ -25,7 +25,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">Mostrar popup de teclas</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"Preferências"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"Contas e privacidade"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">Aparência e esquemas</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">Aparência e esquemas</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">"Escrita com gestos"</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"Correção de texto"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">Avançado</string>
|
||||
|
@ -222,4 +222,6 @@
|
|||
<string name="theme_variant">Variante do tema</string>
|
||||
<string name="key_borders">Limite das teclas</string>
|
||||
<string name="android_spell_checker_settings">Definições de verificação ortográfica OpenBoard</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"Utilizar idiomas do sistema"</string>
|
||||
<string name="select_input_method">"Alterar teclado"</string>
|
||||
</resources>
|
|
@ -25,7 +25,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">Mostrar popup de teclas</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"Preferências"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"Contas e privacidade"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">Aparência e esquemas</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">Aparência e esquemas</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">"Escrita com gestos"</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"Correção de texto"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">"Avançado"</string>
|
||||
|
@ -222,4 +222,7 @@
|
|||
<string name="day_night_mode">Modo diurno/noturno automático</string>
|
||||
<string name="prefs_long_press_keyboard_to_change_lang">Alterar método de introdução com a tecla Espaço</string>
|
||||
<string name="space_trackpad">\'Trackpad\' na barra de espaço</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"Usar idiomas do sistema"</string>
|
||||
<string name="select_input_method">"Alterar teclado"</string>
|
||||
<string name="settings_screen_appearance">"Aparência"</string>
|
||||
</resources>
|
|
@ -28,7 +28,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">"Pop-up la apăsarea tastei"</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"Preferințe"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"Conturi și confidențialitate"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">"Aspect"</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"Aspect"</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">"Tastare gestuală"</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"Corectarea textului"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">"Avansate"</string>
|
||||
|
@ -190,4 +190,7 @@
|
|||
<string name="user_dict_settings_more_languages" msgid="7131268499685180461">"Mai multe limbi…"</string>
|
||||
<string name="user_dict_settings_delete" msgid="110413335187193859">"Ștergeți"</string>
|
||||
<string name="user_dict_fast_scroll_alphabet" msgid="5431919401558285473">" AĂÂBCDEFGHIÎJKLMNOPQRSȘTȚUVWXYZ"</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"Folosește limbile sistemului"</string>
|
||||
<string name="select_input_method">"Schimbați tastatura"</string>
|
||||
<string name="settings_screen_appearance">"Aspect"</string>
|
||||
</resources>
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">"Увеличивать при нажатии"</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"Настройки"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"Аккаунты"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">"Вид и раскладки"</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"Вид и раскладки"</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">"Непрерывный ввод"</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"Исправление текста"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">"Дополнительные настройки"</string>
|
||||
|
@ -250,4 +250,6 @@
|
|||
<string name="about_github_link" >Посмотреть на GitHub</string>
|
||||
<string name="license" >Лицензия с открытым исходным кодом</string>
|
||||
<string name="gnu_gpl" >GNU General Public License v3.0</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"Языки системы"</string>
|
||||
<string name="select_input_method">"Выбор раскладки"</string>
|
||||
</resources>
|
||||
|
|
4
app/src/main/res/values-sc-rIT/strings.xml
Normal file
4
app/src/main/res/values-sc-rIT/strings.xml
Normal file
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<string name="select_input_method">Càmbia su tecladu</string>
|
||||
</resources>
|
|
@ -28,7 +28,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">"යතුරු එබීම මත උත්පතනය"</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"අභිරුචි"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"ගිණුම් සහ රහස්යතාව"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">"පෙනුම සහ පිරිසැලසුම්"</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"පෙනුම සහ පිරිසැලසුම්"</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">"ඉංගිත ටයිප් කිරීම"</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"පෙළ නිවැරදි කිරීම"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">"උසස්"</string>
|
||||
|
@ -190,4 +190,7 @@
|
|||
<string name="user_dict_settings_more_languages" msgid="7131268499685180461">"තවත් භාෂා…"</string>
|
||||
<string name="user_dict_settings_delete" msgid="110413335187193859">"මකන්න"</string>
|
||||
<string name="user_dict_fast_scroll_alphabet" msgid="5431919401558285473">" ABCDEFGHIJKLMNOPQRSTUVWXYZ"</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"පද්ධති භාෂා භාවිත කරන්න"</string>
|
||||
<string name="select_input_method">"යතුරු පුවරු වෙනස් කිරීම"</string>
|
||||
<string name="settings_screen_appearance">"පෙනුම"</string>
|
||||
</resources>
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
<string name="popup_on_keypress" msgid="123894815723512944">"Detail znaku pri stlačení"</string>
|
||||
<string name="settings_screen_preferences" msgid="2696713156722014624">"Predvoľby"</string>
|
||||
<string name="settings_screen_accounts" msgid="2786418968536696670">"Účty a ochrana osobných údajov"</string>
|
||||
<string name="settings_screen_appearance" msgid="7358046399111611615">"Vzhľad a rozloženie"</string>
|
||||
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"Vzhľad a rozloženie"</string>
|
||||
<string name="settings_screen_gesture" msgid="8826372746901183556">"Písanie gestami"</string>
|
||||
<string name="settings_screen_correction" msgid="1616818407747682955">"Oprava textu"</string>
|
||||
<string name="settings_screen_advanced" msgid="7472408607625972994">"Rozšírené"</string>
|
||||
|
@ -206,4 +206,6 @@
|
|||
<string name="settings_category_suggestions">Návrhy</string>
|
||||
<string name="settings_category_experimental">Experimentálne</string>
|
||||
<string name="settings_category_miscellaneous">Ostatné</string>
|
||||
<string name="use_system_language_to_select_input_method_subtypes">"Použiť jazyky systému"</string>
|
||||
<string name="select_input_method">"Zmeniť klávesnicu"</string>
|
||||
</resources>
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue