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:
Helium314 2023-08-25 17:33:29 +02:00 committed by GitHub
parent e0c054ce09
commit f32395366d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
129 changed files with 1816 additions and 207 deletions

View file

@ -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"

View file

@ -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);
}
}

View file

@ -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() {

View file

@ -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 : "

View file

@ -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");

View file

@ -101,8 +101,6 @@ class AppearanceSettingsFragment : SubScreenFragment(), Preference.OnPreferenceC
super.onResume()
updateThemePreferencesState()
updateAfterPreferenceChanged()
CustomInputStyleSettingsFragment.updateCustomInputStylesSummary(
findPreference(Settings.PREF_CUSTOM_INPUT_STYLES))
}
override fun onPause() {

View file

@ -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

View file

@ -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()
}
}
}

View file

@ -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"

View file

@ -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

View file

@ -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();

View file

@ -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) {

View file

@ -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();

View file

@ -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));

View file

@ -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 = ":"

View file

@ -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) {

View file

@ -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 "";

View file

@ -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 {

View file

@ -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()
}

View file

@ -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);
}

View 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>

View 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>

View 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>

View 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>

View 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>

View 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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View 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>

View 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>

View file

@ -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 &amp; Məxfilik"</string>
<string name="settings_screen_appearance" msgid="7358046399111611615">"Görünüş &amp; Düzümlər"</string>
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"Görünüş &amp; 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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View 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>

View file

@ -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>

View file

@ -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 &amp; Datenschutz"</string>
<string name="settings_screen_appearance" msgid="7358046399111611615">"Darstellung &amp; Layouts"</string>
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"Darstellung &amp; 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>

View file

@ -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>

View file

@ -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 &amp; Privacy"</string>
<string name="settings_screen_appearance" msgid="7358046399111611615">"Appearance &amp; Layouts"</string>
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"Appearance &amp; 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>

View file

@ -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 &amp; Privacy"</string>
<string name="settings_screen_appearance" msgid="7358046399111611615">"Appearance &amp; Layouts"</string>
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"Appearance &amp; 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>

View file

@ -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 &amp; Privacy"</string>
<string name="settings_screen_appearance" msgid="7358046399111611615">"Appearance &amp; Layouts"</string>
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"Appearance &amp; 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>

View file

@ -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 &amp; Privacy"</string>
<string name="settings_screen_appearance" msgid="7358046399111611615">"Appearance &amp; Layouts"</string>
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"Appearance &amp; 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>

View file

@ -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 &amp; Privacy"</string>
<string name="settings_screen_appearance" msgid="7358046399111611615">"Appearance &amp; Layouts"</string>
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"Appearance &amp; 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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View 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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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 &amp; Privasi"</string>
<string name="settings_screen_appearance" msgid="7358046399111611615">"Tampilan &amp; Tata Letak"</string>
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"Tampilan &amp; 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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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;amp ភាពឯកជន"</string>
<string name="settings_screen_appearance" msgid="7358046399111611615">"រូបរាង &amp;amp ប្លង់"</string>
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"រូបរាង &amp;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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="select_input_method">Tastatur wiesselen</string>
</resources>

View file

@ -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">"​ລັກ​ສະ​ນະ &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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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 &amp; Privasi"</string>
<string name="settings_screen_appearance" msgid="7358046399111611615">"Penampilan &amp; Bentangan"</string>
<string name="settings_screen_appearance_and_layouts" msgid="7358046399111611615">"Penampilan &amp; 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>

View file

@ -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,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>

View file

@ -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>

View file

@ -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>

View 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>

View file

@ -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>

View 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>

View file

@ -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,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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="select_input_method">Càmbia su tecladu</string>
</resources>

View file

@ -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>

View file

@ -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